From 4547ba3ae7e0e5e6f7253bdcae50e101ed67b42f Mon Sep 17 00:00:00 2001 From: joshua-roberts Date: Fri, 16 Aug 2024 23:19:07 -0400 Subject: [PATCH] version 3.0.0 (#152) * policy event serializable refactor event package add json property value test add a timestamped policy event add getter/setter for hash remove events add setter methods for memory policy store cast to memory components funcexec can't be serialized add funcexec not serializable test expose tx in memory policy store add getter for tx events fix deserialize from pml update mysql connector dependency fix double call to verifySuperPolicy fix policy store deserialization fix mem tx and remove unused constants do not overwrite mem tx on reset add reset to policy and event implement reset add reset event saving progress update docs update tests update pml serialization saving serialization progress serialization tests updates fix tests move amin policy nodes to own enum file fix documentation references add node file access right checker test fix test config rename admin policy target node new test updates pml updates add delete tests remove optional token remove super bootstrapper and fix tests that use super user remove unused variable optimize imports rename policy classes oa constant fix doc link error add nist template files update readme remove comment add tests review tests constants and functions handled first move serialization package to policy fix json PML functions pml update for functions and constants remove println function invoke updates fix function returns and explain make memory policy get methods return unmodifiable objects modify graph interface to remove no property create methods and allow user attributes to be created without assignments update mysql connector update commons-lang version update commons-lang version to 3.13 update jackson-databind version to 2.15 remove jackson-databind dependency add neo4j embedded support add neo4j pdp add neo4j review tests create impl package some package refactoring package refactor rename events to operations and move to common package bump java version to 21 and remove serial uid saving progress on operations refactor pap methods small fixes from previous commit, still some test failures saving progress, compiles, look for TODOs saving progress before removing common package saving progress, pap tests pass add pdp tests save progress updates - serialization not working remove neo4j tests remove neo4j classes update jitpack java version to 21 saving progress before refactor saving progress with json before rebase fix errors from rebase small fix serialization and test fixes rename child -> ascendant and parent -> descendant to be more in line with standard fix sample pml modifier returns querier not query multiple input strings to deserialization operations refactor saving progress on function refactor create operations with operands add ReqCap update ops add generic to operation return update operation refactor operations saving before moving to named operations saving progress fix pml functions save fix patterns for obligations refactor expressions to not be operations saving change assign to to in tests pass before refactoring routines fix operations and routines add tests check statement does one ar at a time dep update pml patterns tests add to PML bootstrapper test add checks to pml methods in pdptx small fixes and docs some java docs move files in memory pkg fix memory pkg error small changes * remove comment * remove common pkg, move to pap * fix errors * readme * update pom.xml * update java version in github action --- .github/workflows/maven.yml | 4 +- .gitignore | 3 +- CODEMETA.yaml | 36 + CODEOWNERS | 9 + LICENSE.md | 35 + README.md | 165 +- fair-software.md | 297 + jitpack.yml | 4 +- pml/README.md | 268 - pom.xml | 58 +- sql/pm_core.sql | 8 +- src/main/java/gov/nist/csd/pm/epp/EPP.java | 57 +- .../gov/nist/csd/pm/epp/EventContext.java | 72 - .../gov/nist/csd/pm/epp/EventEmitter.java | 30 + .../gov/nist/csd/pm/epp/EventListener.java | 29 - .../gov/nist/csd/pm/epp/EventProcessor.java | 46 +- .../memory/pap/MemoryAccessQuerier.java} | 736 +- .../csd/pm/impl/memory/pap/MemoryPAP.java | 46 + .../impl/memory/pap/MemoryPolicyQuerier.java | 19 + .../memory/pap/store/MemoryGraphStore.java | 372 + .../pap/store/MemoryObligationsStore.java | 74 + .../pap/store/MemoryOperationsStore.java | 53 + .../impl/memory/pap/store/MemoryPolicy.java | 36 + .../memory/pap/store/MemoryPolicyStore.java | 91 + .../pap/store/MemoryProhibitionsStore.java | 96 + .../memory/pap/store/MemoryRoutinesStore.java | 40 + .../pm/impl/memory/pap/store/MemoryStore.java | 32 + .../pm/impl/memory/pap/store/MemoryTx.java | 75 + .../csd/pm/impl/memory/pap/store/TxCmd.java | 254 + .../impl/memory/pap/store/TxCmdTracker.java | 34 + .../memory/pap/store/TxRollbackSupport.java | 7 + .../csd/pm/impl/memory/pap/store/Vertex.java | 40 + .../memory/pap/store/VertexAttribute.java | 87 + .../pm/impl/memory/pap/store/VertexLeaf.java | 64 + .../memory/pap/store/VertexPolicyClass.java | 68 + .../memory/pap/store/VertexWithProps.java | 68 + src/main/java/gov/nist/csd/pm/pap/PAP.java | 204 +- .../gov/nist/csd/pm/pap/PAPDeserializer.java | 44 - .../java/gov/nist/csd/pm/pap/PAPGraph.java | 491 - .../gov/nist/csd/pm/pap/PAPObligations.java | 153 - .../gov/nist/csd/pm/pap/PAPProhibitions.java | 138 - .../nist/csd/pm/pap/PAPUserDefinedPML.java | 93 - .../java/gov/nist/csd/pm/pap/PolicyPoint.java | 58 + .../java/gov/nist/csd/pm/pap/PolicyStore.java | 11 - .../java/gov/nist/csd/pm/pap/SuperPolicy.java | 155 - .../nist/csd/pm/pap/admin/AdminPolicy.java | 51 + .../csd/pm/pap/admin/AdminPolicyNode.java | 36 + .../AdminAccessRightExistsException.java | 4 +- .../AdminPolicyVerificationException.java | 7 + .../AssignmentCausesLoopException.java | 9 + .../BootstrapExistingPolicyException.java | 7 + ...annotDeleteAdminPolicyConfigException.java | 7 + .../exception/DisconnectedNodeException.java | 12 + .../InvalidProhibitionSubjectException.java | 4 +- .../exception}/NodeDoesNotExistException.java | 4 +- .../exception/NodeHasAscendantsException.java | 7 + .../exception}/NodeNameExistsException.java | 2 +- .../NodeReferencedInObligationException.java | 8 +- .../NodeReferencedInProhibitionException.java | 8 +- .../NodesAlreadyAssignedException.java | 2 +- .../ObligationDoesNotExistException.java | 7 + .../ObligationNameExistsException.java | 7 + .../ObligationRuleNameExistsException.java | 7 + .../OperandsDoNotMatchException.java | 9 + .../OperationDoesNotExistException.java | 7 + .../exception/OperationExistsException.java | 7 + .../pm/pap/exception/PMBackendException.java | 18 + .../csd/pm/pap/exception/PMException.java | 21 + .../PMLConstantAlreadyDefinedException.java | 7 + .../PMLConstantNotDefinedException.java | 7 + .../PMLFunctionAlreadyDefinedException.java | 7 + .../PMLFunctionNotDefinedException.java | 9 + .../pm/pap/exception/PMRuntimeException.java | 17 + .../PolicyEntityDoesNotExistException.java | 7 + ...ibitionContainerDoesNotExistException.java | 4 +- .../ProhibitionDoesNotExistException.java | 7 + .../exception/ProhibitionExistsException.java | 7 + ...ohibitionSubjectDoesNotExistException.java | 4 +- .../exception}/RepObjectNotSetException.java | 4 +- .../RoutineDoesNotExistException.java | 7 + .../pap/exception/RoutineExistsException.java | 7 + .../UnknownAccessRightException.java | 4 +- .../exception/UnknownOperandException.java | 7 + .../exception/UnknownPatternException.java | 7 + .../exception}/UnknownTypeException.java | 4 +- .../pm/pap/executable/AdminExecutable.java | 28 + .../csd/pm/pap/executable/AdminExecutor.java | 11 + .../graph/dag/AllPathsShortCircuit.java | 2 +- .../dag/BreadthFirstGraphWalker.java | 71 +- .../dag/DepthFirstGraphWalker.java | 66 +- .../nist/csd/pm/pap/graph/dag/Direction.java | 6 + .../csd/pm/pap/graph/dag/GraphWalker.java | 12 + .../graph/dag}/NoopPropagator.java | 2 +- .../graph/dag/NoopShortCircuit.java | 2 +- .../graph/dag}/NoopVisitor.java | 2 +- .../nist/csd/pm/pap/graph/dag/Propagator.java | 15 + .../model => pap}/graph/dag/ShortCircuit.java | 2 +- .../graph/dag/SinglePathShortCircuit.java | 2 +- .../graph/dag/TargetDagResult.java | 4 +- .../csd/pm/pap/graph/dag/UserDagResult.java | 17 + .../nist/csd/pm/pap/graph/dag/Visitor.java | 8 + .../graph/nodes => pap/graph/node}/Node.java | 2 +- .../nodes => pap/graph/node}/NodeType.java | 4 +- .../nodes => pap/graph/node}/Properties.java | 2 +- .../graph/relationship/AccessRightSet.java | 25 + .../pm/pap/graph/relationship/Assignment.java | 47 + .../graph/relationship}/Association.java | 11 +- .../InvalidAssignmentException.java | 4 +- .../InvalidAssociationException.java | 4 +- .../graph/relationship}/Relationship.java | 18 +- .../nist/csd/pm/pap/memory/MemoryGraph.java | 513 - .../csd/pm/pap/memory/MemoryObligations.java | 99 - .../pap/memory/MemoryPolicyDeserializer.java | 117 - .../pm/pap/memory/MemoryPolicySerializer.java | 130 - .../csd/pm/pap/memory/MemoryPolicyStore.java | 135 - .../memory/MemoryPolicyStoreEventHandler.java | 20 - .../csd/pm/pap/memory/MemoryProhibitions.java | 126 - .../gov/nist/csd/pm/pap/memory/MemoryTx.java | 4 - .../pm/pap/memory/MemoryUserDefinedPML.java | 92 - .../gov/nist/csd/pm/pap/memory/Object.java | 82 - .../csd/pm/pap/memory/ObjectAttribute.java | 96 - .../nist/csd/pm/pap/memory/PolicyClass.java | 82 - .../gov/nist/csd/pm/pap/memory/TxCmd.java | 387 - .../gov/nist/csd/pm/pap/memory/TxEvents.java | 142 - .../pm/pap/memory/TxPolicyEventListener.java | 89 - .../nist/csd/pm/pap/memory/TxPolicyStore.java | 381 - .../java/gov/nist/csd/pm/pap/memory/User.java | 82 - .../nist/csd/pm/pap/memory/UserAttribute.java | 106 - .../gov/nist/csd/pm/pap/memory/Vertex.java | 25 - .../pap/modification/GraphModification.java | 130 + .../pm/pap/modification/GraphModifier.java | 487 + .../csd/pm/pap/modification/Modifier.java | 64 + .../modification/ObligationsModification.java | 35 + .../pap/modification/ObligationsModifier.java | 94 + .../modification/OperationsModification.java | 33 + .../pap/modification/OperationsModifier.java | 66 + .../pap/modification/PolicyModification.java | 38 + .../pm/pap/modification/PolicyModifier.java | 77 + .../ProhibitionsModification.java | 36 + .../modification/ProhibitionsModifier.java | 101 + .../modification/RoutinesModification.java | 25 + .../pm/pap/modification/RoutinesModifier.java | 35 + .../csd/pm/pap/mysql/MysqlConnection.java | 64 - .../gov/nist/csd/pm/pap/mysql/MysqlGraph.java | 534 - .../csd/pm/pap/mysql/MysqlObligations.java | 139 - .../pm/pap/mysql/MysqlPolicyDeserializer.java | 173 - .../pm/pap/mysql/MysqlPolicyException.java | 10 - .../pm/pap/mysql/MysqlPolicySerializer.java | 170 - .../csd/pm/pap/mysql/MysqlPolicyStore.java | 143 - .../csd/pm/pap/mysql/MysqlProhibitions.java | 280 - .../csd/pm/pap/mysql/MysqlUserDefinedPML.java | 167 - .../csd/pm/pap/mysql/PolicyResetSequence.java | 28 - .../csd/pm/pap/obligation/EventContext.java | 79 + .../csd/pm/pap/obligation/EventPattern.java | 140 + .../csd/pm/pap/obligation/Obligation.java | 96 + .../nist/csd/pm/pap/obligation/Response.java | 54 + .../gov/nist/csd/pm/pap/obligation/Rule.java | 45 + .../UnexpectedOperandTypeException.java | 9 + .../nist/csd/pm/pap/op/AdminAccessRights.java | 178 + .../nist/csd/pm/pap/op/AdminOperations.java | 67 + .../gov/nist/csd/pm/pap/op/Operation.java | 112 + .../nist/csd/pm/pap/op/PreparedOperation.java | 67 + .../nist/csd/pm/pap/op/PrivilegeChecker.java | 67 + .../nist/csd/pm/pap/op/graph/AssignOp.java | 39 + .../nist/csd/pm/pap/op/graph/AssociateOp.java | 40 + .../csd/pm/pap/op/graph/CreateNodeOp.java | 43 + .../pap/op/graph/CreateObjectAttributeOp.java | 26 + .../csd/pm/pap/op/graph/CreateObjectOp.java | 26 + .../pm/pap/op/graph/CreatePolicyClassOp.java | 38 + .../pap/op/graph/CreateUserAttributeOp.java | 27 + .../csd/pm/pap/op/graph/CreateUserOp.java | 26 + .../nist/csd/pm/pap/op/graph/DeassignOp.java | 39 + .../csd/pm/pap/op/graph/DeleteNodeOp.java | 45 + .../pap/op/graph/DeleteObjectAttributeOp.java | 9 + .../csd/pm/pap/op/graph/DeleteObjectOp.java | 9 + .../pm/pap/op/graph/DeletePolicyClassOp.java | 11 + .../pap/op/graph/DeleteUserAttributeOp.java | 10 + .../csd/pm/pap/op/graph/DeleteUserOp.java | 10 + .../csd/pm/pap/op/graph/DissociateOp.java | 38 + .../gov/nist/csd/pm/pap/op/graph/GraphOp.java | 29 + .../pm/pap/op/graph/SetNodePropertiesOp.java | 38 + .../pap/op/obligation/CreateObligationOp.java | 28 + .../pap/op/obligation/DeleteObligationOp.java | 22 + .../pm/pap/op/obligation/ObligationOp.java | 65 + .../op/operation/CreateAdminOperationOp.java | 38 + .../op/operation/DeleteAdminOperationOp.java | 36 + .../op/operation/SetResourceOperationsOp.java | 38 + .../op/prohibition/CreateProhibitionOp.java | 31 + .../op/prohibition/DeleteProhibitionOp.java | 24 + .../pm/pap/op/prohibition/ProhibitionOp.java | 56 + .../pap/op/routine/CreateAdminRoutineOp.java | 40 + .../pap/op/routine/DeleteAdminRoutineOp.java | 37 + .../gov/nist/csd/pm/pap/pml/CompiledPML.java | 13 + .../gov/nist/csd/pm/pap/pml/PMLCompiler.java | 125 + .../nist/csd/pm/pap/pml/PMLErrorHandler.java | 25 + .../gov/nist/csd/pm/pap/pml/antlr/PMLLexer.g4 | 176 + .../nist/csd/pm/pap/pml/antlr/PMLLexer.interp | 278 + .../nist/csd/pm/pap/pml/antlr/PMLLexer.java | 679 + .../nist/csd/pm/pap/pml/antlr/PMLLexer.tokens | 158 + .../nist/csd/pm/pap/pml/antlr/PMLParser.g4 | 221 + .../csd/pm/pap/pml/antlr/PMLParser.interp | 249 + .../nist/csd/pm/pap/pml/antlr/PMLParser.java | 6127 ++ .../csd/pm/pap/pml/antlr/PMLParser.tokens | 158 + .../pml/antlr/PMLParserBaseListener.java} | 453 +- .../pml/antlr/PMLParserBaseVisitor.java} | 254 +- .../pml/antlr/PMLParserListener.java} | 628 +- .../pml/antlr/PMLParserVisitor.java} | 348 +- .../pml/compiler/Position.java | 2 +- .../pml/compiler/Variable.java | 4 +- .../pml/compiler/error/CompileError.java | 19 +- .../pml/compiler/error/ErrorLog.java | 8 +- .../compiler/visitor/AssignStmtVisitor.java | 22 + .../visitor/AssociateStmtVisitor.java | 17 +- .../compiler/visitor/BreakStmtVisitor.java | 21 +- .../visitor/CheckStatementBlockVisitor.java | 33 + .../visitor/CheckStatementVisitor.java | 21 + .../compiler/visitor/ContinueStmtVisitor.java | 18 +- .../visitor/CreateNonPCStmtVisitor.java | 38 + .../visitor/CreateObligationStmtVisitor.java | 23 +- .../visitor/CreatePolicyStmtVisitor.java | 21 + .../visitor/CreateProhibitionStmtVisitor.java | 37 + .../visitor/CreateRuleStmtVisitor.java | 285 + .../compiler/visitor/DeassignStmtVisitor.java | 23 + .../visitor/DeleteRuleStmtVisitor.java | 18 +- .../compiler/visitor/DeleteStmtVisitor.java | 43 + .../visitor/DissociateStmtVisitor.java | 17 +- .../compiler/visitor/ForeachStmtVisitor.java | 77 + .../visitor/FunctionDefinitionVisitor.java | 183 + .../visitor/FunctionInvokeStmtVisitor.java | 98 + .../visitor/FunctionReturnStmtVisitor.java | 51 + .../pml/compiler/visitor/IfStmtVisitor.java | 38 +- .../pml/compiler/visitor/PMLBaseVisitor.java | 13 + .../pap/pml/compiler/visitor/PMLVisitor.java | 129 + .../visitor/SetNodePropertiesStmtVisitor.java | 17 +- .../SetResourceOperationsStmtVisitor.java | 28 + .../visitor/StatementBlockVisitor.java | 112 + .../compiler/visitor/StatementVisitor.java | 127 + .../pml/compiler/visitor/VarStmtVisitor.java | 87 + .../pm/pap/pml/context/ExecutionContext.java | 110 + .../pm/pap/pml/context/VisitorContext.java | 48 + .../exception/PMLCompilationException.java | 17 +- .../PMLCompilationRuntimeException.java | 34 + .../pml/exception/PMLExecutionException.java | 18 + .../executable/PMLExecutableSignature.java | 72 + .../operation/PMLBuiltinOperations.java | 63 + .../executable/operation/PMLOperation.java | 110 + .../operation/PMLOperationSignature.java | 60 + .../operation/PMLOperationWrapper.java | 54 + .../operation/PMLPreparedOperation.java | 20 + .../operation/PMLStmtsOperation.java | 93 + .../operation/PMLStmtsOperationSignature.java | 43 + .../executable/operation/builtin/Append.java | 38 + .../operation/builtin/AppendAll.java | 38 + .../executable/operation/builtin/Concat.java | 43 + .../operation/builtin/Contains.java | 38 + .../operation/builtin/ContainsKey.java | 38 + .../executable/operation/builtin/Equals.java | 42 + .../builtin/GetAdjacentAscendants.java | 46 + .../builtin/GetAdjacentDescendants.java | 47 + .../builtin/GetAssociationsWithSource.java | 46 + .../builtin/GetAssociationsWithTarget.java | 47 + .../executable/operation/builtin/GetNode.java | 40 + .../operation/builtin/GetNodeProperties.java | 47 + .../operation/builtin/GetNodeType.java | 38 + .../operation/builtin/HasPropertyKey.java | 40 + .../operation/builtin/HasPropertyValue.java | 47 + .../operation/builtin/NodeExists.java | 38 + .../executable/operation/builtin/Search.java | 51 + .../pml/executable/routine/PMLRoutine.java | 57 + .../routine/PMLRoutineSignature.java | 28 + .../executable/routine/PMLRoutineWrapper.java | 43 + .../executable/routine/PMLStmtsRoutine.java | 64 + .../pap/pml/expression/EqualsExpression.java | 69 + .../csd/pm/pap/pml/expression/Expression.java | 121 + .../expression/FunctionInvokeExpression.java | 206 + .../pap/pml/expression/LogicalExpression.java | 81 + .../pap/pml/expression/NegatedExpression.java | 64 + .../pap/pml/expression/ParenExpression.java | 61 + .../pm/pap/pml/expression/PlusExpression.java | 65 + .../pml/expression/literal/ArrayLiteral.java | 89 + .../pml/expression/literal/BoolLiteral.java | 61 + .../pap/pml/expression/literal/Literal.java | 13 + .../expression/literal/LiteralVisitor.java | 134 + .../pml/expression/literal/MapLiteral.java | 89 + .../pml/expression/literal/StringLiteral.java | 63 + .../reference/ReferenceByBracketIndex.java | 60 + .../reference/ReferenceByDotIndex.java | 65 + .../expression/reference/ReferenceByID.java | 60 + .../reference/ReferenceByIndex.java | 8 + .../reference/VariableReference.java | 76 + .../pm/pap/pml/pattern/OperationPattern.java | 57 + .../nist/csd/pm/pap/pml/pattern/Pattern.java | 48 + .../pm/pap/pml/pattern/ReferencedNodes.java | 27 + .../pattern/operand/AnyOperandPattern.java | 39 + .../pml/pattern/operand/InOperandPattern.java | 51 + .../LogicalOperandPatternExpression.java | 63 + .../NegateOperandPatternExpression.java | 48 + .../pattern/operand/NodeOperandPattern.java | 50 + .../operand/OperandPatternExpression.java | 6 + .../ParenOperandPatternExpression.java | 48 + .../pml/pattern/subject/InSubjectPattern.java | 51 + .../LogicalSubjectPatternExpression.java | 63 + .../NegateSubjectPatternExpression.java | 48 + .../ParenSubjectPatternExpression.java | 48 + .../subject/ProcessSubjectPattern.java | 49 + .../pml/pattern/subject/SubjectPattern.java | 63 + .../subject/SubjectPatternExpression.java | 7 + .../pml/pattern/subject/UsernamePattern.java | 50 + .../pm/pap/pml/scope/CompileGlobalScope.java | 41 + .../pm/pap/pml/scope/ExecuteGlobalScope.java | 74 + ...unctionAlreadyDefinedInScopeException.java | 2 +- .../csd/pm/pap/pml/scope/GlobalScope.java | 67 + .../nist/csd/pm/pap/pml/scope/LocalScope.java | 101 + .../pm/pap/pml/scope/PMLScopeException.java | 9 + .../gov/nist/csd/pm/pap/pml/scope/Scope.java | 103 + .../UnknownFunctionInScopeException.java | 2 +- .../UnknownVariableInScopeException.java | 9 + ...ariableAlreadyDefinedInScopeException.java | 2 +- .../pm/pap/pml/statement/BreakStatement.java | 31 + .../pap/pml/statement/ContinueStatement.java | 31 + .../pap/pml/statement/ControlStatement.java | 15 + .../pap/pml/statement/ForeachStatement.java | 98 + .../statement/FunctionReturnStatement.java | 68 + .../csd/pm/pap/pml/statement/IfStatement.java | 102 + .../pm/pap/pml/statement/PMLStatement.java | 5 + .../pap/pml/statement/PMLStatementBlock.java | 65 + .../pml/statement/PMLStatementExecutable.java | 12 + .../statement/PMLStatementSerializable.java | 19 + .../statement/ShortDeclarationStatement.java | 67 + .../VariableAssignmentStatement.java | 89 + .../VariableDeclarationStatement.java | 89 + .../statement/operation/AssignStatement.java | 59 + .../operation/AssociateStatement.java | 64 + .../statement/operation/CheckStatement.java | 76 + .../operation/CreateFunctionStatement.java | 10 + .../operation/CreateNonPCStatement.java | 79 + .../operation/CreateObligationStatement.java | 113 + .../operation/CreateOperationStatement.java | 65 + .../operation/CreatePolicyStatement.java | 48 + .../operation/CreateProhibitionStatement.java | 152 + .../operation/CreateRoutineStatement.java | 65 + .../operation/CreateRuleStatement.java | 187 + .../operation/DeassignStatement.java | 57 + .../operation/DeleteRuleStatement.java | 103 + .../statement/operation/DeleteStatement.java | 84 + .../operation/DissociateStatement.java | 51 + .../operation/OperationStatement.java | 46 + .../operation/SetNodePropertiesStatement.java | 57 + .../SetResourceOperationsStatement.java | 55 + .../expression => pap/pml/type}/Type.java | 58 +- .../nist/csd/pm/pap/pml/value/ArrayValue.java | 55 + .../nist/csd/pm/pap/pml/value/BoolValue.java | 45 + .../nist/csd/pm/pap/pml/value/BreakValue.java | 24 + .../pm/pap/pml/value/ComplementedValue.java | 77 + .../csd/pm/pap/pml/value/ContinueValue.java | 24 + .../nist/csd/pm/pap/pml/value/MapValue.java | 55 + .../csd/pm/pap/pml/value/PatternValue.java | 48 + .../pm/pap/pml/value/ProhibitionValue.java | 47 + .../csd/pm/pap/pml/value/ReturnValue.java | 47 + .../nist/csd/pm/pap/pml/value/RuleValue.java | 47 + .../csd/pm/pap/pml/value/StringValue.java | 45 + .../gov/nist/csd/pm/pap/pml/value/Value.java | 145 + .../nist/csd/pm/pap/pml/value/VoidValue.java | 26 + .../pap/prohibition/ContainerCondition.java | 58 + .../prohibition/Prohibition.java | 68 +- .../prohibition/ProhibitionSubject.java | 17 +- .../nist/csd/pm/pap/query/AccessQuerier.java | 14 + .../nist/csd/pm/pap/query/AccessQuery.java | 25 + .../query/AccessRightResolver.java} | 119 +- .../nist/csd/pm/pap/query/GraphQuerier.java | 115 + .../gov/nist/csd/pm/pap/query/GraphQuery.java | 140 + .../csd/pm/pap/query/ObligationsQuerier.java | 53 + .../csd/pm/pap/query/ObligationsQuery.java | 45 + .../csd/pm/pap/query/OperationsQuerier.java | 39 + .../csd/pm/pap/query/OperationsQuery.java | 15 + .../nist/csd/pm/pap/query/PolicyQuerier.java | 54 + .../nist/csd/pm/pap/query/PolicyQuery.java | 11 + .../csd/pm/pap/query/ProhibitionsQuerier.java | 81 + .../csd/pm/pap/query/ProhibitionsQuery.java | 39 + .../gov/nist/csd/pm/pap/query/Querier.java | 16 + .../csd/pm/pap/query/RoutinesQuerier.java | 33 + .../nist/csd/pm/pap/query/RoutinesQuery.java | 13 + .../access => pap/query}/UserContext.java | 2 +- .../audit => pap/query/explain}/EdgePath.java | 4 +- .../csd/pm/pap/query/explain/Explain.java | 115 + .../audit => pap/query/explain}/Path.java | 31 +- .../pap/query/explain/PolicyClassExplain.java | 56 + .../gov/nist/csd/pm/pap/routine/Routine.java | 12 + .../pap/serialization/PolicyDeserializer.java | 11 + .../pap/serialization/PolicySerializer.java | 10 + .../serialization/json/JSONAssociation.java | 34 + .../pap/serialization/json/JSONConstant.java | 5 + .../serialization/json/JSONDeserializer.java | 158 + .../pm/pap/serialization/json/JSONGraph.java | 64 + .../pm/pap/serialization/json/JSONNode.java | 75 + .../pm/pap/serialization/json/JSONPolicy.java | 87 + .../serialization/json/JSONPolicyClass.java | 25 + .../serialization/json/JSONSerializer.java | 185 + .../serialization/pml/PMLDeserializer.java | 14 + .../pap/serialization/pml/PMLSerializer.java | 280 + .../gov/nist/csd/pm/pap/store/GraphStore.java | 37 + .../nist/csd/pm/pap/store/GraphStoreBFS.java | 26 + .../nist/csd/pm/pap/store/GraphStoreDFS.java | 27 + .../csd/pm/pap/store/ObligationsStore.java | 10 + .../csd/pm/pap/store/OperationsStore.java | 9 + .../nist/csd/pm/pap/store/PolicyStore.java | 15 + .../csd/pm/pap/store/ProhibitionsStore.java | 25 + .../nist/csd/pm/pap/store/RoutinesStore.java | 9 + .../tx/TransactionNotStartedException.java | 9 + .../pm/{policy => pap}/tx/Transactional.java | 4 +- .../{policy => pap}/tx/TxCommitException.java | 4 +- .../csd/pm/{policy => pap}/tx/TxRunner.java | 4 +- .../nist/csd/pm/pdp/AccessAdjudication.java | 14 + .../csd/pm/pdp/AdminAdjudicationResponse.java | 44 + .../java/gov/nist/csd/pm/pdp/Decision.java | 6 + .../csd/pm/pdp/EventResponseEvaluation.java | 10 + .../gov/nist/csd/pm/pdp/OperationRequest.java | 6 + src/main/java/gov/nist/csd/pm/pdp/PDP.java | 228 +- .../gov/nist/csd/pm/pdp/PDPEventEmitter.java | 34 + .../nist/csd/pm/pdp/PDPExecutionContext.java | 70 + .../java/gov/nist/csd/pm/pdp/PDPGraph.java | 314 - .../gov/nist/csd/pm/pdp/PDPObligations.java | 141 - .../gov/nist/csd/pm/pdp/PDPProhibitions.java | 133 - src/main/java/gov/nist/csd/pm/pdp/PDPTx.java | 160 + .../java/gov/nist/csd/pm/pdp/PDPTxRunner.java | 7 + .../nist/csd/pm/pdp/PDPUserDefinedPML.java | 100 - .../gov/nist/csd/pm/pdp/PMLBootstrapper.java | 36 + .../nist/csd/pm/pdp/PolicyBootstrapper.java | 10 + .../pm/pdp/ResourceAdjudicationResponse.java | 62 + .../gov/nist/csd/pm/pdp/RoutineRequest.java | 6 + .../pdp/adjudicator/AccessRightChecker.java | 46 - .../csd/pm/pdp/adjudicator/Adjudicator.java | 70 - .../pm/pdp/adjudicator/GraphAdjudicator.java | 450 - .../adjudicator/ObligationsAdjudicator.java | 137 - .../adjudicator/ProhibitionsAdjudicator.java | 155 - .../UserDefinedPMLAdjudicator.java | 69 - .../exception}/UnauthorizedException.java | 5 +- .../csd/pm/pdp/memory/BulkPolicyReviewer.java | 126 - .../gov/nist/csd/pm/pdp/memory/MemoryPDP.java | 76 - .../GraphModificationAdjudicator.java | 154 + .../ObligationsModificationAdjudicator.java | 57 + .../OperationsModificationAdjudicator.java | 60 + .../PolicyModificationAdjudicator.java | 51 + .../ProhibitionsModificationAdjudicator.java | 65 + .../RoutinesModificationAdjudicator.java | 48 + .../pm/pdp/query/AccessQueryAdjudicator.java | 110 + .../pm/pdp/query/GraphQueryAdjudicator.java | 184 + .../query/ObligationsQueryAdjudicator.java | 97 + .../pdp/query/OperationsQueryAdjudicator.java | 49 + .../pm/pdp/query/PolicyQueryAdjudicator.java | 55 + .../query/ProhibitionsQueryAdjudicator.java | 108 + .../pdp/query/RoutinesQueryAdjudicator.java | 39 + .../java/gov/nist/csd/pm/policy/Graph.java | 241 - .../gov/nist/csd/pm/policy/Obligations.java | 62 - .../java/gov/nist/csd/pm/policy/Policy.java | 12 - .../csd/pm/policy/PolicyDeserializer.java | 13 - .../nist/csd/pm/policy/PolicySerializer.java | 11 - .../gov/nist/csd/pm/policy/Prohibitions.java | 79 - .../nist/csd/pm/policy/UserDefinedPML.java | 69 - .../pm/policy/events/AddConstantEvent.java | 27 - .../pm/policy/events/AddFunctionEvent.java | 21 - .../csd/pm/policy/events/AssignAllEvent.java | 27 - .../csd/pm/policy/events/AssignEvent.java | 25 - .../csd/pm/policy/events/AssignToEvent.java | 25 - .../csd/pm/policy/events/AssociateEvent.java | 33 - .../policy/events/BasePolicyEventHandler.java | 185 - .../csd/pm/policy/events/BeginTxEvent.java | 8 - .../csd/pm/policy/events/CommitTxEvent.java | 11 - .../csd/pm/policy/events/CreateNodeEvent.java | 48 - .../events/CreateObjectAttributeEvent.java | 16 - .../pm/policy/events/CreateObjectEvent.java | 16 - .../policy/events/CreateObligationEvent.java | 36 - .../policy/events/CreatePolicyClassEvent.java | 16 - .../policy/events/CreateProhibitionEvent.java | 49 - .../events/CreateUserAttributeEvent.java | 16 - .../csd/pm/policy/events/CreateUserEvent.java | 16 - .../pm/policy/events/DeassignAllEvent.java | 27 - .../events/DeassignAllFromAndDeleteEvent.java | 19 - .../csd/pm/policy/events/DeassignEvent.java | 25 - .../pm/policy/events/DeassignFromEvent.java | 25 - .../csd/pm/policy/events/DeleteNodeEvent.java | 19 - .../policy/events/DeleteObligationEvent.java | 21 - .../policy/events/DeleteProhibitionEvent.java | 21 - .../csd/pm/policy/events/DissociateEvent.java | 25 - .../csd/pm/policy/events/PolicyEvent.java | 7 - .../pm/policy/events/PolicyEventEmitter.java | 9 - .../pm/policy/events/PolicyEventHandler.java | 109 - .../pm/policy/events/PolicyEventListener.java | 9 - .../nist/csd/pm/policy/events/PolicySync.java | 9 - .../events/PolicySynchronizationEvent.java | 21 - .../pm/policy/events/RemoveConstantEvent.java | 19 - .../pm/policy/events/RemoveFunctionEvent.java | 19 - .../csd/pm/policy/events/RollbackTxEvent.java | 22 - .../policy/events/SetNodePropertiesEvent.java | 27 - .../events/SetResourceAccessRightsEvent.java | 21 - .../policy/events/UpdateObligationEvent.java | 36 - .../policy/events/UpdateProhibitionEvent.java | 49 - .../ConstantAlreadyDefinedException.java | 7 - .../exceptions/DisconnectedNodeException.java | 7 - .../exceptions/EventProcessorException.java | 18 - .../FunctionAlreadyDefinedException.java | 7 - .../policy/exceptions/NoParentException.java | 7 - .../exceptions/NodeHasChildrenException.java | 7 - .../ObligationDoesNotExistException.java | 7 - .../exceptions/ObligationExistsException.java | 7 - .../csd/pm/policy/exceptions/PMException.java | 36 - .../policy/exceptions/PMRuntimeException.java | 8 - .../ProhibitionDoesNotExistException.java | 7 - .../ProhibitionExistsException.java | 7 - .../TransactionNotStartedException.java | 7 - .../nist/csd/pm/policy/json/JSONGraph.java | 56 - .../nist/csd/pm/policy/json/JSONPolicy.java | 57 - .../pm/policy/json/JSONUserDefinedPML.java | 35 - .../policy/model/access/AccessRightSet.java | 19 - .../model/access/AdminAccessRights.java | 170 - .../csd/pm/policy/model/audit/Explain.java | 57 - .../pm/policy/model/audit/PolicyClass.java | 35 - .../pm/policy/model/audit/ResolvedPath.java | 34 - .../policy/model/graph/dag/UserDagResult.java | 12 - .../graph/dag/propagator/Propagator.java | 14 - .../model/graph/dag/visitor/Visitor.java | 8 - .../model/graph/dag/walker/Direction.java | 6 - .../model/graph/dag/walker/GraphWalker.java | 13 - .../model/graph/relationships/Assignment.java | 46 - .../policy/model/obligation/Obligation.java | 118 - .../pm/policy/model/obligation/Response.java | 85 - .../csd/pm/policy/model/obligation/Rule.java | 80 - .../model/obligation/event/EventPattern.java | 72 - .../model/obligation/event/EventSubject.java | 110 - .../model/obligation/event/Performs.java | 23 - .../policy/model/obligation/event/Target.java | 106 - .../model/prohibition/ContainerCondition.java | 18 - .../pm/policy/pml/PMLBuiltinConstants.java | 56 - .../pm/policy/pml/PMLBuiltinFunctions.java | 77 - .../nist/csd/pm/policy/pml/PMLCompiler.java | 62 - .../nist/csd/pm/policy/pml/PMLContext.java | 62 - .../nist/csd/pm/policy/pml/PMLExecutable.java | 12 - .../nist/csd/pm/policy/pml/PMLExecutor.java | 88 - .../nist/csd/pm/policy/pml/PMLFormatter.java | 409 - .../csd/pm/policy/pml/PMLSerializable.java | 12 - .../nist/csd/pm/policy/pml/PMLSerializer.java | 273 - .../gov/nist/csd/pm/policy/pml/antlr/PML.g4 | 281 - .../nist/csd/pm/policy/pml/antlr/PML.interp | 226 - .../nist/csd/pm/policy/pml/antlr/PML.tokens | 96 - .../csd/pm/policy/pml/antlr/PMLLexer.interp | 257 - .../csd/pm/policy/pml/antlr/PMLLexer.java | 383 - .../csd/pm/policy/pml/antlr/PMLLexer.tokens | 96 - .../csd/pm/policy/pml/antlr/PMLParser.java | 4689 -- .../compiler/visitor/AssignStmtVisitor.java | 25 - .../visitor/CreateAttrStmtVisitor.java | 28 - .../visitor/CreatePolicyStmtVisitor.java | 23 - .../visitor/CreateProhibitionStmtVisitor.java | 49 - .../visitor/CreateRuleStmtVisitor.java | 124 - .../CreateUserOrObjectStmtVisitor.java | 28 - .../compiler/visitor/DeassignStmtVisitor.java | 25 - .../compiler/visitor/DeleteStmtVisitor.java | 45 - .../compiler/visitor/ForRangeStmtVisitor.java | 52 - .../compiler/visitor/ForeachStmtVisitor.java | 79 - .../visitor/FunctionDefinitionVisitor.java | 150 - .../visitor/FunctionInvokeVisitor.java | 91 - .../visitor/FunctionReturnStmtVisitor.java | 46 - .../compiler/visitor/LiteralExprVisitor.java | 167 - .../pml/compiler/visitor/PolicyVisitor.java | 30 - .../SetResourceAccessRightsStmtVisitor.java | 31 - .../compiler/visitor/StatementVisitor.java | 89 - .../pml/compiler/visitor/VarStmtVisitor.java | 44 - .../visitor/VariableReferenceVisitor.java | 113 - .../csd/pm/policy/pml/functions/Append.java | 29 - .../pm/policy/pml/functions/AppendAll.java | 29 - .../pm/policy/pml/functions/AssignAll.java | 34 - .../csd/pm/policy/pml/functions/Concat.java | 31 - .../csd/pm/policy/pml/functions/Contains.java | 30 - .../pm/policy/pml/functions/ContainsKey.java | 29 - .../pm/policy/pml/functions/DeassignAll.java | 34 - .../functions/DeassignAllFromAndDelete.java | 25 - .../csd/pm/policy/pml/functions/Equals.java | 29 - .../functions/GetAssociationsWithSource.java | 34 - .../functions/GetAssociationsWithTarget.java | 34 - .../pm/policy/pml/functions/GetChildren.java | 32 - .../csd/pm/policy/pml/functions/GetNode.java | 27 - .../pml/functions/GetNodeProperties.java | 34 - .../pm/policy/pml/functions/GetNodeType.java | 26 - .../pm/policy/pml/functions/GetParents.java | 32 - .../pml/functions/GetProhibitionsFor.java | 34 - .../policy/pml/functions/HasPropertyKey.java | 29 - .../pml/functions/HasPropertyValue.java | 36 - .../csd/pm/policy/pml/functions/Length.java | 31 - .../pm/policy/pml/functions/NodeExists.java | 22 - .../csd/pm/policy/pml/functions/NumToStr.java | 22 - .../csd/pm/policy/pml/functions/Search.java | 44 - .../pml/model/context/ExecutionContext.java | 60 - .../pml/model/context/VisitorContext.java | 27 - .../exception/PMLExecutionException.java | 9 - .../pml/model/expression/ArrayLiteral.java | 64 - .../model/expression/CompareExpression.java | 48 - .../pml/model/expression/EntryReference.java | 44 - .../policy/pml/model/expression/Literal.java | 179 - .../model/expression/LogicalExpression.java | 51 - .../pml/model/expression/MapLiteral.java | 64 - .../pm/policy/pml/model/expression/Value.java | 436 - .../model/expression/VariableReference.java | 129 - .../pml/model/function/FormalArgument.java | 21 - .../pml/model/function/FunctionExecutor.java | 13 - .../pml/model/scope/PMLScopeException.java | 9 - .../csd/pm/policy/pml/model/scope/Scope.java | 225 - .../UnknownVariableInScopeException.java | 9 - .../policy/pml/statement/AssignStatement.java | 67 - .../pml/statement/AssociateStatement.java | 73 - .../policy/pml/statement/BreakStatement.java | 18 - .../pml/statement/ContinueStatement.java | 18 - .../pml/statement/CreateAttrStatement.java | 102 - .../statement/CreateObligationStatement.java | 178 - .../pml/statement/CreatePolicyStatement.java | 48 - .../statement/CreateProhibitionStatement.java | 167 - .../pml/statement/CreateRuleStatement.java | 329 - .../CreateUserOrObjectStatement.java | 100 - .../pml/statement/DeassignStatement.java | 70 - .../pml/statement/DeleteRuleStatement.java | 64 - .../policy/pml/statement/DeleteStatement.java | 80 - .../pml/statement/DissociateStatement.java | 55 - .../pm/policy/pml/statement/Expression.java | 242 - .../pml/statement/ForRangeStatement.java | 77 - .../pml/statement/ForeachStatement.java | 119 - .../FunctionDefinitionStatement.java | 175 - .../FunctionInvocationStatement.java | 105 - .../pml/statement/FunctionReturnStmt.java | 60 - .../pm/policy/pml/statement/IfStatement.java | 116 - .../pm/policy/pml/statement/PMLStatement.java | 18 - .../statement/SetNodePropertiesStatement.java | 62 - .../SetResourceAccessRightsStatement.java | 43 - .../pm/policy/pml/statement/VarStatement.java | 66 - .../csd/pm/policy/review/AccessReview.java | 27 - .../csd/pm/policy/review/GraphReview.java | 13 - .../pm/policy/review/ObligationsReview.java | 19 - .../csd/pm/policy/review/PolicyReview.java | 5 - .../pm/policy/review/ProhibitionsReview.java | 14 - .../java/gov/nist/csd/pm/SamplePolicy.java | 20 - .../common/obligation/EventPatternTest.java | 230 + .../pm/common/obligation/ObligationTest.java | 83 + .../csd/pm/common/tx/TxHandlerRunnerTest.java | 34 + .../java/gov/nist/csd/pm/epp/EPPTest.java | 480 +- .../csd/pm/integration/IntegrationTest.java | 89 + .../memory/pap/MemoryAccessQuerierTest.java | 14 + .../memory/pap/MemoryGraphModifierTest.java | 14 + .../pm/memory/pap/MemoryGraphQuerierTest.java | 14 + .../pap/MemoryObligationsModifierTest.java | 14 + .../pap/MemoryObligationsQuerierTest.java | 15 + .../pap/MemoryOperationsModifierTest.java | 13 + .../memory/pap/MemoryOperationsQueryTest.java | 13 + .../nist/csd/pm/memory/pap/MemoryPAPTest.java | 13 + .../pap/MemoryProhibitionsModifierTest.java | 14 + .../pap/MemoryProhibitionsQuerierTest.java | 14 + .../pap/MemoryRoutinesModifierTest.java | 13 + .../memory/pap/MemoryRoutinesQuerierTest.java | 13 + .../pap/dag/BreadthFirstGraphWalkerTest.java | 103 + ...epthFirstGraphModificationWalkerTest.java} | 58 +- .../gov/nist/csd/pm/pap/AccessRightTest.java | 70 - .../java/gov/nist/csd/pm/pap/PAPTest.java | 1959 +- .../nist/csd/pm/pap/PAPTestInitializer.java | 16 + .../gov/nist/csd/pm/pap/PolicyEventTest.java | 124 - .../gov/nist/csd/pm/pap/SuperPolicyTest.java | 227 - .../nist/csd/pm/pap/memory/MemoryPAPTest.java | 25 - .../memory/MemoryPolicyDeserializerTest.java | 28 - .../pm/pap/memory/MemoryPolicyStoreTest.java | 243 - .../dag/BreadthFirstGraphWalkerTest.java | 99 - .../pap/modification/GraphModifierTest.java | 882 + .../modification/ObligationsModifierTest.java | 323 + .../modification/OperationsModifierTest.java | 91 + .../ProhibitionsModifierTest.java | 198 + .../modification/RoutinesModifierTest.java | 177 + .../nist/csd/pm/pap/mysql/MysqlPAPTest.java | 80 - .../mysql/MysqlPolicyDeserializerTest.java | 55 - .../nist/csd/pm/pap/mysql/MysqlTestEnv.java | 127 - .../gov/nist/csd/pm/pap/op/OperationTest.java | 35 + .../csd/pm/pap/op/PreparedOperationTest.java | 47 + .../pap/op/obligation/ObligationOpTest.java | 51 + .../nist/csd/pm/pap/pml/ExecutionTest.java | 479 + .../gov/nist/csd/pm/pap/pml/FunctionTest.java | 70 + .../csd/pm/pap/pml/PMLContextVisitor.java | 228 + .../java/gov/nist/csd/pm/pap/pml/PMLTest.java | 179 + .../java/gov/nist/csd/pm/pap/pml/PMLUtil.java | 32 + .../visitor/AssignStmtVisitorTest.java | 54 + .../visitor/AssociateStmtVisitorTest.java | 63 + .../visitor/BreakStmtVisitorTest.java | 53 + .../compiler/visitor/CompilerTestUtil.java | 30 + .../visitor/ContinueStmtVisitorTest.java | 53 + .../visitor/CreateNonPCStmtVisitorTest.java | 66 + .../CreateObligationStmtVisitorTest.java | 49 + .../visitor/CreatePolicyStmtVisitorTest.java | 62 + .../CreateProhibitionStmtVisitorTest.java | 97 + .../visitor/CreateRuleStmtVisitorTest.java | 257 + .../visitor/DeassignStmtVisitorTest.java | 54 + .../visitor/DeleteRuleStmtVisitorTest.java | 53 + .../visitor/DeleteStmtVisitorTest.java | 77 + .../visitor/DissociateStmtVisitorTest.java | 53 + .../visitor/ForeachStmtVisitorTest.java | 164 + .../FunctionInvokeStmtVisitorTest.java | 138 + .../compiler/visitor/IfStmtVisitorTest.java | 89 + .../SetNodePropertiesStmtVisitorTest.java | 55 + .../SetResourceOperationsStmtVisitorTest.java | 47 + .../visitor/StatementBlockVisitorTest.java | 50 + .../compiler/visitor/VarStmtVisitorTest.java | 183 + .../operation/PMLOperationSignatureTest.java | 30 + .../operation/PMLOperationWrapperTest.java | 108 + .../PMLStmtsOperationSignatureTest.java | 33 + .../routine/PMLRoutineWrapperTest.java | 100 + .../pml/expression/EqualsExpressionTest.java | 374 + .../pm/pap/pml/expression/ExpressionTest.java | 125 + .../FunctionInvokeExpressionTest.java | 240 + .../pml/expression/LogicalExpressionTest.java | 77 + .../pml/expression/ParenExpressionTest.java | 131 + .../pml/expression/PlusExpressionTest.java | 90 + .../csd/pm/pap/pml/expression/ValueTest.java | 87 + .../expression/literal/ArrayLiteralTest.java | 41 + .../expression/literal/BoolLiteralTest.java | 46 + .../literal/LiteralVisitorTest.java | 261 + .../expression/literal/MapLiteralTest.java | 49 + .../expression/literal/StringLiteralTest.java | 41 + .../ReferenceByBracketIndexTest.java | 125 + .../reference/ReferenceByDotIndexTest.java | 76 + .../reference/ReferenceByIDTest.java | 43 + .../reference/VariableReferenceTest.java | 129 + .../pap/pml/pattern/OperationPatternTest.java | 48 + .../pm/pap/pml/pattern/PatternTestUtil.java | 20 + .../pattern/operand/OperandPatternTest.java | 165 + .../pattern/subject/SubjectPatternTest.java | 143 + .../pap/pml/statement/BreakStatementTest.java | 68 + .../pml/statement/ContinueStatementTest.java | 68 + .../pml/statement/ForeachStatementTest.java | 179 + .../FunctionDefinitionStatementTest.java | 171 + .../FunctionReturnStatementTest.java | 29 + .../pm/pap/pml/statement/IfStatementTest.java | 105 + .../ShortDeclarationStatementTest.java | 41 + .../VariableAssignmentStatementTest.java | 66 + .../VariableDeclarationStatementTest.java | 71 + .../operation/AssignStatementTest.java | 48 + .../operation/AssociateStatementTest.java | 59 + .../operation/CheckStatementTest.java | 92 + .../operation/CreateNonPCStatementTest.java | 66 + .../CreateObligationStatementTest.java | 142 + .../CreateOperationStatementTest.java | 93 + .../operation/CreatePolicyStatementTest.java | 57 + .../CreateProhibitionStatementTest.java | 98 + .../operation/CreateRoutineStatementTest.java | 39 + .../operation/CreateRuleStatementTest.java | 53 + .../operation/DeassignStatementTest.java | 59 + .../operation/DeleteRuleStatementTest.java | 64 + .../operation/DeleteStatementTest.java | 88 + .../operation/DissociateStatementTest.java | 50 + .../SetNodePropertiesStatementTest.java | 58 + .../SetResourceOperationsStatementTest.java | 49 + .../csd/pm/pap/query/AccessQuerierTest.java | 1146 + .../csd/pm/pap/query/GraphQuerierTest.java | 407 + .../pm/pap/query/ObligationsQuerierTest.java | 66 + .../pm/pap/query/OperationsQuerierTest.java | 95 + .../pm/pap/query/ProhibitionsQuerierTest.java | 192 + .../csd/pm/pap/query/RoutinesQuerierTest.java | 70 + .../csd/pm/pap/serialization/PMLTest.java | 74 + .../pap/serialization/SerializationTest.java | 105 + .../java/gov/nist/csd/pm/pdp/PDPTest.java | 336 +- .../java/gov/nist/csd/pm/pdp/PDPTxTest.java | 74 + .../nist/csd/pm/pdp/PMLBootstrapperTest.java | 81 + .../nist/csd/pm/pdp/PrivilegeCheckerTest.java | 42 + .../pdp/adjudicator/PrivilegeCheckerTest.java | 75 + .../nist/csd/pm/pdp/memory/MemoryPDPTest.java | 81 - .../pdp/memory/MemoryPolicyReviewerTest.java | 824 - .../GraphModificationAdjudicatorTest.java | 236 + ...bligationsModificationAdjudicatorTest.java | 103 + ...OperationsModificationAdjudicatorTest.java | 125 + ...ohibitionsModificationAdjudicatorTest.java | 165 + .../RoutinesModificationAdjudicatorTest.java | 102 + .../pdp/modification/TestEventProcessor.java | 19 + .../gov/nist/csd/pm/policy/PolicyEquals.java | 70 - .../policy/events/PolicyEventHandlerTest.java | 202 - .../policy/model/obligation/ResponseTest.java | 47 - .../nist/csd/pm/policy/pml/CompileTest.java | 463 - .../nist/csd/pm/policy/pml/ExecutionTest.java | 467 - .../csd/pm/policy/pml/ObligationTest.java | 213 - .../csd/pm/policy/pml/PMLExecutorTest.java | 68 - .../csd/pm/policy/pml/PMLFormatterTest.java | 57 - .../gov/nist/csd/pm/policy/pml/PMLTest.java | 129 - .../csd/pm/policy/pml/ProhibitionTest.java | 60 - .../pm/policy/pml/expression/ValueTest.java | 113 - .../policy/pml/statement/ExpressionTest.java | 95 - .../csd/pm/policy/tx/TxHandlerRunnerTest.java | 34 - .../gov/nist/csd/pm/util/PolicyEquals.java | 80 + .../gov/nist/csd/pm/util/SamplePolicy.java | 42 + src/test/resources/sample/sample.json | 151 + src/test/resources/sample/sample.pml | 111 +- src/test/resources/sql/db.properties | 6 - src/test/resources/sql/pm_core.sql | 116 - testdb/csv/O.csv | 50000 ++++++++++++++++ testdb/csv/OA.csv | 30000 ++++++++++ testdb/csv/PC.csv | 3 + testdb/csv/U.csv | 10000 ++++ testdb/csv/UA.csv | 10000 ++++ testdb/csv/roles.csv | 10 + testdb/data/databases/neo4j/database_lock | 0 testdb/data/databases/neo4j/id-buffer.tmp.0 | 0 testdb/data/databases/neo4j/neostore | Bin 0 -> 8192 bytes .../data/databases/neo4j/neostore.counts.db | Bin 0 -> 49152 bytes .../databases/neo4j/neostore.indexstats.db | Bin 0 -> 49152 bytes .../neo4j/neostore.labeltokenstore.db | Bin 0 -> 8192 bytes .../neo4j/neostore.labeltokenstore.db.id | Bin 0 -> 40960 bytes .../neo4j/neostore.labeltokenstore.db.names | Bin 0 -> 8192 bytes .../neostore.labeltokenstore.db.names.id | Bin 0 -> 40960 bytes .../databases/neo4j/neostore.nodestore.db | Bin 0 -> 753664 bytes .../databases/neo4j/neostore.nodestore.db.id | Bin 0 -> 98304 bytes .../neo4j/neostore.nodestore.db.labels | Bin 0 -> 8192 bytes .../neo4j/neostore.nodestore.db.labels.id | Bin 0 -> 40960 bytes .../databases/neo4j/neostore.propertystore.db | Bin 0 -> 2064384 bytes .../neo4j/neostore.propertystore.db.arrays | Bin 0 -> 8192 bytes .../neo4j/neostore.propertystore.db.arrays.id | Bin 0 -> 40960 bytes .../neo4j/neostore.propertystore.db.id | Bin 0 -> 98304 bytes .../neo4j/neostore.propertystore.db.index | Bin 0 -> 8192 bytes .../neo4j/neostore.propertystore.db.index.id | Bin 0 -> 40960 bytes .../neostore.propertystore.db.index.keys | Bin 0 -> 8192 bytes .../neostore.propertystore.db.index.keys.id | Bin 0 -> 40960 bytes .../neo4j/neostore.propertystore.db.strings | Bin 0 -> 8192 bytes .../neostore.propertystore.db.strings.id | Bin 0 -> 40960 bytes .../neo4j/neostore.relationshipgroupstore.db | Bin 0 -> 8192 bytes .../neostore.relationshipgroupstore.db.id | Bin 0 -> 40960 bytes ...neostore.relationshipgroupstore.degrees.db | Bin 0 -> 40960 bytes .../neo4j/neostore.relationshipstore.db | 0 .../neo4j/neostore.relationshipstore.db.id | Bin 0 -> 40960 bytes .../neo4j/neostore.relationshiptypestore.db | 0 .../neostore.relationshiptypestore.db.id | Bin 0 -> 40960 bytes .../neostore.relationshiptypestore.db.names | Bin 0 -> 8192 bytes ...neostore.relationshiptypestore.db.names.id | Bin 0 -> 40960 bytes .../databases/neo4j/neostore.schemastore.db | Bin 0 -> 8192 bytes .../neo4j/neostore.schemastore.db.id | Bin 0 -> 40960 bytes .../schema/index/token-lookup-1.0/1/index-1 | Bin 0 -> 106496 bytes .../schema/index/token-lookup-1.0/2/index-2 | Bin 0 -> 40960 bytes testdb/data/databases/store_lock | 0 testdb/data/databases/system/database_lock | 0 testdb/data/databases/system/id-buffer.tmp.0 | 0 testdb/data/databases/system/neostore | Bin 0 -> 8192 bytes .../data/databases/system/neostore.counts.db | Bin 0 -> 49152 bytes .../databases/system/neostore.indexstats.db | Bin 0 -> 49152 bytes .../system/neostore.labeltokenstore.db | Bin 0 -> 8192 bytes .../system/neostore.labeltokenstore.db.id | Bin 0 -> 40960 bytes .../system/neostore.labeltokenstore.db.names | Bin 0 -> 8192 bytes .../neostore.labeltokenstore.db.names.id | Bin 0 -> 40960 bytes .../databases/system/neostore.nodestore.db | Bin 0 -> 8192 bytes .../databases/system/neostore.nodestore.db.id | Bin 0 -> 40960 bytes .../system/neostore.nodestore.db.labels | Bin 0 -> 8192 bytes .../system/neostore.nodestore.db.labels.id | Bin 0 -> 40960 bytes .../system/neostore.propertystore.db | Bin 0 -> 8192 bytes .../system/neostore.propertystore.db.arrays | Bin 0 -> 8192 bytes .../neostore.propertystore.db.arrays.id | Bin 0 -> 40960 bytes .../system/neostore.propertystore.db.id | Bin 0 -> 40960 bytes .../system/neostore.propertystore.db.index | Bin 0 -> 8192 bytes .../system/neostore.propertystore.db.index.id | Bin 0 -> 40960 bytes .../neostore.propertystore.db.index.keys | Bin 0 -> 8192 bytes .../neostore.propertystore.db.index.keys.id | Bin 0 -> 40960 bytes .../system/neostore.propertystore.db.strings | Bin 0 -> 8192 bytes .../neostore.propertystore.db.strings.id | Bin 0 -> 40960 bytes .../system/neostore.relationshipgroupstore.db | Bin 0 -> 8192 bytes .../neostore.relationshipgroupstore.db.id | Bin 0 -> 40960 bytes ...neostore.relationshipgroupstore.degrees.db | Bin 0 -> 40960 bytes .../system/neostore.relationshipstore.db | Bin 0 -> 8192 bytes .../system/neostore.relationshipstore.db.id | Bin 0 -> 40960 bytes .../system/neostore.relationshiptypestore.db | Bin 0 -> 8192 bytes .../neostore.relationshiptypestore.db.id | Bin 0 -> 40960 bytes .../neostore.relationshiptypestore.db.names | Bin 0 -> 8192 bytes ...neostore.relationshiptypestore.db.names.id | Bin 0 -> 40960 bytes .../databases/system/neostore.schemastore.db | Bin 0 -> 8192 bytes .../system/neostore.schemastore.db.id | Bin 0 -> 40960 bytes .../system/schema/index/range-1.0/3/index-3 | Bin 0 -> 49152 bytes .../system/schema/index/range-1.0/4/index-4 | Bin 0 -> 49152 bytes .../system/schema/index/range-1.0/7/index-7 | Bin 0 -> 49152 bytes .../system/schema/index/range-1.0/8/index-8 | Bin 0 -> 49152 bytes .../schema/index/token-lookup-1.0/1/index-1 | Bin 0 -> 49152 bytes .../schema/index/token-lookup-1.0/2/index-2 | Bin 0 -> 49152 bytes testdb/data/server_id | 1 + testdb/data/transactions/neo4j/checkpoint.0 | Bin 0 -> 3144 bytes .../neo4j/neostore.transaction.db.0 | Bin 0 -> 26816874 bytes testdb/data/transactions/system/checkpoint.0 | Bin 0 -> 592 bytes .../system/neostore.transaction.db.0 | Bin 0 -> 19725 bytes testdb/logs/debug.log | 11709 ++++ testdb/logs/http.log | 0 testdb/logs/query.log | 0 testdb/logs/security.log | 0 883 files changed, 154024 insertions(+), 31292 deletions(-) create mode 100644 CODEMETA.yaml create mode 100644 CODEOWNERS create mode 100644 LICENSE.md create mode 100644 fair-software.md delete mode 100644 pml/README.md delete mode 100644 src/main/java/gov/nist/csd/pm/epp/EventContext.java create mode 100644 src/main/java/gov/nist/csd/pm/epp/EventEmitter.java delete mode 100644 src/main/java/gov/nist/csd/pm/epp/EventListener.java rename src/main/java/gov/nist/csd/pm/{pdp/memory/MemoryPolicyReviewer.java => impl/memory/pap/MemoryAccessQuerier.java} (54%) create mode 100644 src/main/java/gov/nist/csd/pm/impl/memory/pap/MemoryPAP.java create mode 100644 src/main/java/gov/nist/csd/pm/impl/memory/pap/MemoryPolicyQuerier.java create mode 100644 src/main/java/gov/nist/csd/pm/impl/memory/pap/store/MemoryGraphStore.java create mode 100644 src/main/java/gov/nist/csd/pm/impl/memory/pap/store/MemoryObligationsStore.java create mode 100644 src/main/java/gov/nist/csd/pm/impl/memory/pap/store/MemoryOperationsStore.java create mode 100644 src/main/java/gov/nist/csd/pm/impl/memory/pap/store/MemoryPolicy.java create mode 100644 src/main/java/gov/nist/csd/pm/impl/memory/pap/store/MemoryPolicyStore.java create mode 100644 src/main/java/gov/nist/csd/pm/impl/memory/pap/store/MemoryProhibitionsStore.java create mode 100644 src/main/java/gov/nist/csd/pm/impl/memory/pap/store/MemoryRoutinesStore.java create mode 100644 src/main/java/gov/nist/csd/pm/impl/memory/pap/store/MemoryStore.java create mode 100644 src/main/java/gov/nist/csd/pm/impl/memory/pap/store/MemoryTx.java create mode 100644 src/main/java/gov/nist/csd/pm/impl/memory/pap/store/TxCmd.java create mode 100644 src/main/java/gov/nist/csd/pm/impl/memory/pap/store/TxCmdTracker.java create mode 100644 src/main/java/gov/nist/csd/pm/impl/memory/pap/store/TxRollbackSupport.java create mode 100644 src/main/java/gov/nist/csd/pm/impl/memory/pap/store/Vertex.java create mode 100644 src/main/java/gov/nist/csd/pm/impl/memory/pap/store/VertexAttribute.java create mode 100644 src/main/java/gov/nist/csd/pm/impl/memory/pap/store/VertexLeaf.java create mode 100644 src/main/java/gov/nist/csd/pm/impl/memory/pap/store/VertexPolicyClass.java create mode 100644 src/main/java/gov/nist/csd/pm/impl/memory/pap/store/VertexWithProps.java delete mode 100644 src/main/java/gov/nist/csd/pm/pap/PAPDeserializer.java delete mode 100644 src/main/java/gov/nist/csd/pm/pap/PAPGraph.java delete mode 100644 src/main/java/gov/nist/csd/pm/pap/PAPObligations.java delete mode 100644 src/main/java/gov/nist/csd/pm/pap/PAPProhibitions.java delete mode 100644 src/main/java/gov/nist/csd/pm/pap/PAPUserDefinedPML.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/PolicyPoint.java delete mode 100644 src/main/java/gov/nist/csd/pm/pap/PolicyStore.java delete mode 100644 src/main/java/gov/nist/csd/pm/pap/SuperPolicy.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/admin/AdminPolicy.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/admin/AdminPolicyNode.java rename src/main/java/gov/nist/csd/pm/{policy/exceptions => pap/exception}/AdminAccessRightExistsException.java (82%) create mode 100644 src/main/java/gov/nist/csd/pm/pap/exception/AdminPolicyVerificationException.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/exception/AssignmentCausesLoopException.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/exception/BootstrapExistingPolicyException.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/exception/CannotDeleteAdminPolicyConfigException.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/exception/DisconnectedNodeException.java rename src/main/java/gov/nist/csd/pm/{policy/exceptions => pap/exception}/InvalidProhibitionSubjectException.java (80%) rename src/main/java/gov/nist/csd/pm/{policy/exceptions => pap/exception}/NodeDoesNotExistException.java (56%) create mode 100644 src/main/java/gov/nist/csd/pm/pap/exception/NodeHasAscendantsException.java rename src/main/java/gov/nist/csd/pm/{policy/exceptions => pap/exception}/NodeNameExistsException.java (81%) rename src/main/java/gov/nist/csd/pm/{policy/exceptions => pap/exception}/NodeReferencedInObligationException.java (59%) rename src/main/java/gov/nist/csd/pm/{policy/exceptions => pap/exception}/NodeReferencedInProhibitionException.java (58%) rename src/main/java/gov/nist/csd/pm/{policy/exceptions => pap/exception}/NodesAlreadyAssignedException.java (86%) create mode 100644 src/main/java/gov/nist/csd/pm/pap/exception/ObligationDoesNotExistException.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/exception/ObligationNameExistsException.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/exception/ObligationRuleNameExistsException.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/exception/OperandsDoNotMatchException.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/exception/OperationDoesNotExistException.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/exception/OperationExistsException.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/exception/PMBackendException.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/exception/PMException.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/exception/PMLConstantAlreadyDefinedException.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/exception/PMLConstantNotDefinedException.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/exception/PMLFunctionAlreadyDefinedException.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/exception/PMLFunctionNotDefinedException.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/exception/PMRuntimeException.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/exception/PolicyEntityDoesNotExistException.java rename src/main/java/gov/nist/csd/pm/{policy/exceptions => pap/exception}/ProhibitionContainerDoesNotExistException.java (79%) create mode 100644 src/main/java/gov/nist/csd/pm/pap/exception/ProhibitionDoesNotExistException.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/exception/ProhibitionExistsException.java rename src/main/java/gov/nist/csd/pm/{policy/exceptions => pap/exception}/ProhibitionSubjectDoesNotExistException.java (79%) rename src/main/java/gov/nist/csd/pm/{policy/exceptions => pap/exception}/RepObjectNotSetException.java (54%) create mode 100644 src/main/java/gov/nist/csd/pm/pap/exception/RoutineDoesNotExistException.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/exception/RoutineExistsException.java rename src/main/java/gov/nist/csd/pm/{policy/exceptions => pap/exception}/UnknownAccessRightException.java (52%) create mode 100644 src/main/java/gov/nist/csd/pm/pap/exception/UnknownOperandException.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/exception/UnknownPatternException.java rename src/main/java/gov/nist/csd/pm/{policy/exceptions => pap/exception}/UnknownTypeException.java (50%) create mode 100644 src/main/java/gov/nist/csd/pm/pap/executable/AdminExecutable.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/executable/AdminExecutor.java rename src/main/java/gov/nist/csd/pm/{policy/model => pap}/graph/dag/AllPathsShortCircuit.java (90%) rename src/main/java/gov/nist/csd/pm/pap/{memory => graph}/dag/BreadthFirstGraphWalker.java (60%) rename src/main/java/gov/nist/csd/pm/pap/{memory => graph}/dag/DepthFirstGraphWalker.java (62%) create mode 100644 src/main/java/gov/nist/csd/pm/pap/graph/dag/Direction.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/graph/dag/GraphWalker.java rename src/main/java/gov/nist/csd/pm/{policy/model/graph/dag/propagator => pap/graph/dag}/NoopPropagator.java (69%) rename src/main/java/gov/nist/csd/pm/{policy/model => pap}/graph/dag/NoopShortCircuit.java (74%) rename src/main/java/gov/nist/csd/pm/{policy/model/graph/dag/visitor => pap/graph/dag}/NoopVisitor.java (65%) create mode 100644 src/main/java/gov/nist/csd/pm/pap/graph/dag/Propagator.java rename src/main/java/gov/nist/csd/pm/{policy/model => pap}/graph/dag/ShortCircuit.java (60%) rename src/main/java/gov/nist/csd/pm/{policy/model => pap}/graph/dag/SinglePathShortCircuit.java (87%) rename src/main/java/gov/nist/csd/pm/{policy/model => pap}/graph/dag/TargetDagResult.java (57%) create mode 100644 src/main/java/gov/nist/csd/pm/pap/graph/dag/UserDagResult.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/graph/dag/Visitor.java rename src/main/java/gov/nist/csd/pm/{policy/model/graph/nodes => pap/graph/node}/Node.java (97%) rename src/main/java/gov/nist/csd/pm/{policy/model/graph/nodes => pap/graph/node}/NodeType.java (92%) rename src/main/java/gov/nist/csd/pm/{policy/model/graph/nodes => pap/graph/node}/Properties.java (96%) create mode 100644 src/main/java/gov/nist/csd/pm/pap/graph/relationship/AccessRightSet.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/graph/relationship/Assignment.java rename src/main/java/gov/nist/csd/pm/{policy/model/graph/relationships => pap/graph/relationship}/Association.java (84%) rename src/main/java/gov/nist/csd/pm/{policy/model/graph/relationships => pap/graph/relationship}/InvalidAssignmentException.java (56%) rename src/main/java/gov/nist/csd/pm/{policy/model/graph/relationships => pap/graph/relationship}/InvalidAssociationException.java (56%) rename src/main/java/gov/nist/csd/pm/{policy/model/graph/relationships => pap/graph/relationship}/Relationship.java (74%) delete mode 100644 src/main/java/gov/nist/csd/pm/pap/memory/MemoryGraph.java delete mode 100644 src/main/java/gov/nist/csd/pm/pap/memory/MemoryObligations.java delete mode 100644 src/main/java/gov/nist/csd/pm/pap/memory/MemoryPolicyDeserializer.java delete mode 100644 src/main/java/gov/nist/csd/pm/pap/memory/MemoryPolicySerializer.java delete mode 100644 src/main/java/gov/nist/csd/pm/pap/memory/MemoryPolicyStore.java delete mode 100644 src/main/java/gov/nist/csd/pm/pap/memory/MemoryPolicyStoreEventHandler.java delete mode 100644 src/main/java/gov/nist/csd/pm/pap/memory/MemoryProhibitions.java delete mode 100644 src/main/java/gov/nist/csd/pm/pap/memory/MemoryTx.java delete mode 100644 src/main/java/gov/nist/csd/pm/pap/memory/MemoryUserDefinedPML.java delete mode 100644 src/main/java/gov/nist/csd/pm/pap/memory/Object.java delete mode 100644 src/main/java/gov/nist/csd/pm/pap/memory/ObjectAttribute.java delete mode 100644 src/main/java/gov/nist/csd/pm/pap/memory/PolicyClass.java delete mode 100644 src/main/java/gov/nist/csd/pm/pap/memory/TxCmd.java delete mode 100644 src/main/java/gov/nist/csd/pm/pap/memory/TxEvents.java delete mode 100644 src/main/java/gov/nist/csd/pm/pap/memory/TxPolicyEventListener.java delete mode 100644 src/main/java/gov/nist/csd/pm/pap/memory/TxPolicyStore.java delete mode 100644 src/main/java/gov/nist/csd/pm/pap/memory/User.java delete mode 100644 src/main/java/gov/nist/csd/pm/pap/memory/UserAttribute.java delete mode 100644 src/main/java/gov/nist/csd/pm/pap/memory/Vertex.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/modification/GraphModification.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/modification/GraphModifier.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/modification/Modifier.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/modification/ObligationsModification.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/modification/ObligationsModifier.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/modification/OperationsModification.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/modification/OperationsModifier.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/modification/PolicyModification.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/modification/PolicyModifier.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/modification/ProhibitionsModification.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/modification/ProhibitionsModifier.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/modification/RoutinesModification.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/modification/RoutinesModifier.java delete mode 100644 src/main/java/gov/nist/csd/pm/pap/mysql/MysqlConnection.java delete mode 100644 src/main/java/gov/nist/csd/pm/pap/mysql/MysqlGraph.java delete mode 100644 src/main/java/gov/nist/csd/pm/pap/mysql/MysqlObligations.java delete mode 100644 src/main/java/gov/nist/csd/pm/pap/mysql/MysqlPolicyDeserializer.java delete mode 100644 src/main/java/gov/nist/csd/pm/pap/mysql/MysqlPolicyException.java delete mode 100644 src/main/java/gov/nist/csd/pm/pap/mysql/MysqlPolicySerializer.java delete mode 100644 src/main/java/gov/nist/csd/pm/pap/mysql/MysqlPolicyStore.java delete mode 100644 src/main/java/gov/nist/csd/pm/pap/mysql/MysqlProhibitions.java delete mode 100644 src/main/java/gov/nist/csd/pm/pap/mysql/MysqlUserDefinedPML.java delete mode 100644 src/main/java/gov/nist/csd/pm/pap/mysql/PolicyResetSequence.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/obligation/EventContext.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/obligation/EventPattern.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/obligation/Obligation.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/obligation/Response.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/obligation/Rule.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/obligation/UnexpectedOperandTypeException.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/op/AdminAccessRights.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/op/AdminOperations.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/op/Operation.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/op/PreparedOperation.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/op/PrivilegeChecker.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/op/graph/AssignOp.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/op/graph/AssociateOp.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/op/graph/CreateNodeOp.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/op/graph/CreateObjectAttributeOp.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/op/graph/CreateObjectOp.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/op/graph/CreatePolicyClassOp.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/op/graph/CreateUserAttributeOp.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/op/graph/CreateUserOp.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/op/graph/DeassignOp.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/op/graph/DeleteNodeOp.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/op/graph/DeleteObjectAttributeOp.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/op/graph/DeleteObjectOp.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/op/graph/DeletePolicyClassOp.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/op/graph/DeleteUserAttributeOp.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/op/graph/DeleteUserOp.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/op/graph/DissociateOp.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/op/graph/GraphOp.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/op/graph/SetNodePropertiesOp.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/op/obligation/CreateObligationOp.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/op/obligation/DeleteObligationOp.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/op/obligation/ObligationOp.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/op/operation/CreateAdminOperationOp.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/op/operation/DeleteAdminOperationOp.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/op/operation/SetResourceOperationsOp.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/op/prohibition/CreateProhibitionOp.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/op/prohibition/DeleteProhibitionOp.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/op/prohibition/ProhibitionOp.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/op/routine/CreateAdminRoutineOp.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/op/routine/DeleteAdminRoutineOp.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/CompiledPML.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/PMLCompiler.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/PMLErrorHandler.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/antlr/PMLLexer.g4 create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/antlr/PMLLexer.interp create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/antlr/PMLLexer.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/antlr/PMLLexer.tokens create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/antlr/PMLParser.g4 create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/antlr/PMLParser.interp create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/antlr/PMLParser.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/antlr/PMLParser.tokens rename src/main/java/gov/nist/csd/pm/{policy/pml/antlr/PMLBaseListener.java => pap/pml/antlr/PMLParserBaseListener.java} (62%) rename src/main/java/gov/nist/csd/pm/{policy/pml/antlr/PMLBaseVisitor.java => pap/pml/antlr/PMLParserBaseVisitor.java} (65%) rename src/main/java/gov/nist/csd/pm/{policy/pml/antlr/PMLListener.java => pap/pml/antlr/PMLParserListener.java} (50%) rename src/main/java/gov/nist/csd/pm/{policy/pml/antlr/PMLVisitor.java => pap/pml/antlr/PMLParserVisitor.java} (54%) rename src/main/java/gov/nist/csd/pm/{policy => pap}/pml/compiler/Position.java (96%) rename src/main/java/gov/nist/csd/pm/{policy => pap}/pml/compiler/Variable.java (84%) rename src/main/java/gov/nist/csd/pm/{policy => pap}/pml/compiler/error/CompileError.java (59%) rename src/main/java/gov/nist/csd/pm/{policy => pap}/pml/compiler/error/ErrorLog.java (85%) create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/AssignStmtVisitor.java rename src/main/java/gov/nist/csd/pm/{policy => pap}/pml/compiler/visitor/AssociateStmtVisitor.java (55%) rename src/main/java/gov/nist/csd/pm/{policy => pap}/pml/compiler/visitor/BreakStmtVisitor.java (52%) create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CheckStatementBlockVisitor.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CheckStatementVisitor.java rename src/main/java/gov/nist/csd/pm/{policy => pap}/pml/compiler/visitor/ContinueStmtVisitor.java (61%) create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CreateNonPCStmtVisitor.java rename src/main/java/gov/nist/csd/pm/{policy => pap}/pml/compiler/visitor/CreateObligationStmtVisitor.java (51%) create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CreatePolicyStmtVisitor.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CreateProhibitionStmtVisitor.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CreateRuleStmtVisitor.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/DeassignStmtVisitor.java rename src/main/java/gov/nist/csd/pm/{policy => pap}/pml/compiler/visitor/DeleteRuleStmtVisitor.java (52%) create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/DeleteStmtVisitor.java rename src/main/java/gov/nist/csd/pm/{policy => pap}/pml/compiler/visitor/DissociateStmtVisitor.java (50%) create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/ForeachStmtVisitor.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/FunctionDefinitionVisitor.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/FunctionInvokeStmtVisitor.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/FunctionReturnStmtVisitor.java rename src/main/java/gov/nist/csd/pm/{policy => pap}/pml/compiler/visitor/IfStmtVisitor.java (62%) create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/PMLBaseVisitor.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/PMLVisitor.java rename src/main/java/gov/nist/csd/pm/{policy => pap}/pml/compiler/visitor/SetNodePropertiesStmtVisitor.java (53%) create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/SetResourceOperationsStmtVisitor.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/StatementBlockVisitor.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/StatementVisitor.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/VarStmtVisitor.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/context/ExecutionContext.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/context/VisitorContext.java rename src/main/java/gov/nist/csd/pm/{policy/pml/model => pap/pml}/exception/PMLCompilationException.java (63%) create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/exception/PMLCompilationRuntimeException.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/exception/PMLExecutionException.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/executable/PMLExecutableSignature.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/PMLBuiltinOperations.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/PMLOperation.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/PMLOperationSignature.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/PMLOperationWrapper.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/PMLPreparedOperation.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/PMLStmtsOperation.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/PMLStmtsOperationSignature.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/Append.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/AppendAll.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/Concat.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/Contains.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/ContainsKey.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/Equals.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/GetAdjacentAscendants.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/GetAdjacentDescendants.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/GetAssociationsWithSource.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/GetAssociationsWithTarget.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/GetNode.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/GetNodeProperties.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/GetNodeType.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/HasPropertyKey.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/HasPropertyValue.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/NodeExists.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/Search.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/executable/routine/PMLRoutine.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/executable/routine/PMLRoutineSignature.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/executable/routine/PMLRoutineWrapper.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/executable/routine/PMLStmtsRoutine.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/expression/EqualsExpression.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/expression/Expression.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/expression/FunctionInvokeExpression.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/expression/LogicalExpression.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/expression/NegatedExpression.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/expression/ParenExpression.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/expression/PlusExpression.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/expression/literal/ArrayLiteral.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/expression/literal/BoolLiteral.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/expression/literal/Literal.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/expression/literal/LiteralVisitor.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/expression/literal/MapLiteral.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/expression/literal/StringLiteral.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/expression/reference/ReferenceByBracketIndex.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/expression/reference/ReferenceByDotIndex.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/expression/reference/ReferenceByID.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/expression/reference/ReferenceByIndex.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/expression/reference/VariableReference.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/pattern/OperationPattern.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/pattern/Pattern.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/pattern/ReferencedNodes.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/pattern/operand/AnyOperandPattern.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/pattern/operand/InOperandPattern.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/pattern/operand/LogicalOperandPatternExpression.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/pattern/operand/NegateOperandPatternExpression.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/pattern/operand/NodeOperandPattern.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/pattern/operand/OperandPatternExpression.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/pattern/operand/ParenOperandPatternExpression.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/pattern/subject/InSubjectPattern.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/pattern/subject/LogicalSubjectPatternExpression.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/pattern/subject/NegateSubjectPatternExpression.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/pattern/subject/ParenSubjectPatternExpression.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/pattern/subject/ProcessSubjectPattern.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/pattern/subject/SubjectPattern.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/pattern/subject/SubjectPatternExpression.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/pattern/subject/UsernamePattern.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/scope/CompileGlobalScope.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/scope/ExecuteGlobalScope.java rename src/main/java/gov/nist/csd/pm/{policy/pml/model => pap/pml}/scope/FunctionAlreadyDefinedInScopeException.java (83%) create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/scope/GlobalScope.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/scope/LocalScope.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/scope/PMLScopeException.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/scope/Scope.java rename src/main/java/gov/nist/csd/pm/{policy/pml/model => pap/pml}/scope/UnknownFunctionInScopeException.java (82%) create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/scope/UnknownVariableInScopeException.java rename src/main/java/gov/nist/csd/pm/{policy/pml/model => pap/pml}/scope/VariableAlreadyDefinedInScopeException.java (83%) create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/statement/BreakStatement.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/statement/ContinueStatement.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/statement/ControlStatement.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/statement/ForeachStatement.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/statement/FunctionReturnStatement.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/statement/IfStatement.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/statement/PMLStatement.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/statement/PMLStatementBlock.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/statement/PMLStatementExecutable.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/statement/PMLStatementSerializable.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/statement/ShortDeclarationStatement.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/statement/VariableAssignmentStatement.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/statement/VariableDeclarationStatement.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/AssignStatement.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/AssociateStatement.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/CheckStatement.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateFunctionStatement.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateNonPCStatement.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateObligationStatement.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateOperationStatement.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/CreatePolicyStatement.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateProhibitionStatement.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateRoutineStatement.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateRuleStatement.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/DeassignStatement.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/DeleteRuleStatement.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/DeleteStatement.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/DissociateStatement.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/OperationStatement.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/SetNodePropertiesStatement.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/SetResourceOperationsStatement.java rename src/main/java/gov/nist/csd/pm/{policy/pml/model/expression => pap/pml/type}/Type.java (81%) create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/value/ArrayValue.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/value/BoolValue.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/value/BreakValue.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/value/ComplementedValue.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/value/ContinueValue.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/value/MapValue.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/value/PatternValue.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/value/ProhibitionValue.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/value/ReturnValue.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/value/RuleValue.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/value/StringValue.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/value/Value.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/pml/value/VoidValue.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/prohibition/ContainerCondition.java rename src/main/java/gov/nist/csd/pm/{policy/model => pap}/prohibition/Prohibition.java (52%) rename src/main/java/gov/nist/csd/pm/{policy/model => pap}/prohibition/ProhibitionSubject.java (80%) create mode 100644 src/main/java/gov/nist/csd/pm/pap/query/AccessQuerier.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/query/AccessQuery.java rename src/main/java/gov/nist/csd/pm/{pdp/PolicyReviewer.java => pap/query/AccessRightResolver.java} (50%) create mode 100644 src/main/java/gov/nist/csd/pm/pap/query/GraphQuerier.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/query/GraphQuery.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/query/ObligationsQuerier.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/query/ObligationsQuery.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/query/OperationsQuerier.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/query/OperationsQuery.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/query/PolicyQuerier.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/query/PolicyQuery.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/query/ProhibitionsQuerier.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/query/ProhibitionsQuery.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/query/Querier.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/query/RoutinesQuerier.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/query/RoutinesQuery.java rename src/main/java/gov/nist/csd/pm/{policy/model/access => pap/query}/UserContext.java (96%) rename src/main/java/gov/nist/csd/pm/{policy/model/audit => pap/query/explain}/EdgePath.java (87%) create mode 100644 src/main/java/gov/nist/csd/pm/pap/query/explain/Explain.java rename src/main/java/gov/nist/csd/pm/{policy/model/audit => pap/query/explain}/Path.java (67%) create mode 100644 src/main/java/gov/nist/csd/pm/pap/query/explain/PolicyClassExplain.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/routine/Routine.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/serialization/PolicyDeserializer.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/serialization/PolicySerializer.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/serialization/json/JSONAssociation.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/serialization/json/JSONConstant.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/serialization/json/JSONDeserializer.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/serialization/json/JSONGraph.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/serialization/json/JSONNode.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/serialization/json/JSONPolicy.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/serialization/json/JSONPolicyClass.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/serialization/json/JSONSerializer.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/serialization/pml/PMLDeserializer.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/serialization/pml/PMLSerializer.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/store/GraphStore.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/store/GraphStoreBFS.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/store/GraphStoreDFS.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/store/ObligationsStore.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/store/OperationsStore.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/store/PolicyStore.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/store/ProhibitionsStore.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/store/RoutinesStore.java create mode 100644 src/main/java/gov/nist/csd/pm/pap/tx/TransactionNotStartedException.java rename src/main/java/gov/nist/csd/pm/{policy => pap}/tx/Transactional.java (63%) rename src/main/java/gov/nist/csd/pm/{policy => pap}/tx/TxCommitException.java (69%) rename src/main/java/gov/nist/csd/pm/{policy => pap}/tx/TxRunner.java (82%) create mode 100644 src/main/java/gov/nist/csd/pm/pdp/AccessAdjudication.java create mode 100644 src/main/java/gov/nist/csd/pm/pdp/AdminAdjudicationResponse.java create mode 100644 src/main/java/gov/nist/csd/pm/pdp/Decision.java create mode 100644 src/main/java/gov/nist/csd/pm/pdp/EventResponseEvaluation.java create mode 100644 src/main/java/gov/nist/csd/pm/pdp/OperationRequest.java create mode 100644 src/main/java/gov/nist/csd/pm/pdp/PDPEventEmitter.java create mode 100644 src/main/java/gov/nist/csd/pm/pdp/PDPExecutionContext.java delete mode 100644 src/main/java/gov/nist/csd/pm/pdp/PDPGraph.java delete mode 100644 src/main/java/gov/nist/csd/pm/pdp/PDPObligations.java delete mode 100644 src/main/java/gov/nist/csd/pm/pdp/PDPProhibitions.java create mode 100644 src/main/java/gov/nist/csd/pm/pdp/PDPTx.java create mode 100644 src/main/java/gov/nist/csd/pm/pdp/PDPTxRunner.java delete mode 100644 src/main/java/gov/nist/csd/pm/pdp/PDPUserDefinedPML.java create mode 100644 src/main/java/gov/nist/csd/pm/pdp/PMLBootstrapper.java create mode 100644 src/main/java/gov/nist/csd/pm/pdp/PolicyBootstrapper.java create mode 100644 src/main/java/gov/nist/csd/pm/pdp/ResourceAdjudicationResponse.java create mode 100644 src/main/java/gov/nist/csd/pm/pdp/RoutineRequest.java delete mode 100644 src/main/java/gov/nist/csd/pm/pdp/adjudicator/AccessRightChecker.java delete mode 100644 src/main/java/gov/nist/csd/pm/pdp/adjudicator/Adjudicator.java delete mode 100644 src/main/java/gov/nist/csd/pm/pdp/adjudicator/GraphAdjudicator.java delete mode 100644 src/main/java/gov/nist/csd/pm/pdp/adjudicator/ObligationsAdjudicator.java delete mode 100644 src/main/java/gov/nist/csd/pm/pdp/adjudicator/ProhibitionsAdjudicator.java delete mode 100644 src/main/java/gov/nist/csd/pm/pdp/adjudicator/UserDefinedPMLAdjudicator.java rename src/main/java/gov/nist/csd/pm/{policy/exceptions => pdp/exception}/UnauthorizedException.java (70%) delete mode 100644 src/main/java/gov/nist/csd/pm/pdp/memory/BulkPolicyReviewer.java delete mode 100644 src/main/java/gov/nist/csd/pm/pdp/memory/MemoryPDP.java create mode 100644 src/main/java/gov/nist/csd/pm/pdp/modification/GraphModificationAdjudicator.java create mode 100644 src/main/java/gov/nist/csd/pm/pdp/modification/ObligationsModificationAdjudicator.java create mode 100644 src/main/java/gov/nist/csd/pm/pdp/modification/OperationsModificationAdjudicator.java create mode 100644 src/main/java/gov/nist/csd/pm/pdp/modification/PolicyModificationAdjudicator.java create mode 100644 src/main/java/gov/nist/csd/pm/pdp/modification/ProhibitionsModificationAdjudicator.java create mode 100644 src/main/java/gov/nist/csd/pm/pdp/modification/RoutinesModificationAdjudicator.java create mode 100644 src/main/java/gov/nist/csd/pm/pdp/query/AccessQueryAdjudicator.java create mode 100644 src/main/java/gov/nist/csd/pm/pdp/query/GraphQueryAdjudicator.java create mode 100644 src/main/java/gov/nist/csd/pm/pdp/query/ObligationsQueryAdjudicator.java create mode 100644 src/main/java/gov/nist/csd/pm/pdp/query/OperationsQueryAdjudicator.java create mode 100644 src/main/java/gov/nist/csd/pm/pdp/query/PolicyQueryAdjudicator.java create mode 100644 src/main/java/gov/nist/csd/pm/pdp/query/ProhibitionsQueryAdjudicator.java create mode 100644 src/main/java/gov/nist/csd/pm/pdp/query/RoutinesQueryAdjudicator.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/Graph.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/Obligations.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/Policy.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/PolicyDeserializer.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/PolicySerializer.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/Prohibitions.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/UserDefinedPML.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/events/AddConstantEvent.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/events/AddFunctionEvent.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/events/AssignAllEvent.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/events/AssignEvent.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/events/AssignToEvent.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/events/AssociateEvent.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/events/BasePolicyEventHandler.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/events/BeginTxEvent.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/events/CommitTxEvent.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/events/CreateNodeEvent.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/events/CreateObjectAttributeEvent.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/events/CreateObjectEvent.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/events/CreateObligationEvent.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/events/CreatePolicyClassEvent.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/events/CreateProhibitionEvent.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/events/CreateUserAttributeEvent.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/events/CreateUserEvent.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/events/DeassignAllEvent.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/events/DeassignAllFromAndDeleteEvent.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/events/DeassignEvent.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/events/DeassignFromEvent.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/events/DeleteNodeEvent.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/events/DeleteObligationEvent.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/events/DeleteProhibitionEvent.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/events/DissociateEvent.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/events/PolicyEvent.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/events/PolicyEventEmitter.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/events/PolicyEventHandler.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/events/PolicyEventListener.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/events/PolicySync.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/events/PolicySynchronizationEvent.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/events/RemoveConstantEvent.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/events/RemoveFunctionEvent.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/events/RollbackTxEvent.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/events/SetNodePropertiesEvent.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/events/SetResourceAccessRightsEvent.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/events/UpdateObligationEvent.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/events/UpdateProhibitionEvent.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/exceptions/ConstantAlreadyDefinedException.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/exceptions/DisconnectedNodeException.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/exceptions/EventProcessorException.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/exceptions/FunctionAlreadyDefinedException.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/exceptions/NoParentException.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/exceptions/NodeHasChildrenException.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/exceptions/ObligationDoesNotExistException.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/exceptions/ObligationExistsException.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/exceptions/PMException.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/exceptions/PMRuntimeException.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/exceptions/ProhibitionDoesNotExistException.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/exceptions/ProhibitionExistsException.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/exceptions/TransactionNotStartedException.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/json/JSONGraph.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/json/JSONPolicy.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/json/JSONUserDefinedPML.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/model/access/AccessRightSet.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/model/access/AdminAccessRights.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/model/audit/Explain.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/model/audit/PolicyClass.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/model/audit/ResolvedPath.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/model/graph/dag/UserDagResult.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/model/graph/dag/propagator/Propagator.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/model/graph/dag/visitor/Visitor.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/model/graph/dag/walker/Direction.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/model/graph/dag/walker/GraphWalker.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/model/graph/relationships/Assignment.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/model/obligation/Obligation.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/model/obligation/Response.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/model/obligation/Rule.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/model/obligation/event/EventPattern.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/model/obligation/event/EventSubject.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/model/obligation/event/Performs.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/model/obligation/event/Target.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/model/prohibition/ContainerCondition.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/PMLBuiltinConstants.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/PMLBuiltinFunctions.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/PMLCompiler.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/PMLContext.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/PMLExecutable.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/PMLExecutor.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/PMLFormatter.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/PMLSerializable.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/PMLSerializer.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/antlr/PML.g4 delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/antlr/PML.interp delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/antlr/PML.tokens delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/antlr/PMLLexer.interp delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/antlr/PMLLexer.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/antlr/PMLLexer.tokens delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/antlr/PMLParser.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/AssignStmtVisitor.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/CreateAttrStmtVisitor.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/CreatePolicyStmtVisitor.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/CreateProhibitionStmtVisitor.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/CreateRuleStmtVisitor.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/CreateUserOrObjectStmtVisitor.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/DeassignStmtVisitor.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/DeleteStmtVisitor.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/ForRangeStmtVisitor.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/ForeachStmtVisitor.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/FunctionDefinitionVisitor.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/FunctionInvokeVisitor.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/FunctionReturnStmtVisitor.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/LiteralExprVisitor.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/PolicyVisitor.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/SetResourceAccessRightsStmtVisitor.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/StatementVisitor.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/VarStmtVisitor.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/VariableReferenceVisitor.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/functions/Append.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/functions/AppendAll.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/functions/AssignAll.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/functions/Concat.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/functions/Contains.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/functions/ContainsKey.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/functions/DeassignAll.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/functions/DeassignAllFromAndDelete.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/functions/Equals.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/functions/GetAssociationsWithSource.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/functions/GetAssociationsWithTarget.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/functions/GetChildren.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/functions/GetNode.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/functions/GetNodeProperties.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/functions/GetNodeType.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/functions/GetParents.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/functions/GetProhibitionsFor.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/functions/HasPropertyKey.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/functions/HasPropertyValue.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/functions/Length.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/functions/NodeExists.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/functions/NumToStr.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/functions/Search.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/model/context/ExecutionContext.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/model/context/VisitorContext.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/model/exception/PMLExecutionException.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/model/expression/ArrayLiteral.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/model/expression/CompareExpression.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/model/expression/EntryReference.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/model/expression/Literal.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/model/expression/LogicalExpression.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/model/expression/MapLiteral.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/model/expression/Value.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/model/expression/VariableReference.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/model/function/FormalArgument.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/model/function/FunctionExecutor.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/model/scope/PMLScopeException.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/model/scope/Scope.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/model/scope/UnknownVariableInScopeException.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/statement/AssignStatement.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/statement/AssociateStatement.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/statement/BreakStatement.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/statement/ContinueStatement.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/statement/CreateAttrStatement.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/statement/CreateObligationStatement.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/statement/CreatePolicyStatement.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/statement/CreateProhibitionStatement.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/statement/CreateRuleStatement.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/statement/CreateUserOrObjectStatement.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/statement/DeassignStatement.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/statement/DeleteRuleStatement.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/statement/DeleteStatement.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/statement/DissociateStatement.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/statement/Expression.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/statement/ForRangeStatement.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/statement/ForeachStatement.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/statement/FunctionDefinitionStatement.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/statement/FunctionInvocationStatement.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/statement/FunctionReturnStmt.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/statement/IfStatement.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/statement/PMLStatement.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/statement/SetNodePropertiesStatement.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/statement/SetResourceAccessRightsStatement.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/pml/statement/VarStatement.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/review/AccessReview.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/review/GraphReview.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/review/ObligationsReview.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/review/PolicyReview.java delete mode 100644 src/main/java/gov/nist/csd/pm/policy/review/ProhibitionsReview.java delete mode 100644 src/test/java/gov/nist/csd/pm/SamplePolicy.java create mode 100644 src/test/java/gov/nist/csd/pm/common/obligation/EventPatternTest.java create mode 100644 src/test/java/gov/nist/csd/pm/common/obligation/ObligationTest.java create mode 100644 src/test/java/gov/nist/csd/pm/common/tx/TxHandlerRunnerTest.java create mode 100644 src/test/java/gov/nist/csd/pm/integration/IntegrationTest.java create mode 100644 src/test/java/gov/nist/csd/pm/memory/pap/MemoryAccessQuerierTest.java create mode 100644 src/test/java/gov/nist/csd/pm/memory/pap/MemoryGraphModifierTest.java create mode 100644 src/test/java/gov/nist/csd/pm/memory/pap/MemoryGraphQuerierTest.java create mode 100644 src/test/java/gov/nist/csd/pm/memory/pap/MemoryObligationsModifierTest.java create mode 100644 src/test/java/gov/nist/csd/pm/memory/pap/MemoryObligationsQuerierTest.java create mode 100644 src/test/java/gov/nist/csd/pm/memory/pap/MemoryOperationsModifierTest.java create mode 100644 src/test/java/gov/nist/csd/pm/memory/pap/MemoryOperationsQueryTest.java create mode 100644 src/test/java/gov/nist/csd/pm/memory/pap/MemoryPAPTest.java create mode 100644 src/test/java/gov/nist/csd/pm/memory/pap/MemoryProhibitionsModifierTest.java create mode 100644 src/test/java/gov/nist/csd/pm/memory/pap/MemoryProhibitionsQuerierTest.java create mode 100644 src/test/java/gov/nist/csd/pm/memory/pap/MemoryRoutinesModifierTest.java create mode 100644 src/test/java/gov/nist/csd/pm/memory/pap/MemoryRoutinesQuerierTest.java create mode 100644 src/test/java/gov/nist/csd/pm/memory/pap/dag/BreadthFirstGraphWalkerTest.java rename src/test/java/gov/nist/csd/pm/{pap/memory/dag/DepthFirstGraphWalkerTest.java => memory/pap/dag/DepthFirstGraphModificationWalkerTest.java} (50%) delete mode 100644 src/test/java/gov/nist/csd/pm/pap/AccessRightTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/PAPTestInitializer.java delete mode 100644 src/test/java/gov/nist/csd/pm/pap/PolicyEventTest.java delete mode 100644 src/test/java/gov/nist/csd/pm/pap/SuperPolicyTest.java delete mode 100644 src/test/java/gov/nist/csd/pm/pap/memory/MemoryPAPTest.java delete mode 100644 src/test/java/gov/nist/csd/pm/pap/memory/MemoryPolicyDeserializerTest.java delete mode 100644 src/test/java/gov/nist/csd/pm/pap/memory/MemoryPolicyStoreTest.java delete mode 100644 src/test/java/gov/nist/csd/pm/pap/memory/dag/BreadthFirstGraphWalkerTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/modification/GraphModifierTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/modification/ObligationsModifierTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/modification/OperationsModifierTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/modification/ProhibitionsModifierTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/modification/RoutinesModifierTest.java delete mode 100644 src/test/java/gov/nist/csd/pm/pap/mysql/MysqlPAPTest.java delete mode 100644 src/test/java/gov/nist/csd/pm/pap/mysql/MysqlPolicyDeserializerTest.java delete mode 100644 src/test/java/gov/nist/csd/pm/pap/mysql/MysqlTestEnv.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/op/OperationTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/op/PreparedOperationTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/op/obligation/ObligationOpTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/ExecutionTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/FunctionTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/PMLContextVisitor.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/PMLTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/PMLUtil.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/AssignStmtVisitorTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/AssociateStmtVisitorTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/BreakStmtVisitorTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CompilerTestUtil.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/ContinueStmtVisitorTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CreateNonPCStmtVisitorTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CreateObligationStmtVisitorTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CreatePolicyStmtVisitorTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CreateProhibitionStmtVisitorTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CreateRuleStmtVisitorTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/DeassignStmtVisitorTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/DeleteRuleStmtVisitorTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/DeleteStmtVisitorTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/DissociateStmtVisitorTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/ForeachStmtVisitorTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/FunctionInvokeStmtVisitorTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/IfStmtVisitorTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/SetNodePropertiesStmtVisitorTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/SetResourceOperationsStmtVisitorTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/StatementBlockVisitorTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/VarStmtVisitorTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/executable/operation/PMLOperationSignatureTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/executable/operation/PMLOperationWrapperTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/executable/operation/PMLStmtsOperationSignatureTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/executable/routine/PMLRoutineWrapperTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/expression/EqualsExpressionTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/expression/ExpressionTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/expression/FunctionInvokeExpressionTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/expression/LogicalExpressionTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/expression/ParenExpressionTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/expression/PlusExpressionTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/expression/ValueTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/expression/literal/ArrayLiteralTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/expression/literal/BoolLiteralTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/expression/literal/LiteralVisitorTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/expression/literal/MapLiteralTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/expression/literal/StringLiteralTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/expression/reference/ReferenceByBracketIndexTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/expression/reference/ReferenceByDotIndexTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/expression/reference/ReferenceByIDTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/expression/reference/VariableReferenceTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/pattern/OperationPatternTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/pattern/PatternTestUtil.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/pattern/operand/OperandPatternTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/pattern/subject/SubjectPatternTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/statement/BreakStatementTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/statement/ContinueStatementTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/statement/ForeachStatementTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/statement/FunctionDefinitionStatementTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/statement/FunctionReturnStatementTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/statement/IfStatementTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/statement/ShortDeclarationStatementTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/statement/VariableAssignmentStatementTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/statement/VariableDeclarationStatementTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/AssignStatementTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/AssociateStatementTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/CheckStatementTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateNonPCStatementTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateObligationStatementTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateOperationStatementTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/CreatePolicyStatementTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateProhibitionStatementTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateRoutineStatementTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateRuleStatementTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/DeassignStatementTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/DeleteRuleStatementTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/DeleteStatementTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/DissociateStatementTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/SetNodePropertiesStatementTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/SetResourceOperationsStatementTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/query/AccessQuerierTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/query/GraphQuerierTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/query/ObligationsQuerierTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/query/OperationsQuerierTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/query/ProhibitionsQuerierTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/query/RoutinesQuerierTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/serialization/PMLTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pap/serialization/SerializationTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pdp/PDPTxTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pdp/PMLBootstrapperTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pdp/PrivilegeCheckerTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pdp/adjudicator/PrivilegeCheckerTest.java delete mode 100644 src/test/java/gov/nist/csd/pm/pdp/memory/MemoryPDPTest.java delete mode 100644 src/test/java/gov/nist/csd/pm/pdp/memory/MemoryPolicyReviewerTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pdp/modification/GraphModificationAdjudicatorTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pdp/modification/ObligationsModificationAdjudicatorTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pdp/modification/OperationsModificationAdjudicatorTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pdp/modification/ProhibitionsModificationAdjudicatorTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pdp/modification/RoutinesModificationAdjudicatorTest.java create mode 100644 src/test/java/gov/nist/csd/pm/pdp/modification/TestEventProcessor.java delete mode 100644 src/test/java/gov/nist/csd/pm/policy/PolicyEquals.java delete mode 100644 src/test/java/gov/nist/csd/pm/policy/events/PolicyEventHandlerTest.java delete mode 100644 src/test/java/gov/nist/csd/pm/policy/model/obligation/ResponseTest.java delete mode 100644 src/test/java/gov/nist/csd/pm/policy/pml/CompileTest.java delete mode 100644 src/test/java/gov/nist/csd/pm/policy/pml/ExecutionTest.java delete mode 100644 src/test/java/gov/nist/csd/pm/policy/pml/ObligationTest.java delete mode 100644 src/test/java/gov/nist/csd/pm/policy/pml/PMLExecutorTest.java delete mode 100644 src/test/java/gov/nist/csd/pm/policy/pml/PMLFormatterTest.java delete mode 100644 src/test/java/gov/nist/csd/pm/policy/pml/PMLTest.java delete mode 100644 src/test/java/gov/nist/csd/pm/policy/pml/ProhibitionTest.java delete mode 100644 src/test/java/gov/nist/csd/pm/policy/pml/expression/ValueTest.java delete mode 100644 src/test/java/gov/nist/csd/pm/policy/pml/statement/ExpressionTest.java delete mode 100644 src/test/java/gov/nist/csd/pm/policy/tx/TxHandlerRunnerTest.java create mode 100644 src/test/java/gov/nist/csd/pm/util/PolicyEquals.java create mode 100644 src/test/java/gov/nist/csd/pm/util/SamplePolicy.java create mode 100644 src/test/resources/sample/sample.json delete mode 100644 src/test/resources/sql/db.properties delete mode 100644 src/test/resources/sql/pm_core.sql create mode 100644 testdb/csv/O.csv create mode 100644 testdb/csv/OA.csv create mode 100644 testdb/csv/PC.csv create mode 100644 testdb/csv/U.csv create mode 100644 testdb/csv/UA.csv create mode 100644 testdb/csv/roles.csv create mode 100644 testdb/data/databases/neo4j/database_lock create mode 100644 testdb/data/databases/neo4j/id-buffer.tmp.0 create mode 100644 testdb/data/databases/neo4j/neostore create mode 100644 testdb/data/databases/neo4j/neostore.counts.db create mode 100644 testdb/data/databases/neo4j/neostore.indexstats.db create mode 100644 testdb/data/databases/neo4j/neostore.labeltokenstore.db create mode 100644 testdb/data/databases/neo4j/neostore.labeltokenstore.db.id create mode 100644 testdb/data/databases/neo4j/neostore.labeltokenstore.db.names create mode 100644 testdb/data/databases/neo4j/neostore.labeltokenstore.db.names.id create mode 100644 testdb/data/databases/neo4j/neostore.nodestore.db create mode 100644 testdb/data/databases/neo4j/neostore.nodestore.db.id create mode 100644 testdb/data/databases/neo4j/neostore.nodestore.db.labels create mode 100644 testdb/data/databases/neo4j/neostore.nodestore.db.labels.id create mode 100644 testdb/data/databases/neo4j/neostore.propertystore.db create mode 100644 testdb/data/databases/neo4j/neostore.propertystore.db.arrays create mode 100644 testdb/data/databases/neo4j/neostore.propertystore.db.arrays.id create mode 100644 testdb/data/databases/neo4j/neostore.propertystore.db.id create mode 100644 testdb/data/databases/neo4j/neostore.propertystore.db.index create mode 100644 testdb/data/databases/neo4j/neostore.propertystore.db.index.id create mode 100644 testdb/data/databases/neo4j/neostore.propertystore.db.index.keys create mode 100644 testdb/data/databases/neo4j/neostore.propertystore.db.index.keys.id create mode 100644 testdb/data/databases/neo4j/neostore.propertystore.db.strings create mode 100644 testdb/data/databases/neo4j/neostore.propertystore.db.strings.id create mode 100644 testdb/data/databases/neo4j/neostore.relationshipgroupstore.db create mode 100644 testdb/data/databases/neo4j/neostore.relationshipgroupstore.db.id create mode 100644 testdb/data/databases/neo4j/neostore.relationshipgroupstore.degrees.db create mode 100644 testdb/data/databases/neo4j/neostore.relationshipstore.db create mode 100644 testdb/data/databases/neo4j/neostore.relationshipstore.db.id create mode 100644 testdb/data/databases/neo4j/neostore.relationshiptypestore.db create mode 100644 testdb/data/databases/neo4j/neostore.relationshiptypestore.db.id create mode 100644 testdb/data/databases/neo4j/neostore.relationshiptypestore.db.names create mode 100644 testdb/data/databases/neo4j/neostore.relationshiptypestore.db.names.id create mode 100644 testdb/data/databases/neo4j/neostore.schemastore.db create mode 100644 testdb/data/databases/neo4j/neostore.schemastore.db.id create mode 100644 testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 create mode 100644 testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 create mode 100644 testdb/data/databases/store_lock create mode 100644 testdb/data/databases/system/database_lock create mode 100644 testdb/data/databases/system/id-buffer.tmp.0 create mode 100644 testdb/data/databases/system/neostore create mode 100644 testdb/data/databases/system/neostore.counts.db create mode 100644 testdb/data/databases/system/neostore.indexstats.db create mode 100644 testdb/data/databases/system/neostore.labeltokenstore.db create mode 100644 testdb/data/databases/system/neostore.labeltokenstore.db.id create mode 100644 testdb/data/databases/system/neostore.labeltokenstore.db.names create mode 100644 testdb/data/databases/system/neostore.labeltokenstore.db.names.id create mode 100644 testdb/data/databases/system/neostore.nodestore.db create mode 100644 testdb/data/databases/system/neostore.nodestore.db.id create mode 100644 testdb/data/databases/system/neostore.nodestore.db.labels create mode 100644 testdb/data/databases/system/neostore.nodestore.db.labels.id create mode 100644 testdb/data/databases/system/neostore.propertystore.db create mode 100644 testdb/data/databases/system/neostore.propertystore.db.arrays create mode 100644 testdb/data/databases/system/neostore.propertystore.db.arrays.id create mode 100644 testdb/data/databases/system/neostore.propertystore.db.id create mode 100644 testdb/data/databases/system/neostore.propertystore.db.index create mode 100644 testdb/data/databases/system/neostore.propertystore.db.index.id create mode 100644 testdb/data/databases/system/neostore.propertystore.db.index.keys create mode 100644 testdb/data/databases/system/neostore.propertystore.db.index.keys.id create mode 100644 testdb/data/databases/system/neostore.propertystore.db.strings create mode 100644 testdb/data/databases/system/neostore.propertystore.db.strings.id create mode 100644 testdb/data/databases/system/neostore.relationshipgroupstore.db create mode 100644 testdb/data/databases/system/neostore.relationshipgroupstore.db.id create mode 100644 testdb/data/databases/system/neostore.relationshipgroupstore.degrees.db create mode 100644 testdb/data/databases/system/neostore.relationshipstore.db create mode 100644 testdb/data/databases/system/neostore.relationshipstore.db.id create mode 100644 testdb/data/databases/system/neostore.relationshiptypestore.db create mode 100644 testdb/data/databases/system/neostore.relationshiptypestore.db.id create mode 100644 testdb/data/databases/system/neostore.relationshiptypestore.db.names create mode 100644 testdb/data/databases/system/neostore.relationshiptypestore.db.names.id create mode 100644 testdb/data/databases/system/neostore.schemastore.db create mode 100644 testdb/data/databases/system/neostore.schemastore.db.id create mode 100644 testdb/data/databases/system/schema/index/range-1.0/3/index-3 create mode 100644 testdb/data/databases/system/schema/index/range-1.0/4/index-4 create mode 100644 testdb/data/databases/system/schema/index/range-1.0/7/index-7 create mode 100644 testdb/data/databases/system/schema/index/range-1.0/8/index-8 create mode 100644 testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 create mode 100644 testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 create mode 100644 testdb/data/server_id create mode 100644 testdb/data/transactions/neo4j/checkpoint.0 create mode 100644 testdb/data/transactions/neo4j/neostore.transaction.db.0 create mode 100644 testdb/data/transactions/system/checkpoint.0 create mode 100644 testdb/data/transactions/system/neostore.transaction.db.0 create mode 100644 testdb/logs/debug.log create mode 100644 testdb/logs/http.log create mode 100644 testdb/logs/query.log create mode 100644 testdb/logs/security.log diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index fcaaed9c7..419312401 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -22,10 +22,10 @@ jobs: steps: - uses: actions/checkout@v3 - - name: Set up JDK 17 + - name: Set up JDK 21 uses: actions/setup-java@v3 with: - java-version: '17' + java-version: '21' distribution: 'temurin' cache: maven - name: Build with Maven diff --git a/.gitignore b/.gitignore index b56bae84d..8a6e2fb1e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ .idea policy-machine-core.iml /target -.DS_Store \ No newline at end of file +.DS_Store +**/gen/ \ No newline at end of file diff --git a/CODEMETA.yaml b/CODEMETA.yaml new file mode 100644 index 000000000..0577a88cf --- /dev/null +++ b/CODEMETA.yaml @@ -0,0 +1,36 @@ +# Topics for the NIST Open Source Portal +# +# Set the topic tags for your open source repository from the nested +# list below. Un-comment the relevant lines: +# +# remove the `#` character *and* the space immediately after it +# +# so that the YAML syntax remains valid. You may delete everything +# that does not apply, and add new topics from the NIST Taxonomy +# +# +# For example, a valid version of this file would be (note the `:` +# and `---`, they are important!) as follows: +# +# --- +# categories: +# - scientific-software +# +# themes: +# - Information Technology +# - Software research +# - Software performance +# +# Since scientific-software is most common it is left as the default +# category. Feel free to comment it with a hash (#) if it does not +# apply. There is no default theme; select as many as are relevant. +# Make sure to remove unwanted categories as the final topics are +# produced from this file. + +--- +categories: + - scientific-software + +themes: + - Information Technology + - Identity and access management diff --git a/CODEOWNERS b/CODEOWNERS new file mode 100644 index 000000000..8d1e5035f --- /dev/null +++ b/CODEOWNERS @@ -0,0 +1,9 @@ +# This file lists the contributors responsible for the +# repository content. They will also be automatically +# asked to review any pull request made in this repository. + +# Each line is a file pattern followed by one or more owners. +# The sequence matters: later patterns take precedence. + +# FILES OWNERS +* @usnistgov/opensource-team diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 000000000..b19169ae7 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,35 @@ +# NIST Software Licensing Statement + +NIST-developed software is provided by NIST as a public service. +You may use, copy, and distribute copies of the software in any +medium, provided that you keep intact this entire notice. You may +improve, modify, and create derivative works of the software or +any portion of the software, and you may copy and distribute such +modifications or works. Modified works should carry a notice +stating that you changed the software and should note the date +and nature of any such change. Please explicitly acknowledge the +National Institute of Standards and Technology as the source of +the software. + +NIST-developed software is expressly provided "AS IS." NIST MAKES +NO WARRANTY OF ANY KIND, EXPRESS, IMPLIED, IN FACT, OR ARISING BY +OPERATION OF LAW, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, +NON-INFRINGEMENT, AND DATA ACCURACY. NIST NEITHER REPRESENTS NOR +WARRANTS THAT THE OPERATION OF THE SOFTWARE WILL BE UNINTERRUPTED +OR ERROR-FREE, OR THAT ANY DEFECTS WILL BE CORRECTED. NIST DOES +NOT WARRANT OR MAKE ANY REPRESENTATIONS REGARDING THE USE OF THE +SOFTWARE OR THE RESULTS THEREOF, INCLUDING BUT NOT LIMITED TO THE +CORRECTNESS, ACCURACY, RELIABILITY, OR USEFULNESS OF THE +SOFTWARE. + +You are solely responsible for determining the appropriateness of +using and distributing the software and you assume all risks +associated with its use, including but not limited to the risks +and costs of program errors, compliance with applicable laws, +damage to or loss of data, programs or equipment, and the +unavailability or interruption of operation. This software is not +intended to be used in any situation where a failure could cause +risk of injury or damage to property. The software developed by +NIST employees is not subject to copyright protection within the +United States. diff --git a/README.md b/README.md index 778a9a0a6..0f0f348a7 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,13 @@ # Policy Machine Core -The core components of the NIST Policy Machine, a reference implementation of the Next Generation Access Control (NGAC) standard. For complete documentation and detailed examples visit the [Wiki](https://github.com/PM-Master/policy-machine-core/wiki). +The core components of the NIST Policy Machine, a reference implementation of the Next Generation Access Control (NGAC) standard. +For complete documentation and detailed examples visit the Wiki. -## Table of Contents -1. [Installation](#install-using-maven) -2. [Basic Usage](#basic-usage) -3. [Policy Author Language (PAL)](/pml/README.md) +## Installation + +### Install using Maven +Policy Machine Core uses [JitPack](https://jitpack.io/) to compile and build the artifact to import with maven. -## Install using Maven -Policy Machine Core uses [JitPack](https://jitpack.io/) to compile and build the artifact to import into projects. First, add jitpack as a repository ```xml @@ -22,93 +21,131 @@ First, add jitpack as a repository -- ``` + Then, add the maven dependency ```xml com.github.PM-Master policy-machine-core - LATEST + 3.0.0 ``` +## Package Description + +- `pap` - Policy Administration Point. Provides the Policy Machine implementation of the NGAC PAP interfaces for modifying and querying policy. +- `pdp` - Policy Decision Point. Implementation of an administrative PDP that controls access to admin operations on the PAP. +- `epp` - Event Processing Point. The epp attaches to a PDP to listen to administrative events while exposing an interface for a PEP to send events. +- `impl` - Policy Machine supported implementations of the PAP interfaces. ## Basic Usage +The following examples use the provided in memory PAP. -Policy Machine Language docs can be found [here](/pml) +### PAP Usage -### 1. Policy Machine Language (PML) definition +#### Create a policy with the `PolicyModification` interface ```java -String pal = """ -set resource access rights ["read", "write"] - -create policy class "pc1" -create user attribute "ua1" in ["pc1"] -create user attribute "oa1" in ["pc1"] -associate "ua1" and "oa1" with ["read", "write"] - -create policy class "pc2" -assign "ua2" to ["pc2"] -create user attribute "oa2" in ["pc2"] -associate "ua2" and "oa2" with ["read", "write"] - -create user "u1" in ["ua1", "ua2"] -create user "u2" in ["ua1", "ua2"] +// create a new memory PAP +PAP pap = new MemoryPAP(); -create object "o1" in ["oa1", "oa2"] +// set the resource operations that the policy will support +pap.modify().operations().setResourceOperations(new AccessRightSet("read", "write")); + +// create a simple configuration with one of each node type, granting u1 read access to o1. +pap.modify().graph().createPolicyClass("pc1"); +pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); +pap.modify().graph().createUser("u1", List.of("ua1")); +pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); +pap.modify().graph().createObject("o1", List.of("oa1")); + +// create a prohibition +pap.modify().prohibitions().createProhibition( + "deny u1 write on oa1", + ProhibitionSubject.userAttribute("u1"), + new AccessRightSet("write"), + false, + List.of("oa1") +); + +// create an obligation that associates ua1 with any OA +String obligationPML = """ +create obligation "sample_obligation" { + create rule "rule1" + when any user + performs "create_object_attribute" + on { + descendants: "oa1" + } + do(ctx) { + associate "ua1" and ctx.operands.name with ["read", "write"] + } +} +"""; -create prohibition "u2-prohibition" -deny user "u2" -access rights ["write"] -on intersection of ["oa1", "oa2"] +// when creating an obligation a user is required +// this is the user the obligation response will be executed on behalf of +pap.executePML(new UserContext("u1"), obligationPML); +``` -create obligation "o1-obligation" { - create rule "o1-assignment-rule" +#### Create a policy with `PML` +```java +String pml = """ +set resource operations ["read", "write"] + +create pc "pc1" +create oa "oa1" in ["pc1"] +create ua "ua1" in ["pc1"] +create u "u1" in ["ua1"] +create o "o1" in ["oa1"] + +create prohibition "deny u1 write on oa1" +deny user "u1" +access rights ["write"] +on union of ["oa1"] + +create obligation "sample_obligation" { + create rule "rule1" when any user - performs ["assign"] - on "o1" - do(evtCtx) { - let parent = evtCtx["parent"] - associate "ua1" and parent with ["read", "write"] - associate "ua2" and parent with ["read", "write"] + performs "create_object_attribute" + on { + descendants: "oa1" + } + do(ctx) { + associate "ua1" and ctx.operands.name with ["read", "write"] } } -""" +"""; ``` -#### 2. Load PAL into a Memory Policy Administration Point (PAP) as the super user -No access checks are done yet, the user is needed to know who the author of any obligations are. +A user is required to execute PML. This user will be the defined author of any obligations created. ```java -UserContext superUser = new UserContext(SUPER_USER); -PAP pap = new MemoryPAP(); -pap.deserialize().fromPML(superUser, input); -``` +// execute the pml and apply to existing policy +pap.executePML(new UserContext("u1")), pml); -#### 3. Wrap in a PDP object to add administrative permission checks -```java -PDP pdp = new MemoryPDP(pap); +// or + +// reset the current policy befire applying the PML +pap.deserialize(new UserContext("u1"), pml, new PMLDeserializer()) ``` -#### 4. Run a PDP Transaction as the super user -This transaction will create 'pc3' and 'oa3', then assign 'o1' to 'oa3'. This will trigger the obligation to associate -'ua1' and 'ua2' with 'oa3'. +### PDP Usage +#### Initialization ```java -pdp.runTx(superUser, (policy) -> { - policy.graph().createPolicyClass("pc3") - policy.graph().createObjectAttribute("oa3", "pc2"); - policy.graph().assign("o1", "oa3"); -}); +PDP pdp = new PDP(pap); ``` - -#### 5. Run a PDP transaction as u1 that will fail -u1 does not have permission to create an object attribute in 'oa1'. This transaction will fail and 'newOA' will not be created. +#### Run a transaction as a user ```java -UserContext u1 = new UserContext("u1"); -pdp.runTx(u1, (policy) -> { - policy.graph().createObjectAttribute("newOA", "oa1"); +pdp.runTx(new UserContext("u1"), (policy) -> { + policy.modify().graph().createPolicyClass("pc3") + policy.modify().graph().createObjectAttribute("oa3", "pc2"); + policy.modify().graph().assign("o1", "oa3"); }); ``` -#### 6. Create an EPP to respond to policy events -An EPP will listen to policy events from the provided PDP and process obligations accordingly. +### EPP Usage +An EPP will listen to policy events from the provided PDP and process obligations in the PAP accordingly. The EPP and PDP uses an event listener pattern. The EPP listens to events from the PDP, attaching itself within the EPP constructor. ```java EPP epp = new EPP(pdp, pap); + +// will trigger above obligation response and associate ua1 with oa2 +pdp.modify().graph().createObjectAttribute("oa2", List.of("oa1")); ``` diff --git a/fair-software.md b/fair-software.md new file mode 100644 index 000000000..274c4c6dd --- /dev/null +++ b/fair-software.md @@ -0,0 +1,297 @@ +# FAIR Software & Data + +The following material is paraphrased from the NIST-internal +[Data Sponsorship][sponsors] repository by @tkphd. + +## Table of Contents + +- [FAIR principles](#fair-principles) + - [Findable](#findable) + - [Accessible](#accessible) + - [Interoperable](#interoperable) + - [Reusable](#reusable) +- [Make It FAIR in Ten Easy Steps](#make-it-fair-in-ten-easy-steps) +- [What's "good enough"?](#whats-good-enough) + - [Data management](#data-management) + - [Software](#software) + - [Collaboration](#collaboration) + - [Project organization](#project-organization) + - [Keeping track of changes](#keeping-track-of-changes) + - [Manuscripts](#manuscripts) +- [Links](#links) + +## FAIR principles + +What does FAIR even mean? The following sections reproduce the +summary from [Go FAIR][gofair], based on the original +[FAIR paper][fair]. + +Think you know FAIR? Please [use this tool][fair-aware] to check your +awareness! + +### Findable + +The first step in (re)using data is to find them. Metadata and data +should be easy to find for both humans and computers. +Machine-readable metadata are essential for automatic discovery of +datasets and services, so this is an essential component of the +FAIRification process. + +1. (Meta)data are assigned a globally unique and persistent + identifier +2. Data are described with rich metadata (defined by R1 below) +3. Metadata clearly and explicitly include the identifier of the data + they describe +4. (Meta)data are registered or indexed in a searchable resource + +### Accessible + +Once the user finds the required data, she/he/they need to know how +can they be accessed, possibly including authentication and +authorisation. + +1. (Meta)data are retrievable by their identifier using a + standardised communications protocol + 1. The protocol is open, free, and universally implementable + 2. The protocol allows for an authentication and authorisation + procedure, where necessary +2. Metadata are accessible, even when the data are no longer + available + +### Interoperable + +The data usually need to be integrated with other data. In addition, +the data need to interoperate with applications or workflows for +analysis, storage, and processing. + +1. (Meta)data use a formal, accessible, shared, and broadly + applicable language for knowledge representation. +2. (Meta)data use vocabularies that follow FAIR principles +3. (Meta)data include qualified references to other (meta)data + +### Reusable + +The ultimate goal of FAIR is to optimise the reuse of data. To +achieve this, metadata and data should be well-described so that they +can be replicated and/or combined in different settings. + +1. (Meta)data are richly described with a plurality of accurate and + relevant attributes + 1. (Meta)data are released with a clear and accessible data usage + license + 2. (Meta)data are associated with detailed provenance + 3. (Meta)data meet domain-relevant community standards + +## Make It FAIR in Ten Easy Steps + +[Library Carpentry][lc] has a summary of [10 "easy" steps to make your +software FAIR][lc-fair-poster] (PDF). An annotated list follows. +Note that while the list is software-centric, it applies equally to data. + +1. *Create a description of your software.* + Write this in `README.md` with supporting tables, charts, images, + etc. Include its dependencies, installation instructions, and + citations of any work it builds upon. +2. *Register your software in a software registry.* + [MIDAS][midas] is the go-to where Data Sponsorship is concerned, + but is not the only option. +3. *Use a unique and persistent identifier for your software.* + Any registry compliant with [NIST O 5702][o5702] will provide you + with a persistent handle. +4. *Make sure that people can download your software.* + If the data is fire- or pay-walled, provide an alternative site. + Wherever your data lives, check back from time to time to make + sure the links are still valid. +5. *Explain the functionality of your software.* + Write this into a "Usage" section of `README.md`, or similar, + with example of how to configure, launch, and interact with the + software, with examples of output to be expected. +6. *Use standard (community-agreed) formats for inputs and outputs.* + While open standards are preferred, if a proprietary format is the + *lingua franca* of the field, focus on that. Create open versions + if possible. +7. *Document your software.* + This goes beyond `README.md` and in-line comments. Place + documentation, or its build scripts, in a folder named `doc` with + its own `README.md` describing how to build the docs and what to + expect. +8. *Give your software a license.* + If all members of the development team are Federal employees, use + the standard NIST Disclaimer of Copyright and Warranty for your + [LICENSE.md][disc-copy]. Otherwise, decide on an appropriate + license. +9. *State how to cite your software.* + This can be done in `README.md`, or as a separate + [`CITATION.md`][citation] using a BiBTeX-styled code block. +10. *Follow best practices for software development.* + Broadly speaking, this starts with version control using + [git][git] or similar, [linting][lint] your code, and following + some type of branching workflow when multiple developers are + involved. The regularly-scheduled Software Carpentry workshops at + NIST teach the basics of some of these concepts. + +## What's good enough? + +[*Good enough practices in scientific computing*][gepsc] is an +excellent paper outlining what you need to do to produce good science +in a FAIR frame of mind. + +*tl;dr* follows. + +### Data management + +1. Save the raw data. +2. Ensure that raw data are backed up in more than one location. +3. Create the data you wish to see in the world. +4. Create analysis-friendly data. +5. Record all the steps used to process data. +6. Anticipate the need to use multiple tables, and use a unique + identifier for every record. +7. Submit data to a reputable DOI-issuing repository so that others + can access and cite it. + +### Software + +1. Place a brief explanatory comment at the start of every program. +2. Decompose programs into functions. +3. Be ruthless about eliminating duplication. +4. Always search for well-maintained software libraries that do what + you need. +5. Test libraries before relying on them. +6. Give functions and variables meaningful names. +7. Make dependencies and requirements explicit. +8. Do not comment and uncomment sections of code to control a + program's behavior. +9. Provide a simple example or test data set. +10. Submit code to a reputable DOI-issuing repository. + +### Collaboration + +1. Create an overview of your project. +2. Create a shared "to-do" list for the project. +3. Decide on communication strategies. +4. Make the license explicit. +5. Make the project citable. + +### Project organization + +1. Put each project in its own directory, which is named after the + project. +2. Put text documents associated with the project in the `doc` + directory. +3. Put raw data and metadata in a `data` directory and files generated + during cleanup and analysis in a results directory. +4. Put project source code in the `src` directory. +5. Put external scripts or compiled programs in the `bin` directory. +6. Name all files to reflect their content or function. + +### Keeping track of changes + +1. Back up (almost) everything created by a human being as soon as it + is created. +2. Keep changes small. +3. Share changes frequently. +4. Create, maintain, and use a checklist for saving and sharing + changes to the project. +5. Store each project in a folder that is mirrored off the + researcher's working machine. +6. Add a file called `CHANGELOG.md` to the project's docs subfolder. +7. Copy the entire project whenever a significant change has been + made. +8. Use a version control system. + +### Manuscripts + +1. Write manuscripts using online tools with rich formatting, change + tracking, and reference management. +2. Write the manuscript in a plain text format that permits version + control. + +## Links + +- [F-UJI][fuji] (*tool*): analyze a repository and get a report of + its FAIR compliance, with an overall score and a checklist +- [FAIRaware][fair-aware] quiz/checklist of understanding +- [FAIR for Research Software (FAIR4RS)][fair4rs], a proposed + modification of the FAIR principles specifically for software. +- [10 easy things to make your software FAIR!][lc-fair-poster] (PDF) + from [Library Carpentry][lc-fair] +- [4 Simple Recommendations for Open-Source Software][4oss] + walk-through lesson, Carpentries-style + +Some more general FAIR resources: + +- Research Data Alliance: [Top 10 FAIR data and software things](https://www.rd-alliance.org/group/libraries-research-data-ig/outcomes/top-10-fair-data-software-things) +- Library Carpentries: [Top 10 FAIR Research Software Things](https://librarycarpentry.org/Top-10-FAIR//2018/12/01/research-software/) +- [NLeSC FAIR Software](https://fair-software.eu/) +- [NLeSC howfairis](https://github.com/fair-software/howfairis) +- [Data and Software Sharing Guidance for Authors Submitting to AGU journals](https://data.agu.org/resources/agu-data-software-sharing-guidance) +- [FAIRSharing and FAIRShake](https://presqt.readthedocs.io/en/latest/) + from the Preservation Quality Tool (PresQT) +- [Registry of Research Data Repositories](https://re3data.org/) + also has software locations +- [*Automating the Monitoring of Research Software FAIR Metrics*](https://doi.org/10.7490/f1000research.1117992.1) +- [Proposal for software indicators in the Open Science Monitor](https://www.ouvrirlascience.fr/about-the-proposal-for-software-indicators-in-open-science-monitor-3/) +- *National Plan for Open Science* (France, 2021-2024). + [Theme Three: Opening Up and Promoting Source Code Produced by Research](https://www.ouvrirlascience.fr/second-national-plan-for-open-science/) +- [The Turing Way](https://the-turing-way.netlify.app/welcome) +- [*Software Citation Guide*](https://doi.org/10.12688/f1000research.26932.2) +- [Managing Research Software Projects](https://swcarpentry.github.io/managing-research-software-projects/) +- [Guides](https://www.software.ac.uk/resources/guides) + for several groups (researchers, managers, developers, ...) from + the Software Sustainability Institute +- [Chorus Software Citation Policies Index](https://chorusaccess.org) +- [Software Discovery Through Registries](https://softdev4research.github.io/4OSS-lesson/05-use-registry/index.html) +- [Awesome FAIR Data][afd]: a list of FAIR data resources. +- [Awesome Research Software Registries](https://github.com/NLeSC/awesome-research-software-registries/blob/main/README.md) +- [CodeMeta Standard](https://codemeta.github.io/) + - [CodeMeta Generator][cmg] (*tool*): generate a complete set of + [CodeMeta][codemeta]-compliant metadata for your research software + and/or data with this handy form. Exports to JSON. + *Note:* `codemeta.json` is *not* the same as `codemeta.yaml`: the + former is a nascent general schema, while the latter is only used + to help index and link NIST websites. +- [SOftware Metadata Extraction Framework (SOMEF)](https://github.com/KnowledgeCaptureAndDiscovery/somef/) +- [*Good Enough Practices in Scientific Computing*](https://doi.org/10.1371/journal.pcbi.1005510) +- [Citation File Format][citation] docs from GitHub +- [Software REUSE Specification](https://reuse.software/spec/) +- [FAIR Computational Workflows][fcw] (*paper*): Data doesn't just + happen. Record the workflow that created it to be super FAIR. + +Institutional guidance: + +- DLR: [Software Engineering Initiative](https://rse.dlr.de/01_guidelines.html) +- MIT: [Software Citation and Publishing](https://libguides.mit.edu/software) +- MIT workshop: [Managing your research code](https://www.dropbox.com/s/gukkthqzcuea1kr/MgingCode_Slides_MIT.pdf?dl=0) +- TU Delft [*Guidelines on Research Software: Licensing, Registration and Commercialisation*](https://doi.org/10.5281/zenodo.4629635) +- TU Delft: [Choosing a Repository Manager](https://doi.org/10.5281/zenodo.4710206) +- Helmholtz: [Guidelines for Sustainable Research Software](https://gfzpublic.gfz-potsdam.de/pubman/faces/ViewItemOverviewPage.jsp?itemId=item_4906899) + - [Checklist for Helmholtz Guidelines](https://gfzpublic.gfz-potsdam.de/pubman/faces/ViewItemOverviewPage.jsp?itemId=item_5007561) +- NIH: [Best Practices for Sharing Research Software](https://datascience.nih.gov/tools-and-analytics/best-practices-for-sharing-research-software-faq) + + + +[4oss]: https://softdev4research.github.io/4OSS-lesson/ +[afd]: https://github.com/Materials-Data-Science-and-Informatics/awesome-fair-data +[citation]: https://github.com/citation-file-format/citation-file-format +[cmg]: https://codemeta.github.io/codemeta-generator/ +[codemeta]: https://codemeta.github.io/ +[disc-copy]: https://www.nist.gov/open/copyright-fair-use-and-licensing-statements-srd-data-software-and-technical-series-publications +[fair]: https://doi.org/10.1038/sdata.2016.18 +[fair4rs]: https://doi.org/10.1016/j.patter.2021.100222 +[fair-aware]: https://fairaware.dans.knaw.nl +[fcw]: https://doi.org/10.1162/dint_a_00033 +[fuji]: https://www.f-uji.net/index.php?action=home +[gepsc]: https://doi.org/10.1371/journal.pcbi.1005510 +[git]: https://git-scm.com +[git-open]: https://github.com/usnistgov/opensource-repo +[gofair]: https://www.go-fair.org/fair-principles/ +[lc-fair]: https://librarycarpentry.org/Top-10-FAIR//2018/12/01/research-software/ +[lc-fair-poster]: https://librarycarpentry.org/Top-10-FAIR/files/poster_10things_FAIRsoftware.pdf +[lint]: https://en.wikipedia.org/wiki/Lint_(software) +[midas]: https://midas.nist.gov/ +[o5701]: https://inet.nist.gov/adlp/directives/managing-public-access-results-federally-funded-research-0 +[o5702]: https://inet.nist.gov/adlp/directives/preservation-maintenance-published-research-data +[sp811]: https://dx.doi.org/10.6028/NIST.SP.811e2008 +[sponsors]: https://gitlab.nist.gov/gitlab/tkphd/data-sponsorship +[taxon]: https://doi.org/10.18434/T4/1432795 diff --git a/jitpack.yml b/jitpack.yml index 00c69abe7..c7d4790e1 100644 --- a/jitpack.yml +++ b/jitpack.yml @@ -1,4 +1,4 @@ before_install: - sdk update - - sdk install java 17.0.1-open - - sdk use java 17.0.1-open \ No newline at end of file + - sdk install java 21.0.3-tem + - sdk use java 21.0.3-tem \ No newline at end of file diff --git a/pml/README.md b/pml/README.md deleted file mode 100644 index 64398828d..000000000 --- a/pml/README.md +++ /dev/null @@ -1,268 +0,0 @@ -# Policy Machine Language (PML) - -The Policy Machine Language (PML) defines a set of statements that can be used to create NGAC graphs, prohibitions, and obligations. -It also supports logic and control statements such as [if](#if) statements and [for](#for) loops. - -## ANTLR4 -PML is defined using [ANTLR4](https://www.antlr.org/). The PML grammar is defined [here](/src/main/java/gov/nist/csd/pm/policy/pml/antlr/PML.g4). - -To build the ANTLR4 Java files from PML.g4, run: -`mvn clean generate-sources` - - -## Examples - -### Variable declaration -Variable types can be one of: - -- string - - ```pml - "hello world" - 'hello world' - ``` - -- boolean - - ```pml - true - false - ``` - -- number (int) - - ```pml - 123 - ``` - -- array - element type can be any supported type - - ```pml - ["1", "2", "3"] - ``` - -- map - **key** type must be string, **value** type can be any supported type - - ``` - { - "key1": "hello", - "key2": "world" - } - - { - "key1": ["1", "2", "3"], - "key2": ["3", "4", "5"] - } - ``` - -- any - type will be determined at runtime, an error may occur if the value is used improperly for it's assigned type - (i.e. accessing a map key on a string) - -#### Examples - -```pml -# variable declaration -let a = "hello world" -let b = 123 -let c = true -let d = { - "key1": "hello", - "key2": "world" -} - -# constant declaration -const e = "hello world" -``` - -### If -PML supports logical operators `&&` and `||` as well as comparison operators `==` and `!=`. - -```pml -let x = "a"; -let y = "b"; -let z = "a"; - -if x == y { - # do something -} else if x == z || y == z { - # do something -} else { - # do something -} -``` - -### For - -#### Foreach - -```pml -let arr = ["1", "2", "3"] -foreach x in arr { - # do something with x -} - -let m = {"k1": "v1", "k2": "v2"} -foreach key, value in m { - # do something - # key = map key - # value = map value -} -``` - -#### For range -Iterate from one bound to another. Use `(` or `)` to indicate an exclusive bound and `[` or `]` for an inclusive bound. - -```pml -for i in range [0, 100) { - # do something with i -} -``` - -### Functions - -#### Definition -```pml -function testFunc(string a, map[string]string b, []string c) string { - -} -``` - -#### Invocation -```pml -testFunc("...", {...}, [...]) -``` - -### Set Resource Access Rights -```pml -set resource access rights ["read", "write"] -``` - -### Create Policy Class -```pml -create policy class 'pc1' -``` - -### Create User|Object Attribute -```pml -create user attribute 'ua1' in ['pc1', 'pc2'] -create object attribute 'oa1' in ['pc1'] -``` - -### Create User|Object -```pml -create user 'u1' in ['ua1', 'ua2'] -create object 'o1' in ['oa1'] -``` - -### Set Node Properties -```pml -set properties of 'oa1' to {"key": "value", "key2": "value2"} -``` - -### Assign -```pml -assign 'u1' to ['ua1', 'ua2'] -``` - -### Deassign -```pml -deassign "u1" from ["ua1", "ua2"] -``` - -### Associate -```pml -associate "ua1" and "oa1" with ["read", "write"] -``` - -### Dissociate -```pml -dissociate "ua1" and "oa1" -``` - -### Create Prohibition - -```pml -# user prohibition -create prohibition 'prohibition1' -deny user 'u1' -access rights ["read"] -on intersection of ["oa1", !"oa2"] # ! denotes complement of attribute - -# user attribute prohibition -create prohibition 'prohibition1' -deny user attribute 'ua1' -access rights ["read"] -on union of ["oa1", "oa2"] - -# process prohibition -create prohibition 'prohibition1' -deny process '123' -access rights ["read"] -on union of ["oa1", "oa2"] -``` - -### Create Obligation -An obligation response context `ctx` holds information pertaining to the event that triggered the response. The ctx variable -is of type `map[string]any`. - -```pml -create obligation 'obl1' { - create rule 'rule1' - when any user - performs ["assign", assign_to"] - on "oa1" - do(ctx) { - # response defined in PML - # ctx will have event information depending on the event that triggers this response - # ctx could be an "assign" event or "assign_to" event - } -} -``` - -### Delete Node|Prohibition|Obligation|Rule -```pml -delete node "oa1" - -delete prohibition "prohibition1" - -delete obligation "obligation1" - -delete rule "rule1" from obligation "obligation1" -``` - -### Example -```pml -set resource access rights ["read", "write"] - -create policy class "pc1" -create user attribute "ua1" in ["pc1"] -create user attribute "oa1" in ["pc1"] -associate "ua1" and "oa1" with ["read", "write"] - -create policy class "pc2" -create user attribute "ua2" in ["pc2"] -create object attribute "oa2" in ["pc2"] -associate "ua2" and "oa2" with ["read", "write"] - -create user "u1" in ["ua1", "ua2"] -create user "u2" in ["ua1", "ua2"] - -create object "o1" in ["oa1", "oa2"] - -create prohibition "u2-prohibition" -deny user "u2" -access rights ["write"] -on intersection of ["oa1", "oa2"] - -create obligation "o1-obligation" { - create rule "o1-assignment-rule" - when any user - performs ["assign"] - on "o1" - do(evtCtx) { - let parent = evtCtx["parent"] - associate "ua1" and parent with ["read", "write"] - associate "ua2" and parent with ["read", "write"] - } -} -``` diff --git a/pom.xml b/pom.xml index 41404abfc..25e0cc3b4 100644 --- a/pom.xml +++ b/pom.xml @@ -11,14 +11,26 @@ + + org.apache.maven.plugins + maven-jar-plugin + + + + test-jar + + + + 3.3.0 + org.apache.maven.plugins maven-compiler-plugin 3.10.1 true - 17 - 17 + 21 + 21 @@ -64,12 +76,12 @@ antlr4-maven-plugin ${antlr.version} - src/main/java/gov/nist/csd/pm/policy/pml/antlr - src/main/java/gov/nist/csd/pm/policy/pml/antlr + src/main/java/gov/nist/csd/pm/pap/pml/antlr + src/main/java/gov/nist/csd/pm/pap/pml/antlr true -package - gov.nist.csd.pm.policy.pml.antlr + gov.nist.csd.pm.pap.pml.antlr @@ -106,46 +118,24 @@ 5.9.0 test - - - - mysql - mysql-connector-java - 8.0.30 - - - org.testcontainers - mysql - 1.17.4 - test - - - org.testcontainers - junit-jupiter - 1.17.4 - test - - - - - com.fasterxml.jackson.core - jackson-databind - 2.14.0 - commons-io commons-io 2.11.0 - org.apache.commons commons-lang3 - 3.12.0 + 3.13.0 + + + it.unimi.dsi + fastutil + 8.5.13 - 4.8 + 4.13.1 diff --git a/sql/pm_core.sql b/sql/pm_core.sql index 99754909b..15643a871 100644 --- a/sql/pm_core.sql +++ b/sql/pm_core.sql @@ -61,14 +61,14 @@ CREATE TABLE IF NOT EXISTS `prohibition_type` ( CREATE TABLE IF NOT EXISTS `prohibition` ( `id` int(11) NOT NULL AUTO_INCREMENT, - `label` varchar(50) NOT NULL, + `name` varchar(50) NOT NULL, `node_id` int(11), `process_id` varchar(50), `subject_type` int(11) NOT NULL, `is_intersection` int(1) NOT NULL, `access_rights` json NOT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `prohibition_label` (`label`), + UNIQUE KEY `prohibition_label` (`name`), CONSTRAINT `fk_prohibition_node_id` FOREIGN KEY (`node_id`) REFERENCES `node` (`id`) ON DELETE CASCADE, CONSTRAINT `fk_prohibition_type_id` FOREIGN KEY (`subject_type`) REFERENCES `prohibition_type` (`id`) ); @@ -84,11 +84,11 @@ CREATE TABLE IF NOT EXISTS `prohibition_container` ( CREATE TABLE IF NOT EXISTS `obligation` ( `id` int(11) NOT NULL AUTO_INCREMENT, - `label` varchar(50) NOT NULL, + `name` varchar(50) NOT NULL, `author` json NOT NULL, `rules` BLOB NOT NULL, PRIMARY KEY(`id`), - UNIQUE KEY `obligation_label` (`label`) + UNIQUE KEY `obligation_label` (`name`) ); CREATE TABLE IF NOT EXISTS `pml_function` ( diff --git a/src/main/java/gov/nist/csd/pm/epp/EPP.java b/src/main/java/gov/nist/csd/pm/epp/EPP.java index 6b39b6f78..24194c568 100644 --- a/src/main/java/gov/nist/csd/pm/epp/EPP.java +++ b/src/main/java/gov/nist/csd/pm/epp/EPP.java @@ -1,23 +1,60 @@ package gov.nist.csd.pm.epp; -import gov.nist.csd.pm.policy.exceptions.PMException; +import gov.nist.csd.pm.pap.obligation.EventContext; import gov.nist.csd.pm.pap.PAP; import gov.nist.csd.pm.pdp.PDP; -import gov.nist.csd.pm.policy.events.PolicyEventListener; -import gov.nist.csd.pm.policy.events.PolicyEvent; +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.obligation.Obligation; +import gov.nist.csd.pm.pap.obligation.Response; +import gov.nist.csd.pm.pap.obligation.Rule; +import gov.nist.csd.pm.pdp.PDPExecutionContext; -public class EPP implements PolicyEventListener{ +import java.util.Collection; +import java.util.List; - private final EventListener eventListener; +public class EPP { + + private final EPPEventProcessor eventListener; public EPP(PDP pdp, PAP pap) throws PMException { - eventListener = new EventListener(new EventProcessor(pdp, pap)); + eventListener = new EPPEventProcessor(pdp, pap); + + pdp.addEventListener(eventListener); + } - pdp.addEventListener(eventListener, false); + public EPPEventProcessor getEventProcessor() { + return eventListener; } - @Override - public void handlePolicyEvent(PolicyEvent event) throws PMException { - eventListener.handlePolicyEvent(event); + public static class EPPEventProcessor implements EventProcessor { + + private PDP pdp; + private PAP pap; + + public EPPEventProcessor(PDP pdp, PAP pap) { + this.pdp = pdp; + this.pap = pap; + } + + @Override + public void processEvent(EventContext eventCtx) throws PMException { + Collection obligations = pap.query().obligations().getObligations(); + for(Obligation obligation : obligations) { + String author = obligation.getAuthor(); + List rules = obligation.getRules(); + for(Rule rule : rules) { + if(!rule.getEventPattern().matches(eventCtx, pap)) { + continue; + } + + Response response = rule.getResponse(); + UserContext userContext = new UserContext(author); + + // need to run pdp tx as author + pdp.runTx(userContext, txPDP -> response.execute(new PDPExecutionContext(userContext, txPDP), eventCtx)); + } + } + } } } diff --git a/src/main/java/gov/nist/csd/pm/epp/EventContext.java b/src/main/java/gov/nist/csd/pm/epp/EventContext.java deleted file mode 100644 index a9d51a90c..000000000 --- a/src/main/java/gov/nist/csd/pm/epp/EventContext.java +++ /dev/null @@ -1,72 +0,0 @@ -package gov.nist.csd.pm.epp; - -import gov.nist.csd.pm.pdp.PolicyReviewer; -import gov.nist.csd.pm.policy.events.*; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.UserContext; -import gov.nist.csd.pm.policy.model.obligation.event.EventPattern; -import gov.nist.csd.pm.policy.model.obligation.event.EventSubject; -import gov.nist.csd.pm.policy.model.obligation.event.Target; - -public class EventContext implements PolicyEvent { - - private final UserContext userCtx; - private final String eventName; - private final String target; - private final PolicyEvent event; - - public EventContext(UserContext userCtx, String target, PolicyEvent event) { - this.userCtx = userCtx; - this.eventName = event.getEventName(); - this.target = target; - this.event = event; - } - - public EventContext(UserContext userCtx, PolicyEvent event) { - this.userCtx = userCtx; - this.eventName = event.getEventName(); - this.target = ""; - this.event = event; - } - - public UserContext getUserCtx() { - return userCtx; - } - - public String getEventName() { - return eventName; - } - - public String getTarget() { - return target; - } - - public PolicyEvent getEvent() { - return event; - } - - public boolean matchesPattern(EventPattern pattern, PolicyReviewer policyReviewer) throws PMException { - if (pattern.getOperations().isEmpty() || pattern.getOperations().get(0).isEmpty()) { - return true; // an empty event pattern will match all events - } else if (pattern.getOperations() != null && - !pattern.getOperations().contains(eventName)) { - return false; - } - - EventSubject patternSubject = pattern.getSubject(); - Target patternTarget = pattern.getTarget(); - - return patternSubject.matches(userCtx, policyReviewer) && - patternTarget.matches(target, policyReviewer); - } - - @Override - public String toString() { - return "EventContext{" + - "userCtx=" + userCtx + - ", eventName='" + eventName + '\'' + - ", target=" + target + - ", event=" + event + - '}'; - } -} diff --git a/src/main/java/gov/nist/csd/pm/epp/EventEmitter.java b/src/main/java/gov/nist/csd/pm/epp/EventEmitter.java new file mode 100644 index 000000000..d1c1139bc --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/epp/EventEmitter.java @@ -0,0 +1,30 @@ +package gov.nist.csd.pm.epp; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.obligation.EventContext; + +/** + * Interface for emitting events to be processed by an EPP. + */ +public interface EventEmitter { + + /** + * Add the given EventProcessor as a listener for policy events. + * @param processor The processor to add as a listener. + */ + void addEventListener(EventProcessor processor); + + /** + * Remove the given EventProcessor as a listener. + * @param processor The processor to remove. + */ + void removeEventListener(EventProcessor processor); + + /** + * Emit the given event context to any EventProcessors listening. + * @param event The EventContext to emit. + * @throws PMException If there is an exception emitting the event. + */ + void emitEvent(EventContext event) throws PMException; + +} diff --git a/src/main/java/gov/nist/csd/pm/epp/EventListener.java b/src/main/java/gov/nist/csd/pm/epp/EventListener.java deleted file mode 100644 index 114b209e9..000000000 --- a/src/main/java/gov/nist/csd/pm/epp/EventListener.java +++ /dev/null @@ -1,29 +0,0 @@ -package gov.nist.csd.pm.epp; - -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.events.PolicyEventListener; -import gov.nist.csd.pm.policy.events.PolicyEvent; -import gov.nist.csd.pm.policy.exceptions.PMRuntimeException; - -class EventListener implements PolicyEventListener { - - private final EventProcessor eventProcessor; - - public EventListener(EventProcessor eventProcessor) { - this.eventProcessor = eventProcessor; - } - - @Override - public void handlePolicyEvent(PolicyEvent event) { - if (!(event instanceof EventContext evtCtx)) { - // ignore events that are not EventContext - return; - } - - try { - this.eventProcessor.processEvent(evtCtx); - } catch (PMException e) { - throw new PMRuntimeException(e.getMessage()); - } - } -} diff --git a/src/main/java/gov/nist/csd/pm/epp/EventProcessor.java b/src/main/java/gov/nist/csd/pm/epp/EventProcessor.java index 75a67ba0c..bc24c499d 100644 --- a/src/main/java/gov/nist/csd/pm/epp/EventProcessor.java +++ b/src/main/java/gov/nist/csd/pm/epp/EventProcessor.java @@ -1,40 +1,18 @@ package gov.nist.csd.pm.epp; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.UserContext; -import gov.nist.csd.pm.policy.model.obligation.Obligation; -import gov.nist.csd.pm.policy.model.obligation.Response; -import gov.nist.csd.pm.policy.model.obligation.Rule; -import gov.nist.csd.pm.pap.PAP; -import gov.nist.csd.pm.pdp.PDP; +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.obligation.EventContext; -import java.util.List; +/** + * Interface for processing EventContexts in the EPP. + */ +public interface EventProcessor { -class EventProcessor { + /** + * Process the given EventContext in the EPP. + * @param eventCtx The event context to process. + * @throws PMException If there is an error processing the EventContext. + */ + void processEvent(EventContext eventCtx) throws PMException; - private final PDP pdp; - private final PAP pap; - - public EventProcessor(PDP pdp, PAP pap) { - this.pdp = pdp; - this.pap = pap; - } - - public void processEvent(EventContext eventCtx) throws PMException { - List obligations = pap.obligations().getAll(); - for(Obligation obligation : obligations) { - UserContext author = obligation.getAuthor(); - List rules = obligation.getRules(); - for(Rule rule : rules) { - if(!eventCtx.matchesPattern(rule.getEventPattern(), pdp.reviewer())) { - continue; - } - - Response response = rule.getResponse(); - - // need to run pdp tx as author - pdp.runTx(author, txPDP -> response.execute(txPDP, eventCtx)); - } - } - } } diff --git a/src/main/java/gov/nist/csd/pm/pdp/memory/MemoryPolicyReviewer.java b/src/main/java/gov/nist/csd/pm/impl/memory/pap/MemoryAccessQuerier.java similarity index 54% rename from src/main/java/gov/nist/csd/pm/pdp/memory/MemoryPolicyReviewer.java rename to src/main/java/gov/nist/csd/pm/impl/memory/pap/MemoryAccessQuerier.java index c074c375c..06f2f19c0 100644 --- a/src/main/java/gov/nist/csd/pm/pdp/memory/MemoryPolicyReviewer.java +++ b/src/main/java/gov/nist/csd/pm/impl/memory/pap/MemoryAccessQuerier.java @@ -1,53 +1,44 @@ -package gov.nist.csd.pm.pdp.memory; - -import gov.nist.csd.pm.epp.EventContext; -import gov.nist.csd.pm.pap.memory.dag.BreadthFirstGraphWalker; -import gov.nist.csd.pm.pap.memory.dag.DepthFirstGraphWalker; -import gov.nist.csd.pm.pdp.PolicyReviewer; -import gov.nist.csd.pm.policy.Policy; -import gov.nist.csd.pm.policy.pml.statement.PMLStatement; -import gov.nist.csd.pm.policy.exceptions.NodeDoesNotExistException; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.AccessRightSet; -import gov.nist.csd.pm.policy.model.access.UserContext; -import gov.nist.csd.pm.policy.model.audit.EdgePath; -import gov.nist.csd.pm.policy.model.audit.Explain; -import gov.nist.csd.pm.policy.model.audit.Path; -import gov.nist.csd.pm.policy.model.audit.PolicyClass; -import gov.nist.csd.pm.policy.model.graph.dag.TargetDagResult; -import gov.nist.csd.pm.policy.model.graph.dag.UserDagResult; -import gov.nist.csd.pm.policy.model.graph.dag.propagator.Propagator; -import gov.nist.csd.pm.policy.model.graph.dag.visitor.Visitor; -import gov.nist.csd.pm.policy.model.graph.dag.walker.Direction; -import gov.nist.csd.pm.policy.model.graph.nodes.Node; -import gov.nist.csd.pm.policy.model.graph.relationships.Association; -import gov.nist.csd.pm.policy.model.graph.relationships.Relationship; -import gov.nist.csd.pm.policy.model.obligation.Obligation; -import gov.nist.csd.pm.policy.model.obligation.Response; -import gov.nist.csd.pm.policy.model.obligation.Rule; -import gov.nist.csd.pm.policy.model.obligation.event.Target; -import gov.nist.csd.pm.policy.model.prohibition.ContainerCondition; -import gov.nist.csd.pm.policy.model.prohibition.Prohibition; +package gov.nist.csd.pm.impl.memory.pap; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.dag.*; +import gov.nist.csd.pm.pap.graph.node.Node; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.graph.relationship.Association; +import gov.nist.csd.pm.pap.graph.relationship.Relationship; +import gov.nist.csd.pm.pap.prohibition.ContainerCondition; +import gov.nist.csd.pm.pap.prohibition.Prohibition; +import gov.nist.csd.pm.pap.query.explain.EdgePath; +import gov.nist.csd.pm.pap.query.explain.Explain; +import gov.nist.csd.pm.pap.query.explain.Path; +import gov.nist.csd.pm.pap.query.explain.PolicyClassExplain; +import gov.nist.csd.pm.pap.exception.NodeDoesNotExistException; +import gov.nist.csd.pm.pap.query.AccessQuerier; +import gov.nist.csd.pm.pap.query.GraphQuerier; +import gov.nist.csd.pm.pap.query.ProhibitionsQuerier; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.store.GraphStoreBFS; +import gov.nist.csd.pm.pap.store.PolicyStore; import java.util.*; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import static gov.nist.csd.pm.policy.model.access.UserContext.NO_PROCESS; -import static gov.nist.csd.pm.policy.model.graph.nodes.NodeType.*; -import static gov.nist.csd.pm.policy.model.graph.nodes.Properties.NO_PROPERTIES; +import static gov.nist.csd.pm.pap.graph.node.NodeType.U; +import static gov.nist.csd.pm.pap.graph.node.Properties.NO_PROPERTIES; +import static gov.nist.csd.pm.pap.query.AccessRightResolver.*; -public class MemoryPolicyReviewer extends PolicyReviewer { +public class MemoryAccessQuerier extends AccessQuerier { - final Policy policy; + private GraphQuerier graphQuerier; + private ProhibitionsQuerier prohibitionsQuerier; - public MemoryPolicyReviewer(Policy policy) throws PMException { - this.policy = policy; + public MemoryAccessQuerier(PolicyStore memoryPolicyStore, GraphQuerier graphQuerier, ProhibitionsQuerier prohibitionsQuerier) { + super(memoryPolicyStore); + this.graphQuerier = graphQuerier; + this.prohibitionsQuerier = prohibitionsQuerier; } @Override - public AccessRightSet getAccessRights(UserContext userCtx, String target) throws PMException { + public AccessRightSet computePrivileges(UserContext userCtx, String target) throws PMException { AccessRightSet accessRights = new AccessRightSet(); // traverse the user side of the graph to get the associations @@ -60,11 +51,11 @@ public AccessRightSet getAccessRights(UserContext userCtx, String target) throws TargetDagResult targetDagResult = processTargetDAG(target, userDagResult); // resolve the permissions - return resolvePermissions(userDagResult, targetDagResult, target, policy.graph().getResourceAccessRights()); + return resolvePrivileges(userDagResult, targetDagResult, target, store.operations().getResourceOperations()); } @Override - public AccessRightSet getDeniedAccessRights(UserContext userCtx, String target) throws PMException { + public AccessRightSet computeDeniedPrivileges(UserContext userCtx, String target) throws PMException { AccessRightSet accessRights = new AccessRightSet(); // traverse the user side of the graph to get the associations @@ -77,11 +68,11 @@ public AccessRightSet getDeniedAccessRights(UserContext userCtx, String target) TargetDagResult targetDagResult = processTargetDAG(target, userDagResult); // resolve the permissions - return resolveProhibitions(userDagResult, targetDagResult, target); + return resolveDeniedAccessRights(userDagResult, targetDagResult, target); } @Override - public Map getPolicyClassAccessRights(UserContext userCtx, String target) throws PMException { + public Map computePolicyClassAccessRights(UserContext userCtx, String target) throws PMException { // traverse the user side of the graph to get the associations UserDagResult userDagResult = processUserDAG(userCtx.getUser(), userCtx.getProcess()); if (userDagResult.borderTargets().isEmpty()) { @@ -94,171 +85,11 @@ public Map getPolicyClassAccessRights(UserContext userCt return targetDagResult.pcSet(); } - /** - * Perform a depth first search on the object side of the graph. Start at the target node and recursively visit nodes - * until a policy class is reached. On each node visited, collect any operation the user has on the target. At the - * end of each dfs iteration the visitedNodes map will contain the operations the user is permitted on the target under - * each policy class. - */ - protected TargetDagResult processTargetDAG(String target, UserDagResult userCtx) throws PMException { - if (!policy.graph().nodeExists(target)) { - throw new NodeDoesNotExistException(target); - } - - List policyClasses = policy.graph().getPolicyClasses(); - Map borderTargets = userCtx.borderTargets(); - Map> visitedNodes = new HashMap<>(); - Set reachedTargets = new HashSet<>(); - - Visitor visitor = node -> { - // mark the node as reached, to be used for resolving prohibitions - if (userCtx.prohibitionTargets().contains(node)) { - reachedTargets.add(node); - } - - Map nodeCtx = visitedNodes.getOrDefault(node, new HashMap<>()); - if (nodeCtx.isEmpty()) { - visitedNodes.put(node, nodeCtx); - } - - if (policyClasses.contains(node)) { - nodeCtx.put(node, new AccessRightSet()); - } else { - if (borderTargets.containsKey(node)) { - Set uaOps = borderTargets.get(node); - for (String pc : nodeCtx.keySet()) { - AccessRightSet pcOps = nodeCtx.getOrDefault(pc, new AccessRightSet()); - pcOps.addAll(uaOps); - nodeCtx.put(pc, pcOps); - } - } - } - }; - - Propagator propagator = (parent, child) -> { - Map parentCtx = visitedNodes.get(parent); - Map nodeCtx = visitedNodes.getOrDefault(child, new HashMap<>()); - for (String name : parentCtx.keySet()) { - AccessRightSet ops = nodeCtx.getOrDefault(name, new AccessRightSet()); - ops.addAll(parentCtx.get(name)); - nodeCtx.put(name, ops); - } - visitedNodes.put(child, nodeCtx); - }; - - new DepthFirstGraphWalker(policy.graph()) - .withDirection(Direction.PARENTS) - .withVisitor(visitor) - .withPropagator(propagator) - .walk(target); - - return new TargetDagResult(visitedNodes.get(target), reachedTargets); - } - - /** - * Find the target nodes that are reachable by the subject via an association. This is done by a breadth first search - * starting at the subject node and walking up the user side of the graph until all user attributes the subject is assigned - * to have been visited. For each user attribute visited, get the associations it is the source of and store the - * target of that association as well as the operations in a map. If a target node is reached multiple times, add any - * new operations to the already existing ones. - * - * @return a Map of target nodes that the subject can reach via associations and the operations the user has on each. - */ - protected UserDagResult processUserDAG(String subject, String process) throws PMException { - if (!policy.graph().nodeExists(subject)) { - throw new NodeDoesNotExistException(subject); - } - - final Map borderTargets = new HashMap<>(); - final Set prohibitionTargets = new HashSet<>(); - // initialize with the prohibitions or the provided process - final Set reachedProhibitions = new HashSet<>(policy.prohibitions().getWithSubject(process)); - - // get the associations for the subject, it the subject is a user, nothing will be returned - // this is only when a UA is the subject - List subjectAssociations = policy.graph().getAssociationsWithSource(subject); - collectAssociations(subjectAssociations, borderTargets); - - Visitor visitor = node -> { - List subjectProhibitions = policy.prohibitions().getWithSubject(node); - reachedProhibitions.addAll(subjectProhibitions); - for (Prohibition prohibition : subjectProhibitions) { - List containers = prohibition.getContainers(); - for (ContainerCondition cont : containers) { - prohibitionTargets.add(cont.name()); - } - } - - List nodeAssociations = policy.graph().getAssociationsWithSource(node); - collectAssociations(nodeAssociations, borderTargets); - - /*//get the parents of the subject to start bfs on user side - List parents = policyReader.graph().getParents(node); - while (!parents.isEmpty()) { - String parent = parents.iterator().next(); - Node parentNode = policyReader.graph().getNode(parent); - if (parentNode.getType() == UA) { - //get the associations the current parent node is the source of - List nodeAssociations = policyReader.graph().getAssociationsWithSource(parent); - - //collect the target and operation information for each association - collectAssociations(nodeAssociations, borderTargets); - } - - //add all of the current parent node's parents to the queue - parents.addAll(policyReader.graph().getParents(parent)); - - //remove the current parent from the queue - parents.remove(parent); - }*/ - }; - - // start the bfs - new BreadthFirstGraphWalker(policy.graph()) - .withDirection(Direction.PARENTS) - .withVisitor(visitor) - .walk(subject); - - return new UserDagResult(borderTargets, reachedProhibitions, prohibitionTargets); - } - - private void collectAssociations(List assocs, Map borderTargets) { - for (Association association : assocs) { - AccessRightSet ops = association.getAccessRightSet(); - Set exOps = borderTargets.get(association.getTarget()); - //if the target is not in the map already, put it - //else add the found operations to the existing ones. - if (exOps == null) { - borderTargets.put(association.getTarget(), ops); - } else { - ops.addAll(exOps); - borderTargets.put(association.getTarget(), ops); - } - } - } - - private Set getDescendants(String vNode) throws PMException { - Set ascendants = new HashSet<>(); - - List children = policy.graph().getChildren(vNode); - if (children.isEmpty()) { - return ascendants; - } - - ascendants.addAll(children); - for (String child : children) { - ascendants.add(child); - ascendants.addAll(getDescendants(child)); - } - - return ascendants; - } - @Override - public Map buildCapabilityList(UserContext userCtx) throws PMException { + public Map computeCapabilityList(UserContext userCtx) throws PMException { Map results = new HashMap<>(); - //get border nodes. Can be OA or UA. Return empty set if no OAs are reachable + //get border nodes. Can be OA or UA. Return empty set if no attrs are reachable UserDagResult userDagResult = processUserDAG(userCtx.getUser(), userCtx.getProcess()); if (userDagResult.borderTargets().isEmpty()) { return results; @@ -266,7 +97,7 @@ public Map buildCapabilityList(UserContext userCtx) thro for(String borderTarget : userDagResult.borderTargets().keySet()) { // compute permissions on the border attr - putPermissions(results, userDagResult, borderTarget); + getAndStorePrivileges(results, userDagResult, borderTarget); // compute decisions for the subgraph of the border attr Set descendants = getDescendants(borderTarget); @@ -275,25 +106,19 @@ public Map buildCapabilityList(UserContext userCtx) thro continue; } - putPermissions(results, userDagResult, descendant); + getAndStorePrivileges(results, userDagResult, descendant); } } return results; } - private void putPermissions(Map permissionsMap, UserDagResult userDagResult, String target) throws PMException { - TargetDagResult targetCtx = processTargetDAG(target, userDagResult); - AccessRightSet permissions = resolvePermissions(userDagResult, targetCtx, target, policy.graph().getResourceAccessRights()); - permissionsMap.put(target, permissions); - } - @Override - public Map buildACL(String target) throws PMException { + public Map computeACL(String target) throws PMException { Map acl = new HashMap<>(); - List search = policy.graph().search(U, NO_PROPERTIES); + Collection search = graphQuerier.search(U, NO_PROPERTIES); for (String user : search) { - AccessRightSet list = this.getAccessRights(new UserContext(user), target); + AccessRightSet list = this.computePrivileges(new UserContext(user), target); acl.put(user, list); } @@ -301,13 +126,13 @@ public Map buildACL(String target) throws PMException { } @Override - public Map getBorderAttributes(String user) throws PMException { - return processUserDAG(user, NO_PROCESS) + public Map computeDestinationAttributes(String user) throws PMException { + return processUserDAG(user, UserContext.NO_PROCESS) .borderTargets(); } @Override - public Map getSubgraphAccessRights(UserContext userCtx, String root) throws PMException { + public Map computeAscendantPrivileges(UserContext userCtx, String root) throws PMException { Map results = new HashMap<>(); UserDagResult userDagResult = processUserDAG(userCtx.getUser(), userCtx.getProcess()); @@ -315,14 +140,13 @@ public Map getSubgraphAccessRights(UserContext userCtx, return results; } - // compute decisions for the subgraph of the border attr Set descendants = getDescendants(root); for (String descendant : descendants) { if (results.containsKey(descendant)) { continue; } - putPermissions(results, userDagResult, descendant); + getAndStorePrivileges(results, userDagResult, descendant); } return results; @@ -330,20 +154,26 @@ public Map getSubgraphAccessRights(UserContext userCtx, @Override public Explain explain(UserContext userCtx, String target) throws PMException { - Node userNode = policy.graph().getNode(userCtx.getUser()); - Node targetNode = policy.graph().getNode(target); + Node userNode = graphQuerier.getNode(userCtx.getUser()); + Node targetNode = graphQuerier.getNode(target); - List userPaths = dfs(userNode.getName()); - List targetPaths = dfs(targetNode.getName()); + List userPaths = explainDfs(userNode.getName()); + List targetPaths = explainDfs(targetNode.getName()); - Map resolvedPaths = resolvePaths(userPaths, targetPaths, target); - Set perms = resolvePermissions(resolvedPaths); + Map resolvedPaths = resolvePaths(graphQuerier, userPaths, targetPaths, target); - return new Explain(perms, resolvedPaths); + UserDagResult userDagResult = processUserDAG(userCtx.getUser(), userCtx.getProcess()); + TargetDagResult targetDagResult = processTargetDAG(target, userDagResult); + + AccessRightSet priv = resolvePrivileges(userDagResult, targetDagResult, target, store.operations().getResourceOperations()); + AccessRightSet deniedPriv = resolveDeniedAccessRights(userDagResult, targetDagResult, target); + List prohibitions = computeSatisfiedProhibitions(userDagResult, targetDagResult, target); + + return new Explain(priv, resolvedPaths, deniedPriv, prohibitions); } @Override - public Set buildPOS(UserContext userCtx) throws PMException { + public Set computePersonalObjectSystem(UserContext userCtx) throws PMException { // Prepare the hashset to return. HashSet hsOa = new HashSet<>(); @@ -379,33 +209,175 @@ public Set buildPOS(UserContext userCtx) throws PMException { } @Override - public List getAccessibleChildren(UserContext userCtx, String root) throws PMException { - List children = policy.graph().getChildren(root); - children.removeIf(child -> { + public Collection computeAccessibleAscendants(UserContext userCtx, String root) throws PMException { + List ascendants = new ArrayList<>(graphQuerier.getAdjacentAscendants(root)); + ascendants.removeIf(ascendant -> { try { - return getAccessRights(userCtx, child).isEmpty(); + return computePrivileges(userCtx, ascendant).isEmpty(); } catch (PMException e) { e.printStackTrace(); return true; } }); - return children; + return ascendants; } @Override - public List getAccessibleParents(UserContext userCtx, String root) throws PMException { - List parents = policy.graph().getParents(root); - parents.removeIf(parent -> { + public Collection computeAccessibleDescendants(UserContext userCtx, String root) throws PMException { + List descs = new ArrayList<>(graphQuerier.getAdjacentDescendants(root)); + descs.removeIf(desc -> { try { - return getAccessRights(userCtx, parent).isEmpty(); + return computePrivileges(userCtx, desc).isEmpty(); } catch (PMException e) { e.printStackTrace(); return true; } }); - return parents; + return descs; + } + + private void getAndStorePrivileges(Map arsetMap, UserDagResult userDagResult, String target) throws PMException { + TargetDagResult targetCtx = processTargetDAG(target, userDagResult); + AccessRightSet privileges = resolvePrivileges(userDagResult, targetCtx, target, store.operations().getResourceOperations()); + arsetMap.put(target, privileges); + } + + /** + * Perform a depth first search on the object side of the graph. Start at the target node and recursively visit nodes + * until a policy class is reached. On each node visited, collect any operation the user has on the target. At the + * end of each dfs iteration the visitedNodes map will contain the operations the user is permitted on the target under + * each policy class. + */ + protected TargetDagResult processTargetDAG(String target, UserDagResult userCtx) throws PMException { + if (!graphQuerier.nodeExists(target)) { + throw new NodeDoesNotExistException(target); + } + + Collection policyClasses = graphQuerier.getPolicyClasses(); + Map borderTargets = userCtx.borderTargets(); + Map> visitedNodes = new HashMap<>(); + Set reachedTargets = new HashSet<>(); + + Visitor visitor = node -> { + // mark the node as reached, to be used for resolving prohibitions + if (userCtx.prohibitionTargets().contains(node)) { + reachedTargets.add(node); + } + + Map nodeCtx = visitedNodes.getOrDefault(node, new HashMap<>()); + if (nodeCtx.isEmpty()) { + visitedNodes.put(node, nodeCtx); + } + + if (policyClasses.contains(node)) { + nodeCtx.put(node, new AccessRightSet()); + } else { + if (borderTargets.containsKey(node)) { + Set uaOps = borderTargets.get(node); + for (String pc : nodeCtx.keySet()) { + AccessRightSet pcOps = nodeCtx.getOrDefault(pc, new AccessRightSet()); + pcOps.addAll(uaOps); + nodeCtx.put(pc, pcOps); + } + } + } + }; + + Propagator propagator = (desc, asc) -> { + Map descCtx = visitedNodes.get(desc); + Map nodeCtx = visitedNodes.getOrDefault(asc, new HashMap<>()); + for (String name : descCtx.keySet()) { + AccessRightSet ops = nodeCtx.getOrDefault(name, new AccessRightSet()); + ops.addAll(descCtx.get(name)); + nodeCtx.put(name, ops); + } + visitedNodes.put(asc, nodeCtx); + }; + + new DepthFirstGraphWalker(graphQuerier) + .withDirection(Direction.DESCENDANTS) + .withVisitor(visitor) + .withPropagator(propagator) + .walk(target); + + return new TargetDagResult(visitedNodes.get(target), reachedTargets); + } + + /** + * Find the target nodes that are reachable by the subject via an association. This is done by a breadth first search + * starting at the subject node and walking up the user side of the graph until all user attributes the subject is assigned + * to have been visited. For each user attribute visited, get the associations it is the source of and store the + * target of that association as well as the operations in a map. If a target node is reached multiple times, add any + * new operations to the already existing ones. + * + * @return a Map of target nodes that the subject can reach via associations and the operations the user has on each. + */ + protected UserDagResult processUserDAG(String subject, String process) throws PMException { + if (!graphQuerier.nodeExists(subject)) { + throw new NodeDoesNotExistException(subject); + } + + final Map borderTargets = new HashMap<>(); + final Set prohibitionTargets = new HashSet<>(); + // initialize with the prohibitions or the provided process + final Set reachedProhibitions = new HashSet<>(prohibitionsQuerier.getProhibitionsWithSubject(process)); + + // get the associations for the subject, it the subject is a user, nothing will be returned + // this is only when a UA is the subject + Collection subjectAssociations = graphQuerier.getAssociationsWithSource(subject); + collectAssociationsFromBorderTargets(subjectAssociations, borderTargets); + + Visitor visitor = node -> { + Collection subjectProhibitions = prohibitionsQuerier.getProhibitionsWithSubject(node); + reachedProhibitions.addAll(subjectProhibitions); + for (Prohibition prohibition : subjectProhibitions) { + Collection containers = prohibition.getContainers(); + for (ContainerCondition cont : containers) { + prohibitionTargets.add(cont.getName()); + } + } + + Collection nodeAssociations = graphQuerier.getAssociationsWithSource(node); + collectAssociationsFromBorderTargets(nodeAssociations, borderTargets); + }; + + // start the bfs + new GraphStoreBFS(store.graph()) + .withDirection(Direction.DESCENDANTS) + .withVisitor(visitor) + .walk(subject); + + return new UserDagResult(borderTargets, reachedProhibitions, prohibitionTargets); + } + + private void collectAssociationsFromBorderTargets(Collection assocs, Map borderTargets) { + for (Association association : assocs) { + AccessRightSet ops = association.getAccessRightSet(); + AccessRightSet exOps = borderTargets.getOrDefault(association.getTarget(), new AccessRightSet()); + //if the target is not in the map already, put it + //else add the found operations to the existing ones. + exOps.addAll(ops); + borderTargets.put(association.getTarget(), exOps); + } + } + + private Set getDescendants(String vNode) throws PMException { + Set descendants = new HashSet<>(); + + Collection ascendants = graphQuerier.getAdjacentAscendants(vNode); + if (ascendants.isEmpty()) { + return descendants; + } + + descendants.addAll(ascendants); + for (String ascendant : ascendants) { + descendants.add(ascendant); + descendants.addAll(getDescendants(ascendant)); + } + + return descendants; } private Hashtable>> findBorderOaPrivRestrictedInternal(UserContext userCtx) throws PMException { @@ -421,7 +393,7 @@ private Hashtable>> findBorderOaPrivRestri String crtNode; // Get u's directly assigned attributes and put them into the queue. - List hsAttrs = policy.graph().getParents(userCtx.getUser()); + Collection hsAttrs = graphQuerier.getAdjacentDescendants(userCtx.getUser()); List queue = new ArrayList<>(hsAttrs); // While the queue has elements, extract an element from the queue @@ -439,7 +411,7 @@ private Hashtable>> findBorderOaPrivRestri // Find the opsets of this user attribute. Note that the set of containers for this // node (user attribute) may contain not only opsets. - List assocs = policy.graph().getAssociationsWithSource(crtNode); + Collection assocs = graphQuerier.getAssociationsWithSource(crtNode); // Go through the containers and only for opsets do the following. // For each opset ops of ua: @@ -489,7 +461,7 @@ private Hashtable>> findBorderOaPrivRestri } visited.add(crtNode); - List hsDescs = policy.graph().getParents(crtNode); + Collection hsDescs = graphQuerier.getAdjacentDescendants(crtNode); queue.addAll(hsDescs); } } @@ -530,7 +502,7 @@ private HashSet inMemFindPcSet(String node) throws PMException { // Insert the start node into the queue queue.add(node); - List policyClasses = policy.graph().getPolicyClasses(); + Collection policyClasses = graphQuerier.getPolicyClasses(); // While queue is not empty while (!queue.isEmpty()) { @@ -543,7 +515,7 @@ private HashSet inMemFindPcSet(String node) throws PMException { // Extract its direct descendants. If a descendant is an attribute, // insert it into the queue. If it is a pc, add it to reachable, // if not already there - List hsContainers = policy.graph().getParents(crtNode); + Collection hsContainers = graphQuerier.getAdjacentDescendants(crtNode); for (String n : hsContainers) { if (policyClasses.contains(n)) { reachable.add(n); @@ -557,22 +529,7 @@ private HashSet inMemFindPcSet(String node) throws PMException { } private boolean inMemUattrHasOpsets(String uaNode) throws PMException { - return !policy.graph().getAssociationsWithSource(uaNode).isEmpty(); - } - - private Set resolvePermissions(Map paths) throws PMException { - Map pcPerms = new HashMap<>(); - for (String pc : paths.keySet()) { - PolicyClass pcPaths = paths.get(pc); - for(Path p : pcPaths.getPaths()) { - AccessRightSet ops = p.getAssociation().getAccessRightSet(); - AccessRightSet existingOps = pcPerms.getOrDefault(pc, new AccessRightSet()); - existingOps.addAll(ops); - pcPerms.put(pc, existingOps); - } - } - - return resolveAllowedPermissions(pcPerms, policy.graph().getResourceAccessRights()); + return !graphQuerier.getAssociationsWithSource(uaNode).isEmpty(); } /** @@ -588,22 +545,22 @@ private Set resolvePermissions(Map paths) throws PM * @return the set of paths from a user to a target node (through an association) for each policy class in the system. * @throws PMException if there is an exception traversing the graph */ - private Map resolvePaths(List userPaths, List targetPaths, String target) throws PMException { - Map results = new HashMap<>(); + public static Map resolvePaths(GraphQuerier graphQuerier, List userPaths, List targetPaths, String target) throws PMException { + Map results = new HashMap<>(); for (EdgePath targetPath : targetPaths) { Relationship pcEdge = targetPath.getEdges().get(targetPath.getEdges().size()-1); // if the last element in the target path is a pc, the target belongs to that pc, add the pc to the results // skip to the next target path if it is not a policy class - if (!isPolicyClass(pcEdge.getTarget())) { + if (!isPolicyClass(graphQuerier, pcEdge.getTarget())) { continue; } - PolicyClass policyClass = results.getOrDefault(pcEdge.getTarget(), new PolicyClass()); + PolicyClassExplain policyClass = results.getOrDefault(pcEdge.getTarget(), new PolicyClassExplain()); // compute the paths for this target path - Set paths = computePaths(userPaths, targetPath, target); + Set paths = computeExplainPaths(userPaths, targetPath, target); // add all paths Set existingPaths = policyClass.getPaths(); @@ -611,7 +568,7 @@ private Map resolvePaths(List userPaths, List resolvePaths(List userPaths, List computePaths(List userEdgePaths, EdgePath targetEdgePath, String target) { + public static Set computeExplainPaths(List userEdgePaths, EdgePath targetEdgePath, String target) { Set computedPaths = new HashSet<>(); for(EdgePath userEdgePath : userEdgePaths) { @@ -649,7 +606,7 @@ private Set computePaths(List userEdgePaths, EdgePath targetEdge // OR if the target of the last edge in a user path does not match the target of the explain // continue to the next target edge if((!lastUserEdgeTarget.equals(curEdgeTarget)) && - (!lastUserEdgeTarget.equals(curEdgeSource) || lastUserEdgeTarget.equals(target))) { + (!lastUserEdgeTarget.equals(curEdgeSource) || !lastUserEdgeTarget.equals(target))) { continue; } @@ -667,44 +624,43 @@ private Set computePaths(List userEdgePaths, EdgePath targetEdge return computedPaths; } - private List dfs(String start) throws PMException { - final List paths = new ArrayList<>(); - final Map> propPaths = new HashMap<>(); + private List explainDfs(String start) throws PMException { + List paths = new ArrayList<>(); + Map> propPaths = new HashMap<>(); Visitor visitor = nodeName -> { - Node node = policy.graph().getNode(nodeName); + Node node = graphQuerier.getNode(nodeName); List nodePaths = new ArrayList<>(); - for(String parent : policy.graph().getParents(nodeName)) { - Relationship edge = new Relationship(node.getName(), parent); - List parentPaths = propPaths.get(parent); - if(parentPaths.isEmpty()) { + for(String desc : graphQuerier.getAdjacentDescendants(nodeName)) { + Relationship edge = new Relationship(node.getName(), desc); + List descPaths = propPaths.get(desc); + if(descPaths.isEmpty()) { EdgePath path = new EdgePath(); path.addEdge(edge); nodePaths.add(0, path); } else { - for(EdgePath p : parentPaths) { - EdgePath parentPath = new EdgePath(); + for(EdgePath p : descPaths) { + EdgePath descPath = new EdgePath(); for(Relationship e : p.getEdges()) { - parentPath.addEdge(new Relationship(e.getSource(), e.getTarget(), e.getAccessRightSet())); + descPath.addEdge(new Relationship(e.getSource(), e.getTarget(), e.getAccessRightSet())); } - parentPath.getEdges().add(0, edge); - nodePaths.add(parentPath); + descPath.getEdges().addFirst(edge); + nodePaths.add(descPath); } } } - List assocs = policy.graph().getAssociationsWithSource(node.getName()); + Collection assocs = graphQuerier.getAssociationsWithSource(node.getName()); for(Association association : assocs) { - Node targetNode = policy.graph().getNode(association.getTarget()); + Node targetNode = graphQuerier.getNode(association.getTarget()); EdgePath path = new EdgePath(); path.addEdge(new Relationship(node.getName(), targetNode.getName(), association.getAccessRightSet())); nodePaths.add(path); } // if the node being visited is the start node, add all the found nodePaths - // TODO there might be a more efficient way of doing this // we don't need the if for users, only when the target is an OA, so it might have something to do with // leafs vs non leafs if (node.getName().equals(start)) { @@ -715,13 +671,13 @@ private List dfs(String start) throws PMException { } }; - Propagator propagator = (parentNodeName, childNodeName) -> { - Node parentNode = policy.graph().getNode(parentNodeName); - Node childNode = policy.graph().getNode(childNodeName); - List childPaths = propPaths.computeIfAbsent(childNode.getName(), k -> new ArrayList<>()); - List parentPaths = propPaths.get(parentNode.getName()); + Propagator propagator = (desc, asc) -> { + Node descNode = graphQuerier.getNode(desc); + Node ascNode = graphQuerier.getNode(asc); + List ascPaths = propPaths.computeIfAbsent(ascNode.getName(), k -> new ArrayList<>()); + List descPaths = propPaths.get(descNode.getName()); - for(EdgePath p : parentPaths) { + for(EdgePath p : descPaths) { EdgePath path = new EdgePath(); for(Relationship edge : p.getEdges()) { path.addEdge(new Relationship(edge.getSource(), edge.getTarget(), edge.getAccessRightSet())); @@ -729,202 +685,24 @@ private List dfs(String start) throws PMException { EdgePath newPath = new EdgePath(); newPath.getEdges().addAll(path.getEdges()); - Relationship edge = new Relationship(childNode.getName(), parentNode.getName(), null); + Relationship edge = new Relationship(ascNode.getName(), descNode.getName(), null); newPath.getEdges().add(0, edge); - childPaths.add(newPath); - propPaths.put(childNode.getName(), childPaths); + ascPaths.add(newPath); + propPaths.put(ascNode.getName(), ascPaths); } - if (childNode.getName().equals(start)) { + if (ascNode.getName().equals(start)) { paths.clear(); - paths.addAll(propPaths.get(childNode.getName())); + paths.addAll(propPaths.get(ascNode.getName())); } }; - new DepthFirstGraphWalker(policy.graph()) + new DepthFirstGraphWalker(graphQuerier) .withVisitor(visitor) .withPropagator(propagator) - .withDirection(Direction.PARENTS) + .withDirection(Direction.DESCENDANTS) .walk(start); return paths; } - - @Override - public List getAttributeContainers(String node) throws PMException { - List attrs = new ArrayList<>(); - - new DepthFirstGraphWalker(policy.graph()) - .withDirection(Direction.PARENTS) - .withVisitor((n) -> { - Node visitedNode; - visitedNode = policy.graph().getNode(n); - if (visitedNode.getType().equals(UA) || - visitedNode.getType().equals(OA)) { - attrs.add(n); - } - }) - .walk(node); - - return attrs; - } - - @Override - public List getPolicyClassContainers(String node) throws PMException { - List attrs = new ArrayList<>(); - - new DepthFirstGraphWalker(policy.graph()) - .withDirection(Direction.PARENTS) - .withVisitor((n) -> { - Node visitedNode; - visitedNode = policy.graph().getNode(n); - if (visitedNode.getType().equals(PC)) { - attrs.add(n); - } - }) - .walk(node); - - return attrs; - } - - @Override - public boolean isContained(String subject, String container) throws PMException { - if (!policy.graph().nodeExists(subject)) { - throw new NodeDoesNotExistException(subject); - } else if (!policy.graph().nodeExists(container)){ - throw new NodeDoesNotExistException(container); - } - - AtomicBoolean found = new AtomicBoolean(false); - - new DepthFirstGraphWalker(policy.graph()) - .withDirection(Direction.PARENTS) - .withVisitor((n) -> { - if (n.equals(container)) { - found.set(true); - } - }) - .walk(subject); - - return found.get(); - } - - @Override - public List getInheritedProhibitionsFor(String subject) throws PMException { - List pros = new ArrayList<>(); - - new DepthFirstGraphWalker(policy.graph()) - .withVisitor((n) -> { - pros.addAll(policy.prohibitions().getWithSubject(n)); - }) - .withDirection(Direction.PARENTS) - .walk(subject); - - return pros; - } - - @Override - public List getProhibitionsWithContainer(String container) throws PMException { - List pros = new ArrayList<>(); - - Map> prohibitions = policy.prohibitions().getAll(); - for (String subject : prohibitions.keySet()) { - List subjectProhibitions = prohibitions.get(subject); - for (Prohibition prohibition : subjectProhibitions) { - if (prohibition.getContainers().contains(new ContainerCondition(container, false))) { - pros.add(prohibition); - } - } - } - - return pros; - } - - @Override - public List getObligationsWithAuthor(UserContext userCtx) throws PMException { - List obls = new ArrayList<>(); - for (Obligation obligation : policy.obligations().getAll()) { - if (obligation.getAuthor().equals(userCtx)) { - obls.add(obligation); - } - } - - return obls; - } - - @Override - public List getObligationsWithAttributeInEvent(String attribute) throws PMException { - List obls = new ArrayList<>(); - for (Obligation obligation : policy.obligations().getAll()) { - List rules = obligation.getRules(); - for (Rule rule : rules) { - Target target = rule.getEventPattern().getTarget(); - if (target.getType() == Target.Type.POLICY_ELEMENT) { - if (target.policyElement().equals(attribute)) { - obls.add(obligation); - } - } else if (target.getType() == Target.Type.ANY_POLICY_ELEMENT) { - obls.add(obligation); - } else if (target.getType() == Target.Type.ANY_CONTAINED_IN) { - if (getAttributeContainers(attribute).contains(target.anyContainedIn())) { - obls.add(obligation); - } - } else if (target.getType() == Target.Type.ANY_OF_SET) { - if (target.anyOfSet().contains(attribute)) { - obls.add(obligation); - } - } - } - } - - return obls; - } - - @Override - public List getObligationsWithAttributeInResponse(String attribute) throws PMException { - List obls = new ArrayList<>(); - for (Obligation obligation : policy.obligations().getAll()) { - List rules = obligation.getRules(); - for (Rule rule : rules) { - Response response = rule.getResponse(); - for (PMLStatement statement : response.getStatements()) { - Pattern p = Pattern.compile("\\b(" + attribute + ")\\b"); - Matcher m = p.matcher(statement.toString()); - if (m.find()) { - obls.add(obligation); - } - } - } - } - - return obls; - } - - @Override - public List getObligationsWithEvent(String event) throws PMException { - List obls = new ArrayList<>(); - for (Obligation obligation : policy.obligations().getAll()) { - List rules = obligation.getRules(); - for (Rule rule : rules) { - if (rule.getEventPattern().getOperations().contains(event)) { - obls.add(obligation); - } - } - } - - return obls; - } - @Override - public List getMatchingEventResponses(EventContext evt) throws PMException { - List responses = new ArrayList<>(); - for (Obligation obligation : policy.obligations().getAll()) { - for (Rule rule : obligation.getRules()) { - if (evt.matchesPattern(rule.getEventPattern(), this)) { - responses.add(rule.getResponse()); - } - } - } - - return responses; - } } diff --git a/src/main/java/gov/nist/csd/pm/impl/memory/pap/MemoryPAP.java b/src/main/java/gov/nist/csd/pm/impl/memory/pap/MemoryPAP.java new file mode 100644 index 000000000..6ca3a7f40 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/impl/memory/pap/MemoryPAP.java @@ -0,0 +1,46 @@ +package gov.nist.csd.pm.impl.memory.pap; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.impl.memory.pap.store.MemoryPolicyStore; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.query.PolicyQuerier; + +public class MemoryPAP extends PAP { + + private final MemoryPolicyQuerier querier; + + public MemoryPAP() throws PMException { + super(new MemoryPolicyStore()); + this.querier = new MemoryPolicyQuerier(policyStore()); + } + + public MemoryPAP(MemoryPolicyStore store) throws PMException { + super(store); + this.querier = new MemoryPolicyQuerier(policyStore()); + } + + public MemoryPAP(PAP pap) throws PMException { + super(pap); + this.querier = new MemoryPolicyQuerier(policyStore()); + } + + @Override + public PolicyQuerier query() { + return querier; + } + + @Override + public void beginTx() throws PMException { + policyStore.beginTx(); + } + + @Override + public void commit() throws PMException { + policyStore.commit(); + } + + @Override + public void rollback() throws PMException { + policyStore.rollback(); + } +} diff --git a/src/main/java/gov/nist/csd/pm/impl/memory/pap/MemoryPolicyQuerier.java b/src/main/java/gov/nist/csd/pm/impl/memory/pap/MemoryPolicyQuerier.java new file mode 100644 index 000000000..c0eee271d --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/impl/memory/pap/MemoryPolicyQuerier.java @@ -0,0 +1,19 @@ +package gov.nist.csd.pm.impl.memory.pap; + +import gov.nist.csd.pm.pap.query.*; +import gov.nist.csd.pm.pap.store.PolicyStore; + +public class MemoryPolicyQuerier extends PolicyQuerier { + + private final MemoryAccessQuerier accessQuerier; + + public MemoryPolicyQuerier(PolicyStore policyStore) { + super(policyStore); + this.accessQuerier = new MemoryAccessQuerier(policyStore, graph(), prohibitions()); + } + + @Override + public MemoryAccessQuerier access() { + return accessQuerier; + } +} diff --git a/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/MemoryGraphStore.java b/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/MemoryGraphStore.java new file mode 100644 index 000000000..7466fabbd --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/MemoryGraphStore.java @@ -0,0 +1,372 @@ +package gov.nist.csd.pm.impl.memory.pap.store; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.dag.Direction; +import gov.nist.csd.pm.pap.graph.node.Node; +import gov.nist.csd.pm.pap.graph.node.NodeType; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.graph.relationship.Association; +import gov.nist.csd.pm.pap.store.GraphStore; +import gov.nist.csd.pm.pap.store.GraphStoreDFS; + +import java.util.*; +import java.util.concurrent.atomic.AtomicBoolean; + +import static gov.nist.csd.pm.pap.graph.node.NodeType.*; +import static gov.nist.csd.pm.pap.graph.node.Properties.WILDCARD; + +public class MemoryGraphStore extends MemoryStore implements GraphStore { + + public MemoryGraphStore(MemoryPolicy policy, MemoryTx tx, TxCmdTracker txCmdTracker) { + super(policy, tx, txCmdTracker); + } + + @Override + public void createNode(String name, NodeType type) throws PMException { + + if (type == PC) { + policy.pcs.add(name); + VertexPolicyClass vertexPolicyClass = new VertexPolicyClass(name); + policy.graph.put(name, vertexPolicyClass); + } else if (type == OA || type == UA) { + VertexAttribute vertexAttribute = new VertexAttribute(name, type); + policy.graph.put(name, vertexAttribute); + } else if (type == O || type == U) { + VertexLeaf vertexLeaf = new VertexLeaf(name, type); + policy.graph.put(name, vertexLeaf); + } + + txCmdTracker.trackOp(tx, new TxCmd.CreateNodeTxCmd(name)); + } + + @Override + public void deleteNode(String name) throws PMException { + Vertex vertex = policy.graph.get(name); + + if (vertex == null) { + return; + } + + Collection descs = vertex.getAdjacentDescendants(); + Collection incomingAssociations = vertex.getIncomingAssociations(); + Collection outgoingAssociations = vertex.getOutgoingAssociations(); + + for (String desc : descs) { + deleteAssignment(name, desc); + } + + for (Association association : incomingAssociations) { + Vertex v = policy.graph.get(association.getSource()); + if(v == null) { + continue; + } + + deleteAssociation(association.getSource(), association.getTarget()); + } + + for (Association association : outgoingAssociations) { + Vertex v = policy.graph.get(association.getTarget()); + if(v == null) { + continue; + } + + deleteAssociation(association.getSource(), association.getTarget()); + } + + policy.graph.remove(name); + + if (vertex.getType() == PC) { + policy.pcs.remove(name); + } + + txCmdTracker.trackOp(tx, new TxCmd.DeleteNodeTxCmd( + name, + new Node(vertex.name, vertex.type, vertex.getProperties()), + vertex.getAdjacentDescendants() + )); + } + + @Override + public void setNodeProperties(String name, Map newProperties) throws PMException { + Vertex vertex = policy.graph.get(name); + Map oldProperties = vertex.getProperties(); + + if (oldProperties.isEmpty() && newProperties.isEmpty()) { + return; + } + + if (vertex instanceof VertexWithProps vertexWithProps) { + if (newProperties.isEmpty()) { + policy.graph.put(name, vertexWithProps.getVertex()); + } else { + policy.graph.put(name, new VertexWithProps(vertexWithProps.getVertex(), newProperties)); + } + } else { + policy.graph.put(name, new VertexWithProps(vertex, newProperties)); + } + + txCmdTracker.trackOp(tx, new TxCmd.SetNodePropertiesTxCmd(name, oldProperties, newProperties)); + } + + @Override + public void createAssignment(String start, String end) throws PMException { + policy.graph.get(start).addAssignment(start, end); + policy.graph.get(end).addAssignment(start, end); + + txCmdTracker.trackOp(tx, new TxCmd.CreateAssignmentTxCmd(start, end)); + } + + @Override + public void deleteAssignment(String start, String end) throws PMException { + policy.graph.get(start).deleteAssignment(start, end); + policy.graph.get(end).deleteAssignment(start, end); + + txCmdTracker.trackOp(tx, new TxCmd.DeleteAssignmentTxCmd(start, end)); + } + + @Override + public void createAssociation(String ua, String target, AccessRightSet arset) throws PMException { + deleteAssociation(ua, target); + policy.graph.get(ua).addAssociation(ua, target, arset); + policy.graph.get(target).addAssociation(ua, target, arset); + + txCmdTracker.trackOp(tx, new TxCmd.CreateAssociationTxCmd(ua, target)); + } + + @Override + public void deleteAssociation(String ua, String target) throws PMException { + Vertex vertex = policy.graph.get(ua); + + AccessRightSet accessRightSet = new AccessRightSet(); + for (Association association : vertex.getOutgoingAssociations()) { + if (association.getTarget().equals(target)) { + accessRightSet = association.getAccessRightSet(); + } + } + + policy.graph.get(ua).deleteAssociation(ua, target); + policy.graph.get(target).deleteAssociation(ua, target); + + txCmdTracker.trackOp(tx, new TxCmd.DeleteAssociationTxCmd(ua, target, accessRightSet)); + } + + @Override + public Node getNode(String name) throws PMException { + Vertex vertex = policy.graph.get(name); + return new Node(vertex.getName(), vertex.getType(), vertex.getProperties()); + } + + @Override + public boolean nodeExists(String name) throws PMException { + return policy.graph.containsKey(name); + } + + @Override + public Collection search(NodeType type, Map properties) throws PMException { + List nodes = filterByType(type); + return filterByProperties(nodes, properties); + } + + @Override + public Collection getPolicyClasses() throws PMException { + return new ArrayList<>(policy.pcs); + } + + @Override + public Collection getAdjacentDescendants(String name) throws PMException { + return policy.graph.get(name).getAdjacentDescendants(); + } + + @Override + public Collection getAdjacentAscendants(String name) throws PMException { + return policy.graph.get(name).getAdjacentAscendants(); + } + + @Override + public Collection getAssociationsWithSource(String ua) throws PMException { + return policy.graph.get(ua).getOutgoingAssociations(); + } + + @Override + public Collection getAssociationsWithTarget(String target) throws PMException { + return policy.graph.get(target).getIncomingAssociations(); + } + + @Override + public Collection getAscendants(String node) throws PMException { + Set ascs = new HashSet<>(); + + new GraphStoreDFS(this) + .withDirection(Direction.ASCENDANTS) + .withVisitor(n -> { + ascs.add(n); + }) + .walk(node); + + ascs.remove(node); + + return ascs; + } + + @Override + public Collection getPolicyClassDescendants(String node) throws PMException { + Set pcs = new HashSet<>(); + + new GraphStoreDFS(this) + .withDirection(Direction.DESCENDANTS) + .withVisitor((n) -> { + Node visitedNode; + visitedNode = getNode(n); + if (visitedNode.getType().equals(PC)) { + pcs.add(n); + } + }) + .walk(node); + + pcs.remove(node); + + return pcs; + } + + @Override + public Collection getAttributeDescendants(String node) throws PMException { + Set attrs = new HashSet<>(); + + new GraphStoreDFS(this) + .withDirection(Direction.DESCENDANTS) + .withVisitor((n) -> { + Node visitedNode; + visitedNode = getNode(n); + if (visitedNode.getType().equals(UA) || + visitedNode.getType().equals(OA)) { + attrs.add(n); + } + }) + .walk(node); + + attrs.remove(node); + + return attrs; + } + + @Override + public Collection getDescendants(String node) throws PMException { + Set descs = new HashSet<>(); + + new GraphStoreDFS(this) + .withDirection(Direction.DESCENDANTS) + .withVisitor(descs::add) + .walk(node); + + descs.remove(node); + + return descs; + } + + @Override + public boolean isAscendant(String asc, String dsc) throws PMException { + AtomicBoolean found = new AtomicBoolean(false); + + new GraphStoreDFS(this) + .withDirection(Direction.ASCENDANTS) + .withVisitor((n) -> { + if (n.equals(asc)) { + found.set(true); + } + }) + .withAllPathShortCircuit(n -> n.equals(asc)) + .walk(dsc); + + return found.get(); + } + + @Override + public boolean isDescendant(String asc, String dsc) throws PMException { + AtomicBoolean found = new AtomicBoolean(false); + + new GraphStoreDFS(this) + .withDirection(Direction.DESCENDANTS) + .withVisitor((n) -> { + if (n.equals(dsc)) { + found.set(true); + } + }) + .withAllPathShortCircuit(n -> n.equals(dsc)) + .walk(asc); + + return found.get(); + } + + private List filterByProperties(List nodes, Map properties) throws PMException { + List results = new ArrayList<>(); + if (properties.isEmpty()) { + results.addAll(nodes); + } else { + for (String n : nodes) { + Map nodeProperties = getNode(n).getProperties(); + + if (!hasAllKeys(nodeProperties, properties) + || !valuesMatch(nodeProperties, properties)) { + continue; + } + + results.add(n); + } + } + + return results; + } + + private List filterByType(NodeType type) { + List nodes = new ArrayList<>(); + + // return all nodes if type is ANY + if (type == ANY) { + for (Map.Entry node : policy.graph.entrySet()) { + nodes.add(node.getKey()); + } + + return nodes; + } + + // return pcs from separate set if type is PC + if (type == PC) { + nodes.addAll(policy.pcs); + + return nodes; + } + + // get other node types that match + for (Map.Entry node : policy.graph.entrySet()) { + Vertex vertex = node.getValue(); + if (vertex.type == type) { + nodes.add(node.getKey()); + } + } + + return nodes; + } + + private boolean valuesMatch(Map nodeProperties, Map checkProperties) { + for (Map.Entry entry : checkProperties.entrySet()) { + String checkKey = entry.getKey(); + String checkValue = entry.getValue(); + if (!checkValue.equals(nodeProperties.get(checkKey)) + && !checkValue.equals(WILDCARD)) { + return false; + } + } + + return true; + } + + private boolean hasAllKeys(Map nodeProperties, Map checkProperties) { + for (String key : checkProperties.keySet()) { + if (!nodeProperties.containsKey(key)) { + return false; + } + } + + return true; + } +} \ No newline at end of file diff --git a/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/MemoryObligationsStore.java b/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/MemoryObligationsStore.java new file mode 100644 index 000000000..2ec976bb9 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/MemoryObligationsStore.java @@ -0,0 +1,74 @@ +package gov.nist.csd.pm.impl.memory.pap.store; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.obligation.Obligation; +import gov.nist.csd.pm.pap.obligation.Rule; +import gov.nist.csd.pm.pap.exception.ObligationDoesNotExistException; +import gov.nist.csd.pm.pap.store.ObligationsStore; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +class MemoryObligationsStore extends MemoryStore implements ObligationsStore { + + public MemoryObligationsStore(MemoryPolicy policy, MemoryTx tx, TxCmdTracker txCmdTracker) { + super(policy, tx, txCmdTracker); + } + + @Override + public void createObligation(String author, String name, List rules) throws PMException { + Obligation obligation = new Obligation(author, name, rules.stream().toList()); + + policy.obligations.add(obligation); + + txCmdTracker.trackOp(tx, new TxCmd.CreateObligationTxCmd(obligation)); + } + + @Override + public Collection getObligations() throws PMException { + return policy.obligations; + } + + @Override + public boolean obligationExists(String name) throws PMException { + for (Obligation o : policy.obligations) { + if (o.getName().equals(name)) { + return true; + } + } + + return false; + } + + @Override + public Obligation getObligation(String name) throws ObligationDoesNotExistException { + for (Obligation obligation : policy.obligations) { + if (obligation.getName().equals(name)) { + return obligation; + } + } + + throw new ObligationDoesNotExistException(name); + } + + @Override + public Collection getObligationsWithAuthor(String user) throws PMException { + List obls = new ArrayList<>(); + for (Obligation obligation : getObligations()) { + if (obligation.getAuthor().equals(user)) { + obls.add(obligation); + } + } + + return obls; + } + + @Override + public void deleteObligation(String name) throws PMException { + Obligation old = getObligation(name); + policy.obligations.removeIf(o -> o.getName().equals(name)); + txCmdTracker.trackOp(tx, new TxCmd.DeleteObligationTxCmd(old)); + } + +} diff --git a/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/MemoryOperationsStore.java b/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/MemoryOperationsStore.java new file mode 100644 index 000000000..7c08cd351 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/MemoryOperationsStore.java @@ -0,0 +1,53 @@ +package gov.nist.csd.pm.impl.memory.pap.store; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.op.Operation; +import gov.nist.csd.pm.pap.store.OperationsStore; + +import java.util.ArrayList; +import java.util.Collection; + +public class MemoryOperationsStore extends MemoryStore implements OperationsStore { + + public MemoryOperationsStore(MemoryPolicy policy, MemoryTx tx, TxCmdTracker txCmdTracker) { + super(policy, tx, txCmdTracker); + } + + @Override + public void setResourceOperations(AccessRightSet accessRightSet) throws PMException { + AccessRightSet old = new AccessRightSet(policy.resourceOperations); + + policy.resourceOperations = accessRightSet; + + txCmdTracker.trackOp(tx, new TxCmd.SetResourceOperationsTxCmd( + old, + accessRightSet) + ); + } + + @Override + public void createAdminOperation(Operation operation) throws PMException { + policy.operations.put(operation.getName(), operation); + } + + @Override + public void deleteAdminOperation(String operation) throws PMException { + policy.operations.remove(operation); + } + + @Override + public AccessRightSet getResourceOperations() throws PMException { + return policy.resourceOperations; + } + + @Override + public Collection getAdminOperationNames() throws PMException { + return new ArrayList<>(policy.operations.keySet()); + } + + @Override + public Operation getAdminOperation(String operationName) throws PMException { + return policy.operations.get(operationName); + } +} diff --git a/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/MemoryPolicy.java b/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/MemoryPolicy.java new file mode 100644 index 000000000..ab9a46a6a --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/MemoryPolicy.java @@ -0,0 +1,36 @@ +package gov.nist.csd.pm.impl.memory.pap.store; + +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.obligation.Obligation; +import gov.nist.csd.pm.pap.prohibition.Prohibition; +import gov.nist.csd.pm.pap.op.Operation; +import gov.nist.csd.pm.pap.routine.Routine; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; +import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; + +import java.util.*; + +public class MemoryPolicy { + + protected Map graph; + protected AccessRightSet resourceOperations; + protected Set pcs; + protected Map> prohibitions; + protected List obligations; + protected Map> operations; + protected Map> routines; + + public MemoryPolicy() { + reset(); + } + + public void reset() { + this.graph = new Object2ObjectOpenHashMap<>(); + this.pcs = new ObjectOpenHashSet<>(); + this.resourceOperations = new AccessRightSet(); + this.prohibitions = new HashMap<>(); + this.obligations = new ArrayList<>(); + this.operations = new HashMap<>(); + this.routines = new HashMap<>(); + } +} diff --git a/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/MemoryPolicyStore.java b/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/MemoryPolicyStore.java new file mode 100644 index 000000000..e4851a6f9 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/MemoryPolicyStore.java @@ -0,0 +1,91 @@ +package gov.nist.csd.pm.impl.memory.pap.store; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.store.*; + +import java.util.List; + +public class MemoryPolicyStore implements PolicyStore { + + private TxCmdTracker txCmdTracker; + private MemoryTx tx; + private MemoryPolicy policy; + + private MemoryGraphStore graph; + private MemoryProhibitionsStore prohibitions; + private MemoryObligationsStore obligations; + private MemoryOperationsStore operations; + private MemoryRoutinesStore routines; + + public MemoryPolicyStore() { + this.policy = new MemoryPolicy(); + this.tx = new MemoryTx(); + this.txCmdTracker = new TxCmdTracker(); + + this.graph = new MemoryGraphStore(policy, tx, txCmdTracker); + this.prohibitions = new MemoryProhibitionsStore(policy, tx, txCmdTracker); + this.obligations = new MemoryObligationsStore(policy, tx, txCmdTracker); + this.operations = new MemoryOperationsStore(policy, tx, txCmdTracker); + this.routines = new MemoryRoutinesStore(policy, tx, txCmdTracker); + } + + @Override + public MemoryGraphStore graph() { + return graph; + } + + @Override + public MemoryProhibitionsStore prohibitions() { + return prohibitions; + } + + @Override + public MemoryObligationsStore obligations() { + return obligations; + } + + @Override + public MemoryOperationsStore operations() { + return operations; + } + + @Override + public MemoryRoutinesStore routines() { + return routines; + } + + @Override + public void reset() { + policy.reset(); + } + + @Override + public void beginTx() throws PMException { + tx.beginTx(); + } + + @Override + public void commit() { + tx.commit(); + + if (tx.getCounter() == 0) { + txCmdTracker.clearOps(); + } + } + + @Override + public void rollback() throws PMException { + tx.rollback(); + + List events = txCmdTracker.getOperations(); + for (TxCmd txCmd : events) { + try { + txCmd.rollback(this); + } catch (PMException e) { + throw new PMException("error during tx rollback", e); + } + } + + txCmdTracker.clearOps(); + } +} diff --git a/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/MemoryProhibitionsStore.java b/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/MemoryProhibitionsStore.java new file mode 100644 index 000000000..92fc70f2f --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/MemoryProhibitionsStore.java @@ -0,0 +1,96 @@ +package gov.nist.csd.pm.impl.memory.pap.store; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.prohibition.ContainerCondition; +import gov.nist.csd.pm.pap.prohibition.Prohibition; +import gov.nist.csd.pm.pap.prohibition.ProhibitionSubject; +import gov.nist.csd.pm.pap.exception.ProhibitionDoesNotExistException; +import gov.nist.csd.pm.pap.store.ProhibitionsStore; + +import java.util.*; + +public class MemoryProhibitionsStore extends MemoryStore implements ProhibitionsStore { + + public MemoryProhibitionsStore(MemoryPolicy policy, MemoryTx tx, TxCmdTracker txCmdTracker) { + super(policy, tx, txCmdTracker); + } + + @Override + public void createProhibition(String name, + ProhibitionSubject subject, + AccessRightSet accessRightSet, + boolean intersection, + Collection containerConditions) { + List existingPros = new ArrayList<>(policy.prohibitions.getOrDefault( + subject.getName(), + new ArrayList<>() + )); + + Prohibition p = new Prohibition( + name, + subject, + accessRightSet, + intersection, + containerConditions.stream().toList() + ); + + existingPros.add(p); + + policy.prohibitions.put(subject.getName(), existingPros); + + txCmdTracker.trackOp(tx, new TxCmd.CreateProhibitionTxCmd(p)); + } + + @Override + public void deleteProhibition(String name) throws PMException { + Prohibition old = getProhibition(name); + + for (String subject : policy.prohibitions.keySet()) { + Collection ps = policy.prohibitions.getOrDefault(subject, new ArrayList<>()); + ps.removeIf(p -> p.getName().equals(name)); + + if (ps.isEmpty()) { + policy.prohibitions.remove(subject); + } else { + policy.prohibitions.put(subject, ps); + } + } + + if(old != null) { + txCmdTracker.trackOp(tx, new TxCmd.DeleteProhibitionTxCmd(old)); + } + } + + @Override + public Map> getProhibitions() throws PMException { + return policy.prohibitions; + } + + @Override + public Prohibition getProhibition(String name) throws PMException { + for (String subject : policy.prohibitions.keySet()) { + Collection subjectPros = policy.prohibitions.getOrDefault(subject, new ArrayList<>()); + for (Prohibition p : subjectPros) { + if (p.getName().equals(name)) { + return p; + } + } + } + + throw new ProhibitionDoesNotExistException(name); + } + + @Override + public boolean prohibitionExists(String name) throws PMException { + for (Map.Entry> e : policy.prohibitions.entrySet()) { + for (Prohibition p : e.getValue()) { + if (p.getName().equals(name)) { + return true; + } + } + } + + return false; + } +} \ No newline at end of file diff --git a/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/MemoryRoutinesStore.java b/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/MemoryRoutinesStore.java new file mode 100644 index 000000000..ed95918bb --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/MemoryRoutinesStore.java @@ -0,0 +1,40 @@ +package gov.nist.csd.pm.impl.memory.pap.store; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.routine.Routine; +import gov.nist.csd.pm.pap.store.RoutinesStore; + +import java.util.ArrayList; +import java.util.Collection; + +public class MemoryRoutinesStore extends MemoryStore implements RoutinesStore { + public MemoryRoutinesStore(MemoryPolicy policy, MemoryTx tx, TxCmdTracker txCmdTracker) { + super(policy, tx, txCmdTracker); + } + + @Override + public void createAdminRoutine(Routine routine) throws PMException { + policy.routines.put(routine.getName(), routine); + + txCmdTracker.trackOp(tx, new TxCmd.CreateAdminRoutine(routine)); + } + + @Override + public void deleteAdminRoutine(String name) throws PMException { + Routine routine = policy.routines.get(name); + + policy.routines.remove(name); + + txCmdTracker.trackOp(tx, new TxCmd.DeleteAdminRoutine(routine)); + } + + @Override + public Collection getAdminRoutineNames() throws PMException { + return new ArrayList<>(policy.routines.keySet()); + } + + @Override + public Routine getAdminRoutine(String routineName) throws PMException { + return policy.routines.get(routineName); + } +} \ No newline at end of file diff --git a/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/MemoryStore.java b/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/MemoryStore.java new file mode 100644 index 000000000..464d32b1e --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/MemoryStore.java @@ -0,0 +1,32 @@ +package gov.nist.csd.pm.impl.memory.pap.store; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.tx.Transactional; + +public class MemoryStore implements Transactional { + + protected MemoryPolicy policy; + protected MemoryTx tx; + protected TxCmdTracker txCmdTracker; + + public MemoryStore(MemoryPolicy policy, MemoryTx tx, TxCmdTracker txCmdTracker) { + this.policy = policy; + this.tx = tx; + this.txCmdTracker = txCmdTracker; + } + + @Override + public final void beginTx() throws PMException { + tx.beginTx(); + } + + @Override + public final void commit() throws PMException { + tx.commit(); + } + + @Override + public final void rollback() throws PMException { + tx.rollback(); + } +} \ No newline at end of file diff --git a/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/MemoryTx.java b/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/MemoryTx.java new file mode 100644 index 000000000..13624f330 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/MemoryTx.java @@ -0,0 +1,75 @@ +package gov.nist.csd.pm.impl.memory.pap.store; + +import gov.nist.csd.pm.pap.tx.Transactional; + +import java.util.Objects; + +public class MemoryTx implements Transactional { + private boolean active; + private int counter; + + public MemoryTx() { + active = false; + counter = 0; + } + + public MemoryTx(boolean active, int counter) { + this.active = active; + this.counter = counter; + } + + public boolean isActive() { + return active; + } + + public void setActive(boolean active) { + this.active = active; + } + + public int getCounter() { + return counter; + } + + public void setCounter(int counter) { + this.counter = counter; + } + + @Override + public void beginTx() { + active = true; + counter++; + } + + @Override + public void commit() { + counter--; + active = counter != 0; + } + + @Override + public void rollback() { + counter = 0; + active = false; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + MemoryTx memoryTx = (MemoryTx) o; + return active == memoryTx.active && counter == memoryTx.counter; + } + + @Override + public int hashCode() { + return Objects.hash(active, counter); + } + + @Override + public String toString() { + return "MemoryTx{" + + "active=" + active + + ", counter=" + counter + + '}'; + } +} diff --git a/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/TxCmd.java b/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/TxCmd.java new file mode 100644 index 000000000..a5e405ffe --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/TxCmd.java @@ -0,0 +1,254 @@ +package gov.nist.csd.pm.impl.memory.pap.store; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.graph.node.Node; +import gov.nist.csd.pm.pap.graph.node.NodeType; +import gov.nist.csd.pm.pap.obligation.Obligation; +import gov.nist.csd.pm.pap.prohibition.Prohibition; +import gov.nist.csd.pm.pap.routine.Routine; + +import java.util.Collection; +import java.util.Map; + +public abstract class TxCmd implements TxRollbackSupport { + + static class SetResourceOperationsTxCmd extends TxCmd { + + private AccessRightSet oldAccessRights; + private AccessRightSet newAccessRights; + + public SetResourceOperationsTxCmd(AccessRightSet oldAccessRights, AccessRightSet newAccessRights) { + this.oldAccessRights = oldAccessRights; + this.newAccessRights = newAccessRights; + } + + @Override + public void rollback(MemoryPolicyStore memoryPolicyStore) throws PMException { + memoryPolicyStore.operations().setResourceOperations(oldAccessRights); + } + } + + static class CreatePolicyClassTxCmd extends TxCmd { + + private String name; + private Map properties; + + public CreatePolicyClassTxCmd(String name, Map properties) { + this.name = name; + this.properties = properties; + } + + @Override + public void rollback(MemoryPolicyStore memoryPolicyStore) throws PMException { + memoryPolicyStore.graph().deleteNode(name); + } + } + + static class CreateNodeTxCmd extends TxCmd { + + private final String name; + + public CreateNodeTxCmd(String name) { + this.name = name; + } + + @Override + public void rollback(MemoryPolicyStore memoryPolicyStore) throws PMException { + memoryPolicyStore.graph().deleteNode(name); + } + } + + static class SetNodePropertiesTxCmd extends TxCmd { + private final String name; + private final Map oldProperties; + private final Map newProperties; + + public SetNodePropertiesTxCmd(String name, Map oldProperties, Map newProperties) { + this.name = name; + this.oldProperties = oldProperties; + this.newProperties = newProperties; + } + + @Override + public void rollback(MemoryPolicyStore memoryPolicyStore) throws PMException { + memoryPolicyStore.graph().setNodeProperties(name, oldProperties); + } + } + + static class DeleteNodeTxCmd extends TxCmd { + private final String name; + private final Node nodeToDelete; + private final Collection descendants; + + public DeleteNodeTxCmd(String name, Node nodeToDelete, Collection descendants) { + this.name = name; + this.nodeToDelete = nodeToDelete; + this.descendants = descendants; + } + + @Override + public void rollback(MemoryPolicyStore memoryPolicyStore) throws PMException { + NodeType type = nodeToDelete.getType(); + Map properties = nodeToDelete.getProperties(); + + memoryPolicyStore.graph().createNode(name, nodeToDelete.getType()); + + for (String descendant : descendants) { + memoryPolicyStore.graph().createAssignment(name, descendant); + } + } + } + + static final class CreateAssignmentTxCmd extends TxCmd { + private final String ascendant; + private final String descendant; + + public CreateAssignmentTxCmd(String ascendant, String descendant) { + this.ascendant = ascendant; + this.descendant = descendant; + } + + @Override + public void rollback(MemoryPolicyStore memoryPolicyStore) throws PMException { + memoryPolicyStore.graph().deleteAssignment(ascendant, descendant); + } + } + + static class DeleteAssignmentTxCmd extends TxCmd { + private final String ascendant; + private final String descendant; + + public DeleteAssignmentTxCmd(String ascendant, String descendant) { + this.ascendant = ascendant; + this.descendant = descendant; + } + + @Override + public void rollback(MemoryPolicyStore memoryPolicyStore) throws PMException { + memoryPolicyStore.graph().createAssignment(ascendant, descendant); + } + } + + static class CreateAssociationTxCmd extends TxCmd { + + private final String source; + private final String target; + + public CreateAssociationTxCmd(String source, String target) { + this.source = source; + this.target = target; + } + + @Override + public void rollback(MemoryPolicyStore memoryPolicyStore) throws PMException { + memoryPolicyStore.graph().deleteAssociation(source, target); + } + } + + static class DeleteAssociationTxCmd extends TxCmd { + private String ua; + private String target; + private AccessRightSet accessRightSet; + + public DeleteAssociationTxCmd(String ua, String target, AccessRightSet accessRightSet) { + this.ua = ua; + this.target = target; + this.accessRightSet = accessRightSet; + } + + @Override + public void rollback(MemoryPolicyStore memoryPolicyStore) throws PMException { + memoryPolicyStore.graph().createAssociation(ua, target, accessRightSet); + } + } + + static class CreateProhibitionTxCmd extends TxCmd { + private final Prohibition prohibition; + + public CreateProhibitionTxCmd(Prohibition prohibition) { + this.prohibition = prohibition; + } + + @Override + public void rollback(MemoryPolicyStore memoryPolicyStore) throws PMException { + memoryPolicyStore.prohibitions().deleteProhibition(prohibition.getName()); + } + } + + static class DeleteProhibitionTxCmd extends TxCmd { + private final Prohibition prohibitionToDelete; + + public DeleteProhibitionTxCmd(Prohibition prohibitionToDelete) { + this.prohibitionToDelete = prohibitionToDelete; + } + + @Override + public void rollback(MemoryPolicyStore memoryPolicyStore) throws PMException { + memoryPolicyStore.prohibitions().createProhibition( + prohibitionToDelete.getName(), + prohibitionToDelete.getSubject(), + prohibitionToDelete.getAccessRightSet(), + prohibitionToDelete.isIntersection(), + prohibitionToDelete.getContainers() + ); + } + } + + static class CreateObligationTxCmd extends TxCmd { + private final Obligation obligation; + + public CreateObligationTxCmd(Obligation obligation) { + this.obligation = obligation; + } + + @Override + public void rollback(MemoryPolicyStore memoryPolicyStore) throws PMException { + memoryPolicyStore.obligations().deleteObligation(obligation.getName()); + } + } + + static class DeleteObligationTxCmd extends TxCmd { + private final Obligation obligationToDelete; + public DeleteObligationTxCmd(Obligation obligationToDelete) { + this.obligationToDelete = obligationToDelete; + } + + @Override + public void rollback(MemoryPolicyStore memoryPolicyStore) throws PMException { + memoryPolicyStore.obligations().createObligation( + obligationToDelete.getAuthor(), + obligationToDelete.getName(), + obligationToDelete.getRules() + ); + } + } + + static class CreateAdminRoutine extends TxCmd { + + private Routine routine; + + public CreateAdminRoutine(Routine routine) { + this.routine = routine; + } + + @Override + public void rollback(MemoryPolicyStore memoryPolicyStore) throws PMException { + memoryPolicyStore.routines().deleteAdminRoutine(routine.getName()); + } + } + + static class DeleteAdminRoutine extends TxCmd { + + private Routine routine; + + public DeleteAdminRoutine(Routine routine) { + this.routine = routine; + } + + @Override + public void rollback(MemoryPolicyStore memoryPolicyStore) throws PMException { + memoryPolicyStore.routines().createAdminRoutine(routine); + } + } +} diff --git a/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/TxCmdTracker.java b/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/TxCmdTracker.java new file mode 100644 index 000000000..c2d20bdfb --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/TxCmdTracker.java @@ -0,0 +1,34 @@ +package gov.nist.csd.pm.impl.memory.pap.store; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class TxCmdTracker { + + private final List operations; + + public TxCmdTracker() { + operations = new ArrayList<>(); + } + + public List getOperations() { + List copy = new ArrayList<>(operations); + + Collections.reverse(copy); + + return copy; + } + + public void trackOp(MemoryTx tx, TxCmd op) { + if (!tx.isActive()) { + return; + } + + this.operations.add(op); + } + + public void clearOps() { + this.operations.clear(); + } +} diff --git a/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/TxRollbackSupport.java b/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/TxRollbackSupport.java new file mode 100644 index 000000000..7d2debcf9 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/TxRollbackSupport.java @@ -0,0 +1,7 @@ +package gov.nist.csd.pm.impl.memory.pap.store; + +import gov.nist.csd.pm.pap.exception.PMException; + +public interface TxRollbackSupport { + void rollback(MemoryPolicyStore memoryPolicyStore) throws PMException; +} diff --git a/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/Vertex.java b/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/Vertex.java new file mode 100644 index 000000000..694939be3 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/Vertex.java @@ -0,0 +1,40 @@ +package gov.nist.csd.pm.impl.memory.pap.store; + +import gov.nist.csd.pm.pap.graph.node.NodeType; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.graph.relationship.Association; + +import java.util.Collection; +import java.util.Map; + +public abstract class Vertex { + + protected String name; + protected NodeType type; + + public Vertex(String name, NodeType type) { + this.name = name; + this.type = type; + } + + protected String getName() { + return name; + } + + protected NodeType getType() { + return type; + } + + protected abstract Map getProperties(); + + protected abstract Collection getAdjacentDescendants(); + protected abstract Collection getAdjacentAscendants(); + protected abstract Collection getOutgoingAssociations(); + protected abstract Collection getIncomingAssociations(); + + protected abstract void addAssignment(String ascendant, String descendant); + protected abstract void deleteAssignment(String ascendant, String descendant); + protected abstract void addAssociation(String ua, String target, AccessRightSet accessRightSet); + protected abstract void deleteAssociation(String ua, String target); + +} diff --git a/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/VertexAttribute.java b/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/VertexAttribute.java new file mode 100644 index 000000000..175f18995 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/VertexAttribute.java @@ -0,0 +1,87 @@ +package gov.nist.csd.pm.impl.memory.pap.store; + +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.graph.node.NodeType; +import gov.nist.csd.pm.pap.graph.relationship.Association; +import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; + +import java.util.HashMap; +import java.util.Map; + +class VertexAttribute extends Vertex { + + private ObjectOpenHashSet descendants; + private ObjectOpenHashSet ascendants; + private ObjectOpenHashSet outgoingAssociations; + private ObjectOpenHashSet incomingAssociations; + + public VertexAttribute(String name, NodeType type) { + super(name, type); + this.descendants = new ObjectOpenHashSet<>(); + this.ascendants = new ObjectOpenHashSet<>(); + this.outgoingAssociations = new ObjectOpenHashSet<>(); + this.incomingAssociations = new ObjectOpenHashSet<>(); + } + + @Override + protected Map getProperties() { + return new HashMap<>(); + } + + @Override + public ObjectOpenHashSet getAdjacentDescendants() { + return new ObjectOpenHashSet<>(descendants); + } + + @Override + public ObjectOpenHashSet getAdjacentAscendants() { + return new ObjectOpenHashSet<>(ascendants); + } + + @Override + public ObjectOpenHashSet getOutgoingAssociations() { + return new ObjectOpenHashSet<>(outgoingAssociations); + } + + @Override + public ObjectOpenHashSet getIncomingAssociations() { + return new ObjectOpenHashSet<>(incomingAssociations); + } + + @Override + protected void addAssignment(String ascendant, String descendant) { + if (ascendant.equals(name)) { + descendants.add(descendant); + } else { + ascendants.add(ascendant); + } + } + + @Override + protected void deleteAssignment(String ascendant, String descendant) { + if (ascendant.equals(name)) { + descendants.remove(descendant); + } else { + ascendants.remove(ascendant); + } + } + + @Override + public void addAssociation(String ua, String target, AccessRightSet accessRightSet) { + if (ua.equals(name)) { + outgoingAssociations.add(new Association(ua, target, accessRightSet)); + } else { + incomingAssociations.add(new Association(ua, target, accessRightSet)); + } + } + + @Override + public void deleteAssociation(String ua, String target) { + if (ua.equals(name)) { + outgoingAssociations.removeIf(a -> a.getSource().equals(ua) && a.getTarget().equals(target)); + } else { + incomingAssociations.removeIf(a -> a.getSource().equals(ua) && a.getTarget().equals(target)); + } + } +} + diff --git a/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/VertexLeaf.java b/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/VertexLeaf.java new file mode 100644 index 000000000..724944e9b --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/VertexLeaf.java @@ -0,0 +1,64 @@ +package gov.nist.csd.pm.impl.memory.pap.store; + +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.graph.node.NodeType; +import gov.nist.csd.pm.pap.graph.relationship.Association; +import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; + +import java.util.HashMap; +import java.util.Map; + +class VertexLeaf extends Vertex { + + private ObjectOpenHashSet descendants; + + public VertexLeaf(String name, NodeType type) { + super(name, type); + this.descendants = new ObjectOpenHashSet<>(); + } + + @Override + protected Map getProperties() { + return new HashMap<>(); + } + + @Override + protected ObjectOpenHashSet getAdjacentDescendants() { + return new ObjectOpenHashSet<>(descendants); + } + + @Override + protected ObjectOpenHashSet getAdjacentAscendants() { + return new ObjectOpenHashSet<>(); + } + + @Override + protected ObjectOpenHashSet getOutgoingAssociations() { + return new ObjectOpenHashSet<>(); + } + + @Override + protected ObjectOpenHashSet getIncomingAssociations() { + return new ObjectOpenHashSet<>(); + } + + @Override + public void addAssignment(String ascendant, String descendant) { + descendants.add(descendant); + } + + @Override + public void deleteAssignment(String ascendant, String descendant) { + descendants.remove(descendant); + } + + @Override + public void addAssociation(String ua, String target, AccessRightSet accessRightSet) { + + } + + @Override + public void deleteAssociation(String ua, String target) { + + } +} diff --git a/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/VertexPolicyClass.java b/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/VertexPolicyClass.java new file mode 100644 index 000000000..8d93eac37 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/VertexPolicyClass.java @@ -0,0 +1,68 @@ +package gov.nist.csd.pm.impl.memory.pap.store; + +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.graph.node.NodeType; +import gov.nist.csd.pm.pap.graph.relationship.Association; +import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; + +import java.util.HashMap; +import java.util.Map; + +class VertexPolicyClass extends Vertex { + private ObjectOpenHashSet ascendants; + + public VertexPolicyClass(String name) { + super(name, NodeType.PC); + this.ascendants = new ObjectOpenHashSet<>(); + } + + public VertexPolicyClass(String name, ObjectOpenHashSet ascendants) { + super(name, NodeType.PC); + this.ascendants = ascendants; + } + + @Override + protected Map getProperties() { + return new HashMap<>(); + } + + @Override + protected ObjectOpenHashSet getAdjacentDescendants() { + return new ObjectOpenHashSet<>(); + } + + @Override + protected ObjectOpenHashSet getAdjacentAscendants() { + return new ObjectOpenHashSet<>(ascendants); + } + + @Override + protected ObjectOpenHashSet getOutgoingAssociations() { + return new ObjectOpenHashSet<>(); + } + + @Override + protected ObjectOpenHashSet getIncomingAssociations() { + return new ObjectOpenHashSet<>(); + } + + @Override + public void addAssignment(String ascendant, String descendant) { + ascendants.add(ascendant); + } + + @Override + public void deleteAssignment(String ascendant, String descendant) { + ascendants.remove(ascendant); + } + + @Override + public void addAssociation(String ua, String target, AccessRightSet accessRightSet) { + + } + + @Override + public void deleteAssociation(String ua, String target) { + + } +} diff --git a/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/VertexWithProps.java b/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/VertexWithProps.java new file mode 100644 index 000000000..ddbc2f45c --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/impl/memory/pap/store/VertexWithProps.java @@ -0,0 +1,68 @@ +package gov.nist.csd.pm.impl.memory.pap.store; + +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.graph.relationship.Association; + +import java.util.Collection; +import java.util.Map; + +public class VertexWithProps extends Vertex{ + + private Vertex vertex; + private Map properties; + + public VertexWithProps(Vertex vertex, Map properties) { + super(vertex.name, vertex.type); + this.vertex = vertex; + this.properties = properties; + } + + public Vertex getVertex() { + return vertex; + } + + @Override + protected Map getProperties() { + return properties; + } + + @Override + protected Collection getAdjacentDescendants() { + return vertex.getAdjacentDescendants(); + } + + @Override + protected Collection getAdjacentAscendants() { + return vertex.getAdjacentAscendants(); + } + + @Override + protected Collection getOutgoingAssociations() { + return vertex.getOutgoingAssociations(); + } + + @Override + protected Collection getIncomingAssociations() { + return vertex.getIncomingAssociations(); + } + + @Override + protected void addAssignment(String ascendant, String descendant) { + vertex.addAssignment(ascendant, descendant); + } + + @Override + protected void deleteAssignment(String ascendant, String descendant) { + vertex.deleteAssignment(ascendant, descendant); + } + + @Override + protected void addAssociation(String ua, String target, AccessRightSet accessRightSet) { + vertex.addAssociation(ua, target, accessRightSet); + } + + @Override + protected void deleteAssociation(String ua, String target) { + vertex.deleteAssociation(ua, target); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/PAP.java b/src/main/java/gov/nist/csd/pm/pap/PAP.java index c7f9e18f4..83ac860f3 100644 --- a/src/main/java/gov/nist/csd/pm/pap/PAP.java +++ b/src/main/java/gov/nist/csd/pm/pap/PAP.java @@ -1,126 +1,168 @@ package gov.nist.csd.pm.pap; -import gov.nist.csd.pm.policy.*; -import gov.nist.csd.pm.policy.events.*; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.UserContext; -import gov.nist.csd.pm.policy.pml.PMLExecutable; -import gov.nist.csd.pm.policy.pml.PMLExecutor; -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; -import gov.nist.csd.pm.policy.tx.Transactional; - -import java.util.HashSet; -import java.util.Set; - -public class PAP implements PolicySync, PolicyEventListener, PolicyEventEmitter, Transactional, PMLExecutable, Policy { - - protected PolicyStore policyStore; - - protected Set listeners; - - private final PAPGraph papGraph; - private final PAPProhibitions papProhibitions; - private final PAPObligations papObligations; - private final PAPUserDefinedPML papUserDefinedPML; +import gov.nist.csd.pm.pap.admin.AdminPolicy; +import gov.nist.csd.pm.pap.executable.AdminExecutable; +import gov.nist.csd.pm.pap.executable.AdminExecutor; +import gov.nist.csd.pm.pap.modification.PolicyModifier; +import gov.nist.csd.pm.pap.pml.PMLCompiler; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.executable.operation.PMLOperation; +import gov.nist.csd.pm.pap.pml.executable.routine.PMLRoutine; +import gov.nist.csd.pm.pap.pml.statement.PMLStatement; +import gov.nist.csd.pm.pap.pml.value.Value; +import gov.nist.csd.pm.pap.query.PolicyQuerier; +import gov.nist.csd.pm.pap.serialization.PolicyDeserializer; +import gov.nist.csd.pm.pap.serialization.PolicySerializer; +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.store.PolicyStore; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public abstract class PAP implements PolicyPoint, AdminExecutor { + + protected final PolicyStore policyStore; + private final PolicyModifier modifier; + + private Map pmlOperations; + private Map pmlRoutines; + private Map pmlConstants; public PAP(PolicyStore policyStore) throws PMException { this.policyStore = policyStore; - this.listeners = new HashSet<>(); - - this.papGraph = new PAPGraph(policyStore, this); - this.papProhibitions = new PAPProhibitions(policyStore, this); - this.papObligations = new PAPObligations(policyStore, this); - this.papUserDefinedPML = new PAPUserDefinedPML(policyStore, this); + this.modifier = new PolicyModifier(policyStore); + AdminPolicy.verify(modifier); - SuperPolicy.verifySuperPolicy(this.policyStore); + this.pmlOperations = new HashMap<>(); + this.pmlRoutines = new HashMap<>(); + this.pmlConstants = new HashMap<>(); } - @Override - public Graph graph() { - return papGraph; + public PAP(PAP pap) throws PMException { + this(pap.policyStore); } - @Override - public Prohibitions prohibitions() { - return papProhibitions; - } + public abstract PolicyQuerier query(); - @Override - public Obligations obligations() { - return papObligations; + public PolicyModifier modify() { + return modifier; } - @Override - public UserDefinedPML userDefinedPML() { - return papUserDefinedPML; + protected PolicyStore policyStore() { + return policyStore; } @Override - public PolicySerializer serialize() throws PMException { - return policyStore.serialize(); + public void reset() throws PMException { + policyStore.reset(); + + AdminPolicy.verify(modifier); } @Override - public PolicyDeserializer deserialize() throws PMException { - return new PAPDeserializer(policyStore); + public Object executeAdminExecutable(AdminExecutable adminExecutable, Map operands) throws PMException { + return adminExecutable.execute(this, operands); + } + + /** + * Serialize the current policy state with the given PolicySerializer. + * + * @param serializer The PolicySerializer used to generate the output String. + * @return The string representation of the policy. + * @throws PMException If there is an error during the serialization process. + */ + public String serialize(PolicySerializer serializer) throws PMException { + return serializer.serialize(query()); + } + + /** + * Deserialize the given input string into the current policy state. The user defined in the UserContext needs to exist + * in the graph created if any obligations are created. If the user does not exist before an obligation is created + * an exception will be thrown. This method also resets the policy before deserialization. However, the {@link AdminPolicy} + * nodes are assumed to be created and can be referenced in the input string without explicit creation. If any of the + * admin policy nodes are created in the input string an exception will be thrown. + * + * @param author The UserContext describing the author of the deserialized policy elements. + * @param input The string representation of the policy to deserialize. + * @param policyDeserializer The PolicyDeserializer to apply the input string to the policy. + * @throws PMException If there is an error deserializing the given inputs string. + */ + public void deserialize(UserContext author, String input, PolicyDeserializer policyDeserializer) throws PMException { + beginTx(); + + try { + policyDeserializer.deserialize(this, author, input); + } catch (PMException e) { + rollback(); + throw e; + } + + commit(); } - @Override - public void addEventListener(PolicyEventListener listener, boolean sync) throws PMException { - listeners.add(listener); + public void setPMLOperations(Map pmlOperations) throws PMException { + this.pmlOperations = pmlOperations; + } - if (sync) { - listener.handlePolicyEvent(policyStore.policySync()); + public void setPMLOperations(PMLOperation... operations) throws PMException { + for (PMLOperation operation : operations) { + this.pmlOperations.put(operation.getName(), operation); } } - @Override - public void removeEventListener(PolicyEventListener listener) { - listeners.remove(listener); + public void setPMLRoutines(Map pmlRoutines) throws PMException { + this.pmlRoutines = pmlRoutines; } - @Override - public void emitEvent(PolicyEvent event) throws PMException { - for (PolicyEventListener listener : listeners) { - listener.handlePolicyEvent(event); + public void setPMLRoutines(PMLRoutine... routines) throws PMException { + for (PMLRoutine routine : routines) { + this.pmlRoutines.put(routine.getName(), routine); } } - @Override - public void handlePolicyEvent(PolicyEvent event) throws PMException { - for (PolicyEventListener listener : listeners) { - listener.handlePolicyEvent(event); - } + public Map getPMLOperations() throws PMException { + return pmlOperations; } - @Override - public PolicySynchronizationEvent policySync() throws PMException { - return this.policyStore.policySync(); + public Map getPMLRoutines() throws PMException { + return pmlRoutines; } - @Override - public void beginTx() throws PMException { - policyStore.beginTx(); + public void setPMLConstants(Map pmlConstants) throws PMException { + this.pmlConstants = pmlConstants; + } - emitEvent(new BeginTxEvent()); + public Map getPMLConstants() throws PMException { + return pmlConstants; } - @Override - public void commit() throws PMException { - policyStore.commit(); + public void executePML(UserContext author, String input) throws PMException { + PMLCompiler pmlCompiler = new PMLCompiler(this); + + List compiledPML = pmlCompiler.compilePML(input); - emitEvent(new CommitTxEvent()); + // execute other statements + ExecutionContext ctx = new ExecutionContext(author, this); + + ctx.executeStatements(compiledPML, Map.of()); } - @Override - public void rollback() throws PMException { - policyStore.rollback(); + public void runTx(TxRunner txRunner) throws PMException { + beginTx(); - emitEvent(new RollbackTxEvent(this)); + try { + txRunner.runTx(this); + + commit(); + } catch (PMException e) { + rollback(); + throw e; + } } - @Override - public void executePML(UserContext userContext, String input, FunctionDefinitionStatement... functionDefinitionStatements) throws PMException { - PMLExecutor.compileAndExecutePML(this, userContext, input, functionDefinitionStatements); + public interface TxRunner { + void runTx(PAP pap) throws PMException; } } diff --git a/src/main/java/gov/nist/csd/pm/pap/PAPDeserializer.java b/src/main/java/gov/nist/csd/pm/pap/PAPDeserializer.java deleted file mode 100644 index c08764336..000000000 --- a/src/main/java/gov/nist/csd/pm/pap/PAPDeserializer.java +++ /dev/null @@ -1,44 +0,0 @@ -package gov.nist.csd.pm.pap; - -import gov.nist.csd.pm.policy.PolicyDeserializer; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.UserContext; -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; - -class PAPDeserializer implements PolicyDeserializer { - - private PolicyStore policyStore; - - public PAPDeserializer(PolicyStore policyStore) { - this.policyStore = policyStore; - } - - @Override - public void fromJSON(String json) throws PMException { - // start a new tx to deserialize policy - policyStore.beginTx(); - - policyStore.reset(); - - // deserialize using deserializer - policyStore.deserialize().fromJSON(json); - - policyStore.commit(); - } - - @Override - public void fromPML(UserContext author, String pml, FunctionDefinitionStatement... customFunctions) throws PMException { - // start a new tx to deserialize policy - policyStore.beginTx(); - - policyStore.reset(); - - // deserialize using deserializer - policyStore.deserialize().fromPML(author, pml, customFunctions); - - // need to apply super policy to any policy classes created or attributes assigned to policy classes - SuperPolicy.verifySuperPolicy(this.policyStore); - - policyStore.commit(); - } -} diff --git a/src/main/java/gov/nist/csd/pm/pap/PAPGraph.java b/src/main/java/gov/nist/csd/pm/pap/PAPGraph.java deleted file mode 100644 index 0a4c6d32e..000000000 --- a/src/main/java/gov/nist/csd/pm/pap/PAPGraph.java +++ /dev/null @@ -1,491 +0,0 @@ -package gov.nist.csd.pm.pap; - -import gov.nist.csd.pm.policy.Graph; -import gov.nist.csd.pm.policy.events.*; -import gov.nist.csd.pm.policy.exceptions.*; -import gov.nist.csd.pm.policy.model.access.AccessRightSet; -import gov.nist.csd.pm.policy.model.graph.nodes.Node; -import gov.nist.csd.pm.policy.model.graph.nodes.NodeType; -import gov.nist.csd.pm.policy.model.graph.relationships.Assignment; -import gov.nist.csd.pm.policy.model.graph.relationships.Association; -import gov.nist.csd.pm.policy.model.obligation.Obligation; -import gov.nist.csd.pm.policy.model.obligation.Rule; -import gov.nist.csd.pm.policy.model.obligation.event.EventPattern; -import gov.nist.csd.pm.policy.model.obligation.event.EventSubject; -import gov.nist.csd.pm.policy.model.obligation.event.Target; -import gov.nist.csd.pm.policy.model.prohibition.ContainerCondition; -import gov.nist.csd.pm.policy.model.prohibition.Prohibition; - -import java.util.*; - -import static gov.nist.csd.pm.pap.SuperPolicy.pcRepObjectAttribute; -import static gov.nist.csd.pm.policy.model.access.AdminAccessRights.*; -import static gov.nist.csd.pm.policy.model.access.AdminAccessRights.wildcardAccessRights; -import static gov.nist.csd.pm.policy.model.graph.nodes.NodeType.*; -import static gov.nist.csd.pm.policy.model.graph.nodes.Properties.NO_PROPERTIES; - -class PAPGraph implements Graph, PolicyEventEmitter { - - protected PolicyStore policyStore; - - protected PolicyEventListener listener; - - public PAPGraph(PolicyStore policyStore, PolicyEventListener listener) throws PMException { - this.policyStore = policyStore; - this.listener = listener; - - SuperPolicy.verifySuperPolicy(this.policyStore); - } - - @Override - public void setResourceAccessRights(AccessRightSet accessRightSet) throws PMException { - for (String ar : accessRightSet) { - if (isAdminAccessRight(ar) || isWildcardAccessRight(ar)) { - throw new AdminAccessRightExistsException(ar); - } - } - - policyStore.graph().setResourceAccessRights(accessRightSet); - - // notify listeners of policy modification - emitEvent(new SetResourceAccessRightsEvent(accessRightSet)); - } - - @Override - public AccessRightSet getResourceAccessRights() throws PMException { - return policyStore.graph().getResourceAccessRights(); - } - - @Override - public String createPolicyClass(String name, Map properties) throws PMException { - if (nodeExists(name)) { - if (SuperPolicy.isSuperPolicyNode(name)) { - return name; - } - - throw new NodeNameExistsException(name); - } - - List events = SuperPolicy.createPolicyClass(policyStore, name, properties); - for (PolicyEvent event : events) { - emitEvent(event); - } - - return name; - } - - @Override - public String createPolicyClass(String name) throws PMException { - return createPolicyClass(name, NO_PROPERTIES); - } - - @Override - public String createUserAttribute(String name, Map properties, String parent, String... parents) throws PMException { - return createNode(name, UA, properties, parent, parents); - } - - @Override - public String createUserAttribute(String name, String parent, String... parents) throws PMException { - return createUserAttribute(name, NO_PROPERTIES, parent, parents); - } - - @Override - public String createObjectAttribute(String name, Map properties, String parent, String... parents) throws PMException { - return createNode(name, OA, properties, parent, parents); - } - - @Override - public String createObjectAttribute(String name, String parent, String... parents) throws PMException { - return createObjectAttribute(name, NO_PROPERTIES, parent, parents); - } - - @Override - public String createObject(String name, Map properties, String parent, String... parents) throws PMException { - return createNode(name, O, properties, parent, parents); - } - - @Override - public String createObject(String name, String parent, String... parents) throws PMException { - return createObject(name, NO_PROPERTIES, parent, parents); - } - - @Override - public String createUser(String name, Map properties, String parent, String... parents) throws PMException { - return createNode(name, U, properties, parent, parents); - } - - @Override - public String createUser(String name, String parent, String... parents) throws PMException { - return createUser(name, NO_PROPERTIES, parent, parents); - } - - private String createNode(String name, NodeType type, Map properties, String parent, String ... parents) throws PMException { - if (nodeExists(name)) { - if (SuperPolicy.isSuperPolicyNode(name)) { - return name; - } - - throw new NodeNameExistsException(name); - } - - // collect any parents that are of type PC - // this will also check if the nodes exist by calling getNode - List pcParents = new ArrayList<>(); - List parentsList = new ArrayList<>(Arrays.asList(parents)); - parentsList.add(parent); - - for (String p : parentsList) { - Node parentNode = getNode(p); - if (parentNode.getType() != PC) { - continue; - } - - pcParents.add(p); - } - - switch (type) { - case OA -> { - policyStore.graph().createObjectAttribute(name, properties, parent, parents); - emitEvent(new CreateObjectAttributeEvent(name, properties, parent, parents)); - } - case UA -> { - policyStore.graph().createUserAttribute(name, properties, parent, parents); - emitEvent(new CreateUserAttributeEvent(name, properties, parent, parents)); - } - case O -> { - policyStore.graph().createObject(name, properties, parent, parents); - emitEvent(new CreateObjectEvent(name, properties, parent, parents)); - } - case U -> { - policyStore.graph().createUser(name, properties, parent, parents); - emitEvent(new CreateUserEvent(name, properties, parent, parents)); - } - default -> { /* PC and ANY should not ever be passed to this private method */ } - } - - // for any pc parents, create any necessary super policy configurations - for (String pc : pcParents) { - List events = SuperPolicy.assignedToPolicyClass(policyStore, name, pc); - for (PolicyEvent e : events) { - emitEvent(e); - } - } - - return name; - } - - @Override - public void setNodeProperties(String name, Map properties) throws PMException { - if (!nodeExists(name)) { - throw new NodeDoesNotExistException(name); - } - - policyStore.graph().setNodeProperties(name, properties); - - emitEvent(new SetNodePropertiesEvent(name, properties)); - } - - @Override - public boolean nodeExists(String name) throws PMException { - return policyStore.graph().nodeExists(name); - } - - @Override - public Node getNode(String name) throws PMException { - if (!nodeExists(name)) { - throw new NodeDoesNotExistException(name); - } - - return policyStore.graph().getNode(name); - } - - @Override - public List search(NodeType type, Map properties) throws PMException { - return policyStore.graph().search(type, properties); - } - - @Override - public List getPolicyClasses() throws PMException { - return policyStore.graph().getPolicyClasses(); - } - - @Override - public void deleteNode(String name) throws PMException { - if (!nodeExists(name)) { - return; - } - - List children = getChildren(name); - if (!children.isEmpty()) { - throw new NodeHasChildrenException(name); - } - - checkIfNodeInProhibition(name); - checkIfNodeInObligation(name); - - NodeType type = getNode(name).getType(); - - // delete the rep node if node is a PC - policyStore.beginTx(); - - if (type == PC) { - String rep = pcRepObjectAttribute(name); - policyStore.graph().deleteNode(rep); - emitEvent(new DeleteNodeEvent(rep)); - } - - policyStore.graph().deleteNode(name); - emitEvent(new DeleteNodeEvent(name)); - - policyStore.commit(); - } - - private void checkIfNodeInProhibition(String name) throws PMException { - Map> prohibitions = policyStore.prohibitions().getAll(); - for (List subjPros : prohibitions.values()) { - for (Prohibition p : subjPros) { - if (nodeInProhibition(name, p)) { - throw new NodeReferencedInProhibitionException(name, p.getLabel()); - } - } - } - } - - private boolean nodeInProhibition(String name, Prohibition prohibition) { - if (prohibition.getSubject().getName().equals(name)) { - return true; - } - - for (ContainerCondition containerCondition : prohibition.getContainers()) { - if (containerCondition.name().equals(name)) { - return true; - } - } - - return false; - } - - private void checkIfNodeInObligation(String name) throws PMException { - List obligations = policyStore.obligations().getAll(); - for (Obligation obligation : obligations) { - // if the node is the author of the obligation or referenced in any rules throw an exception - if (obligation.getAuthor().getUser().equals(name) - || nodeInObligation(name, obligation)) { - throw new NodeReferencedInObligationException(name, obligation.getLabel()); - } - } - } - - private boolean nodeInObligation(String name, Obligation obligation) { - for (Rule rule : obligation.getRules()) { - if (nodeInEvent(name, rule.getEventPattern())) { - return true; - } - } - - return false; - } - - private boolean nodeInEvent(String name, EventPattern event) { - // check subject - EventSubject subject = event.getSubject(); - - boolean isAnyUserWithAttribute = (subject.getType() == EventSubject.Type.ANY_USER_WITH_ATTRIBUTE && subject.anyUserWithAttribute().equals(name)); - boolean isUserWithAttribute = (subject.getType() == EventSubject.Type.USERS && subject.users().contains(name)); - if (isAnyUserWithAttribute || isUserWithAttribute) { - return true; - } - - // check the target - Target target = event.getTarget(); - return (target.getType() == Target.Type.ANY_CONTAINED_IN && target.anyContainedIn().equals(name)) - || (target.getType() == Target.Type.ANY_OF_SET && target.anyOfSet().contains(name)) - || (target.getType() == Target.Type.POLICY_ELEMENT && target.policyElement().equals(name)); - } - - @Override - public void assign(String child, String parent) throws PMException { - Node childNode = getNode(child); - Node parentNode = getNode(parent); - - // ignore if assignment already exists - if (getParents(child).contains(parent)) { - return; - } - - // check node types make a valid assignment relation - Assignment.checkAssignment(childNode.getType(), parentNode.getType()); - - policyStore.graph().assign(child, parent); - emitEvent(new AssignEvent(child, parent)); - - // if the parent is a policy class, need to associate the super ua with the child - if (parentNode.getType() == PC) { - List events = SuperPolicy.assignedToPolicyClass(policyStore, child, parent); - for (PolicyEvent e : events) { - emitEvent(e); - } - } - } - - - @Override - public void deassign(String child, String parent) throws PMException { - if ((!nodeExists(child) || !nodeExists(parent)) - || (!getParents(child).contains(parent))) { - return; - } - - List parents = policyStore.graph().getParents(child); - if (parents.size() == 1) { - throw new DisconnectedNodeException(child, parent); - } - - policyStore.graph().deassign(child, parent); - - emitEvent(new DeassignEvent(child, parent)); - } - - @Override - public void assignAll(List children, String target) throws PMException { - policyStore.beginTx(); - - Node targetNode = getNode(target); - - for(String child : children) { - Node childNode = getNode(child); - Assignment.checkAssignment(childNode.getType(), targetNode.getType()); - } - - policyStore.graph().assignAll(children, target); - - policyStore.commit(); - - emitEvent(new AssignAllEvent(children, target)); - } - - @Override - public void deassignAll(List children, String target) throws PMException { - policyStore.beginTx(); - - Node targetNode = getNode(target); - - for(String child : children) { - Node childNode = getNode(child); - - List parents = policyStore.graph().getParents(child); - if (parents.contains(target) && parents.size() == 1) { - throw new DisconnectedNodeException(child, target); - } - } - - policyStore.graph().deassignAll(children, target); - - policyStore.commit(); - - emitEvent(new AssignAllEvent(children, target)); - } - - @Override - public void deassignAllFromAndDelete(String target) throws PMException { - deassignAll(getChildren(target), target); - deleteNode(target); - } - - @Override - public List getChildren(String node) throws PMException { - if (!nodeExists(node)) { - throw new NodeDoesNotExistException(node); - } - - return policyStore.graph().getChildren(node); - } - - @Override - public void associate(String ua, String target, AccessRightSet accessRights) throws PMException { - Node uaNode = getNode(ua); - Node targetNode = getNode(target); - - // check the access rights are valid - checkAccessRightsValid(policyStore.graph(), accessRights); - - // check the types of each node make a valid association - Association.checkAssociation(uaNode.getType(), targetNode.getType()); - - // associate and emit event - policyStore.graph().associate(ua, target, accessRights); - emitEvent(new AssociateEvent(ua, target, accessRights)); - } - - static void checkAccessRightsValid(Graph graph, AccessRightSet accessRightSet) throws PMException { - AccessRightSet resourceAccessRights = graph.getResourceAccessRights(); - - for (String ar : accessRightSet) { - if (!resourceAccessRights.contains(ar) - && !allAdminAccessRights().contains(ar) - && !wildcardAccessRights().contains(ar)) { - throw new UnknownAccessRightException(ar); - } - } - } - - @Override - public void dissociate(String ua, String target) throws PMException { - - boolean nodesNotExist = (!nodeExists(ua) || !nodeExists(target)); - if (nodesNotExist) { - return; - } - - boolean pathNotExist = (!getAssociationsWithSource(ua).contains(new Association(ua, target))); - if (pathNotExist) { - return; - } - - policyStore.graph().dissociate(ua, target); - - emitEvent(new DissociateEvent(ua, target)); - } - - @Override - public List getParents(String node) throws PMException { - if (!nodeExists(node)) { - throw new NodeDoesNotExistException(node); - } - - return policyStore.graph().getParents(node); - } - - @Override - public List getAssociationsWithSource(String ua) throws PMException { - if (!nodeExists(ua)) { - throw new NodeDoesNotExistException(ua); - } - - return policyStore.graph().getAssociationsWithSource(ua); - } - - @Override - public List getAssociationsWithTarget(String target) throws PMException { - if (!nodeExists(target)) { - throw new NodeDoesNotExistException(target); - } - - return policyStore.graph().getAssociationsWithTarget(target); - } - - @Override - public void addEventListener(PolicyEventListener listener, boolean sync) throws PMException { - - } - - @Override - public void removeEventListener(PolicyEventListener listener) { - - } - - @Override - public void emitEvent(PolicyEvent event) throws PMException { - listener.handlePolicyEvent(event); - } -} diff --git a/src/main/java/gov/nist/csd/pm/pap/PAPObligations.java b/src/main/java/gov/nist/csd/pm/pap/PAPObligations.java deleted file mode 100644 index 2689fd0c4..000000000 --- a/src/main/java/gov/nist/csd/pm/pap/PAPObligations.java +++ /dev/null @@ -1,153 +0,0 @@ -package gov.nist.csd.pm.pap; - -import gov.nist.csd.pm.policy.Obligations; -import gov.nist.csd.pm.policy.events.*; -import gov.nist.csd.pm.policy.exceptions.NodeDoesNotExistException; -import gov.nist.csd.pm.policy.exceptions.ObligationDoesNotExistException; -import gov.nist.csd.pm.policy.exceptions.ObligationExistsException; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.UserContext; -import gov.nist.csd.pm.policy.model.obligation.Obligation; -import gov.nist.csd.pm.policy.model.obligation.Rule; -import gov.nist.csd.pm.policy.model.obligation.event.EventPattern; -import gov.nist.csd.pm.policy.model.obligation.event.EventSubject; -import gov.nist.csd.pm.policy.model.obligation.event.Target; - -import java.util.List; - -class PAPObligations implements Obligations, PolicyEventEmitter { - protected PolicyStore policyStore; - - protected PolicyEventListener listener; - - public PAPObligations(PolicyStore policyStore, PolicyEventListener listener) throws PMException { - this.policyStore = policyStore; - this.listener = listener; - } - - @Override - public void create(UserContext author, String label, Rule... rules) throws PMException { - if (exists(label)) { - throw new ObligationExistsException(label); - } - - checkAuthorExists(author); - checkEventPatternAttributesExist(rules); - - policyStore.obligations().create(author, label, rules); - - emitEvent(new CreateObligationEvent(author, label, List.of(rules))); - } - - private void checkAuthorExists(UserContext author) throws PMException { - if (!policyStore.graph().nodeExists(author.getUser())) { - throw new NodeDoesNotExistException(author.getUser()); - } - } - - private void checkEventPatternAttributesExist(Rule ... rules) throws PMException { - for (Rule rule : rules) { - EventPattern event = rule.getEventPattern(); - - // check subject - EventSubject subject = event.getSubject(); - switch (subject.getType()) { - case USERS -> { - for (String user : subject.users()) { - if (!policyStore.graph().nodeExists(user)) { - throw new NodeDoesNotExistException(user); - } - } - } - case ANY_USER_WITH_ATTRIBUTE -> { - if (!policyStore.graph().nodeExists(subject.anyUserWithAttribute())) { - throw new NodeDoesNotExistException(subject.anyUserWithAttribute()); - } - } - } - - // check target - Target target = event.getTarget(); - switch (target.getType()) { - case ANY_OF_SET -> { - for (String pe : target.anyOfSet()) { - if (!policyStore.graph().nodeExists(pe)) { - throw new NodeDoesNotExistException(pe); - } - } - } - case POLICY_ELEMENT -> { - if (!policyStore.graph().nodeExists(target.policyElement())) { - throw new NodeDoesNotExistException(target.policyElement()); - } - } - case ANY_CONTAINED_IN -> { - if (!policyStore.graph().nodeExists(target.anyContainedIn())) { - throw new NodeDoesNotExistException(target.anyContainedIn()); - } - } - } - } - } - - @Override - public boolean exists(String label) throws PMException { - return policyStore.obligations().exists(label); - } - - @Override - public void update(UserContext author, String label, Rule... rules) throws PMException { - if (!exists(label)) { - throw new ObligationDoesNotExistException(label); - } - - checkAuthorExists(author); - checkEventPatternAttributesExist(rules); - - policyStore.obligations().update(author, label, rules); - - emitEvent(new UpdateObligationEvent(author, label, List.of(rules))); - } - - @Override - public void delete(String label) throws PMException { - if (!exists(label)) { - return; - } - - Obligation obligation = policyStore.obligations().get(label); - - policyStore.obligations().delete(label); - - emitEvent(new DeleteObligationEvent(obligation)); - } - - @Override - public List getAll() throws PMException { - return policyStore.obligations().getAll(); - } - - @Override - public Obligation get(String label) throws PMException { - if (!exists(label)) { - throw new ObligationDoesNotExistException(label); - } - - return policyStore.obligations().get(label); - } - - @Override - public void addEventListener(PolicyEventListener listener, boolean sync) throws PMException { - - } - - @Override - public void removeEventListener(PolicyEventListener listener) { - - } - - @Override - public void emitEvent(PolicyEvent event) throws PMException { - listener.handlePolicyEvent(event); - } -} diff --git a/src/main/java/gov/nist/csd/pm/pap/PAPProhibitions.java b/src/main/java/gov/nist/csd/pm/pap/PAPProhibitions.java deleted file mode 100644 index cac671c7f..000000000 --- a/src/main/java/gov/nist/csd/pm/pap/PAPProhibitions.java +++ /dev/null @@ -1,138 +0,0 @@ -package gov.nist.csd.pm.pap; - -import gov.nist.csd.pm.policy.Prohibitions; -import gov.nist.csd.pm.policy.events.*; -import gov.nist.csd.pm.policy.exceptions.*; -import gov.nist.csd.pm.policy.model.access.AccessRightSet; -import gov.nist.csd.pm.policy.model.prohibition.ContainerCondition; -import gov.nist.csd.pm.policy.model.prohibition.Prohibition; -import gov.nist.csd.pm.policy.model.prohibition.ProhibitionSubject; - -import java.util.List; -import java.util.Map; - -import static gov.nist.csd.pm.pap.PAPGraph.checkAccessRightsValid; - -class PAPProhibitions implements Prohibitions, PolicyEventEmitter { - protected PolicyStore policyStore; - - protected PolicyEventListener listener; - - public PAPProhibitions(PolicyStore policyStore, PolicyEventListener listener) throws PMException { - this.policyStore = policyStore; - this.listener = listener; - } - - @Override - public void create(String label, ProhibitionSubject subject, AccessRightSet accessRightSet, boolean intersection, ContainerCondition... containerConditions) throws PMException { - if (exists(label)) { - throw new ProhibitionExistsException(label); - } - - checkProhibitionParameters(subject, accessRightSet, containerConditions); - - policyStore.prohibitions().create(label, subject, accessRightSet, intersection, containerConditions); - - emitEvent(new CreateProhibitionEvent( - label, subject, accessRightSet, intersection, List.of(containerConditions) - )); - } - - @Override - public void update(String label, ProhibitionSubject subject, AccessRightSet accessRightSet, boolean intersection, ContainerCondition... containerConditions) throws PMException { - checkProhibitionParameters(subject, accessRightSet, containerConditions); - - policyStore.prohibitions().update(label, subject, accessRightSet, intersection, containerConditions); - - emitEvent(new UpdateProhibitionEvent( - label, subject, accessRightSet, intersection, List.of(containerConditions)) - ); - } - - private void checkProhibitionParameters(ProhibitionSubject subject, AccessRightSet accessRightSet, ContainerCondition ... containerConditions) throws PMException { - checkAccessRightsValid(policyStore.graph(), accessRightSet); - checkProhibitionSubjectExists(subject); - checkProhibitionContainersExist(containerConditions); - } - - private void checkProhibitionSubjectExists(ProhibitionSubject subject) throws PMException { - if (subject.getType() != ProhibitionSubject.Type.PROCESS) { - if (!policyStore.graph().nodeExists(subject.getName())) { - throw new ProhibitionSubjectDoesNotExistException(subject.getName()); - } - } - } - - private void checkProhibitionContainersExist(ContainerCondition ... containerConditions) throws PMException { - for (ContainerCondition container : containerConditions) { - if (!policyStore.graph().nodeExists(container.name())) { - throw new ProhibitionContainerDoesNotExistException(container.name()); - } - } - } - - @Override - public void delete(String label) throws PMException { - if (!exists(label)) { - return; - } - - Prohibition prohibition = policyStore.prohibitions().get(label); - - policyStore.prohibitions().delete(label); - - emitEvent(new DeleteProhibitionEvent(prohibition)); - } - - @Override - public Map> getAll() throws PMException { - return policyStore.prohibitions().getAll(); - } - - @Override - public boolean exists(String label) throws PMException { - return policyStore.prohibitions().exists(label); - } - - @Override - public List getWithSubject(String subject) throws PMException { - return policyStore.prohibitions().getWithSubject(subject); - } - - @Override - public Prohibition get(String label) throws PMException { - Prohibition prohibition = getProhibitionOrNull(label); - if (prohibition == null) { - throw new ProhibitionDoesNotExistException(label); - } - - return prohibition; - } - - private Prohibition getProhibitionOrNull(String label) throws PMException { - for (List prohibitions : policyStore.prohibitions().getAll().values()) { - for (Prohibition p : prohibitions) { - if (p.getLabel().equals(label)) { - return p; - } - } - } - - return null; - } - - @Override - public void addEventListener(PolicyEventListener listener, boolean sync) throws PMException { - - } - - @Override - public void removeEventListener(PolicyEventListener listener) { - - } - - @Override - public void emitEvent(PolicyEvent event) throws PMException { - listener.handlePolicyEvent(event); - } -} diff --git a/src/main/java/gov/nist/csd/pm/pap/PAPUserDefinedPML.java b/src/main/java/gov/nist/csd/pm/pap/PAPUserDefinedPML.java deleted file mode 100644 index b874af80e..000000000 --- a/src/main/java/gov/nist/csd/pm/pap/PAPUserDefinedPML.java +++ /dev/null @@ -1,93 +0,0 @@ -package gov.nist.csd.pm.pap; - -import gov.nist.csd.pm.policy.UserDefinedPML; -import gov.nist.csd.pm.policy.events.*; -import gov.nist.csd.pm.policy.exceptions.ConstantAlreadyDefinedException; -import gov.nist.csd.pm.policy.exceptions.FunctionAlreadyDefinedException; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; - -import java.util.Map; - -class PAPUserDefinedPML implements UserDefinedPML, PolicyEventEmitter { - protected PolicyStore policyStore; - - protected PolicyEventListener listener; - - public PAPUserDefinedPML(PolicyStore policyStore, PolicyEventListener listener) throws PMException { - this.policyStore = policyStore; - this.listener = listener; - } - - @Override - public void createFunction(FunctionDefinitionStatement functionDefinitionStatement) throws PMException { - if (policyStore.userDefinedPML().getFunctions().containsKey(functionDefinitionStatement.getFunctionName())) { - throw new FunctionAlreadyDefinedException(functionDefinitionStatement.getFunctionName()); - } - - policyStore.userDefinedPML().createFunction(functionDefinitionStatement); - - emitEvent(new AddFunctionEvent(functionDefinitionStatement)); - } - - @Override - public void deleteFunction(String functionName) throws PMException { - policyStore.userDefinedPML().deleteFunction(functionName); - - emitEvent(new RemoveFunctionEvent(functionName)); - } - - @Override - public Map getFunctions() throws PMException { - return policyStore.userDefinedPML().getFunctions(); - } - - @Override - public FunctionDefinitionStatement getFunction(String name) throws PMException { - return policyStore.userDefinedPML().getFunction(name); - } - - @Override - public void createConstant(String constantName, Value constantValue) throws PMException { - if (policyStore.userDefinedPML().getConstants().containsKey(constantName)) { - throw new ConstantAlreadyDefinedException(constantName); - } - - policyStore.userDefinedPML().createConstant(constantName, constantValue); - - emitEvent(new AddConstantEvent(constantName, constantValue)); - } - - @Override - public void deleteConstant(String constName) throws PMException { - policyStore.userDefinedPML().deleteConstant(constName); - - emitEvent(new RemoveConstantEvent(constName)); - } - - @Override - public Map getConstants() throws PMException { - return policyStore.userDefinedPML().getConstants(); - } - - @Override - public Value getConstant(String name) throws PMException { - return policyStore.userDefinedPML().getConstant(name); - } - - @Override - public void addEventListener(PolicyEventListener listener, boolean sync) throws PMException { - - } - - @Override - public void removeEventListener(PolicyEventListener listener) { - - } - - @Override - public void emitEvent(PolicyEvent event) throws PMException { - listener.handlePolicyEvent(event); - } -} diff --git a/src/main/java/gov/nist/csd/pm/pap/PolicyPoint.java b/src/main/java/gov/nist/csd/pm/pap/PolicyPoint.java new file mode 100644 index 000000000..75882a091 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/PolicyPoint.java @@ -0,0 +1,58 @@ +package gov.nist.csd.pm.pap; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.tx.Transactional; +import gov.nist.csd.pm.pap.admin.AdminPolicy; +import gov.nist.csd.pm.pap.modification.PolicyModification; +import gov.nist.csd.pm.pap.query.PolicyQuery; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.serialization.PolicyDeserializer; +import gov.nist.csd.pm.pap.serialization.PolicySerializer; + +/** + * An interface for the administrative functions of NGAC policy points (i.e. PAP , PDP). + */ +public interface PolicyPoint extends Transactional { + + /** + * Return the modification component of the Policy Point. + * @return The modification component of the Policy Point. + */ + PolicyModification modify(); + + /** + * Return the query component of the Policy Point. + * @return The query component of the Policy Point. + */ + PolicyQuery query(); + + /** + * Reset the policy while keeping the PM admin policy nodes. + * @throws PMException If there is an error resetting. + */ + void reset() throws PMException; + + /** + * Serialize the current policy state with the given PolicySerializer. + * + * @param serializer The PolicySerializer used to generate the output String. + * @return The string representation of the policy. + * @throws PMException If there is an error during the serialization process. + */ + String serialize(PolicySerializer serializer) throws PMException; + + /** + * Deserialize the given input string into the current policy state. The user defined in the UserContext needs to exist + * in the graph created if any obligations are created. If the user does not exist before an obligation is created + * an exception will be thrown. This method also resets the policy before deserialization. However, the {@link AdminPolicy} + * nodes are assumed to be created and can be referenced in the input string without explicit creation. If any of the + * admin policy nodes are created in the input string an exception will be thrown. + * + * @param author The UserContext describing the author of the deserialized policy elements. + * @param input The string representation of the policy to deserialize. + * @param policyDeserializer The PolicyDeserializer to apply the input string to the policy. + * @throws PMException If there is an error deserializing the given inputs string. + */ + void deserialize(UserContext author, String input, PolicyDeserializer policyDeserializer) throws PMException; + +} diff --git a/src/main/java/gov/nist/csd/pm/pap/PolicyStore.java b/src/main/java/gov/nist/csd/pm/pap/PolicyStore.java deleted file mode 100644 index d426b4865..000000000 --- a/src/main/java/gov/nist/csd/pm/pap/PolicyStore.java +++ /dev/null @@ -1,11 +0,0 @@ -package gov.nist.csd.pm.pap; - -import gov.nist.csd.pm.policy.Policy; -import gov.nist.csd.pm.policy.events.PolicySync; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.tx.Transactional; - -public abstract class PolicyStore implements PolicySync, Transactional, Policy { - - protected abstract void reset() throws PMException; -} diff --git a/src/main/java/gov/nist/csd/pm/pap/SuperPolicy.java b/src/main/java/gov/nist/csd/pm/pap/SuperPolicy.java deleted file mode 100644 index f1ea97c69..000000000 --- a/src/main/java/gov/nist/csd/pm/pap/SuperPolicy.java +++ /dev/null @@ -1,155 +0,0 @@ -package gov.nist.csd.pm.pap; - -import gov.nist.csd.pm.policy.events.*; -import gov.nist.csd.pm.policy.exceptions.PMException; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import static gov.nist.csd.pm.policy.model.access.AdminAccessRights.allAccessRights; -import static gov.nist.csd.pm.policy.model.graph.nodes.Properties.NO_PROPERTIES; -import static gov.nist.csd.pm.policy.tx.TxRunner.runTx; - -public class SuperPolicy { - - private SuperPolicy() { } - - public static final String SUPER_PREFIX = "super"; - - public static final String SUPER_USER = "super"; - public static final String SUPER_PC = "super_policy"; - public static final String SUPER_UA = "super_ua"; - public static final String SUPER_UA1 = "super_ua1"; - public static final String SUPER_PC_REP = pcRepObjectAttribute(SUPER_PC); - public static final String SUPER_OA = "super_oa"; - - public static String pcRepObjectAttribute(String policyClass) { - return policyClass + "_pc_rep"; - } - - public static boolean isSuperPolicyNode(String node) { - return node.equals(SUPER_USER) || - node.equals(SUPER_PC) || - node.equals(SUPER_UA) || - node.equals(SUPER_UA1) || - node.equals(SUPER_OA) || - node.equals(SUPER_PC_REP); - } - - protected static void verifySuperPolicy(PolicyStore store) throws PMException { - // start a transaction on the policy store the graph uses - // then use Graph methods to take advantage of the policy emitter - // internally, the Graph methods will be using a policy store in Tx mode - runTx(store, () -> { - if (!store.graph().nodeExists(SUPER_PC)) { - store.graph().createPolicyClass(SUPER_PC); - } - - if (!store.graph().nodeExists(SUPER_UA)) { - store.graph().createUserAttribute(SUPER_UA, SUPER_PC); - } else if (!store.graph().getParents(SUPER_UA).contains(SUPER_PC)) { - store.graph().assign(SUPER_UA, SUPER_PC); - } - - if (!store.graph().nodeExists(SUPER_UA1)) { - store.graph().createUserAttribute(SUPER_UA1, SUPER_PC); - } else if (!store.graph().getParents(SUPER_UA1).contains(SUPER_PC)) { - store.graph().assign(SUPER_UA1, SUPER_PC); - } - - if (!store.graph().nodeExists(SUPER_OA)) { - store.graph().createObjectAttribute(SUPER_OA, SUPER_PC); - } else if (!store.graph().getParents(SUPER_OA).contains(SUPER_PC)) { - store.graph().assign(SUPER_OA, SUPER_PC); - } - - if (!store.graph().nodeExists(SUPER_USER)) { - store.graph().createUser(SUPER_USER, SUPER_UA, SUPER_UA1); - } - - List parents = store.graph().getParents(SUPER_USER); - if (!parents.contains(SUPER_UA)) { - store.graph().assign(SUPER_USER, SUPER_UA); - } else if (!parents.contains(SUPER_UA1)) { - store.graph().assign(SUPER_USER, SUPER_UA1); - } - - if (!store.graph().nodeExists(SUPER_PC_REP)) { - store.graph().createObjectAttribute(SUPER_PC_REP, SUPER_OA); - } else if (!store.graph().getParents(SUPER_PC_REP).contains(SUPER_OA)) { - store.graph().assign(SUPER_PC_REP, SUPER_OA); - } - - // associate the super_ua1 and super_ua to provide * rights to the super user on itself - // if the association already exists this will do nothing - store.graph().associate(SUPER_UA1, SUPER_UA, allAccessRights()); - - // associate super ua and super oa - store.graph().associate(SUPER_UA, SUPER_OA, allAccessRights()); - - // associate the super ua with each policy not super_pc - for (String pc : store.graph().getPolicyClasses()) { - if (pc.equals(SUPER_PC)) { - continue; - } - - String repOAName = pcRepObjectAttribute(pc); - - if (!store.graph().nodeExists(repOAName)) { - store.graph().createObjectAttribute(repOAName, SUPER_OA); - } - - List children = store.graph().getChildren(pc); - for (String child : children) { - store.graph().associate(SUPER_UA, child, allAccessRights()); - } - } - }); - } - - protected static List assignedToPolicyClass(PolicyStore store, String child, String pc) throws PMException { - List events = new ArrayList<>(); - - runTx(store, () -> { - if (child.startsWith(SUPER_PREFIX)) { - return; - } - - if (!store.graph().nodeExists(SUPER_UA)) { - store.graph().createUserAttribute(SUPER_UA, SUPER_PC); - events.add(new AssignEvent(SUPER_UA, SUPER_PC)); - } - - store.graph().associate(SUPER_UA, child, allAccessRights()); - events.add(new AssociateEvent(SUPER_UA, child, allAccessRights())); - }); - - return events; - } - - protected static List createPolicyClass(PolicyStore store, String name, Map properties) throws PMException { - List events = new ArrayList<>(); - - runTx(store, () -> { - // create pc node - store.graph().createPolicyClass(name, properties); - events.add(new CreatePolicyClassEvent(name, properties)); - - // create pc rep node in super policy - if (!store.graph().nodeExists(SUPER_OA)) { - store.graph().createObjectAttribute(SUPER_OA, SUPER_PC); - } - - String pcRep = pcRepObjectAttribute(name); - if (store.graph().nodeExists(pcRep)) { - return; - } - - store.graph().createObjectAttribute(pcRep, NO_PROPERTIES, SUPER_OA); - events.add(new CreateObjectAttributeEvent(pcRep, NO_PROPERTIES, SUPER_OA)); - }); - - return events; - } -} \ No newline at end of file diff --git a/src/main/java/gov/nist/csd/pm/pap/admin/AdminPolicy.java b/src/main/java/gov/nist/csd/pm/pap/admin/AdminPolicy.java new file mode 100644 index 000000000..1d66b7176 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/admin/AdminPolicy.java @@ -0,0 +1,51 @@ +package gov.nist.csd.pm.pap.admin; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.exception.*; + +import java.util.*; + +import static gov.nist.csd.pm.pap.admin.AdminPolicyNode.*; + +public class AdminPolicy { + + public static final Set ALL_NODE_NAMES = new HashSet<>(List.of( + ADMIN_POLICY.nodeName(), + ADMIN_POLICY_OBJECT.nodeName() + )); + + public static final Set AL_NODE_CONSTANT_NAMES = new HashSet<>(List.of( + ADMIN_POLICY.constantName(), + ADMIN_POLICY_OBJECT.constantName() + )); + + public static boolean isAdminPolicyNodeConstantName(String name) { + return AL_NODE_CONSTANT_NAMES.contains(name); + } + + public static boolean isAdminPolicyNodeName(String name) { + return ALL_NODE_NAMES.contains(name); + } + + /** + * Create {@link AdminPolicyNode#ADMIN_POLICY} + * Create the {@link AdminPolicyNode#ADMIN_POLICY} policy class.

+ * Create the {@link AdminPolicyNode#ADMIN_POLICY_OBJECT} in the ADMIN_POLICY.

+ * + * @param verifier The verifier used to verify the admin policy nodes exist. + * @throws PMException If there is an error verifying any element of the admin policy. + */ + public static void verify(Verifier verifier) throws PMException { + try { + verifier.verifyAdminPolicy(); + } catch (PMException e) { + throw new AdminPolicyVerificationException(e); + } + } + + public interface Verifier { + void verifyAdminPolicy() throws PMException; + } + + +} diff --git a/src/main/java/gov/nist/csd/pm/pap/admin/AdminPolicyNode.java b/src/main/java/gov/nist/csd/pm/pap/admin/AdminPolicyNode.java new file mode 100644 index 000000000..bde123cd1 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/admin/AdminPolicyNode.java @@ -0,0 +1,36 @@ +package gov.nist.csd.pm.pap.admin; + +public enum AdminPolicyNode { + + // Admin policy class + ADMIN_POLICY("PM_ADMIN"), + // Admin policy object attribute + ADMIN_POLICY_OBJECT("PM_ADMIN:object"); + + private final String value; + + AdminPolicyNode(String value) { + this.value = value; + } + + public static AdminPolicyNode fromNodeName(String ascendant) { + switch (ascendant) { + case "PM_ADMIN" -> { + return ADMIN_POLICY; + } + case "PM_ADMIN:object" -> { + return ADMIN_POLICY_OBJECT; + } + } + + throw new IllegalArgumentException("unknown admin policy node " + ascendant); + } + + public String constantName() { + return name(); + } + + public String nodeName() { + return value; + } +} diff --git a/src/main/java/gov/nist/csd/pm/policy/exceptions/AdminAccessRightExistsException.java b/src/main/java/gov/nist/csd/pm/pap/exception/AdminAccessRightExistsException.java similarity index 82% rename from src/main/java/gov/nist/csd/pm/policy/exceptions/AdminAccessRightExistsException.java rename to src/main/java/gov/nist/csd/pm/pap/exception/AdminAccessRightExistsException.java index 730a6465f..86ed2d65b 100644 --- a/src/main/java/gov/nist/csd/pm/policy/exceptions/AdminAccessRightExistsException.java +++ b/src/main/java/gov/nist/csd/pm/pap/exception/AdminAccessRightExistsException.java @@ -1,6 +1,6 @@ -package gov.nist.csd.pm.policy.exceptions; +package gov.nist.csd.pm.pap.exception; -public class AdminAccessRightExistsException extends PMException{ +public class AdminAccessRightExistsException extends PMException { public AdminAccessRightExistsException(String ar) { super(String.format("%s is already defined as an admin access right", ar)); } diff --git a/src/main/java/gov/nist/csd/pm/pap/exception/AdminPolicyVerificationException.java b/src/main/java/gov/nist/csd/pm/pap/exception/AdminPolicyVerificationException.java new file mode 100644 index 000000000..cbd0fe586 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/exception/AdminPolicyVerificationException.java @@ -0,0 +1,7 @@ +package gov.nist.csd.pm.pap.exception; + +public class AdminPolicyVerificationException extends PMException { + public AdminPolicyVerificationException(PMException e) { + super("error verifying admin policy node", e); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/exception/AssignmentCausesLoopException.java b/src/main/java/gov/nist/csd/pm/pap/exception/AssignmentCausesLoopException.java new file mode 100644 index 000000000..673fd0ffc --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/exception/AssignmentCausesLoopException.java @@ -0,0 +1,9 @@ +package gov.nist.csd.pm.pap.exception; + +public class AssignmentCausesLoopException extends PMException { + + public AssignmentCausesLoopException(String ascendant, String descendant) { + super("a relation between " + ascendant + " and " + descendant + " would cause a loop in the graph"); + } + +} diff --git a/src/main/java/gov/nist/csd/pm/pap/exception/BootstrapExistingPolicyException.java b/src/main/java/gov/nist/csd/pm/pap/exception/BootstrapExistingPolicyException.java new file mode 100644 index 000000000..7e789b3dd --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/exception/BootstrapExistingPolicyException.java @@ -0,0 +1,7 @@ +package gov.nist.csd.pm.pap.exception; + +public class BootstrapExistingPolicyException extends PMException { + public BootstrapExistingPolicyException() { + super("cannot bootstrap when a policy already exists"); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/exception/CannotDeleteAdminPolicyConfigException.java b/src/main/java/gov/nist/csd/pm/pap/exception/CannotDeleteAdminPolicyConfigException.java new file mode 100644 index 000000000..84caa5b34 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/exception/CannotDeleteAdminPolicyConfigException.java @@ -0,0 +1,7 @@ +package gov.nist.csd.pm.pap.exception; + +public class CannotDeleteAdminPolicyConfigException extends PMException { + public CannotDeleteAdminPolicyConfigException() { + super("cannot delete ADMIN_POLICY, ADMIN_POLICY_OBJECT, or the assignment between the two"); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/exception/DisconnectedNodeException.java b/src/main/java/gov/nist/csd/pm/pap/exception/DisconnectedNodeException.java new file mode 100644 index 000000000..18c6208a5 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/exception/DisconnectedNodeException.java @@ -0,0 +1,12 @@ +package gov.nist.csd.pm.pap.exception; + +import gov.nist.csd.pm.pap.graph.node.NodeType; + +public class DisconnectedNodeException extends PMException { + public DisconnectedNodeException(String ascendant, String descendant) { + super("deassigning " + ascendant + " from " + descendant + " would make " + ascendant + " a disconnected node"); + } + public DisconnectedNodeException(String node, NodeType type) { + super(node + " is of type " + type + " which is required to be assigned to at least one node initially"); + } +} diff --git a/src/main/java/gov/nist/csd/pm/policy/exceptions/InvalidProhibitionSubjectException.java b/src/main/java/gov/nist/csd/pm/pap/exception/InvalidProhibitionSubjectException.java similarity index 80% rename from src/main/java/gov/nist/csd/pm/policy/exceptions/InvalidProhibitionSubjectException.java rename to src/main/java/gov/nist/csd/pm/pap/exception/InvalidProhibitionSubjectException.java index baf183f8c..bf9b18050 100644 --- a/src/main/java/gov/nist/csd/pm/policy/exceptions/InvalidProhibitionSubjectException.java +++ b/src/main/java/gov/nist/csd/pm/pap/exception/InvalidProhibitionSubjectException.java @@ -1,6 +1,6 @@ -package gov.nist.csd.pm.policy.exceptions; +package gov.nist.csd.pm.pap.exception; -public class InvalidProhibitionSubjectException extends PMException{ +public class InvalidProhibitionSubjectException extends PMException { public InvalidProhibitionSubjectException(String type) { super("invalid prohibition subject type \"" + type + "\""); } diff --git a/src/main/java/gov/nist/csd/pm/policy/exceptions/NodeDoesNotExistException.java b/src/main/java/gov/nist/csd/pm/pap/exception/NodeDoesNotExistException.java similarity index 56% rename from src/main/java/gov/nist/csd/pm/policy/exceptions/NodeDoesNotExistException.java rename to src/main/java/gov/nist/csd/pm/pap/exception/NodeDoesNotExistException.java index 273686480..863504ecb 100644 --- a/src/main/java/gov/nist/csd/pm/policy/exceptions/NodeDoesNotExistException.java +++ b/src/main/java/gov/nist/csd/pm/pap/exception/NodeDoesNotExistException.java @@ -1,6 +1,6 @@ -package gov.nist.csd.pm.policy.exceptions; +package gov.nist.csd.pm.pap.exception; -public class NodeDoesNotExistException extends PMException{ +public class NodeDoesNotExistException extends PMException { public NodeDoesNotExistException(String name) { super("a node with the name \"" + name + "\" does not exist"); } diff --git a/src/main/java/gov/nist/csd/pm/pap/exception/NodeHasAscendantsException.java b/src/main/java/gov/nist/csd/pm/pap/exception/NodeHasAscendantsException.java new file mode 100644 index 000000000..9b601c42c --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/exception/NodeHasAscendantsException.java @@ -0,0 +1,7 @@ +package gov.nist.csd.pm.pap.exception; + +public class NodeHasAscendantsException extends PMException { + public NodeHasAscendantsException(String node) { + super("cannot delete " + node + ", it has nodes assigned to it"); + } +} diff --git a/src/main/java/gov/nist/csd/pm/policy/exceptions/NodeNameExistsException.java b/src/main/java/gov/nist/csd/pm/pap/exception/NodeNameExistsException.java similarity index 81% rename from src/main/java/gov/nist/csd/pm/policy/exceptions/NodeNameExistsException.java rename to src/main/java/gov/nist/csd/pm/pap/exception/NodeNameExistsException.java index 087227619..10fa208b6 100644 --- a/src/main/java/gov/nist/csd/pm/policy/exceptions/NodeNameExistsException.java +++ b/src/main/java/gov/nist/csd/pm/pap/exception/NodeNameExistsException.java @@ -1,4 +1,4 @@ -package gov.nist.csd.pm.policy.exceptions; +package gov.nist.csd.pm.pap.exception; public class NodeNameExistsException extends PMException { public NodeNameExistsException(String nodeName) { diff --git a/src/main/java/gov/nist/csd/pm/policy/exceptions/NodeReferencedInObligationException.java b/src/main/java/gov/nist/csd/pm/pap/exception/NodeReferencedInObligationException.java similarity index 59% rename from src/main/java/gov/nist/csd/pm/policy/exceptions/NodeReferencedInObligationException.java rename to src/main/java/gov/nist/csd/pm/pap/exception/NodeReferencedInObligationException.java index d16ce3ae0..92b6d34bb 100644 --- a/src/main/java/gov/nist/csd/pm/policy/exceptions/NodeReferencedInObligationException.java +++ b/src/main/java/gov/nist/csd/pm/pap/exception/NodeReferencedInObligationException.java @@ -1,8 +1,8 @@ -package gov.nist.csd.pm.policy.exceptions; +package gov.nist.csd.pm.pap.exception; -public class NodeReferencedInObligationException extends PMException{ +public class NodeReferencedInObligationException extends PMException { - public NodeReferencedInObligationException(String nodeToDelete, String obligationLabel) { - super("cannot delete \"" + nodeToDelete + "\" because it is referenced in obligation \"" + obligationLabel + "\""); + public NodeReferencedInObligationException(String nodeToDelete, String obligationName) { + super("cannot delete \"" + nodeToDelete + "\" because it is referenced in obligation \"" + obligationName + "\""); } } diff --git a/src/main/java/gov/nist/csd/pm/policy/exceptions/NodeReferencedInProhibitionException.java b/src/main/java/gov/nist/csd/pm/pap/exception/NodeReferencedInProhibitionException.java similarity index 58% rename from src/main/java/gov/nist/csd/pm/policy/exceptions/NodeReferencedInProhibitionException.java rename to src/main/java/gov/nist/csd/pm/pap/exception/NodeReferencedInProhibitionException.java index 152a02827..621364e72 100644 --- a/src/main/java/gov/nist/csd/pm/policy/exceptions/NodeReferencedInProhibitionException.java +++ b/src/main/java/gov/nist/csd/pm/pap/exception/NodeReferencedInProhibitionException.java @@ -1,7 +1,7 @@ -package gov.nist.csd.pm.policy.exceptions; +package gov.nist.csd.pm.pap.exception; -public class NodeReferencedInProhibitionException extends PMException{ - public NodeReferencedInProhibitionException(String nodeToDelete, String prohibitionLabel) { - super("cannot delete \"" + nodeToDelete + "\" because it is referenced in prohibition \"" + prohibitionLabel + "\""); +public class NodeReferencedInProhibitionException extends PMException { + public NodeReferencedInProhibitionException(String nodeToDelete, String prohibitionName) { + super("cannot delete \"" + nodeToDelete + "\" because it is referenced in prohibition \"" + prohibitionName + "\""); } } diff --git a/src/main/java/gov/nist/csd/pm/policy/exceptions/NodesAlreadyAssignedException.java b/src/main/java/gov/nist/csd/pm/pap/exception/NodesAlreadyAssignedException.java similarity index 86% rename from src/main/java/gov/nist/csd/pm/policy/exceptions/NodesAlreadyAssignedException.java rename to src/main/java/gov/nist/csd/pm/pap/exception/NodesAlreadyAssignedException.java index 9959bfff9..350e8d9c3 100644 --- a/src/main/java/gov/nist/csd/pm/policy/exceptions/NodesAlreadyAssignedException.java +++ b/src/main/java/gov/nist/csd/pm/pap/exception/NodesAlreadyAssignedException.java @@ -1,4 +1,4 @@ -package gov.nist.csd.pm.policy.exceptions; +package gov.nist.csd.pm.pap.exception; public class NodesAlreadyAssignedException extends PMException { public NodesAlreadyAssignedException(String ua, String target) { diff --git a/src/main/java/gov/nist/csd/pm/pap/exception/ObligationDoesNotExistException.java b/src/main/java/gov/nist/csd/pm/pap/exception/ObligationDoesNotExistException.java new file mode 100644 index 000000000..d8332c29b --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/exception/ObligationDoesNotExistException.java @@ -0,0 +1,7 @@ +package gov.nist.csd.pm.pap.exception; + +public class ObligationDoesNotExistException extends PMException { + public ObligationDoesNotExistException(String name) { + super("obligation with name " + name + " does not exist"); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/exception/ObligationNameExistsException.java b/src/main/java/gov/nist/csd/pm/pap/exception/ObligationNameExistsException.java new file mode 100644 index 000000000..c58ed6bfb --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/exception/ObligationNameExistsException.java @@ -0,0 +1,7 @@ +package gov.nist.csd.pm.pap.exception; + +public class ObligationNameExistsException extends PMException { + public ObligationNameExistsException(String name) { + super("obligation with name " + name + " already exists"); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/exception/ObligationRuleNameExistsException.java b/src/main/java/gov/nist/csd/pm/pap/exception/ObligationRuleNameExistsException.java new file mode 100644 index 000000000..3cea958d4 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/exception/ObligationRuleNameExistsException.java @@ -0,0 +1,7 @@ +package gov.nist.csd.pm.pap.exception; + +public class ObligationRuleNameExistsException extends PMException { + public ObligationRuleNameExistsException(String obligationName, String ruleName) { + super("A rule with the name " + ruleName + " already exists in the obligation " + obligationName); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/exception/OperandsDoNotMatchException.java b/src/main/java/gov/nist/csd/pm/pap/exception/OperandsDoNotMatchException.java new file mode 100644 index 000000000..9d1e5f744 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/exception/OperandsDoNotMatchException.java @@ -0,0 +1,9 @@ +package gov.nist.csd.pm.pap.exception; + +import java.util.Collection; + +public class OperandsDoNotMatchException extends PMException { + public OperandsDoNotMatchException(String opName, Collection expected, Collection actual) { + super("operation " + opName + " expected operands " + expected + ", got " + actual); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/exception/OperationDoesNotExistException.java b/src/main/java/gov/nist/csd/pm/pap/exception/OperationDoesNotExistException.java new file mode 100644 index 000000000..01e470b3b --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/exception/OperationDoesNotExistException.java @@ -0,0 +1,7 @@ +package gov.nist.csd.pm.pap.exception; + +public class OperationDoesNotExistException extends PMException { + public OperationDoesNotExistException(String op) { + super("operation " + op + " does not exist"); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/exception/OperationExistsException.java b/src/main/java/gov/nist/csd/pm/pap/exception/OperationExistsException.java new file mode 100644 index 000000000..b5d7e49bd --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/exception/OperationExistsException.java @@ -0,0 +1,7 @@ +package gov.nist.csd.pm.pap.exception; + +public class OperationExistsException extends PMException { + public OperationExistsException(String op) { + super("operation " + op + " already exists"); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/exception/PMBackendException.java b/src/main/java/gov/nist/csd/pm/pap/exception/PMBackendException.java new file mode 100644 index 000000000..d7b2e9472 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/exception/PMBackendException.java @@ -0,0 +1,18 @@ +package gov.nist.csd.pm.pap.exception; + +/** + * Wrapper for backend related exceptions independent of backend implementation. + */ +public class PMBackendException extends PMException { + public PMBackendException(Exception e) { + super(e); + } + + public PMBackendException(String message, Exception e) { + super(message, e); + } + + public PMBackendException(String s) { + super(s); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/exception/PMException.java b/src/main/java/gov/nist/csd/pm/pap/exception/PMException.java new file mode 100644 index 000000000..33d2018c9 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/exception/PMException.java @@ -0,0 +1,21 @@ +package gov.nist.csd.pm.pap.exception; + +/** + * Root exception to cover any possible error in the Policy Machine interfaces. This is to support multiple implementations + * of the same interfaces that may have different and unplanned exceptions. These exceptions can be wrapped in a PMException. + */ +public class PMException extends Exception { + + public PMException(String msg) { + super(msg); + } + + public PMException(Exception e) { + super(e); + } + + public PMException(String message, Exception e) { + super(message, e); + } + +} diff --git a/src/main/java/gov/nist/csd/pm/pap/exception/PMLConstantAlreadyDefinedException.java b/src/main/java/gov/nist/csd/pm/pap/exception/PMLConstantAlreadyDefinedException.java new file mode 100644 index 000000000..114083155 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/exception/PMLConstantAlreadyDefinedException.java @@ -0,0 +1,7 @@ +package gov.nist.csd.pm.pap.exception; + +public class PMLConstantAlreadyDefinedException extends PMException { + public PMLConstantAlreadyDefinedException(String name) { + super("constant \"" + name + "\" is already defined"); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/exception/PMLConstantNotDefinedException.java b/src/main/java/gov/nist/csd/pm/pap/exception/PMLConstantNotDefinedException.java new file mode 100644 index 000000000..1d982558b --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/exception/PMLConstantNotDefinedException.java @@ -0,0 +1,7 @@ +package gov.nist.csd.pm.pap.exception; + +public class PMLConstantNotDefinedException extends PMException { + public PMLConstantNotDefinedException(String c) { + super("PML constant " + c + " not defined"); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/exception/PMLFunctionAlreadyDefinedException.java b/src/main/java/gov/nist/csd/pm/pap/exception/PMLFunctionAlreadyDefinedException.java new file mode 100644 index 000000000..7517099ca --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/exception/PMLFunctionAlreadyDefinedException.java @@ -0,0 +1,7 @@ +package gov.nist.csd.pm.pap.exception; + +public class PMLFunctionAlreadyDefinedException extends PMException { + public PMLFunctionAlreadyDefinedException(String functionName) { + super("a function with the name \"" + functionName + "\" is already defined"); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/exception/PMLFunctionNotDefinedException.java b/src/main/java/gov/nist/csd/pm/pap/exception/PMLFunctionNotDefinedException.java new file mode 100644 index 000000000..7dcf5265d --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/exception/PMLFunctionNotDefinedException.java @@ -0,0 +1,9 @@ +package gov.nist.csd.pm.pap.exception; + +public class PMLFunctionNotDefinedException extends PMException { + + + public PMLFunctionNotDefinedException(String functionName) { + super("PML function " + functionName + " not defined"); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/exception/PMRuntimeException.java b/src/main/java/gov/nist/csd/pm/pap/exception/PMRuntimeException.java new file mode 100644 index 000000000..2e0763499 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/exception/PMRuntimeException.java @@ -0,0 +1,17 @@ +package gov.nist.csd.pm.pap.exception; + +public class PMRuntimeException extends RuntimeException { + + public PMRuntimeException(String message) { + super(message); + } + + public PMRuntimeException(Exception e) { + super(e); + } + + public PMRuntimeException(String message, Exception e) { + super(message, e); + } + +} diff --git a/src/main/java/gov/nist/csd/pm/pap/exception/PolicyEntityDoesNotExistException.java b/src/main/java/gov/nist/csd/pm/pap/exception/PolicyEntityDoesNotExistException.java new file mode 100644 index 000000000..7a67563cd --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/exception/PolicyEntityDoesNotExistException.java @@ -0,0 +1,7 @@ +package gov.nist.csd.pm.pap.exception; + +public class PolicyEntityDoesNotExistException extends PMException { + public PolicyEntityDoesNotExistException(String msg) { + super(msg); + } +} diff --git a/src/main/java/gov/nist/csd/pm/policy/exceptions/ProhibitionContainerDoesNotExistException.java b/src/main/java/gov/nist/csd/pm/pap/exception/ProhibitionContainerDoesNotExistException.java similarity index 79% rename from src/main/java/gov/nist/csd/pm/policy/exceptions/ProhibitionContainerDoesNotExistException.java rename to src/main/java/gov/nist/csd/pm/pap/exception/ProhibitionContainerDoesNotExistException.java index 5e79364b7..25d39cb44 100644 --- a/src/main/java/gov/nist/csd/pm/policy/exceptions/ProhibitionContainerDoesNotExistException.java +++ b/src/main/java/gov/nist/csd/pm/pap/exception/ProhibitionContainerDoesNotExistException.java @@ -1,6 +1,6 @@ -package gov.nist.csd.pm.policy.exceptions; +package gov.nist.csd.pm.pap.exception; -public class ProhibitionContainerDoesNotExistException extends PMException{ +public class ProhibitionContainerDoesNotExistException extends PMException { public ProhibitionContainerDoesNotExistException(String name) { super("prohibition container \"" + name + "\" does not exist"); } diff --git a/src/main/java/gov/nist/csd/pm/pap/exception/ProhibitionDoesNotExistException.java b/src/main/java/gov/nist/csd/pm/pap/exception/ProhibitionDoesNotExistException.java new file mode 100644 index 000000000..c41b5449b --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/exception/ProhibitionDoesNotExistException.java @@ -0,0 +1,7 @@ +package gov.nist.csd.pm.pap.exception; + +public class ProhibitionDoesNotExistException extends PMException { + public ProhibitionDoesNotExistException(String name) { + super("prohibition with the name " + name + " does not exist"); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/exception/ProhibitionExistsException.java b/src/main/java/gov/nist/csd/pm/pap/exception/ProhibitionExistsException.java new file mode 100644 index 000000000..013be44d6 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/exception/ProhibitionExistsException.java @@ -0,0 +1,7 @@ +package gov.nist.csd.pm.pap.exception; + +public class ProhibitionExistsException extends PMException { + public ProhibitionExistsException(String name) { + super("a prohibition with the name " + name + " already exists"); + } +} diff --git a/src/main/java/gov/nist/csd/pm/policy/exceptions/ProhibitionSubjectDoesNotExistException.java b/src/main/java/gov/nist/csd/pm/pap/exception/ProhibitionSubjectDoesNotExistException.java similarity index 79% rename from src/main/java/gov/nist/csd/pm/policy/exceptions/ProhibitionSubjectDoesNotExistException.java rename to src/main/java/gov/nist/csd/pm/pap/exception/ProhibitionSubjectDoesNotExistException.java index 60c7931a9..c2ad89ad1 100644 --- a/src/main/java/gov/nist/csd/pm/policy/exceptions/ProhibitionSubjectDoesNotExistException.java +++ b/src/main/java/gov/nist/csd/pm/pap/exception/ProhibitionSubjectDoesNotExistException.java @@ -1,6 +1,6 @@ -package gov.nist.csd.pm.policy.exceptions; +package gov.nist.csd.pm.pap.exception; -public class ProhibitionSubjectDoesNotExistException extends PMException{ +public class ProhibitionSubjectDoesNotExistException extends PMException { public ProhibitionSubjectDoesNotExistException(String name) { super("prohibition subject \"" + name + "\" does not exist"); } diff --git a/src/main/java/gov/nist/csd/pm/policy/exceptions/RepObjectNotSetException.java b/src/main/java/gov/nist/csd/pm/pap/exception/RepObjectNotSetException.java similarity index 54% rename from src/main/java/gov/nist/csd/pm/policy/exceptions/RepObjectNotSetException.java rename to src/main/java/gov/nist/csd/pm/pap/exception/RepObjectNotSetException.java index 518c87c33..b04953655 100644 --- a/src/main/java/gov/nist/csd/pm/policy/exceptions/RepObjectNotSetException.java +++ b/src/main/java/gov/nist/csd/pm/pap/exception/RepObjectNotSetException.java @@ -1,6 +1,6 @@ -package gov.nist.csd.pm.policy.exceptions; +package gov.nist.csd.pm.pap.exception; -public class RepObjectNotSetException extends PMException{ +public class RepObjectNotSetException extends PMException { public RepObjectNotSetException(String node) { super("the rep object has not been set for " + node); diff --git a/src/main/java/gov/nist/csd/pm/pap/exception/RoutineDoesNotExistException.java b/src/main/java/gov/nist/csd/pm/pap/exception/RoutineDoesNotExistException.java new file mode 100644 index 000000000..fbc61982a --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/exception/RoutineDoesNotExistException.java @@ -0,0 +1,7 @@ +package gov.nist.csd.pm.pap.exception; + +public class RoutineDoesNotExistException extends PMException { + public RoutineDoesNotExistException(String routine) { + super("a routine with the name " + routine + " does not exist"); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/exception/RoutineExistsException.java b/src/main/java/gov/nist/csd/pm/pap/exception/RoutineExistsException.java new file mode 100644 index 000000000..e4364693a --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/exception/RoutineExistsException.java @@ -0,0 +1,7 @@ +package gov.nist.csd.pm.pap.exception; + +public class RoutineExistsException extends PMException { + public RoutineExistsException(String routine) { + super("a routine with name " + routine + " already exists"); + } +} diff --git a/src/main/java/gov/nist/csd/pm/policy/exceptions/UnknownAccessRightException.java b/src/main/java/gov/nist/csd/pm/pap/exception/UnknownAccessRightException.java similarity index 52% rename from src/main/java/gov/nist/csd/pm/policy/exceptions/UnknownAccessRightException.java rename to src/main/java/gov/nist/csd/pm/pap/exception/UnknownAccessRightException.java index e635cc01f..e94ddc555 100644 --- a/src/main/java/gov/nist/csd/pm/policy/exceptions/UnknownAccessRightException.java +++ b/src/main/java/gov/nist/csd/pm/pap/exception/UnknownAccessRightException.java @@ -1,6 +1,6 @@ -package gov.nist.csd.pm.policy.exceptions; +package gov.nist.csd.pm.pap.exception; -public class UnknownAccessRightException extends PMException{ +public class UnknownAccessRightException extends PMException { public UnknownAccessRightException(String ar) { super("unknown access right \"" + ar + "\""); } diff --git a/src/main/java/gov/nist/csd/pm/pap/exception/UnknownOperandException.java b/src/main/java/gov/nist/csd/pm/pap/exception/UnknownOperandException.java new file mode 100644 index 000000000..dd5f30f9a --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/exception/UnknownOperandException.java @@ -0,0 +1,7 @@ +package gov.nist.csd.pm.pap.exception; + +public class UnknownOperandException extends PMException { + public UnknownOperandException(String operand) { + super("unknown operand " + operand); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/exception/UnknownPatternException.java b/src/main/java/gov/nist/csd/pm/pap/exception/UnknownPatternException.java new file mode 100644 index 000000000..182f88d5c --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/exception/UnknownPatternException.java @@ -0,0 +1,7 @@ +package gov.nist.csd.pm.pap.exception; + +public class UnknownPatternException extends PMException { + public UnknownPatternException() { + super("unknown pattern"); + } +} diff --git a/src/main/java/gov/nist/csd/pm/policy/exceptions/UnknownTypeException.java b/src/main/java/gov/nist/csd/pm/pap/exception/UnknownTypeException.java similarity index 50% rename from src/main/java/gov/nist/csd/pm/policy/exceptions/UnknownTypeException.java rename to src/main/java/gov/nist/csd/pm/pap/exception/UnknownTypeException.java index 0b702eb88..a7869dc22 100644 --- a/src/main/java/gov/nist/csd/pm/policy/exceptions/UnknownTypeException.java +++ b/src/main/java/gov/nist/csd/pm/pap/exception/UnknownTypeException.java @@ -1,6 +1,6 @@ -package gov.nist.csd.pm.policy.exceptions; +package gov.nist.csd.pm.pap.exception; -public class UnknownTypeException extends PMException{ +public class UnknownTypeException extends PMException { public UnknownTypeException(String type) { super("unknown node type " + type); } diff --git a/src/main/java/gov/nist/csd/pm/pap/executable/AdminExecutable.java b/src/main/java/gov/nist/csd/pm/pap/executable/AdminExecutable.java new file mode 100644 index 000000000..ee3916b36 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/executable/AdminExecutable.java @@ -0,0 +1,28 @@ +package gov.nist.csd.pm.pap.executable; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; + +import java.util.List; +import java.util.Map; + +public abstract class AdminExecutable { + + protected final String name; + protected final List operandNames; + + public AdminExecutable(String name, List operandNames) { + this.name = name; + this.operandNames = operandNames; + } + + public abstract T execute(PAP pap, Map operands) throws PMException; + + public String getName() { + return name; + } + + public List getOperandNames() { + return operandNames; + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/executable/AdminExecutor.java b/src/main/java/gov/nist/csd/pm/pap/executable/AdminExecutor.java new file mode 100644 index 000000000..a5019586d --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/executable/AdminExecutor.java @@ -0,0 +1,11 @@ +package gov.nist.csd.pm.pap.executable; + +import gov.nist.csd.pm.pap.exception.PMException; + +import java.util.Map; + +public interface AdminExecutor { + + Object executeAdminExecutable(AdminExecutable adminExecutable, Map operands) throws PMException; + +} diff --git a/src/main/java/gov/nist/csd/pm/policy/model/graph/dag/AllPathsShortCircuit.java b/src/main/java/gov/nist/csd/pm/pap/graph/dag/AllPathsShortCircuit.java similarity index 90% rename from src/main/java/gov/nist/csd/pm/policy/model/graph/dag/AllPathsShortCircuit.java rename to src/main/java/gov/nist/csd/pm/pap/graph/dag/AllPathsShortCircuit.java index 4153eef8f..f1d5e776e 100644 --- a/src/main/java/gov/nist/csd/pm/policy/model/graph/dag/AllPathsShortCircuit.java +++ b/src/main/java/gov/nist/csd/pm/pap/graph/dag/AllPathsShortCircuit.java @@ -1,4 +1,4 @@ -package gov.nist.csd.pm.policy.model.graph.dag; +package gov.nist.csd.pm.pap.graph.dag; public class AllPathsShortCircuit implements ShortCircuit{ diff --git a/src/main/java/gov/nist/csd/pm/pap/memory/dag/BreadthFirstGraphWalker.java b/src/main/java/gov/nist/csd/pm/pap/graph/dag/BreadthFirstGraphWalker.java similarity index 60% rename from src/main/java/gov/nist/csd/pm/pap/memory/dag/BreadthFirstGraphWalker.java rename to src/main/java/gov/nist/csd/pm/pap/graph/dag/BreadthFirstGraphWalker.java index f8a795726..76d0ba94e 100644 --- a/src/main/java/gov/nist/csd/pm/pap/memory/dag/BreadthFirstGraphWalker.java +++ b/src/main/java/gov/nist/csd/pm/pap/graph/dag/BreadthFirstGraphWalker.java @@ -1,32 +1,26 @@ -package gov.nist.csd.pm.pap.memory.dag; +package gov.nist.csd.pm.pap.graph.dag; -import gov.nist.csd.pm.policy.Graph; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.graph.dag.NoopShortCircuit; -import gov.nist.csd.pm.policy.model.graph.dag.ShortCircuit; -import gov.nist.csd.pm.policy.model.graph.dag.propagator.NoopPropagator; -import gov.nist.csd.pm.policy.model.graph.dag.propagator.Propagator; -import gov.nist.csd.pm.policy.model.graph.dag.visitor.NoopVisitor; -import gov.nist.csd.pm.policy.model.graph.dag.visitor.Visitor; -import gov.nist.csd.pm.policy.model.graph.dag.walker.Direction; -import gov.nist.csd.pm.policy.model.graph.dag.walker.GraphWalker; +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.query.GraphQuery; -import java.util.*; +import java.util.Collection; +import java.util.HashSet; +import java.util.Set; public class BreadthFirstGraphWalker implements GraphWalker { - private final Graph graph; + private GraphQuery graphQuery; private Direction direction; private Visitor visitor; private Propagator propagator; private ShortCircuit allPathsShortCircuit; private ShortCircuit singlePathShortCircuit; - public BreadthFirstGraphWalker(Graph graph) { - this.graph = graph; + public BreadthFirstGraphWalker(GraphQuery graphQuery) { + this.graphQuery = graphQuery; this.visitor = new NoopVisitor(); this.propagator = new NoopPropagator(); - this.direction = Direction.PARENTS; + this.direction = Direction.DESCENDANTS; this.allPathsShortCircuit = new NoopShortCircuit(); this.singlePathShortCircuit = new NoopShortCircuit(); } @@ -56,6 +50,30 @@ public BreadthFirstGraphWalker withSinglePathShortCircuit(ShortCircuit shortCirc return this; } + public GraphQuery getGraphQuery() { + return graphQuery; + } + + public Direction getDirection() { + return direction; + } + + public Visitor getVisitor() { + return visitor; + } + + public Propagator getPropagator() { + return propagator; + } + + public ShortCircuit getAllPathsShortCircuit() { + return allPathsShortCircuit; + } + + public ShortCircuit getSinglePathShortCircuit() { + return singlePathShortCircuit; + } + @Override public void walk(String start) throws PMException { visitor.visit(start); @@ -68,18 +86,23 @@ public void walk(String start) throws PMException { } private boolean walkInternal(String start) throws PMException { - List nextLevel = getNextLevel(start); + Collection nextLevel = getNextLevel(start); + Set skip = new HashSet<>(); for (String n : nextLevel) { visitor.visit(n); if (allPathsShortCircuit.evaluate(n)){ return true; } else if (singlePathShortCircuit.evaluate(n)){ - return false; + skip.add(n); + continue; } propagator.propagate(n, start); } + // remove skipped nodes + nextLevel.removeIf(skip::contains); + for (String n : nextLevel) { if (walkInternal(n)) { return true; @@ -89,15 +112,11 @@ private boolean walkInternal(String start) throws PMException { return false; } - private static final int WALK = 0; - private static final int CONTINUE = 1; - private static final int RETURN = 2; - - private List getNextLevel(String node) throws PMException { - if (direction == Direction.PARENTS) { - return graph.getParents(node); + protected Collection getNextLevel(String node) throws PMException { + if (direction == Direction.DESCENDANTS) { + return graphQuery.getAdjacentDescendants(node); } else { - return graph.getChildren(node); + return graphQuery.getAdjacentAscendants(node); } } } diff --git a/src/main/java/gov/nist/csd/pm/pap/memory/dag/DepthFirstGraphWalker.java b/src/main/java/gov/nist/csd/pm/pap/graph/dag/DepthFirstGraphWalker.java similarity index 62% rename from src/main/java/gov/nist/csd/pm/pap/memory/dag/DepthFirstGraphWalker.java rename to src/main/java/gov/nist/csd/pm/pap/graph/dag/DepthFirstGraphWalker.java index 0b243485a..900f76766 100644 --- a/src/main/java/gov/nist/csd/pm/pap/memory/dag/DepthFirstGraphWalker.java +++ b/src/main/java/gov/nist/csd/pm/pap/graph/dag/DepthFirstGraphWalker.java @@ -1,32 +1,24 @@ -package gov.nist.csd.pm.pap.memory.dag; +package gov.nist.csd.pm.pap.graph.dag; -import gov.nist.csd.pm.policy.Graph; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.graph.dag.NoopShortCircuit; -import gov.nist.csd.pm.policy.model.graph.dag.ShortCircuit; -import gov.nist.csd.pm.policy.model.graph.dag.propagator.NoopPropagator; -import gov.nist.csd.pm.policy.model.graph.dag.propagator.Propagator; -import gov.nist.csd.pm.policy.model.graph.dag.visitor.NoopVisitor; -import gov.nist.csd.pm.policy.model.graph.dag.visitor.Visitor; -import gov.nist.csd.pm.policy.model.graph.dag.walker.Direction; -import gov.nist.csd.pm.policy.model.graph.dag.walker.GraphWalker; +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.query.GraphQuery; -import java.util.List; +import java.util.Collection; public class DepthFirstGraphWalker implements GraphWalker { - private final Graph graph; + private final GraphQuery graphQuery; private Direction direction; private Visitor visitor; private Propagator propagator; private ShortCircuit allPathsShortCircuit; private ShortCircuit singlePathShortCircuit; - public DepthFirstGraphWalker(Graph graph) { - this.graph = graph; + public DepthFirstGraphWalker(GraphQuery graphQuery) { + this.graphQuery = graphQuery; this.visitor = new NoopVisitor(); this.propagator = new NoopPropagator(); - this.direction = Direction.PARENTS; + this.direction = Direction.DESCENDANTS; this.allPathsShortCircuit = new NoopShortCircuit(); this.singlePathShortCircuit = new NoopShortCircuit(); } @@ -56,9 +48,32 @@ public DepthFirstGraphWalker withSinglePathShortCircuit(ShortCircuit shortCircui return this; } + public GraphQuery getGraphQuery() { + return graphQuery; + } + + public Direction getDirection() { + return direction; + } + + public Visitor getVisitor() { + return visitor; + } + + public Propagator getPropagator() { + return propagator; + } + + public ShortCircuit getAllPathsShortCircuit() { + return allPathsShortCircuit; + } + + public ShortCircuit getSinglePathShortCircuit() { + return singlePathShortCircuit; + } + @Override public void walk(String start) throws PMException { - // start traversal walkInternal(start); } @@ -71,7 +86,7 @@ private int walkInternal(String start) throws PMException { return CONTINUE; } - List nodes = getNextLevel(start); + Collection nodes = getNextLevel(start); int ret = WALK; for(String n : nodes) { int i = walkInternal(n); @@ -90,16 +105,15 @@ private int walkInternal(String start) throws PMException { return ret; } - private static final int WALK = 0; - private static final int CONTINUE = 1; - private static final int RETURN = 2; - + protected static final int WALK = 0; + protected static final int CONTINUE = 1; + protected static final int RETURN = 2; - private List getNextLevel(String node) throws PMException { - if (direction == Direction.PARENTS) { - return graph.getParents(node); + protected Collection getNextLevel(String node) throws PMException { + if (direction == Direction.DESCENDANTS) { + return graphQuery.getAdjacentDescendants(node); } else { - return graph.getChildren(node); + return graphQuery.getAdjacentAscendants(node); } } } diff --git a/src/main/java/gov/nist/csd/pm/pap/graph/dag/Direction.java b/src/main/java/gov/nist/csd/pm/pap/graph/dag/Direction.java new file mode 100644 index 000000000..4fed4937e --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/graph/dag/Direction.java @@ -0,0 +1,6 @@ +package gov.nist.csd.pm.pap.graph.dag; + +public enum Direction { + ASCENDANTS, + DESCENDANTS +} diff --git a/src/main/java/gov/nist/csd/pm/pap/graph/dag/GraphWalker.java b/src/main/java/gov/nist/csd/pm/pap/graph/dag/GraphWalker.java new file mode 100644 index 000000000..a548784a3 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/graph/dag/GraphWalker.java @@ -0,0 +1,12 @@ +package gov.nist.csd.pm.pap.graph.dag; + +import gov.nist.csd.pm.pap.exception.PMException; + +public interface GraphWalker { + + /** + * Traverse a graph starting at the start node. + */ + void walk(String start) throws PMException; + +} diff --git a/src/main/java/gov/nist/csd/pm/policy/model/graph/dag/propagator/NoopPropagator.java b/src/main/java/gov/nist/csd/pm/pap/graph/dag/NoopPropagator.java similarity index 69% rename from src/main/java/gov/nist/csd/pm/policy/model/graph/dag/propagator/NoopPropagator.java rename to src/main/java/gov/nist/csd/pm/pap/graph/dag/NoopPropagator.java index d074e1656..be7887ccc 100644 --- a/src/main/java/gov/nist/csd/pm/policy/model/graph/dag/propagator/NoopPropagator.java +++ b/src/main/java/gov/nist/csd/pm/pap/graph/dag/NoopPropagator.java @@ -1,4 +1,4 @@ -package gov.nist.csd.pm.policy.model.graph.dag.propagator; +package gov.nist.csd.pm.pap.graph.dag; public class NoopPropagator implements Propagator { diff --git a/src/main/java/gov/nist/csd/pm/policy/model/graph/dag/NoopShortCircuit.java b/src/main/java/gov/nist/csd/pm/pap/graph/dag/NoopShortCircuit.java similarity index 74% rename from src/main/java/gov/nist/csd/pm/policy/model/graph/dag/NoopShortCircuit.java rename to src/main/java/gov/nist/csd/pm/pap/graph/dag/NoopShortCircuit.java index 8cecb932e..402b3f6a9 100644 --- a/src/main/java/gov/nist/csd/pm/policy/model/graph/dag/NoopShortCircuit.java +++ b/src/main/java/gov/nist/csd/pm/pap/graph/dag/NoopShortCircuit.java @@ -1,4 +1,4 @@ -package gov.nist.csd.pm.policy.model.graph.dag; +package gov.nist.csd.pm.pap.graph.dag; public class NoopShortCircuit implements ShortCircuit{ @Override diff --git a/src/main/java/gov/nist/csd/pm/policy/model/graph/dag/visitor/NoopVisitor.java b/src/main/java/gov/nist/csd/pm/pap/graph/dag/NoopVisitor.java similarity index 65% rename from src/main/java/gov/nist/csd/pm/policy/model/graph/dag/visitor/NoopVisitor.java rename to src/main/java/gov/nist/csd/pm/pap/graph/dag/NoopVisitor.java index cd3b8a89e..3b3812bd0 100644 --- a/src/main/java/gov/nist/csd/pm/policy/model/graph/dag/visitor/NoopVisitor.java +++ b/src/main/java/gov/nist/csd/pm/pap/graph/dag/NoopVisitor.java @@ -1,4 +1,4 @@ -package gov.nist.csd.pm.policy.model.graph.dag.visitor; +package gov.nist.csd.pm.pap.graph.dag; public class NoopVisitor implements Visitor{ diff --git a/src/main/java/gov/nist/csd/pm/pap/graph/dag/Propagator.java b/src/main/java/gov/nist/csd/pm/pap/graph/dag/Propagator.java new file mode 100644 index 000000000..7ea692714 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/graph/dag/Propagator.java @@ -0,0 +1,15 @@ +package gov.nist.csd.pm.pap.graph.dag; + +import gov.nist.csd.pm.pap.exception.PMException; + +public interface Propagator { + + /** + * Propagate information from the src node to the dst node. + * + * @param src The node that holds the information already. + * @param dst The node to propagate the information to. + */ + void propagate(String src, String dst) throws PMException; + +} diff --git a/src/main/java/gov/nist/csd/pm/policy/model/graph/dag/ShortCircuit.java b/src/main/java/gov/nist/csd/pm/pap/graph/dag/ShortCircuit.java similarity index 60% rename from src/main/java/gov/nist/csd/pm/policy/model/graph/dag/ShortCircuit.java rename to src/main/java/gov/nist/csd/pm/pap/graph/dag/ShortCircuit.java index dae409581..8276789a9 100644 --- a/src/main/java/gov/nist/csd/pm/policy/model/graph/dag/ShortCircuit.java +++ b/src/main/java/gov/nist/csd/pm/pap/graph/dag/ShortCircuit.java @@ -1,4 +1,4 @@ -package gov.nist.csd.pm.policy.model.graph.dag; +package gov.nist.csd.pm.pap.graph.dag; public interface ShortCircuit { diff --git a/src/main/java/gov/nist/csd/pm/policy/model/graph/dag/SinglePathShortCircuit.java b/src/main/java/gov/nist/csd/pm/pap/graph/dag/SinglePathShortCircuit.java similarity index 87% rename from src/main/java/gov/nist/csd/pm/policy/model/graph/dag/SinglePathShortCircuit.java rename to src/main/java/gov/nist/csd/pm/pap/graph/dag/SinglePathShortCircuit.java index cf6abfe87..182993a14 100644 --- a/src/main/java/gov/nist/csd/pm/policy/model/graph/dag/SinglePathShortCircuit.java +++ b/src/main/java/gov/nist/csd/pm/pap/graph/dag/SinglePathShortCircuit.java @@ -1,4 +1,4 @@ -package gov.nist.csd.pm.policy.model.graph.dag; +package gov.nist.csd.pm.pap.graph.dag; public class SinglePathShortCircuit implements ShortCircuit { diff --git a/src/main/java/gov/nist/csd/pm/policy/model/graph/dag/TargetDagResult.java b/src/main/java/gov/nist/csd/pm/pap/graph/dag/TargetDagResult.java similarity index 57% rename from src/main/java/gov/nist/csd/pm/policy/model/graph/dag/TargetDagResult.java rename to src/main/java/gov/nist/csd/pm/pap/graph/dag/TargetDagResult.java index ecee141d4..6f84fba87 100644 --- a/src/main/java/gov/nist/csd/pm/policy/model/graph/dag/TargetDagResult.java +++ b/src/main/java/gov/nist/csd/pm/pap/graph/dag/TargetDagResult.java @@ -1,6 +1,6 @@ -package gov.nist.csd.pm.policy.model.graph.dag; +package gov.nist.csd.pm.pap.graph.dag; -import gov.nist.csd.pm.policy.model.access.AccessRightSet; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; import java.util.Map; import java.util.Set; diff --git a/src/main/java/gov/nist/csd/pm/pap/graph/dag/UserDagResult.java b/src/main/java/gov/nist/csd/pm/pap/graph/dag/UserDagResult.java new file mode 100644 index 000000000..3fadb4df6 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/graph/dag/UserDagResult.java @@ -0,0 +1,17 @@ +package gov.nist.csd.pm.pap.graph.dag; + +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.prohibition.Prohibition; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +public record UserDagResult(Map borderTargets, + Set prohibitions, + Set prohibitionTargets) { + public UserDagResult() { + this(new HashMap<>(), new HashSet<>(), new HashSet<>()); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/graph/dag/Visitor.java b/src/main/java/gov/nist/csd/pm/pap/graph/dag/Visitor.java new file mode 100644 index 000000000..e1b2f203d --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/graph/dag/Visitor.java @@ -0,0 +1,8 @@ +package gov.nist.csd.pm.pap.graph.dag; + +import gov.nist.csd.pm.pap.exception.PMException; + +public interface Visitor { + + void visit(String node) throws PMException; +} diff --git a/src/main/java/gov/nist/csd/pm/policy/model/graph/nodes/Node.java b/src/main/java/gov/nist/csd/pm/pap/graph/node/Node.java similarity index 97% rename from src/main/java/gov/nist/csd/pm/policy/model/graph/nodes/Node.java rename to src/main/java/gov/nist/csd/pm/pap/graph/node/Node.java index c2983a060..65b81fc83 100644 --- a/src/main/java/gov/nist/csd/pm/policy/model/graph/nodes/Node.java +++ b/src/main/java/gov/nist/csd/pm/pap/graph/node/Node.java @@ -1,4 +1,4 @@ -package gov.nist.csd.pm.policy.model.graph.nodes; +package gov.nist.csd.pm.pap.graph.node; import java.io.Serializable; import java.util.HashMap; diff --git a/src/main/java/gov/nist/csd/pm/policy/model/graph/nodes/NodeType.java b/src/main/java/gov/nist/csd/pm/pap/graph/node/NodeType.java similarity index 92% rename from src/main/java/gov/nist/csd/pm/policy/model/graph/nodes/NodeType.java rename to src/main/java/gov/nist/csd/pm/pap/graph/node/NodeType.java index 4fe6b6e84..e42dbe1a8 100644 --- a/src/main/java/gov/nist/csd/pm/policy/model/graph/nodes/NodeType.java +++ b/src/main/java/gov/nist/csd/pm/pap/graph/node/NodeType.java @@ -1,6 +1,6 @@ -package gov.nist.csd.pm.policy.model.graph.nodes; +package gov.nist.csd.pm.pap.graph.node; -import gov.nist.csd.pm.policy.exceptions.UnknownTypeException; +import gov.nist.csd.pm.pap.exception.UnknownTypeException; import java.io.Serializable; diff --git a/src/main/java/gov/nist/csd/pm/policy/model/graph/nodes/Properties.java b/src/main/java/gov/nist/csd/pm/pap/graph/node/Properties.java similarity index 96% rename from src/main/java/gov/nist/csd/pm/policy/model/graph/nodes/Properties.java rename to src/main/java/gov/nist/csd/pm/pap/graph/node/Properties.java index 4d384e1e1..12bf28d20 100644 --- a/src/main/java/gov/nist/csd/pm/policy/model/graph/nodes/Properties.java +++ b/src/main/java/gov/nist/csd/pm/pap/graph/node/Properties.java @@ -1,4 +1,4 @@ -package gov.nist.csd.pm.policy.model.graph.nodes; +package gov.nist.csd.pm.pap.graph.node; import java.util.Collections; import java.util.HashMap; diff --git a/src/main/java/gov/nist/csd/pm/pap/graph/relationship/AccessRightSet.java b/src/main/java/gov/nist/csd/pm/pap/graph/relationship/AccessRightSet.java new file mode 100644 index 000000000..167d27121 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/graph/relationship/AccessRightSet.java @@ -0,0 +1,25 @@ +package gov.nist.csd.pm.pap.graph.relationship; + +import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; + +import java.util.Arrays; +import java.util.Collection; + +public class AccessRightSet extends ObjectOpenHashSet { + + public AccessRightSet(){ + } + + public AccessRightSet(String ... ops) { + this.addAll(Arrays.asList(ops)); + } + + public AccessRightSet(Collection ops) { + this.addAll(ops); + } + + public AccessRightSet(AccessRightSet a, AccessRightSet b) { + this.addAll(a); + this.addAll(b); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/graph/relationship/Assignment.java b/src/main/java/gov/nist/csd/pm/pap/graph/relationship/Assignment.java new file mode 100644 index 000000000..f9d36b6bf --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/graph/relationship/Assignment.java @@ -0,0 +1,47 @@ +package gov.nist.csd.pm.pap.graph.relationship; + +import gov.nist.csd.pm.pap.graph.node.NodeType; + +import java.io.Serializable; +import java.util.EnumMap; +import java.util.Map; + +/** + * This object represents an Assignment in a NGAC graph + */ +public class Assignment extends Relationship implements Serializable { + + public Assignment(String source, String target) { + super(source, target); + } + + private static final Map validAssignments = new EnumMap<>(NodeType.class); + static { + validAssignments.put(NodeType.PC, new NodeType[]{}); + validAssignments.put(NodeType.OA, new NodeType[]{NodeType.PC, NodeType.OA}); + validAssignments.put(NodeType.O, new NodeType[]{NodeType.OA}); + validAssignments.put(NodeType.UA, new NodeType[]{NodeType.UA, NodeType.PC}); + validAssignments.put(NodeType.U, new NodeType[]{NodeType.UA}); + } + + /** + * Check if the assignment provided, is valid under NGAC. + * + * @param ascType The type of the ascendant node. + * @param dscType The type of the descendant node. + * @throws InvalidAssignmentException if the ascendant type is not allowed to be assigned to the descendant type. + */ + public static void checkAssignment(NodeType ascType, NodeType dscType) throws InvalidAssignmentException { + NodeType[] check = validAssignments.get(ascType); + for (NodeType nt : check) { + if (nt.equals(dscType)) { + return; + } + } + + throw new InvalidAssignmentException(String.format("cannot assign a node of type %s to a node of type %s", + ascType, + dscType + )); + } +} diff --git a/src/main/java/gov/nist/csd/pm/policy/model/graph/relationships/Association.java b/src/main/java/gov/nist/csd/pm/pap/graph/relationship/Association.java similarity index 84% rename from src/main/java/gov/nist/csd/pm/policy/model/graph/relationships/Association.java rename to src/main/java/gov/nist/csd/pm/pap/graph/relationship/Association.java index 1760bc0e3..b6938a857 100644 --- a/src/main/java/gov/nist/csd/pm/policy/model/graph/relationships/Association.java +++ b/src/main/java/gov/nist/csd/pm/pap/graph/relationship/Association.java @@ -1,13 +1,12 @@ -package gov.nist.csd.pm.policy.model.graph.relationships; +package gov.nist.csd.pm.pap.graph.relationship; -import gov.nist.csd.pm.policy.model.access.AccessRightSet; -import gov.nist.csd.pm.policy.model.graph.nodes.NodeType; +import gov.nist.csd.pm.pap.graph.node.NodeType; import java.io.Serializable; import java.util.EnumMap; import java.util.Map; -import static gov.nist.csd.pm.policy.model.graph.nodes.NodeType.*; +import static gov.nist.csd.pm.pap.graph.node.NodeType.*; /** * This object represents an Association in a NGAC graph. An association is a relationship between two nodes, @@ -23,10 +22,6 @@ public Association(String source, String target, AccessRightSet ars) { super(source, target, ars); } - public Association(String ua, String target) { - super(ua, target, new AccessRightSet()); - } - private static final Map validAssociations = new EnumMap<>(NodeType.class); static { validAssociations.put(PC, new NodeType[]{}); diff --git a/src/main/java/gov/nist/csd/pm/policy/model/graph/relationships/InvalidAssignmentException.java b/src/main/java/gov/nist/csd/pm/pap/graph/relationship/InvalidAssignmentException.java similarity index 56% rename from src/main/java/gov/nist/csd/pm/policy/model/graph/relationships/InvalidAssignmentException.java rename to src/main/java/gov/nist/csd/pm/pap/graph/relationship/InvalidAssignmentException.java index f31b64392..5db3e9508 100644 --- a/src/main/java/gov/nist/csd/pm/policy/model/graph/relationships/InvalidAssignmentException.java +++ b/src/main/java/gov/nist/csd/pm/pap/graph/relationship/InvalidAssignmentException.java @@ -1,6 +1,6 @@ -package gov.nist.csd.pm.policy.model.graph.relationships; +package gov.nist.csd.pm.pap.graph.relationship; -import gov.nist.csd.pm.policy.exceptions.PMException; +import gov.nist.csd.pm.pap.exception.PMException; public class InvalidAssignmentException extends PMException { public InvalidAssignmentException(String msg) { diff --git a/src/main/java/gov/nist/csd/pm/policy/model/graph/relationships/InvalidAssociationException.java b/src/main/java/gov/nist/csd/pm/pap/graph/relationship/InvalidAssociationException.java similarity index 56% rename from src/main/java/gov/nist/csd/pm/policy/model/graph/relationships/InvalidAssociationException.java rename to src/main/java/gov/nist/csd/pm/pap/graph/relationship/InvalidAssociationException.java index 8762c2775..8b3013090 100644 --- a/src/main/java/gov/nist/csd/pm/policy/model/graph/relationships/InvalidAssociationException.java +++ b/src/main/java/gov/nist/csd/pm/pap/graph/relationship/InvalidAssociationException.java @@ -1,6 +1,6 @@ -package gov.nist.csd.pm.policy.model.graph.relationships; +package gov.nist.csd.pm.pap.graph.relationship; -import gov.nist.csd.pm.policy.exceptions.PMException; +import gov.nist.csd.pm.pap.exception.PMException; public class InvalidAssociationException extends PMException { public InvalidAssociationException(String msg) { diff --git a/src/main/java/gov/nist/csd/pm/policy/model/graph/relationships/Relationship.java b/src/main/java/gov/nist/csd/pm/pap/graph/relationship/Relationship.java similarity index 74% rename from src/main/java/gov/nist/csd/pm/policy/model/graph/relationships/Relationship.java rename to src/main/java/gov/nist/csd/pm/pap/graph/relationship/Relationship.java index 9778f5cf8..02e58f53a 100644 --- a/src/main/java/gov/nist/csd/pm/policy/model/graph/relationships/Relationship.java +++ b/src/main/java/gov/nist/csd/pm/pap/graph/relationship/Relationship.java @@ -1,12 +1,10 @@ -package gov.nist.csd.pm.policy.model.graph.relationships; - -import gov.nist.csd.pm.policy.model.access.AccessRightSet; +package gov.nist.csd.pm.pap.graph.relationship; import java.io.Serializable; import java.util.Objects; /** - * This class will serve as a parent class for Assignments and Associations. Both types of relations have a source node + * This class will serve as a descendant class for Assignments and Associations. Both types of relations have a source node * and a target node. */ public class Relationship implements Serializable { @@ -68,15 +66,19 @@ public String toString() { @Override public boolean equals(Object o) { - if (!(o instanceof Relationship ge)) { + if (this == o) { + return true; + } + if (!(o instanceof Relationship)) { return false; } - - return this.source.equals(ge.source) && this.target.equals(ge.target); + Relationship that = (Relationship) o; + return Objects.equals(source, that.source) && Objects.equals( + target, that.target) && Objects.equals(accessRightSet, that.accessRightSet); } @Override public int hashCode() { - return Objects.hash(source, target); + return Objects.hash(source, target, accessRightSet); } } diff --git a/src/main/java/gov/nist/csd/pm/pap/memory/MemoryGraph.java b/src/main/java/gov/nist/csd/pm/pap/memory/MemoryGraph.java deleted file mode 100644 index 89ef51df2..000000000 --- a/src/main/java/gov/nist/csd/pm/pap/memory/MemoryGraph.java +++ /dev/null @@ -1,513 +0,0 @@ -package gov.nist.csd.pm.pap.memory; - -import gov.nist.csd.pm.policy.Graph; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.AccessRightSet; -import gov.nist.csd.pm.policy.model.graph.nodes.Node; -import gov.nist.csd.pm.policy.model.graph.nodes.NodeType; -import gov.nist.csd.pm.policy.model.graph.relationships.Association; - -import java.io.Serializable; -import java.util.*; - -import static gov.nist.csd.pm.policy.model.graph.nodes.NodeType.*; -import static gov.nist.csd.pm.policy.model.graph.nodes.Properties.NO_PROPERTIES; -import static gov.nist.csd.pm.policy.model.graph.nodes.Properties.WILDCARD; - -class MemoryGraph implements Graph { - - private final Map graph; - private final AccessRightSet resourceAccessRights; - private final List pcs; - private final List oas; - private final List uas; - private final List os; - private final List us; - - protected MemoryTx tx; - - public MemoryGraph() { - this.graph = new HashMap<>(); - this.pcs = new ArrayList<>(); - this.oas = new ArrayList<>(); - this.uas = new ArrayList<>(); - this.os = new ArrayList<>(); - this.us = new ArrayList<>(); - this.resourceAccessRights = new AccessRightSet(); - tx = new MemoryTx(false, 0, null); - } - - public MemoryGraph(MemoryGraph graph) { - this.graph = new HashMap<>(); - for (String n : graph.graph.keySet()) { - this.graph.put(n, graph.graph.get(n).copy()); - } - - this.pcs = new ArrayList<>(graph.pcs); - this.oas = new ArrayList<>(graph.oas); - this.uas = new ArrayList<>(graph.uas); - this.os = new ArrayList<>(graph.os); - this.us = new ArrayList<>(graph.us); - this.resourceAccessRights = new AccessRightSet(graph.getResourceAccessRights()); - this.tx = new MemoryTx(false, 0, null); - } - - public MemoryGraph(Graph graph) throws PMException { - this.graph = new HashMap<>(); - this.pcs = new ArrayList<>(); - this.oas = new ArrayList<>(); - this.uas = new ArrayList<>(); - this.os = new ArrayList<>(); - this.us = new ArrayList<>(); - this.resourceAccessRights = new AccessRightSet(graph.getResourceAccessRights()); - this.tx = new MemoryTx(false, 0, null); - - List nodes = graph.search(ANY, NO_PROPERTIES); - - // add nodes to graph - List uas = new ArrayList<>(); - for (String n : nodes) { - Node node = graph.getNode(n); - addNode(n, node.getType(), node.getProperties()); - - if (node.getType() == UA) { - uas.add(n); - } - } - - // add assignments to graph - for (String n : nodes) { - List parents = graph.getParents(n); - for (String p : parents) { - assignInternal(n, p); - } - } - - // add associations to graph - for (String ua : uas) { - List assocs = graph.getAssociationsWithSource(ua); - for (Association a : assocs) { - associate(ua, a.getTarget(), a.getAccessRightSet()); - } - } - } - - @Override - public void setResourceAccessRights(AccessRightSet accessRightSet) throws PMException { - if (tx.active()) { - tx.policyStore().graph().setResourceAccessRights(accessRightSet); - } - - this.resourceAccessRights.clear(); - this.resourceAccessRights.addAll(accessRightSet); - } - - @Override - public AccessRightSet getResourceAccessRights() { - return new AccessRightSet(resourceAccessRights); - } - - @Override - public String createPolicyClass(String name, Map properties) throws PMException { - if (tx.active()) { - tx.policyStore().graph().createPolicyClass(name, properties); - } - - this.graph.put(name, getVertex(name, PC, properties)); - this.pcs.add(name); - - return name; - } - - @Override - public String createPolicyClass(String name) throws PMException { - return createPolicyClass(name, NO_PROPERTIES); - } - - @Override - public String createUserAttribute(String name, Map properties, String parent, String... parents) throws PMException { - if (tx.active()) { - tx.policyStore().graph().createUserAttribute(name, properties, parent, parents); - } - - return addNode(name, UA, properties, parent, parents); - } - - @Override - public String createUserAttribute(String name, String parent, String... parents) throws PMException { - return createUserAttribute(name, NO_PROPERTIES, parent, parents); - } - - @Override - public String createObjectAttribute(String name, Map properties, String parent, String... parents) throws PMException { - if (tx.active()) { - tx.policyStore().graph().createObjectAttribute(name, properties, parent, parents); - } - - return addNode(name, OA, properties, parent, parents); - } - - @Override - public String createObjectAttribute(String name, String parent, String... parents) throws PMException { - return createObjectAttribute(name, NO_PROPERTIES, parent, parents); - } - - @Override - public String createObject(String name, Map properties, String parent, String... parents) throws PMException { - if (tx.active()) { - tx.policyStore().graph().createObject(name, properties, parent, parents); - } - - return addNode(name, O, properties, parent, parents); - } - - @Override - public String createObject(String name, String parent, String... parents) throws PMException { - return createObject(name, NO_PROPERTIES, parent, parents); - } - - @Override - public String createUser(String name, Map properties, String parent, String... parents) throws PMException { - if (tx.active()) { - tx.policyStore().graph().createUser(name, properties, parent, parents); - } - - return addNode(name, U, properties, parent, parents); - } - - @Override - public String createUser(String name, String parent, String... parents) throws PMException { - return createUser(name, NO_PROPERTIES, parent, parents); - } - - @Override - public void setNodeProperties(String name, Map properties) throws PMException { - if (tx.active()) { - tx.policyStore().graph().setNodeProperties(name, properties); - } - - this.graph.get(name).setProperties(properties); - } - - @Override - public boolean nodeExists(String name) { - return this.graph.containsKey(name); - } - - - @Override - public Node getNode(String name) { - return new Node(this.graph.get(name).getNode()); - } - - @Override - public List search(NodeType type, Map properties) { - List nodes = filterByType(type); - return filterByProperties(nodes, properties); - } - - @Override - public List getPolicyClasses() { - return new ArrayList<>(pcs); - } - - @Override - public void deleteNode(String name) throws PMException { - if (!graph.containsKey(name)) { - return; - } - - if (tx.active()) { - tx.policyStore().graph().deleteNode(name); - } - - Vertex vertex = graph.get(name); - - List children = vertex.getChildren(); - List parents = vertex.getParents(); - List incomingAssociations = vertex.getIncomingAssociations(); - List outgoingAssociations = vertex.getOutgoingAssociations(); - - for (String child : children) { - graph.get(child).removeAssignment(child, name); - } - - for (String parent : parents) { - graph.get(parent).removeAssignment(name, parent); - } - - for (Association association : incomingAssociations) { - graph.get(association.getSource()).removeAssociation(association.getSource(), association.getTarget()); - } - - for (Association association : outgoingAssociations) { - graph.get(association.getTarget()).removeAssociation(association.getSource(), association.getTarget()); - } - - graph.remove(name); - - if (vertex.getNode().getType() == PC) { - pcs.remove(name); - } else if (vertex.getNode().getType() == OA) { - oas.remove(name); - } else if (vertex.getNode().getType() == UA) { - uas.remove(name); - } else if (vertex.getNode().getType() == O) { - os.remove(name); - } else if (vertex.getNode().getType() == U) { - us.remove(name); - } - } - - @Override - public void assign(String child, String parent) throws PMException { - if (tx.active()) { - tx.policyStore().graph().assign(child, parent); - } - - assignInternal(child, parent); - } - - @Override - public void deassign(String child, String parent) throws PMException { - if (tx.active()) { - tx.policyStore().graph().deassign(child, parent); - } - - deassignInternal(child, parent); - } - - @Override - public void assignAll(List children, String target) throws PMException { - if (tx.active()) { - tx.policyStore().graph().assignAll(children, target); - } - - for (String c : children) { - assignInternal(c, target); - } - } - - @Override - public void deassignAll(List children, String target) throws PMException { - if (tx.active()) { - tx.policyStore().graph().deassignAll(children, target); - } - - for (String c : children) { - deassignInternal(c, target); - } - } - - @Override - public void deassignAllFromAndDelete(String target) throws PMException { - if (tx.active()) { - tx.policyStore().graph().deassignAllFromAndDelete(target); - } - - for (String c : getChildren(target)) { - deassignInternal(c, target); - } - - deleteNode(target); - } - - @Override - public List getParents(String node) { - return new ArrayList<>(graph.get(node).getParents()); - } - - - @Override - public List getChildren(String node) { - return new ArrayList<>(graph.get(node).getChildren()); - } - - - @Override - public void associate(String ua, String target, AccessRightSet accessRights) throws PMException { - if (tx.active()) { - tx.policyStore().graph().associate(ua, target, accessRights); - } - - if (containsEdge(ua, target)) { - // remove the existing association edge in order to update it - dissociateInternal(ua, target); - } - - associateInternal(ua, target, accessRights); - } - - @Override - public void dissociate(String ua, String target) throws PMException { - if (tx.active()) { - tx.policyStore().graph().dissociate(ua, target); - } - - dissociateInternal(ua, target); - } - - @Override - public List getAssociationsWithSource(String ua) { - return new ArrayList<>(graph.get(ua).getOutgoingAssociations()); - } - - @Override - public List getAssociationsWithTarget(String target) { - return new ArrayList<>(graph.get(target).getIncomingAssociations()); - } - - public String addNode(String name, NodeType type, Map properties) { - this.graph.put(name, getVertex(name, type, properties)); - if (type == NodeType.PC) { - this.pcs.add(name); - } else if (type == OA){ - this.oas.add(name); - } else if (type == UA){ - this.uas.add(name); - } else if (type == O){ - this.os.add(name); - } else if (type == U){ - this.us.add(name); - } - - return name; - } - - private String addNode(String name, NodeType type, Map properties, String initialParent, String ... parents) throws PMException { - addNode(name, type, properties); - - assign(name, initialParent); - for (String parent : parents) { - assign(name, parent); - } - - return name; - } - - private Vertex getVertex(String name, NodeType type, Map properties) { - switch (type){ - case PC -> { - return new PolicyClass(name, properties); - } - case OA -> { - return new ObjectAttribute(name, properties); - } - case UA -> { - return new UserAttribute(name, properties); - } - case O -> { - return new Object(name, properties); - } - default -> { - return new User(name, properties); - } - } - } - - private List filterByProperties(List nodes, Map properties) { - List results = new ArrayList<>(); - if (properties.isEmpty()) { - results.addAll(nodes); - } else { - for (String n : nodes) { - Map nodeProperties = graph.get(n).getNode().getProperties(); - - if (!hasAllKeys(nodeProperties, properties) - || !valuesMatch(nodeProperties, properties)) { - continue; - } - - results.add(n); - } - } - - return results; - } - - private List filterByType(NodeType type) { - List nodes = new ArrayList<>(); - if (type != ANY) { - if (type == PC) { - nodes.addAll(pcs); - } else if (type == OA) { - nodes.addAll(oas); - } else if (type == UA) { - nodes.addAll(uas); - } else if (type == O) { - nodes.addAll(os); - } else { - nodes.addAll(us); - } - } else { - nodes.addAll(pcs); - nodes.addAll(uas); - nodes.addAll(oas); - nodes.addAll(us); - nodes.addAll(os); - } - - return nodes; - } - - private boolean valuesMatch(Map nodeProperties, Map checkProperties) { - for (Map.Entry entry : checkProperties.entrySet()) { - String checkKey = entry.getKey(); - String checkValue = entry.getValue(); - if (!checkValue.equals(nodeProperties.get(checkKey)) - && !checkValue.equals(WILDCARD)) { - return false; - } - } - - return true; - } - - private boolean hasAllKeys(Map nodeProperties, Map checkProperties) { - for (String key : checkProperties.keySet()) { - if (!nodeProperties.containsKey(key)) { - return false; - } - } - - return true; - } - - public void assignInternal(String child, String parent) { - if (graph.get(child).getParents().contains(parent)) { - return; - } - - graph.get(child).addAssignment(child, parent); - graph.get(parent).addAssignment(child, parent); - } - - public void deassignInternal(String child, String parent) { - graph.get(child).removeAssignment(child, parent); - graph.get(parent).removeAssignment(child, parent); - } - - public void associateInternal(String ua, String target, AccessRightSet accessRights) { - graph.get(ua).addAssociation(ua, target, accessRights); - graph.get(target).addAssociation(ua, target, accessRights); - } - - public void dissociateInternal(String ua, String target) { - graph.get(ua).removeAssociation(ua, target); - graph.get(target).removeAssociation(ua, target); - } - - public boolean containsEdge(String source, String target) { - return graph.get(source).getParents().contains(target) - || graph.get(source).getOutgoingAssociations().contains(new Association(source, target)); - } - - public List getNodes() { - Collection values = graph.values(); - List nodes = new ArrayList<>(); - for (Vertex v : values) { - nodes.add(v.getNode()); - } - return nodes; - } -} diff --git a/src/main/java/gov/nist/csd/pm/pap/memory/MemoryObligations.java b/src/main/java/gov/nist/csd/pm/pap/memory/MemoryObligations.java deleted file mode 100644 index 82a768c47..000000000 --- a/src/main/java/gov/nist/csd/pm/pap/memory/MemoryObligations.java +++ /dev/null @@ -1,99 +0,0 @@ -package gov.nist.csd.pm.pap.memory; - -import com.google.gson.Gson; -import gov.nist.csd.pm.policy.Obligations; -import gov.nist.csd.pm.policy.exceptions.ObligationDoesNotExistException; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.UserContext; -import gov.nist.csd.pm.policy.model.obligation.Obligation; -import gov.nist.csd.pm.policy.model.obligation.Rule; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -class MemoryObligations implements Obligations, Serializable { - - protected MemoryTx tx; - private List obligations; - - public MemoryObligations() { - this.obligations = new ArrayList<>(); - this.tx = new MemoryTx(false, 0, null); - } - - public MemoryObligations(List obligations) { - this.obligations = obligations; - this.tx = new MemoryTx(false, 0, null); - } - - public MemoryObligations(Obligations obligations) throws PMException { - this.obligations = obligations.getAll(); - this.tx = new MemoryTx(false, 0, null); - } - - @Override - public void create(UserContext author, String label, Rule... rules) throws PMException { - if (tx.active()) { - tx.policyStore().obligations().create(author, label, rules); - } - - obligations.add(new Obligation(author, label, Arrays.asList(rules))); - } - - @Override - public void update(UserContext author, String label, Rule... rules) throws PMException { - if (tx.active()) { - tx.policyStore().obligations().update(author, label, rules); - } - - for (Obligation o : obligations) { - if (o.getLabel().equals(label)) { - o.setAuthor(author); - o.setLabel(label); - o.setRules(List.of(rules)); - } - } - } - - @Override - public void delete(String label) throws PMException { - if (tx.active()) { - tx.policyStore().obligations().delete(label); - } - - this.obligations.removeIf(o -> o.getLabel().equals(label)); - } - - @Override - public List getAll() { - return new ArrayList<>(obligations); - } - - @Override - public boolean exists(String label) throws PMException { - for (Obligation o : obligations) { - if (o.getLabel().equals(label)) { - return true; - } - } - - return false; - } - - @Override - public Obligation get(String label) throws PMException { - for (Obligation obligation : obligations) { - if (obligation.getLabel().equals(label)) { - return obligation.clone(); - } - } - - throw new ObligationDoesNotExistException(label); - } - - public void fromJson(String json) { - this.obligations = new Gson().fromJson(json, List.class); - } -} diff --git a/src/main/java/gov/nist/csd/pm/pap/memory/MemoryPolicyDeserializer.java b/src/main/java/gov/nist/csd/pm/pap/memory/MemoryPolicyDeserializer.java deleted file mode 100644 index 16f483da1..000000000 --- a/src/main/java/gov/nist/csd/pm/pap/memory/MemoryPolicyDeserializer.java +++ /dev/null @@ -1,117 +0,0 @@ -package gov.nist.csd.pm.pap.memory; - -import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; -import gov.nist.csd.pm.policy.PolicyDeserializer; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.json.JSONGraph; -import gov.nist.csd.pm.policy.json.JSONPolicy; -import gov.nist.csd.pm.policy.json.JSONUserDefinedPML; -import gov.nist.csd.pm.policy.model.access.AccessRightSet; -import gov.nist.csd.pm.policy.model.access.UserContext; -import gov.nist.csd.pm.policy.model.graph.nodes.Node; -import gov.nist.csd.pm.policy.model.obligation.Obligation; -import gov.nist.csd.pm.policy.model.obligation.Rule; -import gov.nist.csd.pm.policy.model.prohibition.ContainerCondition; -import gov.nist.csd.pm.policy.model.prohibition.Prohibition; -import gov.nist.csd.pm.policy.pml.PMLSerializer; -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; -import org.apache.commons.lang3.SerializationUtils; - -import java.lang.reflect.Type; -import java.util.List; -import java.util.Map; - -public class MemoryPolicyDeserializer implements PolicyDeserializer { - - private static ObjectMapper mapper = new ObjectMapper(); - - private MemoryPolicyStore memoryPolicyStore; - - public MemoryPolicyDeserializer(MemoryPolicyStore memoryPolicyStore) { - this.memoryPolicyStore = memoryPolicyStore; - } - - @Override - public void fromJSON(String json) throws PMException { - JSONPolicy jsonPolicy = JSONPolicy.fromJson(json); - - graphFromJson(jsonPolicy.getGraph()); - prohibitionsFromJson(jsonPolicy.getProhibitions()); - obligationsFromJson(jsonPolicy.getObligations()); - userDefinedPMLFromJson(jsonPolicy.getUserDefinedPML()); - } - - @Override - public void fromPML(UserContext author, String pml, FunctionDefinitionStatement... customFunctions) throws PMException { - PMLSerializer pmlSerializer = new PMLSerializer(memoryPolicyStore); - pmlSerializer.fromPML(author, pml, customFunctions); - } - - private void userDefinedPMLFromJson(String userDefinedPML) throws PMException { - JSONUserDefinedPML jsonPML = - new Gson().fromJson(userDefinedPML, JSONUserDefinedPML.class); - - for (Map.Entry e : jsonPML.getFunctions().entrySet()) { - memoryPolicyStore.userDefinedPML().createFunction(SerializationUtils.deserialize(e.getValue())); - } - - for (Map.Entry e : jsonPML.getConstants().entrySet()) { - memoryPolicyStore.userDefinedPML().createConstant(e.getKey(), SerializationUtils.deserialize(e.getValue())); - } - } - - private void obligationsFromJson(String obligations) throws PMException { - Type type = new TypeToken>() {}.getType(); - List list = new Gson().fromJson(obligations, type); - - for (byte[] b : list) { - Obligation obligation = SerializationUtils.deserialize(b); - - List rules = obligation.getRules(); - memoryPolicyStore.obligations().create( - obligation.getAuthor(), - obligation.getLabel(), - rules.toArray(new Rule[]{}) - ); - } - } - - private void prohibitionsFromJson(String prohibitions) throws PMException { - Type type = new TypeToken>() {}.getType(); - List list = new Gson().fromJson(prohibitions, type); - - for (byte[] b : list) { - Prohibition prohibition = SerializationUtils.deserialize(b); - - memoryPolicyStore.prohibitions().create( - prohibition.getLabel(), - prohibition.getSubject(), - prohibition.getAccessRightSet(), - prohibition.isIntersection(), - prohibition.getContainers().toArray(new ContainerCondition[0]) - ); - } - } - - private void graphFromJson(String json) throws PMException { - JSONGraph jsonGraph = new Gson().fromJson(json, JSONGraph.class); - - ((MemoryGraph)memoryPolicyStore.graph()).setResourceAccessRights(jsonGraph.getResourceAccessRights()); - - for (Node node : jsonGraph.getNodes()) { - ((MemoryGraph)memoryPolicyStore.graph()).addNode(node.getName(), node.getType(), node.getProperties()); - } - - for (String[] assignment : jsonGraph.getAssignments()) { - ((MemoryGraph)memoryPolicyStore.graph()).assignInternal(assignment[0], assignment[1]); - } - - for (Map.Entry> e : jsonGraph.getAssociations().entrySet()) { - for (Map.Entry e2 : e.getValue().entrySet()) { - ((MemoryGraph)memoryPolicyStore.graph()).associateInternal(e.getKey(), e2.getKey(), e2.getValue()); - } - } - } -} diff --git a/src/main/java/gov/nist/csd/pm/pap/memory/MemoryPolicySerializer.java b/src/main/java/gov/nist/csd/pm/pap/memory/MemoryPolicySerializer.java deleted file mode 100644 index a3fd1551b..000000000 --- a/src/main/java/gov/nist/csd/pm/pap/memory/MemoryPolicySerializer.java +++ /dev/null @@ -1,130 +0,0 @@ -package gov.nist.csd.pm.pap.memory; - -import com.google.gson.Gson; -import gov.nist.csd.pm.policy.Graph; -import gov.nist.csd.pm.policy.PolicySerializer; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.json.JSONGraph; -import gov.nist.csd.pm.policy.json.JSONPolicy; -import gov.nist.csd.pm.policy.json.JSONUserDefinedPML; -import gov.nist.csd.pm.policy.model.access.AccessRightSet; -import gov.nist.csd.pm.policy.model.graph.nodes.Node; -import gov.nist.csd.pm.policy.model.graph.relationships.Association; -import gov.nist.csd.pm.policy.model.obligation.Obligation; -import gov.nist.csd.pm.policy.model.prohibition.Prohibition; -import gov.nist.csd.pm.policy.pml.PMLSerializer; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; -import org.apache.commons.lang3.SerializationUtils; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import static gov.nist.csd.pm.policy.model.graph.nodes.NodeType.ANY; -import static gov.nist.csd.pm.policy.model.graph.nodes.NodeType.UA; -import static gov.nist.csd.pm.policy.model.graph.nodes.Properties.NO_PROPERTIES; - -public class MemoryPolicySerializer implements PolicySerializer { - - private MemoryPolicyStore memoryPolicyStore; - - public MemoryPolicySerializer(MemoryPolicyStore memoryPolicyStore) { - this.memoryPolicyStore = memoryPolicyStore; - } - - @Override - public String toJSON() throws PMException { - return new Gson().toJson(toJSONPolicy()); - } - - @Override - public String toPML() throws PMException { - return new PMLSerializer(memoryPolicyStore).toPML(false); - } - - public JSONPolicy toJSONPolicy() throws PMException { - String jsonGraph = graphToJson(); - String jsonProhibitions = prohibitionsToJson(); - String jsonObligations = obligationsToJson(); - String jsonUserDefinedPML = userDefinedPMLToJson(); - - return new JSONPolicy(jsonGraph, jsonProhibitions, jsonObligations, jsonUserDefinedPML); - } - - private String userDefinedPMLToJson() throws PMException { - Map functionBytes = new HashMap<>(); - Map functions = memoryPolicyStore.userDefinedPML().getFunctions(); - for (Map.Entry f : functions.entrySet()) { - functionBytes.put(f.getKey(), SerializationUtils.serialize(f.getValue())); - } - - Map constantBytes = new HashMap<>(); - Map constants = memoryPolicyStore.userDefinedPML().getConstants(); - for (Map.Entry c : constants.entrySet()) { - constantBytes.put(c.getKey(), SerializationUtils.serialize(c.getValue())); - } - - return new Gson().toJson(new JSONUserDefinedPML( - functionBytes, - constantBytes - )); - } - - private String obligationsToJson() throws PMException { - List obligations = memoryPolicyStore.obligations().getAll(); - List bytes = new ArrayList<>(); - for (Obligation o : obligations) { - bytes.add(SerializationUtils.serialize(o)); - } - - return new Gson().toJson(bytes); - } - - private String prohibitionsToJson() throws PMException { - Map> prohibitions = memoryPolicyStore.prohibitions().getAll(); - List bytes = new ArrayList<>(); - for (List proList : prohibitions.values()) { - for (Prohibition p : proList) { - bytes.add(SerializationUtils.serialize(p)); - } - } - - return new Gson().toJson(bytes); - } - - private String graphToJson() throws PMException { - Graph graph = memoryPolicyStore.graph(); - AccessRightSet accessRightSet = graph.getResourceAccessRights(); - List nodes = new ArrayList<>(); - List assignments = new ArrayList<>(); - Map> associations = new HashMap<>(); - - List search = graph.search(ANY, NO_PROPERTIES); - for (String s : search) { - Node node = graph.getNode(s); - nodes.add(node); - - List children = graph.getChildren(s); - for (String c : children) { - assignments.add(new String[]{c, s}); - } - - if (node.getType() == UA) { - List assocs = graph.getAssociationsWithSource(s); - - Map assocsMap = associations.getOrDefault(s, new HashMap<>()); - for (Association a : assocs) { - assocsMap.put(a.getTarget(), a.getAccessRightSet()); - } - - associations.put(s, assocsMap); - } - } - - JSONGraph jsonGraph = new JSONGraph(accessRightSet, nodes, assignments, associations); - return new Gson().toJson(jsonGraph); - } - -} diff --git a/src/main/java/gov/nist/csd/pm/pap/memory/MemoryPolicyStore.java b/src/main/java/gov/nist/csd/pm/pap/memory/MemoryPolicyStore.java deleted file mode 100644 index 72dca6621..000000000 --- a/src/main/java/gov/nist/csd/pm/pap/memory/MemoryPolicyStore.java +++ /dev/null @@ -1,135 +0,0 @@ -package gov.nist.csd.pm.pap.memory; - -import gov.nist.csd.pm.pap.PolicyStore; -import gov.nist.csd.pm.policy.*; -import gov.nist.csd.pm.policy.events.PolicySynchronizationEvent; -import gov.nist.csd.pm.policy.exceptions.PMException; - -import java.io.Serializable; - -public class MemoryPolicyStore extends PolicyStore { - - private MemoryGraph graph; - private MemoryProhibitions prohibitions; - private MemoryObligations obligations; - private MemoryUserDefinedPML userDefinedPML; - - private boolean inTx; - private int txCounter; - private TxPolicyStore txPolicyStore; - - public MemoryPolicyStore() { - this.graph = new MemoryGraph(); - this.prohibitions = new MemoryProhibitions(); - this.obligations = new MemoryObligations(); - this.userDefinedPML = new MemoryUserDefinedPML(); - } - - public MemoryPolicyStore(Graph graph, Prohibitions prohibitions, Obligations obligations, UserDefinedPML userDefinedPML) throws PMException { - this.graph = new MemoryGraph(graph); - this.prohibitions = new MemoryProhibitions(prohibitions); - this.obligations = new MemoryObligations(obligations); - this.userDefinedPML = new MemoryUserDefinedPML(userDefinedPML); - } - - MemoryPolicyStore(MemoryGraph graph, MemoryProhibitions prohibitions, MemoryObligations obligations, MemoryUserDefinedPML userDefinedPML) throws PMException { - this.graph = graph; - this.prohibitions = prohibitions; - this.obligations = obligations; - this.userDefinedPML = userDefinedPML; - } - - @Override - public Graph graph() { - return graph; - } - - @Override - public Prohibitions prohibitions() { - return prohibitions; - } - - @Override - public Obligations obligations() { - return obligations; - } - - @Override - public UserDefinedPML userDefinedPML() { - return userDefinedPML; - } - - @Override - public PolicySerializer serialize() { - return new MemoryPolicySerializer(this); - } - - @Override - public PolicyDeserializer deserialize() { - return new MemoryPolicyDeserializer(this); - } - - @Override - public PolicySynchronizationEvent policySync() { - return new PolicySynchronizationEvent( - this - ); - } - - @Override - public void beginTx() throws PMException { - if (!inTx) { - txPolicyStore = new TxPolicyStore(this); - } - - inTx = true; - txCounter++; - - MemoryTx tx = new MemoryTx(true, txCounter, txPolicyStore); - graph.tx = tx; - prohibitions.tx = tx; - obligations.tx = tx; - userDefinedPML.tx = tx; - } - - @Override - public void commit() throws PMException { - txCounter--; - if(txCounter == 0) { - inTx = false; - txPolicyStore.clearEvents(); - - MemoryTx tx = new MemoryTx(false, txCounter, txPolicyStore); - graph.tx = tx; - prohibitions.tx = tx; - obligations.tx = tx; - userDefinedPML.tx = tx; - } - } - - @Override - public void rollback() throws PMException { - inTx = false; - txCounter = 0; - - MemoryTx tx = new MemoryTx(false, txCounter, txPolicyStore); - graph.tx = tx; - prohibitions.tx = tx; - obligations.tx = tx; - userDefinedPML.tx = tx; - - TxPolicyEventListener txPolicyEventListener = txPolicyStore.getTxPolicyEventListener(); - txPolicyEventListener.revert(this); - } - - @Override - protected void reset() throws PMException { - graph = new MemoryGraph(); - prohibitions = new MemoryProhibitions(); - obligations = new MemoryObligations(); - userDefinedPML = new MemoryUserDefinedPML(); - - // a call to rollback will reset tx fields - rollback(); - } -} diff --git a/src/main/java/gov/nist/csd/pm/pap/memory/MemoryPolicyStoreEventHandler.java b/src/main/java/gov/nist/csd/pm/pap/memory/MemoryPolicyStoreEventHandler.java deleted file mode 100644 index 462a25494..000000000 --- a/src/main/java/gov/nist/csd/pm/pap/memory/MemoryPolicyStoreEventHandler.java +++ /dev/null @@ -1,20 +0,0 @@ -package gov.nist.csd.pm.pap.memory; - -import gov.nist.csd.pm.policy.events.*; -import gov.nist.csd.pm.policy.exceptions.PMException; - -public class MemoryPolicyStoreEventHandler extends BasePolicyEventHandler { - - public MemoryPolicyStoreEventHandler(MemoryPolicyStore store) { - super(store); - } - - @Override - public void handlePolicyEvent(PolicyEvent event) throws PMException { - if (event instanceof PolicySynchronizationEvent policySynchronizationEvent) { - policy = policySynchronizationEvent.getPolicyStore(); - } else { - super.handlePolicyEvent(event); - } - } -} diff --git a/src/main/java/gov/nist/csd/pm/pap/memory/MemoryProhibitions.java b/src/main/java/gov/nist/csd/pm/pap/memory/MemoryProhibitions.java deleted file mode 100644 index b2f7ae257..000000000 --- a/src/main/java/gov/nist/csd/pm/pap/memory/MemoryProhibitions.java +++ /dev/null @@ -1,126 +0,0 @@ -package gov.nist.csd.pm.pap.memory; - -import com.google.gson.Gson; -import gov.nist.csd.pm.policy.Prohibitions; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.exceptions.ProhibitionDoesNotExistException; -import gov.nist.csd.pm.policy.model.access.AccessRightSet; -import gov.nist.csd.pm.policy.model.prohibition.ContainerCondition; -import gov.nist.csd.pm.policy.model.prohibition.Prohibition; -import gov.nist.csd.pm.policy.model.prohibition.ProhibitionSubject; - -import java.io.Serializable; -import java.util.*; - -class MemoryProhibitions implements Prohibitions, Serializable { - - protected MemoryTx tx; - private Map> prohibitions; - - public MemoryProhibitions() { - this.prohibitions = new HashMap<>(); - this.tx = new MemoryTx(false, 0, null); - } - - public MemoryProhibitions(Map> prohibitions) { - this.prohibitions = prohibitions; - this.tx = new MemoryTx(false, 0, null); - } - - public MemoryProhibitions(Prohibitions prohibitions) throws PMException { - this.prohibitions = prohibitions.getAll(); - this.tx = new MemoryTx(false, 0, null); - } - - @Override - public void create(String label, ProhibitionSubject subject, AccessRightSet accessRightSet, boolean intersection, ContainerCondition... containerConditions) throws PMException { - if (tx.active()) { - tx.policyStore().prohibitions().create(label, subject, accessRightSet, intersection, containerConditions); - } - - List existingPros = prohibitions.getOrDefault(subject.getName(), new ArrayList<>()); - existingPros.add(new Prohibition(label, subject, accessRightSet, intersection, Arrays.asList(containerConditions))); - prohibitions.put(subject.getName(), existingPros); - } - - @Override - public void update(String label, ProhibitionSubject subject, AccessRightSet accessRightSet, boolean intersection, ContainerCondition... containerConditions) throws PMException { - if (tx.active()) { - tx.policyStore().prohibitions().update(label, subject, accessRightSet, intersection, containerConditions); - } - - delete(label); - create(label, subject, accessRightSet, intersection, containerConditions); - } - - @Override - public void delete(String label) throws PMException { - if (tx.active()) { - tx.policyStore().prohibitions().delete(label); - } - - for(String subject : prohibitions.keySet()) { - List ps = prohibitions.get(subject); - Iterator iterator = ps.iterator(); - while (iterator.hasNext()) { - Prohibition p = iterator.next(); - if(p.getLabel().equals(label)) { - iterator.remove(); - prohibitions.put(subject, ps); - } - } - } - } - - @Override - public Map> getAll() { - Map> retProhibitions = new HashMap<>(); - for (String subject : prohibitions.keySet()) { - retProhibitions.put(subject, prohibitions.get(subject)); - } - - return retProhibitions; - } - - @Override - public boolean exists(String label) throws PMException { - for (Map.Entry> e : prohibitions.entrySet()) { - for (Prohibition p : e.getValue()) { - if (p.getLabel().equals(label)) { - return true; - } - } - } - - return false; - } - - @Override - public List getWithSubject(String subject) { - List subjectPros = prohibitions.get(subject); - if (subjectPros == null) { - return new ArrayList<>(); - } - - return new ArrayList<>(subjectPros); - } - - @Override - public Prohibition get(String label) throws PMException { - for (String subject : prohibitions.keySet()) { - List subjectPros = prohibitions.get(subject); - for (Prohibition p : subjectPros) { - if (p.getLabel().equals(label)) { - return p; - } - } - } - - throw new ProhibitionDoesNotExistException(label); - } - - public void fromJson(String json) { - this.prohibitions = new Gson().fromJson(json, Map.class); - } - -} diff --git a/src/main/java/gov/nist/csd/pm/pap/memory/MemoryTx.java b/src/main/java/gov/nist/csd/pm/pap/memory/MemoryTx.java deleted file mode 100644 index 8f4244aed..000000000 --- a/src/main/java/gov/nist/csd/pm/pap/memory/MemoryTx.java +++ /dev/null @@ -1,4 +0,0 @@ -package gov.nist.csd.pm.pap.memory; - -public record MemoryTx(boolean active, int counter, TxPolicyStore policyStore) { -} diff --git a/src/main/java/gov/nist/csd/pm/pap/memory/MemoryUserDefinedPML.java b/src/main/java/gov/nist/csd/pm/pap/memory/MemoryUserDefinedPML.java deleted file mode 100644 index 7e04275f1..000000000 --- a/src/main/java/gov/nist/csd/pm/pap/memory/MemoryUserDefinedPML.java +++ /dev/null @@ -1,92 +0,0 @@ -package gov.nist.csd.pm.pap.memory; - -import gov.nist.csd.pm.policy.UserDefinedPML; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; - -import java.io.Serializable; -import java.util.HashMap; -import java.util.Map; - -class MemoryUserDefinedPML implements UserDefinedPML, Serializable { - - protected MemoryTx tx; - private Map functions; - private Map constants; - - public MemoryUserDefinedPML() { - this.functions = new HashMap<>(); - this.constants = new HashMap<>(); - this.tx = new MemoryTx(false, 0, null); - } - - public MemoryUserDefinedPML(Map functions, Map constants) { - this.functions = functions; - this.constants = constants; - this.tx = new MemoryTx(false, 0, null); - } - - public MemoryUserDefinedPML(UserDefinedPML userDefinedPML) throws PMException { - this.functions = userDefinedPML.getFunctions(); - this.constants = userDefinedPML.getConstants(); - this.tx = new MemoryTx(false, 0, null); - } - - @Override - public void createFunction(FunctionDefinitionStatement functionDefinitionStatement) throws PMException { - if (tx.active()) { - tx.policyStore().userDefinedPML().createFunction(functionDefinitionStatement); - } - - functions.put(functionDefinitionStatement.getFunctionName(), functionDefinitionStatement); - } - - @Override - public void deleteFunction(String functionName) throws PMException { - if (tx.active()) { - tx.policyStore().userDefinedPML().deleteFunction(functionName); - } - - functions.remove(functionName); - } - - @Override - public Map getFunctions() { - return new HashMap<>(functions); - } - - @Override - public FunctionDefinitionStatement getFunction(String name) throws PMException { - return getFunctions().get(name); - } - - @Override - public void createConstant(String constantName, Value constantValue) throws PMException { - if (tx.active()) { - tx.policyStore().userDefinedPML().createConstant(constantName, constantValue); - } - - constants.put(constantName, constantValue); - } - - @Override - public void deleteConstant(String constName) throws PMException { - if (tx.active()) { - tx.policyStore().userDefinedPML().deleteConstant(constName); - } - - constants.remove(constName); - } - - @Override - public Map getConstants() { - return new HashMap<>(constants); - } - - @Override - public Value getConstant(String name) { - return getConstants().get(name); - } - -} diff --git a/src/main/java/gov/nist/csd/pm/pap/memory/Object.java b/src/main/java/gov/nist/csd/pm/pap/memory/Object.java deleted file mode 100644 index 5787dbfee..000000000 --- a/src/main/java/gov/nist/csd/pm/pap/memory/Object.java +++ /dev/null @@ -1,82 +0,0 @@ -package gov.nist.csd.pm.pap.memory; - -import gov.nist.csd.pm.policy.model.access.AccessRightSet; -import gov.nist.csd.pm.policy.model.graph.nodes.Node; -import gov.nist.csd.pm.policy.model.graph.nodes.NodeType; -import gov.nist.csd.pm.policy.model.graph.relationships.Association; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; - -class Object implements Vertex { - - private final Node node; - private final List parents; - - public Object(String name, Map properties) { - this.node = new Node(name, NodeType.O, properties); - this.parents = new ArrayList<>(); - } - - private Object(Node node, List parents) { - this.node = new Node(node); - this.parents = new ArrayList<>(parents); - } - - @Override - public Vertex copy() { - return new Object(node, parents); - } - - @Override - public void setProperties(Map properties) { - node.setProperties(properties); - } - - @Override - public Node getNode() { - return node; - } - - @Override - public List getParents() { - return parents; - } - - @Override - public List getChildren() { - return Collections.emptyList(); - } - - @Override - public List getOutgoingAssociations() { - return Collections.emptyList(); - } - - @Override - public List getIncomingAssociations() { - return Collections.emptyList(); - } - - @Override - public void addAssignment(String child, String parent) { - parents.add(parent); - } - - @Override - public void removeAssignment(String child, String parent) { - parents.remove(parent); - } - - @Override - public void addAssociation(String ua, String target, AccessRightSet accessRightSet) { - - } - - @Override - public void removeAssociation(String ua, String target) { - - } -} diff --git a/src/main/java/gov/nist/csd/pm/pap/memory/ObjectAttribute.java b/src/main/java/gov/nist/csd/pm/pap/memory/ObjectAttribute.java deleted file mode 100644 index c407efe1d..000000000 --- a/src/main/java/gov/nist/csd/pm/pap/memory/ObjectAttribute.java +++ /dev/null @@ -1,96 +0,0 @@ -package gov.nist.csd.pm.pap.memory; - -import gov.nist.csd.pm.policy.model.access.AccessRightSet; -import gov.nist.csd.pm.policy.model.graph.nodes.Node; -import gov.nist.csd.pm.policy.model.graph.nodes.NodeType; -import gov.nist.csd.pm.policy.model.graph.relationships.Association; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; - -class ObjectAttribute implements Vertex { - - private final Node node; - private final List parents; - private final List children; - private final List associations; - - public ObjectAttribute(String name, Map properties) { - this.node = new Node(name, NodeType.OA, properties); - this.parents = new ArrayList<>(); - this.children = new ArrayList<>(); - this.associations = new ArrayList<>(); - } - - private ObjectAttribute(Node node, List parents, List children, List associations) { - this.node = new Node(node); - this.parents = new ArrayList<>(parents); - this.children = new ArrayList<>(children); - this.associations = new ArrayList<>(associations); - } - - @Override - public Vertex copy() { - return new ObjectAttribute(node, parents, children, associations); - } - - @Override - public void setProperties(Map properties) { - node.setProperties(properties); - } - - @Override - public Node getNode() { - return node; - } - - @Override - public List getParents() { - return parents; - } - - @Override - public List getChildren() { - return children; - } - - @Override - public List getOutgoingAssociations() { - return Collections.emptyList(); - } - - @Override - public List getIncomingAssociations() { - return associations; - } - - @Override - public void addAssignment(String child, String parent) { - if (child.equals(node.getName())) { - parents.add(parent); - } else { - children.add(child); - } - } - - @Override - public void removeAssignment(String child, String parent) { - if (child.equals(node.getName())) { - parents.remove(parent); - } else { - children.remove(child); - } - } - - @Override - public void addAssociation(String ua, String target, AccessRightSet accessRightSet) { - associations.add(new Association(ua, target, accessRightSet)); - } - - @Override - public void removeAssociation(String ua, String target) { - associations.remove(new Association(ua, target)); - } -} diff --git a/src/main/java/gov/nist/csd/pm/pap/memory/PolicyClass.java b/src/main/java/gov/nist/csd/pm/pap/memory/PolicyClass.java deleted file mode 100644 index 7950b27c6..000000000 --- a/src/main/java/gov/nist/csd/pm/pap/memory/PolicyClass.java +++ /dev/null @@ -1,82 +0,0 @@ -package gov.nist.csd.pm.pap.memory; - -import gov.nist.csd.pm.policy.model.access.AccessRightSet; -import gov.nist.csd.pm.policy.model.graph.nodes.Node; -import gov.nist.csd.pm.policy.model.graph.nodes.NodeType; -import gov.nist.csd.pm.policy.model.graph.relationships.Association; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; - -class PolicyClass implements Vertex { - - private final Node node; - private final List children; - - public PolicyClass(String name, Map properties) { - this.node = new Node(name, NodeType.PC, properties); - this.children = new ArrayList<>(); - } - - private PolicyClass(Node node, List children) { - this.node = new Node(node); - this.children = new ArrayList<>(children); - } - - @Override - public Vertex copy() { - return new PolicyClass(node, children); - } - - @Override - public void setProperties(Map properties) { - node.setProperties(properties); - } - - @Override - public Node getNode() { - return node; - } - - @Override - public List getParents() { - return Collections.emptyList(); - } - - @Override - public List getChildren() { - return children; - } - - @Override - public List getOutgoingAssociations() { - return Collections.emptyList(); - } - - @Override - public List getIncomingAssociations() { - return Collections.emptyList(); - } - - @Override - public void addAssignment(String child, String parent) { - children.add(child); - } - - @Override - public void removeAssignment(String child, String parent) { - children.remove(child); - } - - @Override - public void addAssociation(String ua, String target, AccessRightSet accessRightSet) { - - } - - @Override - public void removeAssociation(String ua, String target) { - - } -} diff --git a/src/main/java/gov/nist/csd/pm/pap/memory/TxCmd.java b/src/main/java/gov/nist/csd/pm/pap/memory/TxCmd.java deleted file mode 100644 index 9e0792067..000000000 --- a/src/main/java/gov/nist/csd/pm/pap/memory/TxCmd.java +++ /dev/null @@ -1,387 +0,0 @@ -package gov.nist.csd.pm.pap.memory; - -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.graph.nodes.Node; -import gov.nist.csd.pm.policy.model.graph.nodes.NodeType; -import gov.nist.csd.pm.policy.model.graph.relationships.Association; -import gov.nist.csd.pm.policy.model.obligation.Obligation; -import gov.nist.csd.pm.policy.model.obligation.Rule; -import gov.nist.csd.pm.policy.model.prohibition.ContainerCondition; -import gov.nist.csd.pm.policy.model.prohibition.Prohibition; - -import java.util.*; - -import static gov.nist.csd.pm.policy.model.graph.nodes.NodeType.PC; - -interface TxCmd { - - void revert(MemoryPolicyStore store) throws PMException; - - class CreatePolicyClassTxCmd implements TxCmd { - - private String name; - private Map properties; - - public CreatePolicyClassTxCmd(String name, Map properties) { - this.name = name; - this.properties = properties; - } - - @Override - public void revert(MemoryPolicyStore store) throws PMException { - store.graph().deleteNode(name); - } - } - - class CreateObjectAttributeTxCmd implements TxCmd { - private final String name; - private final Map properties; - private final String parent; - private final String[] parents; - - public CreateObjectAttributeTxCmd(String name, Map properties, String parent, String... parents) { - this.name = name; - this.properties = properties; - this.parent = parent; - this.parents = parents; - } - - @Override - public void revert(MemoryPolicyStore store) throws PMException { - store.graph().deleteNode(name); - } - } - - class CreateUserAttributeTxCmd implements TxCmd { - private final String name; - private final Map properties; - private final String parent; - private final String[] parents; - - public CreateUserAttributeTxCmd(String name, Map properties, String parent, String... parents) { - this.name = name; - this.properties = properties; - this.parent = parent; - this.parents = parents; - } - - @Override - public void revert(MemoryPolicyStore store) throws PMException { - store.graph().deleteNode(name); - } - } - - class CreateObjectTxCmd implements TxCmd { - private final String name; - private final Map properties; - private final String parent; - private final String[] parents; - - public CreateObjectTxCmd(String name, Map properties, String parent, String... parents) { - this.name = name; - this.properties = properties; - this.parent = parent; - this.parents = parents; - } - - @Override - public void revert(MemoryPolicyStore store) throws PMException { - store.graph().deleteNode(name); - } - } - - class CreateUserTxCmd implements TxCmd { - private final String name; - private final Map properties; - private final String parent; - private final String[] parents; - - public CreateUserTxCmd(String name, Map properties, String parent, String... parents) { - this.name = name; - this.properties = properties; - this.parent = parent; - this.parents = parents; - } - - @Override - public void revert(MemoryPolicyStore store) throws PMException { - store.graph().deleteNode(name); - } - } - - class SetNodePropertiesTxCmd implements TxCmd { - private final String name; - private final Map oldProperties; - private final Map newProperties; - - public SetNodePropertiesTxCmd(String name, Map oldProperties, Map newProperties) { - this.name = name; - this.oldProperties = oldProperties; - this.newProperties = newProperties; - } - - @Override - public void revert(MemoryPolicyStore store) throws PMException { - store.graph().setNodeProperties(name, oldProperties); - } - } - - class DeleteNodeTxCmd implements TxCmd { - private final String name; - private final Node nodeToDelete; - private final List parents; - - public DeleteNodeTxCmd(String name, Node nodeToDelete, List parents) { - this.name = name; - this.nodeToDelete = nodeToDelete; - this.parents = parents; - } - - @Override - public void revert(MemoryPolicyStore store) throws PMException { - NodeType type = nodeToDelete.getType(); - Map properties = nodeToDelete.getProperties(); - String initialParent = ""; - String[] parentsArr = new String[parents.size()]; - if (type != PC) { - initialParent = parents.get(0); - parents.remove(0); - parentsArr = parents.toArray(new String[]{}); - } - - switch (type) { - case PC -> store.graph().createPolicyClass(name, properties); - case OA -> store.graph().createObjectAttribute(name, properties, initialParent, parentsArr); - case UA -> store.graph().createUserAttribute(name, properties, initialParent, parentsArr); - case O -> store.graph().createObject(name, properties, initialParent, parentsArr); - case U -> store.graph().createUser(name, properties, initialParent, parentsArr); - } - } - } - - final class AssignTxCmd implements TxCmd { - private final String child; - private final String parent; - - public AssignTxCmd(String child, String parent) { - this.child = child; - this.parent = parent; - } - - @Override - public void revert(MemoryPolicyStore store) throws PMException { - store.graph().deassign(child, parent); - } - } - - class DeassignTxCmd implements TxCmd { - private final String child; - private final String parent; - - public DeassignTxCmd(String child, String parent) { - this.child = child; - this.parent = parent; - } - - @Override - public void revert(MemoryPolicyStore store) throws PMException { - store.graph().assign(child, parent); - } - } - - class AssociateTxCmd implements TxCmd { - private final Association association; - - public AssociateTxCmd(Association association) { - this.association = association; - } - - @Override - public void revert(MemoryPolicyStore store) throws PMException { - store.graph().dissociate(association.getSource(), association.getTarget()); - } - } - - class DissociateTxCmd implements TxCmd { - private final Association association; - - public DissociateTxCmd(Association association) { - this.association = association; - } - - @Override - public void revert(MemoryPolicyStore store) throws PMException { - store.graph().associate(association.getSource(), association.getTarget(), association.getAccessRightSet()); - } - } - - class CreateProhibitionTxCmd implements TxCmd { - private final Prohibition prohibition; - - public CreateProhibitionTxCmd(Prohibition prohibition) { - this.prohibition = prohibition; - } - - @Override - public void revert(MemoryPolicyStore store) throws PMException { - store.prohibitions().delete(prohibition.getLabel()); - } - } - - class UpdateProhibitionTxCmd implements TxCmd { - private final Prohibition newProhibition; - private final Prohibition oldProhibition; - - public UpdateProhibitionTxCmd(Prohibition newProhibition, Prohibition oldProhibition) { - this.newProhibition = newProhibition; - this.oldProhibition = oldProhibition; - } - - @Override - public void revert(MemoryPolicyStore store) throws PMException { - store.prohibitions().update( - oldProhibition.getLabel(), - oldProhibition.getSubject(), - oldProhibition.getAccessRightSet(), - oldProhibition.isIntersection(), - oldProhibition.getContainers().toArray(new ContainerCondition[]{}) - ); - } - } - - class DeleteProhibitionTxCmd implements TxCmd { - private final Prohibition prohibitionToDelete; - - public DeleteProhibitionTxCmd(Prohibition prohibitionToDelete) { - this.prohibitionToDelete = prohibitionToDelete; - } - - @Override - public void revert(MemoryPolicyStore store) throws PMException { - store.prohibitions().create( - prohibitionToDelete.getLabel(), - prohibitionToDelete.getSubject(), - prohibitionToDelete.getAccessRightSet(), - prohibitionToDelete.isIntersection(), - prohibitionToDelete.getContainers().toArray(new ContainerCondition[]{}) - ); - } - } - - class CreateObligationTxCmd implements TxCmd { - private final Obligation obligation; - - public CreateObligationTxCmd(Obligation obligation) { - this.obligation = obligation; - } - - @Override - public void revert(MemoryPolicyStore store) throws PMException { - store.obligations().delete(obligation.getLabel()); - } - } - - class UpdateObligationTxCmd implements TxCmd { - private final Obligation newObligation; - private final Obligation oldObligation; - - public UpdateObligationTxCmd(Obligation newObligation, Obligation oldObligation) { - this.newObligation = newObligation; - this.oldObligation = oldObligation; - } - - @Override - public void revert(MemoryPolicyStore store) throws PMException { - store.obligations().update( - oldObligation.getAuthor(), - oldObligation.getLabel(), - oldObligation.getRules().toArray(new Rule[]{}) - ); - } - } - - class DeleteObligationTxCmd implements TxCmd { - private final Obligation obligationToDelete; - public DeleteObligationTxCmd(Obligation obligationToDelete) { - this.obligationToDelete = obligationToDelete; - } - - @Override - public void revert(MemoryPolicyStore store) throws PMException { - store.obligations().create( - obligationToDelete.getAuthor(), - obligationToDelete.getLabel(), - obligationToDelete.getRules().toArray(new Rule[]{}) - ); - } - } - - class AddFunctionTxCmd implements TxCmd { - private final FunctionDefinitionStatement functionDefinitionStatement; - - public AddFunctionTxCmd(FunctionDefinitionStatement functionDefinitionStatement) { - this.functionDefinitionStatement = functionDefinitionStatement; - } - - @Override - public void revert(MemoryPolicyStore store) throws PMException { - store.userDefinedPML().deleteFunction(functionDefinitionStatement.getFunctionName()); - } - } - - class RemoveFunctionTxCmd implements TxCmd { - private final FunctionDefinitionStatement functionDefinitionStatement; - - public RemoveFunctionTxCmd(FunctionDefinitionStatement functionDefinitionStatement) { - this.functionDefinitionStatement = functionDefinitionStatement; - } - - @Override - public void revert(MemoryPolicyStore store) throws PMException { - store.userDefinedPML().createFunction(functionDefinitionStatement); - } - - } - - class AddConstantTxCmd implements TxCmd { - private final String constantName; - private final Value value; - - public AddConstantTxCmd(String constantName, Value value) { - this.constantName = constantName; - this.value = value; - } - - @Override - public void revert(MemoryPolicyStore store) throws PMException { - store.userDefinedPML().deleteConstant(constantName); - } - } - - class RemoveConstantTxCmd implements TxCmd { - private final String constantName; - private final Value oldValue; - - public RemoveConstantTxCmd(String constantName, Value oldValue) { - this.constantName = constantName; - this.oldValue = oldValue; - } - - @Override - public void revert(MemoryPolicyStore store) throws PMException { - store.userDefinedPML().createConstant(constantName, oldValue); - } - } - - class NoopTxCmd implements TxCmd { - public NoopTxCmd() { - } - - @Override - public void revert(MemoryPolicyStore store) { - - } - } -} diff --git a/src/main/java/gov/nist/csd/pm/pap/memory/TxEvents.java b/src/main/java/gov/nist/csd/pm/pap/memory/TxEvents.java deleted file mode 100644 index c8844986a..000000000 --- a/src/main/java/gov/nist/csd/pm/pap/memory/TxEvents.java +++ /dev/null @@ -1,142 +0,0 @@ -package gov.nist.csd.pm.pap.memory; - -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; -import gov.nist.csd.pm.policy.events.*; -import gov.nist.csd.pm.policy.model.access.AccessRightSet; -import gov.nist.csd.pm.policy.model.graph.nodes.Node; -import gov.nist.csd.pm.policy.model.obligation.Obligation; -import gov.nist.csd.pm.policy.model.prohibition.Prohibition; - -import java.util.List; -import java.util.Map; - -public class TxEvents { - - private TxEvents() {} - - public static class MemoryDeleteNodeEvent extends DeleteNodeEvent { - - private Node node; - private List parents; - - public MemoryDeleteNodeEvent(String name, Node node, List parents) { - super(name); - this.node = node; - this.parents = parents; - } - - public Node getNode() { - return node; - } - - public List getParents() { - return parents; - } - } - - public static class MemoryDeleteObligationEvent extends DeleteObligationEvent { - - private Obligation obligationToDelete; - - public MemoryDeleteObligationEvent(Obligation obligationToDelete) { - super(obligationToDelete); - this.obligationToDelete = obligationToDelete; - } - - public Obligation getObligationToDelete() { - return obligationToDelete; - } - } - - public static class MemoryDeleteProhibitionEvent extends DeleteProhibitionEvent { - - public MemoryDeleteProhibitionEvent(Prohibition prohibition) { - super(prohibition); - } - } - - public static class MemoryDissociateEvent extends DissociateEvent { - - private AccessRightSet accessRightSet; - - public MemoryDissociateEvent(String ua, String target, AccessRightSet accessRightSet) { - super(ua, target); - this.accessRightSet = accessRightSet; - } - - public AccessRightSet getAccessRightSet() { - return accessRightSet; - } - } - - public static class MemoryRemoveConstantEvent extends RemoveConstantEvent { - - private Value value; - - public MemoryRemoveConstantEvent(String constantName, Value value) { - super(constantName); - this.value = value; - } - - public Value getValue() { - return value; - } - } - - public static class MemoryRemoveFunctionEvent extends RemoveFunctionEvent { - - private FunctionDefinitionStatement functionDefinitionStatement; - - public MemoryRemoveFunctionEvent(FunctionDefinitionStatement functionDefinitionStatement) { - super(functionDefinitionStatement.getFunctionName()); - this.functionDefinitionStatement = functionDefinitionStatement; - } - - public FunctionDefinitionStatement getFunctionDefinitionStatement() { - return functionDefinitionStatement; - } - } - - public static class MemorySetNodePropertiesEvent extends SetNodePropertiesEvent { - - private Map oldProps; - - public MemorySetNodePropertiesEvent(String name, Map oldProps, Map newProps) { - super(name, newProps); - this.oldProps = oldProps; - } - - public Map getOldProps() { - return oldProps; - } - } - - public static class MemoryUpdateObligationEvent extends UpdateObligationEvent { - - private Obligation oldObl; - - public MemoryUpdateObligationEvent(Obligation newObl, Obligation oldObl) { - super(newObl.getAuthor(), newObl.getLabel(), newObl.getRules()); - this.oldObl = oldObl; - } - - public Obligation getOldObl() { - return oldObl; - } - } - - public static class MemoryUpdateProhibitionEvent extends UpdateProhibitionEvent { - - private Prohibition oldPro; - - public MemoryUpdateProhibitionEvent(Prohibition newPro, Prohibition oldPro) { - super(newPro.getLabel(), newPro.getSubject(), newPro.getAccessRightSet(), newPro.isIntersection(), newPro.getContainers()); - this.oldPro = oldPro; - } - - public Prohibition getOldPro() { - return oldPro; - } - } -} diff --git a/src/main/java/gov/nist/csd/pm/pap/memory/TxPolicyEventListener.java b/src/main/java/gov/nist/csd/pm/pap/memory/TxPolicyEventListener.java deleted file mode 100644 index f5e0a223a..000000000 --- a/src/main/java/gov/nist/csd/pm/pap/memory/TxPolicyEventListener.java +++ /dev/null @@ -1,89 +0,0 @@ -package gov.nist.csd.pm.pap.memory; - -import gov.nist.csd.pm.policy.events.*; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.graph.relationships.Association; -import gov.nist.csd.pm.policy.model.obligation.Obligation; -import gov.nist.csd.pm.policy.model.prohibition.Prohibition; - -import java.util.ArrayList; -import java.util.List; - -class TxPolicyEventListener implements PolicyEventListener, TxCmd { - - private final List events; - - public TxPolicyEventListener() { - events = new ArrayList<>(); - } - - public List getEvents() { - return events; - } - - @Override - public void handlePolicyEvent(PolicyEvent event) { - this.events.add(event); - } - - @Override - public void revert(MemoryPolicyStore store) throws PMException { - for (int i = events.size()-1; i >= 0; i--) { - TxCmd cmd = eventToCmd(events.get(i)); - cmd.revert(store); - } - } - - private TxCmd eventToCmd(PolicyEvent event) { - if (event instanceof AddConstantEvent e) { - return new AddConstantTxCmd(e.getName(), e.getValue()); - } else if (event instanceof AddFunctionEvent e) { - return new AddFunctionTxCmd(e.getFunctionDefinitionStatement()); - } else if (event instanceof AssignEvent e) { - return new AssignTxCmd(e.getChild(), e.getParent()); - } else if (event instanceof AssignToEvent e) { - return new AssignTxCmd(e.getChild(), e.getParent()); - } else if (event instanceof AssociateEvent e) { - return new AssociateTxCmd(new Association(e.getUa(), e.getTarget(), e.getAccessRightSet())); - } else if (event instanceof CreateObjectAttributeEvent e) { - return new CreateObjectAttributeTxCmd(e.getName(), e.getProperties(), e.getInitialParent(), e.getAdditionalParents()); - } else if (event instanceof CreateObjectEvent e) { - return new CreateObjectTxCmd(e.getName(), e.getProperties(), e.getInitialParent(), e.getAdditionalParents()); - } else if (event instanceof CreateObligationEvent e) { - return new CreateObligationTxCmd(new Obligation(e.getAuthor(), e.getLabel(), e.getRules())); - } else if (event instanceof CreatePolicyClassEvent e) { - return new CreatePolicyClassTxCmd(e.getName(), e.getProperties()); - } else if (event instanceof CreateProhibitionEvent e) { - return new CreateProhibitionTxCmd(new Prohibition(e.getLabel(), e.getSubject(), e.getAccessRightSet(), e.isIntersection(), e.getContainers())); - } else if (event instanceof CreateUserAttributeEvent e) { - return new CreateUserAttributeTxCmd(e.getName(), e.getProperties(), e.getInitialParent(), e.getAdditionalParents()); - } else if (event instanceof CreateUserEvent e) { - return new CreateUserTxCmd(e.getName(), e.getProperties(), e.getInitialParent(), e.getAdditionalParents()); - } else if (event instanceof DeassignEvent e) { - return new DeassignTxCmd(e.getChild(), e.getParent()); - } else if (event instanceof TxEvents.MemoryDeleteNodeEvent e) { - return new DeleteNodeTxCmd(e.getName(), e.getNode(), e.getParents()); - } else if (event instanceof TxEvents.MemoryDeleteObligationEvent e) { - return new DeleteObligationTxCmd(e.getObligationToDelete()); - } else if (event instanceof TxEvents.MemoryDeleteProhibitionEvent e) { - return new DeleteProhibitionTxCmd(e.getProhibition()); - } else if (event instanceof TxEvents.MemoryDissociateEvent e) { - return new DissociateTxCmd(new Association(e.getUa(), e.getTarget(), e.getAccessRightSet())); - } else if (event instanceof TxEvents.MemoryRemoveConstantEvent e) { - return new RemoveConstantTxCmd(e.getName(), e.getValue()); - } else if (event instanceof TxEvents.MemoryRemoveFunctionEvent e) { - return new RemoveFunctionTxCmd(e.getFunctionDefinitionStatement()); - } else if (event instanceof TxEvents.MemorySetNodePropertiesEvent e) { - return new SetNodePropertiesTxCmd(e.getName(), e.getOldProps(), e.getProperties()); - } else if (event instanceof TxEvents.MemoryUpdateObligationEvent e) { - return new UpdateObligationTxCmd(new Obligation(e.getAuthor(), e.getLabel(), e.getRules()), e.getOldObl()); - } else if (event instanceof TxEvents.MemoryUpdateProhibitionEvent e) { - return new UpdateProhibitionTxCmd( - new Prohibition(e.getName(), e.getSubject(), e.getAccessRightSet(), e.isIntersection(), e.getContainers()), - e.getOldPro() - ); - } - - return new NoopTxCmd(); - } -} diff --git a/src/main/java/gov/nist/csd/pm/pap/memory/TxPolicyStore.java b/src/main/java/gov/nist/csd/pm/pap/memory/TxPolicyStore.java deleted file mode 100644 index 233614887..000000000 --- a/src/main/java/gov/nist/csd/pm/pap/memory/TxPolicyStore.java +++ /dev/null @@ -1,381 +0,0 @@ -package gov.nist.csd.pm.pap.memory; - -import gov.nist.csd.pm.policy.*; -import gov.nist.csd.pm.policy.model.graph.nodes.Node; -import gov.nist.csd.pm.policy.model.graph.nodes.NodeType; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; -import gov.nist.csd.pm.policy.events.*; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.AccessRightSet; -import gov.nist.csd.pm.policy.model.access.UserContext; -import gov.nist.csd.pm.policy.model.graph.relationships.Association; -import gov.nist.csd.pm.policy.model.obligation.Obligation; -import gov.nist.csd.pm.policy.model.obligation.Rule; -import gov.nist.csd.pm.policy.model.prohibition.ContainerCondition; -import gov.nist.csd.pm.policy.model.prohibition.Prohibition; -import gov.nist.csd.pm.policy.model.prohibition.ProhibitionSubject; - -import java.util.List; -import java.util.Map; - -import static gov.nist.csd.pm.policy.model.graph.nodes.Properties.NO_PROPERTIES; - -class TxPolicyStore implements Policy, PolicyEventEmitter { - - private final MemoryPolicyStore memoryPolicyStore; - - /** - * An event listener to track the events that occur during the transaction. - * These events will be committed to the target policy store on commit. - */ - protected TxPolicyEventListener txPolicyEventListener; - - private TxGraph txGraph; - private TxProhibitions txProhibitions; - private TxObligations txObligations; - private TxUserDefinedPML txUserDefinedPML; - - public TxPolicyStore(MemoryPolicyStore txStore) { - this.memoryPolicyStore = txStore; - this.txPolicyEventListener = new TxPolicyEventListener(); - this.txGraph = new TxGraph(); - this.txProhibitions = new TxProhibitions(); - this.txObligations = new TxObligations(); - this.txUserDefinedPML = new TxUserDefinedPML(); - } - - public TxPolicyEventListener getTxPolicyEventListener() { - return txPolicyEventListener; - } - - public void clearEvents() { - txPolicyEventListener = new TxPolicyEventListener(); - } - - @Override - public void addEventListener(PolicyEventListener listener, boolean sync) { - - } - - @Override - public void removeEventListener(PolicyEventListener listener) { - - } - - @Override - public void emitEvent(PolicyEvent event) { - txPolicyEventListener.handlePolicyEvent(event); - } - - @Override - public Graph graph() { - return txGraph; - } - - @Override - public Prohibitions prohibitions() { - return txProhibitions; - } - - @Override - public Obligations obligations() { - return txObligations; - } - - @Override - public UserDefinedPML userDefinedPML() { - return txUserDefinedPML; - } - - @Override - public PolicySerializer serialize() throws PMException { - return memoryPolicyStore.serialize(); - } - - @Override - public PolicyDeserializer deserialize() throws PMException { - return memoryPolicyStore.deserialize(); - } - - class TxGraph implements Graph { - @Override - public void setResourceAccessRights(AccessRightSet accessRightSet) { - emitEvent(new SetResourceAccessRightsEvent(accessRightSet)); - } - - @Override - public AccessRightSet getResourceAccessRights() { - return null; - } - - @Override - public String createPolicyClass(String name, Map properties) { - emitEvent(new CreatePolicyClassEvent(name, properties)); - return name; - } - - @Override - public String createPolicyClass(String name) { - return createPolicyClass(name, NO_PROPERTIES); - } - - @Override - public String createUserAttribute(String name, Map properties, String parent, String... parents) { - emitEvent(new CreateUserAttributeEvent(name, properties, parent, parents)); - return name; - } - - @Override - public String createUserAttribute(String name, String parent, String... parents) { - return createUserAttribute(name, NO_PROPERTIES, parent, parents); - } - - @Override - public String createObjectAttribute(String name, Map properties, String parent, String... parents) { - emitEvent(new CreateObjectAttributeEvent(name, properties, parent, parents)); - return name; - } - - @Override - public String createObjectAttribute(String name, String parent, String... parents) { - return createObjectAttribute(name, NO_PROPERTIES, parent, parents); - } - - @Override - public String createObject(String name, Map properties, String parent, String... parents) { - emitEvent(new CreateObjectEvent(name, properties, parent, parents)); - return name; - } - - @Override - public String createObject(String name, String parent, String... parents) { - return createObject(name, NO_PROPERTIES, parent, parents); - } - - @Override - public String createUser(String name, Map properties, String parent, String... parents) { - emitEvent(new CreateUserEvent(name, properties, parent, parents)); - return name; - } - - @Override - public String createUser(String name, String parent, String... parents) { - return createUser(name, NO_PROPERTIES, parent, parents); - } - - @Override - public void setNodeProperties(String name, Map properties) throws PMException { - emitEvent(new TxEvents.MemorySetNodePropertiesEvent(name, memoryPolicyStore.graph().getNode(name).getProperties(), properties)); - } - - @Override - public boolean nodeExists(String name) { - return false; - } - - @Override - public Node getNode(String name) { - return null; - } - - @Override - public List search(NodeType type, Map properties) { - return null; - } - - @Override - public List getPolicyClasses() { - return null; - } - - @Override - public void deleteNode(String name) throws PMException { - emitEvent(new TxEvents.MemoryDeleteNodeEvent( - name, - memoryPolicyStore.graph().getNode(name), - memoryPolicyStore.graph().getParents(name) - )); - } - - @Override - public void assign(String child, String parent) { - emitEvent(new AssignEvent(child, parent)); - } - - @Override - public void deassign(String child, String parent) { - emitEvent(new DeassignEvent(child, parent)); - } - - @Override - public void assignAll(List children, String target) { - emitEvent(new AssignAllEvent(children, target)); - } - - @Override - public void deassignAll(List children, String target) { - emitEvent(new DeassignAllEvent(children, target)); - } - - @Override - public void deassignAllFromAndDelete(String target) { - emitEvent(new DeassignAllFromAndDeleteEvent(target)); - } - - @Override - public List getParents(String node) { - return null; - } - - @Override - public List getChildren(String node) { - return null; - } - - @Override - public void associate(String ua, String target, AccessRightSet accessRights) { - emitEvent(new AssociateEvent(ua, target, accessRights)); - } - - @Override - public void dissociate(String ua, String target) throws PMException { - AccessRightSet accessRightSet = new AccessRightSet(); - for (Association association : memoryPolicyStore.graph().getAssociationsWithSource(ua)) { - if (association.getTarget().equals(target)) { - accessRightSet = association.getAccessRightSet(); - } - } - - emitEvent(new TxEvents.MemoryDissociateEvent(ua, target, accessRightSet)); - } - - @Override - public List getAssociationsWithSource(String ua) { - return null; - } - - @Override - public List getAssociationsWithTarget(String target) { - return null; - } - } - - class TxProhibitions implements Prohibitions { - @Override - public void create(String label, ProhibitionSubject subject, AccessRightSet accessRightSet, boolean intersection, ContainerCondition... containerConditions) { - emitEvent(new CreateProhibitionEvent(label, subject, accessRightSet, intersection, List.of(containerConditions))); - } - - @Override - public void update(String label, ProhibitionSubject subject, AccessRightSet accessRightSet, boolean intersection, ContainerCondition... containerConditions) throws PMException { - emitEvent(new TxEvents.MemoryUpdateProhibitionEvent( - new Prohibition(label, subject, accessRightSet, intersection, List.of(containerConditions)), - memoryPolicyStore.prohibitions().get(label) - )); - } - - @Override - public void delete(String label) throws PMException { - emitEvent(new TxEvents.MemoryDeleteProhibitionEvent(memoryPolicyStore.prohibitions().get(label))); - } - - @Override - public Map> getAll() { - return null; - } - - @Override - public boolean exists(String label) { - return false; - } - - @Override - public List getWithSubject(String subject) { - return null; - } - - @Override - public Prohibition get(String label) { - return null; - } - } - - class TxObligations implements Obligations { - @Override - public void create(UserContext author, String label, Rule... rules) { - emitEvent(new CreateObligationEvent(author, label, List.of(rules))); - } - - @Override - public void update(UserContext author, String label, Rule... rules) throws PMException { - emitEvent(new TxEvents.MemoryUpdateObligationEvent( - new Obligation(author, label, List.of(rules)), - memoryPolicyStore.obligations().get(label) - )); - } - - @Override - public void delete(String label) throws PMException { - emitEvent(new TxEvents.MemoryDeleteObligationEvent(memoryPolicyStore.obligations().get(label))); - } - - @Override - public List getAll() { - return null; - } - - @Override - public boolean exists(String label) { - return false; - } - - @Override - public Obligation get(String label) { - return null; - } - - } - - class TxUserDefinedPML implements UserDefinedPML { - @Override - public void createFunction(FunctionDefinitionStatement functionDefinitionStatement) { - emitEvent(new AddFunctionEvent(functionDefinitionStatement)); - } - - @Override - public void deleteFunction(String functionName) throws PMException { - emitEvent(new TxEvents.MemoryRemoveFunctionEvent(memoryPolicyStore.userDefinedPML().getFunctions().get(functionName))); - } - - @Override - public Map getFunctions() { - return null; - } - - @Override - public FunctionDefinitionStatement getFunction(String name) { - return null; - } - - @Override - public void createConstant(String constantName, Value constantValue) { - emitEvent(new AddConstantEvent(constantName, constantValue)); - } - - @Override - public void deleteConstant(String constName) throws PMException { - emitEvent(new TxEvents.MemoryRemoveConstantEvent(constName, memoryPolicyStore.userDefinedPML().getConstants().get(constName))); - } - - @Override - public Map getConstants() { - return null; - } - - @Override - public Value getConstant(String name) { - return null; - } - } -} diff --git a/src/main/java/gov/nist/csd/pm/pap/memory/User.java b/src/main/java/gov/nist/csd/pm/pap/memory/User.java deleted file mode 100644 index 03caae376..000000000 --- a/src/main/java/gov/nist/csd/pm/pap/memory/User.java +++ /dev/null @@ -1,82 +0,0 @@ -package gov.nist.csd.pm.pap.memory; - -import gov.nist.csd.pm.policy.model.access.AccessRightSet; -import gov.nist.csd.pm.policy.model.graph.nodes.Node; -import gov.nist.csd.pm.policy.model.graph.nodes.NodeType; -import gov.nist.csd.pm.policy.model.graph.relationships.Association; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; - -class User implements Vertex { - - private final Node node; - private final List parents; - - public User(String name, Map properties) { - this.node = new Node(name, NodeType.U, properties); - this.parents = new ArrayList<>(); - } - - private User(Node node, List parents) { - this.node = new Node(node); - this.parents = new ArrayList<>(parents); - } - - @Override - public Vertex copy() { - return new User(node, parents); - } - - @Override - public void setProperties(Map properties) { - node.setProperties(properties); - } - - @Override - public Node getNode() { - return node; - } - - @Override - public List getParents() { - return parents; - } - - @Override - public List getChildren() { - return Collections.emptyList(); - } - - @Override - public List getOutgoingAssociations() { - return Collections.emptyList(); - } - - @Override - public List getIncomingAssociations() { - return Collections.emptyList(); - } - - @Override - public void addAssignment(String child, String parent) { - parents.add(parent); - } - - @Override - public void removeAssignment(String child, String parent) { - parents.remove(parent); - } - - @Override - public void addAssociation(String ua, String target, AccessRightSet accessRightSet) { - - } - - @Override - public void removeAssociation(String ua, String target) { - - } -} diff --git a/src/main/java/gov/nist/csd/pm/pap/memory/UserAttribute.java b/src/main/java/gov/nist/csd/pm/pap/memory/UserAttribute.java deleted file mode 100644 index 6fabd39ae..000000000 --- a/src/main/java/gov/nist/csd/pm/pap/memory/UserAttribute.java +++ /dev/null @@ -1,106 +0,0 @@ -package gov.nist.csd.pm.pap.memory; - -import gov.nist.csd.pm.policy.model.access.AccessRightSet; -import gov.nist.csd.pm.policy.model.graph.nodes.Node; -import gov.nist.csd.pm.policy.model.graph.nodes.NodeType; -import gov.nist.csd.pm.policy.model.graph.relationships.Association; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -class UserAttribute implements Vertex { - - private final Node node; - private final List parents; - private final List children; - private final List outgoingAssociations; - private final List incomingAssociations; - - public UserAttribute(String name, Map properties) { - this.node = new Node(name, NodeType.UA, properties); - this.parents = new ArrayList<>(); - this.children = new ArrayList<>(); - this.outgoingAssociations = new ArrayList<>(); - this.incomingAssociations = new ArrayList<>(); - } - - private UserAttribute(Node node, List parents, List children, List outgoing, List incoming) { - this.node = new Node(node); - this.parents = new ArrayList<>(parents); - this.children = new ArrayList<>(children); - this.outgoingAssociations = new ArrayList<>(outgoing); - this.incomingAssociations = new ArrayList<>(incoming); - } - - @Override - public Vertex copy() { - return new UserAttribute(node, parents, children, outgoingAssociations, incomingAssociations); - } - - @Override - public void setProperties(Map properties) { - node.setProperties(properties); - } - - @Override - public Node getNode() { - return node; - } - - @Override - public List getParents() { - return parents; - } - - @Override - public List getChildren() { - return children; - } - - @Override - public List getOutgoingAssociations() { - return outgoingAssociations; - } - - @Override - public List getIncomingAssociations() { - return incomingAssociations; - } - - @Override - public void addAssignment(String child, String parent) { - if (child.equals(node.getName())) { - parents.add(parent); - } else { - children.add(child); - } - } - - @Override - public void removeAssignment(String child, String parent) { - if (child.equals(node.getName())) { - parents.remove(parent); - } else { - children.remove(child); - } - } - - @Override - public void addAssociation(String ua, String target, AccessRightSet accessRightSet) { - if (ua.equals(node.getName())) { - outgoingAssociations.add(new Association(ua, target, accessRightSet)); - } else { - incomingAssociations.add(new Association(ua, target, accessRightSet)); - } - } - - @Override - public void removeAssociation(String ua, String target) { - if (ua.equals(node.getName())) { - outgoingAssociations.remove(new Association(ua, target)); - } else { - incomingAssociations.remove(new Association(ua, target)); - } - } -} diff --git a/src/main/java/gov/nist/csd/pm/pap/memory/Vertex.java b/src/main/java/gov/nist/csd/pm/pap/memory/Vertex.java deleted file mode 100644 index 11dbe10b9..000000000 --- a/src/main/java/gov/nist/csd/pm/pap/memory/Vertex.java +++ /dev/null @@ -1,25 +0,0 @@ -package gov.nist.csd.pm.pap.memory; - -import gov.nist.csd.pm.policy.model.access.AccessRightSet; -import gov.nist.csd.pm.policy.model.graph.nodes.Node; -import gov.nist.csd.pm.policy.model.graph.relationships.Association; - -import java.util.List; -import java.util.Map; - -interface Vertex { - - Vertex copy(); - void setProperties(Map properties); - Node getNode(); - List getParents(); - List getChildren(); - List getOutgoingAssociations(); - List getIncomingAssociations(); - - void addAssignment(String child, String parent); - void removeAssignment(String child, String parent); - void addAssociation(String ua, String target, AccessRightSet accessRightSet); - void removeAssociation(String ua, String target); - -} diff --git a/src/main/java/gov/nist/csd/pm/pap/modification/GraphModification.java b/src/main/java/gov/nist/csd/pm/pap/modification/GraphModification.java new file mode 100644 index 000000000..3b577f2d2 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/modification/GraphModification.java @@ -0,0 +1,130 @@ +package gov.nist.csd.pm.pap.modification; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.exception.*; + +import java.util.Collection; +import java.util.Map; + +/** + * NGAC graph methods. + */ +public interface GraphModification { + + /** + * Create a policy class in the graph. + * + * @param name The name of the policy class. + * @return The name of the policy class. + * @throws PMException If any PM related exceptions occur in the implementing class. + */ + String createPolicyClass(String name) throws PMException; + + /** + * Create a new user attribute and assign it to the provided assignments. User attributes must have at + * least one assignment initially. + * + * @param name the name of the user attribute + * @param assignments A list of assignments to assign the new node to. + * + * @return the name of the user attribute. + * @throws PMException If any PM related exceptions occur in the implementing class. + */ + String createUserAttribute(String name, Collection assignments) throws PMException; + + /** + * Create a new object attribute and assign it to the provided assignments. Object attributes must have at + * least one assignment initially. + * + * @param name The name of the object attribute + * @param assignments A list of 0 or more assignments to assign the new node to. + * + * @return The name of the object attribute. + * @throws PMException If any PM related exceptions occur in the implementing class. + */ + String createObjectAttribute(String name, Collection assignments) throws PMException; + + /** + * Create a new object and assign it to the provided assignments. Objects must have a least one assignment initially. + * + * @param name The name of the object attribute + * @param assignments A list of 0 or more assignments to assign the new node to. + * @throws PMException If any PM related exceptions occur in the implementing class. + */ + String createObject(String name, Collection assignments) throws PMException; + + /** + * Create a new user and assign it to the provided assignments. Users must have a least one assignment initially. + * + * @param name The name of the object attribute + * @param assignments A list of 0 or more assignments to assign the new node to. + * + * @return The name of the object attribute. + * @throws PMException If any PM related exceptions occur in the implementing class. + */ + String createUser(String name, Collection assignments) throws PMException; + + /** + * Update the properties of the node with the given name. The given properties overwrite any existing properties. + * + * @param name The name of the node to update. + * @param properties The properties to give the node. + * @throws PMBackendException If there is an error executing the command in the PIP. + */ + void setNodeProperties(String name, Map properties) throws PMException; + + /** + * Delete the node with the given name from the graph. If the node is a policy class this will also delete the + * representative object attribute. An exception will be thrown if the node has any nodes assigned to it or if + * the node is defined in a prohibition or an obligation event pattern. If the node does not exist, no exception + * will be thrown as this is the desired state. + * + * @param name The name of the node to delete. + * @throws PMException If any PM related exceptions occur in the implementing class. + */ + void deleteNode(String name) throws PMException; + + /** + * Assign the ascendant node to the descendant node. + * + * @param ascendant The name of the ascendant node. + * @param descendants The names of the descendant nodes. + * @throws PMException If any PM related exceptions occur in the implementing class. + */ + void assign(String ascendant, Collection descendants) throws PMException; + + /** + * Delete the assignment between the ascendant and descendant nodes. + * + * @param ascendant The name of the ascendant node. + * @param descendants The names of the descendant nodes. + * @throws PMException If any PM related exceptions occur in the implementing class. + */ + void deassign(String ascendant, Collection descendants) throws PMException; + + /** + * Create an association between the user attribute and the target node with the provided access rights. + * If an association already exists between these two nodes, overwrite the existing access rights with the ones + * provided. Associations can only begin at a user attribute but can point to either an object or user attribute. If + * either node does not exist or a provided access right is unknown to the policy an exception will be thrown. + * + * @param ua The name of the user attribute. + * @param target The name of the target attribute. + * @param accessRights The set of access rights to add to the association. + * @throws PMException If any PM related exceptions occur in the implementing class. + */ + void associate(String ua, String target, AccessRightSet accessRights) throws PMException; + + /** + * Delete the association between the user attribute and target node. If either of the nodes does not exist an + * exception will be thrown. If the association does not exist no exception will be thrown as this is the desired + * state. + * + * @param ua The name of the user attribute. + * @param target The name of the target attribute. + * @throws PMException If any PM related exceptions occur in the implementing class. + */ + void dissociate(String ua, String target) throws PMException; + +} diff --git a/src/main/java/gov/nist/csd/pm/pap/modification/GraphModifier.java b/src/main/java/gov/nist/csd/pm/pap/modification/GraphModifier.java new file mode 100644 index 000000000..feb2e49f4 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/modification/GraphModifier.java @@ -0,0 +1,487 @@ +package gov.nist.csd.pm.pap.modification; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.dag.Direction; +import gov.nist.csd.pm.pap.graph.node.Node; +import gov.nist.csd.pm.pap.graph.node.NodeType; +import gov.nist.csd.pm.pap.graph.relationship.Assignment; +import gov.nist.csd.pm.pap.graph.relationship.Association; +import gov.nist.csd.pm.pap.obligation.EventPattern; +import gov.nist.csd.pm.pap.obligation.Obligation; +import gov.nist.csd.pm.pap.obligation.Rule; +import gov.nist.csd.pm.pap.prohibition.ContainerCondition; +import gov.nist.csd.pm.pap.prohibition.Prohibition; +import gov.nist.csd.pm.pap.admin.AdminPolicyNode; +import gov.nist.csd.pm.pap.exception.*; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.pml.pattern.Pattern; +import gov.nist.csd.pm.pap.pml.pattern.operand.OperandPatternExpression; +import gov.nist.csd.pm.pap.store.GraphStoreDFS; +import gov.nist.csd.pm.pap.store.PolicyStore; + +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.concurrent.atomic.AtomicBoolean; + +import static gov.nist.csd.pm.pap.graph.node.NodeType.*; +import static gov.nist.csd.pm.pap.op.AdminAccessRights.*; +import static gov.nist.csd.pm.pap.op.AdminAccessRights.wildcardAccessRights; + +public class GraphModifier extends Modifier implements GraphModification { + + public GraphModifier(PolicyStore store) { + super(store); + } + + public GraphModifier(Modifier modifier) { + super(modifier); + } + + @Override + public String createPolicyClass(String name) throws PMException { + if (!checkCreatePolicyClassInput(name)) { + return name; + } + + // create pc node + store.graph().createNode(name, PC); + + return name; + } + + @Override + public String createUserAttribute(String name, Collection assignments) + throws PMException { + return createNonPolicyClassNode(name, UA, assignments); + } + + @Override + public String createObjectAttribute(String name, Collection assignments) + throws PMException { + return createNonPolicyClassNode(name, OA, assignments); + } + + @Override + public String createObject(String name, Collection assignments) throws PMException { + return createNonPolicyClassNode(name, O, assignments); + } + + @Override + public String createUser(String name, Collection assignments) throws PMException { + return createNonPolicyClassNode(name, U, assignments); + } + + @Override + public void setNodeProperties(String name, Map properties) throws PMException { + checkSetNodePropertiesInput(name); + + store.graph().setNodeProperties(name, properties); + } + + @Override + public void deleteNode(String name) throws PMException { + if(!checkDeleteNodeInput(name)) { + return; + } + + store.graph().deleteNode(name); + } + + @Override + public void assign(String ascendant, Collection descendants) throws PMException { + if(!checkAssignInput(ascendant, descendants)) { + return; + } + + for (String descendant : descendants) { + store.graph().createAssignment(ascendant, descendant); + } + } + + @Override + public void deassign(String ascendant, Collection descendants) throws PMException { + if(!checkDeassignInput(ascendant, descendants)) { + return; + } + + for (String descendant : descendants) { + store.graph().deleteAssignment(ascendant, descendant); + } + } + + @Override + public void associate(String ua, String target, AccessRightSet accessRights) throws PMException { + checkAssociateInput(ua, target, accessRights); + + store.graph().createAssociation(ua, target, accessRights); + } + + @Override + public void dissociate(String ua, String target) throws PMException { + if(!checkDissociateInput(ua, target)) { + return; + } + + store.graph().deleteAssociation(ua, target); + } + + /** + * Check if a proposed assignment causes a loop. + * + * @param ascendant The ascendant of the assignment. + * @param descendant The descendant of the assignment. + * @throws PMException If any PM related exceptions occur in the implementing class. + */ + protected void checkAssignmentDoesNotCreateLoop(String ascendant, String descendant) throws PMException { + AtomicBoolean loop = new AtomicBoolean(false); + + new GraphStoreDFS(store.graph()) + .withVisitor((node -> { + if (!node.equals(ascendant)) { + return; + } + + loop.set(true); + })) + .withDirection(Direction.DESCENDANTS) + .withAllPathShortCircuit(node -> node.equals(ascendant)) + .walk(descendant); + + if (loop.get()) { + throw new AssignmentCausesLoopException(ascendant, descendant); + } + } + + /** + * Check that the given policy class name is not taken by another node. + * + * @param name The name to check. + * @return True if execution should proceed, false otherwise + * @throws PMException If any PM related exceptions occur in the implementing class. + */ + protected boolean checkCreatePolicyClassInput(String name) throws PMException { + if (name.equals(AdminPolicyNode.ADMIN_POLICY.nodeName())) { + return false; + } else if (store.graph().nodeExists(name)) { + throw new NodeNameExistsException(name); + } + + return true; + } + + /** + * Check the node name does not already exist and ensure the given descendant nodes exist and form a valid assignment. + * + * @param name The name of the new node. + * @param type The type of the new node. + * @param descendants Nodes to assign the new node to. + * @throws PMException If any PM related exceptions occur in the implementing class. + * assignment. + */ + protected boolean checkCreateNodeInput(String name, NodeType type, Collection descendants) throws PMException { + if (name.equals(AdminPolicyNode.ADMIN_POLICY_OBJECT.nodeName())) { + return false; + } else if (store.graph().nodeExists(name)) { + throw new NodeNameExistsException(name); + } + + // when creating a node the only loop that can occur is to itself + if (descendants.contains(name)) { + throw new AssignmentCausesLoopException(name, name); + } + + // need to be assigned to at least one node to avoid a disconnected graph + if (descendants.isEmpty()) { + throw new DisconnectedNodeException(name, type); + } + + // check assign inputs + for (String assignment : descendants) { + if (name.equals(assignment)) { + throw new AssignmentCausesLoopException(name, assignment); + } + + if (!store.graph().nodeExists(assignment)) { + throw new NodeDoesNotExistException(assignment); + } + + Node assignNode = store.graph().getNode(assignment); + Assignment.checkAssignment(type, assignNode.getType()); + } + + return true; + } + + /** + * Check if the given nodes exists. + * + * @param name The name of the node to check. + * @throws PMException If any PM related exceptions occur in the implementing class. + */ + protected void checkSetNodePropertiesInput(String name) throws PMException { + if (!store.graph().nodeExists(name)) { + throw new NodeDoesNotExistException(name); + } + } + + /** + * Check if the given node can be deleted. If the node is referenced in a prohibition or event pattern then it + * cannot + * be deleted. If the node does not exist an error does not occur but return false to indicate to the caller that + * execution should not proceed. + * + * @param name The name of the node being deleted. + * pattern. + * @return True if the execution should proceed, false otherwise. + * @throws PMException If any PM related exceptions occur in the implementing class. + */ + protected boolean checkDeleteNodeInput(String name) throws PMException { + if (!store.graph().nodeExists(name)) { + return false; + } + + Collection ascendants; + try { + ascendants = store.graph().getAdjacentAscendants(name); + } catch (NodeDoesNotExistException e) { + // quietly return if the nodes already does not exist as this is the desired state + return false; + } + + if (!ascendants.isEmpty()) { + throw new NodeHasAscendantsException(name); + } + + checkIfNodeInProhibition(name); + checkIfNodeInObligation(name); + + return true; + } + + /** + * Helper method to check if a given node is referenced in any prohibitions. The default implementation loads all + * prohibitions into memory and then searches through each one. + * + * @param name The node to check for. + * @throws PMException If any PM related exceptions occur in the implementing class. + */ + protected void checkIfNodeInProhibition(String name) throws PMException { + Map> allProhibitions = store.prohibitions().getProhibitions(); + for (Collection subjPros : allProhibitions.values()) { + for (Prohibition p : subjPros) { + if (nodeInProhibition(name, p)) { + throw new NodeReferencedInProhibitionException(name, p.getName()); + } + } + } + } + + /** + * Helper method to check if a given node is referenced in any obligations. The default implementation loads all + * obligations into memory and then searches through each one. + * + * @param name The node to check for. + * @throws PMException If any PM related exceptions occur in the implementing class. + */ + protected void checkIfNodeInObligation(String name) throws PMException { + Collection obligations = store.obligations().getObligations(); + for (Obligation obligation : obligations) { + // if the node is the author of the obligation or referenced in any rules throw an exception + if (obligation.getAuthor().equals(name)) { + throw new NodeReferencedInObligationException(name, obligation.getName()); + } + + // check if node referenced in pattern + for (Rule rule : obligation.getRules()) { + EventPattern eventPattern = rule.getEventPattern(); + + // check subject and operation patterns + boolean referenced = checkPatternForNode(name, eventPattern.getSubjectPattern()); + + // check operand patterns + for (List pattern : eventPattern.getOperandPatterns().values()) { + for (OperandPatternExpression operandPatternExpression : pattern) { + if (checkPatternForNode(name, operandPatternExpression)) { + referenced = true; + } + } + } + + if (referenced) { + throw new NodeReferencedInObligationException(name, obligation.getName()); + } + } + } + } + + private boolean checkPatternForNode(String entity, Pattern pattern) { + return pattern.getReferencedNodes().nodes().contains(entity); + } + + /** + * Check if both nodes exist and make a valid assignment. If the assignment already exists an error does not + * occur but + * return false to indicate to the caller that execution should not proceed. + * + * @param ascendant The ascendant node. + * @param descendants The descendant nodes. + * @return True if the execution should proceed, false otherwise. + * @throws PMException If any PM related exceptions occur in the implementing class. + */ + protected boolean checkAssignInput(String ascendant, Collection descendants) throws PMException { + for (String descendant : descendants) { + // getting both nodes will check if they exist + if (!store.graph().nodeExists(ascendant)) { + throw new NodeDoesNotExistException(ascendant); + } else if (!store.graph().nodeExists(descendant)) { + throw new NodeDoesNotExistException(descendant); + } + + // ignore if assignment already exists + if (store.graph().getAdjacentDescendants(ascendant).contains(descendant)) { + return false; + } + + Node ascNode = store.graph().getNode(ascendant); + Node descNode = store.graph().getNode(descendant); + + // check node types make a valid assignment relation + Assignment.checkAssignment(ascNode.getType(), descNode.getType()); + + // check the assignment won't create a loop + checkAssignmentDoesNotCreateLoop(ascendant, descendant); + } + + return true; + } + + /** + * Check if the ascendants and descendants exist. If the assignment does not exist an error does not occur but return + * false to indicate to the caller that execution should not proceed. If trying to delete the admin policy config, + * an error will occur. + * + * @param ascendant The ascendant node. + * @param descendants The descendant nodes. + * @return True if the execution should proceed, false otherwise. + * @throws PMException If any PM related exceptions occur in the implementing class. + */ + protected boolean checkDeassignInput(String ascendant, Collection descendants) throws PMException { + for (String descendant : descendants) { + if (!store.graph().nodeExists(ascendant)) { + throw new NodeDoesNotExistException(ascendant); + } else if (!store.graph().nodeExists(descendant)) { + throw new NodeDoesNotExistException(descendant); + } else if (ascendant.equals(AdminPolicyNode.ADMIN_POLICY_OBJECT.nodeName()) && + descendant.equals(AdminPolicyNode.ADMIN_POLICY.nodeName())) { + throw new CannotDeleteAdminPolicyConfigException(); + } + + Collection descs = store.graph().getAdjacentDescendants(ascendant); + if (!descs.contains(descendant)) { + return false; + } + + if (descs.size() == 1) { + throw new DisconnectedNodeException(ascendant, descendant); + } + } + + return true; + } + + /** + * Check if the user attribute and target nodes exist and make up a valid association and that the given access + * rights are allowed. + * + * @param ua The user attribute. + * @param target The target node. + * @param accessRights The access rights. + * @throws PMException If any PM related exceptions occur in the implementing class. + * association. + */ + protected void checkAssociateInput(String ua, String target, AccessRightSet accessRights) throws PMException { + if (!store.graph().nodeExists(ua)) { + throw new NodeDoesNotExistException(ua); + } else if (!store.graph().nodeExists(target)) { + throw new NodeDoesNotExistException(target); + } + + Node uaNode = store.graph().getNode(ua); + Node targetNode = store.graph().getNode(target); + + // check the access rights are valid + checkAccessRightsValid(store.operations().getResourceOperations(), accessRights); + + // check the types of each node make a valid association + Association.checkAssociation(uaNode.getType(), targetNode.getType()); + } + + /** + * Check if both nodes exist. If the association does not exist an error does not occur but return false to indicate + * to the caller that execution should not proceed. + * + * @param ua The user attribute. + * @param target The target node. + * @return True if the execution should proceed, false otherwise. + * @throws PMException If any PM related exceptions occur in the implementing class. + */ + protected boolean checkDissociateInput(String ua, String target) throws PMException { + if (!store.graph().nodeExists(ua)) { + throw new NodeDoesNotExistException(ua); + } else if (!store.graph().nodeExists(target)) { + throw new NodeDoesNotExistException(target); + } + + Collection associations = store.graph().getAssociationsWithSource(ua); + for (Association a : associations) { + if (a.getSource().equals(ua) && a.getTarget().equals(target)) { + return true; + } + } + + return false; + } + + static void checkAccessRightsValid(AccessRightSet resourceAccessRights, AccessRightSet accessRightSet) throws PMException { + for (String ar : accessRightSet) { + if (!resourceAccessRights.contains(ar) + && !allAdminAccessRights().contains(ar) + && !wildcardAccessRights().contains(ar)) { + throw new UnknownAccessRightException(ar); + } + } + } + + private static boolean nodeInProhibition(String name, Prohibition prohibition) { + if (prohibition.getSubject().getName().equals(name)) { + return true; + } + + for (ContainerCondition containerCondition : prohibition.getContainers()) { + if (containerCondition.getName().equals(name)) { + return true; + } + } + + return false; + } + + private String createNonPolicyClassNode(String name, NodeType type, Collection assignments) + throws PMException { + return runTx(() -> { + if (!checkCreateNodeInput(name, type, assignments)) { + return name; + } + + store.graph().createNode(name, type); + + for (String assignmentNode : assignments) { + store.graph().createAssignment(name, assignmentNode); + } + + return name; + }); + + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/modification/Modifier.java b/src/main/java/gov/nist/csd/pm/pap/modification/Modifier.java new file mode 100644 index 000000000..ec709d1d3 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/modification/Modifier.java @@ -0,0 +1,64 @@ +package gov.nist.csd.pm.pap.modification; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.tx.Transactional; +import gov.nist.csd.pm.pap.store.PolicyStore; + +public abstract class Modifier implements Transactional { + + protected PolicyStore store; + + public Modifier(PolicyStore store) { + this.store = store; + } + + public Modifier(Modifier modifier) { + this(modifier.store); + } + + protected T runTx(Runner txRunner) throws PMException { + try { + beginTx(); + T result = txRunner.run(); + commit(); + return result; + } catch (PMException e) { + rollback(); + throw e; + } + } + + protected void runTx(VoidRunner txRunner) throws PMException { + try { + beginTx(); + txRunner.run(); + commit(); + } catch (PMException e) { + rollback(); + throw e; + } + } + + @Override + public final void beginTx() throws PMException { + store.beginTx(); + } + + @Override + public final void commit() throws PMException { + store.commit(); + } + + @Override + public final void rollback() throws PMException { + store.rollback(); + } + + public interface Runner { + T run() throws PMException; + } + + public interface VoidRunner { + void run() throws PMException; + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/modification/ObligationsModification.java b/src/main/java/gov/nist/csd/pm/pap/modification/ObligationsModification.java new file mode 100644 index 000000000..abd19205b --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/modification/ObligationsModification.java @@ -0,0 +1,35 @@ +package gov.nist.csd.pm.pap.modification; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.obligation.Rule; + +import java.util.List; + +/** + * NGAC obligation methods. + */ +public interface ObligationsModification { + + /** + * Create a new obligation with the given author, name, and rules. The author of the obligation is the user that the + * responses will be executed as in the EPP. This means the author will need the privileges to carry out each action + * in the response at the time it's executed. If they do not have sufficient privileges no action in the response + * will be executed.

+ * + * @param author The user/process that is creating the obligation. + * @param name The name of the obligation. + * @param rules The rules of the obligation. + * @throws PMException If any PM related exceptions occur in the implementing class. + */ + void createObligation(String author, String name, List rules) throws PMException; + + /** + * Delete the obligation with the given name. If the obligation does not exist, no exception is thrown as this is + * the desired state.

+ * + * @param name The name of the obligation to delete. + * @throws PMException If any PM related exceptions occur in the implementing class. + */ + void deleteObligation(String name) throws PMException; + +} diff --git a/src/main/java/gov/nist/csd/pm/pap/modification/ObligationsModifier.java b/src/main/java/gov/nist/csd/pm/pap/modification/ObligationsModifier.java new file mode 100644 index 000000000..24c5b5424 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/modification/ObligationsModifier.java @@ -0,0 +1,94 @@ +package gov.nist.csd.pm.pap.modification; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.obligation.EventPattern; +import gov.nist.csd.pm.pap.obligation.Rule; +import gov.nist.csd.pm.pap.pml.pattern.Pattern; +import gov.nist.csd.pm.pap.exception.*; +import gov.nist.csd.pm.pap.pml.pattern.operand.OperandPatternExpression; +import gov.nist.csd.pm.pap.store.PolicyStore; + +import java.util.*; + +public class ObligationsModifier extends Modifier implements ObligationsModification { + + public ObligationsModifier(PolicyStore store) { + super(store); + } + + public ObligationsModifier(Modifier modifier) { + super(modifier); + } + + @Override + public void createObligation(String author, String name, List rules) throws PMException { + checkCreateInput(author, name, rules); + + store.obligations().createObligation(author, name, new ArrayList<>(rules)); + } + + @Override + public void deleteObligation(String name) throws PMException { + if(!checkDeleteInput(name)) { + return; + } + + store.obligations().deleteObligation(name); + } + + /** + * Check the obligation being created. + * + * @param author The author of the obligation. + * @param name The name of the obligation. + * @param rules The rules of the obligation. + * @throws PMException If any PM related exceptions occur in the implementing class. + */ + protected void checkCreateInput(String author, String name, Collection rules) throws PMException { + if (store.obligations().obligationExists(name)) { + throw new ObligationNameExistsException(name); + } + + checkAuthorExists(author); + checkEventPatternAttributesExist(rules); + } + + /** + * Check if the obligation exists. If it doesn't, return false to indicate to the caller that execution should not + * proceed. + * + * @param name The name of the obligation. + * @return True if the execution should proceed, false otherwise. + * @throws PMException If any PM related exceptions occur in the implementing class. + */ + protected boolean checkDeleteInput(String name) throws PMException { + if (!store.obligations().obligationExists(name)) { + return false; + } + + return true; + } + + private void checkAuthorExists(String author) throws PMException { + if (!store.graph().nodeExists(author)) { + throw new NodeDoesNotExistException(author); + } + } + + private void checkEventPatternAttributesExist(Collection rules) throws PMException { + for (Rule rule : rules) { + EventPattern event = rule.getEventPattern(); + + // check subject pattern + Pattern pattern = event.getSubjectPattern(); + pattern.checkReferencedNodesExist(store.graph()); + + // check operand patterns + for (Map.Entry> operandPattern : event.getOperandPatterns().entrySet()) { + for (OperandPatternExpression operandPatternExpression : operandPattern.getValue()) { + operandPatternExpression.checkReferencedNodesExist(store.graph()); + } + } + } + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/modification/OperationsModification.java b/src/main/java/gov/nist/csd/pm/pap/modification/OperationsModification.java new file mode 100644 index 000000000..0d5ecace9 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/modification/OperationsModification.java @@ -0,0 +1,33 @@ +package gov.nist.csd.pm.pap.modification; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.op.Operation; + +/** + * Methods to manage NGAC resource and administrative operations. + */ +public interface OperationsModification { + + /** + * Set the resource access rights for the policy. + * @param resourceOperations The operations to set as the resource operations. + * @throws PMException If there is an error in the PM. + */ + void setResourceOperations(AccessRightSet resourceOperations) throws PMException; + + /** + * Create an administrative operation. + * @param operation The operation to create. + * @throws PMException If there is an error in the PM. + */ + void createAdminOperation(Operation operation) throws PMException; + + /** + * Delete the admin operation with the given name. + * @param operation The operation name. + * @throws PMException If there is an error in the PM. + */ + void deleteAdminOperation(String operation) throws PMException; + +} diff --git a/src/main/java/gov/nist/csd/pm/pap/modification/OperationsModifier.java b/src/main/java/gov/nist/csd/pm/pap/modification/OperationsModifier.java new file mode 100644 index 000000000..97c5d92ba --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/modification/OperationsModifier.java @@ -0,0 +1,66 @@ +package gov.nist.csd.pm.pap.modification; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.exception.AdminAccessRightExistsException; +import gov.nist.csd.pm.pap.exception.OperationExistsException; +import gov.nist.csd.pm.pap.op.AdminOperations; +import gov.nist.csd.pm.pap.op.Operation; +import gov.nist.csd.pm.pap.store.PolicyStore; + +import static gov.nist.csd.pm.pap.op.AdminAccessRights.isAdminAccessRight; +import static gov.nist.csd.pm.pap.op.AdminAccessRights.isWildcardAccessRight; + +public class OperationsModifier extends Modifier implements OperationsModification{ + + public OperationsModifier(PolicyStore store) throws PMException { + super(store); + AdminOperations.init(store.operations()); + } + + public OperationsModifier(Modifier modifier) throws PMException { + super(modifier); + AdminOperations.init(store.operations()); + } + + @Override + public void setResourceOperations(AccessRightSet resourceOperations) throws PMException { + checkSetResourceAccessRightsInput(resourceOperations); + + store.operations().setResourceOperations(resourceOperations); + } + + @Override + public void createAdminOperation(Operation operation) throws PMException { + if (store.operations().getAdminOperationNames().contains(operation.getName())) { + throw new OperationExistsException(operation.getName()); + } + + store.operations().createAdminOperation(operation); + } + + @Override + public void deleteAdminOperation(String operation) throws PMException { + // return without error if the operation does not exist or is a built in admin op such as assign + if (!store.operations().getAdminOperationNames().contains(operation) || + AdminOperations.ADMIN_OP_NAMES.contains(operation)) { + return; + } + + store.operations().deleteAdminOperation(operation); + } + + /** + * Check that the provided resource operations are not existing admin access rights. + * + * @param accessRightSet The access right set to check. + * @throws PMException If any PM related exceptions occur in the implementing class. + */ + protected void checkSetResourceAccessRightsInput(AccessRightSet accessRightSet) throws PMException { + for (String ar : accessRightSet) { + if (isAdminAccessRight(ar) || isWildcardAccessRight(ar)) { + throw new AdminAccessRightExistsException(ar); + } + } + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/modification/PolicyModification.java b/src/main/java/gov/nist/csd/pm/pap/modification/PolicyModification.java new file mode 100644 index 000000000..1b8d12bbf --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/modification/PolicyModification.java @@ -0,0 +1,38 @@ +package gov.nist.csd.pm.pap.modification; + +/** + * General interface for managing a NGAC policy. + */ +public interface PolicyModification { + + /** + * Get the graph component of the policy. + * @return The GraphModification implementation. + */ + GraphModification graph(); + + /** + * Get the prohibitions component of the policy. + * @return The ProhibitionsModification implementation. + */ + ProhibitionsModification prohibitions(); + + /** + * Get the obligations component of the policy. + * @return The ObligationsModification implementation. + */ + ObligationsModification obligations(); + + /** + * Get the operations component of the policy. + * @return The ObligationsModification implementation. + */ + OperationsModification operations(); + + /** + * Get the routines component of the policy. + * @return The RoutinesModification implementation. + */ + RoutinesModification routines(); + +} diff --git a/src/main/java/gov/nist/csd/pm/pap/modification/PolicyModifier.java b/src/main/java/gov/nist/csd/pm/pap/modification/PolicyModifier.java new file mode 100644 index 000000000..6e23fe041 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/modification/PolicyModifier.java @@ -0,0 +1,77 @@ +package gov.nist.csd.pm.pap.modification; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.admin.AdminPolicy; +import gov.nist.csd.pm.pap.admin.AdminPolicyNode; +import gov.nist.csd.pm.pap.store.PolicyStore; + +import static gov.nist.csd.pm.pap.graph.node.NodeType.OA; +import static gov.nist.csd.pm.pap.graph.node.NodeType.PC; + +/** + * PolicyStore is an abstract class that outlines the expected behavior of a backend implementation. + */ +public class PolicyModifier extends Modifier implements PolicyModification, AdminPolicy.Verifier { + + private GraphModifier graphModifier; + private ProhibitionsModifier prohibitionsModifier; + private ObligationsModifier obligationsModifier; + private OperationsModifier operationsModifier; + private RoutinesModifier routinesModifier; + + public PolicyModifier(PolicyStore store) throws PMException { + super(store); + this.graphModifier = new GraphModifier(store); + this.prohibitionsModifier = new ProhibitionsModifier(store); + this.obligationsModifier = new ObligationsModifier(store); + this.operationsModifier = new OperationsModifier(store); + this.routinesModifier = new RoutinesModifier(store); + } + + public PolicyModifier(PolicyModifier modifier) throws PMException { + this(modifier.store); + } + + @Override + public GraphModifier graph() { + return graphModifier; + } + + @Override + public ProhibitionsModifier prohibitions() { + return prohibitionsModifier; + } + + @Override + public ObligationsModifier obligations() { + return obligationsModifier; + } + + @Override + public OperationsModifier operations() { + return operationsModifier; + } + + @Override + public RoutinesModifier routines() { + return routinesModifier; + } + + @Override + public void verifyAdminPolicy() throws PMException { + String pc = AdminPolicyNode.ADMIN_POLICY.nodeName(); + + if (!store.graph().nodeExists(pc)) { + store.graph().createNode(pc, PC); + } + + String oa = AdminPolicyNode.ADMIN_POLICY_OBJECT.nodeName(); + if (!store.graph().nodeExists(oa)) { + store.graph().createNode(oa, OA); + } + + if (!store.graph().getAdjacentDescendants(oa).contains(pc)) { + store.graph().createAssignment(oa, pc); + } + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/modification/ProhibitionsModification.java b/src/main/java/gov/nist/csd/pm/pap/modification/ProhibitionsModification.java new file mode 100644 index 000000000..72d0f62aa --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/modification/ProhibitionsModification.java @@ -0,0 +1,36 @@ +package gov.nist.csd.pm.pap.modification; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.prohibition.ContainerCondition; +import gov.nist.csd.pm.pap.prohibition.ProhibitionSubject; + +import java.util.Collection; + +/** + * NGAC prohibition methods. + */ +public interface ProhibitionsModification { + + /** + * Create a new prohibition. + * + * @param name the identifier of this prohibition. + * @param subject ths subject of the prohibition (user, user attribute, or process). + * @param accessRightSet the access rights to be denied + * @param intersection a boolean flag that determines if the intersection of the containers should be denied or not. + * @param containerConditions the containers to deny the subject access to. + * @throws PMException If any PM related exceptions occur in the implementing class. + */ + void createProhibition(String name, ProhibitionSubject subject, AccessRightSet accessRightSet, + boolean intersection, Collection containerConditions) throws PMException; + + /** + * Delete the prohibition with the given name. No exception will be thrown if the prohibition does not exist. + * + * @param name The name of the prohibition to delete. + * @throws PMException If any PM related exceptions occur in the implementing class. + */ + void deleteProhibition(String name) throws PMException; + +} diff --git a/src/main/java/gov/nist/csd/pm/pap/modification/ProhibitionsModifier.java b/src/main/java/gov/nist/csd/pm/pap/modification/ProhibitionsModifier.java new file mode 100644 index 000000000..7c3ef5e31 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/modification/ProhibitionsModifier.java @@ -0,0 +1,101 @@ +package gov.nist.csd.pm.pap.modification; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.prohibition.ContainerCondition; +import gov.nist.csd.pm.pap.prohibition.ProhibitionSubject; +import gov.nist.csd.pm.pap.exception.ProhibitionContainerDoesNotExistException; +import gov.nist.csd.pm.pap.exception.ProhibitionExistsException; +import gov.nist.csd.pm.pap.exception.ProhibitionSubjectDoesNotExistException; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.store.PolicyStore; + +import java.util.ArrayList; +import java.util.Collection; + +import static gov.nist.csd.pm.pap.modification.GraphModifier.checkAccessRightsValid; + +public class ProhibitionsModifier extends Modifier implements ProhibitionsModification { + + public ProhibitionsModifier(PolicyStore store) { + super(store); + } + + public ProhibitionsModifier(Modifier modifier) { + super(modifier); + } + + @Override + public void createProhibition(String name, + ProhibitionSubject subject, + AccessRightSet accessRightSet, + boolean intersection, + Collection containerConditions) throws PMException { + checkCreateInput(name, subject, accessRightSet, new ArrayList<>(containerConditions)); + + store.prohibitions().createProhibition(name, subject, accessRightSet, intersection, new ArrayList<>(containerConditions)); + } + + @Override + public void deleteProhibition(String name) throws PMException { + if(!checkDeleteInput(name)) { + return; + } + + store.prohibitions().deleteProhibition(name); + } + + /** + * Check the prohibition being created. + * + * @param name The name of the prohibition. + * @param subject The subject of the prohibition. + * @param accessRightSet The denied access rights. + * @param containerConditions The prohibition container conditions. + * @throws PMException If any PM related exceptions occur in the implementing class. + */ + protected void checkCreateInput(String name, ProhibitionSubject subject, AccessRightSet accessRightSet, + Collection containerConditions) throws PMException { + if (store.prohibitions().prohibitionExists(name)) { + throw new ProhibitionExistsException(name); + } + + // check the prohibition parameters are valid + checkAccessRightsValid(store.operations().getResourceOperations(), accessRightSet); + checkProhibitionSubjectExists(subject); + checkProhibitionContainersExist(containerConditions); + } + + /** + * Check if the prohibition exists. If it doesn't, return false to indicate to the caller that execution should not + * proceed. + * + * @param name The name of the prohibition. + * @return True if the execution should proceed, false otherwise. + * @throws PMException If any PM related exceptions occur in the implementing class. + */ + protected boolean checkDeleteInput(String name) throws PMException { + if (!store.prohibitions().prohibitionExists(name)) { + return false; + } + + return true; + } + + protected void checkProhibitionSubjectExists(ProhibitionSubject subject) + throws PMException { + if (subject.getType() != ProhibitionSubject.Type.PROCESS) { + if (!store.graph().nodeExists(subject.getName())) { + throw new ProhibitionSubjectDoesNotExistException(subject.getName()); + } + } + } + + protected void checkProhibitionContainersExist(Collection containerConditions) + throws PMException { + for (ContainerCondition container : containerConditions) { + if (!store.graph().nodeExists(container.getName())) { + throw new ProhibitionContainerDoesNotExistException(container.getName()); + } + } + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/modification/RoutinesModification.java b/src/main/java/gov/nist/csd/pm/pap/modification/RoutinesModification.java new file mode 100644 index 000000000..279c50e2d --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/modification/RoutinesModification.java @@ -0,0 +1,25 @@ +package gov.nist.csd.pm.pap.modification; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.routine.Routine; + +/** + * Interface for managing NGAC administrative routines. + */ +public interface RoutinesModification { + + /** + * Create a new administrative routine. + * @param routine The routine to create. + * @throws PMException If there is an error in the PM. + */ + void createAdminRoutine(Routine routine) throws PMException; + + /** + * Delete the admin routine with the given name. + * @param name The name of the admin routine to delete. + * @throws PMException If there is an error in the PM. + */ + void deleteAdminRoutine(String name) throws PMException; + +} diff --git a/src/main/java/gov/nist/csd/pm/pap/modification/RoutinesModifier.java b/src/main/java/gov/nist/csd/pm/pap/modification/RoutinesModifier.java new file mode 100644 index 000000000..ac8310a39 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/modification/RoutinesModifier.java @@ -0,0 +1,35 @@ +package gov.nist.csd.pm.pap.modification; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.exception.RoutineExistsException; +import gov.nist.csd.pm.pap.routine.Routine; +import gov.nist.csd.pm.pap.store.PolicyStore; + +public class RoutinesModifier extends Modifier implements RoutinesModification{ + + public RoutinesModifier(PolicyStore store) { + super(store); + } + + public RoutinesModifier(Modifier modifier) { + super(modifier); + } + + @Override + public void createAdminRoutine(Routine routine) throws PMException { + if (store.routines().getAdminRoutineNames().contains(routine.getName())) { + throw new RoutineExistsException(routine.getName()); + } + + store.routines().createAdminRoutine(routine); + } + + @Override + public void deleteAdminRoutine(String name) throws PMException { + if (!store.routines().getAdminRoutineNames().contains(name)) { + return; + } + + store.routines().deleteAdminRoutine(name); + } +} \ No newline at end of file diff --git a/src/main/java/gov/nist/csd/pm/pap/mysql/MysqlConnection.java b/src/main/java/gov/nist/csd/pm/pap/mysql/MysqlConnection.java deleted file mode 100644 index b14d4e961..000000000 --- a/src/main/java/gov/nist/csd/pm/pap/mysql/MysqlConnection.java +++ /dev/null @@ -1,64 +0,0 @@ -package gov.nist.csd.pm.pap.mysql; - -import gov.nist.csd.pm.policy.tx.Transactional; - -import java.sql.Connection; -import java.sql.SQLException; - -class MysqlConnection implements Transactional { - private Connection connection; - private int txCounter; - - public MysqlConnection(Connection connection) { - this.connection = connection; - } - - public Connection getConnection() { - return connection; - } - - @Override - public void beginTx() throws MysqlPolicyException { - try { - connection.setAutoCommit(false); - - txCounter++; - } catch (SQLException e) { - throw new MysqlPolicyException(e.getMessage()); - } - } - - @Override - public void commit() throws MysqlPolicyException { - if (txCounter != 1) { - txCounter--; - return; - } - - try { - connection.setAutoCommit(true); - txCounter--; - } catch (SQLException e) { - try { - connection.rollback(); - } catch (SQLException rollbackEx) { - throw new MysqlPolicyException(rollbackEx.getMessage()); - } - - throw new MysqlPolicyException(e.getMessage()); - } - } - - @Override - public void rollback() throws MysqlPolicyException { - try { - if (!connection.getAutoCommit()) { - connection.rollback(); - connection.setAutoCommit(true); - } - txCounter = 0; - } catch (SQLException e) { - throw new MysqlPolicyException(e.getMessage()); - } - } -} diff --git a/src/main/java/gov/nist/csd/pm/pap/mysql/MysqlGraph.java b/src/main/java/gov/nist/csd/pm/pap/mysql/MysqlGraph.java deleted file mode 100644 index 3064ae034..000000000 --- a/src/main/java/gov/nist/csd/pm/pap/mysql/MysqlGraph.java +++ /dev/null @@ -1,534 +0,0 @@ -package gov.nist.csd.pm.pap.mysql; - -import com.fasterxml.jackson.core.JsonProcessingException; -import gov.nist.csd.pm.policy.Graph; -import gov.nist.csd.pm.policy.exceptions.NodeDoesNotExistException; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.AccessRightSet; -import gov.nist.csd.pm.policy.model.graph.nodes.Node; -import gov.nist.csd.pm.policy.model.graph.nodes.NodeType; -import gov.nist.csd.pm.policy.model.graph.nodes.Properties; -import gov.nist.csd.pm.policy.model.graph.relationships.Assignment; -import gov.nist.csd.pm.policy.model.graph.relationships.Association; -import gov.nist.csd.pm.policy.model.graph.relationships.Relationship; - -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Statement; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import static gov.nist.csd.pm.policy.model.graph.nodes.NodeType.*; -import static gov.nist.csd.pm.policy.model.graph.nodes.NodeType.U; -import static gov.nist.csd.pm.policy.model.graph.nodes.Properties.NO_PROPERTIES; - -public class MysqlGraph implements Graph { - - private MysqlConnection connection; - - public MysqlGraph(MysqlConnection connection) { - this.connection = connection; - } - @Override - public void setResourceAccessRights(AccessRightSet accessRightSet) throws MysqlPolicyException { - try { - String sql = """ - insert into resource_access_rights (id, access_rights) values (1, ?) ON DUPLICATE KEY UPDATE access_rights = (?); - """; - try(PreparedStatement ps = connection.getConnection().prepareStatement(sql)) { - String arJson = MysqlPolicyStore.arsetToJson(accessRightSet); - ps.setString(1, arJson); - ps.setString(2, arJson); - ps.execute(); - } - } catch (SQLException | JsonProcessingException e) { - throw new MysqlPolicyException(e.getMessage()); - } - } - - @Override - public AccessRightSet getResourceAccessRights() throws MysqlPolicyException { - AccessRightSet arset = new AccessRightSet(); - String sql = """ - select access_rights from resource_access_rights; - """; - - try(Statement stmt = connection.getConnection().createStatement(); - ResultSet rs = stmt.executeQuery(sql)) { - while (rs.next()) { - arset = MysqlPolicyStore.arsetReader.readValue(rs.getString(1)); - } - - return arset; - } catch (SQLException | JsonProcessingException e) { - throw new MysqlPolicyException(e.getMessage()); - } - } - - @Override - public String createPolicyClass(String name, Map properties) throws MysqlPolicyException { - return createPolicyClassNode(name, properties); - } - - @Override - public String createPolicyClass(String name) throws MysqlPolicyException { - return createPolicyClass(name, NO_PROPERTIES); - } - - @Override - public String createUserAttribute(String name, Map properties, String parent, String... parents) throws MysqlPolicyException { - return createNode(name, UA, properties, parent, parents); - } - - @Override - public String createUserAttribute(String name, String parent, String... parents) throws MysqlPolicyException { - return createUserAttribute(name, NO_PROPERTIES, parent, parents); - } - - @Override - public String createObjectAttribute(String name, Map properties, String parent, String... parents) throws MysqlPolicyException { - return createNode(name, OA, properties, parent, parents); - } - - @Override - public String createObjectAttribute(String name, String parent, String... parents) throws MysqlPolicyException { - return createObjectAttribute(name, NO_PROPERTIES, parent, parents); - } - - @Override - public String createObject(String name, Map properties, String parent, String... parents) throws MysqlPolicyException { - return createNode(name, O, properties, parent, parents); - } - - @Override - public String createObject(String name, String parent, String... parents) throws MysqlPolicyException { - return createObject(name, NO_PROPERTIES, parent, parents); - } - - @Override - public String createUser(String name, Map properties, String parent, String... parents) throws MysqlPolicyException { - return createNode(name, U, properties, parent, parents); - } - - @Override - public String createUser(String name, String parent, String... parents) throws MysqlPolicyException { - return createUser(name, NO_PROPERTIES, parent, parents); - } - - @Override - public void setNodeProperties(String name, Map properties) throws MysqlPolicyException { - String sql = """ - UPDATE node SET properties=? WHERE NAME=? - """; - try(PreparedStatement ps = connection.getConnection().prepareStatement(sql)) { - ps.setString(1, MysqlPolicyStore.toJSON(properties)); - ps.setString(2, name); - ps.execute(); - } catch (SQLException | JsonProcessingException e) { - throw new MysqlPolicyException(e.getMessage()); - } - } - - @Override - public boolean nodeExists(String name) throws MysqlPolicyException { - String sql = """ - SELECT count(*) FROM node WHERE name = ? - """; - try(PreparedStatement ps = connection.getConnection().prepareStatement(sql)) { - ps.setString(1, name); - ResultSet rs = ps.executeQuery(); - if (!rs.next()) { - return false; - } - - int anInt = rs.getInt(1); - boolean exists = anInt == 1; - - rs.close(); - - return exists; - } catch (SQLException e) { - throw new MysqlPolicyException(e.getMessage()); - } - } - - @Override - public Node getNode(String name) throws PMException { - String sql = """ - SELECT name, node_type_id, properties FROM node WHERE name = ? - """; - try(PreparedStatement ps = connection.getConnection().prepareStatement(sql)) { - ps.setString(1, name); - ResultSet rs = ps.executeQuery(); - if (!rs.next()) { - throw new NodeDoesNotExistException(name); - } - - Node node = getNodeFromResultSet(rs); - - rs.close(); - - return node; - } catch (SQLException e) { - throw new MysqlPolicyException(e.getMessage()); - } - } - - protected static Node getNodeFromResultSet(ResultSet rs) throws MysqlPolicyException { - try { - String name = rs.getString(1); - NodeType type = MysqlPolicyStore.getNodeTypeFromId(rs.getInt(2)); - Map props = MysqlPolicyStore.hashmapReader.readValue(rs.getString(3)); - return new Node(name, type, props); - } catch (JsonProcessingException | SQLException e) { - throw new MysqlPolicyException(e.getMessage()); - } - } - - @Override - public List search(NodeType type, Map properties) throws MysqlPolicyException { - String sql = "select name from node"; - StringBuilder where = new StringBuilder(); - if (type != ANY) { - where = new StringBuilder("node_type_id = " + MysqlPolicyStore.getNodeTypeId(type)); - } - - if (properties != null && !properties.isEmpty()) { - for (String key : properties.keySet()) { - if (where.length() > 0) { - where.append(" AND "); - } - - String value = properties.get(key); - - where.append("properties -> '$.") - .append(key) - .append("' like '\"") - .append(value.equals(Properties.WILDCARD) ? "%%" : value) - .append("\"'"); - } - } - - if (!where.isEmpty()) { - sql = sql + " where " + where; - } - - List results = new ArrayList<>(); - try (Statement stmt = connection.getConnection().createStatement(); - ResultSet rs = stmt.executeQuery(sql)) { - while (rs.next()) { - results.add(rs.getString(1)); - } - } catch (SQLException e) { - throw new MysqlPolicyException(e.getMessage()); - } - - return results; - } - - @Override - public List getPolicyClasses() throws MysqlPolicyException { - List policyClasses = new ArrayList<>(); - String sql = """ - SELECT name FROM node WHERE node_type_id = ? - """; - try(PreparedStatement ps = connection.getConnection().prepareStatement(sql)) { - ps.setInt(1, MysqlPolicyStore.getNodeTypeId(PC)); - ResultSet rs = ps.executeQuery(); - while (rs.next()) { - policyClasses.add(rs.getString(1)); - } - - rs.close(); - - return policyClasses; - } catch (SQLException e) { - throw new MysqlPolicyException(e.getMessage()); - } - } - - @Override - public void deleteNode(String name) throws MysqlPolicyException { - String sql = """ - DELETE FROM node WHERE NAME=? - """; - try(PreparedStatement ps = connection.getConnection().prepareStatement(sql)) { - ps.setString(1, name); - ps.execute(); - } catch (SQLException e) { - throw new MysqlPolicyException(e.getMessage()); - } - } - - @Override - public void assign(String child, String parent) throws MysqlPolicyException { - String sql = """ - INSERT INTO assignment (start_node_id, end_node_id) VALUES ( - (SELECT id FROM node WHERE name=?), (SELECT id FROM node WHERE name=?) - ) ON DUPLICATE KEY UPDATE start_node_id=start_node_id - """; - - try(PreparedStatement ps = connection.getConnection().prepareStatement(sql)) { - ps.setString(1, child); - ps.setString(2, parent); - ps.execute(); - } catch (SQLException e) { - throw new MysqlPolicyException(e.getMessage()); - } - } - - @Override - public void deassign(String child, String parent) throws MysqlPolicyException { - String sql = """ - DELETE FROM assignment - WHERE start_node_id = (SELECT id FROM node WHERE name=?) - AND end_node_id = (SELECT id FROM node WHERE name=?) - """; - - try(PreparedStatement ps = connection.getConnection().prepareStatement(sql)) { - ps.setString(1, child); - ps.setString(2, parent); - ps.execute(); - } catch (SQLException e) { - throw new MysqlPolicyException(e.getMessage()); - } - } - - @Override - public void assignAll(List children, String target) throws MysqlPolicyException { - try { - connection.beginTx(); - - for (String c : children) { - assign(c, target); - } - - connection.commit(); - } catch (MysqlPolicyException e) { - connection.rollback(); - throw e; - } - } - - @Override - public void deassignAll(List children, String target) throws MysqlPolicyException { - try { - connection.beginTx(); - - for (String c : children) { - deassign(c, target); - } - - connection.commit(); - } catch (MysqlPolicyException e) { - connection.rollback(); - } - } - - @Override - public void deassignAllFromAndDelete(String target) throws MysqlPolicyException { - try { - connection.beginTx(); - - deassignAll(getChildren(target), target); - deleteNode(target); - - connection.commit(); - } catch (MysqlPolicyException e) { - connection.rollback(); - } - } - - @Override - public List getChildren(String node) throws MysqlPolicyException { - List children = new ArrayList<>(); - - String sql = """ - select children.name from node - join assignment on node.id=assignment.end_node_id - join node as children on children.id=assignment.start_node_id - where node.name = ?; - """; - - try(PreparedStatement ps = connection.getConnection().prepareStatement(sql)) { - ps.setString(1, node); - ResultSet rs = ps.executeQuery(); - while (rs.next()) { - children.add(rs.getString(1)); - } - - rs.close(); - - return children; - } catch (SQLException e) { - throw new MysqlPolicyException(e.getMessage()); - } - } - - @Override - public void associate(String ua, String target, AccessRightSet accessRights) throws MysqlPolicyException { - String sql = """ - INSERT INTO association (start_node_id, end_node_id, operation_set) VALUES ( - (SELECT id FROM node WHERE name=?), (SELECT id FROM node WHERE name=?), ? - ) ON DUPLICATE KEY UPDATE operation_set=? - """; - - try(PreparedStatement ps = connection.getConnection().prepareStatement(sql)) { - ps.setString(1, ua); - ps.setString(2, target); - - String json = MysqlPolicyStore.arsetToJson(accessRights); - ps.setString(3, json); - ps.setString(4, json); - ps.execute(); - }catch (SQLException | JsonProcessingException e) { - throw new MysqlPolicyException(e.getMessage()); - } - } - - @Override - public void dissociate(String ua, String target) throws MysqlPolicyException { - String sql = """ - DELETE FROM association - WHERE start_node_id = (SELECT id FROM node WHERE name=?) - AND end_node_id = (SELECT id FROM node WHERE name=?) - """; - - try(PreparedStatement ps = connection.getConnection().prepareStatement(sql)) { - ps.setString(1, ua); - ps.setString(2, target); - ps.execute(); - }catch (SQLException e) { - throw new MysqlPolicyException(e.getMessage()); - } - } - - @Override - public List getParents(String node) throws MysqlPolicyException { - List parents = new ArrayList<>(); - - String sql = """ - select parents.name from node - join assignment on node.id=assignment.start_node_id - join node as parents on parents.id=assignment.end_node_id - where node.name = ?; - """; - - try(PreparedStatement ps = connection.getConnection().prepareStatement(sql)) { - ps.setString(1, node); - ResultSet rs = ps.executeQuery(); - while (rs.next()) { - parents.add(rs.getString(1)); - } - - rs.close(); - - return parents; - } catch (SQLException e) { - throw new MysqlPolicyException(e.getMessage()); - } - } - - @Override - public List getAssociationsWithSource(String ua) throws MysqlPolicyException { - List associations = new ArrayList<>(); - - String sql = """ - select targets.name, association.operation_set from node - join association on node.id=association.start_node_id - join node as targets on targets.id=association.end_node_id - where node.name = ?; - """; - try(PreparedStatement ps = connection.getConnection().prepareStatement(sql)) { - ps.setString(1, ua); - ResultSet rs = ps.executeQuery(); - while (rs.next()) { - String target = rs.getString(1); - AccessRightSet arset = MysqlPolicyStore.arsetReader.readValue(rs.getString(2)); - associations.add(new Association(ua, target, arset)); - } - - rs.close(); - } catch (SQLException | JsonProcessingException e) { - throw new MysqlPolicyException(e.getMessage()); - } - - return associations; - } - - @Override - public List getAssociationsWithTarget(String target) throws MysqlPolicyException { - List associations = new ArrayList<>(); - - String sql = """ - select sources.name, association.operation_set from node - join association on node.id=association.end_node_id - join node as sources on sources.id=association.start_node_id - where node.name = ?; - """; - try(PreparedStatement ps = connection.getConnection().prepareStatement(sql)) { - ps.setString(1, target); - ResultSet rs = ps.executeQuery(); - while (rs.next()) { - String source = rs.getString(1); - AccessRightSet opSet = MysqlPolicyStore.arsetReader.readValue(rs.getString(2)); - associations.add(new Association(source, target, opSet)); - } - - rs.close(); - } catch (SQLException | JsonProcessingException e) { - throw new MysqlPolicyException(e.getMessage()); - } - - return associations; - } - - private String createPolicyClassNode(String name, Map properties) throws MysqlPolicyException { - String sql = """ - INSERT INTO node (node_type_id, name, properties) VALUES (?,?,?) - """; - try(PreparedStatement ps = connection.getConnection().prepareStatement(sql)) { - ps.setInt(1, MysqlPolicyStore.getNodeTypeId(PC)); - ps.setString(2, name); - ps.setString(3, MysqlPolicyStore.toJSON(properties)); - ps.execute(); - } catch (SQLException | JsonProcessingException e) { - throw new MysqlPolicyException(e.getMessage()); - } - - return name; - } - - private String createNode(String name, NodeType type, Map properties, - String initialParent, String ... parents) throws MysqlPolicyException { - connection.beginTx(); - - String sql = """ - INSERT INTO node (node_type_id, name, properties) VALUES (?,?,?) - """; - try(PreparedStatement ps = connection.getConnection().prepareStatement(sql)) { - int nodeTypeIdIndex = 1; - int nameIndex = 2; - int propertiesIndex = 3; - ps.setInt(nodeTypeIdIndex, MysqlPolicyStore.getNodeTypeId(type)); - ps.setString(nameIndex, name); - ps.setString(propertiesIndex, MysqlPolicyStore.toJSON(properties)); - ps.execute(); - - assign(name, initialParent); - - for (String parent : parents) { - assign(name, parent); - } - - connection.commit(); - } catch (SQLException | JsonProcessingException | MysqlPolicyException e) { - connection.rollback(); - throw new MysqlPolicyException(e.getMessage()); - } - - return name; - } -} diff --git a/src/main/java/gov/nist/csd/pm/pap/mysql/MysqlObligations.java b/src/main/java/gov/nist/csd/pm/pap/mysql/MysqlObligations.java deleted file mode 100644 index 383871148..000000000 --- a/src/main/java/gov/nist/csd/pm/pap/mysql/MysqlObligations.java +++ /dev/null @@ -1,139 +0,0 @@ -package gov.nist.csd.pm.pap.mysql; - -import com.fasterxml.jackson.core.JsonProcessingException; -import gov.nist.csd.pm.policy.Obligations; -import gov.nist.csd.pm.policy.exceptions.ObligationDoesNotExistException; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.UserContext; -import gov.nist.csd.pm.policy.model.obligation.Obligation; -import gov.nist.csd.pm.policy.model.obligation.Rule; -import org.apache.commons.lang3.SerializationUtils; - -import java.io.IOException; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Statement; -import java.util.ArrayList; -import java.util.List; - -public class MysqlObligations implements Obligations { - - private MysqlConnection connection; - - public MysqlObligations(MysqlConnection mysqlConnection) { - this.connection = mysqlConnection; - } - - @Override - public void create(UserContext author, String label, Rule... rules) throws MysqlPolicyException { - String sql = """ - insert into obligation (label, author, rules) values (?, ?, ?) - """; - - try (PreparedStatement ps = connection.getConnection().prepareStatement(sql)) { - ps.setString(1, label); - ps.setString(2, MysqlPolicyStore.objectMapper.writeValueAsString(author)); - ps.setBytes(3, serializeRules(rules)); - - ps.executeUpdate(); - } catch (SQLException | JsonProcessingException e) { - throw new MysqlPolicyException(e.getMessage()); - } - } - - @Override - public void update(UserContext author, String label, Rule... rules) throws MysqlPolicyException { - connection.beginTx(); - - try { - delete(label); - create(author, label, rules); - connection.commit(); - } catch (MysqlPolicyException e) { - connection.rollback(); - throw e; - } - } - - @Override - public void delete(String label) throws MysqlPolicyException { - String sql = """ - delete from obligation where label = ? - """; - - try (PreparedStatement ps = connection.getConnection().prepareStatement(sql)) { - ps.setString(1, label); - ps.executeUpdate(); - } catch (SQLException e) { - throw new MysqlPolicyException(e.getMessage()); - } - } - - @Override - public List getAll() throws MysqlPolicyException { - List obligations = new ArrayList<>(); - - String sql = """ - select label, author, rules from obligation; - """; - - try(Statement stmt = connection.getConnection().createStatement(); - ResultSet rs = stmt.executeQuery(sql)) { - while (rs.next()) { - String label = rs.getString(1); - UserContext author = MysqlPolicyStore.userCtxReader.readValue(rs.getString(2)); - Rule[] rules = deserializeRules(rs.getBlob(3).getBinaryStream().readAllBytes()); - - obligations.add(new Obligation(author, label, List.of(rules))); - } - - return obligations; - } catch (SQLException | IOException e) { - throw new MysqlPolicyException(e.getMessage()); - } - } - - @Override - public boolean exists(String label) throws PMException { - try { - get(label); - return true; - } catch (ObligationDoesNotExistException e) { - return false; - } - } - - @Override - public Obligation get(String label) throws PMException { - String sql = """ - select author, rules from obligation where label = ? - """; - - try(PreparedStatement ps = connection.getConnection().prepareStatement(sql)) { - ps.setString(1, label); - ResultSet rs = ps.executeQuery(); - if (!rs.next()) { - throw new ObligationDoesNotExistException(label); - } - - UserContext author = MysqlPolicyStore.userCtxReader.readValue(rs.getString(1)); - Rule[] rules = deserializeRules(rs.getBlob(2).getBinaryStream().readAllBytes()); - - return new Obligation(author, label, List.of(rules)); - } catch (SQLException | IOException e) { - throw new MysqlPolicyException(e.getMessage()); - } - } - - private static byte[] serializeRules(Rule[] rules) { - return SerializationUtils.serialize(rules); - } - - private static Rule[] deserializeRules(byte[] b) { - return SerializationUtils.deserialize(b); - } - - - -} diff --git a/src/main/java/gov/nist/csd/pm/pap/mysql/MysqlPolicyDeserializer.java b/src/main/java/gov/nist/csd/pm/pap/mysql/MysqlPolicyDeserializer.java deleted file mode 100644 index 18fe5cbb7..000000000 --- a/src/main/java/gov/nist/csd/pm/pap/mysql/MysqlPolicyDeserializer.java +++ /dev/null @@ -1,173 +0,0 @@ -package gov.nist.csd.pm.pap.mysql; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; -import gov.nist.csd.pm.policy.PolicyDeserializer; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.json.JSONGraph; -import gov.nist.csd.pm.policy.json.JSONPolicy; -import gov.nist.csd.pm.policy.json.JSONUserDefinedPML; -import gov.nist.csd.pm.policy.model.access.AccessRightSet; -import gov.nist.csd.pm.policy.model.access.UserContext; -import gov.nist.csd.pm.policy.model.graph.nodes.Node; -import gov.nist.csd.pm.policy.model.obligation.Obligation; -import gov.nist.csd.pm.policy.model.obligation.Rule; -import gov.nist.csd.pm.policy.model.prohibition.ContainerCondition; -import gov.nist.csd.pm.policy.model.prohibition.Prohibition; -import gov.nist.csd.pm.policy.pml.PMLExecutor; -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; -import org.apache.commons.lang3.SerializationUtils; - -import java.lang.reflect.Type; -import java.sql.PreparedStatement; -import java.sql.SQLException; -import java.util.List; -import java.util.Map; - -public class MysqlPolicyDeserializer implements PolicyDeserializer { - - private MysqlPolicyStore policyStore; - - private static ObjectMapper mapper = new ObjectMapper(); - - public MysqlPolicyDeserializer(MysqlPolicyStore policyStore) { - this.policyStore = policyStore; - } - - @Override - public void fromJSON(String json) throws PMException { - JSONPolicy jsonPolicy = new Gson().fromJson(json, JSONPolicy.class); - - policyStore.beginTx(); - - insertGraph(new Gson().fromJson(jsonPolicy.getGraph(), JSONGraph.class)); - insertProhibitions(jsonPolicy.getProhibitions()); - insertObligations(jsonPolicy.getObligations()); - insertUserDefinedPML(jsonPolicy.getUserDefinedPML()); - - policyStore.commit(); - } - - @Override - public void fromPML(UserContext author, String pml, FunctionDefinitionStatement... customFunctions) throws PMException { - policyStore.beginTx(); - - PMLExecutor.compileAndExecutePML(policyStore, author, pml, customFunctions); - - policyStore.commit(); - } - - private void insertUserDefinedPML(String userDefinedPML) throws PMException { - JSONUserDefinedPML jsonPML = - new Gson().fromJson(userDefinedPML, JSONUserDefinedPML.class); - - for (Map.Entry e : jsonPML.getFunctions().entrySet()) { - policyStore.userDefinedPML().createFunction(SerializationUtils.deserialize(e.getValue())); - } - - for (Map.Entry e : jsonPML.getConstants().entrySet()) { - policyStore.userDefinedPML().createConstant(e.getKey(), SerializationUtils.deserialize(e.getValue())); - } - } - - private void insertObligations(String obligations) throws PMException { - Type type = new TypeToken>() {}.getType(); - List list = new Gson().fromJson(obligations, type); - - for (byte[] b : list) { - Obligation obligation = SerializationUtils.deserialize(b); - - List rules = obligation.getRules(); - policyStore.obligations().create( - obligation.getAuthor(), - obligation.getLabel(), - rules.toArray(new Rule[]{}) - ); - } - } - - private void insertProhibitions(String prohibitions) throws PMException { - Type type = new TypeToken>() {}.getType(); - List list = new Gson().fromJson(prohibitions, type); - - for (byte[] b : list) { - Prohibition prohibition = SerializationUtils.deserialize(b); - - policyStore.prohibitions().create( - prohibition.getLabel(), - prohibition.getSubject(), - prohibition.getAccessRightSet(), - prohibition.isIntersection(), - prohibition.getContainers().toArray(new ContainerCondition[0]) - ); - } - } - - private void insertGraph(JSONGraph jsonGraph) throws PMException { - policyStore.graph().setResourceAccessRights(jsonGraph.getResourceAccessRights()); - - String sql = """ - INSERT INTO node (node_type_id, name, properties) VALUES (?,?,?) - """; - try(PreparedStatement ps = policyStore.connection.getConnection().prepareStatement(sql)) { - for (Node node : jsonGraph.getNodes()) { - ps.setInt(1, MysqlPolicyStore.getNodeTypeId(node.getType())); - ps.setString(2, node.getName()); - ps.setString(3, MysqlPolicyStore.toJSON(node.getProperties())); - ps.addBatch(); - } - - ps.executeBatch(); - } catch (SQLException | JsonProcessingException e) { - throw new MysqlPolicyException(e.getMessage()); - } - - sql = """ - INSERT INTO assignment (start_node_id, end_node_id) VALUES ( - (SELECT id FROM node WHERE name=?), (SELECT id FROM node WHERE name=?) - ) ON DUPLICATE KEY UPDATE start_node_id=start_node_id - """; - try(PreparedStatement ps = policyStore.connection.getConnection().prepareStatement(sql)) { - for (String[] s : jsonGraph.getAssignments()) { - ps.setString(1, s[0]); - ps.setString(2, s[1]); - ps.addBatch(); - } - - ps.executeBatch(); - } catch (SQLException e) { - throw new MysqlPolicyException(e.getMessage()); - } - - sql = """ - INSERT INTO association (start_node_id, end_node_id, operation_set) VALUES ( - (SELECT id FROM node WHERE name=?), (SELECT id FROM node WHERE name=?), ? - ) ON DUPLICATE KEY UPDATE operation_set=? - """; - - try(PreparedStatement ps = policyStore.connection.getConnection().prepareStatement(sql)) { - Map> associations = jsonGraph.getAssociations(); - for (Map.Entry> e1 : associations.entrySet()) { - String ua = e1.getKey(); - - for (Map.Entry e2 : e1.getValue().entrySet()) { - String target = e2.getKey(); - AccessRightSet arset = e2.getValue(); - String json = MysqlPolicyStore.arsetToJson(arset); - - ps.setString(1, ua); - ps.setString(2, target); - ps.setString(3, json); - ps.setString(4, json); - ps.addBatch(); - } - } - - ps.executeBatch(); - }catch (SQLException | JsonProcessingException e) { - throw new MysqlPolicyException(e.getMessage()); - } - } -} diff --git a/src/main/java/gov/nist/csd/pm/pap/mysql/MysqlPolicyException.java b/src/main/java/gov/nist/csd/pm/pap/mysql/MysqlPolicyException.java deleted file mode 100644 index 9b4df44d0..000000000 --- a/src/main/java/gov/nist/csd/pm/pap/mysql/MysqlPolicyException.java +++ /dev/null @@ -1,10 +0,0 @@ -package gov.nist.csd.pm.pap.mysql; - -import gov.nist.csd.pm.policy.exceptions.PMException; - -public class MysqlPolicyException extends PMException { - - public MysqlPolicyException(String message) { - super(message); - } -} diff --git a/src/main/java/gov/nist/csd/pm/pap/mysql/MysqlPolicySerializer.java b/src/main/java/gov/nist/csd/pm/pap/mysql/MysqlPolicySerializer.java deleted file mode 100644 index ee299fb4d..000000000 --- a/src/main/java/gov/nist/csd/pm/pap/mysql/MysqlPolicySerializer.java +++ /dev/null @@ -1,170 +0,0 @@ -package gov.nist.csd.pm.pap.mysql; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.google.gson.Gson; -import gov.nist.csd.pm.pap.memory.MemoryPolicyStore; -import gov.nist.csd.pm.policy.PolicySerializer; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.json.JSONGraph; -import gov.nist.csd.pm.policy.json.JSONPolicy; -import gov.nist.csd.pm.policy.json.JSONUserDefinedPML; -import gov.nist.csd.pm.policy.model.access.AccessRightSet; -import gov.nist.csd.pm.policy.model.graph.nodes.Node; -import gov.nist.csd.pm.policy.model.obligation.Obligation; -import gov.nist.csd.pm.policy.model.prohibition.Prohibition; -import gov.nist.csd.pm.policy.pml.PMLSerializer; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; -import org.apache.commons.lang3.SerializationUtils; - -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Statement; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import static gov.nist.csd.pm.pap.mysql.MysqlGraph.getNodeFromResultSet; - -public class MysqlPolicySerializer implements PolicySerializer { - - private MysqlPolicyStore policyStore; - - public MysqlPolicySerializer(MysqlPolicyStore policyStore) { - this.policyStore = policyStore; - } - - @Override - public String toJSON() throws PMException { - String jsonGraph = graphToJson(); - String jsonProhibitions = prohibitionsToJson(); - String jsonObligations = obligationsToJson(); - String jsonUserDefinedPML = userDefinedPMLToJson(); - - return new Gson().toJson(new JSONPolicy(jsonGraph, jsonProhibitions, jsonObligations, jsonUserDefinedPML)); - } - - @Override - public String toPML() throws PMException { - MemoryPolicyStore memoryPolicyStore = new MemoryPolicyStore( - policyStore.graph(), - policyStore.prohibitions(), - policyStore.obligations(), - policyStore.userDefinedPML() - ); - - return new PMLSerializer(memoryPolicyStore).toPML(false); - } - - private String userDefinedPMLToJson() throws PMException { - Map functionBytes = new HashMap<>(); - Map functions = policyStore.userDefinedPML().getFunctions(); - for (Map.Entry f : functions.entrySet()) { - functionBytes.put(f.getKey(), SerializationUtils.serialize(f.getValue())); - } - - Map constantBytes = new HashMap<>(); - Map constants = policyStore.userDefinedPML().getConstants(); - for (Map.Entry c : constants.entrySet()) { - constantBytes.put(c.getKey(), SerializationUtils.serialize(c.getValue())); - } - - return new Gson().toJson(new JSONUserDefinedPML( - functionBytes, - constantBytes - )); - } - - private String obligationsToJson() throws PMException { - List obligations = policyStore.obligations().getAll(); - List bytes = new ArrayList<>(); - for (Obligation o : obligations) { - bytes.add(SerializationUtils.serialize(o)); - } - - return new Gson().toJson(bytes); - } - - private String prohibitionsToJson() throws PMException { - Map> prohibitions = policyStore.prohibitions().getAll(); - List bytes = new ArrayList<>(); - for (List proList : prohibitions.values()) { - for (Prohibition p : proList) { - bytes.add(SerializationUtils.serialize(p)); - } - } - - return new Gson().toJson(bytes); - } - - private String graphToJson() throws PMException { - AccessRightSet accessRightSet = policyStore.graph().getResourceAccessRights(); - JSONGraph jsonGraph = new JSONGraph(accessRightSet, getNodes(), getAssignments(), getAssociations()); - return new Gson().toJson(jsonGraph); - } - - private List getNodes() throws MysqlPolicyException { - String sql = """ - select name, node_type_id, properties from node - """; - List results = new ArrayList<>(); - try (Statement stmt = policyStore.connection.getConnection().createStatement(); - ResultSet rs = stmt.executeQuery(sql)) { - while (rs.next()) { - Node node = getNodeFromResultSet(rs); - results.add(node); - } - } catch (SQLException e) { - throw new MysqlPolicyException(e.getMessage()); - } - - return results; - } - - private List getAssignments() throws MysqlPolicyException { - List assignments = new ArrayList<>(); - String sql = """ - SELECT child.name, parent.name FROM assignment - join node as child on assignment.start_node_id=child.id - join node as parent on assignment.end_node_id=parent.id; - """; - try(PreparedStatement ps = policyStore.connection.getConnection().prepareStatement(sql); - ResultSet rs = ps.executeQuery()) { - while (rs.next()) { - assignments.add(new String[]{rs.getString(1), rs.getString(2)}); - } - } catch (SQLException e) { - throw new MysqlPolicyException(e.getMessage()); - } - - return assignments; - } - - private Map> getAssociations() throws PMException { - Map> associations = new HashMap<>(); - - String sql = """ - SELECT ua.name, target.name, operation_set FROM association - join node as ua on association.start_node_id=ua.id - join node as target on association.end_node_id=target.id; - """; - try (Statement stmt = policyStore.connection.getConnection().createStatement(); - ResultSet rs = stmt.executeQuery(sql)) { - while (rs.next()) { - String ua = rs.getString(1); - String target = rs.getString(2); - AccessRightSet arset = MysqlPolicyStore.arsetReader.readValue(rs.getString(3)); - - Map uaAssocs = associations.getOrDefault(ua, new HashMap<>()); - uaAssocs.put(target, arset); - associations.put(ua, uaAssocs); - } - } catch (SQLException | JsonProcessingException e) { - throw new MysqlPolicyException(e.getMessage()); - } - - return associations; - } -} diff --git a/src/main/java/gov/nist/csd/pm/pap/mysql/MysqlPolicyStore.java b/src/main/java/gov/nist/csd/pm/pap/mysql/MysqlPolicyStore.java deleted file mode 100644 index 63d5caece..000000000 --- a/src/main/java/gov/nist/csd/pm/pap/mysql/MysqlPolicyStore.java +++ /dev/null @@ -1,143 +0,0 @@ -package gov.nist.csd.pm.pap.mysql; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.ObjectReader; -import gov.nist.csd.pm.pap.PolicyStore; -import gov.nist.csd.pm.pap.memory.MemoryPolicyStore; -import gov.nist.csd.pm.policy.*; -import gov.nist.csd.pm.policy.events.PolicySynchronizationEvent; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.AccessRightSet; -import gov.nist.csd.pm.policy.model.access.UserContext; -import gov.nist.csd.pm.policy.model.graph.nodes.NodeType; - -import java.sql.Connection; -import java.sql.SQLException; -import java.sql.Statement; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import static gov.nist.csd.pm.policy.model.graph.nodes.NodeType.*; - -public class MysqlPolicyStore extends PolicyStore { - - public static final String MYSQL_DRIVER = "com.mysql.cj.jdbc.Driver"; - public static final String MYSQL_SCHEMA = "pm_core"; - - static final ObjectMapper objectMapper = new ObjectMapper(); - static final ObjectReader hashmapReader = new ObjectMapper().readerFor(HashMap.class); - static final ObjectReader arsetReader = new ObjectMapper().readerFor(AccessRightSet.class); - static final ObjectReader userCtxReader = new ObjectMapper().readerFor(UserContext.class); - - protected final MysqlConnection connection; - - private final MysqlGraph graph; - private final MysqlProhibitions prohibitions; - private final MysqlObligations obligations; - private final MysqlUserDefinedPML userDefinedPML; - - public MysqlPolicyStore(Connection connection) { - this.connection = new MysqlConnection(connection); - - this.graph = new MysqlGraph(this.connection); - this.prohibitions = new MysqlProhibitions(this.connection); - this.obligations = new MysqlObligations(this.connection); - this.userDefinedPML = new MysqlUserDefinedPML(this.connection); - } - - @Override - public void beginTx() throws MysqlPolicyException { - connection.beginTx(); - } - - @Override - public void commit() throws MysqlPolicyException { - connection.commit(); - } - - @Override - public void rollback() throws MysqlPolicyException { - connection.rollback(); - } - - @Override - public PolicySynchronizationEvent policySync() throws PMException { - return new PolicySynchronizationEvent( - new MemoryPolicyStore(graph, prohibitions, obligations, userDefinedPML) - ); - } - - @Override - protected void reset() throws MysqlPolicyException { - List sequence = PolicyResetSequence.getSequence(); - try (Statement stmt = connection.getConnection().createStatement()) { - for (String s : sequence) { - stmt.executeUpdate(s); - } - } catch (SQLException e) { - throw new MysqlPolicyException(e.getMessage()); - } - } - - @Override - public Graph graph() { - return graph; - } - - @Override - public Prohibitions prohibitions() { - return prohibitions; - } - - @Override - public Obligations obligations() { - return obligations; - } - - @Override - public UserDefinedPML userDefinedPML() { - return userDefinedPML; - } - - @Override - public PolicySerializer serialize() throws PMException { - return new MysqlPolicySerializer(this); - } - - @Override - public PolicyDeserializer deserialize() throws PMException { - return new MysqlPolicyDeserializer(this); - } - - static int getNodeTypeId(NodeType nodeType) { - // values are mapped to values in node_type table - return switch (nodeType) { - case PC -> 5; - case OA -> 1; - case UA -> 2; - case O -> 4; - default -> 3; // U - }; - } - - static NodeType getNodeTypeFromId(int id) { - // values are mapped to values in node_type table - return switch (id) { - case 1 -> OA; - case 2 -> UA; - case 3 -> U; - case 4 -> O; - default -> PC; - }; - } - - public static String toJSON(Map map) throws JsonProcessingException { - return objectMapper.writeValueAsString(map); - } - - public static String arsetToJson(AccessRightSet set) throws JsonProcessingException { - return objectMapper.writeValueAsString(set); - } -} diff --git a/src/main/java/gov/nist/csd/pm/pap/mysql/MysqlProhibitions.java b/src/main/java/gov/nist/csd/pm/pap/mysql/MysqlProhibitions.java deleted file mode 100644 index cd4beb03b..000000000 --- a/src/main/java/gov/nist/csd/pm/pap/mysql/MysqlProhibitions.java +++ /dev/null @@ -1,280 +0,0 @@ -package gov.nist.csd.pm.pap.mysql; - -import com.fasterxml.jackson.core.JsonProcessingException; -import gov.nist.csd.pm.policy.Prohibitions; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.exceptions.ProhibitionDoesNotExistException; -import gov.nist.csd.pm.policy.model.access.AccessRightSet; -import gov.nist.csd.pm.policy.model.prohibition.ContainerCondition; -import gov.nist.csd.pm.policy.model.prohibition.Prohibition; -import gov.nist.csd.pm.policy.model.prohibition.ProhibitionSubject; - -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Statement; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import static gov.nist.csd.pm.policy.model.prohibition.ProhibitionSubject.Type.*; -import static gov.nist.csd.pm.policy.model.prohibition.ProhibitionSubject.Type.USER; - -public class MysqlProhibitions implements Prohibitions { - - private MysqlConnection connection; - - public MysqlProhibitions(MysqlConnection mysqlConnection) { - this.connection = mysqlConnection; - } - - @Override - public void create(String label, ProhibitionSubject subject, AccessRightSet accessRightSet, boolean intersection, ContainerCondition... containerConditions) throws MysqlPolicyException { - connection.beginTx(); - - String sql; - if (subject.getType() == ProhibitionSubject.Type.PROCESS) { - sql = - """ - insert into prohibition (label, process_id, subject_type, access_rights, is_intersection) values (?,?,?,?,?) - """; - } else { - sql = - """ - insert into prohibition (label, node_id, subject_type, access_rights, is_intersection) values (?,(select id from node where name = ?),?,?,?) - """; - } - - int prohibitionID; - try (PreparedStatement ps = connection.getConnection().prepareStatement(sql, PreparedStatement.RETURN_GENERATED_KEYS)) { - ps.setString(1, label); - ps.setString(2, subject.getName()); - ps.setInt(3, getProhibitionSubjectTypeId(subject.getType())); - ps.setString(4, MysqlPolicyStore.arsetToJson(accessRightSet)); - ps.setBoolean(5, intersection); - - ps.executeUpdate(); - - ResultSet generatedKeys = ps.getGeneratedKeys(); - if (generatedKeys.next()) { - prohibitionID = generatedKeys.getInt(1); - } else { - throw new MysqlPolicyException("could not retrieve generated prohibition id after insert"); - } - } catch (SQLException | JsonProcessingException e) { - connection.rollback(); - throw new MysqlPolicyException(e.getMessage()); - } - - sql = """ - insert into prohibition_container (prohibition_id, container_id, is_complement) values (?, (select id from node where name = ?), ?) - """; - try (PreparedStatement ps = connection.getConnection().prepareStatement(sql)) { - for (ContainerCondition containerCondition : containerConditions) { - ps.setInt(1, prohibitionID); - ps.setString(2, containerCondition.name()); - ps.setInt(3, containerCondition.complement() ? 1 : 0); - - ps.addBatch(); - } - - ps.executeBatch(); - } catch (SQLException e) { - connection.rollback(); - throw new MysqlPolicyException(e.getMessage()); - } - - connection.commit(); - } - - private int getProhibitionSubjectTypeId(ProhibitionSubject.Type type) { - switch (type) { - case USER -> { - return 1; - } - case USER_ATTRIBUTE -> { - return 2; - } - case PROCESS -> { - return 3; - } - } - - return 0; - } - - private ProhibitionSubject.Type getProhibitionSubjectTypeFromId(int id) { - switch (id) { - case 1 -> { - return USER; - } - case 2 -> { - return USER_ATTRIBUTE; - } - case 3 -> { - return PROCESS; - } - } - - return USER; - } - - @Override - public void update(String label, ProhibitionSubject subject, AccessRightSet accessRightSet, boolean intersection, ContainerCondition... containerConditions) throws MysqlPolicyException { - connection.beginTx(); - - try { - delete(label); - create(label, subject, accessRightSet, intersection, containerConditions); - connection.commit(); - } catch (MysqlPolicyException e) { - connection.rollback(); - throw e; - } - } - - @Override - public void delete(String label) throws MysqlPolicyException { - String sql = """ - delete from prohibition where label = ? - """; - - try (PreparedStatement ps = connection.getConnection().prepareStatement(sql)) { - ps.setString(1, label); - ps.executeUpdate(); - } catch (SQLException e) { - throw new MysqlPolicyException(e.getMessage()); - } - } - - @Override - public Map> getAll() throws MysqlPolicyException { - String sql = """ - select id, label, (select name from node where node.id=prohibition.node_id) as node, process_id, subject_type, access_rights, is_intersection from prohibition - """; - - try(Statement stmt = connection.getConnection().createStatement(); - ResultSet rs = stmt.executeQuery(sql)) { - - List prohibitions = getProhibitionsFromResultSet(rs); - - rs.close(); - - Map> prohibitionsMap = new HashMap<>(); - for (Prohibition p : prohibitions) { - List subjPros = prohibitionsMap.getOrDefault(p.getSubject().getName(), new ArrayList<>()); - subjPros.add(p); - prohibitionsMap.put(p.getSubject().getName(), subjPros); - } - - return prohibitionsMap; - } catch (SQLException e) { - throw new MysqlPolicyException(e.getMessage()); - } - } - - @Override - public boolean exists(String label) throws PMException { - try { - get(label); - return true; - } catch (ProhibitionDoesNotExistException e) { - return false; - } - } - - private List getContainerConditions(int id) throws SQLException { - List containers = new ArrayList<>(); - String containerSql = """ - select (select name from node where node.id = prohibition_container.container_id) as container, is_complement - from prohibition_container - where prohibition_id=? - """; - - try(PreparedStatement ps = connection.getConnection().prepareStatement(containerSql)) { - ps.setInt(1, id); - ResultSet containerRs = ps.executeQuery(); - while (containerRs.next()) { - String container = containerRs.getString(1); - boolean isComplement = containerRs.getBoolean(2); - containers.add(new ContainerCondition(container, isComplement)); - } - - containerRs.close(); - } - - return containers; - } - - @Override - public List getWithSubject(String subject) throws MysqlPolicyException { - String sql = """ - select id, label, (select name from node where node.id=prohibition.node_id) as node, process_id, subject_type, access_rights, is_intersection - from prohibition - where node_id = (select id from node where name = ?) || process_id = ? - """; - - try(PreparedStatement ps = connection.getConnection().prepareStatement(sql)) { - ps.setString(1, subject); - ps.setString(2, subject); - ResultSet rs = ps.executeQuery(); - - List prohibitions = getProhibitionsFromResultSet(rs); - - rs.close(); - - return prohibitions; - } catch (SQLException e) { - throw new MysqlPolicyException(e.getMessage()); - } - } - - @Override - public Prohibition get(String label) throws PMException { - String sql = """ - select id, label, (select name from node where node.id=prohibition.node_id) as node, process_id, subject_type, access_rights, is_intersection from prohibition where label = ? - """; - - try(PreparedStatement ps = connection.getConnection().prepareStatement(sql)) { - ps.setString(1, label); - ResultSet rs = ps.executeQuery(); - - List prohibitions = getProhibitionsFromResultSet(rs); - if (prohibitions.isEmpty()) { - throw new ProhibitionDoesNotExistException(label); - } - - rs.close(); - - return prohibitions.get(0); - } catch (SQLException e) { - throw new MysqlPolicyException(e.getMessage()); - } - } - - private List getProhibitionsFromResultSet(ResultSet rs) throws MysqlPolicyException { - List prohibitions = new ArrayList<>(); - - try { - while (rs.next()) { - int id = rs.getInt(1); - String label = rs.getString(2); - String node = rs.getString(3); - String process = rs.getString(4); - ProhibitionSubject.Type type = getProhibitionSubjectTypeFromId(rs.getInt(5)); - AccessRightSet arset = MysqlPolicyStore.arsetReader.readValue(rs.getString(6)); - boolean isIntersection = rs.getBoolean(7); - - List containers = getContainerConditions(id); - - prohibitions.add(new Prohibition(label, new ProhibitionSubject(type == PROCESS ? process : node, type), arset, isIntersection, containers)); - } - - return prohibitions; - } catch (SQLException | JsonProcessingException e) { - throw new MysqlPolicyException(e.getMessage()); - } - } - -} diff --git a/src/main/java/gov/nist/csd/pm/pap/mysql/MysqlUserDefinedPML.java b/src/main/java/gov/nist/csd/pm/pap/mysql/MysqlUserDefinedPML.java deleted file mode 100644 index c79ff7669..000000000 --- a/src/main/java/gov/nist/csd/pm/pap/mysql/MysqlUserDefinedPML.java +++ /dev/null @@ -1,167 +0,0 @@ -package gov.nist.csd.pm.pap.mysql; - -import gov.nist.csd.pm.policy.UserDefinedPML; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; -import org.apache.commons.lang3.SerializationUtils; - -import java.io.IOException; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.HashMap; -import java.util.Map; - -public class MysqlUserDefinedPML implements UserDefinedPML { - - private MysqlConnection connection; - - public MysqlUserDefinedPML(MysqlConnection connection) { - this.connection = connection; - } - - @Override - public void createFunction(FunctionDefinitionStatement functionDefinitionStatement) throws MysqlPolicyException { - String sql = """ - insert into pml_function (name, bytes) values (?,?) - """; - try(PreparedStatement ps = connection.getConnection().prepareStatement(sql)) { - ps.setString(1, functionDefinitionStatement.getFunctionName()); - ps.setBytes(2, SerializationUtils.serialize(functionDefinitionStatement)); - ps.executeUpdate(); - } catch (SQLException e) { - throw new MysqlPolicyException(e.getMessage()); - } - } - - @Override - public void deleteFunction(String functionName) throws MysqlPolicyException { - String sql = """ - delete from pml_function where name=? - """; - try(PreparedStatement ps = connection.getConnection().prepareStatement(sql)) { - ps.setString(1, functionName); - ps.executeUpdate(); - } catch (SQLException e) { - throw new MysqlPolicyException(e.getMessage()); - } - } - - @Override - public Map getFunctions() throws PMException { - String sql = """ - select bytes from pml_function - """; - - Map functionDefinitionStatements = new HashMap<>(); - try(PreparedStatement ps = connection.getConnection().prepareStatement(sql); - ResultSet resultSet = ps.executeQuery()) { - while (resultSet.next()) { - FunctionDefinitionStatement funcDef = SerializationUtils.deserialize(resultSet.getBlob(1).getBinaryStream().readAllBytes()); - functionDefinitionStatements.put(funcDef.getFunctionName(), funcDef); - } - } catch (SQLException | IOException e) { - throw new MysqlPolicyException(e.getMessage()); - } - - return functionDefinitionStatements; - } - - @Override - public FunctionDefinitionStatement getFunction(String name) throws PMException { - String sql = """ - select bytes from pml_function where name = ? - """; - - Map functionDefinitionStatements = new HashMap<>(); - try(PreparedStatement ps = connection.getConnection().prepareStatement(sql)) { - ps.setString(1, name); - - FunctionDefinitionStatement funcDef = null; - ResultSet resultSet = ps.executeQuery(); - if (resultSet.next()) { - funcDef = SerializationUtils.deserialize(resultSet.getBlob(1).getBinaryStream().readAllBytes()); - functionDefinitionStatements.put(funcDef.getFunctionName(), funcDef); - } - - resultSet.close(); - - return funcDef; - } catch (SQLException | IOException e) { - throw new MysqlPolicyException(e.getMessage()); - } - } - - @Override - public void createConstant(String constantName, Value constantValue) throws MysqlPolicyException { - String sql = """ - insert into pml_constant (name, value) values (?,?) - """; - try(PreparedStatement ps = connection.getConnection().prepareStatement(sql)) { - ps.setString(1, constantName); - ps.setBytes(2, SerializationUtils.serialize(constantValue)); - ps.executeUpdate(); - } catch (SQLException e) { - throw new MysqlPolicyException(e.getMessage()); - } - } - - @Override - public void deleteConstant(String constName) throws MysqlPolicyException { - String sql = """ - delete from pml_constant where name=? - """; - try(PreparedStatement ps = connection.getConnection().prepareStatement(sql)) { - ps.setString(1, constName); - ps.executeUpdate(); - } catch (SQLException e) { - throw new MysqlPolicyException(e.getMessage()); - } - } - - @Override - public Map getConstants() throws PMException { - String sql = """ - select name, value from pml_constant - """; - - Map constants = new HashMap<>(); - try(PreparedStatement ps = connection.getConnection().prepareStatement(sql); - ResultSet resultSet = ps.executeQuery()) { - while (resultSet.next()) { - String key = resultSet.getString(1); - Value value = SerializationUtils.deserialize(resultSet.getBlob(2).getBinaryStream().readAllBytes()); - constants.put(key, value); - } - } catch (SQLException | IOException e) { - throw new MysqlPolicyException(e.getMessage()); - } - - return constants; - } - - @Override - public Value getConstant(String name) throws PMException { - String sql = """ - select value from pml_constant where name=? - """; - - try(PreparedStatement ps = connection.getConnection().prepareStatement(sql)) { - ps.setString(1, name); - - ResultSet resultSet = ps.executeQuery(); - Value value = null; - if (resultSet.next()) { - value = SerializationUtils.deserialize(resultSet.getBlob(1).getBinaryStream().readAllBytes()); - } - - resultSet.close(); - - return value; - } catch (SQLException | IOException e) { - throw new MysqlPolicyException(e.getMessage()); - } - } - -} diff --git a/src/main/java/gov/nist/csd/pm/pap/mysql/PolicyResetSequence.java b/src/main/java/gov/nist/csd/pm/pap/mysql/PolicyResetSequence.java deleted file mode 100644 index 93e7d4e4a..000000000 --- a/src/main/java/gov/nist/csd/pm/pap/mysql/PolicyResetSequence.java +++ /dev/null @@ -1,28 +0,0 @@ -package gov.nist.csd.pm.pap.mysql; - -import java.sql.Connection; -import java.sql.SQLException; -import java.sql.Statement; -import java.util.Arrays; -import java.util.List; - -public class PolicyResetSequence { - - public static List getSequence() { - return Arrays.asList( - "SET SQL_SAFE_UPDATES = 0", - "SET FOREIGN_KEY_CHECKS=0", - "delete from node", - "delete from assignment", - "delete from association", - "delete from prohibition", - "delete from prohibition_container", - "delete from obligation", - "delete from resource_access_rights", - "delete from pml_function", - "delete from pml_constant", - "SET SQL_SAFE_UPDATES = 1", - "SET FOREIGN_KEY_CHECKS=1" - ); - } -} diff --git a/src/main/java/gov/nist/csd/pm/pap/obligation/EventContext.java b/src/main/java/gov/nist/csd/pm/pap/obligation/EventContext.java new file mode 100644 index 000000000..a3f7816b6 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/obligation/EventContext.java @@ -0,0 +1,79 @@ +package gov.nist.csd.pm.pap.obligation; + +import gov.nist.csd.pm.pap.op.Operation; + +import java.util.List; +import java.util.Map; +import java.util.Objects; + +public class EventContext { + + private final String user; + private final String process; + private final String opName; + private final Map operands; + private final List nodeOperands; + + public EventContext(String user, String process, String opName, Map operands, List nodeOperands) { + this.user = user; + this.process = process; + this.opName = opName; + this.operands = operands; + this.nodeOperands = nodeOperands; + } + + public EventContext(String user, String opName, Map operands, List nodeOperands) { + this(user, "", opName, operands, nodeOperands); + } + + public EventContext(String user, String process, Operation op, Map operands) { + this(user, process, op.getName(), operands, op.getNodeOperands()); + } + + public EventContext(String user, String opName, Map operands) { + this(user, "", opName, operands, List.of()); + } + + public String user() { + return user; + } + + public String process() { + return process; + } + + public String opName() { + return opName; + } + + public Map operands() { + return operands; + } + + public List nodeOperands() { + return nodeOperands; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof EventContext that)) return false; + return Objects.equals(user, that.user) && Objects.equals(process, that.process) && Objects.equals(opName, that.opName) && Objects.equals(operands, that.operands) && Objects.equals(nodeOperands, that.nodeOperands); + } + + @Override + public int hashCode() { + return Objects.hash(user, process, opName, operands, nodeOperands); + } + + @Override + public String toString() { + return "EventContext{" + + "user='" + user + '\'' + + ", process='" + process + '\'' + + ", opName='" + opName + '\'' + + ", operands=" + operands + + ", nodeOperands=" + nodeOperands + + '}'; + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/obligation/EventPattern.java b/src/main/java/gov/nist/csd/pm/pap/obligation/EventPattern.java new file mode 100644 index 000000000..b48e781ba --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/obligation/EventPattern.java @@ -0,0 +1,140 @@ +package gov.nist.csd.pm.pap.obligation; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.pattern.OperationPattern; +import gov.nist.csd.pm.pap.pml.pattern.operand.OperandPatternExpression; +import gov.nist.csd.pm.pap.pml.pattern.subject.SubjectPattern; + +import java.io.Serializable; +import java.util.*; + +public class EventPattern implements Serializable { + + protected SubjectPattern subjectPattern; + protected OperationPattern operationPattern; + protected Map> operandPatterns; + + public EventPattern(SubjectPattern subjectPattern, + OperationPattern operationPattern, + Map> operandPatterns) { + this.subjectPattern = subjectPattern; + this.operationPattern = operationPattern; + this.operandPatterns = operandPatterns; + } + + public EventPattern(SubjectPattern subjectPattern, OperationPattern operationPattern) { + this.subjectPattern = subjectPattern; + this.operationPattern = operationPattern; + this.operandPatterns = new HashMap<>(); + } + + public SubjectPattern getSubjectPattern() { + return subjectPattern; + } + + public void setSubjectPattern(SubjectPattern subjectPattern) { + this.subjectPattern = subjectPattern; + } + + public OperationPattern getOperationPattern() { + return operationPattern; + } + + public void setOperationPattern(OperationPattern operationPattern) { + this.operationPattern = operationPattern; + } + + public Map> getOperandPatterns() { + return operandPatterns; + } + + public void setOperandPatterns(Map> operandPatterns) { + this.operandPatterns = operandPatterns; + } + + public boolean matches(EventContext eventCtx, PAP pap) throws PMException { + boolean userMatches = userMatches(eventCtx.user(), pap) || processMatches(eventCtx.process(), pap); + boolean opMatches = operationMatches(eventCtx.opName(), pap); + if (operationPattern.isAny()) { + return userMatches; + } + + boolean operandsMatch = operandsMatch(eventCtx.operands(), eventCtx.nodeOperands(), pap); + + return userMatches && opMatches && operandsMatch; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof EventPattern that)) return false; + return Objects.equals(subjectPattern, that.subjectPattern) && Objects.equals(operationPattern, that.operationPattern) && Objects.equals(operandPatterns, that.operandPatterns); + } + + @Override + public int hashCode() { + return Objects.hash(subjectPattern, operationPattern, operandPatterns); + } + + @Override + public String toString() { + return "EventPattern[" + + "subjectPattern=" + subjectPattern + ", " + + "operationPattern=" + operationPattern + ", " + + "operandPatterns=" + operandPatterns + ']'; + } + + private boolean userMatches(String user, PAP pap) throws PMException { + return subjectPattern.matches(user, pap); + } + + private boolean processMatches(String process, PAP pap) throws PMException { + return subjectPattern.matches(process, pap); + } + + private boolean operationMatches(String opName, PAP pap) throws PMException { + return operationPattern.matches(opName, pap); + } + + private boolean operandsMatch(Map operands, List nodeOperands, PAP pap) throws PMException { + // if more patterns than operands - false + // if no patterns - true (match everything) + if (operandPatterns.size() > operands.size()) { + return false; + } else if (operandPatterns.isEmpty()) { + return true; + } + + for (String nodeOperand : nodeOperands) { + if (!operandPatterns.containsKey(nodeOperand)) { + continue; + } else if (!operands.containsKey(nodeOperand)) { + return false; + } + + Object operandValue = operands.get(nodeOperand); + List expressions = operandPatterns.get(nodeOperand); + + // needs to match each expression in pattern list + for (OperandPatternExpression operandPatternExpression : expressions) { + switch (operandValue) { + case null -> {} + case String operandValueStr -> { + if (!operandPatternExpression.matches(operandValueStr, pap)) { + return false; + } + } + case Collection operandValueCollection -> { + if (!operandPatternExpression.matches((Collection) operandValueCollection, pap)) { + return false; + } + } + default -> throw new UnexpectedOperandTypeException(operandValue.getClass()); + } + } + } + + return true; + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/obligation/Obligation.java b/src/main/java/gov/nist/csd/pm/pap/obligation/Obligation.java new file mode 100644 index 000000000..66e63a1e9 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/obligation/Obligation.java @@ -0,0 +1,96 @@ +package gov.nist.csd.pm.pap.obligation; + +import gov.nist.csd.pm.pap.pml.statement.operation.CreateObligationStatement; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +public class Obligation implements Serializable { + + private String author; + private String name; + private List rules; + + public Obligation() { + } + + public Obligation(String author, String name) { + this.author = author; + this.name = name; + this.rules = new ArrayList<>(); + } + + public Obligation(String author, String name, List rules) { + this.author = author; + this.name = name; + this.rules = rules; + } + + public Obligation addRule(String name, EventPattern eventPattern, Response response) { + rules.add(new Rule(name, eventPattern, response)); + return this; + } + + public void deleteRule(String name) { + rules.removeIf(rule -> rule.getName().equals(name)); + } + + public String getAuthor() { + return author; + } + + public void setAuthor(String userCtx) { + this.author = userCtx; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public List getRules() { + return rules; + } + + public Rule getRule(String ruleName) { + for (Rule rule : rules) { + if (rule.getName().equals(ruleName)) { + return rule; + } + } + + return null; + } + + public void setRules(List rules) { + this.rules = rules; + } + + public Obligation addRule(Rule rule) { + this.rules.add(rule); + return this; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Obligation that = (Obligation) o; + return Objects.equals(author, that.author) && Objects.equals(name, that.name) && Objects.equals(rules, that.rules); + } + + @Override + public int hashCode() { + return Objects.hash(author, name, rules); + } + + @Override + public String toString() { + return CreateObligationStatement.fromObligation(this).toString(); + } +} \ No newline at end of file diff --git a/src/main/java/gov/nist/csd/pm/pap/obligation/Response.java b/src/main/java/gov/nist/csd/pm/pap/obligation/Response.java new file mode 100644 index 000000000..13cc2ab64 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/obligation/Response.java @@ -0,0 +1,54 @@ +package gov.nist.csd.pm.pap.obligation; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.pml.statement.PMLStatement; +import gov.nist.csd.pm.pap.pml.value.VoidValue; +import gov.nist.csd.pm.pap.pml.value.Value; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; + +import java.io.Serializable; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +public class Response implements Serializable { + + private final List stmts; + private final String eventCtxVariable; + + public Response(String eventCtxVariable, List stmts) { + this.eventCtxVariable = eventCtxVariable; + this.stmts = List.copyOf(stmts); + } + + public Response(Response response) { + this.eventCtxVariable = response.eventCtxVariable; + this.stmts = response.stmts; + } + + public String getEventCtxVariable() { + return eventCtxVariable; + } + + public List getStatements() { + return stmts; + } + + public Value execute(ExecutionContext executionCtx, EventContext eventCtx) throws PMException { + executionCtx.executeStatements(stmts, Map.of(eventCtxVariable, eventCtx)); + + return new VoidValue(); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof Response response)) return false; + return Objects.equals(stmts, response.stmts) && Objects.equals(eventCtxVariable, response.eventCtxVariable); + } + + @Override + public int hashCode() { + return Objects.hash(stmts, eventCtxVariable); + } +} \ No newline at end of file diff --git a/src/main/java/gov/nist/csd/pm/pap/obligation/Rule.java b/src/main/java/gov/nist/csd/pm/pap/obligation/Rule.java new file mode 100644 index 000000000..77b838fb1 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/obligation/Rule.java @@ -0,0 +1,45 @@ +package gov.nist.csd.pm.pap.obligation; + +import java.io.Serializable; +import java.util.Objects; + +public class Rule implements Serializable { + + private String name; + private EventPattern eventPattern; + private Response response; + + public Rule() { + } + + public Rule(String name, EventPattern eventPattern, Response response) { + this.name = name; + this.eventPattern = eventPattern; + this.response = response; + } + + public String getName() { + return name; + } + + public EventPattern getEventPattern() { + return eventPattern; + } + + public Response getResponse() { + return response; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Rule rule = (Rule) o; + return Objects.equals(name, rule.name) && Objects.equals(eventPattern, rule.eventPattern) && Objects.equals(response, rule.response); + } + + @Override + public int hashCode() { + return Objects.hash(name, eventPattern, response); + } +} \ No newline at end of file diff --git a/src/main/java/gov/nist/csd/pm/pap/obligation/UnexpectedOperandTypeException.java b/src/main/java/gov/nist/csd/pm/pap/obligation/UnexpectedOperandTypeException.java new file mode 100644 index 000000000..720e2dd19 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/obligation/UnexpectedOperandTypeException.java @@ -0,0 +1,9 @@ +package gov.nist.csd.pm.pap.obligation; + +import gov.nist.csd.pm.pap.exception.PMException; + +public class UnexpectedOperandTypeException extends PMException { + public UnexpectedOperandTypeException(Class c) { + super("unexpected operand type " + c.getName() + ", expected String or Collection"); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/op/AdminAccessRights.java b/src/main/java/gov/nist/csd/pm/pap/op/AdminAccessRights.java new file mode 100644 index 000000000..b26776ae1 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/op/AdminAccessRights.java @@ -0,0 +1,178 @@ +package gov.nist.csd.pm.pap.op; + +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; + +public class AdminAccessRights { + + public static final String CREATE_POLICY_CLASS = "create_policy_class"; + public static final String CREATE_OBJECT = "create_object"; + public static final String CREATE_OBJECT_ATTRIBUTE = "create_object_attribute"; + public static final String CREATE_USER_ATTRIBUTE = "create_user_attribute"; + public static final String CREATE_USER = "create_user"; + + public static final String SET_NODE_PROPERTIES = "set_node_properties"; + + public static final String DELETE_POLICY_CLASS = "delete_policy_class"; + public static final String DELETE_OBJECT = "delete_object"; + public static final String DELETE_OBJECT_ATTRIBUTE = "delete_object_attribute"; + public static final String DELETE_USER_ATTRIBUTE = "delete_user_attribute"; + public static final String DELETE_USER = "delete_user"; + + public static final String DELETE_POLICY_CLASS_FROM = "delete_policy_class_from"; + public static final String DELETE_OBJECT_FROM = "delete_object_from"; + public static final String DELETE_OBJECT_ATTRIBUTE_FROM = "delete_object_attribute_from"; + public static final String DELETE_USER_ATTRIBUTE_FROM = "delete_user_attribute_from"; + public static final String DELETE_USER_FROM = "delete_user_from"; + + public static final String ASSIGN = "assign"; + public static final String ASSIGN_TO = "assign_to"; + public static final String DEASSIGN = "deassign"; + public static final String DEASSIGN_FROM = "deassign_from"; + + public static final String ASSOCIATE = "associate"; + public static final String ASSOCIATE_TO = "associate_to"; + + public static final String DISSOCIATE = "dissociate"; + public static final String DISSOCIATE_FROM = "dissociate_from"; + + public static final String GET_ASSOCIATIONS = "get_associations"; + public static final String GET_PROHIBITIONS = "get_prohibitions"; + public static final String GET_ACCESS_RIGHTS = "get_access_rights"; + + // prohibitions + public static final String CREATE_PROHIBITION = "create_prohibition"; + public static final String CREATE_PROCESS_PROHIBITION = "create_process_prohibition"; + public static final String DELETE_PROCESS_PROHIBITION = "delete_process_prohibition"; + public static final String GET_PROCESS_PROHIBITIONS = "get_process_prohibitions"; + public static final String DELETE_PROHIBITION = "delete_prohibition"; + + // obligations + public static final String CREATE_OBLIGATION = "create_obligation"; + public static final String DELETE_OBLIGATION = "delete_obligation"; + public static final String GET_OBLIGATION = "get_obligation"; + public static final String DELETE_RULE = "delete_rule"; + public static final String SET_RESOURCE_OPERATIONS = "set_resource_operations"; + public static final String GET_RESOURCE_OPERATIONS = "get_resource_operations"; + + // operations + public static final String CREATE_ADMIN_OPERATION = "create_admin_operation"; + public static final String DELETE_ADMIN_OPERATION = "delete_admin_operation"; + + // routines + public static final String CREATE_ADMIN_ROUTINE = "create_admin_routine"; + public static final String DELETE_ADMIN_ROUTINE = "delete_admin_routine"; + + + // policy review + public static final String REVIEW_POLICY = "review_policy"; + + // policy + public static final String RESET = "reset"; + public static final String SERIALIZE_POLICY = "serialize_policy"; + public static final String DESERIALIZE_POLICY = "deserialize_policy"; + + // pml + public static final String SET_PML_OPS = "set_pml_operations"; + public static final String SET_PML_ROUTINES = "set_pml_routines"; + public static final String SET_PML_CONSTANTS = "set_pml_constants"; + + public static final String ALL_ACCESS_RIGHTS = "*"; + public static final String ALL_ADMIN_ACCESS_RIGHTS = "*a"; + public static final String ALL_RESOURCE_ACCESS_RIGHTS = "*r"; + + private static final AccessRightSet ALL_ADMIN_ACCESS_RIGHTS_SET = new AccessRightSet( + CREATE_POLICY_CLASS, + CREATE_OBJECT, + CREATE_OBJECT_ATTRIBUTE , + CREATE_USER_ATTRIBUTE, + CREATE_USER, + + SET_NODE_PROPERTIES, + + DELETE_POLICY_CLASS, + DELETE_OBJECT, + DELETE_OBJECT_ATTRIBUTE, + DELETE_USER_ATTRIBUTE, + DELETE_USER, + + DELETE_POLICY_CLASS_FROM, + DELETE_OBJECT_FROM, + DELETE_OBJECT_ATTRIBUTE_FROM, + DELETE_USER_ATTRIBUTE_FROM, + DELETE_USER_FROM, + + ASSIGN, + ASSIGN_TO, + DEASSIGN, + DEASSIGN_FROM, + ASSOCIATE, + ASSOCIATE_TO, + DISSOCIATE, + DISSOCIATE_FROM, + + // prohibitions + CREATE_PROHIBITION, + CREATE_PROCESS_PROHIBITION, + DELETE_PROCESS_PROHIBITION, + GET_PROCESS_PROHIBITIONS, + DELETE_PROHIBITION, + + // obligations + CREATE_OBLIGATION, + DELETE_OBLIGATION, + GET_OBLIGATION, + DELETE_RULE, + SET_RESOURCE_OPERATIONS, + GET_RESOURCE_OPERATIONS, + + // operations + CREATE_ADMIN_OPERATION, + DELETE_ADMIN_OPERATION, + + // routines + CREATE_ADMIN_ROUTINE, + DELETE_ADMIN_ROUTINE, + + // policy + RESET, + SERIALIZE_POLICY, + DESERIALIZE_POLICY, + + // pml + SET_PML_OPS, + SET_PML_ROUTINES, + + // review + REVIEW_POLICY + ); + + private static final AccessRightSet WILDCARD_ACCESS_RIGHTS_SET = new AccessRightSet( + ALL_ACCESS_RIGHTS, + ALL_ADMIN_ACCESS_RIGHTS, + ALL_RESOURCE_ACCESS_RIGHTS + ); + + private static final AccessRightSet ALL_ACCESS_RIGHTS_SET = new AccessRightSet(ALL_ACCESS_RIGHTS); + + private AdminAccessRights() {} + + public static AccessRightSet allAdminAccessRights() { + return new AccessRightSet(ALL_ADMIN_ACCESS_RIGHTS_SET); + } + + public static AccessRightSet allAccessRights() { + return new AccessRightSet(ALL_ACCESS_RIGHTS_SET); + } + + public static AccessRightSet wildcardAccessRights() { + return new AccessRightSet(WILDCARD_ACCESS_RIGHTS_SET); + } + + public static boolean isAdminAccessRight(String ar) { + return ALL_ADMIN_ACCESS_RIGHTS_SET.contains(ar); + } + + public static boolean isWildcardAccessRight(String ar) { + return WILDCARD_ACCESS_RIGHTS_SET.contains(ar); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/op/AdminOperations.java b/src/main/java/gov/nist/csd/pm/pap/op/AdminOperations.java new file mode 100644 index 000000000..fc5452275 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/op/AdminOperations.java @@ -0,0 +1,67 @@ +package gov.nist.csd.pm.pap.op; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.op.graph.*; +import gov.nist.csd.pm.pap.op.obligation.CreateObligationOp; +import gov.nist.csd.pm.pap.op.obligation.DeleteObligationOp; +import gov.nist.csd.pm.pap.op.operation.CreateAdminOperationOp; +import gov.nist.csd.pm.pap.op.operation.DeleteAdminOperationOp; +import gov.nist.csd.pm.pap.op.operation.SetResourceOperationsOp; +import gov.nist.csd.pm.pap.op.prohibition.CreateProhibitionOp; +import gov.nist.csd.pm.pap.op.prohibition.DeleteProhibitionOp; +import gov.nist.csd.pm.pap.op.routine.CreateAdminRoutineOp; +import gov.nist.csd.pm.pap.op.routine.DeleteAdminRoutineOp; +import gov.nist.csd.pm.pap.store.OperationsStore; + +import java.util.*; + +public class AdminOperations { + + public static List> ADMIN_OPERATIONS = List.of( + new AssignOp(), + new AssociateOp(), + new CreateObjectAttributeOp(), + new CreateObjectOp(), + new CreatePolicyClassOp(), + new CreateUserAttributeOp(), + new CreateUserOp(), + new DeassignOp(), + new DeleteObjectAttributeOp(), + new DeleteObjectOp(), + new DeletePolicyClassOp(), + new DeleteUserAttributeOp(), + new DeleteUserOp(), + new DissociateOp(), + new SetNodePropertiesOp(), + + new CreateObligationOp(), + new DeleteObligationOp(), + + new CreateAdminOperationOp(), + new DeleteAdminOperationOp(), + new SetResourceOperationsOp(), + + new CreateProhibitionOp(), + new DeleteProhibitionOp(), + + new CreateAdminRoutineOp(), + new DeleteAdminRoutineOp() + ); + + public static Set ADMIN_OP_NAMES = new HashSet<>(adminOperationNames()); + + public static void init(OperationsStore operationsStore) throws PMException { + for (Operation op : ADMIN_OPERATIONS) { + operationsStore.createAdminOperation(op); + } + } + + private static Set adminOperationNames() { + Set names = new HashSet<>(); + for (Operation op : ADMIN_OPERATIONS) { + names.add(op.getName()); + } + + return names; + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/op/Operation.java b/src/main/java/gov/nist/csd/pm/pap/op/Operation.java new file mode 100644 index 000000000..34ed2b0dc --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/op/Operation.java @@ -0,0 +1,112 @@ +package gov.nist.csd.pm.pap.op; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.exception.OperandsDoNotMatchException; +import gov.nist.csd.pm.pap.executable.AdminExecutable; +import gov.nist.csd.pm.pap.query.UserContext; + +import java.io.Serializable; +import java.util.*; + +public abstract class Operation extends AdminExecutable implements Serializable { + + public static final String NAME_OPERAND = "name"; + + protected List nodeOperands; + + public Operation(String name, List allOperands, List nodeOperands) { + super(name, allOperands); + + validateOperandNames(allOperands, nodeOperands); + + this.nodeOperands = nodeOperands; + } + + public Operation(String name, List allOperands) { + super(name, allOperands); + + validateOperandNames(allOperands, new ArrayList<>()); + + this.nodeOperands = new ArrayList<>(); + } + + public Operation(String name) { + super(name, new ArrayList<>()); + + this.nodeOperands = new ArrayList<>(); + } + + private void validateOperandNames(List allOperands, List nodeOperands) { + if (!allOperands.containsAll(nodeOperands)) { + throw new IllegalArgumentException("all nodeOperands must be defined in allOperands"); + } + } + + public List getNodeOperands() { + return nodeOperands; + } + + public abstract void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException; + + public PreparedOperation withOperands(Map actualOperands) throws OperandsDoNotMatchException { + validateOperands(actualOperands); + + return new PreparedOperation<>(this, actualOperands); + } + + public void validateOperands(Map actualOperands) throws OperandsDoNotMatchException { + Set actualOperandNames = actualOperands.keySet(); + + if (actualOperandNames.size() != operandNames.size()) { + throw new OperandsDoNotMatchException(name, operandNames, actualOperandNames); + } + + for (String actualOperandName : actualOperandNames) { + if (!operandNames.contains(actualOperandName)) { + throw new OperandsDoNotMatchException(name, operandNames, actualOperandNames); + } + } + + for (String nodeOperandName : nodeOperands) { + Object operandValue = actualOperands.get(nodeOperandName); + if (operandValue instanceof String) { + continue; + } + + if (operandValue instanceof Collection collection) { + if (collection.isEmpty()) { + continue; + } + + Object next = collection.iterator().next(); + if (next instanceof String) { + continue; + } + } + + throw new IllegalArgumentException("node operand can only be a string or collection of strings"); + } + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Operation operation = (Operation) o; + return Objects.equals(name, operation.name) && Objects.equals(operandNames, operation.operandNames); + } + + @Override + public int hashCode() { + return Objects.hash(name, operandNames); + } + + @Override + public String toString() { + return "Operation{" + + "name='" + name + '\'' + + ", operandNames=" + operandNames + + '}'; + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/op/PreparedOperation.java b/src/main/java/gov/nist/csd/pm/pap/op/PreparedOperation.java new file mode 100644 index 000000000..efd19ad4b --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/op/PreparedOperation.java @@ -0,0 +1,67 @@ +package gov.nist.csd.pm.pap.op; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.obligation.EventContext; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.query.UserContext; + +import java.util.Map; +import java.util.Objects; + +public class PreparedOperation { + + private Operation op; + private Map operands; + + public PreparedOperation(Operation op, Map operands) { + this.op = op; + this.operands = operands; + } + + public Operation getOp() { + return op; + } + + public void setOp(Operation op) { + this.op = op; + } + + public Map getOperands() { + return operands; + } + + public void setOperands(Map operands) { + this.operands = operands; + } + + public T execute(PAP pap) throws PMException { + return op.execute(pap, operands); + } + + public EventContext execute(PAP pap, UserContext userCtx) throws PMException { + // check user can execute op with given operands + op.canExecute(pap, userCtx, operands); + + // execute the op with the given operands + op.execute(pap, operands); + + return new EventContext(userCtx.getUser(), userCtx.getProcess(), op, operands); + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + PreparedOperation that = (PreparedOperation) o; + return Objects.equals(op, that.op) && Objects.equals(operands, that.operands); + } + + @Override + public int hashCode() { + return Objects.hash(op, operands); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/op/PrivilegeChecker.java b/src/main/java/gov/nist/csd/pm/pap/op/PrivilegeChecker.java new file mode 100644 index 000000000..d2d3b73d4 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/op/PrivilegeChecker.java @@ -0,0 +1,67 @@ +package gov.nist.csd.pm.pap.op; + +import gov.nist.csd.pm.pap.admin.AdminPolicyNode; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.pml.pattern.Pattern; +import gov.nist.csd.pm.pap.pml.pattern.ReferencedNodes; +import gov.nist.csd.pm.pdp.exception.UnauthorizedException; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.graph.node.Node; + +import java.util.Arrays; +import java.util.Collection; + +import static gov.nist.csd.pm.pap.graph.node.NodeType.PC; + +public class PrivilegeChecker { + + public static void check(PAP pap, UserContext userCtx, String target, Collection toCheck) throws PMException { + // if checking the permissions on a PC, check the permissions on the target node for the PC + Node targetNode = pap.query().graph().getNode(target); + + if (targetNode.getType().equals(PC)) { + target = AdminPolicyNode.ADMIN_POLICY_OBJECT.nodeName(); + } + + AccessRightSet accessRights = pap.query().access().computePrivileges(userCtx, target); + if (!accessRights.containsAll(toCheck)) { + throw new UnauthorizedException(userCtx, target, toCheck.toArray(String[]::new)); + } + } + + public static void check(PAP pap, UserContext userCtx, String target, String... toCheck) throws PMException { + // if checking the permissions on a PC, check the permissions on the target node for the PC + Node targetNode = pap.query().graph().getNode(target); + + if (targetNode.getType().equals(PC)) { + target = AdminPolicyNode.ADMIN_POLICY_OBJECT.nodeName(); + } + + AccessRightSet accessRights = pap.query().access().computePrivileges(userCtx, target); + if (!accessRights.containsAll(Arrays.asList(toCheck))) { + throw new UnauthorizedException(userCtx, target, toCheck); + } + } + + public static void check(PAP pap, UserContext userCtx, Collection targets, String... toCheck) throws PMException { + for (String target : targets) { + check(pap, userCtx, target, toCheck); + } + } + + public static void checkPattern(PAP pap, UserContext userCtx, Pattern pattern, String toCheck) throws PMException { + ReferencedNodes referencedNodes = pattern.getReferencedNodes(); + if (referencedNodes.isAny()) { + PrivilegeChecker.check(pap, userCtx, AdminPolicyNode.ADMIN_POLICY_OBJECT.nodeName(), toCheck); + + return; + } + + for (String entity : referencedNodes.nodes()) { + PrivilegeChecker.check(pap, userCtx, entity, toCheck); + } + + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/op/graph/AssignOp.java b/src/main/java/gov/nist/csd/pm/pap/op/graph/AssignOp.java new file mode 100644 index 000000000..0c70b2bee --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/op/graph/AssignOp.java @@ -0,0 +1,39 @@ +package gov.nist.csd.pm.pap.op.graph; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.op.PrivilegeChecker; +import gov.nist.csd.pm.pap.query.UserContext; + +import java.util.List; +import java.util.Map; + +import static gov.nist.csd.pm.pap.op.AdminAccessRights.ASSIGN; +import static gov.nist.csd.pm.pap.op.AdminAccessRights.ASSIGN_TO; + +public class AssignOp extends GraphOp { + + public AssignOp() { + super( + "assign", + List.of(ASCENDANT_OPERAND, DESCENDANTS_OPERAND), + List.of(ASCENDANT_OPERAND, DESCENDANTS_OPERAND) + ); + } + + @Override + public Void execute(PAP pap, Map operands) throws PMException { + String asc = (String) operands.get(ASCENDANT_OPERAND); + List descs = (List) operands.get(DESCENDANTS_OPERAND); + + pap.modify().graph().assign(asc, descs); + + return null; + } + + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { + PrivilegeChecker.check(pap, userCtx, (String) operands.get(ASCENDANT_OPERAND), ASSIGN); + PrivilegeChecker.check(pap, userCtx, (List) operands.get(DESCENDANTS_OPERAND), ASSIGN_TO); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/op/graph/AssociateOp.java b/src/main/java/gov/nist/csd/pm/pap/op/graph/AssociateOp.java new file mode 100644 index 000000000..02e7dab90 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/op/graph/AssociateOp.java @@ -0,0 +1,40 @@ +package gov.nist.csd.pm.pap.op.graph; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.op.PrivilegeChecker; +import gov.nist.csd.pm.pap.query.UserContext; + +import java.util.List; +import java.util.Map; + +import static gov.nist.csd.pm.pap.op.AdminAccessRights.*; + +public class AssociateOp extends GraphOp { + + public AssociateOp() { + super("associate", + List.of(UA_OPERAND, TARGET_OPERAND, ARSET_OPERAND), + List.of(UA_OPERAND, TARGET_OPERAND) + ); + } + + @Override + public Void execute(PAP pap, Map operands) throws PMException { + pap.modify().graph().associate( + (String) operands.get(UA_OPERAND), + (String) operands.get(TARGET_OPERAND), + (AccessRightSet) operands.get(ARSET_OPERAND) + ); + + return null; + } + + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { + PrivilegeChecker.check(pap, userCtx, (String) operands.get(UA_OPERAND), ASSOCIATE); + PrivilegeChecker.check(pap, userCtx, (String) operands.get(TARGET_OPERAND), ASSOCIATE_TO); + + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/op/graph/CreateNodeOp.java b/src/main/java/gov/nist/csd/pm/pap/op/graph/CreateNodeOp.java new file mode 100644 index 000000000..e6569cabc --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/op/graph/CreateNodeOp.java @@ -0,0 +1,43 @@ +package gov.nist.csd.pm.pap.op.graph; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.op.PrivilegeChecker; +import gov.nist.csd.pm.pap.query.UserContext; + +import java.util.*; + +public abstract class CreateNodeOp extends GraphOp { + + private String ar; + + public CreateNodeOp(String name, String ar) { + super( + name, + List.of(NAME_OPERAND, DESCENDANTS_OPERAND), + List.of(DESCENDANTS_OPERAND) + ); + + this.ar = ar; + } + + public CreateNodeOp(String name, List nodeOperands, List otherOperands, String ar) { + super( + name, + nodeOperands, + otherOperands + ); + + this.ar = ar; + } + + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { + Collection coll = (Collection) operands.get(DESCENDANTS_OPERAND); + for (Object o : coll) { + if (o instanceof String strColOp) { + PrivilegeChecker.check(pap, userCtx, strColOp, ar); + } + } + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/op/graph/CreateObjectAttributeOp.java b/src/main/java/gov/nist/csd/pm/pap/op/graph/CreateObjectAttributeOp.java new file mode 100644 index 000000000..b579f128f --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/op/graph/CreateObjectAttributeOp.java @@ -0,0 +1,26 @@ +package gov.nist.csd.pm.pap.op.graph; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; + +import java.util.Collection; +import java.util.Map; + +import static gov.nist.csd.pm.pap.op.AdminAccessRights.CREATE_OBJECT_ATTRIBUTE; + +public class CreateObjectAttributeOp extends CreateNodeOp{ + + public CreateObjectAttributeOp() { + super("create_object_attribute", CREATE_OBJECT_ATTRIBUTE); + } + + @Override + public Void execute(PAP pap, Map operands) throws PMException { + pap.modify().graph().createObjectAttribute( + (String) operands.get(NAME_OPERAND), + (Collection) operands.get(DESCENDANTS_OPERAND) + ); + + return null; + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/op/graph/CreateObjectOp.java b/src/main/java/gov/nist/csd/pm/pap/op/graph/CreateObjectOp.java new file mode 100644 index 000000000..e03a1ef28 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/op/graph/CreateObjectOp.java @@ -0,0 +1,26 @@ +package gov.nist.csd.pm.pap.op.graph; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; + +import java.util.Collection; +import java.util.Map; + +import static gov.nist.csd.pm.pap.op.AdminAccessRights.CREATE_OBJECT; + +public class CreateObjectOp extends CreateNodeOp{ + public CreateObjectOp() { + super("create_object", CREATE_OBJECT); + + } + + @Override + public Void execute(PAP pap, Map operands) throws PMException { + pap.modify().graph().createObject( + (String) operands.get(NAME_OPERAND), + (Collection) operands.get(DESCENDANTS_OPERAND) + ); + + return null; + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/op/graph/CreatePolicyClassOp.java b/src/main/java/gov/nist/csd/pm/pap/op/graph/CreatePolicyClassOp.java new file mode 100644 index 000000000..f43ced559 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/op/graph/CreatePolicyClassOp.java @@ -0,0 +1,38 @@ +package gov.nist.csd.pm.pap.op.graph; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.admin.AdminPolicyNode; +import gov.nist.csd.pm.pap.op.*; +import gov.nist.csd.pm.pap.query.UserContext; + +import java.util.List; +import java.util.Map; + +import static gov.nist.csd.pm.pap.op.AdminAccessRights.CREATE_POLICY_CLASS; + +public class CreatePolicyClassOp extends CreateNodeOp{ + + public CreatePolicyClassOp() { + super( + "create_policy_class", + List.of(NAME_OPERAND), + List.of(), + CREATE_POLICY_CLASS + ); + } + + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { + PrivilegeChecker.check(pap, userCtx, AdminPolicyNode.ADMIN_POLICY_OBJECT.nodeName(), CREATE_POLICY_CLASS); + } + + @Override + public Void execute(PAP pap, Map operands) throws PMException { + pap.modify().graph().createPolicyClass( + (String) operands.get(NAME_OPERAND) + ); + + return null; + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/op/graph/CreateUserAttributeOp.java b/src/main/java/gov/nist/csd/pm/pap/op/graph/CreateUserAttributeOp.java new file mode 100644 index 000000000..c388e10f9 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/op/graph/CreateUserAttributeOp.java @@ -0,0 +1,27 @@ +package gov.nist.csd.pm.pap.op.graph; + + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; + +import java.util.Collection; +import java.util.Map; + +import static gov.nist.csd.pm.pap.op.AdminAccessRights.CREATE_USER_ATTRIBUTE; + +public class CreateUserAttributeOp extends CreateNodeOp{ + public CreateUserAttributeOp() { + super("create_user_attribute", CREATE_USER_ATTRIBUTE); + + } + + @Override + public Void execute(PAP pap, Map operands) throws PMException { + pap.modify().graph().createUserAttribute( + (String) operands.get(NAME_OPERAND), + (Collection) operands.get(DESCENDANTS_OPERAND) + ); + + return null; + } +} \ No newline at end of file diff --git a/src/main/java/gov/nist/csd/pm/pap/op/graph/CreateUserOp.java b/src/main/java/gov/nist/csd/pm/pap/op/graph/CreateUserOp.java new file mode 100644 index 000000000..0bd5089bf --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/op/graph/CreateUserOp.java @@ -0,0 +1,26 @@ +package gov.nist.csd.pm.pap.op.graph; + + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; + +import java.util.Collection; +import java.util.Map; + +import static gov.nist.csd.pm.pap.op.AdminAccessRights.CREATE_USER; + +public class CreateUserOp extends CreateNodeOp{ + public CreateUserOp() { + super("create_user", CREATE_USER); + } + + @Override + public Void execute(PAP pap, Map operands) throws PMException { + pap.modify().graph().createUser( + (String) operands.get(NAME_OPERAND), + (Collection) operands.get(DESCENDANTS_OPERAND) + ); + + return null; + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/op/graph/DeassignOp.java b/src/main/java/gov/nist/csd/pm/pap/op/graph/DeassignOp.java new file mode 100644 index 000000000..9c288a048 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/op/graph/DeassignOp.java @@ -0,0 +1,39 @@ +package gov.nist.csd.pm.pap.op.graph; + + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.op.PrivilegeChecker; +import gov.nist.csd.pm.pap.query.UserContext; + +import java.util.List; +import java.util.Map; + +import static gov.nist.csd.pm.pap.op.AdminAccessRights.*; + +public class DeassignOp extends GraphOp { + + public DeassignOp() { + super( + "deassign", + List.of(ASCENDANT_OPERAND, DESCENDANTS_OPERAND), + List.of(ASCENDANT_OPERAND, DESCENDANTS_OPERAND) + ); + } + + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { + PrivilegeChecker.check(pap, userCtx, (String) operands.get(ASCENDANT_OPERAND), DEASSIGN); + PrivilegeChecker.check(pap, userCtx, (List) operands.get(DESCENDANTS_OPERAND), DEASSIGN_FROM); + } + + @Override + public Void execute(PAP pap, Map operands) throws PMException { + String asc = (String) operands.get(ASCENDANT_OPERAND); + List descs = (List) operands.get(DESCENDANTS_OPERAND); + + pap.modify().graph().deassign(asc, descs); + + return null; + } +} \ No newline at end of file diff --git a/src/main/java/gov/nist/csd/pm/pap/op/graph/DeleteNodeOp.java b/src/main/java/gov/nist/csd/pm/pap/op/graph/DeleteNodeOp.java new file mode 100644 index 000000000..12e549a31 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/op/graph/DeleteNodeOp.java @@ -0,0 +1,45 @@ +package gov.nist.csd.pm.pap.op.graph; + + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.op.PrivilegeChecker; +import gov.nist.csd.pm.pap.query.UserContext; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +public abstract class DeleteNodeOp extends GraphOp { + + private String reqCap; + private String descsReqCap; + + public DeleteNodeOp(String name, String reqCap, String descsReqCap) { + super( + name, + List.of(NAME_OPERAND, TYPE_OPERAND, DESCENDANTS_OPERAND), + List.of(NAME_OPERAND, DESCENDANTS_OPERAND) + ); + + this.reqCap = reqCap; + this.descsReqCap = descsReqCap; + } + + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { + PrivilegeChecker.check(pap, userCtx, (String) operands.get(NAME_OPERAND), reqCap); + + Collection descs = (Collection) operands.get(DESCENDANTS_OPERAND); + for (String desc : descs) { + PrivilegeChecker.check(pap, userCtx, desc, descsReqCap); + } + } + + @Override + public Void execute(PAP pap, Map operands) throws PMException { + pap.modify().graph().deleteNode((String) operands.get(NAME_OPERAND)); + + return null; + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/op/graph/DeleteObjectAttributeOp.java b/src/main/java/gov/nist/csd/pm/pap/op/graph/DeleteObjectAttributeOp.java new file mode 100644 index 000000000..4a56fd8da --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/op/graph/DeleteObjectAttributeOp.java @@ -0,0 +1,9 @@ +package gov.nist.csd.pm.pap.op.graph; + +import static gov.nist.csd.pm.pap.op.AdminAccessRights.*; + +public class DeleteObjectAttributeOp extends DeleteNodeOp{ + public DeleteObjectAttributeOp() { + super("delete_object_attribute", DELETE_OBJECT_ATTRIBUTE, DELETE_OBJECT_ATTRIBUTE_FROM); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/op/graph/DeleteObjectOp.java b/src/main/java/gov/nist/csd/pm/pap/op/graph/DeleteObjectOp.java new file mode 100644 index 000000000..5ea92887e --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/op/graph/DeleteObjectOp.java @@ -0,0 +1,9 @@ +package gov.nist.csd.pm.pap.op.graph; + +import static gov.nist.csd.pm.pap.op.AdminAccessRights.*; + +public class DeleteObjectOp extends DeleteNodeOp { + public DeleteObjectOp() { + super("delete_object", DELETE_OBJECT, DELETE_OBJECT_FROM); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/op/graph/DeletePolicyClassOp.java b/src/main/java/gov/nist/csd/pm/pap/op/graph/DeletePolicyClassOp.java new file mode 100644 index 000000000..fa6c4b4b9 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/op/graph/DeletePolicyClassOp.java @@ -0,0 +1,11 @@ +package gov.nist.csd.pm.pap.op.graph; + +import static gov.nist.csd.pm.pap.op.AdminAccessRights.DELETE_POLICY_CLASS; +import static gov.nist.csd.pm.pap.op.AdminAccessRights.DELETE_POLICY_CLASS_FROM; + +public class DeletePolicyClassOp extends DeleteNodeOp { + + public DeletePolicyClassOp() { + super("delete_policy_class", DELETE_POLICY_CLASS, DELETE_POLICY_CLASS_FROM); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/op/graph/DeleteUserAttributeOp.java b/src/main/java/gov/nist/csd/pm/pap/op/graph/DeleteUserAttributeOp.java new file mode 100644 index 000000000..daf1e5788 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/op/graph/DeleteUserAttributeOp.java @@ -0,0 +1,10 @@ +package gov.nist.csd.pm.pap.op.graph; + +import static gov.nist.csd.pm.pap.op.AdminAccessRights.DELETE_USER_ATTRIBUTE; +import static gov.nist.csd.pm.pap.op.AdminAccessRights.DELETE_USER_ATTRIBUTE_FROM; + +public class DeleteUserAttributeOp extends DeleteNodeOp{ + public DeleteUserAttributeOp() { + super("delete_user_attribute", DELETE_USER_ATTRIBUTE, DELETE_USER_ATTRIBUTE_FROM); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/op/graph/DeleteUserOp.java b/src/main/java/gov/nist/csd/pm/pap/op/graph/DeleteUserOp.java new file mode 100644 index 000000000..fd244d4ea --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/op/graph/DeleteUserOp.java @@ -0,0 +1,10 @@ +package gov.nist.csd.pm.pap.op.graph; + +import static gov.nist.csd.pm.pap.op.AdminAccessRights.DELETE_USER; +import static gov.nist.csd.pm.pap.op.AdminAccessRights.DELETE_USER_FROM; + +public class DeleteUserOp extends DeleteNodeOp{ + public DeleteUserOp() { + super("delete_user", DELETE_USER, DELETE_USER_FROM); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/op/graph/DissociateOp.java b/src/main/java/gov/nist/csd/pm/pap/op/graph/DissociateOp.java new file mode 100644 index 000000000..bfd334d30 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/op/graph/DissociateOp.java @@ -0,0 +1,38 @@ +package gov.nist.csd.pm.pap.op.graph; + + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.op.PrivilegeChecker; +import gov.nist.csd.pm.pap.query.UserContext; + +import java.util.List; +import java.util.Map; + +import static gov.nist.csd.pm.pap.op.AdminAccessRights.*; + +public class DissociateOp extends GraphOp { + + public DissociateOp() { + super("dissociate", + List.of(UA_OPERAND, TARGET_OPERAND), + List.of(UA_OPERAND, TARGET_OPERAND) + ); + } + + @Override + public Void execute(PAP pap, Map operands) throws PMException { + pap.modify().graph().dissociate( + (String) operands.get(UA_OPERAND), + (String) operands.get(TARGET_OPERAND) + ); + + return null; + } + + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { + PrivilegeChecker.check(pap, userCtx, (String) operands.get(UA_OPERAND), DISSOCIATE); + PrivilegeChecker.check(pap, userCtx, (String) operands.get(TARGET_OPERAND), DISSOCIATE_FROM); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/op/graph/GraphOp.java b/src/main/java/gov/nist/csd/pm/pap/op/graph/GraphOp.java new file mode 100644 index 000000000..49357209c --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/op/graph/GraphOp.java @@ -0,0 +1,29 @@ +package gov.nist.csd.pm.pap.op.graph; + +import gov.nist.csd.pm.pap.op.*; + +import java.util.List; + +public abstract class GraphOp extends Operation { + + public static final String TYPE_OPERAND = "type"; + public static final String DESCENDANTS_OPERAND = "descendants"; + public static final String PROPERTIES_OPERAND = "properties"; + public static final String ASCENDANT_OPERAND = "ascendant"; + public static final String UA_OPERAND = "ua"; + public static final String TARGET_OPERAND = "target"; + public static final String ARSET_OPERAND = "arset"; + + + public GraphOp(String name, List allOperands, List nodeOperands) { + super(name, allOperands, nodeOperands); + } + + public GraphOp(String name, List allOperands) { + super(name, allOperands); + } + + public GraphOp(String name) { + super(name); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/op/graph/SetNodePropertiesOp.java b/src/main/java/gov/nist/csd/pm/pap/op/graph/SetNodePropertiesOp.java new file mode 100644 index 000000000..e40b32ecb --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/op/graph/SetNodePropertiesOp.java @@ -0,0 +1,38 @@ +package gov.nist.csd.pm.pap.op.graph; + + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.op.PrivilegeChecker; +import gov.nist.csd.pm.pap.query.UserContext; + +import java.util.List; +import java.util.Map; + +import static gov.nist.csd.pm.pap.op.AdminAccessRights.SET_NODE_PROPERTIES; + +public class SetNodePropertiesOp extends GraphOp { + + public SetNodePropertiesOp() { + super( + "set_node_properties", + List.of(NAME_OPERAND, PROPERTIES_OPERAND), + List.of(NAME_OPERAND) + ); + } + + @Override + public Void execute(PAP pap, Map operands) throws PMException { + pap.modify().graph().setNodeProperties( + (String) operands.get(NAME_OPERAND), + (Map) operands.get(PROPERTIES_OPERAND) + ); + + return null; + } + + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { + PrivilegeChecker.check(pap, userCtx, (String) operands.get(NAME_OPERAND), SET_NODE_PROPERTIES); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/op/obligation/CreateObligationOp.java b/src/main/java/gov/nist/csd/pm/pap/op/obligation/CreateObligationOp.java new file mode 100644 index 000000000..67d0f8057 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/op/obligation/CreateObligationOp.java @@ -0,0 +1,28 @@ +package gov.nist.csd.pm.pap.op.obligation; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.obligation.Rule; + +import java.util.List; +import java.util.Map; + +import static gov.nist.csd.pm.pap.op.AdminAccessRights.CREATE_OBLIGATION; + +public class CreateObligationOp extends ObligationOp { + + public CreateObligationOp() { + super("create_obligation", CREATE_OBLIGATION); + } + + @Override + public Void execute(PAP pap, Map operands) throws PMException { + pap.modify().obligations().createObligation( + (String) operands.get(AUTHOR_OPERAND), + (String) operands.get(NAME_OPERAND), + (List) operands.get(RULES_OPERAND) + ); + + return null; + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/op/obligation/DeleteObligationOp.java b/src/main/java/gov/nist/csd/pm/pap/op/obligation/DeleteObligationOp.java new file mode 100644 index 000000000..5326659dc --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/op/obligation/DeleteObligationOp.java @@ -0,0 +1,22 @@ +package gov.nist.csd.pm.pap.op.obligation; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; + +import java.util.Map; + +import static gov.nist.csd.pm.pap.op.AdminAccessRights.DELETE_OBLIGATION; + +public class DeleteObligationOp extends ObligationOp { + + public DeleteObligationOp() { + super("delete_obligation", DELETE_OBLIGATION); + } + + @Override + public Void execute(PAP pap, Map operands) throws PMException { + pap.modify().obligations().deleteObligation((String) operands.get(NAME_OPERAND)); + + return null; + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/op/obligation/ObligationOp.java b/src/main/java/gov/nist/csd/pm/pap/op/obligation/ObligationOp.java new file mode 100644 index 000000000..750512f5b --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/op/obligation/ObligationOp.java @@ -0,0 +1,65 @@ +package gov.nist.csd.pm.pap.op.obligation; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.obligation.EventPattern; +import gov.nist.csd.pm.pap.obligation.Rule; +import gov.nist.csd.pm.pap.pml.pattern.Pattern; +import gov.nist.csd.pm.pap.pml.pattern.ReferencedNodes; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.admin.AdminPolicyNode; +import gov.nist.csd.pm.pap.op.Operation; +import gov.nist.csd.pm.pap.op.PrivilegeChecker; +import gov.nist.csd.pm.pap.pml.pattern.operand.OperandPatternExpression; +import gov.nist.csd.pm.pap.query.UserContext; + +import java.util.List; +import java.util.Map; + +public abstract class ObligationOp extends Operation { + + public static final String AUTHOR_OPERAND = "author"; + public static final String RULES_OPERAND = "rules"; + + private String reqCap; + + public ObligationOp(String opName, String reqCap) { + super( + opName, + List.of(AUTHOR_OPERAND, NAME_OPERAND, RULES_OPERAND) + ); + + this.reqCap = reqCap; + } + + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { + List rules = (List) operands.get(RULES_OPERAND); + for (Rule rule : rules) { + EventPattern eventPattern = rule.getEventPattern(); + + // check subject pattern + Pattern pattern = eventPattern.getSubjectPattern(); + checkPatternPrivileges(pap, userCtx, pattern, reqCap); + + // check operand patterns + for (Map.Entry> operandPattern : eventPattern.getOperandPatterns().entrySet()) { + for (OperandPatternExpression operandPatternExpression : operandPattern.getValue()) { + checkPatternPrivileges(pap, userCtx, operandPatternExpression, reqCap); + } + } + } + } + + static void checkPatternPrivileges(PAP pap, UserContext userCtx, Pattern pattern, String toCheck) throws PMException { + ReferencedNodes referencedNodes = pattern.getReferencedNodes(); + if (referencedNodes.isAny()) { + PrivilegeChecker.check(pap, userCtx, AdminPolicyNode.ADMIN_POLICY_OBJECT.nodeName(), toCheck); + + return; + } + + for (String entity : referencedNodes.nodes()) { + PrivilegeChecker.check(pap, userCtx, entity, toCheck); + } + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/op/operation/CreateAdminOperationOp.java b/src/main/java/gov/nist/csd/pm/pap/op/operation/CreateAdminOperationOp.java new file mode 100644 index 000000000..77df3a097 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/op/operation/CreateAdminOperationOp.java @@ -0,0 +1,38 @@ +package gov.nist.csd.pm.pap.op.operation; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.admin.AdminPolicyNode; +import gov.nist.csd.pm.pap.op.*; +import gov.nist.csd.pm.pap.query.UserContext; + +import java.util.List; +import java.util.Map; + +import static gov.nist.csd.pm.pap.op.AdminAccessRights.CREATE_ADMIN_OPERATION; + +public class CreateAdminOperationOp extends Operation { + + public static final String OPERATION_OPERAND = "operation"; + + public CreateAdminOperationOp() { + super( + "create_admin_operation", + List.of(OPERATION_OPERAND) + ); + } + + @Override + public Void execute(PAP pap, Map operands) throws PMException { + Operation operation = (Operation) operands.get(OPERATION_OPERAND); + + pap.modify().operations().createAdminOperation(operation); + + return null; + } + + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { + PrivilegeChecker.check(pap, userCtx, AdminPolicyNode.ADMIN_POLICY_OBJECT.nodeName(), CREATE_ADMIN_OPERATION); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/op/operation/DeleteAdminOperationOp.java b/src/main/java/gov/nist/csd/pm/pap/op/operation/DeleteAdminOperationOp.java new file mode 100644 index 000000000..924bc5ac0 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/op/operation/DeleteAdminOperationOp.java @@ -0,0 +1,36 @@ +package gov.nist.csd.pm.pap.op.operation; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.admin.AdminPolicyNode; +import gov.nist.csd.pm.pap.op.Operation; +import gov.nist.csd.pm.pap.op.PrivilegeChecker; +import gov.nist.csd.pm.pap.query.UserContext; + +import java.util.List; +import java.util.Map; + +import static gov.nist.csd.pm.pap.op.AdminAccessRights.DELETE_ADMIN_OPERATION; + +public class DeleteAdminOperationOp extends Operation { + + public DeleteAdminOperationOp() { + super( + "delete_admin_operation", + List.of(NAME_OPERAND) + ); + } + + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { + PrivilegeChecker.check(pap, userCtx, AdminPolicyNode.ADMIN_POLICY_OBJECT.nodeName(), DELETE_ADMIN_OPERATION); + } + + @Override + public Void execute(PAP pap, Map operands) throws PMException { + String name = (String) operands.get(NAME_OPERAND); + pap.modify().operations().deleteAdminOperation(name); + + return null; + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/op/operation/SetResourceOperationsOp.java b/src/main/java/gov/nist/csd/pm/pap/op/operation/SetResourceOperationsOp.java new file mode 100644 index 000000000..d3fc28967 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/op/operation/SetResourceOperationsOp.java @@ -0,0 +1,38 @@ +package gov.nist.csd.pm.pap.op.operation; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.admin.AdminPolicyNode; +import gov.nist.csd.pm.pap.op.Operation; +import gov.nist.csd.pm.pap.op.PrivilegeChecker; +import gov.nist.csd.pm.pap.query.UserContext; + +import java.util.List; +import java.util.Map; + +import static gov.nist.csd.pm.pap.op.AdminAccessRights.SET_RESOURCE_OPERATIONS; + +public class SetResourceOperationsOp extends Operation { + + public static final String OPERATIONS_OPERAND = "operations"; + + public SetResourceOperationsOp() { + super( + "set_resource_operations", + List.of(OPERATIONS_OPERAND) + ); + } + + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { + PrivilegeChecker.check(pap, userCtx, AdminPolicyNode.ADMIN_POLICY_OBJECT.nodeName(), SET_RESOURCE_OPERATIONS); + } + + @Override + public Void execute(PAP pap, Map operands) throws PMException { + pap.modify().operations().setResourceOperations((AccessRightSet) operands.get(OPERATIONS_OPERAND)); + + return null; + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/op/prohibition/CreateProhibitionOp.java b/src/main/java/gov/nist/csd/pm/pap/op/prohibition/CreateProhibitionOp.java new file mode 100644 index 000000000..1ac53516a --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/op/prohibition/CreateProhibitionOp.java @@ -0,0 +1,31 @@ +package gov.nist.csd.pm.pap.op.prohibition; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.prohibition.ContainerCondition; +import gov.nist.csd.pm.pap.prohibition.ProhibitionSubject; +import gov.nist.csd.pm.pap.PAP; + +import java.util.*; + +import static gov.nist.csd.pm.pap.op.AdminAccessRights.*; + +public class CreateProhibitionOp extends ProhibitionOp { + + public CreateProhibitionOp() { + super("create_prohibition", CREATE_PROCESS_PROHIBITION, CREATE_PROHIBITION); + } + + @Override + public Void execute(PAP pap, Map operands) throws PMException { + pap.modify().prohibitions().createProhibition( + (String) operands.get(NAME_OPERAND), + (ProhibitionSubject) operands.get(SUBJECT_OPERAND), + (AccessRightSet) operands.get(ARSET_OPERAND), + (Boolean) operands.get(INTERSECTION_OPERAND), + (Collection) operands.get(CONTAINERS_OPERAND) + ); + + return null; + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/op/prohibition/DeleteProhibitionOp.java b/src/main/java/gov/nist/csd/pm/pap/op/prohibition/DeleteProhibitionOp.java new file mode 100644 index 000000000..f81493134 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/op/prohibition/DeleteProhibitionOp.java @@ -0,0 +1,24 @@ +package gov.nist.csd.pm.pap.op.prohibition; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; + +import java.util.Map; + +import static gov.nist.csd.pm.pap.op.AdminAccessRights.*; + +public class DeleteProhibitionOp extends ProhibitionOp { + + public DeleteProhibitionOp() { + super("delete_prohibition", DELETE_PROCESS_PROHIBITION, DELETE_PROHIBITION); + } + + @Override + public Void execute(PAP pap, Map operands) throws PMException { + pap.modify().prohibitions().deleteProhibition( + (String) operands.get(NAME_OPERAND) + ); + + return null; + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/op/prohibition/ProhibitionOp.java b/src/main/java/gov/nist/csd/pm/pap/op/prohibition/ProhibitionOp.java new file mode 100644 index 000000000..7103867ac --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/op/prohibition/ProhibitionOp.java @@ -0,0 +1,56 @@ +package gov.nist.csd.pm.pap.op.prohibition; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.prohibition.ContainerCondition; +import gov.nist.csd.pm.pap.prohibition.ProhibitionSubject; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.admin.AdminPolicyNode; +import gov.nist.csd.pm.pap.op.Operation; +import gov.nist.csd.pm.pap.op.PrivilegeChecker; +import gov.nist.csd.pm.pap.query.UserContext; + +import java.util.*; + +public abstract class ProhibitionOp extends Operation { + + public static final String SUBJECT_OPERAND = "subject"; + public static final String ARSET_OPERAND = "arset"; + public static final String INTERSECTION_OPERAND = "intersection"; + public static final String CONTAINERS_OPERAND = "containers"; + + private String processReqCap; + private String reqCap; + + public ProhibitionOp(String opName, String processReqCap, String reqCap) { + super( + opName, + List.of(NAME_OPERAND, SUBJECT_OPERAND, ARSET_OPERAND, INTERSECTION_OPERAND, CONTAINERS_OPERAND) + ); + + this.processReqCap = processReqCap; + this.reqCap = reqCap; + } + + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { + ProhibitionSubject subject = (ProhibitionSubject) operands.get(SUBJECT_OPERAND); + + if (subject.getType() == ProhibitionSubject.Type.PROCESS) { + PrivilegeChecker.check(pap, userCtx, AdminPolicyNode.ADMIN_POLICY_OBJECT.nodeName(), processReqCap); + } else { + PrivilegeChecker.check(pap, userCtx, subject.getName(), reqCap); + } + + // check that the user can create a prohibition for each container in the condition + Collection containers = (Collection) operands.get(CONTAINERS_OPERAND); + for (ContainerCondition contCond : containers) { + PrivilegeChecker.check(pap, userCtx, contCond.getName(), reqCap); + + // there is another access right needed if the condition is a complement since it applies to a greater + // number of nodes + if (contCond.isComplement()) { + PrivilegeChecker.check(pap, userCtx, AdminPolicyNode.ADMIN_POLICY_OBJECT.nodeName(), reqCap); + } + } + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/op/routine/CreateAdminRoutineOp.java b/src/main/java/gov/nist/csd/pm/pap/op/routine/CreateAdminRoutineOp.java new file mode 100644 index 000000000..ed8ec28fd --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/op/routine/CreateAdminRoutineOp.java @@ -0,0 +1,40 @@ +package gov.nist.csd.pm.pap.op.routine; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.admin.AdminPolicyNode; +import gov.nist.csd.pm.pap.op.Operation; +import gov.nist.csd.pm.pap.op.PrivilegeChecker; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.routine.Routine; + +import java.util.List; +import java.util.Map; + +import static gov.nist.csd.pm.pap.op.AdminAccessRights.CREATE_ADMIN_ROUTINE; + +public class CreateAdminRoutineOp extends Operation { + + public static final String ROUTINE_OPERAND = "routine"; + + public CreateAdminRoutineOp() { + super( + "create_admin_routine", + List.of(ROUTINE_OPERAND) + ); + } + + @Override + public Void execute(PAP pap, Map operands) throws PMException { + Routine routine = (Routine) operands.get(ROUTINE_OPERAND); + + pap.modify().routines().createAdminRoutine(routine); + + return null; + } + + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { + PrivilegeChecker.check(pap, userCtx, AdminPolicyNode.ADMIN_POLICY_OBJECT.nodeName(), CREATE_ADMIN_ROUTINE); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/op/routine/DeleteAdminRoutineOp.java b/src/main/java/gov/nist/csd/pm/pap/op/routine/DeleteAdminRoutineOp.java new file mode 100644 index 000000000..85eadc945 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/op/routine/DeleteAdminRoutineOp.java @@ -0,0 +1,37 @@ +package gov.nist.csd.pm.pap.op.routine; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.admin.AdminPolicyNode; +import gov.nist.csd.pm.pap.op.Operation; +import gov.nist.csd.pm.pap.op.PrivilegeChecker; +import gov.nist.csd.pm.pap.query.UserContext; + +import java.util.List; +import java.util.Map; + +import static gov.nist.csd.pm.pap.op.AdminAccessRights.DELETE_ADMIN_ROUTINE; + +public class DeleteAdminRoutineOp extends Operation { + + public DeleteAdminRoutineOp() { + super( + "create_admin_routine", + List.of(NAME_OPERAND) + ); + } + + @Override + public Void execute(PAP pap, Map operands) throws PMException { + String name = (String) operands.get(NAME_OPERAND); + + pap.modify().routines().deleteAdminRoutine(name); + + return null; + } + + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { + PrivilegeChecker.check(pap, userCtx, AdminPolicyNode.ADMIN_POLICY_OBJECT.nodeName(), DELETE_ADMIN_ROUTINE); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/CompiledPML.java b/src/main/java/gov/nist/csd/pm/pap/pml/CompiledPML.java new file mode 100644 index 000000000..496e1336a --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/CompiledPML.java @@ -0,0 +1,13 @@ +package gov.nist.csd.pm.pap.pml; + +import gov.nist.csd.pm.pap.pml.executable.PMLExecutableSignature; +import gov.nist.csd.pm.pap.pml.statement.PMLStatement; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public record CompiledPML(Map executables, List stmts) { + +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/PMLCompiler.java b/src/main/java/gov/nist/csd/pm/pap/pml/PMLCompiler.java new file mode 100644 index 000000000..8f8524d9e --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/PMLCompiler.java @@ -0,0 +1,125 @@ +package gov.nist.csd.pm.pap.pml; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.op.Operation; +import gov.nist.csd.pm.pap.pml.antlr.PMLLexer; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.compiler.Variable; +import gov.nist.csd.pm.pap.pml.compiler.error.ErrorLog; +import gov.nist.csd.pm.pap.pml.compiler.visitor.PMLVisitor; +import gov.nist.csd.pm.pap.pml.executable.PMLExecutableSignature; +import gov.nist.csd.pm.pap.pml.executable.operation.PMLOperation; +import gov.nist.csd.pm.pap.pml.executable.operation.PMLOperationWrapper; +import gov.nist.csd.pm.pap.pml.executable.operation.PMLStmtsOperation; +import gov.nist.csd.pm.pap.pml.executable.routine.PMLRoutine; +import gov.nist.csd.pm.pap.pml.executable.routine.PMLRoutineWrapper; +import gov.nist.csd.pm.pap.pml.executable.routine.PMLStmtsRoutine; +import gov.nist.csd.pm.pap.pml.scope.CompileGlobalScope; +import gov.nist.csd.pm.pap.pml.scope.GlobalScope; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.exception.PMLCompilationException; +import gov.nist.csd.pm.pap.pml.scope.Scope; +import gov.nist.csd.pm.pap.pml.statement.PMLStatement; +import gov.nist.csd.pm.pap.pml.value.Value; +import gov.nist.csd.pm.pap.routine.Routine; +import org.antlr.v4.runtime.CharStreams; +import org.antlr.v4.runtime.CommonTokenStream; + +import java.util.*; + +public class PMLCompiler { + + protected Map executableSignatures; + protected Map constantVariables; + + public PMLCompiler() { + executableSignatures = new HashMap<>(); + constantVariables = new HashMap<>(); + } + + public PMLCompiler(PAP pap) throws PMException { + executableSignatures = new HashMap<>(); + constantVariables = new HashMap<>(); + + Map operations = pap.getPMLOperations(); + for (PMLOperation operation : operations.values()) { + this.executableSignatures.put(operation.getName(), operation.getSignature()); + } + + Map routines = pap.getPMLRoutines(); + for (PMLRoutine routine : routines.values()) { + this.executableSignatures.put(routine.getName(), routine.getSignature()); + } + + Map constants = pap.getPMLConstants(); + for (Map.Entry constant : constants.entrySet()) { + this.constantVariables.put(constant.getKey(), + new Variable(constant.getKey(), constant.getValue().getType(), true)); + } + + Collection opNames = pap.query().operations().getAdminOperationNames(); + for (String opName : opNames) { + Operation operation = pap.query().operations().getAdminOperation(opName); + if (operation instanceof PMLStmtsOperation pmlStmtsOperation) { + this.executableSignatures.put(pmlStmtsOperation.getName(), pmlStmtsOperation.getSignature()); + } else { + this.executableSignatures.put(opName, new PMLOperationWrapper(operation).getSignature()); + } + } + + Collection routineNames = pap.query().routines().getAdminRoutineNames(); + for (String routineName : routineNames) { + Routine routine = pap.query().routines().getAdminRoutine(routineName); + if (routine instanceof PMLStmtsRoutine pmlStmtsRoutine) { + this.executableSignatures.put(routine.getName(), pmlStmtsRoutine.getSignature()); + } else { + this.executableSignatures.put(routineName, new PMLRoutineWrapper(routine).getSignature()); + } + } + } + + public Map getExecutableSignatures() { + return executableSignatures; + } + + public Map getConstantVariables() { + return constantVariables; + } + + public List compilePML(String input) throws PMException { + ErrorLog errorLog = new ErrorLog(); + + GlobalScope globalScope = new CompileGlobalScope(); + globalScope.addExecutables(executableSignatures); + globalScope.addConstants(constantVariables); + + PMLErrorHandler pmlErrorHandler = new PMLErrorHandler(); + + PMLLexer lexer = new PMLLexer(CharStreams.fromString(input)); + lexer.removeErrorListeners(); + lexer.addErrorListener(pmlErrorHandler); + + CommonTokenStream tokens = new CommonTokenStream(lexer); + PMLParser parser = new PMLParser(tokens); + parser.removeErrorListeners(); + parser.addErrorListener(pmlErrorHandler); + + // check for syntax errors + PMLVisitor pmlVisitor = new PMLVisitor(new VisitorContext(tokens, new Scope<>(globalScope), errorLog, pmlErrorHandler)); + PMLParser.PmlContext pmlCtx = parser.pml(); + if (!pmlErrorHandler.getErrors().isEmpty()) { + throw new PMLCompilationException(pmlErrorHandler.getErrors()); + } + + // compile + List compiled = pmlVisitor.visitPml(pmlCtx); + + // check for errors encountered during compilation + if (!errorLog.getErrors().isEmpty()) { + throw new PMLCompilationException(errorLog.getErrors()); + } + + return compiled; + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/PMLErrorHandler.java b/src/main/java/gov/nist/csd/pm/pap/pml/PMLErrorHandler.java new file mode 100644 index 000000000..5a417fe25 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/PMLErrorHandler.java @@ -0,0 +1,25 @@ +package gov.nist.csd.pm.pap.pml; + +import gov.nist.csd.pm.pap.pml.compiler.Position; +import gov.nist.csd.pm.pap.pml.compiler.error.CompileError; +import org.antlr.v4.runtime.BaseErrorListener; +import org.antlr.v4.runtime.RecognitionException; +import org.antlr.v4.runtime.Recognizer; + +import java.util.ArrayList; +import java.util.List; + +public class PMLErrorHandler extends BaseErrorListener { + + private final List errors = new ArrayList<>(); + + public List getErrors() { + return errors; + } + + @Override + public void syntaxError(Recognizer recognizer, Object offendingSymbol, int line, int charPositionInLine, + String msg, RecognitionException e) { + errors.add(new CompileError(new Position(line, charPositionInLine, 0), msg)); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/antlr/PMLLexer.g4 b/src/main/java/gov/nist/csd/pm/pap/pml/antlr/PMLLexer.g4 new file mode 100644 index 000000000..3b8d69419 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/antlr/PMLLexer.g4 @@ -0,0 +1,176 @@ +lexer grammar PMLLexer; + +OPERATION: 'operation'; +NODEOP: 'nodeop'; +CHECK: 'check'; +ROUTINE: 'routine'; + +CREATE : 'create' ; +DELETE : 'delete' ; + +// obligation keywords +POLICY_ELEMENT: 'policy element' | 'pe' ; +CONTAINED: 'contained'; +RULE: 'rule' ; +WHEN: 'when' ; +PERFORMS: 'performs' ; +AS: 'as' ; +ON: 'on' ; +IN: 'in' ; +DO: 'do' ; +ANY: 'any'; +ASCENDANT_OF: 'ascendant of' ; + +INTERSECTION: 'intersection' | 'inter'; +UNION: 'union' ; +PROCESS: 'process'; + +SET_RESOURCE_OPERATIONS: 'set resource operations'; +ASSIGN: 'assign' ; +DEASSIGN: 'deassign' ; +FROM: 'from' ; +SET_PROPERTIES: 'set properties' ; +WITH_PROPERTIES: 'with properties' ; +OF: 'of' ; +TO: 'to' ; +ASSOCIATE: 'associate' ; +AND: 'and' ; +WITH: 'with' ; +DISSOCIATE: 'dissociate' ; +DENY: 'deny'; +PROHIBITION: 'prohibition'; +OBLIGATION: 'obligation'; +ACCESS_RIGHTS: 'access rights' ; + +POLICY_CLASS: 'policy class' | 'pc' | 'PC' ; +OBJECT_ATTRIBUTE: 'object attribute' | 'oa' | 'OA' ; +USER_ATTRIBUTE: 'user attribute' | 'ua' | 'UA' ; +USER_ATTRIBUTES: 'user attributes' | 'uas' | 'UAs' ; +OBJECT_ATTRIBUTES: 'object attributes' | 'oas' | 'OAs' ; +OBJECT: 'object' | 'o' | 'O' ; +USER: 'user' | 'u' | 'U' ; +ATTRIBUTE: 'attribute'; +ASSOCIATIONS: 'associations' ; + +// Keywords + +BREAK : 'break'; +DEFAULT : 'default'; +MAP : 'map'; +ELSE : 'else'; +CONST : 'const'; +IF : 'if'; +RANGE : 'range'; +CONTINUE : 'continue'; +FOREACH : 'foreach'; +RETURN : 'return'; +VAR : 'var'; +STRING_TYPE : 'string' ; +BOOL_TYPE : 'bool' ; +VOID_TYPE : 'void' ; +ARRAY_TYPE : 'array' ; + +NIL_LIT : 'nil'; + +// boolean literals +TRUE: 'true'; +FALSE: 'false'; + + +ID : [a-zA-Z0-9_]+; + +// Punctuation + +OPEN_PAREN : '('; +CLOSE_PAREN : ')'; +OPEN_CURLY : '{'; +CLOSE_CURLY : '}'; +OPEN_BRACKET : '['; +CLOSE_BRACKET : ']'; +ASSIGN_EQUALS : '='; +COMMA : ','; +SEMI : ';'; +COLON : ':'; +DOT : '.'; +DECLARE_ASSIGN : ':='; + +// Logical + +LOGICAL_OR : '||'; +LOGICAL_AND : '&&'; + +// Relation operators + +EQUALS : '=='; +NOT_EQUALS : '!='; + +// Unary operators + +EXCLAMATION : '!'; + +// Mixed operators + +PLUS : '+'; + +// String literals + +DOUBLE_QUOTE_STRING : '"' (~["\\\r\n] | EscapeSequence)* '"'; + +// Hidden tokens +// WS: [ \t]+ -> channel(HIDDEN); +// NL: [\r\n]+ -> channel(HIDDEN); +WS: [ \t\r\n\u000C]+ -> channel(HIDDEN); + +COMMENT: '/*' .*? '*/' -> channel(HIDDEN); +LINE_COMMENT: '//' ~[\r\n]* -> channel(HIDDEN); + + +fragment EscapeSequence + : '\\' [btnfr"'\\] + | '\\' ([0-3]? [0-7])? [0-7] + | '\\' 'u'+ HexDigit HexDigit HexDigit HexDigit + ; + +fragment HexDigits + : HexDigit ((HexDigit | '_')* HexDigit)? + ; + +fragment HexDigit + : [0-9a-fA-F] + ; + +/* + [The "BSD licence"] + Copyright (c) 2017 Sasa Coh, Michał Błotniak + Copyright (c) 2019 Ivan Kochurkin, kvanttt@gmail.com, Positive Technologies + Copyright (c) 2019 Dmitry Rassadin, flipparassa@gmail.com, Positive Technologies + Copyright (c) 2021 Martin Mirchev, mirchevmartin2203@gmail.com + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/* + * A Go grammar for ANTLR 4 derived from the Go Language Specification + * https://golang.org/ref/spec + */ \ No newline at end of file diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/antlr/PMLLexer.interp b/src/main/java/gov/nist/csd/pm/pap/pml/antlr/PMLLexer.interp new file mode 100644 index 000000000..c73cba751 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/antlr/PMLLexer.interp @@ -0,0 +1,278 @@ +token literal names: +null +'operation' +'nodeop' +'check' +'routine' +'create' +'delete' +null +'contained' +'rule' +'when' +'performs' +'as' +'on' +'in' +'do' +'any' +'ascendant of' +null +'union' +'process' +'set resource operations' +'assign' +'deassign' +'from' +'set properties' +'with properties' +'of' +'to' +'associate' +'and' +'with' +'dissociate' +'deny' +'prohibition' +'obligation' +'access rights' +null +null +null +null +null +null +null +'attribute' +'associations' +'break' +'default' +'map' +'else' +'const' +'if' +'range' +'continue' +'foreach' +'return' +'var' +'string' +'bool' +'void' +'array' +'nil' +'true' +'false' +null +'(' +')' +'{' +'}' +'[' +']' +'=' +',' +';' +':' +'.' +':=' +'||' +'&&' +'==' +'!=' +'!' +'+' +null +null +null +null + +token symbolic names: +null +OPERATION +NODEOP +CHECK +ROUTINE +CREATE +DELETE +POLICY_ELEMENT +CONTAINED +RULE +WHEN +PERFORMS +AS +ON +IN +DO +ANY +ASCENDANT_OF +INTERSECTION +UNION +PROCESS +SET_RESOURCE_OPERATIONS +ASSIGN +DEASSIGN +FROM +SET_PROPERTIES +WITH_PROPERTIES +OF +TO +ASSOCIATE +AND +WITH +DISSOCIATE +DENY +PROHIBITION +OBLIGATION +ACCESS_RIGHTS +POLICY_CLASS +OBJECT_ATTRIBUTE +USER_ATTRIBUTE +USER_ATTRIBUTES +OBJECT_ATTRIBUTES +OBJECT +USER +ATTRIBUTE +ASSOCIATIONS +BREAK +DEFAULT +MAP +ELSE +CONST +IF +RANGE +CONTINUE +FOREACH +RETURN +VAR +STRING_TYPE +BOOL_TYPE +VOID_TYPE +ARRAY_TYPE +NIL_LIT +TRUE +FALSE +ID +OPEN_PAREN +CLOSE_PAREN +OPEN_CURLY +CLOSE_CURLY +OPEN_BRACKET +CLOSE_BRACKET +ASSIGN_EQUALS +COMMA +SEMI +COLON +DOT +DECLARE_ASSIGN +LOGICAL_OR +LOGICAL_AND +EQUALS +NOT_EQUALS +EXCLAMATION +PLUS +DOUBLE_QUOTE_STRING +WS +COMMENT +LINE_COMMENT + +rule names: +OPERATION +NODEOP +CHECK +ROUTINE +CREATE +DELETE +POLICY_ELEMENT +CONTAINED +RULE +WHEN +PERFORMS +AS +ON +IN +DO +ANY +ASCENDANT_OF +INTERSECTION +UNION +PROCESS +SET_RESOURCE_OPERATIONS +ASSIGN +DEASSIGN +FROM +SET_PROPERTIES +WITH_PROPERTIES +OF +TO +ASSOCIATE +AND +WITH +DISSOCIATE +DENY +PROHIBITION +OBLIGATION +ACCESS_RIGHTS +POLICY_CLASS +OBJECT_ATTRIBUTE +USER_ATTRIBUTE +USER_ATTRIBUTES +OBJECT_ATTRIBUTES +OBJECT +USER +ATTRIBUTE +ASSOCIATIONS +BREAK +DEFAULT +MAP +ELSE +CONST +IF +RANGE +CONTINUE +FOREACH +RETURN +VAR +STRING_TYPE +BOOL_TYPE +VOID_TYPE +ARRAY_TYPE +NIL_LIT +TRUE +FALSE +ID +OPEN_PAREN +CLOSE_PAREN +OPEN_CURLY +CLOSE_CURLY +OPEN_BRACKET +CLOSE_BRACKET +ASSIGN_EQUALS +COMMA +SEMI +COLON +DOT +DECLARE_ASSIGN +LOGICAL_OR +LOGICAL_AND +EQUALS +NOT_EQUALS +EXCLAMATION +PLUS +DOUBLE_QUOTE_STRING +WS +COMMENT +LINE_COMMENT +EscapeSequence +HexDigits +HexDigit + +channel names: +DEFAULT_TOKEN_CHANNEL +HIDDEN + +mode names: +DEFAULT_MODE + +atn: +[4, 0, 86, 862, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 241, 8, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 3, 17, 318, 8, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 504, 8, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 526, 8, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 3, 38, 546, 8, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 3, 39, 569, 8, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 3, 40, 594, 8, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 3, 41, 603, 8, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 3, 42, 610, 8, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 4, 63, 740, 8, 63, 11, 63, 12, 63, 741, 1, 64, 1, 64, 1, 65, 1, 65, 1, 66, 1, 66, 1, 67, 1, 67, 1, 68, 1, 68, 1, 69, 1, 69, 1, 70, 1, 70, 1, 71, 1, 71, 1, 72, 1, 72, 1, 73, 1, 73, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 5, 82, 788, 8, 82, 10, 82, 12, 82, 791, 9, 82, 1, 82, 1, 82, 1, 83, 4, 83, 796, 8, 83, 11, 83, 12, 83, 797, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 5, 84, 806, 8, 84, 10, 84, 12, 84, 809, 9, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 85, 5, 85, 820, 8, 85, 10, 85, 12, 85, 823, 9, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 86, 3, 86, 831, 8, 86, 1, 86, 3, 86, 834, 8, 86, 1, 86, 1, 86, 1, 86, 4, 86, 839, 8, 86, 11, 86, 12, 86, 840, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 3, 86, 848, 8, 86, 1, 87, 1, 87, 1, 87, 5, 87, 853, 8, 87, 10, 87, 12, 87, 856, 9, 87, 1, 87, 3, 87, 859, 8, 87, 1, 88, 1, 88, 1, 807, 0, 89, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, 117, 59, 119, 60, 121, 61, 123, 62, 125, 63, 127, 64, 129, 65, 131, 66, 133, 67, 135, 68, 137, 69, 139, 70, 141, 71, 143, 72, 145, 73, 147, 74, 149, 75, 151, 76, 153, 77, 155, 78, 157, 79, 159, 80, 161, 81, 163, 82, 165, 83, 167, 84, 169, 85, 171, 86, 173, 0, 175, 0, 177, 0, 1, 0, 10, 2, 0, 79, 79, 111, 111, 2, 0, 85, 85, 117, 117, 4, 0, 48, 57, 65, 90, 95, 95, 97, 122, 4, 0, 10, 10, 13, 13, 34, 34, 92, 92, 3, 0, 9, 10, 12, 13, 32, 32, 2, 0, 10, 10, 13, 13, 8, 0, 34, 34, 39, 39, 92, 92, 98, 98, 102, 102, 110, 110, 114, 114, 116, 116, 1, 0, 48, 51, 1, 0, 48, 55, 3, 0, 48, 57, 65, 70, 97, 102, 886, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 0, 131, 1, 0, 0, 0, 0, 133, 1, 0, 0, 0, 0, 135, 1, 0, 0, 0, 0, 137, 1, 0, 0, 0, 0, 139, 1, 0, 0, 0, 0, 141, 1, 0, 0, 0, 0, 143, 1, 0, 0, 0, 0, 145, 1, 0, 0, 0, 0, 147, 1, 0, 0, 0, 0, 149, 1, 0, 0, 0, 0, 151, 1, 0, 0, 0, 0, 153, 1, 0, 0, 0, 0, 155, 1, 0, 0, 0, 0, 157, 1, 0, 0, 0, 0, 159, 1, 0, 0, 0, 0, 161, 1, 0, 0, 0, 0, 163, 1, 0, 0, 0, 0, 165, 1, 0, 0, 0, 0, 167, 1, 0, 0, 0, 0, 169, 1, 0, 0, 0, 0, 171, 1, 0, 0, 0, 1, 179, 1, 0, 0, 0, 3, 189, 1, 0, 0, 0, 5, 196, 1, 0, 0, 0, 7, 202, 1, 0, 0, 0, 9, 210, 1, 0, 0, 0, 11, 217, 1, 0, 0, 0, 13, 240, 1, 0, 0, 0, 15, 242, 1, 0, 0, 0, 17, 252, 1, 0, 0, 0, 19, 257, 1, 0, 0, 0, 21, 262, 1, 0, 0, 0, 23, 271, 1, 0, 0, 0, 25, 274, 1, 0, 0, 0, 27, 277, 1, 0, 0, 0, 29, 280, 1, 0, 0, 0, 31, 283, 1, 0, 0, 0, 33, 287, 1, 0, 0, 0, 35, 317, 1, 0, 0, 0, 37, 319, 1, 0, 0, 0, 39, 325, 1, 0, 0, 0, 41, 333, 1, 0, 0, 0, 43, 357, 1, 0, 0, 0, 45, 364, 1, 0, 0, 0, 47, 373, 1, 0, 0, 0, 49, 378, 1, 0, 0, 0, 51, 393, 1, 0, 0, 0, 53, 409, 1, 0, 0, 0, 55, 412, 1, 0, 0, 0, 57, 415, 1, 0, 0, 0, 59, 425, 1, 0, 0, 0, 61, 429, 1, 0, 0, 0, 63, 434, 1, 0, 0, 0, 65, 445, 1, 0, 0, 0, 67, 450, 1, 0, 0, 0, 69, 462, 1, 0, 0, 0, 71, 473, 1, 0, 0, 0, 73, 503, 1, 0, 0, 0, 75, 525, 1, 0, 0, 0, 77, 545, 1, 0, 0, 0, 79, 568, 1, 0, 0, 0, 81, 593, 1, 0, 0, 0, 83, 602, 1, 0, 0, 0, 85, 609, 1, 0, 0, 0, 87, 611, 1, 0, 0, 0, 89, 621, 1, 0, 0, 0, 91, 634, 1, 0, 0, 0, 93, 640, 1, 0, 0, 0, 95, 648, 1, 0, 0, 0, 97, 652, 1, 0, 0, 0, 99, 657, 1, 0, 0, 0, 101, 663, 1, 0, 0, 0, 103, 666, 1, 0, 0, 0, 105, 672, 1, 0, 0, 0, 107, 681, 1, 0, 0, 0, 109, 689, 1, 0, 0, 0, 111, 696, 1, 0, 0, 0, 113, 700, 1, 0, 0, 0, 115, 707, 1, 0, 0, 0, 117, 712, 1, 0, 0, 0, 119, 717, 1, 0, 0, 0, 121, 723, 1, 0, 0, 0, 123, 727, 1, 0, 0, 0, 125, 732, 1, 0, 0, 0, 127, 739, 1, 0, 0, 0, 129, 743, 1, 0, 0, 0, 131, 745, 1, 0, 0, 0, 133, 747, 1, 0, 0, 0, 135, 749, 1, 0, 0, 0, 137, 751, 1, 0, 0, 0, 139, 753, 1, 0, 0, 0, 141, 755, 1, 0, 0, 0, 143, 757, 1, 0, 0, 0, 145, 759, 1, 0, 0, 0, 147, 761, 1, 0, 0, 0, 149, 763, 1, 0, 0, 0, 151, 765, 1, 0, 0, 0, 153, 768, 1, 0, 0, 0, 155, 771, 1, 0, 0, 0, 157, 774, 1, 0, 0, 0, 159, 777, 1, 0, 0, 0, 161, 780, 1, 0, 0, 0, 163, 782, 1, 0, 0, 0, 165, 784, 1, 0, 0, 0, 167, 795, 1, 0, 0, 0, 169, 801, 1, 0, 0, 0, 171, 815, 1, 0, 0, 0, 173, 847, 1, 0, 0, 0, 175, 849, 1, 0, 0, 0, 177, 860, 1, 0, 0, 0, 179, 180, 5, 111, 0, 0, 180, 181, 5, 112, 0, 0, 181, 182, 5, 101, 0, 0, 182, 183, 5, 114, 0, 0, 183, 184, 5, 97, 0, 0, 184, 185, 5, 116, 0, 0, 185, 186, 5, 105, 0, 0, 186, 187, 5, 111, 0, 0, 187, 188, 5, 110, 0, 0, 188, 2, 1, 0, 0, 0, 189, 190, 5, 110, 0, 0, 190, 191, 5, 111, 0, 0, 191, 192, 5, 100, 0, 0, 192, 193, 5, 101, 0, 0, 193, 194, 5, 111, 0, 0, 194, 195, 5, 112, 0, 0, 195, 4, 1, 0, 0, 0, 196, 197, 5, 99, 0, 0, 197, 198, 5, 104, 0, 0, 198, 199, 5, 101, 0, 0, 199, 200, 5, 99, 0, 0, 200, 201, 5, 107, 0, 0, 201, 6, 1, 0, 0, 0, 202, 203, 5, 114, 0, 0, 203, 204, 5, 111, 0, 0, 204, 205, 5, 117, 0, 0, 205, 206, 5, 116, 0, 0, 206, 207, 5, 105, 0, 0, 207, 208, 5, 110, 0, 0, 208, 209, 5, 101, 0, 0, 209, 8, 1, 0, 0, 0, 210, 211, 5, 99, 0, 0, 211, 212, 5, 114, 0, 0, 212, 213, 5, 101, 0, 0, 213, 214, 5, 97, 0, 0, 214, 215, 5, 116, 0, 0, 215, 216, 5, 101, 0, 0, 216, 10, 1, 0, 0, 0, 217, 218, 5, 100, 0, 0, 218, 219, 5, 101, 0, 0, 219, 220, 5, 108, 0, 0, 220, 221, 5, 101, 0, 0, 221, 222, 5, 116, 0, 0, 222, 223, 5, 101, 0, 0, 223, 12, 1, 0, 0, 0, 224, 225, 5, 112, 0, 0, 225, 226, 5, 111, 0, 0, 226, 227, 5, 108, 0, 0, 227, 228, 5, 105, 0, 0, 228, 229, 5, 99, 0, 0, 229, 230, 5, 121, 0, 0, 230, 231, 5, 32, 0, 0, 231, 232, 5, 101, 0, 0, 232, 233, 5, 108, 0, 0, 233, 234, 5, 101, 0, 0, 234, 235, 5, 109, 0, 0, 235, 236, 5, 101, 0, 0, 236, 237, 5, 110, 0, 0, 237, 241, 5, 116, 0, 0, 238, 239, 5, 112, 0, 0, 239, 241, 5, 101, 0, 0, 240, 224, 1, 0, 0, 0, 240, 238, 1, 0, 0, 0, 241, 14, 1, 0, 0, 0, 242, 243, 5, 99, 0, 0, 243, 244, 5, 111, 0, 0, 244, 245, 5, 110, 0, 0, 245, 246, 5, 116, 0, 0, 246, 247, 5, 97, 0, 0, 247, 248, 5, 105, 0, 0, 248, 249, 5, 110, 0, 0, 249, 250, 5, 101, 0, 0, 250, 251, 5, 100, 0, 0, 251, 16, 1, 0, 0, 0, 252, 253, 5, 114, 0, 0, 253, 254, 5, 117, 0, 0, 254, 255, 5, 108, 0, 0, 255, 256, 5, 101, 0, 0, 256, 18, 1, 0, 0, 0, 257, 258, 5, 119, 0, 0, 258, 259, 5, 104, 0, 0, 259, 260, 5, 101, 0, 0, 260, 261, 5, 110, 0, 0, 261, 20, 1, 0, 0, 0, 262, 263, 5, 112, 0, 0, 263, 264, 5, 101, 0, 0, 264, 265, 5, 114, 0, 0, 265, 266, 5, 102, 0, 0, 266, 267, 5, 111, 0, 0, 267, 268, 5, 114, 0, 0, 268, 269, 5, 109, 0, 0, 269, 270, 5, 115, 0, 0, 270, 22, 1, 0, 0, 0, 271, 272, 5, 97, 0, 0, 272, 273, 5, 115, 0, 0, 273, 24, 1, 0, 0, 0, 274, 275, 5, 111, 0, 0, 275, 276, 5, 110, 0, 0, 276, 26, 1, 0, 0, 0, 277, 278, 5, 105, 0, 0, 278, 279, 5, 110, 0, 0, 279, 28, 1, 0, 0, 0, 280, 281, 5, 100, 0, 0, 281, 282, 5, 111, 0, 0, 282, 30, 1, 0, 0, 0, 283, 284, 5, 97, 0, 0, 284, 285, 5, 110, 0, 0, 285, 286, 5, 121, 0, 0, 286, 32, 1, 0, 0, 0, 287, 288, 5, 97, 0, 0, 288, 289, 5, 115, 0, 0, 289, 290, 5, 99, 0, 0, 290, 291, 5, 101, 0, 0, 291, 292, 5, 110, 0, 0, 292, 293, 5, 100, 0, 0, 293, 294, 5, 97, 0, 0, 294, 295, 5, 110, 0, 0, 295, 296, 5, 116, 0, 0, 296, 297, 5, 32, 0, 0, 297, 298, 5, 111, 0, 0, 298, 299, 5, 102, 0, 0, 299, 34, 1, 0, 0, 0, 300, 301, 5, 105, 0, 0, 301, 302, 5, 110, 0, 0, 302, 303, 5, 116, 0, 0, 303, 304, 5, 101, 0, 0, 304, 305, 5, 114, 0, 0, 305, 306, 5, 115, 0, 0, 306, 307, 5, 101, 0, 0, 307, 308, 5, 99, 0, 0, 308, 309, 5, 116, 0, 0, 309, 310, 5, 105, 0, 0, 310, 311, 5, 111, 0, 0, 311, 318, 5, 110, 0, 0, 312, 313, 5, 105, 0, 0, 313, 314, 5, 110, 0, 0, 314, 315, 5, 116, 0, 0, 315, 316, 5, 101, 0, 0, 316, 318, 5, 114, 0, 0, 317, 300, 1, 0, 0, 0, 317, 312, 1, 0, 0, 0, 318, 36, 1, 0, 0, 0, 319, 320, 5, 117, 0, 0, 320, 321, 5, 110, 0, 0, 321, 322, 5, 105, 0, 0, 322, 323, 5, 111, 0, 0, 323, 324, 5, 110, 0, 0, 324, 38, 1, 0, 0, 0, 325, 326, 5, 112, 0, 0, 326, 327, 5, 114, 0, 0, 327, 328, 5, 111, 0, 0, 328, 329, 5, 99, 0, 0, 329, 330, 5, 101, 0, 0, 330, 331, 5, 115, 0, 0, 331, 332, 5, 115, 0, 0, 332, 40, 1, 0, 0, 0, 333, 334, 5, 115, 0, 0, 334, 335, 5, 101, 0, 0, 335, 336, 5, 116, 0, 0, 336, 337, 5, 32, 0, 0, 337, 338, 5, 114, 0, 0, 338, 339, 5, 101, 0, 0, 339, 340, 5, 115, 0, 0, 340, 341, 5, 111, 0, 0, 341, 342, 5, 117, 0, 0, 342, 343, 5, 114, 0, 0, 343, 344, 5, 99, 0, 0, 344, 345, 5, 101, 0, 0, 345, 346, 5, 32, 0, 0, 346, 347, 5, 111, 0, 0, 347, 348, 5, 112, 0, 0, 348, 349, 5, 101, 0, 0, 349, 350, 5, 114, 0, 0, 350, 351, 5, 97, 0, 0, 351, 352, 5, 116, 0, 0, 352, 353, 5, 105, 0, 0, 353, 354, 5, 111, 0, 0, 354, 355, 5, 110, 0, 0, 355, 356, 5, 115, 0, 0, 356, 42, 1, 0, 0, 0, 357, 358, 5, 97, 0, 0, 358, 359, 5, 115, 0, 0, 359, 360, 5, 115, 0, 0, 360, 361, 5, 105, 0, 0, 361, 362, 5, 103, 0, 0, 362, 363, 5, 110, 0, 0, 363, 44, 1, 0, 0, 0, 364, 365, 5, 100, 0, 0, 365, 366, 5, 101, 0, 0, 366, 367, 5, 97, 0, 0, 367, 368, 5, 115, 0, 0, 368, 369, 5, 115, 0, 0, 369, 370, 5, 105, 0, 0, 370, 371, 5, 103, 0, 0, 371, 372, 5, 110, 0, 0, 372, 46, 1, 0, 0, 0, 373, 374, 5, 102, 0, 0, 374, 375, 5, 114, 0, 0, 375, 376, 5, 111, 0, 0, 376, 377, 5, 109, 0, 0, 377, 48, 1, 0, 0, 0, 378, 379, 5, 115, 0, 0, 379, 380, 5, 101, 0, 0, 380, 381, 5, 116, 0, 0, 381, 382, 5, 32, 0, 0, 382, 383, 5, 112, 0, 0, 383, 384, 5, 114, 0, 0, 384, 385, 5, 111, 0, 0, 385, 386, 5, 112, 0, 0, 386, 387, 5, 101, 0, 0, 387, 388, 5, 114, 0, 0, 388, 389, 5, 116, 0, 0, 389, 390, 5, 105, 0, 0, 390, 391, 5, 101, 0, 0, 391, 392, 5, 115, 0, 0, 392, 50, 1, 0, 0, 0, 393, 394, 5, 119, 0, 0, 394, 395, 5, 105, 0, 0, 395, 396, 5, 116, 0, 0, 396, 397, 5, 104, 0, 0, 397, 398, 5, 32, 0, 0, 398, 399, 5, 112, 0, 0, 399, 400, 5, 114, 0, 0, 400, 401, 5, 111, 0, 0, 401, 402, 5, 112, 0, 0, 402, 403, 5, 101, 0, 0, 403, 404, 5, 114, 0, 0, 404, 405, 5, 116, 0, 0, 405, 406, 5, 105, 0, 0, 406, 407, 5, 101, 0, 0, 407, 408, 5, 115, 0, 0, 408, 52, 1, 0, 0, 0, 409, 410, 5, 111, 0, 0, 410, 411, 5, 102, 0, 0, 411, 54, 1, 0, 0, 0, 412, 413, 5, 116, 0, 0, 413, 414, 5, 111, 0, 0, 414, 56, 1, 0, 0, 0, 415, 416, 5, 97, 0, 0, 416, 417, 5, 115, 0, 0, 417, 418, 5, 115, 0, 0, 418, 419, 5, 111, 0, 0, 419, 420, 5, 99, 0, 0, 420, 421, 5, 105, 0, 0, 421, 422, 5, 97, 0, 0, 422, 423, 5, 116, 0, 0, 423, 424, 5, 101, 0, 0, 424, 58, 1, 0, 0, 0, 425, 426, 5, 97, 0, 0, 426, 427, 5, 110, 0, 0, 427, 428, 5, 100, 0, 0, 428, 60, 1, 0, 0, 0, 429, 430, 5, 119, 0, 0, 430, 431, 5, 105, 0, 0, 431, 432, 5, 116, 0, 0, 432, 433, 5, 104, 0, 0, 433, 62, 1, 0, 0, 0, 434, 435, 5, 100, 0, 0, 435, 436, 5, 105, 0, 0, 436, 437, 5, 115, 0, 0, 437, 438, 5, 115, 0, 0, 438, 439, 5, 111, 0, 0, 439, 440, 5, 99, 0, 0, 440, 441, 5, 105, 0, 0, 441, 442, 5, 97, 0, 0, 442, 443, 5, 116, 0, 0, 443, 444, 5, 101, 0, 0, 444, 64, 1, 0, 0, 0, 445, 446, 5, 100, 0, 0, 446, 447, 5, 101, 0, 0, 447, 448, 5, 110, 0, 0, 448, 449, 5, 121, 0, 0, 449, 66, 1, 0, 0, 0, 450, 451, 5, 112, 0, 0, 451, 452, 5, 114, 0, 0, 452, 453, 5, 111, 0, 0, 453, 454, 5, 104, 0, 0, 454, 455, 5, 105, 0, 0, 455, 456, 5, 98, 0, 0, 456, 457, 5, 105, 0, 0, 457, 458, 5, 116, 0, 0, 458, 459, 5, 105, 0, 0, 459, 460, 5, 111, 0, 0, 460, 461, 5, 110, 0, 0, 461, 68, 1, 0, 0, 0, 462, 463, 5, 111, 0, 0, 463, 464, 5, 98, 0, 0, 464, 465, 5, 108, 0, 0, 465, 466, 5, 105, 0, 0, 466, 467, 5, 103, 0, 0, 467, 468, 5, 97, 0, 0, 468, 469, 5, 116, 0, 0, 469, 470, 5, 105, 0, 0, 470, 471, 5, 111, 0, 0, 471, 472, 5, 110, 0, 0, 472, 70, 1, 0, 0, 0, 473, 474, 5, 97, 0, 0, 474, 475, 5, 99, 0, 0, 475, 476, 5, 99, 0, 0, 476, 477, 5, 101, 0, 0, 477, 478, 5, 115, 0, 0, 478, 479, 5, 115, 0, 0, 479, 480, 5, 32, 0, 0, 480, 481, 5, 114, 0, 0, 481, 482, 5, 105, 0, 0, 482, 483, 5, 103, 0, 0, 483, 484, 5, 104, 0, 0, 484, 485, 5, 116, 0, 0, 485, 486, 5, 115, 0, 0, 486, 72, 1, 0, 0, 0, 487, 488, 5, 112, 0, 0, 488, 489, 5, 111, 0, 0, 489, 490, 5, 108, 0, 0, 490, 491, 5, 105, 0, 0, 491, 492, 5, 99, 0, 0, 492, 493, 5, 121, 0, 0, 493, 494, 5, 32, 0, 0, 494, 495, 5, 99, 0, 0, 495, 496, 5, 108, 0, 0, 496, 497, 5, 97, 0, 0, 497, 498, 5, 115, 0, 0, 498, 504, 5, 115, 0, 0, 499, 500, 5, 112, 0, 0, 500, 504, 5, 99, 0, 0, 501, 502, 5, 80, 0, 0, 502, 504, 5, 67, 0, 0, 503, 487, 1, 0, 0, 0, 503, 499, 1, 0, 0, 0, 503, 501, 1, 0, 0, 0, 504, 74, 1, 0, 0, 0, 505, 506, 5, 111, 0, 0, 506, 507, 5, 98, 0, 0, 507, 508, 5, 106, 0, 0, 508, 509, 5, 101, 0, 0, 509, 510, 5, 99, 0, 0, 510, 511, 5, 116, 0, 0, 511, 512, 5, 32, 0, 0, 512, 513, 5, 97, 0, 0, 513, 514, 5, 116, 0, 0, 514, 515, 5, 116, 0, 0, 515, 516, 5, 114, 0, 0, 516, 517, 5, 105, 0, 0, 517, 518, 5, 98, 0, 0, 518, 519, 5, 117, 0, 0, 519, 520, 5, 116, 0, 0, 520, 526, 5, 101, 0, 0, 521, 522, 5, 111, 0, 0, 522, 526, 5, 97, 0, 0, 523, 524, 5, 79, 0, 0, 524, 526, 5, 65, 0, 0, 525, 505, 1, 0, 0, 0, 525, 521, 1, 0, 0, 0, 525, 523, 1, 0, 0, 0, 526, 76, 1, 0, 0, 0, 527, 528, 5, 117, 0, 0, 528, 529, 5, 115, 0, 0, 529, 530, 5, 101, 0, 0, 530, 531, 5, 114, 0, 0, 531, 532, 5, 32, 0, 0, 532, 533, 5, 97, 0, 0, 533, 534, 5, 116, 0, 0, 534, 535, 5, 116, 0, 0, 535, 536, 5, 114, 0, 0, 536, 537, 5, 105, 0, 0, 537, 538, 5, 98, 0, 0, 538, 539, 5, 117, 0, 0, 539, 540, 5, 116, 0, 0, 540, 546, 5, 101, 0, 0, 541, 542, 5, 117, 0, 0, 542, 546, 5, 97, 0, 0, 543, 544, 5, 85, 0, 0, 544, 546, 5, 65, 0, 0, 545, 527, 1, 0, 0, 0, 545, 541, 1, 0, 0, 0, 545, 543, 1, 0, 0, 0, 546, 78, 1, 0, 0, 0, 547, 548, 5, 117, 0, 0, 548, 549, 5, 115, 0, 0, 549, 550, 5, 101, 0, 0, 550, 551, 5, 114, 0, 0, 551, 552, 5, 32, 0, 0, 552, 553, 5, 97, 0, 0, 553, 554, 5, 116, 0, 0, 554, 555, 5, 116, 0, 0, 555, 556, 5, 114, 0, 0, 556, 557, 5, 105, 0, 0, 557, 558, 5, 98, 0, 0, 558, 559, 5, 117, 0, 0, 559, 560, 5, 116, 0, 0, 560, 561, 5, 101, 0, 0, 561, 569, 5, 115, 0, 0, 562, 563, 5, 117, 0, 0, 563, 564, 5, 97, 0, 0, 564, 569, 5, 115, 0, 0, 565, 566, 5, 85, 0, 0, 566, 567, 5, 65, 0, 0, 567, 569, 5, 115, 0, 0, 568, 547, 1, 0, 0, 0, 568, 562, 1, 0, 0, 0, 568, 565, 1, 0, 0, 0, 569, 80, 1, 0, 0, 0, 570, 571, 5, 111, 0, 0, 571, 572, 5, 98, 0, 0, 572, 573, 5, 106, 0, 0, 573, 574, 5, 101, 0, 0, 574, 575, 5, 99, 0, 0, 575, 576, 5, 116, 0, 0, 576, 577, 5, 32, 0, 0, 577, 578, 5, 97, 0, 0, 578, 579, 5, 116, 0, 0, 579, 580, 5, 116, 0, 0, 580, 581, 5, 114, 0, 0, 581, 582, 5, 105, 0, 0, 582, 583, 5, 98, 0, 0, 583, 584, 5, 117, 0, 0, 584, 585, 5, 116, 0, 0, 585, 586, 5, 101, 0, 0, 586, 594, 5, 115, 0, 0, 587, 588, 5, 111, 0, 0, 588, 589, 5, 97, 0, 0, 589, 594, 5, 115, 0, 0, 590, 591, 5, 79, 0, 0, 591, 592, 5, 65, 0, 0, 592, 594, 5, 115, 0, 0, 593, 570, 1, 0, 0, 0, 593, 587, 1, 0, 0, 0, 593, 590, 1, 0, 0, 0, 594, 82, 1, 0, 0, 0, 595, 596, 5, 111, 0, 0, 596, 597, 5, 98, 0, 0, 597, 598, 5, 106, 0, 0, 598, 599, 5, 101, 0, 0, 599, 600, 5, 99, 0, 0, 600, 603, 5, 116, 0, 0, 601, 603, 7, 0, 0, 0, 602, 595, 1, 0, 0, 0, 602, 601, 1, 0, 0, 0, 603, 84, 1, 0, 0, 0, 604, 605, 5, 117, 0, 0, 605, 606, 5, 115, 0, 0, 606, 607, 5, 101, 0, 0, 607, 610, 5, 114, 0, 0, 608, 610, 7, 1, 0, 0, 609, 604, 1, 0, 0, 0, 609, 608, 1, 0, 0, 0, 610, 86, 1, 0, 0, 0, 611, 612, 5, 97, 0, 0, 612, 613, 5, 116, 0, 0, 613, 614, 5, 116, 0, 0, 614, 615, 5, 114, 0, 0, 615, 616, 5, 105, 0, 0, 616, 617, 5, 98, 0, 0, 617, 618, 5, 117, 0, 0, 618, 619, 5, 116, 0, 0, 619, 620, 5, 101, 0, 0, 620, 88, 1, 0, 0, 0, 621, 622, 5, 97, 0, 0, 622, 623, 5, 115, 0, 0, 623, 624, 5, 115, 0, 0, 624, 625, 5, 111, 0, 0, 625, 626, 5, 99, 0, 0, 626, 627, 5, 105, 0, 0, 627, 628, 5, 97, 0, 0, 628, 629, 5, 116, 0, 0, 629, 630, 5, 105, 0, 0, 630, 631, 5, 111, 0, 0, 631, 632, 5, 110, 0, 0, 632, 633, 5, 115, 0, 0, 633, 90, 1, 0, 0, 0, 634, 635, 5, 98, 0, 0, 635, 636, 5, 114, 0, 0, 636, 637, 5, 101, 0, 0, 637, 638, 5, 97, 0, 0, 638, 639, 5, 107, 0, 0, 639, 92, 1, 0, 0, 0, 640, 641, 5, 100, 0, 0, 641, 642, 5, 101, 0, 0, 642, 643, 5, 102, 0, 0, 643, 644, 5, 97, 0, 0, 644, 645, 5, 117, 0, 0, 645, 646, 5, 108, 0, 0, 646, 647, 5, 116, 0, 0, 647, 94, 1, 0, 0, 0, 648, 649, 5, 109, 0, 0, 649, 650, 5, 97, 0, 0, 650, 651, 5, 112, 0, 0, 651, 96, 1, 0, 0, 0, 652, 653, 5, 101, 0, 0, 653, 654, 5, 108, 0, 0, 654, 655, 5, 115, 0, 0, 655, 656, 5, 101, 0, 0, 656, 98, 1, 0, 0, 0, 657, 658, 5, 99, 0, 0, 658, 659, 5, 111, 0, 0, 659, 660, 5, 110, 0, 0, 660, 661, 5, 115, 0, 0, 661, 662, 5, 116, 0, 0, 662, 100, 1, 0, 0, 0, 663, 664, 5, 105, 0, 0, 664, 665, 5, 102, 0, 0, 665, 102, 1, 0, 0, 0, 666, 667, 5, 114, 0, 0, 667, 668, 5, 97, 0, 0, 668, 669, 5, 110, 0, 0, 669, 670, 5, 103, 0, 0, 670, 671, 5, 101, 0, 0, 671, 104, 1, 0, 0, 0, 672, 673, 5, 99, 0, 0, 673, 674, 5, 111, 0, 0, 674, 675, 5, 110, 0, 0, 675, 676, 5, 116, 0, 0, 676, 677, 5, 105, 0, 0, 677, 678, 5, 110, 0, 0, 678, 679, 5, 117, 0, 0, 679, 680, 5, 101, 0, 0, 680, 106, 1, 0, 0, 0, 681, 682, 5, 102, 0, 0, 682, 683, 5, 111, 0, 0, 683, 684, 5, 114, 0, 0, 684, 685, 5, 101, 0, 0, 685, 686, 5, 97, 0, 0, 686, 687, 5, 99, 0, 0, 687, 688, 5, 104, 0, 0, 688, 108, 1, 0, 0, 0, 689, 690, 5, 114, 0, 0, 690, 691, 5, 101, 0, 0, 691, 692, 5, 116, 0, 0, 692, 693, 5, 117, 0, 0, 693, 694, 5, 114, 0, 0, 694, 695, 5, 110, 0, 0, 695, 110, 1, 0, 0, 0, 696, 697, 5, 118, 0, 0, 697, 698, 5, 97, 0, 0, 698, 699, 5, 114, 0, 0, 699, 112, 1, 0, 0, 0, 700, 701, 5, 115, 0, 0, 701, 702, 5, 116, 0, 0, 702, 703, 5, 114, 0, 0, 703, 704, 5, 105, 0, 0, 704, 705, 5, 110, 0, 0, 705, 706, 5, 103, 0, 0, 706, 114, 1, 0, 0, 0, 707, 708, 5, 98, 0, 0, 708, 709, 5, 111, 0, 0, 709, 710, 5, 111, 0, 0, 710, 711, 5, 108, 0, 0, 711, 116, 1, 0, 0, 0, 712, 713, 5, 118, 0, 0, 713, 714, 5, 111, 0, 0, 714, 715, 5, 105, 0, 0, 715, 716, 5, 100, 0, 0, 716, 118, 1, 0, 0, 0, 717, 718, 5, 97, 0, 0, 718, 719, 5, 114, 0, 0, 719, 720, 5, 114, 0, 0, 720, 721, 5, 97, 0, 0, 721, 722, 5, 121, 0, 0, 722, 120, 1, 0, 0, 0, 723, 724, 5, 110, 0, 0, 724, 725, 5, 105, 0, 0, 725, 726, 5, 108, 0, 0, 726, 122, 1, 0, 0, 0, 727, 728, 5, 116, 0, 0, 728, 729, 5, 114, 0, 0, 729, 730, 5, 117, 0, 0, 730, 731, 5, 101, 0, 0, 731, 124, 1, 0, 0, 0, 732, 733, 5, 102, 0, 0, 733, 734, 5, 97, 0, 0, 734, 735, 5, 108, 0, 0, 735, 736, 5, 115, 0, 0, 736, 737, 5, 101, 0, 0, 737, 126, 1, 0, 0, 0, 738, 740, 7, 2, 0, 0, 739, 738, 1, 0, 0, 0, 740, 741, 1, 0, 0, 0, 741, 739, 1, 0, 0, 0, 741, 742, 1, 0, 0, 0, 742, 128, 1, 0, 0, 0, 743, 744, 5, 40, 0, 0, 744, 130, 1, 0, 0, 0, 745, 746, 5, 41, 0, 0, 746, 132, 1, 0, 0, 0, 747, 748, 5, 123, 0, 0, 748, 134, 1, 0, 0, 0, 749, 750, 5, 125, 0, 0, 750, 136, 1, 0, 0, 0, 751, 752, 5, 91, 0, 0, 752, 138, 1, 0, 0, 0, 753, 754, 5, 93, 0, 0, 754, 140, 1, 0, 0, 0, 755, 756, 5, 61, 0, 0, 756, 142, 1, 0, 0, 0, 757, 758, 5, 44, 0, 0, 758, 144, 1, 0, 0, 0, 759, 760, 5, 59, 0, 0, 760, 146, 1, 0, 0, 0, 761, 762, 5, 58, 0, 0, 762, 148, 1, 0, 0, 0, 763, 764, 5, 46, 0, 0, 764, 150, 1, 0, 0, 0, 765, 766, 5, 58, 0, 0, 766, 767, 5, 61, 0, 0, 767, 152, 1, 0, 0, 0, 768, 769, 5, 124, 0, 0, 769, 770, 5, 124, 0, 0, 770, 154, 1, 0, 0, 0, 771, 772, 5, 38, 0, 0, 772, 773, 5, 38, 0, 0, 773, 156, 1, 0, 0, 0, 774, 775, 5, 61, 0, 0, 775, 776, 5, 61, 0, 0, 776, 158, 1, 0, 0, 0, 777, 778, 5, 33, 0, 0, 778, 779, 5, 61, 0, 0, 779, 160, 1, 0, 0, 0, 780, 781, 5, 33, 0, 0, 781, 162, 1, 0, 0, 0, 782, 783, 5, 43, 0, 0, 783, 164, 1, 0, 0, 0, 784, 789, 5, 34, 0, 0, 785, 788, 8, 3, 0, 0, 786, 788, 3, 173, 86, 0, 787, 785, 1, 0, 0, 0, 787, 786, 1, 0, 0, 0, 788, 791, 1, 0, 0, 0, 789, 787, 1, 0, 0, 0, 789, 790, 1, 0, 0, 0, 790, 792, 1, 0, 0, 0, 791, 789, 1, 0, 0, 0, 792, 793, 5, 34, 0, 0, 793, 166, 1, 0, 0, 0, 794, 796, 7, 4, 0, 0, 795, 794, 1, 0, 0, 0, 796, 797, 1, 0, 0, 0, 797, 795, 1, 0, 0, 0, 797, 798, 1, 0, 0, 0, 798, 799, 1, 0, 0, 0, 799, 800, 6, 83, 0, 0, 800, 168, 1, 0, 0, 0, 801, 802, 5, 47, 0, 0, 802, 803, 5, 42, 0, 0, 803, 807, 1, 0, 0, 0, 804, 806, 9, 0, 0, 0, 805, 804, 1, 0, 0, 0, 806, 809, 1, 0, 0, 0, 807, 808, 1, 0, 0, 0, 807, 805, 1, 0, 0, 0, 808, 810, 1, 0, 0, 0, 809, 807, 1, 0, 0, 0, 810, 811, 5, 42, 0, 0, 811, 812, 5, 47, 0, 0, 812, 813, 1, 0, 0, 0, 813, 814, 6, 84, 0, 0, 814, 170, 1, 0, 0, 0, 815, 816, 5, 47, 0, 0, 816, 817, 5, 47, 0, 0, 817, 821, 1, 0, 0, 0, 818, 820, 8, 5, 0, 0, 819, 818, 1, 0, 0, 0, 820, 823, 1, 0, 0, 0, 821, 819, 1, 0, 0, 0, 821, 822, 1, 0, 0, 0, 822, 824, 1, 0, 0, 0, 823, 821, 1, 0, 0, 0, 824, 825, 6, 85, 0, 0, 825, 172, 1, 0, 0, 0, 826, 827, 5, 92, 0, 0, 827, 848, 7, 6, 0, 0, 828, 833, 5, 92, 0, 0, 829, 831, 7, 7, 0, 0, 830, 829, 1, 0, 0, 0, 830, 831, 1, 0, 0, 0, 831, 832, 1, 0, 0, 0, 832, 834, 7, 8, 0, 0, 833, 830, 1, 0, 0, 0, 833, 834, 1, 0, 0, 0, 834, 835, 1, 0, 0, 0, 835, 848, 7, 8, 0, 0, 836, 838, 5, 92, 0, 0, 837, 839, 5, 117, 0, 0, 838, 837, 1, 0, 0, 0, 839, 840, 1, 0, 0, 0, 840, 838, 1, 0, 0, 0, 840, 841, 1, 0, 0, 0, 841, 842, 1, 0, 0, 0, 842, 843, 3, 177, 88, 0, 843, 844, 3, 177, 88, 0, 844, 845, 3, 177, 88, 0, 845, 846, 3, 177, 88, 0, 846, 848, 1, 0, 0, 0, 847, 826, 1, 0, 0, 0, 847, 828, 1, 0, 0, 0, 847, 836, 1, 0, 0, 0, 848, 174, 1, 0, 0, 0, 849, 858, 3, 177, 88, 0, 850, 853, 3, 177, 88, 0, 851, 853, 5, 95, 0, 0, 852, 850, 1, 0, 0, 0, 852, 851, 1, 0, 0, 0, 853, 856, 1, 0, 0, 0, 854, 852, 1, 0, 0, 0, 854, 855, 1, 0, 0, 0, 855, 857, 1, 0, 0, 0, 856, 854, 1, 0, 0, 0, 857, 859, 3, 177, 88, 0, 858, 854, 1, 0, 0, 0, 858, 859, 1, 0, 0, 0, 859, 176, 1, 0, 0, 0, 860, 861, 7, 9, 0, 0, 861, 178, 1, 0, 0, 0, 23, 0, 240, 317, 503, 525, 545, 568, 593, 602, 609, 741, 787, 789, 797, 807, 821, 830, 833, 840, 847, 852, 854, 858, 1, 0, 1, 0] \ No newline at end of file diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/antlr/PMLLexer.java b/src/main/java/gov/nist/csd/pm/pap/pml/antlr/PMLLexer.java new file mode 100644 index 000000000..ac9598478 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/antlr/PMLLexer.java @@ -0,0 +1,679 @@ +// Generated from PMLLexer.g4 by ANTLR 4.13.1 +package gov.nist.csd.pm.pap.pml.antlr; +import org.antlr.v4.runtime.Lexer; +import org.antlr.v4.runtime.CharStream; +import org.antlr.v4.runtime.Token; +import org.antlr.v4.runtime.TokenStream; +import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.misc.*; + +@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue", "this-escape"}) +public class PMLLexer extends Lexer { + static { RuntimeMetaData.checkVersion("4.13.1", RuntimeMetaData.VERSION); } + + protected static final DFA[] _decisionToDFA; + protected static final PredictionContextCache _sharedContextCache = + new PredictionContextCache(); + public static final int + OPERATION=1, NODEOP=2, CHECK=3, ROUTINE=4, CREATE=5, DELETE=6, POLICY_ELEMENT=7, + CONTAINED=8, RULE=9, WHEN=10, PERFORMS=11, AS=12, ON=13, IN=14, DO=15, + ANY=16, ASCENDANT_OF=17, INTERSECTION=18, UNION=19, PROCESS=20, SET_RESOURCE_OPERATIONS=21, + ASSIGN=22, DEASSIGN=23, FROM=24, SET_PROPERTIES=25, WITH_PROPERTIES=26, + OF=27, TO=28, ASSOCIATE=29, AND=30, WITH=31, DISSOCIATE=32, DENY=33, PROHIBITION=34, + OBLIGATION=35, ACCESS_RIGHTS=36, POLICY_CLASS=37, OBJECT_ATTRIBUTE=38, + USER_ATTRIBUTE=39, USER_ATTRIBUTES=40, OBJECT_ATTRIBUTES=41, OBJECT=42, + USER=43, ATTRIBUTE=44, ASSOCIATIONS=45, BREAK=46, DEFAULT=47, MAP=48, + ELSE=49, CONST=50, IF=51, RANGE=52, CONTINUE=53, FOREACH=54, RETURN=55, + VAR=56, STRING_TYPE=57, BOOL_TYPE=58, VOID_TYPE=59, ARRAY_TYPE=60, NIL_LIT=61, + TRUE=62, FALSE=63, ID=64, OPEN_PAREN=65, CLOSE_PAREN=66, OPEN_CURLY=67, + CLOSE_CURLY=68, OPEN_BRACKET=69, CLOSE_BRACKET=70, ASSIGN_EQUALS=71, COMMA=72, + SEMI=73, COLON=74, DOT=75, DECLARE_ASSIGN=76, LOGICAL_OR=77, LOGICAL_AND=78, + EQUALS=79, NOT_EQUALS=80, EXCLAMATION=81, PLUS=82, DOUBLE_QUOTE_STRING=83, + WS=84, COMMENT=85, LINE_COMMENT=86; + public static String[] channelNames = { + "DEFAULT_TOKEN_CHANNEL", "HIDDEN" + }; + + public static String[] modeNames = { + "DEFAULT_MODE" + }; + + private static String[] makeRuleNames() { + return new String[] { + "OPERATION", "NODEOP", "CHECK", "ROUTINE", "CREATE", "DELETE", "POLICY_ELEMENT", + "CONTAINED", "RULE", "WHEN", "PERFORMS", "AS", "ON", "IN", "DO", "ANY", + "ASCENDANT_OF", "INTERSECTION", "UNION", "PROCESS", "SET_RESOURCE_OPERATIONS", + "ASSIGN", "DEASSIGN", "FROM", "SET_PROPERTIES", "WITH_PROPERTIES", "OF", + "TO", "ASSOCIATE", "AND", "WITH", "DISSOCIATE", "DENY", "PROHIBITION", + "OBLIGATION", "ACCESS_RIGHTS", "POLICY_CLASS", "OBJECT_ATTRIBUTE", "USER_ATTRIBUTE", + "USER_ATTRIBUTES", "OBJECT_ATTRIBUTES", "OBJECT", "USER", "ATTRIBUTE", + "ASSOCIATIONS", "BREAK", "DEFAULT", "MAP", "ELSE", "CONST", "IF", "RANGE", + "CONTINUE", "FOREACH", "RETURN", "VAR", "STRING_TYPE", "BOOL_TYPE", "VOID_TYPE", + "ARRAY_TYPE", "NIL_LIT", "TRUE", "FALSE", "ID", "OPEN_PAREN", "CLOSE_PAREN", + "OPEN_CURLY", "CLOSE_CURLY", "OPEN_BRACKET", "CLOSE_BRACKET", "ASSIGN_EQUALS", + "COMMA", "SEMI", "COLON", "DOT", "DECLARE_ASSIGN", "LOGICAL_OR", "LOGICAL_AND", + "EQUALS", "NOT_EQUALS", "EXCLAMATION", "PLUS", "DOUBLE_QUOTE_STRING", + "WS", "COMMENT", "LINE_COMMENT", "EscapeSequence", "HexDigits", "HexDigit" + }; + } + public static final String[] ruleNames = makeRuleNames(); + + private static String[] makeLiteralNames() { + return new String[] { + null, "'operation'", "'nodeop'", "'check'", "'routine'", "'create'", + "'delete'", null, "'contained'", "'rule'", "'when'", "'performs'", "'as'", + "'on'", "'in'", "'do'", "'any'", "'ascendant of'", null, "'union'", "'process'", + "'set resource operations'", "'assign'", "'deassign'", "'from'", "'set properties'", + "'with properties'", "'of'", "'to'", "'associate'", "'and'", "'with'", + "'dissociate'", "'deny'", "'prohibition'", "'obligation'", "'access rights'", + null, null, null, null, null, null, null, "'attribute'", "'associations'", + "'break'", "'default'", "'map'", "'else'", "'const'", "'if'", "'range'", + "'continue'", "'foreach'", "'return'", "'var'", "'string'", "'bool'", + "'void'", "'array'", "'nil'", "'true'", "'false'", null, "'('", "')'", + "'{'", "'}'", "'['", "']'", "'='", "','", "';'", "':'", "'.'", "':='", + "'||'", "'&&'", "'=='", "'!='", "'!'", "'+'" + }; + } + private static final String[] _LITERAL_NAMES = makeLiteralNames(); + private static String[] makeSymbolicNames() { + return new String[] { + null, "OPERATION", "NODEOP", "CHECK", "ROUTINE", "CREATE", "DELETE", + "POLICY_ELEMENT", "CONTAINED", "RULE", "WHEN", "PERFORMS", "AS", "ON", + "IN", "DO", "ANY", "ASCENDANT_OF", "INTERSECTION", "UNION", "PROCESS", + "SET_RESOURCE_OPERATIONS", "ASSIGN", "DEASSIGN", "FROM", "SET_PROPERTIES", + "WITH_PROPERTIES", "OF", "TO", "ASSOCIATE", "AND", "WITH", "DISSOCIATE", + "DENY", "PROHIBITION", "OBLIGATION", "ACCESS_RIGHTS", "POLICY_CLASS", + "OBJECT_ATTRIBUTE", "USER_ATTRIBUTE", "USER_ATTRIBUTES", "OBJECT_ATTRIBUTES", + "OBJECT", "USER", "ATTRIBUTE", "ASSOCIATIONS", "BREAK", "DEFAULT", "MAP", + "ELSE", "CONST", "IF", "RANGE", "CONTINUE", "FOREACH", "RETURN", "VAR", + "STRING_TYPE", "BOOL_TYPE", "VOID_TYPE", "ARRAY_TYPE", "NIL_LIT", "TRUE", + "FALSE", "ID", "OPEN_PAREN", "CLOSE_PAREN", "OPEN_CURLY", "CLOSE_CURLY", + "OPEN_BRACKET", "CLOSE_BRACKET", "ASSIGN_EQUALS", "COMMA", "SEMI", "COLON", + "DOT", "DECLARE_ASSIGN", "LOGICAL_OR", "LOGICAL_AND", "EQUALS", "NOT_EQUALS", + "EXCLAMATION", "PLUS", "DOUBLE_QUOTE_STRING", "WS", "COMMENT", "LINE_COMMENT" + }; + } + private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); + public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); + + /** + * @deprecated Use {@link #VOCABULARY} instead. + */ + @Deprecated + public static final String[] tokenNames; + static { + tokenNames = new String[_SYMBOLIC_NAMES.length]; + for (int i = 0; i < tokenNames.length; i++) { + tokenNames[i] = VOCABULARY.getLiteralName(i); + if (tokenNames[i] == null) { + tokenNames[i] = VOCABULARY.getSymbolicName(i); + } + + if (tokenNames[i] == null) { + tokenNames[i] = ""; + } + } + } + + @Override + @Deprecated + public String[] getTokenNames() { + return tokenNames; + } + + @Override + + public Vocabulary getVocabulary() { + return VOCABULARY; + } + + + public PMLLexer(CharStream input) { + super(input); + _interp = new LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); + } + + @Override + public String getGrammarFileName() { return "PMLLexer.g4"; } + + @Override + public String[] getRuleNames() { return ruleNames; } + + @Override + public String getSerializedATN() { return _serializedATN; } + + @Override + public String[] getChannelNames() { return channelNames; } + + @Override + public String[] getModeNames() { return modeNames; } + + @Override + public ATN getATN() { return _ATN; } + + public static final String _serializedATN = + "\u0004\u0000V\u035e\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002\u0001"+ + "\u0007\u0001\u0002\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004"+ + "\u0007\u0004\u0002\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007"+ + "\u0007\u0007\u0002\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b"+ + "\u0007\u000b\u0002\f\u0007\f\u0002\r\u0007\r\u0002\u000e\u0007\u000e\u0002"+ + "\u000f\u0007\u000f\u0002\u0010\u0007\u0010\u0002\u0011\u0007\u0011\u0002"+ + "\u0012\u0007\u0012\u0002\u0013\u0007\u0013\u0002\u0014\u0007\u0014\u0002"+ + "\u0015\u0007\u0015\u0002\u0016\u0007\u0016\u0002\u0017\u0007\u0017\u0002"+ + "\u0018\u0007\u0018\u0002\u0019\u0007\u0019\u0002\u001a\u0007\u001a\u0002"+ + "\u001b\u0007\u001b\u0002\u001c\u0007\u001c\u0002\u001d\u0007\u001d\u0002"+ + "\u001e\u0007\u001e\u0002\u001f\u0007\u001f\u0002 \u0007 \u0002!\u0007"+ + "!\u0002\"\u0007\"\u0002#\u0007#\u0002$\u0007$\u0002%\u0007%\u0002&\u0007"+ + "&\u0002\'\u0007\'\u0002(\u0007(\u0002)\u0007)\u0002*\u0007*\u0002+\u0007"+ + "+\u0002,\u0007,\u0002-\u0007-\u0002.\u0007.\u0002/\u0007/\u00020\u0007"+ + "0\u00021\u00071\u00022\u00072\u00023\u00073\u00024\u00074\u00025\u0007"+ + "5\u00026\u00076\u00027\u00077\u00028\u00078\u00029\u00079\u0002:\u0007"+ + ":\u0002;\u0007;\u0002<\u0007<\u0002=\u0007=\u0002>\u0007>\u0002?\u0007"+ + "?\u0002@\u0007@\u0002A\u0007A\u0002B\u0007B\u0002C\u0007C\u0002D\u0007"+ + "D\u0002E\u0007E\u0002F\u0007F\u0002G\u0007G\u0002H\u0007H\u0002I\u0007"+ + "I\u0002J\u0007J\u0002K\u0007K\u0002L\u0007L\u0002M\u0007M\u0002N\u0007"+ + "N\u0002O\u0007O\u0002P\u0007P\u0002Q\u0007Q\u0002R\u0007R\u0002S\u0007"+ + "S\u0002T\u0007T\u0002U\u0007U\u0002V\u0007V\u0002W\u0007W\u0002X\u0007"+ + "X\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000"+ + "\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0002"+ + "\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0003"+ + "\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003"+ + "\u0001\u0003\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004"+ + "\u0001\u0004\u0001\u0004\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005"+ + "\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0006\u0001\u0006\u0001\u0006"+ + "\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006"+ + "\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006"+ + "\u0001\u0006\u0003\u0006\u00f1\b\u0006\u0001\u0007\u0001\u0007\u0001\u0007"+ + "\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007"+ + "\u0001\u0007\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\t\u0001\t\u0001"+ + "\t\u0001\t\u0001\t\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001\n\u0001"+ + "\n\u0001\n\u0001\n\u0001\u000b\u0001\u000b\u0001\u000b\u0001\f\u0001\f"+ + "\u0001\f\u0001\r\u0001\r\u0001\r\u0001\u000e\u0001\u000e\u0001\u000e\u0001"+ + "\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u0010\u0001\u0010\u0001"+ + "\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001"+ + "\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0011\u0001"+ + "\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001"+ + "\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001"+ + "\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0003\u0011\u013e\b\u0011\u0001"+ + "\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001"+ + "\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001"+ + "\u0013\u0001\u0013\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001"+ + "\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001"+ + "\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001"+ + "\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001"+ + "\u0014\u0001\u0014\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0015\u0001"+ + "\u0015\u0001\u0015\u0001\u0015\u0001\u0016\u0001\u0016\u0001\u0016\u0001"+ + "\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0016\u0001"+ + "\u0017\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0018\u0001"+ + "\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0001"+ + "\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0001"+ + "\u0018\u0001\u0018\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001"+ + "\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001"+ + "\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001"+ + "\u001a\u0001\u001a\u0001\u001a\u0001\u001b\u0001\u001b\u0001\u001b\u0001"+ + "\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0001"+ + "\u001c\u0001\u001c\u0001\u001c\u0001\u001c\u0001\u001d\u0001\u001d\u0001"+ + "\u001d\u0001\u001d\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001"+ + "\u001e\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001"+ + "\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001"+ + " \u0001 \u0001 \u0001 \u0001 \u0001!\u0001!\u0001!\u0001!\u0001!\u0001"+ + "!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001\"\u0001\"\u0001\"\u0001"+ + "\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001\"\u0001#\u0001"+ + "#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001#\u0001"+ + "#\u0001#\u0001#\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001"+ + "$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0003$\u01f8"+ + "\b$\u0001%\u0001%\u0001%\u0001%\u0001%\u0001%\u0001%\u0001%\u0001%\u0001"+ + "%\u0001%\u0001%\u0001%\u0001%\u0001%\u0001%\u0001%\u0001%\u0001%\u0001"+ + "%\u0003%\u020e\b%\u0001&\u0001&\u0001&\u0001&\u0001&\u0001&\u0001&\u0001"+ + "&\u0001&\u0001&\u0001&\u0001&\u0001&\u0001&\u0001&\u0001&\u0001&\u0001"+ + "&\u0003&\u0222\b&\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001"+ + "\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001"+ + "\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0003\'\u0239\b\'\u0001(\u0001"+ + "(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001"+ + "(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001"+ + "(\u0001(\u0003(\u0252\b(\u0001)\u0001)\u0001)\u0001)\u0001)\u0001)\u0001"+ + ")\u0003)\u025b\b)\u0001*\u0001*\u0001*\u0001*\u0001*\u0003*\u0262\b*\u0001"+ + "+\u0001+\u0001+\u0001+\u0001+\u0001+\u0001+\u0001+\u0001+\u0001+\u0001"+ + ",\u0001,\u0001,\u0001,\u0001,\u0001,\u0001,\u0001,\u0001,\u0001,\u0001"+ + ",\u0001,\u0001,\u0001-\u0001-\u0001-\u0001-\u0001-\u0001-\u0001.\u0001"+ + ".\u0001.\u0001.\u0001.\u0001.\u0001.\u0001.\u0001/\u0001/\u0001/\u0001"+ + "/\u00010\u00010\u00010\u00010\u00010\u00011\u00011\u00011\u00011\u0001"+ + "1\u00011\u00012\u00012\u00012\u00013\u00013\u00013\u00013\u00013\u0001"+ + "3\u00014\u00014\u00014\u00014\u00014\u00014\u00014\u00014\u00014\u0001"+ + "5\u00015\u00015\u00015\u00015\u00015\u00015\u00015\u00016\u00016\u0001"+ + "6\u00016\u00016\u00016\u00016\u00017\u00017\u00017\u00017\u00018\u0001"+ + "8\u00018\u00018\u00018\u00018\u00018\u00019\u00019\u00019\u00019\u0001"+ + "9\u0001:\u0001:\u0001:\u0001:\u0001:\u0001;\u0001;\u0001;\u0001;\u0001"+ + ";\u0001;\u0001<\u0001<\u0001<\u0001<\u0001=\u0001=\u0001=\u0001=\u0001"+ + "=\u0001>\u0001>\u0001>\u0001>\u0001>\u0001>\u0001?\u0004?\u02e4\b?\u000b"+ + "?\f?\u02e5\u0001@\u0001@\u0001A\u0001A\u0001B\u0001B\u0001C\u0001C\u0001"+ + "D\u0001D\u0001E\u0001E\u0001F\u0001F\u0001G\u0001G\u0001H\u0001H\u0001"+ + "I\u0001I\u0001J\u0001J\u0001K\u0001K\u0001K\u0001L\u0001L\u0001L\u0001"+ + "M\u0001M\u0001M\u0001N\u0001N\u0001N\u0001O\u0001O\u0001O\u0001P\u0001"+ + "P\u0001Q\u0001Q\u0001R\u0001R\u0001R\u0005R\u0314\bR\nR\fR\u0317\tR\u0001"+ + "R\u0001R\u0001S\u0004S\u031c\bS\u000bS\fS\u031d\u0001S\u0001S\u0001T\u0001"+ + "T\u0001T\u0001T\u0005T\u0326\bT\nT\fT\u0329\tT\u0001T\u0001T\u0001T\u0001"+ + "T\u0001T\u0001U\u0001U\u0001U\u0001U\u0005U\u0334\bU\nU\fU\u0337\tU\u0001"+ + "U\u0001U\u0001V\u0001V\u0001V\u0001V\u0003V\u033f\bV\u0001V\u0003V\u0342"+ + "\bV\u0001V\u0001V\u0001V\u0004V\u0347\bV\u000bV\fV\u0348\u0001V\u0001"+ + "V\u0001V\u0001V\u0001V\u0003V\u0350\bV\u0001W\u0001W\u0001W\u0005W\u0355"+ + "\bW\nW\fW\u0358\tW\u0001W\u0003W\u035b\bW\u0001X\u0001X\u0001\u0327\u0000"+ + "Y\u0001\u0001\u0003\u0002\u0005\u0003\u0007\u0004\t\u0005\u000b\u0006"+ + "\r\u0007\u000f\b\u0011\t\u0013\n\u0015\u000b\u0017\f\u0019\r\u001b\u000e"+ + "\u001d\u000f\u001f\u0010!\u0011#\u0012%\u0013\'\u0014)\u0015+\u0016-\u0017"+ + "/\u00181\u00193\u001a5\u001b7\u001c9\u001d;\u001e=\u001f? A!C\"E#G$I%"+ + "K&M\'O(Q)S*U+W,Y-[.]/_0a1c2e3g4i5k6m7o8q9s:u;w}?\u007f@\u0081A\u0083"+ + "B\u0085C\u0087D\u0089E\u008bF\u008dG\u008fH\u0091I\u0093J\u0095K\u0097"+ + "L\u0099M\u009bN\u009dO\u009fP\u00a1Q\u00a3R\u00a5S\u00a7T\u00a9U\u00ab"+ + "V\u00ad\u0000\u00af\u0000\u00b1\u0000\u0001\u0000\n\u0002\u0000OOoo\u0002"+ + "\u0000UUuu\u0004\u000009AZ__az\u0004\u0000\n\n\r\r\"\"\\\\\u0003\u0000"+ + "\t\n\f\r \u0002\u0000\n\n\r\r\b\u0000\"\"\'\'\\\\bbffnnrrtt\u0001\u0000"+ + "03\u0001\u000007\u0003\u000009AFaf\u0376\u0000\u0001\u0001\u0000\u0000"+ + "\u0000\u0000\u0003\u0001\u0000\u0000\u0000\u0000\u0005\u0001\u0000\u0000"+ + "\u0000\u0000\u0007\u0001\u0000\u0000\u0000\u0000\t\u0001\u0000\u0000\u0000"+ + "\u0000\u000b\u0001\u0000\u0000\u0000\u0000\r\u0001\u0000\u0000\u0000\u0000"+ + "\u000f\u0001\u0000\u0000\u0000\u0000\u0011\u0001\u0000\u0000\u0000\u0000"+ + "\u0013\u0001\u0000\u0000\u0000\u0000\u0015\u0001\u0000\u0000\u0000\u0000"+ + "\u0017\u0001\u0000\u0000\u0000\u0000\u0019\u0001\u0000\u0000\u0000\u0000"+ + "\u001b\u0001\u0000\u0000\u0000\u0000\u001d\u0001\u0000\u0000\u0000\u0000"+ + "\u001f\u0001\u0000\u0000\u0000\u0000!\u0001\u0000\u0000\u0000\u0000#\u0001"+ + "\u0000\u0000\u0000\u0000%\u0001\u0000\u0000\u0000\u0000\'\u0001\u0000"+ + "\u0000\u0000\u0000)\u0001\u0000\u0000\u0000\u0000+\u0001\u0000\u0000\u0000"+ + "\u0000-\u0001\u0000\u0000\u0000\u0000/\u0001\u0000\u0000\u0000\u00001"+ + "\u0001\u0000\u0000\u0000\u00003\u0001\u0000\u0000\u0000\u00005\u0001\u0000"+ + "\u0000\u0000\u00007\u0001\u0000\u0000\u0000\u00009\u0001\u0000\u0000\u0000"+ + "\u0000;\u0001\u0000\u0000\u0000\u0000=\u0001\u0000\u0000\u0000\u0000?"+ + "\u0001\u0000\u0000\u0000\u0000A\u0001\u0000\u0000\u0000\u0000C\u0001\u0000"+ + "\u0000\u0000\u0000E\u0001\u0000\u0000\u0000\u0000G\u0001\u0000\u0000\u0000"+ + "\u0000I\u0001\u0000\u0000\u0000\u0000K\u0001\u0000\u0000\u0000\u0000M"+ + "\u0001\u0000\u0000\u0000\u0000O\u0001\u0000\u0000\u0000\u0000Q\u0001\u0000"+ + "\u0000\u0000\u0000S\u0001\u0000\u0000\u0000\u0000U\u0001\u0000\u0000\u0000"+ + "\u0000W\u0001\u0000\u0000\u0000\u0000Y\u0001\u0000\u0000\u0000\u0000["+ + "\u0001\u0000\u0000\u0000\u0000]\u0001\u0000\u0000\u0000\u0000_\u0001\u0000"+ + "\u0000\u0000\u0000a\u0001\u0000\u0000\u0000\u0000c\u0001\u0000\u0000\u0000"+ + "\u0000e\u0001\u0000\u0000\u0000\u0000g\u0001\u0000\u0000\u0000\u0000i"+ + "\u0001\u0000\u0000\u0000\u0000k\u0001\u0000\u0000\u0000\u0000m\u0001\u0000"+ + "\u0000\u0000\u0000o\u0001\u0000\u0000\u0000\u0000q\u0001\u0000\u0000\u0000"+ + "\u0000s\u0001\u0000\u0000\u0000\u0000u\u0001\u0000\u0000\u0000\u0000w"+ + "\u0001\u0000\u0000\u0000\u0000y\u0001\u0000\u0000\u0000\u0000{\u0001\u0000"+ + "\u0000\u0000\u0000}\u0001\u0000\u0000\u0000\u0000\u007f\u0001\u0000\u0000"+ + "\u0000\u0000\u0081\u0001\u0000\u0000\u0000\u0000\u0083\u0001\u0000\u0000"+ + "\u0000\u0000\u0085\u0001\u0000\u0000\u0000\u0000\u0087\u0001\u0000\u0000"+ + "\u0000\u0000\u0089\u0001\u0000\u0000\u0000\u0000\u008b\u0001\u0000\u0000"+ + "\u0000\u0000\u008d\u0001\u0000\u0000\u0000\u0000\u008f\u0001\u0000\u0000"+ + "\u0000\u0000\u0091\u0001\u0000\u0000\u0000\u0000\u0093\u0001\u0000\u0000"+ + "\u0000\u0000\u0095\u0001\u0000\u0000\u0000\u0000\u0097\u0001\u0000\u0000"+ + "\u0000\u0000\u0099\u0001\u0000\u0000\u0000\u0000\u009b\u0001\u0000\u0000"+ + "\u0000\u0000\u009d\u0001\u0000\u0000\u0000\u0000\u009f\u0001\u0000\u0000"+ + "\u0000\u0000\u00a1\u0001\u0000\u0000\u0000\u0000\u00a3\u0001\u0000\u0000"+ + "\u0000\u0000\u00a5\u0001\u0000\u0000\u0000\u0000\u00a7\u0001\u0000\u0000"+ + "\u0000\u0000\u00a9\u0001\u0000\u0000\u0000\u0000\u00ab\u0001\u0000\u0000"+ + "\u0000\u0001\u00b3\u0001\u0000\u0000\u0000\u0003\u00bd\u0001\u0000\u0000"+ + "\u0000\u0005\u00c4\u0001\u0000\u0000\u0000\u0007\u00ca\u0001\u0000\u0000"+ + "\u0000\t\u00d2\u0001\u0000\u0000\u0000\u000b\u00d9\u0001\u0000\u0000\u0000"+ + "\r\u00f0\u0001\u0000\u0000\u0000\u000f\u00f2\u0001\u0000\u0000\u0000\u0011"+ + "\u00fc\u0001\u0000\u0000\u0000\u0013\u0101\u0001\u0000\u0000\u0000\u0015"+ + "\u0106\u0001\u0000\u0000\u0000\u0017\u010f\u0001\u0000\u0000\u0000\u0019"+ + "\u0112\u0001\u0000\u0000\u0000\u001b\u0115\u0001\u0000\u0000\u0000\u001d"+ + "\u0118\u0001\u0000\u0000\u0000\u001f\u011b\u0001\u0000\u0000\u0000!\u011f"+ + "\u0001\u0000\u0000\u0000#\u013d\u0001\u0000\u0000\u0000%\u013f\u0001\u0000"+ + "\u0000\u0000\'\u0145\u0001\u0000\u0000\u0000)\u014d\u0001\u0000\u0000"+ + "\u0000+\u0165\u0001\u0000\u0000\u0000-\u016c\u0001\u0000\u0000\u0000/"+ + "\u0175\u0001\u0000\u0000\u00001\u017a\u0001\u0000\u0000\u00003\u0189\u0001"+ + "\u0000\u0000\u00005\u0199\u0001\u0000\u0000\u00007\u019c\u0001\u0000\u0000"+ + "\u00009\u019f\u0001\u0000\u0000\u0000;\u01a9\u0001\u0000\u0000\u0000="+ + "\u01ad\u0001\u0000\u0000\u0000?\u01b2\u0001\u0000\u0000\u0000A\u01bd\u0001"+ + "\u0000\u0000\u0000C\u01c2\u0001\u0000\u0000\u0000E\u01ce\u0001\u0000\u0000"+ + "\u0000G\u01d9\u0001\u0000\u0000\u0000I\u01f7\u0001\u0000\u0000\u0000K"+ + "\u020d\u0001\u0000\u0000\u0000M\u0221\u0001\u0000\u0000\u0000O\u0238\u0001"+ + "\u0000\u0000\u0000Q\u0251\u0001\u0000\u0000\u0000S\u025a\u0001\u0000\u0000"+ + "\u0000U\u0261\u0001\u0000\u0000\u0000W\u0263\u0001\u0000\u0000\u0000Y"+ + "\u026d\u0001\u0000\u0000\u0000[\u027a\u0001\u0000\u0000\u0000]\u0280\u0001"+ + "\u0000\u0000\u0000_\u0288\u0001\u0000\u0000\u0000a\u028c\u0001\u0000\u0000"+ + "\u0000c\u0291\u0001\u0000\u0000\u0000e\u0297\u0001\u0000\u0000\u0000g"+ + "\u029a\u0001\u0000\u0000\u0000i\u02a0\u0001\u0000\u0000\u0000k\u02a9\u0001"+ + "\u0000\u0000\u0000m\u02b1\u0001\u0000\u0000\u0000o\u02b8\u0001\u0000\u0000"+ + "\u0000q\u02bc\u0001\u0000\u0000\u0000s\u02c3\u0001\u0000\u0000\u0000u"+ + "\u02c8\u0001\u0000\u0000\u0000w\u02cd\u0001\u0000\u0000\u0000y\u02d3\u0001"+ + "\u0000\u0000\u0000{\u02d7\u0001\u0000\u0000\u0000}\u02dc\u0001\u0000\u0000"+ + "\u0000\u007f\u02e3\u0001\u0000\u0000\u0000\u0081\u02e7\u0001\u0000\u0000"+ + "\u0000\u0083\u02e9\u0001\u0000\u0000\u0000\u0085\u02eb\u0001\u0000\u0000"+ + "\u0000\u0087\u02ed\u0001\u0000\u0000\u0000\u0089\u02ef\u0001\u0000\u0000"+ + "\u0000\u008b\u02f1\u0001\u0000\u0000\u0000\u008d\u02f3\u0001\u0000\u0000"+ + "\u0000\u008f\u02f5\u0001\u0000\u0000\u0000\u0091\u02f7\u0001\u0000\u0000"+ + "\u0000\u0093\u02f9\u0001\u0000\u0000\u0000\u0095\u02fb\u0001\u0000\u0000"+ + "\u0000\u0097\u02fd\u0001\u0000\u0000\u0000\u0099\u0300\u0001\u0000\u0000"+ + "\u0000\u009b\u0303\u0001\u0000\u0000\u0000\u009d\u0306\u0001\u0000\u0000"+ + "\u0000\u009f\u0309\u0001\u0000\u0000\u0000\u00a1\u030c\u0001\u0000\u0000"+ + "\u0000\u00a3\u030e\u0001\u0000\u0000\u0000\u00a5\u0310\u0001\u0000\u0000"+ + "\u0000\u00a7\u031b\u0001\u0000\u0000\u0000\u00a9\u0321\u0001\u0000\u0000"+ + "\u0000\u00ab\u032f\u0001\u0000\u0000\u0000\u00ad\u034f\u0001\u0000\u0000"+ + "\u0000\u00af\u0351\u0001\u0000\u0000\u0000\u00b1\u035c\u0001\u0000\u0000"+ + "\u0000\u00b3\u00b4\u0005o\u0000\u0000\u00b4\u00b5\u0005p\u0000\u0000\u00b5"+ + "\u00b6\u0005e\u0000\u0000\u00b6\u00b7\u0005r\u0000\u0000\u00b7\u00b8\u0005"+ + "a\u0000\u0000\u00b8\u00b9\u0005t\u0000\u0000\u00b9\u00ba\u0005i\u0000"+ + "\u0000\u00ba\u00bb\u0005o\u0000\u0000\u00bb\u00bc\u0005n\u0000\u0000\u00bc"+ + "\u0002\u0001\u0000\u0000\u0000\u00bd\u00be\u0005n\u0000\u0000\u00be\u00bf"+ + "\u0005o\u0000\u0000\u00bf\u00c0\u0005d\u0000\u0000\u00c0\u00c1\u0005e"+ + "\u0000\u0000\u00c1\u00c2\u0005o\u0000\u0000\u00c2\u00c3\u0005p\u0000\u0000"+ + "\u00c3\u0004\u0001\u0000\u0000\u0000\u00c4\u00c5\u0005c\u0000\u0000\u00c5"+ + "\u00c6\u0005h\u0000\u0000\u00c6\u00c7\u0005e\u0000\u0000\u00c7\u00c8\u0005"+ + "c\u0000\u0000\u00c8\u00c9\u0005k\u0000\u0000\u00c9\u0006\u0001\u0000\u0000"+ + "\u0000\u00ca\u00cb\u0005r\u0000\u0000\u00cb\u00cc\u0005o\u0000\u0000\u00cc"+ + "\u00cd\u0005u\u0000\u0000\u00cd\u00ce\u0005t\u0000\u0000\u00ce\u00cf\u0005"+ + "i\u0000\u0000\u00cf\u00d0\u0005n\u0000\u0000\u00d0\u00d1\u0005e\u0000"+ + "\u0000\u00d1\b\u0001\u0000\u0000\u0000\u00d2\u00d3\u0005c\u0000\u0000"+ + "\u00d3\u00d4\u0005r\u0000\u0000\u00d4\u00d5\u0005e\u0000\u0000\u00d5\u00d6"+ + "\u0005a\u0000\u0000\u00d6\u00d7\u0005t\u0000\u0000\u00d7\u00d8\u0005e"+ + "\u0000\u0000\u00d8\n\u0001\u0000\u0000\u0000\u00d9\u00da\u0005d\u0000"+ + "\u0000\u00da\u00db\u0005e\u0000\u0000\u00db\u00dc\u0005l\u0000\u0000\u00dc"+ + "\u00dd\u0005e\u0000\u0000\u00dd\u00de\u0005t\u0000\u0000\u00de\u00df\u0005"+ + "e\u0000\u0000\u00df\f\u0001\u0000\u0000\u0000\u00e0\u00e1\u0005p\u0000"+ + "\u0000\u00e1\u00e2\u0005o\u0000\u0000\u00e2\u00e3\u0005l\u0000\u0000\u00e3"+ + "\u00e4\u0005i\u0000\u0000\u00e4\u00e5\u0005c\u0000\u0000\u00e5\u00e6\u0005"+ + "y\u0000\u0000\u00e6\u00e7\u0005 \u0000\u0000\u00e7\u00e8\u0005e\u0000"+ + "\u0000\u00e8\u00e9\u0005l\u0000\u0000\u00e9\u00ea\u0005e\u0000\u0000\u00ea"+ + "\u00eb\u0005m\u0000\u0000\u00eb\u00ec\u0005e\u0000\u0000\u00ec\u00ed\u0005"+ + "n\u0000\u0000\u00ed\u00f1\u0005t\u0000\u0000\u00ee\u00ef\u0005p\u0000"+ + "\u0000\u00ef\u00f1\u0005e\u0000\u0000\u00f0\u00e0\u0001\u0000\u0000\u0000"+ + "\u00f0\u00ee\u0001\u0000\u0000\u0000\u00f1\u000e\u0001\u0000\u0000\u0000"+ + "\u00f2\u00f3\u0005c\u0000\u0000\u00f3\u00f4\u0005o\u0000\u0000\u00f4\u00f5"+ + "\u0005n\u0000\u0000\u00f5\u00f6\u0005t\u0000\u0000\u00f6\u00f7\u0005a"+ + "\u0000\u0000\u00f7\u00f8\u0005i\u0000\u0000\u00f8\u00f9\u0005n\u0000\u0000"+ + "\u00f9\u00fa\u0005e\u0000\u0000\u00fa\u00fb\u0005d\u0000\u0000\u00fb\u0010"+ + "\u0001\u0000\u0000\u0000\u00fc\u00fd\u0005r\u0000\u0000\u00fd\u00fe\u0005"+ + "u\u0000\u0000\u00fe\u00ff\u0005l\u0000\u0000\u00ff\u0100\u0005e\u0000"+ + "\u0000\u0100\u0012\u0001\u0000\u0000\u0000\u0101\u0102\u0005w\u0000\u0000"+ + "\u0102\u0103\u0005h\u0000\u0000\u0103\u0104\u0005e\u0000\u0000\u0104\u0105"+ + "\u0005n\u0000\u0000\u0105\u0014\u0001\u0000\u0000\u0000\u0106\u0107\u0005"+ + "p\u0000\u0000\u0107\u0108\u0005e\u0000\u0000\u0108\u0109\u0005r\u0000"+ + "\u0000\u0109\u010a\u0005f\u0000\u0000\u010a\u010b\u0005o\u0000\u0000\u010b"+ + "\u010c\u0005r\u0000\u0000\u010c\u010d\u0005m\u0000\u0000\u010d\u010e\u0005"+ + "s\u0000\u0000\u010e\u0016\u0001\u0000\u0000\u0000\u010f\u0110\u0005a\u0000"+ + "\u0000\u0110\u0111\u0005s\u0000\u0000\u0111\u0018\u0001\u0000\u0000\u0000"+ + "\u0112\u0113\u0005o\u0000\u0000\u0113\u0114\u0005n\u0000\u0000\u0114\u001a"+ + "\u0001\u0000\u0000\u0000\u0115\u0116\u0005i\u0000\u0000\u0116\u0117\u0005"+ + "n\u0000\u0000\u0117\u001c\u0001\u0000\u0000\u0000\u0118\u0119\u0005d\u0000"+ + "\u0000\u0119\u011a\u0005o\u0000\u0000\u011a\u001e\u0001\u0000\u0000\u0000"+ + "\u011b\u011c\u0005a\u0000\u0000\u011c\u011d\u0005n\u0000\u0000\u011d\u011e"+ + "\u0005y\u0000\u0000\u011e \u0001\u0000\u0000\u0000\u011f\u0120\u0005a"+ + "\u0000\u0000\u0120\u0121\u0005s\u0000\u0000\u0121\u0122\u0005c\u0000\u0000"+ + "\u0122\u0123\u0005e\u0000\u0000\u0123\u0124\u0005n\u0000\u0000\u0124\u0125"+ + "\u0005d\u0000\u0000\u0125\u0126\u0005a\u0000\u0000\u0126\u0127\u0005n"+ + "\u0000\u0000\u0127\u0128\u0005t\u0000\u0000\u0128\u0129\u0005 \u0000\u0000"+ + "\u0129\u012a\u0005o\u0000\u0000\u012a\u012b\u0005f\u0000\u0000\u012b\""+ + "\u0001\u0000\u0000\u0000\u012c\u012d\u0005i\u0000\u0000\u012d\u012e\u0005"+ + "n\u0000\u0000\u012e\u012f\u0005t\u0000\u0000\u012f\u0130\u0005e\u0000"+ + "\u0000\u0130\u0131\u0005r\u0000\u0000\u0131\u0132\u0005s\u0000\u0000\u0132"+ + "\u0133\u0005e\u0000\u0000\u0133\u0134\u0005c\u0000\u0000\u0134\u0135\u0005"+ + "t\u0000\u0000\u0135\u0136\u0005i\u0000\u0000\u0136\u0137\u0005o\u0000"+ + "\u0000\u0137\u013e\u0005n\u0000\u0000\u0138\u0139\u0005i\u0000\u0000\u0139"+ + "\u013a\u0005n\u0000\u0000\u013a\u013b\u0005t\u0000\u0000\u013b\u013c\u0005"+ + "e\u0000\u0000\u013c\u013e\u0005r\u0000\u0000\u013d\u012c\u0001\u0000\u0000"+ + "\u0000\u013d\u0138\u0001\u0000\u0000\u0000\u013e$\u0001\u0000\u0000\u0000"+ + "\u013f\u0140\u0005u\u0000\u0000\u0140\u0141\u0005n\u0000\u0000\u0141\u0142"+ + "\u0005i\u0000\u0000\u0142\u0143\u0005o\u0000\u0000\u0143\u0144\u0005n"+ + "\u0000\u0000\u0144&\u0001\u0000\u0000\u0000\u0145\u0146\u0005p\u0000\u0000"+ + "\u0146\u0147\u0005r\u0000\u0000\u0147\u0148\u0005o\u0000\u0000\u0148\u0149"+ + "\u0005c\u0000\u0000\u0149\u014a\u0005e\u0000\u0000\u014a\u014b\u0005s"+ + "\u0000\u0000\u014b\u014c\u0005s\u0000\u0000\u014c(\u0001\u0000\u0000\u0000"+ + "\u014d\u014e\u0005s\u0000\u0000\u014e\u014f\u0005e\u0000\u0000\u014f\u0150"+ + "\u0005t\u0000\u0000\u0150\u0151\u0005 \u0000\u0000\u0151\u0152\u0005r"+ + "\u0000\u0000\u0152\u0153\u0005e\u0000\u0000\u0153\u0154\u0005s\u0000\u0000"+ + "\u0154\u0155\u0005o\u0000\u0000\u0155\u0156\u0005u\u0000\u0000\u0156\u0157"+ + "\u0005r\u0000\u0000\u0157\u0158\u0005c\u0000\u0000\u0158\u0159\u0005e"+ + "\u0000\u0000\u0159\u015a\u0005 \u0000\u0000\u015a\u015b\u0005o\u0000\u0000"+ + "\u015b\u015c\u0005p\u0000\u0000\u015c\u015d\u0005e\u0000\u0000\u015d\u015e"+ + "\u0005r\u0000\u0000\u015e\u015f\u0005a\u0000\u0000\u015f\u0160\u0005t"+ + "\u0000\u0000\u0160\u0161\u0005i\u0000\u0000\u0161\u0162\u0005o\u0000\u0000"+ + "\u0162\u0163\u0005n\u0000\u0000\u0163\u0164\u0005s\u0000\u0000\u0164*"+ + "\u0001\u0000\u0000\u0000\u0165\u0166\u0005a\u0000\u0000\u0166\u0167\u0005"+ + "s\u0000\u0000\u0167\u0168\u0005s\u0000\u0000\u0168\u0169\u0005i\u0000"+ + "\u0000\u0169\u016a\u0005g\u0000\u0000\u016a\u016b\u0005n\u0000\u0000\u016b"+ + ",\u0001\u0000\u0000\u0000\u016c\u016d\u0005d\u0000\u0000\u016d\u016e\u0005"+ + "e\u0000\u0000\u016e\u016f\u0005a\u0000\u0000\u016f\u0170\u0005s\u0000"+ + "\u0000\u0170\u0171\u0005s\u0000\u0000\u0171\u0172\u0005i\u0000\u0000\u0172"+ + "\u0173\u0005g\u0000\u0000\u0173\u0174\u0005n\u0000\u0000\u0174.\u0001"+ + "\u0000\u0000\u0000\u0175\u0176\u0005f\u0000\u0000\u0176\u0177\u0005r\u0000"+ + "\u0000\u0177\u0178\u0005o\u0000\u0000\u0178\u0179\u0005m\u0000\u0000\u0179"+ + "0\u0001\u0000\u0000\u0000\u017a\u017b\u0005s\u0000\u0000\u017b\u017c\u0005"+ + "e\u0000\u0000\u017c\u017d\u0005t\u0000\u0000\u017d\u017e\u0005 \u0000"+ + "\u0000\u017e\u017f\u0005p\u0000\u0000\u017f\u0180\u0005r\u0000\u0000\u0180"+ + "\u0181\u0005o\u0000\u0000\u0181\u0182\u0005p\u0000\u0000\u0182\u0183\u0005"+ + "e\u0000\u0000\u0183\u0184\u0005r\u0000\u0000\u0184\u0185\u0005t\u0000"+ + "\u0000\u0185\u0186\u0005i\u0000\u0000\u0186\u0187\u0005e\u0000\u0000\u0187"+ + "\u0188\u0005s\u0000\u0000\u01882\u0001\u0000\u0000\u0000\u0189\u018a\u0005"+ + "w\u0000\u0000\u018a\u018b\u0005i\u0000\u0000\u018b\u018c\u0005t\u0000"+ + "\u0000\u018c\u018d\u0005h\u0000\u0000\u018d\u018e\u0005 \u0000\u0000\u018e"+ + "\u018f\u0005p\u0000\u0000\u018f\u0190\u0005r\u0000\u0000\u0190\u0191\u0005"+ + "o\u0000\u0000\u0191\u0192\u0005p\u0000\u0000\u0192\u0193\u0005e\u0000"+ + "\u0000\u0193\u0194\u0005r\u0000\u0000\u0194\u0195\u0005t\u0000\u0000\u0195"+ + "\u0196\u0005i\u0000\u0000\u0196\u0197\u0005e\u0000\u0000\u0197\u0198\u0005"+ + "s\u0000\u0000\u01984\u0001\u0000\u0000\u0000\u0199\u019a\u0005o\u0000"+ + "\u0000\u019a\u019b\u0005f\u0000\u0000\u019b6\u0001\u0000\u0000\u0000\u019c"+ + "\u019d\u0005t\u0000\u0000\u019d\u019e\u0005o\u0000\u0000\u019e8\u0001"+ + "\u0000\u0000\u0000\u019f\u01a0\u0005a\u0000\u0000\u01a0\u01a1\u0005s\u0000"+ + "\u0000\u01a1\u01a2\u0005s\u0000\u0000\u01a2\u01a3\u0005o\u0000\u0000\u01a3"+ + "\u01a4\u0005c\u0000\u0000\u01a4\u01a5\u0005i\u0000\u0000\u01a5\u01a6\u0005"+ + "a\u0000\u0000\u01a6\u01a7\u0005t\u0000\u0000\u01a7\u01a8\u0005e\u0000"+ + "\u0000\u01a8:\u0001\u0000\u0000\u0000\u01a9\u01aa\u0005a\u0000\u0000\u01aa"+ + "\u01ab\u0005n\u0000\u0000\u01ab\u01ac\u0005d\u0000\u0000\u01ac<\u0001"+ + "\u0000\u0000\u0000\u01ad\u01ae\u0005w\u0000\u0000\u01ae\u01af\u0005i\u0000"+ + "\u0000\u01af\u01b0\u0005t\u0000\u0000\u01b0\u01b1\u0005h\u0000\u0000\u01b1"+ + ">\u0001\u0000\u0000\u0000\u01b2\u01b3\u0005d\u0000\u0000\u01b3\u01b4\u0005"+ + "i\u0000\u0000\u01b4\u01b5\u0005s\u0000\u0000\u01b5\u01b6\u0005s\u0000"+ + "\u0000\u01b6\u01b7\u0005o\u0000\u0000\u01b7\u01b8\u0005c\u0000\u0000\u01b8"+ + "\u01b9\u0005i\u0000\u0000\u01b9\u01ba\u0005a\u0000\u0000\u01ba\u01bb\u0005"+ + "t\u0000\u0000\u01bb\u01bc\u0005e\u0000\u0000\u01bc@\u0001\u0000\u0000"+ + "\u0000\u01bd\u01be\u0005d\u0000\u0000\u01be\u01bf\u0005e\u0000\u0000\u01bf"+ + "\u01c0\u0005n\u0000\u0000\u01c0\u01c1\u0005y\u0000\u0000\u01c1B\u0001"+ + "\u0000\u0000\u0000\u01c2\u01c3\u0005p\u0000\u0000\u01c3\u01c4\u0005r\u0000"+ + "\u0000\u01c4\u01c5\u0005o\u0000\u0000\u01c5\u01c6\u0005h\u0000\u0000\u01c6"+ + "\u01c7\u0005i\u0000\u0000\u01c7\u01c8\u0005b\u0000\u0000\u01c8\u01c9\u0005"+ + "i\u0000\u0000\u01c9\u01ca\u0005t\u0000\u0000\u01ca\u01cb\u0005i\u0000"+ + "\u0000\u01cb\u01cc\u0005o\u0000\u0000\u01cc\u01cd\u0005n\u0000\u0000\u01cd"+ + "D\u0001\u0000\u0000\u0000\u01ce\u01cf\u0005o\u0000\u0000\u01cf\u01d0\u0005"+ + "b\u0000\u0000\u01d0\u01d1\u0005l\u0000\u0000\u01d1\u01d2\u0005i\u0000"+ + "\u0000\u01d2\u01d3\u0005g\u0000\u0000\u01d3\u01d4\u0005a\u0000\u0000\u01d4"+ + "\u01d5\u0005t\u0000\u0000\u01d5\u01d6\u0005i\u0000\u0000\u01d6\u01d7\u0005"+ + "o\u0000\u0000\u01d7\u01d8\u0005n\u0000\u0000\u01d8F\u0001\u0000\u0000"+ + "\u0000\u01d9\u01da\u0005a\u0000\u0000\u01da\u01db\u0005c\u0000\u0000\u01db"+ + "\u01dc\u0005c\u0000\u0000\u01dc\u01dd\u0005e\u0000\u0000\u01dd\u01de\u0005"+ + "s\u0000\u0000\u01de\u01df\u0005s\u0000\u0000\u01df\u01e0\u0005 \u0000"+ + "\u0000\u01e0\u01e1\u0005r\u0000\u0000\u01e1\u01e2\u0005i\u0000\u0000\u01e2"+ + "\u01e3\u0005g\u0000\u0000\u01e3\u01e4\u0005h\u0000\u0000\u01e4\u01e5\u0005"+ + "t\u0000\u0000\u01e5\u01e6\u0005s\u0000\u0000\u01e6H\u0001\u0000\u0000"+ + "\u0000\u01e7\u01e8\u0005p\u0000\u0000\u01e8\u01e9\u0005o\u0000\u0000\u01e9"+ + "\u01ea\u0005l\u0000\u0000\u01ea\u01eb\u0005i\u0000\u0000\u01eb\u01ec\u0005"+ + "c\u0000\u0000\u01ec\u01ed\u0005y\u0000\u0000\u01ed\u01ee\u0005 \u0000"+ + "\u0000\u01ee\u01ef\u0005c\u0000\u0000\u01ef\u01f0\u0005l\u0000\u0000\u01f0"+ + "\u01f1\u0005a\u0000\u0000\u01f1\u01f2\u0005s\u0000\u0000\u01f2\u01f8\u0005"+ + "s\u0000\u0000\u01f3\u01f4\u0005p\u0000\u0000\u01f4\u01f8\u0005c\u0000"+ + "\u0000\u01f5\u01f6\u0005P\u0000\u0000\u01f6\u01f8\u0005C\u0000\u0000\u01f7"+ + "\u01e7\u0001\u0000\u0000\u0000\u01f7\u01f3\u0001\u0000\u0000\u0000\u01f7"+ + "\u01f5\u0001\u0000\u0000\u0000\u01f8J\u0001\u0000\u0000\u0000\u01f9\u01fa"+ + "\u0005o\u0000\u0000\u01fa\u01fb\u0005b\u0000\u0000\u01fb\u01fc\u0005j"+ + "\u0000\u0000\u01fc\u01fd\u0005e\u0000\u0000\u01fd\u01fe\u0005c\u0000\u0000"+ + "\u01fe\u01ff\u0005t\u0000\u0000\u01ff\u0200\u0005 \u0000\u0000\u0200\u0201"+ + "\u0005a\u0000\u0000\u0201\u0202\u0005t\u0000\u0000\u0202\u0203\u0005t"+ + "\u0000\u0000\u0203\u0204\u0005r\u0000\u0000\u0204\u0205\u0005i\u0000\u0000"+ + "\u0205\u0206\u0005b\u0000\u0000\u0206\u0207\u0005u\u0000\u0000\u0207\u0208"+ + "\u0005t\u0000\u0000\u0208\u020e\u0005e\u0000\u0000\u0209\u020a\u0005o"+ + "\u0000\u0000\u020a\u020e\u0005a\u0000\u0000\u020b\u020c\u0005O\u0000\u0000"+ + "\u020c\u020e\u0005A\u0000\u0000\u020d\u01f9\u0001\u0000\u0000\u0000\u020d"+ + "\u0209\u0001\u0000\u0000\u0000\u020d\u020b\u0001\u0000\u0000\u0000\u020e"+ + "L\u0001\u0000\u0000\u0000\u020f\u0210\u0005u\u0000\u0000\u0210\u0211\u0005"+ + "s\u0000\u0000\u0211\u0212\u0005e\u0000\u0000\u0212\u0213\u0005r\u0000"+ + "\u0000\u0213\u0214\u0005 \u0000\u0000\u0214\u0215\u0005a\u0000\u0000\u0215"+ + "\u0216\u0005t\u0000\u0000\u0216\u0217\u0005t\u0000\u0000\u0217\u0218\u0005"+ + "r\u0000\u0000\u0218\u0219\u0005i\u0000\u0000\u0219\u021a\u0005b\u0000"+ + "\u0000\u021a\u021b\u0005u\u0000\u0000\u021b\u021c\u0005t\u0000\u0000\u021c"+ + "\u0222\u0005e\u0000\u0000\u021d\u021e\u0005u\u0000\u0000\u021e\u0222\u0005"+ + "a\u0000\u0000\u021f\u0220\u0005U\u0000\u0000\u0220\u0222\u0005A\u0000"+ + "\u0000\u0221\u020f\u0001\u0000\u0000\u0000\u0221\u021d\u0001\u0000\u0000"+ + "\u0000\u0221\u021f\u0001\u0000\u0000\u0000\u0222N\u0001\u0000\u0000\u0000"+ + "\u0223\u0224\u0005u\u0000\u0000\u0224\u0225\u0005s\u0000\u0000\u0225\u0226"+ + "\u0005e\u0000\u0000\u0226\u0227\u0005r\u0000\u0000\u0227\u0228\u0005 "+ + "\u0000\u0000\u0228\u0229\u0005a\u0000\u0000\u0229\u022a\u0005t\u0000\u0000"+ + "\u022a\u022b\u0005t\u0000\u0000\u022b\u022c\u0005r\u0000\u0000\u022c\u022d"+ + "\u0005i\u0000\u0000\u022d\u022e\u0005b\u0000\u0000\u022e\u022f\u0005u"+ + "\u0000\u0000\u022f\u0230\u0005t\u0000\u0000\u0230\u0231\u0005e\u0000\u0000"+ + "\u0231\u0239\u0005s\u0000\u0000\u0232\u0233\u0005u\u0000\u0000\u0233\u0234"+ + "\u0005a\u0000\u0000\u0234\u0239\u0005s\u0000\u0000\u0235\u0236\u0005U"+ + "\u0000\u0000\u0236\u0237\u0005A\u0000\u0000\u0237\u0239\u0005s\u0000\u0000"+ + "\u0238\u0223\u0001\u0000\u0000\u0000\u0238\u0232\u0001\u0000\u0000\u0000"+ + "\u0238\u0235\u0001\u0000\u0000\u0000\u0239P\u0001\u0000\u0000\u0000\u023a"+ + "\u023b\u0005o\u0000\u0000\u023b\u023c\u0005b\u0000\u0000\u023c\u023d\u0005"+ + "j\u0000\u0000\u023d\u023e\u0005e\u0000\u0000\u023e\u023f\u0005c\u0000"+ + "\u0000\u023f\u0240\u0005t\u0000\u0000\u0240\u0241\u0005 \u0000\u0000\u0241"+ + "\u0242\u0005a\u0000\u0000\u0242\u0243\u0005t\u0000\u0000\u0243\u0244\u0005"+ + "t\u0000\u0000\u0244\u0245\u0005r\u0000\u0000\u0245\u0246\u0005i\u0000"+ + "\u0000\u0246\u0247\u0005b\u0000\u0000\u0247\u0248\u0005u\u0000\u0000\u0248"+ + "\u0249\u0005t\u0000\u0000\u0249\u024a\u0005e\u0000\u0000\u024a\u0252\u0005"+ + "s\u0000\u0000\u024b\u024c\u0005o\u0000\u0000\u024c\u024d\u0005a\u0000"+ + "\u0000\u024d\u0252\u0005s\u0000\u0000\u024e\u024f\u0005O\u0000\u0000\u024f"+ + "\u0250\u0005A\u0000\u0000\u0250\u0252\u0005s\u0000\u0000\u0251\u023a\u0001"+ + "\u0000\u0000\u0000\u0251\u024b\u0001\u0000\u0000\u0000\u0251\u024e\u0001"+ + "\u0000\u0000\u0000\u0252R\u0001\u0000\u0000\u0000\u0253\u0254\u0005o\u0000"+ + "\u0000\u0254\u0255\u0005b\u0000\u0000\u0255\u0256\u0005j\u0000\u0000\u0256"+ + "\u0257\u0005e\u0000\u0000\u0257\u0258\u0005c\u0000\u0000\u0258\u025b\u0005"+ + "t\u0000\u0000\u0259\u025b\u0007\u0000\u0000\u0000\u025a\u0253\u0001\u0000"+ + "\u0000\u0000\u025a\u0259\u0001\u0000\u0000\u0000\u025bT\u0001\u0000\u0000"+ + "\u0000\u025c\u025d\u0005u\u0000\u0000\u025d\u025e\u0005s\u0000\u0000\u025e"+ + "\u025f\u0005e\u0000\u0000\u025f\u0262\u0005r\u0000\u0000\u0260\u0262\u0007"+ + "\u0001\u0000\u0000\u0261\u025c\u0001\u0000\u0000\u0000\u0261\u0260\u0001"+ + "\u0000\u0000\u0000\u0262V\u0001\u0000\u0000\u0000\u0263\u0264\u0005a\u0000"+ + "\u0000\u0264\u0265\u0005t\u0000\u0000\u0265\u0266\u0005t\u0000\u0000\u0266"+ + "\u0267\u0005r\u0000\u0000\u0267\u0268\u0005i\u0000\u0000\u0268\u0269\u0005"+ + "b\u0000\u0000\u0269\u026a\u0005u\u0000\u0000\u026a\u026b\u0005t\u0000"+ + "\u0000\u026b\u026c\u0005e\u0000\u0000\u026cX\u0001\u0000\u0000\u0000\u026d"+ + "\u026e\u0005a\u0000\u0000\u026e\u026f\u0005s\u0000\u0000\u026f\u0270\u0005"+ + "s\u0000\u0000\u0270\u0271\u0005o\u0000\u0000\u0271\u0272\u0005c\u0000"+ + "\u0000\u0272\u0273\u0005i\u0000\u0000\u0273\u0274\u0005a\u0000\u0000\u0274"+ + "\u0275\u0005t\u0000\u0000\u0275\u0276\u0005i\u0000\u0000\u0276\u0277\u0005"+ + "o\u0000\u0000\u0277\u0278\u0005n\u0000\u0000\u0278\u0279\u0005s\u0000"+ + "\u0000\u0279Z\u0001\u0000\u0000\u0000\u027a\u027b\u0005b\u0000\u0000\u027b"+ + "\u027c\u0005r\u0000\u0000\u027c\u027d\u0005e\u0000\u0000\u027d\u027e\u0005"+ + "a\u0000\u0000\u027e\u027f\u0005k\u0000\u0000\u027f\\\u0001\u0000\u0000"+ + "\u0000\u0280\u0281\u0005d\u0000\u0000\u0281\u0282\u0005e\u0000\u0000\u0282"+ + "\u0283\u0005f\u0000\u0000\u0283\u0284\u0005a\u0000\u0000\u0284\u0285\u0005"+ + "u\u0000\u0000\u0285\u0286\u0005l\u0000\u0000\u0286\u0287\u0005t\u0000"+ + "\u0000\u0287^\u0001\u0000\u0000\u0000\u0288\u0289\u0005m\u0000\u0000\u0289"+ + "\u028a\u0005a\u0000\u0000\u028a\u028b\u0005p\u0000\u0000\u028b`\u0001"+ + "\u0000\u0000\u0000\u028c\u028d\u0005e\u0000\u0000\u028d\u028e\u0005l\u0000"+ + "\u0000\u028e\u028f\u0005s\u0000\u0000\u028f\u0290\u0005e\u0000\u0000\u0290"+ + "b\u0001\u0000\u0000\u0000\u0291\u0292\u0005c\u0000\u0000\u0292\u0293\u0005"+ + "o\u0000\u0000\u0293\u0294\u0005n\u0000\u0000\u0294\u0295\u0005s\u0000"+ + "\u0000\u0295\u0296\u0005t\u0000\u0000\u0296d\u0001\u0000\u0000\u0000\u0297"+ + "\u0298\u0005i\u0000\u0000\u0298\u0299\u0005f\u0000\u0000\u0299f\u0001"+ + "\u0000\u0000\u0000\u029a\u029b\u0005r\u0000\u0000\u029b\u029c\u0005a\u0000"+ + "\u0000\u029c\u029d\u0005n\u0000\u0000\u029d\u029e\u0005g\u0000\u0000\u029e"+ + "\u029f\u0005e\u0000\u0000\u029fh\u0001\u0000\u0000\u0000\u02a0\u02a1\u0005"+ + "c\u0000\u0000\u02a1\u02a2\u0005o\u0000\u0000\u02a2\u02a3\u0005n\u0000"+ + "\u0000\u02a3\u02a4\u0005t\u0000\u0000\u02a4\u02a5\u0005i\u0000\u0000\u02a5"+ + "\u02a6\u0005n\u0000\u0000\u02a6\u02a7\u0005u\u0000\u0000\u02a7\u02a8\u0005"+ + "e\u0000\u0000\u02a8j\u0001\u0000\u0000\u0000\u02a9\u02aa\u0005f\u0000"+ + "\u0000\u02aa\u02ab\u0005o\u0000\u0000\u02ab\u02ac\u0005r\u0000\u0000\u02ac"+ + "\u02ad\u0005e\u0000\u0000\u02ad\u02ae\u0005a\u0000\u0000\u02ae\u02af\u0005"+ + "c\u0000\u0000\u02af\u02b0\u0005h\u0000\u0000\u02b0l\u0001\u0000\u0000"+ + "\u0000\u02b1\u02b2\u0005r\u0000\u0000\u02b2\u02b3\u0005e\u0000\u0000\u02b3"+ + "\u02b4\u0005t\u0000\u0000\u02b4\u02b5\u0005u\u0000\u0000\u02b5\u02b6\u0005"+ + "r\u0000\u0000\u02b6\u02b7\u0005n\u0000\u0000\u02b7n\u0001\u0000\u0000"+ + "\u0000\u02b8\u02b9\u0005v\u0000\u0000\u02b9\u02ba\u0005a\u0000\u0000\u02ba"+ + "\u02bb\u0005r\u0000\u0000\u02bbp\u0001\u0000\u0000\u0000\u02bc\u02bd\u0005"+ + "s\u0000\u0000\u02bd\u02be\u0005t\u0000\u0000\u02be\u02bf\u0005r\u0000"+ + "\u0000\u02bf\u02c0\u0005i\u0000\u0000\u02c0\u02c1\u0005n\u0000\u0000\u02c1"+ + "\u02c2\u0005g\u0000\u0000\u02c2r\u0001\u0000\u0000\u0000\u02c3\u02c4\u0005"+ + "b\u0000\u0000\u02c4\u02c5\u0005o\u0000\u0000\u02c5\u02c6\u0005o\u0000"+ + "\u0000\u02c6\u02c7\u0005l\u0000\u0000\u02c7t\u0001\u0000\u0000\u0000\u02c8"+ + "\u02c9\u0005v\u0000\u0000\u02c9\u02ca\u0005o\u0000\u0000\u02ca\u02cb\u0005"+ + "i\u0000\u0000\u02cb\u02cc\u0005d\u0000\u0000\u02ccv\u0001\u0000\u0000"+ + "\u0000\u02cd\u02ce\u0005a\u0000\u0000\u02ce\u02cf\u0005r\u0000\u0000\u02cf"+ + "\u02d0\u0005r\u0000\u0000\u02d0\u02d1\u0005a\u0000\u0000\u02d1\u02d2\u0005"+ + "y\u0000\u0000\u02d2x\u0001\u0000\u0000\u0000\u02d3\u02d4\u0005n\u0000"+ + "\u0000\u02d4\u02d5\u0005i\u0000\u0000\u02d5\u02d6\u0005l\u0000\u0000\u02d6"+ + "z\u0001\u0000\u0000\u0000\u02d7\u02d8\u0005t\u0000\u0000\u02d8\u02d9\u0005"+ + "r\u0000\u0000\u02d9\u02da\u0005u\u0000\u0000\u02da\u02db\u0005e\u0000"+ + "\u0000\u02db|\u0001\u0000\u0000\u0000\u02dc\u02dd\u0005f\u0000\u0000\u02dd"+ + "\u02de\u0005a\u0000\u0000\u02de\u02df\u0005l\u0000\u0000\u02df\u02e0\u0005"+ + "s\u0000\u0000\u02e0\u02e1\u0005e\u0000\u0000\u02e1~\u0001\u0000\u0000"+ + "\u0000\u02e2\u02e4\u0007\u0002\u0000\u0000\u02e3\u02e2\u0001\u0000\u0000"+ + "\u0000\u02e4\u02e5\u0001\u0000\u0000\u0000\u02e5\u02e3\u0001\u0000\u0000"+ + "\u0000\u02e5\u02e6\u0001\u0000\u0000\u0000\u02e6\u0080\u0001\u0000\u0000"+ + "\u0000\u02e7\u02e8\u0005(\u0000\u0000\u02e8\u0082\u0001\u0000\u0000\u0000"+ + "\u02e9\u02ea\u0005)\u0000\u0000\u02ea\u0084\u0001\u0000\u0000\u0000\u02eb"+ + "\u02ec\u0005{\u0000\u0000\u02ec\u0086\u0001\u0000\u0000\u0000\u02ed\u02ee"+ + "\u0005}\u0000\u0000\u02ee\u0088\u0001\u0000\u0000\u0000\u02ef\u02f0\u0005"+ + "[\u0000\u0000\u02f0\u008a\u0001\u0000\u0000\u0000\u02f1\u02f2\u0005]\u0000"+ + "\u0000\u02f2\u008c\u0001\u0000\u0000\u0000\u02f3\u02f4\u0005=\u0000\u0000"+ + "\u02f4\u008e\u0001\u0000\u0000\u0000\u02f5\u02f6\u0005,\u0000\u0000\u02f6"+ + "\u0090\u0001\u0000\u0000\u0000\u02f7\u02f8\u0005;\u0000\u0000\u02f8\u0092"+ + "\u0001\u0000\u0000\u0000\u02f9\u02fa\u0005:\u0000\u0000\u02fa\u0094\u0001"+ + "\u0000\u0000\u0000\u02fb\u02fc\u0005.\u0000\u0000\u02fc\u0096\u0001\u0000"+ + "\u0000\u0000\u02fd\u02fe\u0005:\u0000\u0000\u02fe\u02ff\u0005=\u0000\u0000"+ + "\u02ff\u0098\u0001\u0000\u0000\u0000\u0300\u0301\u0005|\u0000\u0000\u0301"+ + "\u0302\u0005|\u0000\u0000\u0302\u009a\u0001\u0000\u0000\u0000\u0303\u0304"+ + "\u0005&\u0000\u0000\u0304\u0305\u0005&\u0000\u0000\u0305\u009c\u0001\u0000"+ + "\u0000\u0000\u0306\u0307\u0005=\u0000\u0000\u0307\u0308\u0005=\u0000\u0000"+ + "\u0308\u009e\u0001\u0000\u0000\u0000\u0309\u030a\u0005!\u0000\u0000\u030a"+ + "\u030b\u0005=\u0000\u0000\u030b\u00a0\u0001\u0000\u0000\u0000\u030c\u030d"+ + "\u0005!\u0000\u0000\u030d\u00a2\u0001\u0000\u0000\u0000\u030e\u030f\u0005"+ + "+\u0000\u0000\u030f\u00a4\u0001\u0000\u0000\u0000\u0310\u0315\u0005\""+ + "\u0000\u0000\u0311\u0314\b\u0003\u0000\u0000\u0312\u0314\u0003\u00adV"+ + "\u0000\u0313\u0311\u0001\u0000\u0000\u0000\u0313\u0312\u0001\u0000\u0000"+ + "\u0000\u0314\u0317\u0001\u0000\u0000\u0000\u0315\u0313\u0001\u0000\u0000"+ + "\u0000\u0315\u0316\u0001\u0000\u0000\u0000\u0316\u0318\u0001\u0000\u0000"+ + "\u0000\u0317\u0315\u0001\u0000\u0000\u0000\u0318\u0319\u0005\"\u0000\u0000"+ + "\u0319\u00a6\u0001\u0000\u0000\u0000\u031a\u031c\u0007\u0004\u0000\u0000"+ + "\u031b\u031a\u0001\u0000\u0000\u0000\u031c\u031d\u0001\u0000\u0000\u0000"+ + "\u031d\u031b\u0001\u0000\u0000\u0000\u031d\u031e\u0001\u0000\u0000\u0000"+ + "\u031e\u031f\u0001\u0000\u0000\u0000\u031f\u0320\u0006S\u0000\u0000\u0320"+ + "\u00a8\u0001\u0000\u0000\u0000\u0321\u0322\u0005/\u0000\u0000\u0322\u0323"+ + "\u0005*\u0000\u0000\u0323\u0327\u0001\u0000\u0000\u0000\u0324\u0326\t"+ + "\u0000\u0000\u0000\u0325\u0324\u0001\u0000\u0000\u0000\u0326\u0329\u0001"+ + "\u0000\u0000\u0000\u0327\u0328\u0001\u0000\u0000\u0000\u0327\u0325\u0001"+ + "\u0000\u0000\u0000\u0328\u032a\u0001\u0000\u0000\u0000\u0329\u0327\u0001"+ + "\u0000\u0000\u0000\u032a\u032b\u0005*\u0000\u0000\u032b\u032c\u0005/\u0000"+ + "\u0000\u032c\u032d\u0001\u0000\u0000\u0000\u032d\u032e\u0006T\u0000\u0000"+ + "\u032e\u00aa\u0001\u0000\u0000\u0000\u032f\u0330\u0005/\u0000\u0000\u0330"+ + "\u0331\u0005/\u0000\u0000\u0331\u0335\u0001\u0000\u0000\u0000\u0332\u0334"+ + "\b\u0005\u0000\u0000\u0333\u0332\u0001\u0000\u0000\u0000\u0334\u0337\u0001"+ + "\u0000\u0000\u0000\u0335\u0333\u0001\u0000\u0000\u0000\u0335\u0336\u0001"+ + "\u0000\u0000\u0000\u0336\u0338\u0001\u0000\u0000\u0000\u0337\u0335\u0001"+ + "\u0000\u0000\u0000\u0338\u0339\u0006U\u0000\u0000\u0339\u00ac\u0001\u0000"+ + "\u0000\u0000\u033a\u033b\u0005\\\u0000\u0000\u033b\u0350\u0007\u0006\u0000"+ + "\u0000\u033c\u0341\u0005\\\u0000\u0000\u033d\u033f\u0007\u0007\u0000\u0000"+ + "\u033e\u033d\u0001\u0000\u0000\u0000\u033e\u033f\u0001\u0000\u0000\u0000"+ + "\u033f\u0340\u0001\u0000\u0000\u0000\u0340\u0342\u0007\b\u0000\u0000\u0341"+ + "\u033e\u0001\u0000\u0000\u0000\u0341\u0342\u0001\u0000\u0000\u0000\u0342"+ + "\u0343\u0001\u0000\u0000\u0000\u0343\u0350\u0007\b\u0000\u0000\u0344\u0346"+ + "\u0005\\\u0000\u0000\u0345\u0347\u0005u\u0000\u0000\u0346\u0345\u0001"+ + "\u0000\u0000\u0000\u0347\u0348\u0001\u0000\u0000\u0000\u0348\u0346\u0001"+ + "\u0000\u0000\u0000\u0348\u0349\u0001\u0000\u0000\u0000\u0349\u034a\u0001"+ + "\u0000\u0000\u0000\u034a\u034b\u0003\u00b1X\u0000\u034b\u034c\u0003\u00b1"+ + "X\u0000\u034c\u034d\u0003\u00b1X\u0000\u034d\u034e\u0003\u00b1X\u0000"+ + "\u034e\u0350\u0001\u0000\u0000\u0000\u034f\u033a\u0001\u0000\u0000\u0000"+ + "\u034f\u033c\u0001\u0000\u0000\u0000\u034f\u0344\u0001\u0000\u0000\u0000"+ + "\u0350\u00ae\u0001\u0000\u0000\u0000\u0351\u035a\u0003\u00b1X\u0000\u0352"+ + "\u0355\u0003\u00b1X\u0000\u0353\u0355\u0005_\u0000\u0000\u0354\u0352\u0001"+ + "\u0000\u0000\u0000\u0354\u0353\u0001\u0000\u0000\u0000\u0355\u0358\u0001"+ + "\u0000\u0000\u0000\u0356\u0354\u0001\u0000\u0000\u0000\u0356\u0357\u0001"+ + "\u0000\u0000\u0000\u0357\u0359\u0001\u0000\u0000\u0000\u0358\u0356\u0001"+ + "\u0000\u0000\u0000\u0359\u035b\u0003\u00b1X\u0000\u035a\u0356\u0001\u0000"+ + "\u0000\u0000\u035a\u035b\u0001\u0000\u0000\u0000\u035b\u00b0\u0001\u0000"+ + "\u0000\u0000\u035c\u035d\u0007\t\u0000\u0000\u035d\u00b2\u0001\u0000\u0000"+ + "\u0000\u0017\u0000\u00f0\u013d\u01f7\u020d\u0221\u0238\u0251\u025a\u0261"+ + "\u02e5\u0313\u0315\u031d\u0327\u0335\u033e\u0341\u0348\u034f\u0354\u0356"+ + "\u035a\u0001\u0000\u0001\u0000"; + public static final ATN _ATN = + new ATNDeserializer().deserialize(_serializedATN.toCharArray()); + static { + _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()]; + for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) { + _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); + } + } +} \ No newline at end of file diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/antlr/PMLLexer.tokens b/src/main/java/gov/nist/csd/pm/pap/pml/antlr/PMLLexer.tokens new file mode 100644 index 000000000..c0f8a0d1b --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/antlr/PMLLexer.tokens @@ -0,0 +1,158 @@ +OPERATION=1 +NODEOP=2 +CHECK=3 +ROUTINE=4 +CREATE=5 +DELETE=6 +POLICY_ELEMENT=7 +CONTAINED=8 +RULE=9 +WHEN=10 +PERFORMS=11 +AS=12 +ON=13 +IN=14 +DO=15 +ANY=16 +ASCENDANT_OF=17 +INTERSECTION=18 +UNION=19 +PROCESS=20 +SET_RESOURCE_OPERATIONS=21 +ASSIGN=22 +DEASSIGN=23 +FROM=24 +SET_PROPERTIES=25 +WITH_PROPERTIES=26 +OF=27 +TO=28 +ASSOCIATE=29 +AND=30 +WITH=31 +DISSOCIATE=32 +DENY=33 +PROHIBITION=34 +OBLIGATION=35 +ACCESS_RIGHTS=36 +POLICY_CLASS=37 +OBJECT_ATTRIBUTE=38 +USER_ATTRIBUTE=39 +USER_ATTRIBUTES=40 +OBJECT_ATTRIBUTES=41 +OBJECT=42 +USER=43 +ATTRIBUTE=44 +ASSOCIATIONS=45 +BREAK=46 +DEFAULT=47 +MAP=48 +ELSE=49 +CONST=50 +IF=51 +RANGE=52 +CONTINUE=53 +FOREACH=54 +RETURN=55 +VAR=56 +STRING_TYPE=57 +BOOL_TYPE=58 +VOID_TYPE=59 +ARRAY_TYPE=60 +NIL_LIT=61 +TRUE=62 +FALSE=63 +ID=64 +OPEN_PAREN=65 +CLOSE_PAREN=66 +OPEN_CURLY=67 +CLOSE_CURLY=68 +OPEN_BRACKET=69 +CLOSE_BRACKET=70 +ASSIGN_EQUALS=71 +COMMA=72 +SEMI=73 +COLON=74 +DOT=75 +DECLARE_ASSIGN=76 +LOGICAL_OR=77 +LOGICAL_AND=78 +EQUALS=79 +NOT_EQUALS=80 +EXCLAMATION=81 +PLUS=82 +DOUBLE_QUOTE_STRING=83 +WS=84 +COMMENT=85 +LINE_COMMENT=86 +'operation'=1 +'nodeop'=2 +'check'=3 +'routine'=4 +'create'=5 +'delete'=6 +'contained'=8 +'rule'=9 +'when'=10 +'performs'=11 +'as'=12 +'on'=13 +'in'=14 +'do'=15 +'any'=16 +'ascendant of'=17 +'union'=19 +'process'=20 +'set resource operations'=21 +'assign'=22 +'deassign'=23 +'from'=24 +'set properties'=25 +'with properties'=26 +'of'=27 +'to'=28 +'associate'=29 +'and'=30 +'with'=31 +'dissociate'=32 +'deny'=33 +'prohibition'=34 +'obligation'=35 +'access rights'=36 +'attribute'=44 +'associations'=45 +'break'=46 +'default'=47 +'map'=48 +'else'=49 +'const'=50 +'if'=51 +'range'=52 +'continue'=53 +'foreach'=54 +'return'=55 +'var'=56 +'string'=57 +'bool'=58 +'void'=59 +'array'=60 +'nil'=61 +'true'=62 +'false'=63 +'('=65 +')'=66 +'{'=67 +'}'=68 +'['=69 +']'=70 +'='=71 +','=72 +';'=73 +':'=74 +'.'=75 +':='=76 +'||'=77 +'&&'=78 +'=='=79 +'!='=80 +'!'=81 +'+'=82 diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/antlr/PMLParser.g4 b/src/main/java/gov/nist/csd/pm/pap/pml/antlr/PMLParser.g4 new file mode 100644 index 000000000..cbff1633a --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/antlr/PMLParser.g4 @@ -0,0 +1,221 @@ +parser grammar PMLParser; + +options { + tokenVocab = PMLLexer; +} + +pml: (statement)* EOF ; + +statement: ( + variableAssignmentStatement + | variableDeclarationStatement + | foreachStatement + | returnStatement + | breakStatement + | continueStatement + | functionInvokeStatement + | ifStatement + | createPolicyStatement + | createNonPCStatement + | createObligationStatement + | createProhibitionStatement + | setNodePropertiesStatement + | assignStatement + | deassignStatement + | associateStatement + | dissociateStatement + | setResourceOperationsStatement + | deleteStatement + | deleteRuleStatement + | functionDefinitionStatement +) ; + +statementBlock: OPEN_CURLY statement* CLOSE_CURLY ; + +createPolicyStatement: CREATE POLICY_CLASS name=expression; + +createNonPCStatement: + CREATE nonPCNodeType name=expression + IN in=expression ; +nonPCNodeType: + (OBJECT_ATTRIBUTE | USER_ATTRIBUTE | OBJECT | USER) ; + +createObligationStatement: + CREATE OBLIGATION expression OPEN_CURLY createRuleStatement* CLOSE_CURLY; +createRuleStatement: + CREATE RULE ruleName=expression + WHEN subjectPattern + PERFORMS operationPattern + (ON operandPattern)? + response ; + +// subject +subjectPattern: + ANY USER #AnyUserPattern + | USER subjectPatternExpression #UserPattern; + +subjectPatternExpression: + basicSubjectPatternExpr #BasicSubjectPatternExpression + | EXCLAMATION subjectPatternExpression #NegateSubjectPatternExpression + | OPEN_PAREN subjectPatternExpression CLOSE_PAREN #ParenSubjectPatternExpression + | left=subjectPatternExpression (LOGICAL_AND | LOGICAL_OR) right=subjectPatternExpression #LogicalSubjectPatternExpression ; + +basicSubjectPatternExpr: + IN stringLit #InSubject + | stringLit #UsernameSubject + | PROCESS stringLit #ProcessSubject ; + +// operation +operationPattern: + ANY OPERATION #AnyOperation + | stringLit #IDOperation ; + +// operands +operandPattern: OPEN_CURLY (operandPatternElement (COMMA operandPatternElement)*)? CLOSE_CURLY ; +operandPatternElement: key=ID COLON (single=operandPatternExpression | multiple=operandPatternExpressionArray); + +operandPatternExpressionArray: OPEN_BRACKET operandPatternExpression (COMMA operandPatternExpression)* CLOSE_BRACKET ; + +operandPatternExpression: + basicOperandPatternExpr #BasicOperandPatternExpression + | EXCLAMATION operandPatternExpression #NegateOperandPatternExpression + | OPEN_PAREN operandPatternExpression CLOSE_PAREN #ParenOperandPatternExpression + | left=operandPatternExpression (LOGICAL_AND | LOGICAL_OR) right=operandPatternExpression #LogicalOperandPatternExpression ; + +basicOperandPatternExpr: + ANY #AnyPolicyElement + | IN stringLit #InPolicyElement + | stringLit #PolicyElement ; + +// response +response: + DO OPEN_PAREN ID CLOSE_PAREN responseBlock; +responseBlock: + OPEN_CURLY responseStatement* CLOSE_CURLY ; +responseStatement: + statement + | createRuleStatement + | deleteRuleStatement ; + +createProhibitionStatement: + CREATE PROHIBITION name=expression + DENY (USER | USER_ATTRIBUTE | PROCESS) subject=expression + ACCESS_RIGHTS accessRights=expression + ON (INTERSECTION|UNION) OF containers=expression ; + +/* +uncomment for operaiton prohibitions +createProhibitionStatement: + CREATE PROHIBITION name=expression + DENY subject=expression + (ACCESS_RIGHTS accessRights=expression ON containers=expression) #Arset + | (OPERATION op=expression ON operandPatterns=patternMap) #Operation ;*/ + +setNodePropertiesStatement: + SET_PROPERTIES OF name=expression TO properties=expression ; + +assignStatement: + ASSIGN ascendantNode=expression TO descendantNodes=expression ; + +deassignStatement: + DEASSIGN ascendantNode=expression FROM descendantNodes=expression ; + +associateStatement: + ASSOCIATE ua=expression AND target=expression WITH accessRights=expression ; + +dissociateStatement: + DISSOCIATE ua=expression AND target=expression ; + +setResourceOperationsStatement: + SET_RESOURCE_OPERATIONS accessRightsArr=expression; + +deleteStatement: + DELETE deleteType expression ; +deleteType: + nodeType #DeleteNode + | OBLIGATION #DeleteObligation + | PROHIBITION #DeleteProhibition ; +nodeType: + (POLICY_CLASS | OBJECT_ATTRIBUTE | USER_ATTRIBUTE | OBJECT | USER) ; + +deleteRuleStatement: + DELETE RULE ruleName=expression FROM OBLIGATION obligationName=expression ; + +variableDeclarationStatement: + VAR (varSpec | OPEN_PAREN (varSpec)* CLOSE_PAREN) #VarDeclaration + | ID DECLARE_ASSIGN expression #ShortDeclaration; +varSpec: ID ASSIGN_EQUALS expression; + +variableAssignmentStatement: ID PLUS? ASSIGN_EQUALS expression; + +functionDefinitionStatement: functionSignature statementBlock ; +functionSignature: + (ROUTINE | OPERATION) ID OPEN_PAREN formalArgList CLOSE_PAREN + returnType=variableType? + checkStatementBlock?; +formalArgList: (formalArg (COMMA formalArg)*)? ; +formalArg: NODEOP? variableType ID; +returnStatement: RETURN expression?; + +checkStatement: CHECK ar=expression ON target=expression ; +checkStatementBlock: OPEN_CURLY checkStatement* CLOSE_CURLY ; + +idArr: OPEN_BRACKET (ID (COMMA ID)*)? CLOSE_BRACKET ; +functionInvokeStatement: functionInvoke; + +foreachStatement: FOREACH key=ID (COMMA value=ID)? IN expression statementBlock ; +breakStatement: BREAK ; +continueStatement: CONTINUE ; + +ifStatement: + IF condition=expression statementBlock + elseIfStatement* + elseStatement? ; +elseIfStatement: + ELSE IF condition=expression statementBlock ; +elseStatement: + ELSE statementBlock ; + +// basic elements +variableType: + STRING_TYPE #StringType + | BOOL_TYPE #BooleanType + | arrayType #ArrayVarType + | mapType #MapVarType + | ANY #AnyType ; +mapType: MAP OPEN_BRACKET keyType=variableType CLOSE_BRACKET valueType=variableType ; +arrayType: OPEN_BRACKET CLOSE_BRACKET variableType ; + +expression: + functionInvoke #FunctionInvokeExpression + | variableReference #VariableReferenceExpression + | literal #LiteralExpression + | EXCLAMATION expression #NegateExpression + | OPEN_PAREN expression CLOSE_PAREN #ParenExpression + | left=expression PLUS right=expression #PlusExpression + | left=expression (EQUALS | NOT_EQUALS) right=expression #EqualsExpression + | left=expression (LOGICAL_AND | LOGICAL_OR) right=expression #LogicalExpression ; +expressionList: expression (COMMA expression)* ; + +literal: + stringLit #StringLiteral + | boolLit #BoolLiteral + | arrayLit #ArrayLiteral + | mapLit #MapLiteral; +stringLit: DOUBLE_QUOTE_STRING; +boolLit: TRUE | FALSE; +arrayLit: OPEN_BRACKET expressionList? CLOSE_BRACKET ; +stringArrayLit: OPEN_BRACKET (stringLit (COMMA stringLit)*)? CLOSE_BRACKET ; +mapLit: OPEN_CURLY (element (COMMA element)*)? CLOSE_CURLY ; +element: key=expression COLON value=expression ; + +variableReference: + ID #ReferenceByID + | variableReference index #ReferenceByIndex ; +index: + OPEN_BRACKET key=expression CLOSE_BRACKET #BracketIndex + | DOT key=id #DotIndex; +id: ID; + +functionInvoke: ID functionInvokeArgs ; +functionInvokeArgs: OPEN_PAREN expressionList? CLOSE_PAREN ; \ No newline at end of file diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/antlr/PMLParser.interp b/src/main/java/gov/nist/csd/pm/pap/pml/antlr/PMLParser.interp new file mode 100644 index 000000000..a15783bc5 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/antlr/PMLParser.interp @@ -0,0 +1,249 @@ +token literal names: +null +'operation' +'nodeop' +'check' +'routine' +'create' +'delete' +null +'contained' +'rule' +'when' +'performs' +'as' +'on' +'in' +'do' +'any' +'ascendant of' +null +'union' +'process' +'set resource operations' +'assign' +'deassign' +'from' +'set properties' +'with properties' +'of' +'to' +'associate' +'and' +'with' +'dissociate' +'deny' +'prohibition' +'obligation' +'access rights' +null +null +null +null +null +null +null +'attribute' +'associations' +'break' +'default' +'map' +'else' +'const' +'if' +'range' +'continue' +'foreach' +'return' +'var' +'string' +'bool' +'void' +'array' +'nil' +'true' +'false' +null +'(' +')' +'{' +'}' +'[' +']' +'=' +',' +';' +':' +'.' +':=' +'||' +'&&' +'==' +'!=' +'!' +'+' +null +null +null +null + +token symbolic names: +null +OPERATION +NODEOP +CHECK +ROUTINE +CREATE +DELETE +POLICY_ELEMENT +CONTAINED +RULE +WHEN +PERFORMS +AS +ON +IN +DO +ANY +ASCENDANT_OF +INTERSECTION +UNION +PROCESS +SET_RESOURCE_OPERATIONS +ASSIGN +DEASSIGN +FROM +SET_PROPERTIES +WITH_PROPERTIES +OF +TO +ASSOCIATE +AND +WITH +DISSOCIATE +DENY +PROHIBITION +OBLIGATION +ACCESS_RIGHTS +POLICY_CLASS +OBJECT_ATTRIBUTE +USER_ATTRIBUTE +USER_ATTRIBUTES +OBJECT_ATTRIBUTES +OBJECT +USER +ATTRIBUTE +ASSOCIATIONS +BREAK +DEFAULT +MAP +ELSE +CONST +IF +RANGE +CONTINUE +FOREACH +RETURN +VAR +STRING_TYPE +BOOL_TYPE +VOID_TYPE +ARRAY_TYPE +NIL_LIT +TRUE +FALSE +ID +OPEN_PAREN +CLOSE_PAREN +OPEN_CURLY +CLOSE_CURLY +OPEN_BRACKET +CLOSE_BRACKET +ASSIGN_EQUALS +COMMA +SEMI +COLON +DOT +DECLARE_ASSIGN +LOGICAL_OR +LOGICAL_AND +EQUALS +NOT_EQUALS +EXCLAMATION +PLUS +DOUBLE_QUOTE_STRING +WS +COMMENT +LINE_COMMENT + +rule names: +pml +statement +statementBlock +createPolicyStatement +createNonPCStatement +nonPCNodeType +createObligationStatement +createRuleStatement +subjectPattern +subjectPatternExpression +basicSubjectPatternExpr +operationPattern +operandPattern +operandPatternElement +operandPatternExpressionArray +operandPatternExpression +basicOperandPatternExpr +response +responseBlock +responseStatement +createProhibitionStatement +setNodePropertiesStatement +assignStatement +deassignStatement +associateStatement +dissociateStatement +setResourceOperationsStatement +deleteStatement +deleteType +nodeType +deleteRuleStatement +variableDeclarationStatement +varSpec +variableAssignmentStatement +functionDefinitionStatement +functionSignature +formalArgList +formalArg +returnStatement +checkStatement +checkStatementBlock +idArr +functionInvokeStatement +foreachStatement +breakStatement +continueStatement +ifStatement +elseIfStatement +elseStatement +variableType +mapType +arrayType +expression +expressionList +literal +stringLit +boolLit +arrayLit +stringArrayLit +mapLit +element +variableReference +index +id +functionInvoke +functionInvokeArgs + + +atn: +[4, 1, 86, 633, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 1, 0, 5, 0, 134, 8, 0, 10, 0, 12, 0, 137, 9, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 162, 8, 1, 1, 2, 1, 2, 5, 2, 166, 8, 2, 10, 2, 12, 2, 169, 9, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 5, 6, 190, 8, 6, 10, 6, 12, 6, 193, 9, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 206, 8, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 214, 8, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 224, 8, 9, 1, 9, 1, 9, 1, 9, 5, 9, 229, 8, 9, 10, 9, 12, 9, 232, 9, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 3, 10, 239, 8, 10, 1, 11, 1, 11, 1, 11, 3, 11, 244, 8, 11, 1, 12, 1, 12, 1, 12, 1, 12, 5, 12, 250, 8, 12, 10, 12, 12, 12, 253, 9, 12, 3, 12, 255, 8, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 263, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 5, 14, 269, 8, 14, 10, 14, 12, 14, 272, 9, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 284, 8, 15, 1, 15, 1, 15, 1, 15, 5, 15, 289, 8, 15, 10, 15, 12, 15, 292, 9, 15, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 298, 8, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 5, 18, 308, 8, 18, 10, 18, 12, 18, 311, 9, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 3, 19, 318, 8, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 3, 28, 371, 8, 28, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 5, 31, 386, 8, 31, 10, 31, 12, 31, 389, 9, 31, 1, 31, 3, 31, 392, 8, 31, 1, 31, 1, 31, 1, 31, 3, 31, 397, 8, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 3, 33, 405, 8, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 419, 8, 35, 1, 35, 3, 35, 422, 8, 35, 1, 36, 1, 36, 1, 36, 5, 36, 427, 8, 36, 10, 36, 12, 36, 430, 9, 36, 3, 36, 432, 8, 36, 1, 37, 3, 37, 435, 8, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 3, 38, 442, 8, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 5, 40, 451, 8, 40, 10, 40, 12, 40, 454, 9, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 5, 41, 462, 8, 41, 10, 41, 12, 41, 465, 9, 41, 3, 41, 467, 8, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 3, 43, 477, 8, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 5, 46, 491, 8, 46, 10, 46, 12, 46, 494, 9, 46, 1, 46, 3, 46, 497, 8, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 3, 49, 512, 8, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 3, 52, 534, 8, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 5, 52, 545, 8, 52, 10, 52, 12, 52, 548, 9, 52, 1, 53, 1, 53, 1, 53, 5, 53, 553, 8, 53, 10, 53, 12, 53, 556, 9, 53, 1, 54, 1, 54, 1, 54, 1, 54, 3, 54, 562, 8, 54, 1, 55, 1, 55, 1, 56, 1, 56, 1, 57, 1, 57, 3, 57, 570, 8, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 5, 58, 578, 8, 58, 10, 58, 12, 58, 581, 9, 58, 3, 58, 583, 8, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 5, 59, 591, 8, 59, 10, 59, 12, 59, 594, 9, 59, 3, 59, 596, 8, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 5, 61, 609, 8, 61, 10, 61, 12, 61, 612, 9, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 3, 62, 620, 8, 62, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 3, 65, 629, 8, 65, 1, 65, 1, 65, 1, 65, 0, 4, 18, 30, 104, 122, 66, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 0, 8, 2, 0, 38, 39, 42, 43, 1, 0, 77, 78, 3, 0, 20, 20, 39, 39, 43, 43, 1, 0, 18, 19, 2, 0, 37, 39, 42, 43, 2, 0, 1, 1, 4, 4, 1, 0, 79, 80, 1, 0, 62, 63, 650, 0, 135, 1, 0, 0, 0, 2, 161, 1, 0, 0, 0, 4, 163, 1, 0, 0, 0, 6, 172, 1, 0, 0, 0, 8, 176, 1, 0, 0, 0, 10, 182, 1, 0, 0, 0, 12, 184, 1, 0, 0, 0, 14, 196, 1, 0, 0, 0, 16, 213, 1, 0, 0, 0, 18, 223, 1, 0, 0, 0, 20, 238, 1, 0, 0, 0, 22, 243, 1, 0, 0, 0, 24, 245, 1, 0, 0, 0, 26, 258, 1, 0, 0, 0, 28, 264, 1, 0, 0, 0, 30, 283, 1, 0, 0, 0, 32, 297, 1, 0, 0, 0, 34, 299, 1, 0, 0, 0, 36, 305, 1, 0, 0, 0, 38, 317, 1, 0, 0, 0, 40, 319, 1, 0, 0, 0, 42, 332, 1, 0, 0, 0, 44, 338, 1, 0, 0, 0, 46, 343, 1, 0, 0, 0, 48, 348, 1, 0, 0, 0, 50, 355, 1, 0, 0, 0, 52, 360, 1, 0, 0, 0, 54, 363, 1, 0, 0, 0, 56, 370, 1, 0, 0, 0, 58, 372, 1, 0, 0, 0, 60, 374, 1, 0, 0, 0, 62, 396, 1, 0, 0, 0, 64, 398, 1, 0, 0, 0, 66, 402, 1, 0, 0, 0, 68, 409, 1, 0, 0, 0, 70, 412, 1, 0, 0, 0, 72, 431, 1, 0, 0, 0, 74, 434, 1, 0, 0, 0, 76, 439, 1, 0, 0, 0, 78, 443, 1, 0, 0, 0, 80, 448, 1, 0, 0, 0, 82, 457, 1, 0, 0, 0, 84, 470, 1, 0, 0, 0, 86, 472, 1, 0, 0, 0, 88, 482, 1, 0, 0, 0, 90, 484, 1, 0, 0, 0, 92, 486, 1, 0, 0, 0, 94, 498, 1, 0, 0, 0, 96, 503, 1, 0, 0, 0, 98, 511, 1, 0, 0, 0, 100, 513, 1, 0, 0, 0, 102, 519, 1, 0, 0, 0, 104, 533, 1, 0, 0, 0, 106, 549, 1, 0, 0, 0, 108, 561, 1, 0, 0, 0, 110, 563, 1, 0, 0, 0, 112, 565, 1, 0, 0, 0, 114, 567, 1, 0, 0, 0, 116, 573, 1, 0, 0, 0, 118, 586, 1, 0, 0, 0, 120, 599, 1, 0, 0, 0, 122, 603, 1, 0, 0, 0, 124, 619, 1, 0, 0, 0, 126, 621, 1, 0, 0, 0, 128, 623, 1, 0, 0, 0, 130, 626, 1, 0, 0, 0, 132, 134, 3, 2, 1, 0, 133, 132, 1, 0, 0, 0, 134, 137, 1, 0, 0, 0, 135, 133, 1, 0, 0, 0, 135, 136, 1, 0, 0, 0, 136, 138, 1, 0, 0, 0, 137, 135, 1, 0, 0, 0, 138, 139, 5, 0, 0, 1, 139, 1, 1, 0, 0, 0, 140, 162, 3, 66, 33, 0, 141, 162, 3, 62, 31, 0, 142, 162, 3, 86, 43, 0, 143, 162, 3, 76, 38, 0, 144, 162, 3, 88, 44, 0, 145, 162, 3, 90, 45, 0, 146, 162, 3, 84, 42, 0, 147, 162, 3, 92, 46, 0, 148, 162, 3, 6, 3, 0, 149, 162, 3, 8, 4, 0, 150, 162, 3, 12, 6, 0, 151, 162, 3, 40, 20, 0, 152, 162, 3, 42, 21, 0, 153, 162, 3, 44, 22, 0, 154, 162, 3, 46, 23, 0, 155, 162, 3, 48, 24, 0, 156, 162, 3, 50, 25, 0, 157, 162, 3, 52, 26, 0, 158, 162, 3, 54, 27, 0, 159, 162, 3, 60, 30, 0, 160, 162, 3, 68, 34, 0, 161, 140, 1, 0, 0, 0, 161, 141, 1, 0, 0, 0, 161, 142, 1, 0, 0, 0, 161, 143, 1, 0, 0, 0, 161, 144, 1, 0, 0, 0, 161, 145, 1, 0, 0, 0, 161, 146, 1, 0, 0, 0, 161, 147, 1, 0, 0, 0, 161, 148, 1, 0, 0, 0, 161, 149, 1, 0, 0, 0, 161, 150, 1, 0, 0, 0, 161, 151, 1, 0, 0, 0, 161, 152, 1, 0, 0, 0, 161, 153, 1, 0, 0, 0, 161, 154, 1, 0, 0, 0, 161, 155, 1, 0, 0, 0, 161, 156, 1, 0, 0, 0, 161, 157, 1, 0, 0, 0, 161, 158, 1, 0, 0, 0, 161, 159, 1, 0, 0, 0, 161, 160, 1, 0, 0, 0, 162, 3, 1, 0, 0, 0, 163, 167, 5, 67, 0, 0, 164, 166, 3, 2, 1, 0, 165, 164, 1, 0, 0, 0, 166, 169, 1, 0, 0, 0, 167, 165, 1, 0, 0, 0, 167, 168, 1, 0, 0, 0, 168, 170, 1, 0, 0, 0, 169, 167, 1, 0, 0, 0, 170, 171, 5, 68, 0, 0, 171, 5, 1, 0, 0, 0, 172, 173, 5, 5, 0, 0, 173, 174, 5, 37, 0, 0, 174, 175, 3, 104, 52, 0, 175, 7, 1, 0, 0, 0, 176, 177, 5, 5, 0, 0, 177, 178, 3, 10, 5, 0, 178, 179, 3, 104, 52, 0, 179, 180, 5, 14, 0, 0, 180, 181, 3, 104, 52, 0, 181, 9, 1, 0, 0, 0, 182, 183, 7, 0, 0, 0, 183, 11, 1, 0, 0, 0, 184, 185, 5, 5, 0, 0, 185, 186, 5, 35, 0, 0, 186, 187, 3, 104, 52, 0, 187, 191, 5, 67, 0, 0, 188, 190, 3, 14, 7, 0, 189, 188, 1, 0, 0, 0, 190, 193, 1, 0, 0, 0, 191, 189, 1, 0, 0, 0, 191, 192, 1, 0, 0, 0, 192, 194, 1, 0, 0, 0, 193, 191, 1, 0, 0, 0, 194, 195, 5, 68, 0, 0, 195, 13, 1, 0, 0, 0, 196, 197, 5, 5, 0, 0, 197, 198, 5, 9, 0, 0, 198, 199, 3, 104, 52, 0, 199, 200, 5, 10, 0, 0, 200, 201, 3, 16, 8, 0, 201, 202, 5, 11, 0, 0, 202, 205, 3, 22, 11, 0, 203, 204, 5, 13, 0, 0, 204, 206, 3, 24, 12, 0, 205, 203, 1, 0, 0, 0, 205, 206, 1, 0, 0, 0, 206, 207, 1, 0, 0, 0, 207, 208, 3, 34, 17, 0, 208, 15, 1, 0, 0, 0, 209, 210, 5, 16, 0, 0, 210, 214, 5, 43, 0, 0, 211, 212, 5, 43, 0, 0, 212, 214, 3, 18, 9, 0, 213, 209, 1, 0, 0, 0, 213, 211, 1, 0, 0, 0, 214, 17, 1, 0, 0, 0, 215, 216, 6, 9, -1, 0, 216, 224, 3, 20, 10, 0, 217, 218, 5, 81, 0, 0, 218, 224, 3, 18, 9, 3, 219, 220, 5, 65, 0, 0, 220, 221, 3, 18, 9, 0, 221, 222, 5, 66, 0, 0, 222, 224, 1, 0, 0, 0, 223, 215, 1, 0, 0, 0, 223, 217, 1, 0, 0, 0, 223, 219, 1, 0, 0, 0, 224, 230, 1, 0, 0, 0, 225, 226, 10, 1, 0, 0, 226, 227, 7, 1, 0, 0, 227, 229, 3, 18, 9, 2, 228, 225, 1, 0, 0, 0, 229, 232, 1, 0, 0, 0, 230, 228, 1, 0, 0, 0, 230, 231, 1, 0, 0, 0, 231, 19, 1, 0, 0, 0, 232, 230, 1, 0, 0, 0, 233, 234, 5, 14, 0, 0, 234, 239, 3, 110, 55, 0, 235, 239, 3, 110, 55, 0, 236, 237, 5, 20, 0, 0, 237, 239, 3, 110, 55, 0, 238, 233, 1, 0, 0, 0, 238, 235, 1, 0, 0, 0, 238, 236, 1, 0, 0, 0, 239, 21, 1, 0, 0, 0, 240, 241, 5, 16, 0, 0, 241, 244, 5, 1, 0, 0, 242, 244, 3, 110, 55, 0, 243, 240, 1, 0, 0, 0, 243, 242, 1, 0, 0, 0, 244, 23, 1, 0, 0, 0, 245, 254, 5, 67, 0, 0, 246, 251, 3, 26, 13, 0, 247, 248, 5, 72, 0, 0, 248, 250, 3, 26, 13, 0, 249, 247, 1, 0, 0, 0, 250, 253, 1, 0, 0, 0, 251, 249, 1, 0, 0, 0, 251, 252, 1, 0, 0, 0, 252, 255, 1, 0, 0, 0, 253, 251, 1, 0, 0, 0, 254, 246, 1, 0, 0, 0, 254, 255, 1, 0, 0, 0, 255, 256, 1, 0, 0, 0, 256, 257, 5, 68, 0, 0, 257, 25, 1, 0, 0, 0, 258, 259, 5, 64, 0, 0, 259, 262, 5, 74, 0, 0, 260, 263, 3, 30, 15, 0, 261, 263, 3, 28, 14, 0, 262, 260, 1, 0, 0, 0, 262, 261, 1, 0, 0, 0, 263, 27, 1, 0, 0, 0, 264, 265, 5, 69, 0, 0, 265, 270, 3, 30, 15, 0, 266, 267, 5, 72, 0, 0, 267, 269, 3, 30, 15, 0, 268, 266, 1, 0, 0, 0, 269, 272, 1, 0, 0, 0, 270, 268, 1, 0, 0, 0, 270, 271, 1, 0, 0, 0, 271, 273, 1, 0, 0, 0, 272, 270, 1, 0, 0, 0, 273, 274, 5, 70, 0, 0, 274, 29, 1, 0, 0, 0, 275, 276, 6, 15, -1, 0, 276, 284, 3, 32, 16, 0, 277, 278, 5, 81, 0, 0, 278, 284, 3, 30, 15, 3, 279, 280, 5, 65, 0, 0, 280, 281, 3, 30, 15, 0, 281, 282, 5, 66, 0, 0, 282, 284, 1, 0, 0, 0, 283, 275, 1, 0, 0, 0, 283, 277, 1, 0, 0, 0, 283, 279, 1, 0, 0, 0, 284, 290, 1, 0, 0, 0, 285, 286, 10, 1, 0, 0, 286, 287, 7, 1, 0, 0, 287, 289, 3, 30, 15, 2, 288, 285, 1, 0, 0, 0, 289, 292, 1, 0, 0, 0, 290, 288, 1, 0, 0, 0, 290, 291, 1, 0, 0, 0, 291, 31, 1, 0, 0, 0, 292, 290, 1, 0, 0, 0, 293, 298, 5, 16, 0, 0, 294, 295, 5, 14, 0, 0, 295, 298, 3, 110, 55, 0, 296, 298, 3, 110, 55, 0, 297, 293, 1, 0, 0, 0, 297, 294, 1, 0, 0, 0, 297, 296, 1, 0, 0, 0, 298, 33, 1, 0, 0, 0, 299, 300, 5, 15, 0, 0, 300, 301, 5, 65, 0, 0, 301, 302, 5, 64, 0, 0, 302, 303, 5, 66, 0, 0, 303, 304, 3, 36, 18, 0, 304, 35, 1, 0, 0, 0, 305, 309, 5, 67, 0, 0, 306, 308, 3, 38, 19, 0, 307, 306, 1, 0, 0, 0, 308, 311, 1, 0, 0, 0, 309, 307, 1, 0, 0, 0, 309, 310, 1, 0, 0, 0, 310, 312, 1, 0, 0, 0, 311, 309, 1, 0, 0, 0, 312, 313, 5, 68, 0, 0, 313, 37, 1, 0, 0, 0, 314, 318, 3, 2, 1, 0, 315, 318, 3, 14, 7, 0, 316, 318, 3, 60, 30, 0, 317, 314, 1, 0, 0, 0, 317, 315, 1, 0, 0, 0, 317, 316, 1, 0, 0, 0, 318, 39, 1, 0, 0, 0, 319, 320, 5, 5, 0, 0, 320, 321, 5, 34, 0, 0, 321, 322, 3, 104, 52, 0, 322, 323, 5, 33, 0, 0, 323, 324, 7, 2, 0, 0, 324, 325, 3, 104, 52, 0, 325, 326, 5, 36, 0, 0, 326, 327, 3, 104, 52, 0, 327, 328, 5, 13, 0, 0, 328, 329, 7, 3, 0, 0, 329, 330, 5, 27, 0, 0, 330, 331, 3, 104, 52, 0, 331, 41, 1, 0, 0, 0, 332, 333, 5, 25, 0, 0, 333, 334, 5, 27, 0, 0, 334, 335, 3, 104, 52, 0, 335, 336, 5, 28, 0, 0, 336, 337, 3, 104, 52, 0, 337, 43, 1, 0, 0, 0, 338, 339, 5, 22, 0, 0, 339, 340, 3, 104, 52, 0, 340, 341, 5, 28, 0, 0, 341, 342, 3, 104, 52, 0, 342, 45, 1, 0, 0, 0, 343, 344, 5, 23, 0, 0, 344, 345, 3, 104, 52, 0, 345, 346, 5, 24, 0, 0, 346, 347, 3, 104, 52, 0, 347, 47, 1, 0, 0, 0, 348, 349, 5, 29, 0, 0, 349, 350, 3, 104, 52, 0, 350, 351, 5, 30, 0, 0, 351, 352, 3, 104, 52, 0, 352, 353, 5, 31, 0, 0, 353, 354, 3, 104, 52, 0, 354, 49, 1, 0, 0, 0, 355, 356, 5, 32, 0, 0, 356, 357, 3, 104, 52, 0, 357, 358, 5, 30, 0, 0, 358, 359, 3, 104, 52, 0, 359, 51, 1, 0, 0, 0, 360, 361, 5, 21, 0, 0, 361, 362, 3, 104, 52, 0, 362, 53, 1, 0, 0, 0, 363, 364, 5, 6, 0, 0, 364, 365, 3, 56, 28, 0, 365, 366, 3, 104, 52, 0, 366, 55, 1, 0, 0, 0, 367, 371, 3, 58, 29, 0, 368, 371, 5, 35, 0, 0, 369, 371, 5, 34, 0, 0, 370, 367, 1, 0, 0, 0, 370, 368, 1, 0, 0, 0, 370, 369, 1, 0, 0, 0, 371, 57, 1, 0, 0, 0, 372, 373, 7, 4, 0, 0, 373, 59, 1, 0, 0, 0, 374, 375, 5, 6, 0, 0, 375, 376, 5, 9, 0, 0, 376, 377, 3, 104, 52, 0, 377, 378, 5, 24, 0, 0, 378, 379, 5, 35, 0, 0, 379, 380, 3, 104, 52, 0, 380, 61, 1, 0, 0, 0, 381, 391, 5, 56, 0, 0, 382, 392, 3, 64, 32, 0, 383, 387, 5, 65, 0, 0, 384, 386, 3, 64, 32, 0, 385, 384, 1, 0, 0, 0, 386, 389, 1, 0, 0, 0, 387, 385, 1, 0, 0, 0, 387, 388, 1, 0, 0, 0, 388, 390, 1, 0, 0, 0, 389, 387, 1, 0, 0, 0, 390, 392, 5, 66, 0, 0, 391, 382, 1, 0, 0, 0, 391, 383, 1, 0, 0, 0, 392, 397, 1, 0, 0, 0, 393, 394, 5, 64, 0, 0, 394, 395, 5, 76, 0, 0, 395, 397, 3, 104, 52, 0, 396, 381, 1, 0, 0, 0, 396, 393, 1, 0, 0, 0, 397, 63, 1, 0, 0, 0, 398, 399, 5, 64, 0, 0, 399, 400, 5, 71, 0, 0, 400, 401, 3, 104, 52, 0, 401, 65, 1, 0, 0, 0, 402, 404, 5, 64, 0, 0, 403, 405, 5, 82, 0, 0, 404, 403, 1, 0, 0, 0, 404, 405, 1, 0, 0, 0, 405, 406, 1, 0, 0, 0, 406, 407, 5, 71, 0, 0, 407, 408, 3, 104, 52, 0, 408, 67, 1, 0, 0, 0, 409, 410, 3, 70, 35, 0, 410, 411, 3, 4, 2, 0, 411, 69, 1, 0, 0, 0, 412, 413, 7, 5, 0, 0, 413, 414, 5, 64, 0, 0, 414, 415, 5, 65, 0, 0, 415, 416, 3, 72, 36, 0, 416, 418, 5, 66, 0, 0, 417, 419, 3, 98, 49, 0, 418, 417, 1, 0, 0, 0, 418, 419, 1, 0, 0, 0, 419, 421, 1, 0, 0, 0, 420, 422, 3, 80, 40, 0, 421, 420, 1, 0, 0, 0, 421, 422, 1, 0, 0, 0, 422, 71, 1, 0, 0, 0, 423, 428, 3, 74, 37, 0, 424, 425, 5, 72, 0, 0, 425, 427, 3, 74, 37, 0, 426, 424, 1, 0, 0, 0, 427, 430, 1, 0, 0, 0, 428, 426, 1, 0, 0, 0, 428, 429, 1, 0, 0, 0, 429, 432, 1, 0, 0, 0, 430, 428, 1, 0, 0, 0, 431, 423, 1, 0, 0, 0, 431, 432, 1, 0, 0, 0, 432, 73, 1, 0, 0, 0, 433, 435, 5, 2, 0, 0, 434, 433, 1, 0, 0, 0, 434, 435, 1, 0, 0, 0, 435, 436, 1, 0, 0, 0, 436, 437, 3, 98, 49, 0, 437, 438, 5, 64, 0, 0, 438, 75, 1, 0, 0, 0, 439, 441, 5, 55, 0, 0, 440, 442, 3, 104, 52, 0, 441, 440, 1, 0, 0, 0, 441, 442, 1, 0, 0, 0, 442, 77, 1, 0, 0, 0, 443, 444, 5, 3, 0, 0, 444, 445, 3, 104, 52, 0, 445, 446, 5, 13, 0, 0, 446, 447, 3, 104, 52, 0, 447, 79, 1, 0, 0, 0, 448, 452, 5, 67, 0, 0, 449, 451, 3, 78, 39, 0, 450, 449, 1, 0, 0, 0, 451, 454, 1, 0, 0, 0, 452, 450, 1, 0, 0, 0, 452, 453, 1, 0, 0, 0, 453, 455, 1, 0, 0, 0, 454, 452, 1, 0, 0, 0, 455, 456, 5, 68, 0, 0, 456, 81, 1, 0, 0, 0, 457, 466, 5, 69, 0, 0, 458, 463, 5, 64, 0, 0, 459, 460, 5, 72, 0, 0, 460, 462, 5, 64, 0, 0, 461, 459, 1, 0, 0, 0, 462, 465, 1, 0, 0, 0, 463, 461, 1, 0, 0, 0, 463, 464, 1, 0, 0, 0, 464, 467, 1, 0, 0, 0, 465, 463, 1, 0, 0, 0, 466, 458, 1, 0, 0, 0, 466, 467, 1, 0, 0, 0, 467, 468, 1, 0, 0, 0, 468, 469, 5, 70, 0, 0, 469, 83, 1, 0, 0, 0, 470, 471, 3, 128, 64, 0, 471, 85, 1, 0, 0, 0, 472, 473, 5, 54, 0, 0, 473, 476, 5, 64, 0, 0, 474, 475, 5, 72, 0, 0, 475, 477, 5, 64, 0, 0, 476, 474, 1, 0, 0, 0, 476, 477, 1, 0, 0, 0, 477, 478, 1, 0, 0, 0, 478, 479, 5, 14, 0, 0, 479, 480, 3, 104, 52, 0, 480, 481, 3, 4, 2, 0, 481, 87, 1, 0, 0, 0, 482, 483, 5, 46, 0, 0, 483, 89, 1, 0, 0, 0, 484, 485, 5, 53, 0, 0, 485, 91, 1, 0, 0, 0, 486, 487, 5, 51, 0, 0, 487, 488, 3, 104, 52, 0, 488, 492, 3, 4, 2, 0, 489, 491, 3, 94, 47, 0, 490, 489, 1, 0, 0, 0, 491, 494, 1, 0, 0, 0, 492, 490, 1, 0, 0, 0, 492, 493, 1, 0, 0, 0, 493, 496, 1, 0, 0, 0, 494, 492, 1, 0, 0, 0, 495, 497, 3, 96, 48, 0, 496, 495, 1, 0, 0, 0, 496, 497, 1, 0, 0, 0, 497, 93, 1, 0, 0, 0, 498, 499, 5, 49, 0, 0, 499, 500, 5, 51, 0, 0, 500, 501, 3, 104, 52, 0, 501, 502, 3, 4, 2, 0, 502, 95, 1, 0, 0, 0, 503, 504, 5, 49, 0, 0, 504, 505, 3, 4, 2, 0, 505, 97, 1, 0, 0, 0, 506, 512, 5, 57, 0, 0, 507, 512, 5, 58, 0, 0, 508, 512, 3, 102, 51, 0, 509, 512, 3, 100, 50, 0, 510, 512, 5, 16, 0, 0, 511, 506, 1, 0, 0, 0, 511, 507, 1, 0, 0, 0, 511, 508, 1, 0, 0, 0, 511, 509, 1, 0, 0, 0, 511, 510, 1, 0, 0, 0, 512, 99, 1, 0, 0, 0, 513, 514, 5, 48, 0, 0, 514, 515, 5, 69, 0, 0, 515, 516, 3, 98, 49, 0, 516, 517, 5, 70, 0, 0, 517, 518, 3, 98, 49, 0, 518, 101, 1, 0, 0, 0, 519, 520, 5, 69, 0, 0, 520, 521, 5, 70, 0, 0, 521, 522, 3, 98, 49, 0, 522, 103, 1, 0, 0, 0, 523, 524, 6, 52, -1, 0, 524, 534, 3, 128, 64, 0, 525, 534, 3, 122, 61, 0, 526, 534, 3, 108, 54, 0, 527, 528, 5, 81, 0, 0, 528, 534, 3, 104, 52, 5, 529, 530, 5, 65, 0, 0, 530, 531, 3, 104, 52, 0, 531, 532, 5, 66, 0, 0, 532, 534, 1, 0, 0, 0, 533, 523, 1, 0, 0, 0, 533, 525, 1, 0, 0, 0, 533, 526, 1, 0, 0, 0, 533, 527, 1, 0, 0, 0, 533, 529, 1, 0, 0, 0, 534, 546, 1, 0, 0, 0, 535, 536, 10, 3, 0, 0, 536, 537, 5, 82, 0, 0, 537, 545, 3, 104, 52, 4, 538, 539, 10, 2, 0, 0, 539, 540, 7, 6, 0, 0, 540, 545, 3, 104, 52, 3, 541, 542, 10, 1, 0, 0, 542, 543, 7, 1, 0, 0, 543, 545, 3, 104, 52, 2, 544, 535, 1, 0, 0, 0, 544, 538, 1, 0, 0, 0, 544, 541, 1, 0, 0, 0, 545, 548, 1, 0, 0, 0, 546, 544, 1, 0, 0, 0, 546, 547, 1, 0, 0, 0, 547, 105, 1, 0, 0, 0, 548, 546, 1, 0, 0, 0, 549, 554, 3, 104, 52, 0, 550, 551, 5, 72, 0, 0, 551, 553, 3, 104, 52, 0, 552, 550, 1, 0, 0, 0, 553, 556, 1, 0, 0, 0, 554, 552, 1, 0, 0, 0, 554, 555, 1, 0, 0, 0, 555, 107, 1, 0, 0, 0, 556, 554, 1, 0, 0, 0, 557, 562, 3, 110, 55, 0, 558, 562, 3, 112, 56, 0, 559, 562, 3, 114, 57, 0, 560, 562, 3, 118, 59, 0, 561, 557, 1, 0, 0, 0, 561, 558, 1, 0, 0, 0, 561, 559, 1, 0, 0, 0, 561, 560, 1, 0, 0, 0, 562, 109, 1, 0, 0, 0, 563, 564, 5, 83, 0, 0, 564, 111, 1, 0, 0, 0, 565, 566, 7, 7, 0, 0, 566, 113, 1, 0, 0, 0, 567, 569, 5, 69, 0, 0, 568, 570, 3, 106, 53, 0, 569, 568, 1, 0, 0, 0, 569, 570, 1, 0, 0, 0, 570, 571, 1, 0, 0, 0, 571, 572, 5, 70, 0, 0, 572, 115, 1, 0, 0, 0, 573, 582, 5, 69, 0, 0, 574, 579, 3, 110, 55, 0, 575, 576, 5, 72, 0, 0, 576, 578, 3, 110, 55, 0, 577, 575, 1, 0, 0, 0, 578, 581, 1, 0, 0, 0, 579, 577, 1, 0, 0, 0, 579, 580, 1, 0, 0, 0, 580, 583, 1, 0, 0, 0, 581, 579, 1, 0, 0, 0, 582, 574, 1, 0, 0, 0, 582, 583, 1, 0, 0, 0, 583, 584, 1, 0, 0, 0, 584, 585, 5, 70, 0, 0, 585, 117, 1, 0, 0, 0, 586, 595, 5, 67, 0, 0, 587, 592, 3, 120, 60, 0, 588, 589, 5, 72, 0, 0, 589, 591, 3, 120, 60, 0, 590, 588, 1, 0, 0, 0, 591, 594, 1, 0, 0, 0, 592, 590, 1, 0, 0, 0, 592, 593, 1, 0, 0, 0, 593, 596, 1, 0, 0, 0, 594, 592, 1, 0, 0, 0, 595, 587, 1, 0, 0, 0, 595, 596, 1, 0, 0, 0, 596, 597, 1, 0, 0, 0, 597, 598, 5, 68, 0, 0, 598, 119, 1, 0, 0, 0, 599, 600, 3, 104, 52, 0, 600, 601, 5, 74, 0, 0, 601, 602, 3, 104, 52, 0, 602, 121, 1, 0, 0, 0, 603, 604, 6, 61, -1, 0, 604, 605, 5, 64, 0, 0, 605, 610, 1, 0, 0, 0, 606, 607, 10, 1, 0, 0, 607, 609, 3, 124, 62, 0, 608, 606, 1, 0, 0, 0, 609, 612, 1, 0, 0, 0, 610, 608, 1, 0, 0, 0, 610, 611, 1, 0, 0, 0, 611, 123, 1, 0, 0, 0, 612, 610, 1, 0, 0, 0, 613, 614, 5, 69, 0, 0, 614, 615, 3, 104, 52, 0, 615, 616, 5, 70, 0, 0, 616, 620, 1, 0, 0, 0, 617, 618, 5, 75, 0, 0, 618, 620, 3, 126, 63, 0, 619, 613, 1, 0, 0, 0, 619, 617, 1, 0, 0, 0, 620, 125, 1, 0, 0, 0, 621, 622, 5, 64, 0, 0, 622, 127, 1, 0, 0, 0, 623, 624, 5, 64, 0, 0, 624, 625, 3, 130, 65, 0, 625, 129, 1, 0, 0, 0, 626, 628, 5, 65, 0, 0, 627, 629, 3, 106, 53, 0, 628, 627, 1, 0, 0, 0, 628, 629, 1, 0, 0, 0, 629, 630, 1, 0, 0, 0, 630, 631, 5, 66, 0, 0, 631, 131, 1, 0, 0, 0, 50, 135, 161, 167, 191, 205, 213, 223, 230, 238, 243, 251, 254, 262, 270, 283, 290, 297, 309, 317, 370, 387, 391, 396, 404, 418, 421, 428, 431, 434, 441, 452, 463, 466, 476, 492, 496, 511, 533, 544, 546, 554, 561, 569, 579, 582, 592, 595, 610, 619, 628] \ No newline at end of file diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/antlr/PMLParser.java b/src/main/java/gov/nist/csd/pm/pap/pml/antlr/PMLParser.java new file mode 100644 index 000000000..69a5445bc --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/antlr/PMLParser.java @@ -0,0 +1,6127 @@ +// Generated from PMLParser.g4 by ANTLR 4.13.1 +package gov.nist.csd.pm.pap.pml.antlr; +import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.misc.*; +import org.antlr.v4.runtime.tree.*; +import java.util.List; +import java.util.Iterator; +import java.util.ArrayList; + +@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue"}) +public class PMLParser extends Parser { + static { RuntimeMetaData.checkVersion("4.13.1", RuntimeMetaData.VERSION); } + + protected static final DFA[] _decisionToDFA; + protected static final PredictionContextCache _sharedContextCache = + new PredictionContextCache(); + public static final int + OPERATION=1, NODEOP=2, CHECK=3, ROUTINE=4, CREATE=5, DELETE=6, POLICY_ELEMENT=7, + CONTAINED=8, RULE=9, WHEN=10, PERFORMS=11, AS=12, ON=13, IN=14, DO=15, + ANY=16, ASCENDANT_OF=17, INTERSECTION=18, UNION=19, PROCESS=20, SET_RESOURCE_OPERATIONS=21, + ASSIGN=22, DEASSIGN=23, FROM=24, SET_PROPERTIES=25, WITH_PROPERTIES=26, + OF=27, TO=28, ASSOCIATE=29, AND=30, WITH=31, DISSOCIATE=32, DENY=33, PROHIBITION=34, + OBLIGATION=35, ACCESS_RIGHTS=36, POLICY_CLASS=37, OBJECT_ATTRIBUTE=38, + USER_ATTRIBUTE=39, USER_ATTRIBUTES=40, OBJECT_ATTRIBUTES=41, OBJECT=42, + USER=43, ATTRIBUTE=44, ASSOCIATIONS=45, BREAK=46, DEFAULT=47, MAP=48, + ELSE=49, CONST=50, IF=51, RANGE=52, CONTINUE=53, FOREACH=54, RETURN=55, + VAR=56, STRING_TYPE=57, BOOL_TYPE=58, VOID_TYPE=59, ARRAY_TYPE=60, NIL_LIT=61, + TRUE=62, FALSE=63, ID=64, OPEN_PAREN=65, CLOSE_PAREN=66, OPEN_CURLY=67, + CLOSE_CURLY=68, OPEN_BRACKET=69, CLOSE_BRACKET=70, ASSIGN_EQUALS=71, COMMA=72, + SEMI=73, COLON=74, DOT=75, DECLARE_ASSIGN=76, LOGICAL_OR=77, LOGICAL_AND=78, + EQUALS=79, NOT_EQUALS=80, EXCLAMATION=81, PLUS=82, DOUBLE_QUOTE_STRING=83, + WS=84, COMMENT=85, LINE_COMMENT=86; + public static final int + RULE_pml = 0, RULE_statement = 1, RULE_statementBlock = 2, RULE_createPolicyStatement = 3, + RULE_createNonPCStatement = 4, RULE_nonPCNodeType = 5, RULE_createObligationStatement = 6, + RULE_createRuleStatement = 7, RULE_subjectPattern = 8, RULE_subjectPatternExpression = 9, + RULE_basicSubjectPatternExpr = 10, RULE_operationPattern = 11, RULE_operandPattern = 12, + RULE_operandPatternElement = 13, RULE_operandPatternExpressionArray = 14, + RULE_operandPatternExpression = 15, RULE_basicOperandPatternExpr = 16, + RULE_response = 17, RULE_responseBlock = 18, RULE_responseStatement = 19, + RULE_createProhibitionStatement = 20, RULE_setNodePropertiesStatement = 21, + RULE_assignStatement = 22, RULE_deassignStatement = 23, RULE_associateStatement = 24, + RULE_dissociateStatement = 25, RULE_setResourceOperationsStatement = 26, + RULE_deleteStatement = 27, RULE_deleteType = 28, RULE_nodeType = 29, RULE_deleteRuleStatement = 30, + RULE_variableDeclarationStatement = 31, RULE_varSpec = 32, RULE_variableAssignmentStatement = 33, + RULE_functionDefinitionStatement = 34, RULE_functionSignature = 35, RULE_formalArgList = 36, + RULE_formalArg = 37, RULE_returnStatement = 38, RULE_checkStatement = 39, + RULE_checkStatementBlock = 40, RULE_idArr = 41, RULE_functionInvokeStatement = 42, + RULE_foreachStatement = 43, RULE_breakStatement = 44, RULE_continueStatement = 45, + RULE_ifStatement = 46, RULE_elseIfStatement = 47, RULE_elseStatement = 48, + RULE_variableType = 49, RULE_mapType = 50, RULE_arrayType = 51, RULE_expression = 52, + RULE_expressionList = 53, RULE_literal = 54, RULE_stringLit = 55, RULE_boolLit = 56, + RULE_arrayLit = 57, RULE_stringArrayLit = 58, RULE_mapLit = 59, RULE_element = 60, + RULE_variableReference = 61, RULE_index = 62, RULE_id = 63, RULE_functionInvoke = 64, + RULE_functionInvokeArgs = 65; + private static String[] makeRuleNames() { + return new String[] { + "pml", "statement", "statementBlock", "createPolicyStatement", "createNonPCStatement", + "nonPCNodeType", "createObligationStatement", "createRuleStatement", + "subjectPattern", "subjectPatternExpression", "basicSubjectPatternExpr", + "operationPattern", "operandPattern", "operandPatternElement", "operandPatternExpressionArray", + "operandPatternExpression", "basicOperandPatternExpr", "response", "responseBlock", + "responseStatement", "createProhibitionStatement", "setNodePropertiesStatement", + "assignStatement", "deassignStatement", "associateStatement", "dissociateStatement", + "setResourceOperationsStatement", "deleteStatement", "deleteType", "nodeType", + "deleteRuleStatement", "variableDeclarationStatement", "varSpec", "variableAssignmentStatement", + "functionDefinitionStatement", "functionSignature", "formalArgList", + "formalArg", "returnStatement", "checkStatement", "checkStatementBlock", + "idArr", "functionInvokeStatement", "foreachStatement", "breakStatement", + "continueStatement", "ifStatement", "elseIfStatement", "elseStatement", + "variableType", "mapType", "arrayType", "expression", "expressionList", + "literal", "stringLit", "boolLit", "arrayLit", "stringArrayLit", "mapLit", + "element", "variableReference", "index", "id", "functionInvoke", "functionInvokeArgs" + }; + } + public static final String[] ruleNames = makeRuleNames(); + + private static String[] makeLiteralNames() { + return new String[] { + null, "'operation'", "'nodeop'", "'check'", "'routine'", "'create'", + "'delete'", null, "'contained'", "'rule'", "'when'", "'performs'", "'as'", + "'on'", "'in'", "'do'", "'any'", "'ascendant of'", null, "'union'", "'process'", + "'set resource operations'", "'assign'", "'deassign'", "'from'", "'set properties'", + "'with properties'", "'of'", "'to'", "'associate'", "'and'", "'with'", + "'dissociate'", "'deny'", "'prohibition'", "'obligation'", "'access rights'", + null, null, null, null, null, null, null, "'attribute'", "'associations'", + "'break'", "'default'", "'map'", "'else'", "'const'", "'if'", "'range'", + "'continue'", "'foreach'", "'return'", "'var'", "'string'", "'bool'", + "'void'", "'array'", "'nil'", "'true'", "'false'", null, "'('", "')'", + "'{'", "'}'", "'['", "']'", "'='", "','", "';'", "':'", "'.'", "':='", + "'||'", "'&&'", "'=='", "'!='", "'!'", "'+'" + }; + } + private static final String[] _LITERAL_NAMES = makeLiteralNames(); + private static String[] makeSymbolicNames() { + return new String[] { + null, "OPERATION", "NODEOP", "CHECK", "ROUTINE", "CREATE", "DELETE", + "POLICY_ELEMENT", "CONTAINED", "RULE", "WHEN", "PERFORMS", "AS", "ON", + "IN", "DO", "ANY", "ASCENDANT_OF", "INTERSECTION", "UNION", "PROCESS", + "SET_RESOURCE_OPERATIONS", "ASSIGN", "DEASSIGN", "FROM", "SET_PROPERTIES", + "WITH_PROPERTIES", "OF", "TO", "ASSOCIATE", "AND", "WITH", "DISSOCIATE", + "DENY", "PROHIBITION", "OBLIGATION", "ACCESS_RIGHTS", "POLICY_CLASS", + "OBJECT_ATTRIBUTE", "USER_ATTRIBUTE", "USER_ATTRIBUTES", "OBJECT_ATTRIBUTES", + "OBJECT", "USER", "ATTRIBUTE", "ASSOCIATIONS", "BREAK", "DEFAULT", "MAP", + "ELSE", "CONST", "IF", "RANGE", "CONTINUE", "FOREACH", "RETURN", "VAR", + "STRING_TYPE", "BOOL_TYPE", "VOID_TYPE", "ARRAY_TYPE", "NIL_LIT", "TRUE", + "FALSE", "ID", "OPEN_PAREN", "CLOSE_PAREN", "OPEN_CURLY", "CLOSE_CURLY", + "OPEN_BRACKET", "CLOSE_BRACKET", "ASSIGN_EQUALS", "COMMA", "SEMI", "COLON", + "DOT", "DECLARE_ASSIGN", "LOGICAL_OR", "LOGICAL_AND", "EQUALS", "NOT_EQUALS", + "EXCLAMATION", "PLUS", "DOUBLE_QUOTE_STRING", "WS", "COMMENT", "LINE_COMMENT" + }; + } + private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); + public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); + + /** + * @deprecated Use {@link #VOCABULARY} instead. + */ + @Deprecated + public static final String[] tokenNames; + static { + tokenNames = new String[_SYMBOLIC_NAMES.length]; + for (int i = 0; i < tokenNames.length; i++) { + tokenNames[i] = VOCABULARY.getLiteralName(i); + if (tokenNames[i] == null) { + tokenNames[i] = VOCABULARY.getSymbolicName(i); + } + + if (tokenNames[i] == null) { + tokenNames[i] = ""; + } + } + } + + @Override + @Deprecated + public String[] getTokenNames() { + return tokenNames; + } + + @Override + + public Vocabulary getVocabulary() { + return VOCABULARY; + } + + @Override + public String getGrammarFileName() { return "PMLParser.g4"; } + + @Override + public String[] getRuleNames() { return ruleNames; } + + @Override + public String getSerializedATN() { return _serializedATN; } + + @Override + public ATN getATN() { return _ATN; } + + public PMLParser(TokenStream input) { + super(input); + _interp = new ParserATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); + } + + @SuppressWarnings("CheckReturnValue") + public static class PmlContext extends ParserRuleContext { + public TerminalNode EOF() { return getToken(PMLParser.EOF, 0); } + public List statement() { + return getRuleContexts(StatementContext.class); + } + public StatementContext statement(int i) { + return getRuleContext(StatementContext.class,i); + } + public PmlContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_pml; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterPml(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitPml(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitPml(this); + else return visitor.visitChildren(this); + } + } + + public final PmlContext pml() throws RecognitionException { + PmlContext _localctx = new PmlContext(_ctx, getState()); + enterRule(_localctx, 0, RULE_pml); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(135); + _errHandler.sync(this); + _la = _input.LA(1); + while (((((_la - 1)) & ~0x3f) == 0 && ((1L << (_la - 1)) & -9154656955725250503L) != 0)) { + { + { + setState(132); + statement(); + } + } + setState(137); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(138); + match(EOF); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class StatementContext extends ParserRuleContext { + public VariableAssignmentStatementContext variableAssignmentStatement() { + return getRuleContext(VariableAssignmentStatementContext.class,0); + } + public VariableDeclarationStatementContext variableDeclarationStatement() { + return getRuleContext(VariableDeclarationStatementContext.class,0); + } + public ForeachStatementContext foreachStatement() { + return getRuleContext(ForeachStatementContext.class,0); + } + public ReturnStatementContext returnStatement() { + return getRuleContext(ReturnStatementContext.class,0); + } + public BreakStatementContext breakStatement() { + return getRuleContext(BreakStatementContext.class,0); + } + public ContinueStatementContext continueStatement() { + return getRuleContext(ContinueStatementContext.class,0); + } + public FunctionInvokeStatementContext functionInvokeStatement() { + return getRuleContext(FunctionInvokeStatementContext.class,0); + } + public IfStatementContext ifStatement() { + return getRuleContext(IfStatementContext.class,0); + } + public CreatePolicyStatementContext createPolicyStatement() { + return getRuleContext(CreatePolicyStatementContext.class,0); + } + public CreateNonPCStatementContext createNonPCStatement() { + return getRuleContext(CreateNonPCStatementContext.class,0); + } + public CreateObligationStatementContext createObligationStatement() { + return getRuleContext(CreateObligationStatementContext.class,0); + } + public CreateProhibitionStatementContext createProhibitionStatement() { + return getRuleContext(CreateProhibitionStatementContext.class,0); + } + public SetNodePropertiesStatementContext setNodePropertiesStatement() { + return getRuleContext(SetNodePropertiesStatementContext.class,0); + } + public AssignStatementContext assignStatement() { + return getRuleContext(AssignStatementContext.class,0); + } + public DeassignStatementContext deassignStatement() { + return getRuleContext(DeassignStatementContext.class,0); + } + public AssociateStatementContext associateStatement() { + return getRuleContext(AssociateStatementContext.class,0); + } + public DissociateStatementContext dissociateStatement() { + return getRuleContext(DissociateStatementContext.class,0); + } + public SetResourceOperationsStatementContext setResourceOperationsStatement() { + return getRuleContext(SetResourceOperationsStatementContext.class,0); + } + public DeleteStatementContext deleteStatement() { + return getRuleContext(DeleteStatementContext.class,0); + } + public DeleteRuleStatementContext deleteRuleStatement() { + return getRuleContext(DeleteRuleStatementContext.class,0); + } + public FunctionDefinitionStatementContext functionDefinitionStatement() { + return getRuleContext(FunctionDefinitionStatementContext.class,0); + } + public StatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_statement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitStatement(this); + else return visitor.visitChildren(this); + } + } + + public final StatementContext statement() throws RecognitionException { + StatementContext _localctx = new StatementContext(_ctx, getState()); + enterRule(_localctx, 2, RULE_statement); + try { + enterOuterAlt(_localctx, 1); + { + setState(161); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,1,_ctx) ) { + case 1: + { + setState(140); + variableAssignmentStatement(); + } + break; + case 2: + { + setState(141); + variableDeclarationStatement(); + } + break; + case 3: + { + setState(142); + foreachStatement(); + } + break; + case 4: + { + setState(143); + returnStatement(); + } + break; + case 5: + { + setState(144); + breakStatement(); + } + break; + case 6: + { + setState(145); + continueStatement(); + } + break; + case 7: + { + setState(146); + functionInvokeStatement(); + } + break; + case 8: + { + setState(147); + ifStatement(); + } + break; + case 9: + { + setState(148); + createPolicyStatement(); + } + break; + case 10: + { + setState(149); + createNonPCStatement(); + } + break; + case 11: + { + setState(150); + createObligationStatement(); + } + break; + case 12: + { + setState(151); + createProhibitionStatement(); + } + break; + case 13: + { + setState(152); + setNodePropertiesStatement(); + } + break; + case 14: + { + setState(153); + assignStatement(); + } + break; + case 15: + { + setState(154); + deassignStatement(); + } + break; + case 16: + { + setState(155); + associateStatement(); + } + break; + case 17: + { + setState(156); + dissociateStatement(); + } + break; + case 18: + { + setState(157); + setResourceOperationsStatement(); + } + break; + case 19: + { + setState(158); + deleteStatement(); + } + break; + case 20: + { + setState(159); + deleteRuleStatement(); + } + break; + case 21: + { + setState(160); + functionDefinitionStatement(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class StatementBlockContext extends ParserRuleContext { + public TerminalNode OPEN_CURLY() { return getToken(PMLParser.OPEN_CURLY, 0); } + public TerminalNode CLOSE_CURLY() { return getToken(PMLParser.CLOSE_CURLY, 0); } + public List statement() { + return getRuleContexts(StatementContext.class); + } + public StatementContext statement(int i) { + return getRuleContext(StatementContext.class,i); + } + public StatementBlockContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_statementBlock; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterStatementBlock(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitStatementBlock(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitStatementBlock(this); + else return visitor.visitChildren(this); + } + } + + public final StatementBlockContext statementBlock() throws RecognitionException { + StatementBlockContext _localctx = new StatementBlockContext(_ctx, getState()); + enterRule(_localctx, 4, RULE_statementBlock); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(163); + match(OPEN_CURLY); + setState(167); + _errHandler.sync(this); + _la = _input.LA(1); + while (((((_la - 1)) & ~0x3f) == 0 && ((1L << (_la - 1)) & -9154656955725250503L) != 0)) { + { + { + setState(164); + statement(); + } + } + setState(169); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(170); + match(CLOSE_CURLY); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class CreatePolicyStatementContext extends ParserRuleContext { + public ExpressionContext name; + public TerminalNode CREATE() { return getToken(PMLParser.CREATE, 0); } + public TerminalNode POLICY_CLASS() { return getToken(PMLParser.POLICY_CLASS, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public CreatePolicyStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_createPolicyStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterCreatePolicyStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitCreatePolicyStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitCreatePolicyStatement(this); + else return visitor.visitChildren(this); + } + } + + public final CreatePolicyStatementContext createPolicyStatement() throws RecognitionException { + CreatePolicyStatementContext _localctx = new CreatePolicyStatementContext(_ctx, getState()); + enterRule(_localctx, 6, RULE_createPolicyStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(172); + match(CREATE); + setState(173); + match(POLICY_CLASS); + setState(174); + ((CreatePolicyStatementContext)_localctx).name = expression(0); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class CreateNonPCStatementContext extends ParserRuleContext { + public ExpressionContext name; + public ExpressionContext in; + public TerminalNode CREATE() { return getToken(PMLParser.CREATE, 0); } + public NonPCNodeTypeContext nonPCNodeType() { + return getRuleContext(NonPCNodeTypeContext.class,0); + } + public TerminalNode IN() { return getToken(PMLParser.IN, 0); } + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public CreateNonPCStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_createNonPCStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterCreateNonPCStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitCreateNonPCStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitCreateNonPCStatement(this); + else return visitor.visitChildren(this); + } + } + + public final CreateNonPCStatementContext createNonPCStatement() throws RecognitionException { + CreateNonPCStatementContext _localctx = new CreateNonPCStatementContext(_ctx, getState()); + enterRule(_localctx, 8, RULE_createNonPCStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(176); + match(CREATE); + setState(177); + nonPCNodeType(); + setState(178); + ((CreateNonPCStatementContext)_localctx).name = expression(0); + setState(179); + match(IN); + setState(180); + ((CreateNonPCStatementContext)_localctx).in = expression(0); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class NonPCNodeTypeContext extends ParserRuleContext { + public TerminalNode OBJECT_ATTRIBUTE() { return getToken(PMLParser.OBJECT_ATTRIBUTE, 0); } + public TerminalNode USER_ATTRIBUTE() { return getToken(PMLParser.USER_ATTRIBUTE, 0); } + public TerminalNode OBJECT() { return getToken(PMLParser.OBJECT, 0); } + public TerminalNode USER() { return getToken(PMLParser.USER, 0); } + public NonPCNodeTypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_nonPCNodeType; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterNonPCNodeType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitNonPCNodeType(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitNonPCNodeType(this); + else return visitor.visitChildren(this); + } + } + + public final NonPCNodeTypeContext nonPCNodeType() throws RecognitionException { + NonPCNodeTypeContext _localctx = new NonPCNodeTypeContext(_ctx, getState()); + enterRule(_localctx, 10, RULE_nonPCNodeType); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(182); + _la = _input.LA(1); + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 14018773254144L) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class CreateObligationStatementContext extends ParserRuleContext { + public TerminalNode CREATE() { return getToken(PMLParser.CREATE, 0); } + public TerminalNode OBLIGATION() { return getToken(PMLParser.OBLIGATION, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode OPEN_CURLY() { return getToken(PMLParser.OPEN_CURLY, 0); } + public TerminalNode CLOSE_CURLY() { return getToken(PMLParser.CLOSE_CURLY, 0); } + public List createRuleStatement() { + return getRuleContexts(CreateRuleStatementContext.class); + } + public CreateRuleStatementContext createRuleStatement(int i) { + return getRuleContext(CreateRuleStatementContext.class,i); + } + public CreateObligationStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_createObligationStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterCreateObligationStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitCreateObligationStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitCreateObligationStatement(this); + else return visitor.visitChildren(this); + } + } + + public final CreateObligationStatementContext createObligationStatement() throws RecognitionException { + CreateObligationStatementContext _localctx = new CreateObligationStatementContext(_ctx, getState()); + enterRule(_localctx, 12, RULE_createObligationStatement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(184); + match(CREATE); + setState(185); + match(OBLIGATION); + setState(186); + expression(0); + setState(187); + match(OPEN_CURLY); + setState(191); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==CREATE) { + { + { + setState(188); + createRuleStatement(); + } + } + setState(193); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(194); + match(CLOSE_CURLY); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class CreateRuleStatementContext extends ParserRuleContext { + public ExpressionContext ruleName; + public TerminalNode CREATE() { return getToken(PMLParser.CREATE, 0); } + public TerminalNode RULE() { return getToken(PMLParser.RULE, 0); } + public TerminalNode WHEN() { return getToken(PMLParser.WHEN, 0); } + public SubjectPatternContext subjectPattern() { + return getRuleContext(SubjectPatternContext.class,0); + } + public TerminalNode PERFORMS() { return getToken(PMLParser.PERFORMS, 0); } + public OperationPatternContext operationPattern() { + return getRuleContext(OperationPatternContext.class,0); + } + public ResponseContext response() { + return getRuleContext(ResponseContext.class,0); + } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode ON() { return getToken(PMLParser.ON, 0); } + public OperandPatternContext operandPattern() { + return getRuleContext(OperandPatternContext.class,0); + } + public CreateRuleStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_createRuleStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterCreateRuleStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitCreateRuleStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitCreateRuleStatement(this); + else return visitor.visitChildren(this); + } + } + + public final CreateRuleStatementContext createRuleStatement() throws RecognitionException { + CreateRuleStatementContext _localctx = new CreateRuleStatementContext(_ctx, getState()); + enterRule(_localctx, 14, RULE_createRuleStatement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(196); + match(CREATE); + setState(197); + match(RULE); + setState(198); + ((CreateRuleStatementContext)_localctx).ruleName = expression(0); + setState(199); + match(WHEN); + setState(200); + subjectPattern(); + setState(201); + match(PERFORMS); + setState(202); + operationPattern(); + setState(205); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ON) { + { + setState(203); + match(ON); + setState(204); + operandPattern(); + } + } + + setState(207); + response(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class SubjectPatternContext extends ParserRuleContext { + public SubjectPatternContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_subjectPattern; } + + public SubjectPatternContext() { } + public void copyFrom(SubjectPatternContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class AnyUserPatternContext extends SubjectPatternContext { + public TerminalNode ANY() { return getToken(PMLParser.ANY, 0); } + public TerminalNode USER() { return getToken(PMLParser.USER, 0); } + public AnyUserPatternContext(SubjectPatternContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterAnyUserPattern(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitAnyUserPattern(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitAnyUserPattern(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class UserPatternContext extends SubjectPatternContext { + public TerminalNode USER() { return getToken(PMLParser.USER, 0); } + public SubjectPatternExpressionContext subjectPatternExpression() { + return getRuleContext(SubjectPatternExpressionContext.class,0); + } + public UserPatternContext(SubjectPatternContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterUserPattern(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitUserPattern(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitUserPattern(this); + else return visitor.visitChildren(this); + } + } + + public final SubjectPatternContext subjectPattern() throws RecognitionException { + SubjectPatternContext _localctx = new SubjectPatternContext(_ctx, getState()); + enterRule(_localctx, 16, RULE_subjectPattern); + try { + setState(213); + _errHandler.sync(this); + switch (_input.LA(1)) { + case ANY: + _localctx = new AnyUserPatternContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(209); + match(ANY); + setState(210); + match(USER); + } + break; + case USER: + _localctx = new UserPatternContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(211); + match(USER); + setState(212); + subjectPatternExpression(0); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class SubjectPatternExpressionContext extends ParserRuleContext { + public SubjectPatternExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_subjectPatternExpression; } + + public SubjectPatternExpressionContext() { } + public void copyFrom(SubjectPatternExpressionContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class BasicSubjectPatternExpressionContext extends SubjectPatternExpressionContext { + public BasicSubjectPatternExprContext basicSubjectPatternExpr() { + return getRuleContext(BasicSubjectPatternExprContext.class,0); + } + public BasicSubjectPatternExpressionContext(SubjectPatternExpressionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterBasicSubjectPatternExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitBasicSubjectPatternExpression(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitBasicSubjectPatternExpression(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class ParenSubjectPatternExpressionContext extends SubjectPatternExpressionContext { + public TerminalNode OPEN_PAREN() { return getToken(PMLParser.OPEN_PAREN, 0); } + public SubjectPatternExpressionContext subjectPatternExpression() { + return getRuleContext(SubjectPatternExpressionContext.class,0); + } + public TerminalNode CLOSE_PAREN() { return getToken(PMLParser.CLOSE_PAREN, 0); } + public ParenSubjectPatternExpressionContext(SubjectPatternExpressionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterParenSubjectPatternExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitParenSubjectPatternExpression(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitParenSubjectPatternExpression(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class NegateSubjectPatternExpressionContext extends SubjectPatternExpressionContext { + public TerminalNode EXCLAMATION() { return getToken(PMLParser.EXCLAMATION, 0); } + public SubjectPatternExpressionContext subjectPatternExpression() { + return getRuleContext(SubjectPatternExpressionContext.class,0); + } + public NegateSubjectPatternExpressionContext(SubjectPatternExpressionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterNegateSubjectPatternExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitNegateSubjectPatternExpression(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitNegateSubjectPatternExpression(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class LogicalSubjectPatternExpressionContext extends SubjectPatternExpressionContext { + public SubjectPatternExpressionContext left; + public SubjectPatternExpressionContext right; + public List subjectPatternExpression() { + return getRuleContexts(SubjectPatternExpressionContext.class); + } + public SubjectPatternExpressionContext subjectPatternExpression(int i) { + return getRuleContext(SubjectPatternExpressionContext.class,i); + } + public TerminalNode LOGICAL_AND() { return getToken(PMLParser.LOGICAL_AND, 0); } + public TerminalNode LOGICAL_OR() { return getToken(PMLParser.LOGICAL_OR, 0); } + public LogicalSubjectPatternExpressionContext(SubjectPatternExpressionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterLogicalSubjectPatternExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitLogicalSubjectPatternExpression(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitLogicalSubjectPatternExpression(this); + else return visitor.visitChildren(this); + } + } + + public final SubjectPatternExpressionContext subjectPatternExpression() throws RecognitionException { + return subjectPatternExpression(0); + } + + private SubjectPatternExpressionContext subjectPatternExpression(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + SubjectPatternExpressionContext _localctx = new SubjectPatternExpressionContext(_ctx, _parentState); + SubjectPatternExpressionContext _prevctx = _localctx; + int _startState = 18; + enterRecursionRule(_localctx, 18, RULE_subjectPatternExpression, _p); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(223); + _errHandler.sync(this); + switch (_input.LA(1)) { + case IN: + case PROCESS: + case DOUBLE_QUOTE_STRING: + { + _localctx = new BasicSubjectPatternExpressionContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + + setState(216); + basicSubjectPatternExpr(); + } + break; + case EXCLAMATION: + { + _localctx = new NegateSubjectPatternExpressionContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(217); + match(EXCLAMATION); + setState(218); + subjectPatternExpression(3); + } + break; + case OPEN_PAREN: + { + _localctx = new ParenSubjectPatternExpressionContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(219); + match(OPEN_PAREN); + setState(220); + subjectPatternExpression(0); + setState(221); + match(CLOSE_PAREN); + } + break; + default: + throw new NoViableAltException(this); + } + _ctx.stop = _input.LT(-1); + setState(230); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,7,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + { + _localctx = new LogicalSubjectPatternExpressionContext(new SubjectPatternExpressionContext(_parentctx, _parentState)); + ((LogicalSubjectPatternExpressionContext)_localctx).left = _prevctx; + pushNewRecursionContext(_localctx, _startState, RULE_subjectPatternExpression); + setState(225); + if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); + setState(226); + _la = _input.LA(1); + if ( !(_la==LOGICAL_OR || _la==LOGICAL_AND) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(227); + ((LogicalSubjectPatternExpressionContext)_localctx).right = subjectPatternExpression(2); + } + } + } + setState(232); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,7,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class BasicSubjectPatternExprContext extends ParserRuleContext { + public BasicSubjectPatternExprContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_basicSubjectPatternExpr; } + + public BasicSubjectPatternExprContext() { } + public void copyFrom(BasicSubjectPatternExprContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class InSubjectContext extends BasicSubjectPatternExprContext { + public TerminalNode IN() { return getToken(PMLParser.IN, 0); } + public StringLitContext stringLit() { + return getRuleContext(StringLitContext.class,0); + } + public InSubjectContext(BasicSubjectPatternExprContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterInSubject(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitInSubject(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitInSubject(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class UsernameSubjectContext extends BasicSubjectPatternExprContext { + public StringLitContext stringLit() { + return getRuleContext(StringLitContext.class,0); + } + public UsernameSubjectContext(BasicSubjectPatternExprContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterUsernameSubject(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitUsernameSubject(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitUsernameSubject(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class ProcessSubjectContext extends BasicSubjectPatternExprContext { + public TerminalNode PROCESS() { return getToken(PMLParser.PROCESS, 0); } + public StringLitContext stringLit() { + return getRuleContext(StringLitContext.class,0); + } + public ProcessSubjectContext(BasicSubjectPatternExprContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterProcessSubject(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitProcessSubject(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitProcessSubject(this); + else return visitor.visitChildren(this); + } + } + + public final BasicSubjectPatternExprContext basicSubjectPatternExpr() throws RecognitionException { + BasicSubjectPatternExprContext _localctx = new BasicSubjectPatternExprContext(_ctx, getState()); + enterRule(_localctx, 20, RULE_basicSubjectPatternExpr); + try { + setState(238); + _errHandler.sync(this); + switch (_input.LA(1)) { + case IN: + _localctx = new InSubjectContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(233); + match(IN); + setState(234); + stringLit(); + } + break; + case DOUBLE_QUOTE_STRING: + _localctx = new UsernameSubjectContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(235); + stringLit(); + } + break; + case PROCESS: + _localctx = new ProcessSubjectContext(_localctx); + enterOuterAlt(_localctx, 3); + { + setState(236); + match(PROCESS); + setState(237); + stringLit(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class OperationPatternContext extends ParserRuleContext { + public OperationPatternContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_operationPattern; } + + public OperationPatternContext() { } + public void copyFrom(OperationPatternContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class AnyOperationContext extends OperationPatternContext { + public TerminalNode ANY() { return getToken(PMLParser.ANY, 0); } + public TerminalNode OPERATION() { return getToken(PMLParser.OPERATION, 0); } + public AnyOperationContext(OperationPatternContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterAnyOperation(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitAnyOperation(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitAnyOperation(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class IDOperationContext extends OperationPatternContext { + public StringLitContext stringLit() { + return getRuleContext(StringLitContext.class,0); + } + public IDOperationContext(OperationPatternContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterIDOperation(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitIDOperation(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitIDOperation(this); + else return visitor.visitChildren(this); + } + } + + public final OperationPatternContext operationPattern() throws RecognitionException { + OperationPatternContext _localctx = new OperationPatternContext(_ctx, getState()); + enterRule(_localctx, 22, RULE_operationPattern); + try { + setState(243); + _errHandler.sync(this); + switch (_input.LA(1)) { + case ANY: + _localctx = new AnyOperationContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(240); + match(ANY); + setState(241); + match(OPERATION); + } + break; + case DOUBLE_QUOTE_STRING: + _localctx = new IDOperationContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(242); + stringLit(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class OperandPatternContext extends ParserRuleContext { + public TerminalNode OPEN_CURLY() { return getToken(PMLParser.OPEN_CURLY, 0); } + public TerminalNode CLOSE_CURLY() { return getToken(PMLParser.CLOSE_CURLY, 0); } + public List operandPatternElement() { + return getRuleContexts(OperandPatternElementContext.class); + } + public OperandPatternElementContext operandPatternElement(int i) { + return getRuleContext(OperandPatternElementContext.class,i); + } + public List COMMA() { return getTokens(PMLParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(PMLParser.COMMA, i); + } + public OperandPatternContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_operandPattern; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterOperandPattern(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitOperandPattern(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitOperandPattern(this); + else return visitor.visitChildren(this); + } + } + + public final OperandPatternContext operandPattern() throws RecognitionException { + OperandPatternContext _localctx = new OperandPatternContext(_ctx, getState()); + enterRule(_localctx, 24, RULE_operandPattern); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(245); + match(OPEN_CURLY); + setState(254); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ID) { + { + setState(246); + operandPatternElement(); + setState(251); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(247); + match(COMMA); + setState(248); + operandPatternElement(); + } + } + setState(253); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + + setState(256); + match(CLOSE_CURLY); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class OperandPatternElementContext extends ParserRuleContext { + public Token key; + public OperandPatternExpressionContext single; + public OperandPatternExpressionArrayContext multiple; + public TerminalNode COLON() { return getToken(PMLParser.COLON, 0); } + public TerminalNode ID() { return getToken(PMLParser.ID, 0); } + public OperandPatternExpressionContext operandPatternExpression() { + return getRuleContext(OperandPatternExpressionContext.class,0); + } + public OperandPatternExpressionArrayContext operandPatternExpressionArray() { + return getRuleContext(OperandPatternExpressionArrayContext.class,0); + } + public OperandPatternElementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_operandPatternElement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterOperandPatternElement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitOperandPatternElement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitOperandPatternElement(this); + else return visitor.visitChildren(this); + } + } + + public final OperandPatternElementContext operandPatternElement() throws RecognitionException { + OperandPatternElementContext _localctx = new OperandPatternElementContext(_ctx, getState()); + enterRule(_localctx, 26, RULE_operandPatternElement); + try { + enterOuterAlt(_localctx, 1); + { + setState(258); + ((OperandPatternElementContext)_localctx).key = match(ID); + setState(259); + match(COLON); + setState(262); + _errHandler.sync(this); + switch (_input.LA(1)) { + case IN: + case ANY: + case OPEN_PAREN: + case EXCLAMATION: + case DOUBLE_QUOTE_STRING: + { + setState(260); + ((OperandPatternElementContext)_localctx).single = operandPatternExpression(0); + } + break; + case OPEN_BRACKET: + { + setState(261); + ((OperandPatternElementContext)_localctx).multiple = operandPatternExpressionArray(); + } + break; + default: + throw new NoViableAltException(this); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class OperandPatternExpressionArrayContext extends ParserRuleContext { + public TerminalNode OPEN_BRACKET() { return getToken(PMLParser.OPEN_BRACKET, 0); } + public List operandPatternExpression() { + return getRuleContexts(OperandPatternExpressionContext.class); + } + public OperandPatternExpressionContext operandPatternExpression(int i) { + return getRuleContext(OperandPatternExpressionContext.class,i); + } + public TerminalNode CLOSE_BRACKET() { return getToken(PMLParser.CLOSE_BRACKET, 0); } + public List COMMA() { return getTokens(PMLParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(PMLParser.COMMA, i); + } + public OperandPatternExpressionArrayContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_operandPatternExpressionArray; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterOperandPatternExpressionArray(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitOperandPatternExpressionArray(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitOperandPatternExpressionArray(this); + else return visitor.visitChildren(this); + } + } + + public final OperandPatternExpressionArrayContext operandPatternExpressionArray() throws RecognitionException { + OperandPatternExpressionArrayContext _localctx = new OperandPatternExpressionArrayContext(_ctx, getState()); + enterRule(_localctx, 28, RULE_operandPatternExpressionArray); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(264); + match(OPEN_BRACKET); + setState(265); + operandPatternExpression(0); + setState(270); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(266); + match(COMMA); + setState(267); + operandPatternExpression(0); + } + } + setState(272); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(273); + match(CLOSE_BRACKET); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class OperandPatternExpressionContext extends ParserRuleContext { + public OperandPatternExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_operandPatternExpression; } + + public OperandPatternExpressionContext() { } + public void copyFrom(OperandPatternExpressionContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class ParenOperandPatternExpressionContext extends OperandPatternExpressionContext { + public TerminalNode OPEN_PAREN() { return getToken(PMLParser.OPEN_PAREN, 0); } + public OperandPatternExpressionContext operandPatternExpression() { + return getRuleContext(OperandPatternExpressionContext.class,0); + } + public TerminalNode CLOSE_PAREN() { return getToken(PMLParser.CLOSE_PAREN, 0); } + public ParenOperandPatternExpressionContext(OperandPatternExpressionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterParenOperandPatternExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitParenOperandPatternExpression(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitParenOperandPatternExpression(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class NegateOperandPatternExpressionContext extends OperandPatternExpressionContext { + public TerminalNode EXCLAMATION() { return getToken(PMLParser.EXCLAMATION, 0); } + public OperandPatternExpressionContext operandPatternExpression() { + return getRuleContext(OperandPatternExpressionContext.class,0); + } + public NegateOperandPatternExpressionContext(OperandPatternExpressionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterNegateOperandPatternExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitNegateOperandPatternExpression(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitNegateOperandPatternExpression(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class BasicOperandPatternExpressionContext extends OperandPatternExpressionContext { + public BasicOperandPatternExprContext basicOperandPatternExpr() { + return getRuleContext(BasicOperandPatternExprContext.class,0); + } + public BasicOperandPatternExpressionContext(OperandPatternExpressionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterBasicOperandPatternExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitBasicOperandPatternExpression(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitBasicOperandPatternExpression(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class LogicalOperandPatternExpressionContext extends OperandPatternExpressionContext { + public OperandPatternExpressionContext left; + public OperandPatternExpressionContext right; + public List operandPatternExpression() { + return getRuleContexts(OperandPatternExpressionContext.class); + } + public OperandPatternExpressionContext operandPatternExpression(int i) { + return getRuleContext(OperandPatternExpressionContext.class,i); + } + public TerminalNode LOGICAL_AND() { return getToken(PMLParser.LOGICAL_AND, 0); } + public TerminalNode LOGICAL_OR() { return getToken(PMLParser.LOGICAL_OR, 0); } + public LogicalOperandPatternExpressionContext(OperandPatternExpressionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterLogicalOperandPatternExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitLogicalOperandPatternExpression(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitLogicalOperandPatternExpression(this); + else return visitor.visitChildren(this); + } + } + + public final OperandPatternExpressionContext operandPatternExpression() throws RecognitionException { + return operandPatternExpression(0); + } + + private OperandPatternExpressionContext operandPatternExpression(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + OperandPatternExpressionContext _localctx = new OperandPatternExpressionContext(_ctx, _parentState); + OperandPatternExpressionContext _prevctx = _localctx; + int _startState = 30; + enterRecursionRule(_localctx, 30, RULE_operandPatternExpression, _p); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(283); + _errHandler.sync(this); + switch (_input.LA(1)) { + case IN: + case ANY: + case DOUBLE_QUOTE_STRING: + { + _localctx = new BasicOperandPatternExpressionContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + + setState(276); + basicOperandPatternExpr(); + } + break; + case EXCLAMATION: + { + _localctx = new NegateOperandPatternExpressionContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(277); + match(EXCLAMATION); + setState(278); + operandPatternExpression(3); + } + break; + case OPEN_PAREN: + { + _localctx = new ParenOperandPatternExpressionContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(279); + match(OPEN_PAREN); + setState(280); + operandPatternExpression(0); + setState(281); + match(CLOSE_PAREN); + } + break; + default: + throw new NoViableAltException(this); + } + _ctx.stop = _input.LT(-1); + setState(290); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,15,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + { + _localctx = new LogicalOperandPatternExpressionContext(new OperandPatternExpressionContext(_parentctx, _parentState)); + ((LogicalOperandPatternExpressionContext)_localctx).left = _prevctx; + pushNewRecursionContext(_localctx, _startState, RULE_operandPatternExpression); + setState(285); + if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); + setState(286); + _la = _input.LA(1); + if ( !(_la==LOGICAL_OR || _la==LOGICAL_AND) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(287); + ((LogicalOperandPatternExpressionContext)_localctx).right = operandPatternExpression(2); + } + } + } + setState(292); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,15,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class BasicOperandPatternExprContext extends ParserRuleContext { + public BasicOperandPatternExprContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_basicOperandPatternExpr; } + + public BasicOperandPatternExprContext() { } + public void copyFrom(BasicOperandPatternExprContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class AnyPolicyElementContext extends BasicOperandPatternExprContext { + public TerminalNode ANY() { return getToken(PMLParser.ANY, 0); } + public AnyPolicyElementContext(BasicOperandPatternExprContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterAnyPolicyElement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitAnyPolicyElement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitAnyPolicyElement(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class InPolicyElementContext extends BasicOperandPatternExprContext { + public TerminalNode IN() { return getToken(PMLParser.IN, 0); } + public StringLitContext stringLit() { + return getRuleContext(StringLitContext.class,0); + } + public InPolicyElementContext(BasicOperandPatternExprContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterInPolicyElement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitInPolicyElement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitInPolicyElement(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class PolicyElementContext extends BasicOperandPatternExprContext { + public StringLitContext stringLit() { + return getRuleContext(StringLitContext.class,0); + } + public PolicyElementContext(BasicOperandPatternExprContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterPolicyElement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitPolicyElement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitPolicyElement(this); + else return visitor.visitChildren(this); + } + } + + public final BasicOperandPatternExprContext basicOperandPatternExpr() throws RecognitionException { + BasicOperandPatternExprContext _localctx = new BasicOperandPatternExprContext(_ctx, getState()); + enterRule(_localctx, 32, RULE_basicOperandPatternExpr); + try { + setState(297); + _errHandler.sync(this); + switch (_input.LA(1)) { + case ANY: + _localctx = new AnyPolicyElementContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(293); + match(ANY); + } + break; + case IN: + _localctx = new InPolicyElementContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(294); + match(IN); + setState(295); + stringLit(); + } + break; + case DOUBLE_QUOTE_STRING: + _localctx = new PolicyElementContext(_localctx); + enterOuterAlt(_localctx, 3); + { + setState(296); + stringLit(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ResponseContext extends ParserRuleContext { + public TerminalNode DO() { return getToken(PMLParser.DO, 0); } + public TerminalNode OPEN_PAREN() { return getToken(PMLParser.OPEN_PAREN, 0); } + public TerminalNode ID() { return getToken(PMLParser.ID, 0); } + public TerminalNode CLOSE_PAREN() { return getToken(PMLParser.CLOSE_PAREN, 0); } + public ResponseBlockContext responseBlock() { + return getRuleContext(ResponseBlockContext.class,0); + } + public ResponseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_response; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterResponse(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitResponse(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitResponse(this); + else return visitor.visitChildren(this); + } + } + + public final ResponseContext response() throws RecognitionException { + ResponseContext _localctx = new ResponseContext(_ctx, getState()); + enterRule(_localctx, 34, RULE_response); + try { + enterOuterAlt(_localctx, 1); + { + setState(299); + match(DO); + setState(300); + match(OPEN_PAREN); + setState(301); + match(ID); + setState(302); + match(CLOSE_PAREN); + setState(303); + responseBlock(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ResponseBlockContext extends ParserRuleContext { + public TerminalNode OPEN_CURLY() { return getToken(PMLParser.OPEN_CURLY, 0); } + public TerminalNode CLOSE_CURLY() { return getToken(PMLParser.CLOSE_CURLY, 0); } + public List responseStatement() { + return getRuleContexts(ResponseStatementContext.class); + } + public ResponseStatementContext responseStatement(int i) { + return getRuleContext(ResponseStatementContext.class,i); + } + public ResponseBlockContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_responseBlock; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterResponseBlock(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitResponseBlock(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitResponseBlock(this); + else return visitor.visitChildren(this); + } + } + + public final ResponseBlockContext responseBlock() throws RecognitionException { + ResponseBlockContext _localctx = new ResponseBlockContext(_ctx, getState()); + enterRule(_localctx, 36, RULE_responseBlock); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(305); + match(OPEN_CURLY); + setState(309); + _errHandler.sync(this); + _la = _input.LA(1); + while (((((_la - 1)) & ~0x3f) == 0 && ((1L << (_la - 1)) & -9154656955725250503L) != 0)) { + { + { + setState(306); + responseStatement(); + } + } + setState(311); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(312); + match(CLOSE_CURLY); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ResponseStatementContext extends ParserRuleContext { + public StatementContext statement() { + return getRuleContext(StatementContext.class,0); + } + public CreateRuleStatementContext createRuleStatement() { + return getRuleContext(CreateRuleStatementContext.class,0); + } + public DeleteRuleStatementContext deleteRuleStatement() { + return getRuleContext(DeleteRuleStatementContext.class,0); + } + public ResponseStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_responseStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterResponseStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitResponseStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitResponseStatement(this); + else return visitor.visitChildren(this); + } + } + + public final ResponseStatementContext responseStatement() throws RecognitionException { + ResponseStatementContext _localctx = new ResponseStatementContext(_ctx, getState()); + enterRule(_localctx, 38, RULE_responseStatement); + try { + setState(317); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,18,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(314); + statement(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(315); + createRuleStatement(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(316); + deleteRuleStatement(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class CreateProhibitionStatementContext extends ParserRuleContext { + public ExpressionContext name; + public ExpressionContext subject; + public ExpressionContext accessRights; + public ExpressionContext containers; + public TerminalNode CREATE() { return getToken(PMLParser.CREATE, 0); } + public TerminalNode PROHIBITION() { return getToken(PMLParser.PROHIBITION, 0); } + public TerminalNode DENY() { return getToken(PMLParser.DENY, 0); } + public TerminalNode ACCESS_RIGHTS() { return getToken(PMLParser.ACCESS_RIGHTS, 0); } + public TerminalNode ON() { return getToken(PMLParser.ON, 0); } + public TerminalNode OF() { return getToken(PMLParser.OF, 0); } + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public TerminalNode USER() { return getToken(PMLParser.USER, 0); } + public TerminalNode USER_ATTRIBUTE() { return getToken(PMLParser.USER_ATTRIBUTE, 0); } + public TerminalNode PROCESS() { return getToken(PMLParser.PROCESS, 0); } + public TerminalNode INTERSECTION() { return getToken(PMLParser.INTERSECTION, 0); } + public TerminalNode UNION() { return getToken(PMLParser.UNION, 0); } + public CreateProhibitionStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_createProhibitionStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterCreateProhibitionStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitCreateProhibitionStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitCreateProhibitionStatement(this); + else return visitor.visitChildren(this); + } + } + + public final CreateProhibitionStatementContext createProhibitionStatement() throws RecognitionException { + CreateProhibitionStatementContext _localctx = new CreateProhibitionStatementContext(_ctx, getState()); + enterRule(_localctx, 40, RULE_createProhibitionStatement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(319); + match(CREATE); + setState(320); + match(PROHIBITION); + setState(321); + ((CreateProhibitionStatementContext)_localctx).name = expression(0); + setState(322); + match(DENY); + setState(323); + _la = _input.LA(1); + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 9345849884672L) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(324); + ((CreateProhibitionStatementContext)_localctx).subject = expression(0); + setState(325); + match(ACCESS_RIGHTS); + setState(326); + ((CreateProhibitionStatementContext)_localctx).accessRights = expression(0); + setState(327); + match(ON); + setState(328); + _la = _input.LA(1); + if ( !(_la==INTERSECTION || _la==UNION) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(329); + match(OF); + setState(330); + ((CreateProhibitionStatementContext)_localctx).containers = expression(0); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class SetNodePropertiesStatementContext extends ParserRuleContext { + public ExpressionContext name; + public ExpressionContext properties; + public TerminalNode SET_PROPERTIES() { return getToken(PMLParser.SET_PROPERTIES, 0); } + public TerminalNode OF() { return getToken(PMLParser.OF, 0); } + public TerminalNode TO() { return getToken(PMLParser.TO, 0); } + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public SetNodePropertiesStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_setNodePropertiesStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterSetNodePropertiesStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitSetNodePropertiesStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitSetNodePropertiesStatement(this); + else return visitor.visitChildren(this); + } + } + + public final SetNodePropertiesStatementContext setNodePropertiesStatement() throws RecognitionException { + SetNodePropertiesStatementContext _localctx = new SetNodePropertiesStatementContext(_ctx, getState()); + enterRule(_localctx, 42, RULE_setNodePropertiesStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(332); + match(SET_PROPERTIES); + setState(333); + match(OF); + setState(334); + ((SetNodePropertiesStatementContext)_localctx).name = expression(0); + setState(335); + match(TO); + setState(336); + ((SetNodePropertiesStatementContext)_localctx).properties = expression(0); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class AssignStatementContext extends ParserRuleContext { + public ExpressionContext ascendantNode; + public ExpressionContext descendantNodes; + public TerminalNode ASSIGN() { return getToken(PMLParser.ASSIGN, 0); } + public TerminalNode TO() { return getToken(PMLParser.TO, 0); } + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public AssignStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_assignStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterAssignStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitAssignStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitAssignStatement(this); + else return visitor.visitChildren(this); + } + } + + public final AssignStatementContext assignStatement() throws RecognitionException { + AssignStatementContext _localctx = new AssignStatementContext(_ctx, getState()); + enterRule(_localctx, 44, RULE_assignStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(338); + match(ASSIGN); + setState(339); + ((AssignStatementContext)_localctx).ascendantNode = expression(0); + setState(340); + match(TO); + setState(341); + ((AssignStatementContext)_localctx).descendantNodes = expression(0); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class DeassignStatementContext extends ParserRuleContext { + public ExpressionContext ascendantNode; + public ExpressionContext descendantNodes; + public TerminalNode DEASSIGN() { return getToken(PMLParser.DEASSIGN, 0); } + public TerminalNode FROM() { return getToken(PMLParser.FROM, 0); } + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public DeassignStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_deassignStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterDeassignStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitDeassignStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitDeassignStatement(this); + else return visitor.visitChildren(this); + } + } + + public final DeassignStatementContext deassignStatement() throws RecognitionException { + DeassignStatementContext _localctx = new DeassignStatementContext(_ctx, getState()); + enterRule(_localctx, 46, RULE_deassignStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(343); + match(DEASSIGN); + setState(344); + ((DeassignStatementContext)_localctx).ascendantNode = expression(0); + setState(345); + match(FROM); + setState(346); + ((DeassignStatementContext)_localctx).descendantNodes = expression(0); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class AssociateStatementContext extends ParserRuleContext { + public ExpressionContext ua; + public ExpressionContext target; + public ExpressionContext accessRights; + public TerminalNode ASSOCIATE() { return getToken(PMLParser.ASSOCIATE, 0); } + public TerminalNode AND() { return getToken(PMLParser.AND, 0); } + public TerminalNode WITH() { return getToken(PMLParser.WITH, 0); } + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public AssociateStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_associateStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterAssociateStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitAssociateStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitAssociateStatement(this); + else return visitor.visitChildren(this); + } + } + + public final AssociateStatementContext associateStatement() throws RecognitionException { + AssociateStatementContext _localctx = new AssociateStatementContext(_ctx, getState()); + enterRule(_localctx, 48, RULE_associateStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(348); + match(ASSOCIATE); + setState(349); + ((AssociateStatementContext)_localctx).ua = expression(0); + setState(350); + match(AND); + setState(351); + ((AssociateStatementContext)_localctx).target = expression(0); + setState(352); + match(WITH); + setState(353); + ((AssociateStatementContext)_localctx).accessRights = expression(0); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class DissociateStatementContext extends ParserRuleContext { + public ExpressionContext ua; + public ExpressionContext target; + public TerminalNode DISSOCIATE() { return getToken(PMLParser.DISSOCIATE, 0); } + public TerminalNode AND() { return getToken(PMLParser.AND, 0); } + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public DissociateStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_dissociateStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterDissociateStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitDissociateStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitDissociateStatement(this); + else return visitor.visitChildren(this); + } + } + + public final DissociateStatementContext dissociateStatement() throws RecognitionException { + DissociateStatementContext _localctx = new DissociateStatementContext(_ctx, getState()); + enterRule(_localctx, 50, RULE_dissociateStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(355); + match(DISSOCIATE); + setState(356); + ((DissociateStatementContext)_localctx).ua = expression(0); + setState(357); + match(AND); + setState(358); + ((DissociateStatementContext)_localctx).target = expression(0); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class SetResourceOperationsStatementContext extends ParserRuleContext { + public ExpressionContext accessRightsArr; + public TerminalNode SET_RESOURCE_OPERATIONS() { return getToken(PMLParser.SET_RESOURCE_OPERATIONS, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public SetResourceOperationsStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_setResourceOperationsStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterSetResourceOperationsStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitSetResourceOperationsStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitSetResourceOperationsStatement(this); + else return visitor.visitChildren(this); + } + } + + public final SetResourceOperationsStatementContext setResourceOperationsStatement() throws RecognitionException { + SetResourceOperationsStatementContext _localctx = new SetResourceOperationsStatementContext(_ctx, getState()); + enterRule(_localctx, 52, RULE_setResourceOperationsStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(360); + match(SET_RESOURCE_OPERATIONS); + setState(361); + ((SetResourceOperationsStatementContext)_localctx).accessRightsArr = expression(0); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class DeleteStatementContext extends ParserRuleContext { + public TerminalNode DELETE() { return getToken(PMLParser.DELETE, 0); } + public DeleteTypeContext deleteType() { + return getRuleContext(DeleteTypeContext.class,0); + } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public DeleteStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_deleteStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterDeleteStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitDeleteStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitDeleteStatement(this); + else return visitor.visitChildren(this); + } + } + + public final DeleteStatementContext deleteStatement() throws RecognitionException { + DeleteStatementContext _localctx = new DeleteStatementContext(_ctx, getState()); + enterRule(_localctx, 54, RULE_deleteStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(363); + match(DELETE); + setState(364); + deleteType(); + setState(365); + expression(0); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class DeleteTypeContext extends ParserRuleContext { + public DeleteTypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_deleteType; } + + public DeleteTypeContext() { } + public void copyFrom(DeleteTypeContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class DeleteNodeContext extends DeleteTypeContext { + public NodeTypeContext nodeType() { + return getRuleContext(NodeTypeContext.class,0); + } + public DeleteNodeContext(DeleteTypeContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterDeleteNode(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitDeleteNode(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitDeleteNode(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class DeleteProhibitionContext extends DeleteTypeContext { + public TerminalNode PROHIBITION() { return getToken(PMLParser.PROHIBITION, 0); } + public DeleteProhibitionContext(DeleteTypeContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterDeleteProhibition(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitDeleteProhibition(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitDeleteProhibition(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class DeleteObligationContext extends DeleteTypeContext { + public TerminalNode OBLIGATION() { return getToken(PMLParser.OBLIGATION, 0); } + public DeleteObligationContext(DeleteTypeContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterDeleteObligation(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitDeleteObligation(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitDeleteObligation(this); + else return visitor.visitChildren(this); + } + } + + public final DeleteTypeContext deleteType() throws RecognitionException { + DeleteTypeContext _localctx = new DeleteTypeContext(_ctx, getState()); + enterRule(_localctx, 56, RULE_deleteType); + try { + setState(370); + _errHandler.sync(this); + switch (_input.LA(1)) { + case POLICY_CLASS: + case OBJECT_ATTRIBUTE: + case USER_ATTRIBUTE: + case OBJECT: + case USER: + _localctx = new DeleteNodeContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(367); + nodeType(); + } + break; + case OBLIGATION: + _localctx = new DeleteObligationContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(368); + match(OBLIGATION); + } + break; + case PROHIBITION: + _localctx = new DeleteProhibitionContext(_localctx); + enterOuterAlt(_localctx, 3); + { + setState(369); + match(PROHIBITION); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class NodeTypeContext extends ParserRuleContext { + public TerminalNode POLICY_CLASS() { return getToken(PMLParser.POLICY_CLASS, 0); } + public TerminalNode OBJECT_ATTRIBUTE() { return getToken(PMLParser.OBJECT_ATTRIBUTE, 0); } + public TerminalNode USER_ATTRIBUTE() { return getToken(PMLParser.USER_ATTRIBUTE, 0); } + public TerminalNode OBJECT() { return getToken(PMLParser.OBJECT, 0); } + public TerminalNode USER() { return getToken(PMLParser.USER, 0); } + public NodeTypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_nodeType; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterNodeType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitNodeType(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitNodeType(this); + else return visitor.visitChildren(this); + } + } + + public final NodeTypeContext nodeType() throws RecognitionException { + NodeTypeContext _localctx = new NodeTypeContext(_ctx, getState()); + enterRule(_localctx, 58, RULE_nodeType); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(372); + _la = _input.LA(1); + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 14156212207616L) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class DeleteRuleStatementContext extends ParserRuleContext { + public ExpressionContext ruleName; + public ExpressionContext obligationName; + public TerminalNode DELETE() { return getToken(PMLParser.DELETE, 0); } + public TerminalNode RULE() { return getToken(PMLParser.RULE, 0); } + public TerminalNode FROM() { return getToken(PMLParser.FROM, 0); } + public TerminalNode OBLIGATION() { return getToken(PMLParser.OBLIGATION, 0); } + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public DeleteRuleStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_deleteRuleStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterDeleteRuleStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitDeleteRuleStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitDeleteRuleStatement(this); + else return visitor.visitChildren(this); + } + } + + public final DeleteRuleStatementContext deleteRuleStatement() throws RecognitionException { + DeleteRuleStatementContext _localctx = new DeleteRuleStatementContext(_ctx, getState()); + enterRule(_localctx, 60, RULE_deleteRuleStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(374); + match(DELETE); + setState(375); + match(RULE); + setState(376); + ((DeleteRuleStatementContext)_localctx).ruleName = expression(0); + setState(377); + match(FROM); + setState(378); + match(OBLIGATION); + setState(379); + ((DeleteRuleStatementContext)_localctx).obligationName = expression(0); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class VariableDeclarationStatementContext extends ParserRuleContext { + public VariableDeclarationStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_variableDeclarationStatement; } + + public VariableDeclarationStatementContext() { } + public void copyFrom(VariableDeclarationStatementContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class VarDeclarationContext extends VariableDeclarationStatementContext { + public TerminalNode VAR() { return getToken(PMLParser.VAR, 0); } + public List varSpec() { + return getRuleContexts(VarSpecContext.class); + } + public VarSpecContext varSpec(int i) { + return getRuleContext(VarSpecContext.class,i); + } + public TerminalNode OPEN_PAREN() { return getToken(PMLParser.OPEN_PAREN, 0); } + public TerminalNode CLOSE_PAREN() { return getToken(PMLParser.CLOSE_PAREN, 0); } + public VarDeclarationContext(VariableDeclarationStatementContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterVarDeclaration(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitVarDeclaration(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitVarDeclaration(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class ShortDeclarationContext extends VariableDeclarationStatementContext { + public TerminalNode ID() { return getToken(PMLParser.ID, 0); } + public TerminalNode DECLARE_ASSIGN() { return getToken(PMLParser.DECLARE_ASSIGN, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public ShortDeclarationContext(VariableDeclarationStatementContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterShortDeclaration(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitShortDeclaration(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitShortDeclaration(this); + else return visitor.visitChildren(this); + } + } + + public final VariableDeclarationStatementContext variableDeclarationStatement() throws RecognitionException { + VariableDeclarationStatementContext _localctx = new VariableDeclarationStatementContext(_ctx, getState()); + enterRule(_localctx, 62, RULE_variableDeclarationStatement); + int _la; + try { + setState(396); + _errHandler.sync(this); + switch (_input.LA(1)) { + case VAR: + _localctx = new VarDeclarationContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(381); + match(VAR); + setState(391); + _errHandler.sync(this); + switch (_input.LA(1)) { + case ID: + { + setState(382); + varSpec(); + } + break; + case OPEN_PAREN: + { + setState(383); + match(OPEN_PAREN); + setState(387); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==ID) { + { + { + setState(384); + varSpec(); + } + } + setState(389); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(390); + match(CLOSE_PAREN); + } + break; + default: + throw new NoViableAltException(this); + } + } + break; + case ID: + _localctx = new ShortDeclarationContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(393); + match(ID); + setState(394); + match(DECLARE_ASSIGN); + setState(395); + expression(0); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class VarSpecContext extends ParserRuleContext { + public TerminalNode ID() { return getToken(PMLParser.ID, 0); } + public TerminalNode ASSIGN_EQUALS() { return getToken(PMLParser.ASSIGN_EQUALS, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public VarSpecContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_varSpec; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterVarSpec(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitVarSpec(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitVarSpec(this); + else return visitor.visitChildren(this); + } + } + + public final VarSpecContext varSpec() throws RecognitionException { + VarSpecContext _localctx = new VarSpecContext(_ctx, getState()); + enterRule(_localctx, 64, RULE_varSpec); + try { + enterOuterAlt(_localctx, 1); + { + setState(398); + match(ID); + setState(399); + match(ASSIGN_EQUALS); + setState(400); + expression(0); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class VariableAssignmentStatementContext extends ParserRuleContext { + public TerminalNode ID() { return getToken(PMLParser.ID, 0); } + public TerminalNode ASSIGN_EQUALS() { return getToken(PMLParser.ASSIGN_EQUALS, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode PLUS() { return getToken(PMLParser.PLUS, 0); } + public VariableAssignmentStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_variableAssignmentStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterVariableAssignmentStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitVariableAssignmentStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitVariableAssignmentStatement(this); + else return visitor.visitChildren(this); + } + } + + public final VariableAssignmentStatementContext variableAssignmentStatement() throws RecognitionException { + VariableAssignmentStatementContext _localctx = new VariableAssignmentStatementContext(_ctx, getState()); + enterRule(_localctx, 66, RULE_variableAssignmentStatement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(402); + match(ID); + setState(404); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==PLUS) { + { + setState(403); + match(PLUS); + } + } + + setState(406); + match(ASSIGN_EQUALS); + setState(407); + expression(0); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class FunctionDefinitionStatementContext extends ParserRuleContext { + public FunctionSignatureContext functionSignature() { + return getRuleContext(FunctionSignatureContext.class,0); + } + public StatementBlockContext statementBlock() { + return getRuleContext(StatementBlockContext.class,0); + } + public FunctionDefinitionStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_functionDefinitionStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterFunctionDefinitionStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitFunctionDefinitionStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitFunctionDefinitionStatement(this); + else return visitor.visitChildren(this); + } + } + + public final FunctionDefinitionStatementContext functionDefinitionStatement() throws RecognitionException { + FunctionDefinitionStatementContext _localctx = new FunctionDefinitionStatementContext(_ctx, getState()); + enterRule(_localctx, 68, RULE_functionDefinitionStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(409); + functionSignature(); + setState(410); + statementBlock(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class FunctionSignatureContext extends ParserRuleContext { + public VariableTypeContext returnType; + public TerminalNode ID() { return getToken(PMLParser.ID, 0); } + public TerminalNode OPEN_PAREN() { return getToken(PMLParser.OPEN_PAREN, 0); } + public FormalArgListContext formalArgList() { + return getRuleContext(FormalArgListContext.class,0); + } + public TerminalNode CLOSE_PAREN() { return getToken(PMLParser.CLOSE_PAREN, 0); } + public TerminalNode ROUTINE() { return getToken(PMLParser.ROUTINE, 0); } + public TerminalNode OPERATION() { return getToken(PMLParser.OPERATION, 0); } + public CheckStatementBlockContext checkStatementBlock() { + return getRuleContext(CheckStatementBlockContext.class,0); + } + public VariableTypeContext variableType() { + return getRuleContext(VariableTypeContext.class,0); + } + public FunctionSignatureContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_functionSignature; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterFunctionSignature(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitFunctionSignature(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitFunctionSignature(this); + else return visitor.visitChildren(this); + } + } + + public final FunctionSignatureContext functionSignature() throws RecognitionException { + FunctionSignatureContext _localctx = new FunctionSignatureContext(_ctx, getState()); + enterRule(_localctx, 70, RULE_functionSignature); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(412); + _la = _input.LA(1); + if ( !(_la==OPERATION || _la==ROUTINE) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(413); + match(ID); + setState(414); + match(OPEN_PAREN); + setState(415); + formalArgList(); + setState(416); + match(CLOSE_PAREN); + setState(418); + _errHandler.sync(this); + _la = _input.LA(1); + if (((((_la - 16)) & ~0x3f) == 0 && ((1L << (_la - 16)) & 9013800619474945L) != 0)) { + { + setState(417); + ((FunctionSignatureContext)_localctx).returnType = variableType(); + } + } + + setState(421); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,25,_ctx) ) { + case 1: + { + setState(420); + checkStatementBlock(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class FormalArgListContext extends ParserRuleContext { + public List formalArg() { + return getRuleContexts(FormalArgContext.class); + } + public FormalArgContext formalArg(int i) { + return getRuleContext(FormalArgContext.class,i); + } + public List COMMA() { return getTokens(PMLParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(PMLParser.COMMA, i); + } + public FormalArgListContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_formalArgList; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterFormalArgList(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitFormalArgList(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitFormalArgList(this); + else return visitor.visitChildren(this); + } + } + + public final FormalArgListContext formalArgList() throws RecognitionException { + FormalArgListContext _localctx = new FormalArgListContext(_ctx, getState()); + enterRule(_localctx, 72, RULE_formalArgList); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(431); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & 432627039204343812L) != 0) || _la==OPEN_BRACKET) { + { + setState(423); + formalArg(); + setState(428); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(424); + match(COMMA); + setState(425); + formalArg(); + } + } + setState(430); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class FormalArgContext extends ParserRuleContext { + public VariableTypeContext variableType() { + return getRuleContext(VariableTypeContext.class,0); + } + public TerminalNode ID() { return getToken(PMLParser.ID, 0); } + public TerminalNode NODEOP() { return getToken(PMLParser.NODEOP, 0); } + public FormalArgContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_formalArg; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterFormalArg(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitFormalArg(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitFormalArg(this); + else return visitor.visitChildren(this); + } + } + + public final FormalArgContext formalArg() throws RecognitionException { + FormalArgContext _localctx = new FormalArgContext(_ctx, getState()); + enterRule(_localctx, 74, RULE_formalArg); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(434); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NODEOP) { + { + setState(433); + match(NODEOP); + } + } + + setState(436); + variableType(); + setState(437); + match(ID); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ReturnStatementContext extends ParserRuleContext { + public TerminalNode RETURN() { return getToken(PMLParser.RETURN, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public ReturnStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_returnStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterReturnStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitReturnStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitReturnStatement(this); + else return visitor.visitChildren(this); + } + } + + public final ReturnStatementContext returnStatement() throws RecognitionException { + ReturnStatementContext _localctx = new ReturnStatementContext(_ctx, getState()); + enterRule(_localctx, 76, RULE_returnStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(439); + match(RETURN); + setState(441); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,29,_ctx) ) { + case 1: + { + setState(440); + expression(0); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class CheckStatementContext extends ParserRuleContext { + public ExpressionContext ar; + public ExpressionContext target; + public TerminalNode CHECK() { return getToken(PMLParser.CHECK, 0); } + public TerminalNode ON() { return getToken(PMLParser.ON, 0); } + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public CheckStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_checkStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterCheckStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitCheckStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitCheckStatement(this); + else return visitor.visitChildren(this); + } + } + + public final CheckStatementContext checkStatement() throws RecognitionException { + CheckStatementContext _localctx = new CheckStatementContext(_ctx, getState()); + enterRule(_localctx, 78, RULE_checkStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(443); + match(CHECK); + setState(444); + ((CheckStatementContext)_localctx).ar = expression(0); + setState(445); + match(ON); + setState(446); + ((CheckStatementContext)_localctx).target = expression(0); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class CheckStatementBlockContext extends ParserRuleContext { + public TerminalNode OPEN_CURLY() { return getToken(PMLParser.OPEN_CURLY, 0); } + public TerminalNode CLOSE_CURLY() { return getToken(PMLParser.CLOSE_CURLY, 0); } + public List checkStatement() { + return getRuleContexts(CheckStatementContext.class); + } + public CheckStatementContext checkStatement(int i) { + return getRuleContext(CheckStatementContext.class,i); + } + public CheckStatementBlockContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_checkStatementBlock; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterCheckStatementBlock(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitCheckStatementBlock(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitCheckStatementBlock(this); + else return visitor.visitChildren(this); + } + } + + public final CheckStatementBlockContext checkStatementBlock() throws RecognitionException { + CheckStatementBlockContext _localctx = new CheckStatementBlockContext(_ctx, getState()); + enterRule(_localctx, 80, RULE_checkStatementBlock); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(448); + match(OPEN_CURLY); + setState(452); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==CHECK) { + { + { + setState(449); + checkStatement(); + } + } + setState(454); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(455); + match(CLOSE_CURLY); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class IdArrContext extends ParserRuleContext { + public TerminalNode OPEN_BRACKET() { return getToken(PMLParser.OPEN_BRACKET, 0); } + public TerminalNode CLOSE_BRACKET() { return getToken(PMLParser.CLOSE_BRACKET, 0); } + public List ID() { return getTokens(PMLParser.ID); } + public TerminalNode ID(int i) { + return getToken(PMLParser.ID, i); + } + public List COMMA() { return getTokens(PMLParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(PMLParser.COMMA, i); + } + public IdArrContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_idArr; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterIdArr(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitIdArr(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitIdArr(this); + else return visitor.visitChildren(this); + } + } + + public final IdArrContext idArr() throws RecognitionException { + IdArrContext _localctx = new IdArrContext(_ctx, getState()); + enterRule(_localctx, 82, RULE_idArr); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(457); + match(OPEN_BRACKET); + setState(466); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ID) { + { + setState(458); + match(ID); + setState(463); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(459); + match(COMMA); + setState(460); + match(ID); + } + } + setState(465); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + + setState(468); + match(CLOSE_BRACKET); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class FunctionInvokeStatementContext extends ParserRuleContext { + public FunctionInvokeContext functionInvoke() { + return getRuleContext(FunctionInvokeContext.class,0); + } + public FunctionInvokeStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_functionInvokeStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterFunctionInvokeStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitFunctionInvokeStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitFunctionInvokeStatement(this); + else return visitor.visitChildren(this); + } + } + + public final FunctionInvokeStatementContext functionInvokeStatement() throws RecognitionException { + FunctionInvokeStatementContext _localctx = new FunctionInvokeStatementContext(_ctx, getState()); + enterRule(_localctx, 84, RULE_functionInvokeStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(470); + functionInvoke(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ForeachStatementContext extends ParserRuleContext { + public Token key; + public Token value; + public TerminalNode FOREACH() { return getToken(PMLParser.FOREACH, 0); } + public TerminalNode IN() { return getToken(PMLParser.IN, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public StatementBlockContext statementBlock() { + return getRuleContext(StatementBlockContext.class,0); + } + public List ID() { return getTokens(PMLParser.ID); } + public TerminalNode ID(int i) { + return getToken(PMLParser.ID, i); + } + public TerminalNode COMMA() { return getToken(PMLParser.COMMA, 0); } + public ForeachStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_foreachStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterForeachStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitForeachStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitForeachStatement(this); + else return visitor.visitChildren(this); + } + } + + public final ForeachStatementContext foreachStatement() throws RecognitionException { + ForeachStatementContext _localctx = new ForeachStatementContext(_ctx, getState()); + enterRule(_localctx, 86, RULE_foreachStatement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(472); + match(FOREACH); + setState(473); + ((ForeachStatementContext)_localctx).key = match(ID); + setState(476); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==COMMA) { + { + setState(474); + match(COMMA); + setState(475); + ((ForeachStatementContext)_localctx).value = match(ID); + } + } + + setState(478); + match(IN); + setState(479); + expression(0); + setState(480); + statementBlock(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class BreakStatementContext extends ParserRuleContext { + public TerminalNode BREAK() { return getToken(PMLParser.BREAK, 0); } + public BreakStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_breakStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterBreakStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitBreakStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitBreakStatement(this); + else return visitor.visitChildren(this); + } + } + + public final BreakStatementContext breakStatement() throws RecognitionException { + BreakStatementContext _localctx = new BreakStatementContext(_ctx, getState()); + enterRule(_localctx, 88, RULE_breakStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(482); + match(BREAK); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ContinueStatementContext extends ParserRuleContext { + public TerminalNode CONTINUE() { return getToken(PMLParser.CONTINUE, 0); } + public ContinueStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_continueStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterContinueStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitContinueStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitContinueStatement(this); + else return visitor.visitChildren(this); + } + } + + public final ContinueStatementContext continueStatement() throws RecognitionException { + ContinueStatementContext _localctx = new ContinueStatementContext(_ctx, getState()); + enterRule(_localctx, 90, RULE_continueStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(484); + match(CONTINUE); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class IfStatementContext extends ParserRuleContext { + public ExpressionContext condition; + public TerminalNode IF() { return getToken(PMLParser.IF, 0); } + public StatementBlockContext statementBlock() { + return getRuleContext(StatementBlockContext.class,0); + } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public List elseIfStatement() { + return getRuleContexts(ElseIfStatementContext.class); + } + public ElseIfStatementContext elseIfStatement(int i) { + return getRuleContext(ElseIfStatementContext.class,i); + } + public ElseStatementContext elseStatement() { + return getRuleContext(ElseStatementContext.class,0); + } + public IfStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_ifStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterIfStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitIfStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitIfStatement(this); + else return visitor.visitChildren(this); + } + } + + public final IfStatementContext ifStatement() throws RecognitionException { + IfStatementContext _localctx = new IfStatementContext(_ctx, getState()); + enterRule(_localctx, 92, RULE_ifStatement); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(486); + match(IF); + setState(487); + ((IfStatementContext)_localctx).condition = expression(0); + setState(488); + statementBlock(); + setState(492); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,34,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(489); + elseIfStatement(); + } + } + } + setState(494); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,34,_ctx); + } + setState(496); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ELSE) { + { + setState(495); + elseStatement(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ElseIfStatementContext extends ParserRuleContext { + public ExpressionContext condition; + public TerminalNode ELSE() { return getToken(PMLParser.ELSE, 0); } + public TerminalNode IF() { return getToken(PMLParser.IF, 0); } + public StatementBlockContext statementBlock() { + return getRuleContext(StatementBlockContext.class,0); + } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public ElseIfStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_elseIfStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterElseIfStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitElseIfStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitElseIfStatement(this); + else return visitor.visitChildren(this); + } + } + + public final ElseIfStatementContext elseIfStatement() throws RecognitionException { + ElseIfStatementContext _localctx = new ElseIfStatementContext(_ctx, getState()); + enterRule(_localctx, 94, RULE_elseIfStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(498); + match(ELSE); + setState(499); + match(IF); + setState(500); + ((ElseIfStatementContext)_localctx).condition = expression(0); + setState(501); + statementBlock(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ElseStatementContext extends ParserRuleContext { + public TerminalNode ELSE() { return getToken(PMLParser.ELSE, 0); } + public StatementBlockContext statementBlock() { + return getRuleContext(StatementBlockContext.class,0); + } + public ElseStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_elseStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterElseStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitElseStatement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitElseStatement(this); + else return visitor.visitChildren(this); + } + } + + public final ElseStatementContext elseStatement() throws RecognitionException { + ElseStatementContext _localctx = new ElseStatementContext(_ctx, getState()); + enterRule(_localctx, 96, RULE_elseStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(503); + match(ELSE); + setState(504); + statementBlock(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class VariableTypeContext extends ParserRuleContext { + public VariableTypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_variableType; } + + public VariableTypeContext() { } + public void copyFrom(VariableTypeContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class MapVarTypeContext extends VariableTypeContext { + public MapTypeContext mapType() { + return getRuleContext(MapTypeContext.class,0); + } + public MapVarTypeContext(VariableTypeContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterMapVarType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitMapVarType(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitMapVarType(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class StringTypeContext extends VariableTypeContext { + public TerminalNode STRING_TYPE() { return getToken(PMLParser.STRING_TYPE, 0); } + public StringTypeContext(VariableTypeContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterStringType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitStringType(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitStringType(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class ArrayVarTypeContext extends VariableTypeContext { + public ArrayTypeContext arrayType() { + return getRuleContext(ArrayTypeContext.class,0); + } + public ArrayVarTypeContext(VariableTypeContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterArrayVarType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitArrayVarType(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitArrayVarType(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class BooleanTypeContext extends VariableTypeContext { + public TerminalNode BOOL_TYPE() { return getToken(PMLParser.BOOL_TYPE, 0); } + public BooleanTypeContext(VariableTypeContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterBooleanType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitBooleanType(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitBooleanType(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class AnyTypeContext extends VariableTypeContext { + public TerminalNode ANY() { return getToken(PMLParser.ANY, 0); } + public AnyTypeContext(VariableTypeContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterAnyType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitAnyType(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitAnyType(this); + else return visitor.visitChildren(this); + } + } + + public final VariableTypeContext variableType() throws RecognitionException { + VariableTypeContext _localctx = new VariableTypeContext(_ctx, getState()); + enterRule(_localctx, 98, RULE_variableType); + try { + setState(511); + _errHandler.sync(this); + switch (_input.LA(1)) { + case STRING_TYPE: + _localctx = new StringTypeContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(506); + match(STRING_TYPE); + } + break; + case BOOL_TYPE: + _localctx = new BooleanTypeContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(507); + match(BOOL_TYPE); + } + break; + case OPEN_BRACKET: + _localctx = new ArrayVarTypeContext(_localctx); + enterOuterAlt(_localctx, 3); + { + setState(508); + arrayType(); + } + break; + case MAP: + _localctx = new MapVarTypeContext(_localctx); + enterOuterAlt(_localctx, 4); + { + setState(509); + mapType(); + } + break; + case ANY: + _localctx = new AnyTypeContext(_localctx); + enterOuterAlt(_localctx, 5); + { + setState(510); + match(ANY); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class MapTypeContext extends ParserRuleContext { + public VariableTypeContext keyType; + public VariableTypeContext valueType; + public TerminalNode MAP() { return getToken(PMLParser.MAP, 0); } + public TerminalNode OPEN_BRACKET() { return getToken(PMLParser.OPEN_BRACKET, 0); } + public TerminalNode CLOSE_BRACKET() { return getToken(PMLParser.CLOSE_BRACKET, 0); } + public List variableType() { + return getRuleContexts(VariableTypeContext.class); + } + public VariableTypeContext variableType(int i) { + return getRuleContext(VariableTypeContext.class,i); + } + public MapTypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_mapType; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterMapType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitMapType(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitMapType(this); + else return visitor.visitChildren(this); + } + } + + public final MapTypeContext mapType() throws RecognitionException { + MapTypeContext _localctx = new MapTypeContext(_ctx, getState()); + enterRule(_localctx, 100, RULE_mapType); + try { + enterOuterAlt(_localctx, 1); + { + setState(513); + match(MAP); + setState(514); + match(OPEN_BRACKET); + setState(515); + ((MapTypeContext)_localctx).keyType = variableType(); + setState(516); + match(CLOSE_BRACKET); + setState(517); + ((MapTypeContext)_localctx).valueType = variableType(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ArrayTypeContext extends ParserRuleContext { + public TerminalNode OPEN_BRACKET() { return getToken(PMLParser.OPEN_BRACKET, 0); } + public TerminalNode CLOSE_BRACKET() { return getToken(PMLParser.CLOSE_BRACKET, 0); } + public VariableTypeContext variableType() { + return getRuleContext(VariableTypeContext.class,0); + } + public ArrayTypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_arrayType; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterArrayType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitArrayType(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitArrayType(this); + else return visitor.visitChildren(this); + } + } + + public final ArrayTypeContext arrayType() throws RecognitionException { + ArrayTypeContext _localctx = new ArrayTypeContext(_ctx, getState()); + enterRule(_localctx, 102, RULE_arrayType); + try { + enterOuterAlt(_localctx, 1); + { + setState(519); + match(OPEN_BRACKET); + setState(520); + match(CLOSE_BRACKET); + setState(521); + variableType(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ExpressionContext extends ParserRuleContext { + public ExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_expression; } + + public ExpressionContext() { } + public void copyFrom(ExpressionContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class NegateExpressionContext extends ExpressionContext { + public TerminalNode EXCLAMATION() { return getToken(PMLParser.EXCLAMATION, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public NegateExpressionContext(ExpressionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterNegateExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitNegateExpression(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitNegateExpression(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class LogicalExpressionContext extends ExpressionContext { + public ExpressionContext left; + public ExpressionContext right; + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public TerminalNode LOGICAL_AND() { return getToken(PMLParser.LOGICAL_AND, 0); } + public TerminalNode LOGICAL_OR() { return getToken(PMLParser.LOGICAL_OR, 0); } + public LogicalExpressionContext(ExpressionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterLogicalExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitLogicalExpression(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitLogicalExpression(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class PlusExpressionContext extends ExpressionContext { + public ExpressionContext left; + public ExpressionContext right; + public TerminalNode PLUS() { return getToken(PMLParser.PLUS, 0); } + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public PlusExpressionContext(ExpressionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterPlusExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitPlusExpression(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitPlusExpression(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class FunctionInvokeExpressionContext extends ExpressionContext { + public FunctionInvokeContext functionInvoke() { + return getRuleContext(FunctionInvokeContext.class,0); + } + public FunctionInvokeExpressionContext(ExpressionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterFunctionInvokeExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitFunctionInvokeExpression(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitFunctionInvokeExpression(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class VariableReferenceExpressionContext extends ExpressionContext { + public VariableReferenceContext variableReference() { + return getRuleContext(VariableReferenceContext.class,0); + } + public VariableReferenceExpressionContext(ExpressionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterVariableReferenceExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitVariableReferenceExpression(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitVariableReferenceExpression(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class LiteralExpressionContext extends ExpressionContext { + public LiteralContext literal() { + return getRuleContext(LiteralContext.class,0); + } + public LiteralExpressionContext(ExpressionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterLiteralExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitLiteralExpression(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitLiteralExpression(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class ParenExpressionContext extends ExpressionContext { + public TerminalNode OPEN_PAREN() { return getToken(PMLParser.OPEN_PAREN, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode CLOSE_PAREN() { return getToken(PMLParser.CLOSE_PAREN, 0); } + public ParenExpressionContext(ExpressionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterParenExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitParenExpression(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitParenExpression(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class EqualsExpressionContext extends ExpressionContext { + public ExpressionContext left; + public ExpressionContext right; + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public TerminalNode EQUALS() { return getToken(PMLParser.EQUALS, 0); } + public TerminalNode NOT_EQUALS() { return getToken(PMLParser.NOT_EQUALS, 0); } + public EqualsExpressionContext(ExpressionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterEqualsExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitEqualsExpression(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitEqualsExpression(this); + else return visitor.visitChildren(this); + } + } + + public final ExpressionContext expression() throws RecognitionException { + return expression(0); + } + + private ExpressionContext expression(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + ExpressionContext _localctx = new ExpressionContext(_ctx, _parentState); + ExpressionContext _prevctx = _localctx; + int _startState = 104; + enterRecursionRule(_localctx, 104, RULE_expression, _p); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(533); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,37,_ctx) ) { + case 1: + { + _localctx = new FunctionInvokeExpressionContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + + setState(524); + functionInvoke(); + } + break; + case 2: + { + _localctx = new VariableReferenceExpressionContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(525); + variableReference(0); + } + break; + case 3: + { + _localctx = new LiteralExpressionContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(526); + literal(); + } + break; + case 4: + { + _localctx = new NegateExpressionContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(527); + match(EXCLAMATION); + setState(528); + expression(5); + } + break; + case 5: + { + _localctx = new ParenExpressionContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(529); + match(OPEN_PAREN); + setState(530); + expression(0); + setState(531); + match(CLOSE_PAREN); + } + break; + } + _ctx.stop = _input.LT(-1); + setState(546); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,39,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + setState(544); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,38,_ctx) ) { + case 1: + { + _localctx = new PlusExpressionContext(new ExpressionContext(_parentctx, _parentState)); + ((PlusExpressionContext)_localctx).left = _prevctx; + pushNewRecursionContext(_localctx, _startState, RULE_expression); + setState(535); + if (!(precpred(_ctx, 3))) throw new FailedPredicateException(this, "precpred(_ctx, 3)"); + setState(536); + match(PLUS); + setState(537); + ((PlusExpressionContext)_localctx).right = expression(4); + } + break; + case 2: + { + _localctx = new EqualsExpressionContext(new ExpressionContext(_parentctx, _parentState)); + ((EqualsExpressionContext)_localctx).left = _prevctx; + pushNewRecursionContext(_localctx, _startState, RULE_expression); + setState(538); + if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); + setState(539); + _la = _input.LA(1); + if ( !(_la==EQUALS || _la==NOT_EQUALS) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(540); + ((EqualsExpressionContext)_localctx).right = expression(3); + } + break; + case 3: + { + _localctx = new LogicalExpressionContext(new ExpressionContext(_parentctx, _parentState)); + ((LogicalExpressionContext)_localctx).left = _prevctx; + pushNewRecursionContext(_localctx, _startState, RULE_expression); + setState(541); + if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); + setState(542); + _la = _input.LA(1); + if ( !(_la==LOGICAL_OR || _la==LOGICAL_AND) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(543); + ((LogicalExpressionContext)_localctx).right = expression(2); + } + break; + } + } + } + setState(548); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,39,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ExpressionListContext extends ParserRuleContext { + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public List COMMA() { return getTokens(PMLParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(PMLParser.COMMA, i); + } + public ExpressionListContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_expressionList; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterExpressionList(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitExpressionList(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitExpressionList(this); + else return visitor.visitChildren(this); + } + } + + public final ExpressionListContext expressionList() throws RecognitionException { + ExpressionListContext _localctx = new ExpressionListContext(_ctx, getState()); + enterRule(_localctx, 106, RULE_expressionList); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(549); + expression(0); + setState(554); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(550); + match(COMMA); + setState(551); + expression(0); + } + } + setState(556); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class LiteralContext extends ParserRuleContext { + public LiteralContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_literal; } + + public LiteralContext() { } + public void copyFrom(LiteralContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class MapLiteralContext extends LiteralContext { + public MapLitContext mapLit() { + return getRuleContext(MapLitContext.class,0); + } + public MapLiteralContext(LiteralContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterMapLiteral(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitMapLiteral(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitMapLiteral(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class StringLiteralContext extends LiteralContext { + public StringLitContext stringLit() { + return getRuleContext(StringLitContext.class,0); + } + public StringLiteralContext(LiteralContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterStringLiteral(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitStringLiteral(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitStringLiteral(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class BoolLiteralContext extends LiteralContext { + public BoolLitContext boolLit() { + return getRuleContext(BoolLitContext.class,0); + } + public BoolLiteralContext(LiteralContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterBoolLiteral(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitBoolLiteral(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitBoolLiteral(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class ArrayLiteralContext extends LiteralContext { + public ArrayLitContext arrayLit() { + return getRuleContext(ArrayLitContext.class,0); + } + public ArrayLiteralContext(LiteralContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterArrayLiteral(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitArrayLiteral(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitArrayLiteral(this); + else return visitor.visitChildren(this); + } + } + + public final LiteralContext literal() throws RecognitionException { + LiteralContext _localctx = new LiteralContext(_ctx, getState()); + enterRule(_localctx, 108, RULE_literal); + try { + setState(561); + _errHandler.sync(this); + switch (_input.LA(1)) { + case DOUBLE_QUOTE_STRING: + _localctx = new StringLiteralContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(557); + stringLit(); + } + break; + case TRUE: + case FALSE: + _localctx = new BoolLiteralContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(558); + boolLit(); + } + break; + case OPEN_BRACKET: + _localctx = new ArrayLiteralContext(_localctx); + enterOuterAlt(_localctx, 3); + { + setState(559); + arrayLit(); + } + break; + case OPEN_CURLY: + _localctx = new MapLiteralContext(_localctx); + enterOuterAlt(_localctx, 4); + { + setState(560); + mapLit(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class StringLitContext extends ParserRuleContext { + public TerminalNode DOUBLE_QUOTE_STRING() { return getToken(PMLParser.DOUBLE_QUOTE_STRING, 0); } + public StringLitContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_stringLit; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterStringLit(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitStringLit(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitStringLit(this); + else return visitor.visitChildren(this); + } + } + + public final StringLitContext stringLit() throws RecognitionException { + StringLitContext _localctx = new StringLitContext(_ctx, getState()); + enterRule(_localctx, 110, RULE_stringLit); + try { + enterOuterAlt(_localctx, 1); + { + setState(563); + match(DOUBLE_QUOTE_STRING); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class BoolLitContext extends ParserRuleContext { + public TerminalNode TRUE() { return getToken(PMLParser.TRUE, 0); } + public TerminalNode FALSE() { return getToken(PMLParser.FALSE, 0); } + public BoolLitContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_boolLit; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterBoolLit(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitBoolLit(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitBoolLit(this); + else return visitor.visitChildren(this); + } + } + + public final BoolLitContext boolLit() throws RecognitionException { + BoolLitContext _localctx = new BoolLitContext(_ctx, getState()); + enterRule(_localctx, 112, RULE_boolLit); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(565); + _la = _input.LA(1); + if ( !(_la==TRUE || _la==FALSE) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ArrayLitContext extends ParserRuleContext { + public TerminalNode OPEN_BRACKET() { return getToken(PMLParser.OPEN_BRACKET, 0); } + public TerminalNode CLOSE_BRACKET() { return getToken(PMLParser.CLOSE_BRACKET, 0); } + public ExpressionListContext expressionList() { + return getRuleContext(ExpressionListContext.class,0); + } + public ArrayLitContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_arrayLit; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterArrayLit(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitArrayLit(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitArrayLit(this); + else return visitor.visitChildren(this); + } + } + + public final ArrayLitContext arrayLit() throws RecognitionException { + ArrayLitContext _localctx = new ArrayLitContext(_ctx, getState()); + enterRule(_localctx, 114, RULE_arrayLit); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(567); + match(OPEN_BRACKET); + setState(569); + _errHandler.sync(this); + _la = _input.LA(1); + if (((((_la - 62)) & ~0x3f) == 0 && ((1L << (_la - 62)) & 2621615L) != 0)) { + { + setState(568); + expressionList(); + } + } + + setState(571); + match(CLOSE_BRACKET); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class StringArrayLitContext extends ParserRuleContext { + public TerminalNode OPEN_BRACKET() { return getToken(PMLParser.OPEN_BRACKET, 0); } + public TerminalNode CLOSE_BRACKET() { return getToken(PMLParser.CLOSE_BRACKET, 0); } + public List stringLit() { + return getRuleContexts(StringLitContext.class); + } + public StringLitContext stringLit(int i) { + return getRuleContext(StringLitContext.class,i); + } + public List COMMA() { return getTokens(PMLParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(PMLParser.COMMA, i); + } + public StringArrayLitContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_stringArrayLit; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterStringArrayLit(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitStringArrayLit(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitStringArrayLit(this); + else return visitor.visitChildren(this); + } + } + + public final StringArrayLitContext stringArrayLit() throws RecognitionException { + StringArrayLitContext _localctx = new StringArrayLitContext(_ctx, getState()); + enterRule(_localctx, 116, RULE_stringArrayLit); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(573); + match(OPEN_BRACKET); + setState(582); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==DOUBLE_QUOTE_STRING) { + { + setState(574); + stringLit(); + setState(579); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(575); + match(COMMA); + setState(576); + stringLit(); + } + } + setState(581); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + + setState(584); + match(CLOSE_BRACKET); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class MapLitContext extends ParserRuleContext { + public TerminalNode OPEN_CURLY() { return getToken(PMLParser.OPEN_CURLY, 0); } + public TerminalNode CLOSE_CURLY() { return getToken(PMLParser.CLOSE_CURLY, 0); } + public List element() { + return getRuleContexts(ElementContext.class); + } + public ElementContext element(int i) { + return getRuleContext(ElementContext.class,i); + } + public List COMMA() { return getTokens(PMLParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(PMLParser.COMMA, i); + } + public MapLitContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_mapLit; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterMapLit(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitMapLit(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitMapLit(this); + else return visitor.visitChildren(this); + } + } + + public final MapLitContext mapLit() throws RecognitionException { + MapLitContext _localctx = new MapLitContext(_ctx, getState()); + enterRule(_localctx, 118, RULE_mapLit); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(586); + match(OPEN_CURLY); + setState(595); + _errHandler.sync(this); + _la = _input.LA(1); + if (((((_la - 62)) & ~0x3f) == 0 && ((1L << (_la - 62)) & 2621615L) != 0)) { + { + setState(587); + element(); + setState(592); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==COMMA) { + { + { + setState(588); + match(COMMA); + setState(589); + element(); + } + } + setState(594); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + + setState(597); + match(CLOSE_CURLY); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ElementContext extends ParserRuleContext { + public ExpressionContext key; + public ExpressionContext value; + public TerminalNode COLON() { return getToken(PMLParser.COLON, 0); } + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public ElementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_element; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterElement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitElement(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitElement(this); + else return visitor.visitChildren(this); + } + } + + public final ElementContext element() throws RecognitionException { + ElementContext _localctx = new ElementContext(_ctx, getState()); + enterRule(_localctx, 120, RULE_element); + try { + enterOuterAlt(_localctx, 1); + { + setState(599); + ((ElementContext)_localctx).key = expression(0); + setState(600); + match(COLON); + setState(601); + ((ElementContext)_localctx).value = expression(0); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class VariableReferenceContext extends ParserRuleContext { + public VariableReferenceContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_variableReference; } + + public VariableReferenceContext() { } + public void copyFrom(VariableReferenceContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class ReferenceByIndexContext extends VariableReferenceContext { + public VariableReferenceContext variableReference() { + return getRuleContext(VariableReferenceContext.class,0); + } + public IndexContext index() { + return getRuleContext(IndexContext.class,0); + } + public ReferenceByIndexContext(VariableReferenceContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterReferenceByIndex(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitReferenceByIndex(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitReferenceByIndex(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class ReferenceByIDContext extends VariableReferenceContext { + public TerminalNode ID() { return getToken(PMLParser.ID, 0); } + public ReferenceByIDContext(VariableReferenceContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterReferenceByID(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitReferenceByID(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitReferenceByID(this); + else return visitor.visitChildren(this); + } + } + + public final VariableReferenceContext variableReference() throws RecognitionException { + return variableReference(0); + } + + private VariableReferenceContext variableReference(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + VariableReferenceContext _localctx = new VariableReferenceContext(_ctx, _parentState); + VariableReferenceContext _prevctx = _localctx; + int _startState = 122; + enterRecursionRule(_localctx, 122, RULE_variableReference, _p); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + { + _localctx = new ReferenceByIDContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + + setState(604); + match(ID); + } + _ctx.stop = _input.LT(-1); + setState(610); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,47,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + { + _localctx = new ReferenceByIndexContext(new VariableReferenceContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_variableReference); + setState(606); + if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); + setState(607); + index(); + } + } + } + setState(612); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,47,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class IndexContext extends ParserRuleContext { + public IndexContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_index; } + + public IndexContext() { } + public void copyFrom(IndexContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class DotIndexContext extends IndexContext { + public IdContext key; + public TerminalNode DOT() { return getToken(PMLParser.DOT, 0); } + public IdContext id() { + return getRuleContext(IdContext.class,0); + } + public DotIndexContext(IndexContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterDotIndex(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitDotIndex(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitDotIndex(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class BracketIndexContext extends IndexContext { + public ExpressionContext key; + public TerminalNode OPEN_BRACKET() { return getToken(PMLParser.OPEN_BRACKET, 0); } + public TerminalNode CLOSE_BRACKET() { return getToken(PMLParser.CLOSE_BRACKET, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public BracketIndexContext(IndexContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterBracketIndex(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitBracketIndex(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitBracketIndex(this); + else return visitor.visitChildren(this); + } + } + + public final IndexContext index() throws RecognitionException { + IndexContext _localctx = new IndexContext(_ctx, getState()); + enterRule(_localctx, 124, RULE_index); + try { + setState(619); + _errHandler.sync(this); + switch (_input.LA(1)) { + case OPEN_BRACKET: + _localctx = new BracketIndexContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(613); + match(OPEN_BRACKET); + setState(614); + ((BracketIndexContext)_localctx).key = expression(0); + setState(615); + match(CLOSE_BRACKET); + } + break; + case DOT: + _localctx = new DotIndexContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(617); + match(DOT); + setState(618); + ((DotIndexContext)_localctx).key = id(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class IdContext extends ParserRuleContext { + public TerminalNode ID() { return getToken(PMLParser.ID, 0); } + public IdContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_id; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterId(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitId(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitId(this); + else return visitor.visitChildren(this); + } + } + + public final IdContext id() throws RecognitionException { + IdContext _localctx = new IdContext(_ctx, getState()); + enterRule(_localctx, 126, RULE_id); + try { + enterOuterAlt(_localctx, 1); + { + setState(621); + match(ID); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class FunctionInvokeContext extends ParserRuleContext { + public TerminalNode ID() { return getToken(PMLParser.ID, 0); } + public FunctionInvokeArgsContext functionInvokeArgs() { + return getRuleContext(FunctionInvokeArgsContext.class,0); + } + public FunctionInvokeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_functionInvoke; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterFunctionInvoke(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitFunctionInvoke(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitFunctionInvoke(this); + else return visitor.visitChildren(this); + } + } + + public final FunctionInvokeContext functionInvoke() throws RecognitionException { + FunctionInvokeContext _localctx = new FunctionInvokeContext(_ctx, getState()); + enterRule(_localctx, 128, RULE_functionInvoke); + try { + enterOuterAlt(_localctx, 1); + { + setState(623); + match(ID); + setState(624); + functionInvokeArgs(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class FunctionInvokeArgsContext extends ParserRuleContext { + public TerminalNode OPEN_PAREN() { return getToken(PMLParser.OPEN_PAREN, 0); } + public TerminalNode CLOSE_PAREN() { return getToken(PMLParser.CLOSE_PAREN, 0); } + public ExpressionListContext expressionList() { + return getRuleContext(ExpressionListContext.class,0); + } + public FunctionInvokeArgsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_functionInvokeArgs; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).enterFunctionInvokeArgs(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof PMLParserListener ) ((PMLParserListener)listener).exitFunctionInvokeArgs(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof PMLParserVisitor ) return ((PMLParserVisitor)visitor).visitFunctionInvokeArgs(this); + else return visitor.visitChildren(this); + } + } + + public final FunctionInvokeArgsContext functionInvokeArgs() throws RecognitionException { + FunctionInvokeArgsContext _localctx = new FunctionInvokeArgsContext(_ctx, getState()); + enterRule(_localctx, 130, RULE_functionInvokeArgs); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(626); + match(OPEN_PAREN); + setState(628); + _errHandler.sync(this); + _la = _input.LA(1); + if (((((_la - 62)) & ~0x3f) == 0 && ((1L << (_la - 62)) & 2621615L) != 0)) { + { + setState(627); + expressionList(); + } + } + + setState(630); + match(CLOSE_PAREN); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) { + switch (ruleIndex) { + case 9: + return subjectPatternExpression_sempred((SubjectPatternExpressionContext)_localctx, predIndex); + case 15: + return operandPatternExpression_sempred((OperandPatternExpressionContext)_localctx, predIndex); + case 52: + return expression_sempred((ExpressionContext)_localctx, predIndex); + case 61: + return variableReference_sempred((VariableReferenceContext)_localctx, predIndex); + } + return true; + } + private boolean subjectPatternExpression_sempred(SubjectPatternExpressionContext _localctx, int predIndex) { + switch (predIndex) { + case 0: + return precpred(_ctx, 1); + } + return true; + } + private boolean operandPatternExpression_sempred(OperandPatternExpressionContext _localctx, int predIndex) { + switch (predIndex) { + case 1: + return precpred(_ctx, 1); + } + return true; + } + private boolean expression_sempred(ExpressionContext _localctx, int predIndex) { + switch (predIndex) { + case 2: + return precpred(_ctx, 3); + case 3: + return precpred(_ctx, 2); + case 4: + return precpred(_ctx, 1); + } + return true; + } + private boolean variableReference_sempred(VariableReferenceContext _localctx, int predIndex) { + switch (predIndex) { + case 5: + return precpred(_ctx, 1); + } + return true; + } + + public static final String _serializedATN = + "\u0004\u0001V\u0279\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+ + "\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004\u0002"+ + "\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007\u0007\u0007\u0002"+ + "\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b\u0007\u000b\u0002"+ + "\f\u0007\f\u0002\r\u0007\r\u0002\u000e\u0007\u000e\u0002\u000f\u0007\u000f"+ + "\u0002\u0010\u0007\u0010\u0002\u0011\u0007\u0011\u0002\u0012\u0007\u0012"+ + "\u0002\u0013\u0007\u0013\u0002\u0014\u0007\u0014\u0002\u0015\u0007\u0015"+ + "\u0002\u0016\u0007\u0016\u0002\u0017\u0007\u0017\u0002\u0018\u0007\u0018"+ + "\u0002\u0019\u0007\u0019\u0002\u001a\u0007\u001a\u0002\u001b\u0007\u001b"+ + "\u0002\u001c\u0007\u001c\u0002\u001d\u0007\u001d\u0002\u001e\u0007\u001e"+ + "\u0002\u001f\u0007\u001f\u0002 \u0007 \u0002!\u0007!\u0002\"\u0007\"\u0002"+ + "#\u0007#\u0002$\u0007$\u0002%\u0007%\u0002&\u0007&\u0002\'\u0007\'\u0002"+ + "(\u0007(\u0002)\u0007)\u0002*\u0007*\u0002+\u0007+\u0002,\u0007,\u0002"+ + "-\u0007-\u0002.\u0007.\u0002/\u0007/\u00020\u00070\u00021\u00071\u0002"+ + "2\u00072\u00023\u00073\u00024\u00074\u00025\u00075\u00026\u00076\u0002"+ + "7\u00077\u00028\u00078\u00029\u00079\u0002:\u0007:\u0002;\u0007;\u0002"+ + "<\u0007<\u0002=\u0007=\u0002>\u0007>\u0002?\u0007?\u0002@\u0007@\u0002"+ + "A\u0007A\u0001\u0000\u0005\u0000\u0086\b\u0000\n\u0000\f\u0000\u0089\t"+ + "\u0000\u0001\u0000\u0001\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003"+ + "\u0001\u00a2\b\u0001\u0001\u0002\u0001\u0002\u0005\u0002\u00a6\b\u0002"+ + "\n\u0002\f\u0002\u00a9\t\u0002\u0001\u0002\u0001\u0002\u0001\u0003\u0001"+ + "\u0003\u0001\u0003\u0001\u0003\u0001\u0004\u0001\u0004\u0001\u0004\u0001"+ + "\u0004\u0001\u0004\u0001\u0004\u0001\u0005\u0001\u0005\u0001\u0006\u0001"+ + "\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0005\u0006\u00be\b\u0006\n"+ + "\u0006\f\u0006\u00c1\t\u0006\u0001\u0006\u0001\u0006\u0001\u0007\u0001"+ + "\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001"+ + "\u0007\u0001\u0007\u0003\u0007\u00ce\b\u0007\u0001\u0007\u0001\u0007\u0001"+ + "\b\u0001\b\u0001\b\u0001\b\u0003\b\u00d6\b\b\u0001\t\u0001\t\u0001\t\u0001"+ + "\t\u0001\t\u0001\t\u0001\t\u0001\t\u0003\t\u00e0\b\t\u0001\t\u0001\t\u0001"+ + "\t\u0005\t\u00e5\b\t\n\t\f\t\u00e8\t\t\u0001\n\u0001\n\u0001\n\u0001\n"+ + "\u0001\n\u0003\n\u00ef\b\n\u0001\u000b\u0001\u000b\u0001\u000b\u0003\u000b"+ + "\u00f4\b\u000b\u0001\f\u0001\f\u0001\f\u0001\f\u0005\f\u00fa\b\f\n\f\f"+ + "\f\u00fd\t\f\u0003\f\u00ff\b\f\u0001\f\u0001\f\u0001\r\u0001\r\u0001\r"+ + "\u0001\r\u0003\r\u0107\b\r\u0001\u000e\u0001\u000e\u0001\u000e\u0001\u000e"+ + "\u0005\u000e\u010d\b\u000e\n\u000e\f\u000e\u0110\t\u000e\u0001\u000e\u0001"+ + "\u000e\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u000f\u0001"+ + "\u000f\u0001\u000f\u0001\u000f\u0003\u000f\u011c\b\u000f\u0001\u000f\u0001"+ + "\u000f\u0001\u000f\u0005\u000f\u0121\b\u000f\n\u000f\f\u000f\u0124\t\u000f"+ + "\u0001\u0010\u0001\u0010\u0001\u0010\u0001\u0010\u0003\u0010\u012a\b\u0010"+ + "\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0011"+ + "\u0001\u0012\u0001\u0012\u0005\u0012\u0134\b\u0012\n\u0012\f\u0012\u0137"+ + "\t\u0012\u0001\u0012\u0001\u0012\u0001\u0013\u0001\u0013\u0001\u0013\u0003"+ + "\u0013\u013e\b\u0013\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001"+ + "\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0014\u0001"+ + "\u0014\u0001\u0014\u0001\u0014\u0001\u0015\u0001\u0015\u0001\u0015\u0001"+ + "\u0015\u0001\u0015\u0001\u0015\u0001\u0016\u0001\u0016\u0001\u0016\u0001"+ + "\u0016\u0001\u0016\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0017\u0001"+ + "\u0017\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0001\u0018\u0001"+ + "\u0018\u0001\u0018\u0001\u0019\u0001\u0019\u0001\u0019\u0001\u0019\u0001"+ + "\u0019\u0001\u001a\u0001\u001a\u0001\u001a\u0001\u001b\u0001\u001b\u0001"+ + "\u001b\u0001\u001b\u0001\u001c\u0001\u001c\u0001\u001c\u0003\u001c\u0173"+ + "\b\u001c\u0001\u001d\u0001\u001d\u0001\u001e\u0001\u001e\u0001\u001e\u0001"+ + "\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001f\u0001\u001f\u0001"+ + "\u001f\u0001\u001f\u0005\u001f\u0182\b\u001f\n\u001f\f\u001f\u0185\t\u001f"+ + "\u0001\u001f\u0003\u001f\u0188\b\u001f\u0001\u001f\u0001\u001f\u0001\u001f"+ + "\u0003\u001f\u018d\b\u001f\u0001 \u0001 \u0001 \u0001 \u0001!\u0001!\u0003"+ + "!\u0195\b!\u0001!\u0001!\u0001!\u0001\"\u0001\"\u0001\"\u0001#\u0001#"+ + "\u0001#\u0001#\u0001#\u0001#\u0003#\u01a3\b#\u0001#\u0003#\u01a6\b#\u0001"+ + "$\u0001$\u0001$\u0005$\u01ab\b$\n$\f$\u01ae\t$\u0003$\u01b0\b$\u0001%"+ + "\u0003%\u01b3\b%\u0001%\u0001%\u0001%\u0001&\u0001&\u0003&\u01ba\b&\u0001"+ + "\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001(\u0001(\u0005(\u01c3\b(\n(\f"+ + "(\u01c6\t(\u0001(\u0001(\u0001)\u0001)\u0001)\u0001)\u0005)\u01ce\b)\n"+ + ")\f)\u01d1\t)\u0003)\u01d3\b)\u0001)\u0001)\u0001*\u0001*\u0001+\u0001"+ + "+\u0001+\u0001+\u0003+\u01dd\b+\u0001+\u0001+\u0001+\u0001+\u0001,\u0001"+ + ",\u0001-\u0001-\u0001.\u0001.\u0001.\u0001.\u0005.\u01eb\b.\n.\f.\u01ee"+ + "\t.\u0001.\u0003.\u01f1\b.\u0001/\u0001/\u0001/\u0001/\u0001/\u00010\u0001"+ + "0\u00010\u00011\u00011\u00011\u00011\u00011\u00031\u0200\b1\u00012\u0001"+ + "2\u00012\u00012\u00012\u00012\u00013\u00013\u00013\u00013\u00014\u0001"+ + "4\u00014\u00014\u00014\u00014\u00014\u00014\u00014\u00014\u00034\u0216"+ + "\b4\u00014\u00014\u00014\u00014\u00014\u00014\u00014\u00014\u00014\u0005"+ + "4\u0221\b4\n4\f4\u0224\t4\u00015\u00015\u00015\u00055\u0229\b5\n5\f5\u022c"+ + "\t5\u00016\u00016\u00016\u00016\u00036\u0232\b6\u00017\u00017\u00018\u0001"+ + "8\u00019\u00019\u00039\u023a\b9\u00019\u00019\u0001:\u0001:\u0001:\u0001"+ + ":\u0005:\u0242\b:\n:\f:\u0245\t:\u0003:\u0247\b:\u0001:\u0001:\u0001;"+ + "\u0001;\u0001;\u0001;\u0005;\u024f\b;\n;\f;\u0252\t;\u0003;\u0254\b;\u0001"+ + ";\u0001;\u0001<\u0001<\u0001<\u0001<\u0001=\u0001=\u0001=\u0001=\u0001"+ + "=\u0005=\u0261\b=\n=\f=\u0264\t=\u0001>\u0001>\u0001>\u0001>\u0001>\u0001"+ + ">\u0003>\u026c\b>\u0001?\u0001?\u0001@\u0001@\u0001@\u0001A\u0001A\u0003"+ + "A\u0275\bA\u0001A\u0001A\u0001A\u0000\u0004\u0012\u001ehzB\u0000\u0002"+ + "\u0004\u0006\b\n\f\u000e\u0010\u0012\u0014\u0016\u0018\u001a\u001c\u001e"+ + " \"$&(*,.02468:<>@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~\u0080\u0082\u0000\b"+ + "\u0002\u0000&\'*+\u0001\u0000MN\u0003\u0000\u0014\u0014\'\'++\u0001\u0000"+ + "\u0012\u0013\u0002\u0000%\'*+\u0002\u0000\u0001\u0001\u0004\u0004\u0001"+ + "\u0000OP\u0001\u0000>?\u028a\u0000\u0087\u0001\u0000\u0000\u0000\u0002"+ + "\u00a1\u0001\u0000\u0000\u0000\u0004\u00a3\u0001\u0000\u0000\u0000\u0006"+ + "\u00ac\u0001\u0000\u0000\u0000\b\u00b0\u0001\u0000\u0000\u0000\n\u00b6"+ + "\u0001\u0000\u0000\u0000\f\u00b8\u0001\u0000\u0000\u0000\u000e\u00c4\u0001"+ + "\u0000\u0000\u0000\u0010\u00d5\u0001\u0000\u0000\u0000\u0012\u00df\u0001"+ + "\u0000\u0000\u0000\u0014\u00ee\u0001\u0000\u0000\u0000\u0016\u00f3\u0001"+ + "\u0000\u0000\u0000\u0018\u00f5\u0001\u0000\u0000\u0000\u001a\u0102\u0001"+ + "\u0000\u0000\u0000\u001c\u0108\u0001\u0000\u0000\u0000\u001e\u011b\u0001"+ + "\u0000\u0000\u0000 \u0129\u0001\u0000\u0000\u0000\"\u012b\u0001\u0000"+ + "\u0000\u0000$\u0131\u0001\u0000\u0000\u0000&\u013d\u0001\u0000\u0000\u0000"+ + "(\u013f\u0001\u0000\u0000\u0000*\u014c\u0001\u0000\u0000\u0000,\u0152"+ + "\u0001\u0000\u0000\u0000.\u0157\u0001\u0000\u0000\u00000\u015c\u0001\u0000"+ + "\u0000\u00002\u0163\u0001\u0000\u0000\u00004\u0168\u0001\u0000\u0000\u0000"+ + "6\u016b\u0001\u0000\u0000\u00008\u0172\u0001\u0000\u0000\u0000:\u0174"+ + "\u0001\u0000\u0000\u0000<\u0176\u0001\u0000\u0000\u0000>\u018c\u0001\u0000"+ + "\u0000\u0000@\u018e\u0001\u0000\u0000\u0000B\u0192\u0001\u0000\u0000\u0000"+ + "D\u0199\u0001\u0000\u0000\u0000F\u019c\u0001\u0000\u0000\u0000H\u01af"+ + "\u0001\u0000\u0000\u0000J\u01b2\u0001\u0000\u0000\u0000L\u01b7\u0001\u0000"+ + "\u0000\u0000N\u01bb\u0001\u0000\u0000\u0000P\u01c0\u0001\u0000\u0000\u0000"+ + "R\u01c9\u0001\u0000\u0000\u0000T\u01d6\u0001\u0000\u0000\u0000V\u01d8"+ + "\u0001\u0000\u0000\u0000X\u01e2\u0001\u0000\u0000\u0000Z\u01e4\u0001\u0000"+ + "\u0000\u0000\\\u01e6\u0001\u0000\u0000\u0000^\u01f2\u0001\u0000\u0000"+ + "\u0000`\u01f7\u0001\u0000\u0000\u0000b\u01ff\u0001\u0000\u0000\u0000d"+ + "\u0201\u0001\u0000\u0000\u0000f\u0207\u0001\u0000\u0000\u0000h\u0215\u0001"+ + "\u0000\u0000\u0000j\u0225\u0001\u0000\u0000\u0000l\u0231\u0001\u0000\u0000"+ + "\u0000n\u0233\u0001\u0000\u0000\u0000p\u0235\u0001\u0000\u0000\u0000r"+ + "\u0237\u0001\u0000\u0000\u0000t\u023d\u0001\u0000\u0000\u0000v\u024a\u0001"+ + "\u0000\u0000\u0000x\u0257\u0001\u0000\u0000\u0000z\u025b\u0001\u0000\u0000"+ + "\u0000|\u026b\u0001\u0000\u0000\u0000~\u026d\u0001\u0000\u0000\u0000\u0080"+ + "\u026f\u0001\u0000\u0000\u0000\u0082\u0272\u0001\u0000\u0000\u0000\u0084"+ + "\u0086\u0003\u0002\u0001\u0000\u0085\u0084\u0001\u0000\u0000\u0000\u0086"+ + "\u0089\u0001\u0000\u0000\u0000\u0087\u0085\u0001\u0000\u0000\u0000\u0087"+ + "\u0088\u0001\u0000\u0000\u0000\u0088\u008a\u0001\u0000\u0000\u0000\u0089"+ + "\u0087\u0001\u0000\u0000\u0000\u008a\u008b\u0005\u0000\u0000\u0001\u008b"+ + "\u0001\u0001\u0000\u0000\u0000\u008c\u00a2\u0003B!\u0000\u008d\u00a2\u0003"+ + ">\u001f\u0000\u008e\u00a2\u0003V+\u0000\u008f\u00a2\u0003L&\u0000\u0090"+ + "\u00a2\u0003X,\u0000\u0091\u00a2\u0003Z-\u0000\u0092\u00a2\u0003T*\u0000"+ + "\u0093\u00a2\u0003\\.\u0000\u0094\u00a2\u0003\u0006\u0003\u0000\u0095"+ + "\u00a2\u0003\b\u0004\u0000\u0096\u00a2\u0003\f\u0006\u0000\u0097\u00a2"+ + "\u0003(\u0014\u0000\u0098\u00a2\u0003*\u0015\u0000\u0099\u00a2\u0003,"+ + "\u0016\u0000\u009a\u00a2\u0003.\u0017\u0000\u009b\u00a2\u00030\u0018\u0000"+ + "\u009c\u00a2\u00032\u0019\u0000\u009d\u00a2\u00034\u001a\u0000\u009e\u00a2"+ + "\u00036\u001b\u0000\u009f\u00a2\u0003<\u001e\u0000\u00a0\u00a2\u0003D"+ + "\"\u0000\u00a1\u008c\u0001\u0000\u0000\u0000\u00a1\u008d\u0001\u0000\u0000"+ + "\u0000\u00a1\u008e\u0001\u0000\u0000\u0000\u00a1\u008f\u0001\u0000\u0000"+ + "\u0000\u00a1\u0090\u0001\u0000\u0000\u0000\u00a1\u0091\u0001\u0000\u0000"+ + "\u0000\u00a1\u0092\u0001\u0000\u0000\u0000\u00a1\u0093\u0001\u0000\u0000"+ + "\u0000\u00a1\u0094\u0001\u0000\u0000\u0000\u00a1\u0095\u0001\u0000\u0000"+ + "\u0000\u00a1\u0096\u0001\u0000\u0000\u0000\u00a1\u0097\u0001\u0000\u0000"+ + "\u0000\u00a1\u0098\u0001\u0000\u0000\u0000\u00a1\u0099\u0001\u0000\u0000"+ + "\u0000\u00a1\u009a\u0001\u0000\u0000\u0000\u00a1\u009b\u0001\u0000\u0000"+ + "\u0000\u00a1\u009c\u0001\u0000\u0000\u0000\u00a1\u009d\u0001\u0000\u0000"+ + "\u0000\u00a1\u009e\u0001\u0000\u0000\u0000\u00a1\u009f\u0001\u0000\u0000"+ + "\u0000\u00a1\u00a0\u0001\u0000\u0000\u0000\u00a2\u0003\u0001\u0000\u0000"+ + "\u0000\u00a3\u00a7\u0005C\u0000\u0000\u00a4\u00a6\u0003\u0002\u0001\u0000"+ + "\u00a5\u00a4\u0001\u0000\u0000\u0000\u00a6\u00a9\u0001\u0000\u0000\u0000"+ + "\u00a7\u00a5\u0001\u0000\u0000\u0000\u00a7\u00a8\u0001\u0000\u0000\u0000"+ + "\u00a8\u00aa\u0001\u0000\u0000\u0000\u00a9\u00a7\u0001\u0000\u0000\u0000"+ + "\u00aa\u00ab\u0005D\u0000\u0000\u00ab\u0005\u0001\u0000\u0000\u0000\u00ac"+ + "\u00ad\u0005\u0005\u0000\u0000\u00ad\u00ae\u0005%\u0000\u0000\u00ae\u00af"+ + "\u0003h4\u0000\u00af\u0007\u0001\u0000\u0000\u0000\u00b0\u00b1\u0005\u0005"+ + "\u0000\u0000\u00b1\u00b2\u0003\n\u0005\u0000\u00b2\u00b3\u0003h4\u0000"+ + "\u00b3\u00b4\u0005\u000e\u0000\u0000\u00b4\u00b5\u0003h4\u0000\u00b5\t"+ + "\u0001\u0000\u0000\u0000\u00b6\u00b7\u0007\u0000\u0000\u0000\u00b7\u000b"+ + "\u0001\u0000\u0000\u0000\u00b8\u00b9\u0005\u0005\u0000\u0000\u00b9\u00ba"+ + "\u0005#\u0000\u0000\u00ba\u00bb\u0003h4\u0000\u00bb\u00bf\u0005C\u0000"+ + "\u0000\u00bc\u00be\u0003\u000e\u0007\u0000\u00bd\u00bc\u0001\u0000\u0000"+ + "\u0000\u00be\u00c1\u0001\u0000\u0000\u0000\u00bf\u00bd\u0001\u0000\u0000"+ + "\u0000\u00bf\u00c0\u0001\u0000\u0000\u0000\u00c0\u00c2\u0001\u0000\u0000"+ + "\u0000\u00c1\u00bf\u0001\u0000\u0000\u0000\u00c2\u00c3\u0005D\u0000\u0000"+ + "\u00c3\r\u0001\u0000\u0000\u0000\u00c4\u00c5\u0005\u0005\u0000\u0000\u00c5"+ + "\u00c6\u0005\t\u0000\u0000\u00c6\u00c7\u0003h4\u0000\u00c7\u00c8\u0005"+ + "\n\u0000\u0000\u00c8\u00c9\u0003\u0010\b\u0000\u00c9\u00ca\u0005\u000b"+ + "\u0000\u0000\u00ca\u00cd\u0003\u0016\u000b\u0000\u00cb\u00cc\u0005\r\u0000"+ + "\u0000\u00cc\u00ce\u0003\u0018\f\u0000\u00cd\u00cb\u0001\u0000\u0000\u0000"+ + "\u00cd\u00ce\u0001\u0000\u0000\u0000\u00ce\u00cf\u0001\u0000\u0000\u0000"+ + "\u00cf\u00d0\u0003\"\u0011\u0000\u00d0\u000f\u0001\u0000\u0000\u0000\u00d1"+ + "\u00d2\u0005\u0010\u0000\u0000\u00d2\u00d6\u0005+\u0000\u0000\u00d3\u00d4"+ + "\u0005+\u0000\u0000\u00d4\u00d6\u0003\u0012\t\u0000\u00d5\u00d1\u0001"+ + "\u0000\u0000\u0000\u00d5\u00d3\u0001\u0000\u0000\u0000\u00d6\u0011\u0001"+ + "\u0000\u0000\u0000\u00d7\u00d8\u0006\t\uffff\uffff\u0000\u00d8\u00e0\u0003"+ + "\u0014\n\u0000\u00d9\u00da\u0005Q\u0000\u0000\u00da\u00e0\u0003\u0012"+ + "\t\u0003\u00db\u00dc\u0005A\u0000\u0000\u00dc\u00dd\u0003\u0012\t\u0000"+ + "\u00dd\u00de\u0005B\u0000\u0000\u00de\u00e0\u0001\u0000\u0000\u0000\u00df"+ + "\u00d7\u0001\u0000\u0000\u0000\u00df\u00d9\u0001\u0000\u0000\u0000\u00df"+ + "\u00db\u0001\u0000\u0000\u0000\u00e0\u00e6\u0001\u0000\u0000\u0000\u00e1"+ + "\u00e2\n\u0001\u0000\u0000\u00e2\u00e3\u0007\u0001\u0000\u0000\u00e3\u00e5"+ + "\u0003\u0012\t\u0002\u00e4\u00e1\u0001\u0000\u0000\u0000\u00e5\u00e8\u0001"+ + "\u0000\u0000\u0000\u00e6\u00e4\u0001\u0000\u0000\u0000\u00e6\u00e7\u0001"+ + "\u0000\u0000\u0000\u00e7\u0013\u0001\u0000\u0000\u0000\u00e8\u00e6\u0001"+ + "\u0000\u0000\u0000\u00e9\u00ea\u0005\u000e\u0000\u0000\u00ea\u00ef\u0003"+ + "n7\u0000\u00eb\u00ef\u0003n7\u0000\u00ec\u00ed\u0005\u0014\u0000\u0000"+ + "\u00ed\u00ef\u0003n7\u0000\u00ee\u00e9\u0001\u0000\u0000\u0000\u00ee\u00eb"+ + "\u0001\u0000\u0000\u0000\u00ee\u00ec\u0001\u0000\u0000\u0000\u00ef\u0015"+ + "\u0001\u0000\u0000\u0000\u00f0\u00f1\u0005\u0010\u0000\u0000\u00f1\u00f4"+ + "\u0005\u0001\u0000\u0000\u00f2\u00f4\u0003n7\u0000\u00f3\u00f0\u0001\u0000"+ + "\u0000\u0000\u00f3\u00f2\u0001\u0000\u0000\u0000\u00f4\u0017\u0001\u0000"+ + "\u0000\u0000\u00f5\u00fe\u0005C\u0000\u0000\u00f6\u00fb\u0003\u001a\r"+ + "\u0000\u00f7\u00f8\u0005H\u0000\u0000\u00f8\u00fa\u0003\u001a\r\u0000"+ + "\u00f9\u00f7\u0001\u0000\u0000\u0000\u00fa\u00fd\u0001\u0000\u0000\u0000"+ + "\u00fb\u00f9\u0001\u0000\u0000\u0000\u00fb\u00fc\u0001\u0000\u0000\u0000"+ + "\u00fc\u00ff\u0001\u0000\u0000\u0000\u00fd\u00fb\u0001\u0000\u0000\u0000"+ + "\u00fe\u00f6\u0001\u0000\u0000\u0000\u00fe\u00ff\u0001\u0000\u0000\u0000"+ + "\u00ff\u0100\u0001\u0000\u0000\u0000\u0100\u0101\u0005D\u0000\u0000\u0101"+ + "\u0019\u0001\u0000\u0000\u0000\u0102\u0103\u0005@\u0000\u0000\u0103\u0106"+ + "\u0005J\u0000\u0000\u0104\u0107\u0003\u001e\u000f\u0000\u0105\u0107\u0003"+ + "\u001c\u000e\u0000\u0106\u0104\u0001\u0000\u0000\u0000\u0106\u0105\u0001"+ + "\u0000\u0000\u0000\u0107\u001b\u0001\u0000\u0000\u0000\u0108\u0109\u0005"+ + "E\u0000\u0000\u0109\u010e\u0003\u001e\u000f\u0000\u010a\u010b\u0005H\u0000"+ + "\u0000\u010b\u010d\u0003\u001e\u000f\u0000\u010c\u010a\u0001\u0000\u0000"+ + "\u0000\u010d\u0110\u0001\u0000\u0000\u0000\u010e\u010c\u0001\u0000\u0000"+ + "\u0000\u010e\u010f\u0001\u0000\u0000\u0000\u010f\u0111\u0001\u0000\u0000"+ + "\u0000\u0110\u010e\u0001\u0000\u0000\u0000\u0111\u0112\u0005F\u0000\u0000"+ + "\u0112\u001d\u0001\u0000\u0000\u0000\u0113\u0114\u0006\u000f\uffff\uffff"+ + "\u0000\u0114\u011c\u0003 \u0010\u0000\u0115\u0116\u0005Q\u0000\u0000\u0116"+ + "\u011c\u0003\u001e\u000f\u0003\u0117\u0118\u0005A\u0000\u0000\u0118\u0119"+ + "\u0003\u001e\u000f\u0000\u0119\u011a\u0005B\u0000\u0000\u011a\u011c\u0001"+ + "\u0000\u0000\u0000\u011b\u0113\u0001\u0000\u0000\u0000\u011b\u0115\u0001"+ + "\u0000\u0000\u0000\u011b\u0117\u0001\u0000\u0000\u0000\u011c\u0122\u0001"+ + "\u0000\u0000\u0000\u011d\u011e\n\u0001\u0000\u0000\u011e\u011f\u0007\u0001"+ + "\u0000\u0000\u011f\u0121\u0003\u001e\u000f\u0002\u0120\u011d\u0001\u0000"+ + "\u0000\u0000\u0121\u0124\u0001\u0000\u0000\u0000\u0122\u0120\u0001\u0000"+ + "\u0000\u0000\u0122\u0123\u0001\u0000\u0000\u0000\u0123\u001f\u0001\u0000"+ + "\u0000\u0000\u0124\u0122\u0001\u0000\u0000\u0000\u0125\u012a\u0005\u0010"+ + "\u0000\u0000\u0126\u0127\u0005\u000e\u0000\u0000\u0127\u012a\u0003n7\u0000"+ + "\u0128\u012a\u0003n7\u0000\u0129\u0125\u0001\u0000\u0000\u0000\u0129\u0126"+ + "\u0001\u0000\u0000\u0000\u0129\u0128\u0001\u0000\u0000\u0000\u012a!\u0001"+ + "\u0000\u0000\u0000\u012b\u012c\u0005\u000f\u0000\u0000\u012c\u012d\u0005"+ + "A\u0000\u0000\u012d\u012e\u0005@\u0000\u0000\u012e\u012f\u0005B\u0000"+ + "\u0000\u012f\u0130\u0003$\u0012\u0000\u0130#\u0001\u0000\u0000\u0000\u0131"+ + "\u0135\u0005C\u0000\u0000\u0132\u0134\u0003&\u0013\u0000\u0133\u0132\u0001"+ + "\u0000\u0000\u0000\u0134\u0137\u0001\u0000\u0000\u0000\u0135\u0133\u0001"+ + "\u0000\u0000\u0000\u0135\u0136\u0001\u0000\u0000\u0000\u0136\u0138\u0001"+ + "\u0000\u0000\u0000\u0137\u0135\u0001\u0000\u0000\u0000\u0138\u0139\u0005"+ + "D\u0000\u0000\u0139%\u0001\u0000\u0000\u0000\u013a\u013e\u0003\u0002\u0001"+ + "\u0000\u013b\u013e\u0003\u000e\u0007\u0000\u013c\u013e\u0003<\u001e\u0000"+ + "\u013d\u013a\u0001\u0000\u0000\u0000\u013d\u013b\u0001\u0000\u0000\u0000"+ + "\u013d\u013c\u0001\u0000\u0000\u0000\u013e\'\u0001\u0000\u0000\u0000\u013f"+ + "\u0140\u0005\u0005\u0000\u0000\u0140\u0141\u0005\"\u0000\u0000\u0141\u0142"+ + "\u0003h4\u0000\u0142\u0143\u0005!\u0000\u0000\u0143\u0144\u0007\u0002"+ + "\u0000\u0000\u0144\u0145\u0003h4\u0000\u0145\u0146\u0005$\u0000\u0000"+ + "\u0146\u0147\u0003h4\u0000\u0147\u0148\u0005\r\u0000\u0000\u0148\u0149"+ + "\u0007\u0003\u0000\u0000\u0149\u014a\u0005\u001b\u0000\u0000\u014a\u014b"+ + "\u0003h4\u0000\u014b)\u0001\u0000\u0000\u0000\u014c\u014d\u0005\u0019"+ + "\u0000\u0000\u014d\u014e\u0005\u001b\u0000\u0000\u014e\u014f\u0003h4\u0000"+ + "\u014f\u0150\u0005\u001c\u0000\u0000\u0150\u0151\u0003h4\u0000\u0151+"+ + "\u0001\u0000\u0000\u0000\u0152\u0153\u0005\u0016\u0000\u0000\u0153\u0154"+ + "\u0003h4\u0000\u0154\u0155\u0005\u001c\u0000\u0000\u0155\u0156\u0003h"+ + "4\u0000\u0156-\u0001\u0000\u0000\u0000\u0157\u0158\u0005\u0017\u0000\u0000"+ + "\u0158\u0159\u0003h4\u0000\u0159\u015a\u0005\u0018\u0000\u0000\u015a\u015b"+ + "\u0003h4\u0000\u015b/\u0001\u0000\u0000\u0000\u015c\u015d\u0005\u001d"+ + "\u0000\u0000\u015d\u015e\u0003h4\u0000\u015e\u015f\u0005\u001e\u0000\u0000"+ + "\u015f\u0160\u0003h4\u0000\u0160\u0161\u0005\u001f\u0000\u0000\u0161\u0162"+ + "\u0003h4\u0000\u01621\u0001\u0000\u0000\u0000\u0163\u0164\u0005 \u0000"+ + "\u0000\u0164\u0165\u0003h4\u0000\u0165\u0166\u0005\u001e\u0000\u0000\u0166"+ + "\u0167\u0003h4\u0000\u01673\u0001\u0000\u0000\u0000\u0168\u0169\u0005"+ + "\u0015\u0000\u0000\u0169\u016a\u0003h4\u0000\u016a5\u0001\u0000\u0000"+ + "\u0000\u016b\u016c\u0005\u0006\u0000\u0000\u016c\u016d\u00038\u001c\u0000"+ + "\u016d\u016e\u0003h4\u0000\u016e7\u0001\u0000\u0000\u0000\u016f\u0173"+ + "\u0003:\u001d\u0000\u0170\u0173\u0005#\u0000\u0000\u0171\u0173\u0005\""+ + "\u0000\u0000\u0172\u016f\u0001\u0000\u0000\u0000\u0172\u0170\u0001\u0000"+ + "\u0000\u0000\u0172\u0171\u0001\u0000\u0000\u0000\u01739\u0001\u0000\u0000"+ + "\u0000\u0174\u0175\u0007\u0004\u0000\u0000\u0175;\u0001\u0000\u0000\u0000"+ + "\u0176\u0177\u0005\u0006\u0000\u0000\u0177\u0178\u0005\t\u0000\u0000\u0178"+ + "\u0179\u0003h4\u0000\u0179\u017a\u0005\u0018\u0000\u0000\u017a\u017b\u0005"+ + "#\u0000\u0000\u017b\u017c\u0003h4\u0000\u017c=\u0001\u0000\u0000\u0000"+ + "\u017d\u0187\u00058\u0000\u0000\u017e\u0188\u0003@ \u0000\u017f\u0183"+ + "\u0005A\u0000\u0000\u0180\u0182\u0003@ \u0000\u0181\u0180\u0001\u0000"+ + "\u0000\u0000\u0182\u0185\u0001\u0000\u0000\u0000\u0183\u0181\u0001\u0000"+ + "\u0000\u0000\u0183\u0184\u0001\u0000\u0000\u0000\u0184\u0186\u0001\u0000"+ + "\u0000\u0000\u0185\u0183\u0001\u0000\u0000\u0000\u0186\u0188\u0005B\u0000"+ + "\u0000\u0187\u017e\u0001\u0000\u0000\u0000\u0187\u017f\u0001\u0000\u0000"+ + "\u0000\u0188\u018d\u0001\u0000\u0000\u0000\u0189\u018a\u0005@\u0000\u0000"+ + "\u018a\u018b\u0005L\u0000\u0000\u018b\u018d\u0003h4\u0000\u018c\u017d"+ + "\u0001\u0000\u0000\u0000\u018c\u0189\u0001\u0000\u0000\u0000\u018d?\u0001"+ + "\u0000\u0000\u0000\u018e\u018f\u0005@\u0000\u0000\u018f\u0190\u0005G\u0000"+ + "\u0000\u0190\u0191\u0003h4\u0000\u0191A\u0001\u0000\u0000\u0000\u0192"+ + "\u0194\u0005@\u0000\u0000\u0193\u0195\u0005R\u0000\u0000\u0194\u0193\u0001"+ + "\u0000\u0000\u0000\u0194\u0195\u0001\u0000\u0000\u0000\u0195\u0196\u0001"+ + "\u0000\u0000\u0000\u0196\u0197\u0005G\u0000\u0000\u0197\u0198\u0003h4"+ + "\u0000\u0198C\u0001\u0000\u0000\u0000\u0199\u019a\u0003F#\u0000\u019a"+ + "\u019b\u0003\u0004\u0002\u0000\u019bE\u0001\u0000\u0000\u0000\u019c\u019d"+ + "\u0007\u0005\u0000\u0000\u019d\u019e\u0005@\u0000\u0000\u019e\u019f\u0005"+ + "A\u0000\u0000\u019f\u01a0\u0003H$\u0000\u01a0\u01a2\u0005B\u0000\u0000"+ + "\u01a1\u01a3\u0003b1\u0000\u01a2\u01a1\u0001\u0000\u0000\u0000\u01a2\u01a3"+ + "\u0001\u0000\u0000\u0000\u01a3\u01a5\u0001\u0000\u0000\u0000\u01a4\u01a6"+ + "\u0003P(\u0000\u01a5\u01a4\u0001\u0000\u0000\u0000\u01a5\u01a6\u0001\u0000"+ + "\u0000\u0000\u01a6G\u0001\u0000\u0000\u0000\u01a7\u01ac\u0003J%\u0000"+ + "\u01a8\u01a9\u0005H\u0000\u0000\u01a9\u01ab\u0003J%\u0000\u01aa\u01a8"+ + "\u0001\u0000\u0000\u0000\u01ab\u01ae\u0001\u0000\u0000\u0000\u01ac\u01aa"+ + "\u0001\u0000\u0000\u0000\u01ac\u01ad\u0001\u0000\u0000\u0000\u01ad\u01b0"+ + "\u0001\u0000\u0000\u0000\u01ae\u01ac\u0001\u0000\u0000\u0000\u01af\u01a7"+ + "\u0001\u0000\u0000\u0000\u01af\u01b0\u0001\u0000\u0000\u0000\u01b0I\u0001"+ + "\u0000\u0000\u0000\u01b1\u01b3\u0005\u0002\u0000\u0000\u01b2\u01b1\u0001"+ + "\u0000\u0000\u0000\u01b2\u01b3\u0001\u0000\u0000\u0000\u01b3\u01b4\u0001"+ + "\u0000\u0000\u0000\u01b4\u01b5\u0003b1\u0000\u01b5\u01b6\u0005@\u0000"+ + "\u0000\u01b6K\u0001\u0000\u0000\u0000\u01b7\u01b9\u00057\u0000\u0000\u01b8"+ + "\u01ba\u0003h4\u0000\u01b9\u01b8\u0001\u0000\u0000\u0000\u01b9\u01ba\u0001"+ + "\u0000\u0000\u0000\u01baM\u0001\u0000\u0000\u0000\u01bb\u01bc\u0005\u0003"+ + "\u0000\u0000\u01bc\u01bd\u0003h4\u0000\u01bd\u01be\u0005\r\u0000\u0000"+ + "\u01be\u01bf\u0003h4\u0000\u01bfO\u0001\u0000\u0000\u0000\u01c0\u01c4"+ + "\u0005C\u0000\u0000\u01c1\u01c3\u0003N\'\u0000\u01c2\u01c1\u0001\u0000"+ + "\u0000\u0000\u01c3\u01c6\u0001\u0000\u0000\u0000\u01c4\u01c2\u0001\u0000"+ + "\u0000\u0000\u01c4\u01c5\u0001\u0000\u0000\u0000\u01c5\u01c7\u0001\u0000"+ + "\u0000\u0000\u01c6\u01c4\u0001\u0000\u0000\u0000\u01c7\u01c8\u0005D\u0000"+ + "\u0000\u01c8Q\u0001\u0000\u0000\u0000\u01c9\u01d2\u0005E\u0000\u0000\u01ca"+ + "\u01cf\u0005@\u0000\u0000\u01cb\u01cc\u0005H\u0000\u0000\u01cc\u01ce\u0005"+ + "@\u0000\u0000\u01cd\u01cb\u0001\u0000\u0000\u0000\u01ce\u01d1\u0001\u0000"+ + "\u0000\u0000\u01cf\u01cd\u0001\u0000\u0000\u0000\u01cf\u01d0\u0001\u0000"+ + "\u0000\u0000\u01d0\u01d3\u0001\u0000\u0000\u0000\u01d1\u01cf\u0001\u0000"+ + "\u0000\u0000\u01d2\u01ca\u0001\u0000\u0000\u0000\u01d2\u01d3\u0001\u0000"+ + "\u0000\u0000\u01d3\u01d4\u0001\u0000\u0000\u0000\u01d4\u01d5\u0005F\u0000"+ + "\u0000\u01d5S\u0001\u0000\u0000\u0000\u01d6\u01d7\u0003\u0080@\u0000\u01d7"+ + "U\u0001\u0000\u0000\u0000\u01d8\u01d9\u00056\u0000\u0000\u01d9\u01dc\u0005"+ + "@\u0000\u0000\u01da\u01db\u0005H\u0000\u0000\u01db\u01dd\u0005@\u0000"+ + "\u0000\u01dc\u01da\u0001\u0000\u0000\u0000\u01dc\u01dd\u0001\u0000\u0000"+ + "\u0000\u01dd\u01de\u0001\u0000\u0000\u0000\u01de\u01df\u0005\u000e\u0000"+ + "\u0000\u01df\u01e0\u0003h4\u0000\u01e0\u01e1\u0003\u0004\u0002\u0000\u01e1"+ + "W\u0001\u0000\u0000\u0000\u01e2\u01e3\u0005.\u0000\u0000\u01e3Y\u0001"+ + "\u0000\u0000\u0000\u01e4\u01e5\u00055\u0000\u0000\u01e5[\u0001\u0000\u0000"+ + "\u0000\u01e6\u01e7\u00053\u0000\u0000\u01e7\u01e8\u0003h4\u0000\u01e8"+ + "\u01ec\u0003\u0004\u0002\u0000\u01e9\u01eb\u0003^/\u0000\u01ea\u01e9\u0001"+ + "\u0000\u0000\u0000\u01eb\u01ee\u0001\u0000\u0000\u0000\u01ec\u01ea\u0001"+ + "\u0000\u0000\u0000\u01ec\u01ed\u0001\u0000\u0000\u0000\u01ed\u01f0\u0001"+ + "\u0000\u0000\u0000\u01ee\u01ec\u0001\u0000\u0000\u0000\u01ef\u01f1\u0003"+ + "`0\u0000\u01f0\u01ef\u0001\u0000\u0000\u0000\u01f0\u01f1\u0001\u0000\u0000"+ + "\u0000\u01f1]\u0001\u0000\u0000\u0000\u01f2\u01f3\u00051\u0000\u0000\u01f3"+ + "\u01f4\u00053\u0000\u0000\u01f4\u01f5\u0003h4\u0000\u01f5\u01f6\u0003"+ + "\u0004\u0002\u0000\u01f6_\u0001\u0000\u0000\u0000\u01f7\u01f8\u00051\u0000"+ + "\u0000\u01f8\u01f9\u0003\u0004\u0002\u0000\u01f9a\u0001\u0000\u0000\u0000"+ + "\u01fa\u0200\u00059\u0000\u0000\u01fb\u0200\u0005:\u0000\u0000\u01fc\u0200"+ + "\u0003f3\u0000\u01fd\u0200\u0003d2\u0000\u01fe\u0200\u0005\u0010\u0000"+ + "\u0000\u01ff\u01fa\u0001\u0000\u0000\u0000\u01ff\u01fb\u0001\u0000\u0000"+ + "\u0000\u01ff\u01fc\u0001\u0000\u0000\u0000\u01ff\u01fd\u0001\u0000\u0000"+ + "\u0000\u01ff\u01fe\u0001\u0000\u0000\u0000\u0200c\u0001\u0000\u0000\u0000"+ + "\u0201\u0202\u00050\u0000\u0000\u0202\u0203\u0005E\u0000\u0000\u0203\u0204"+ + "\u0003b1\u0000\u0204\u0205\u0005F\u0000\u0000\u0205\u0206\u0003b1\u0000"+ + "\u0206e\u0001\u0000\u0000\u0000\u0207\u0208\u0005E\u0000\u0000\u0208\u0209"+ + "\u0005F\u0000\u0000\u0209\u020a\u0003b1\u0000\u020ag\u0001\u0000\u0000"+ + "\u0000\u020b\u020c\u00064\uffff\uffff\u0000\u020c\u0216\u0003\u0080@\u0000"+ + "\u020d\u0216\u0003z=\u0000\u020e\u0216\u0003l6\u0000\u020f\u0210\u0005"+ + "Q\u0000\u0000\u0210\u0216\u0003h4\u0005\u0211\u0212\u0005A\u0000\u0000"+ + "\u0212\u0213\u0003h4\u0000\u0213\u0214\u0005B\u0000\u0000\u0214\u0216"+ + "\u0001\u0000\u0000\u0000\u0215\u020b\u0001\u0000\u0000\u0000\u0215\u020d"+ + "\u0001\u0000\u0000\u0000\u0215\u020e\u0001\u0000\u0000\u0000\u0215\u020f"+ + "\u0001\u0000\u0000\u0000\u0215\u0211\u0001\u0000\u0000\u0000\u0216\u0222"+ + "\u0001\u0000\u0000\u0000\u0217\u0218\n\u0003\u0000\u0000\u0218\u0219\u0005"+ + "R\u0000\u0000\u0219\u0221\u0003h4\u0004\u021a\u021b\n\u0002\u0000\u0000"+ + "\u021b\u021c\u0007\u0006\u0000\u0000\u021c\u0221\u0003h4\u0003\u021d\u021e"+ + "\n\u0001\u0000\u0000\u021e\u021f\u0007\u0001\u0000\u0000\u021f\u0221\u0003"+ + "h4\u0002\u0220\u0217\u0001\u0000\u0000\u0000\u0220\u021a\u0001\u0000\u0000"+ + "\u0000\u0220\u021d\u0001\u0000\u0000\u0000\u0221\u0224\u0001\u0000\u0000"+ + "\u0000\u0222\u0220\u0001\u0000\u0000\u0000\u0222\u0223\u0001\u0000\u0000"+ + "\u0000\u0223i\u0001\u0000\u0000\u0000\u0224\u0222\u0001\u0000\u0000\u0000"+ + "\u0225\u022a\u0003h4\u0000\u0226\u0227\u0005H\u0000\u0000\u0227\u0229"+ + "\u0003h4\u0000\u0228\u0226\u0001\u0000\u0000\u0000\u0229\u022c\u0001\u0000"+ + "\u0000\u0000\u022a\u0228\u0001\u0000\u0000\u0000\u022a\u022b\u0001\u0000"+ + "\u0000\u0000\u022bk\u0001\u0000\u0000\u0000\u022c\u022a\u0001\u0000\u0000"+ + "\u0000\u022d\u0232\u0003n7\u0000\u022e\u0232\u0003p8\u0000\u022f\u0232"+ + "\u0003r9\u0000\u0230\u0232\u0003v;\u0000\u0231\u022d\u0001\u0000\u0000"+ + "\u0000\u0231\u022e\u0001\u0000\u0000\u0000\u0231\u022f\u0001\u0000\u0000"+ + "\u0000\u0231\u0230\u0001\u0000\u0000\u0000\u0232m\u0001\u0000\u0000\u0000"+ + "\u0233\u0234\u0005S\u0000\u0000\u0234o\u0001\u0000\u0000\u0000\u0235\u0236"+ + "\u0007\u0007\u0000\u0000\u0236q\u0001\u0000\u0000\u0000\u0237\u0239\u0005"+ + "E\u0000\u0000\u0238\u023a\u0003j5\u0000\u0239\u0238\u0001\u0000\u0000"+ + "\u0000\u0239\u023a\u0001\u0000\u0000\u0000\u023a\u023b\u0001\u0000\u0000"+ + "\u0000\u023b\u023c\u0005F\u0000\u0000\u023cs\u0001\u0000\u0000\u0000\u023d"+ + "\u0246\u0005E\u0000\u0000\u023e\u0243\u0003n7\u0000\u023f\u0240\u0005"+ + "H\u0000\u0000\u0240\u0242\u0003n7\u0000\u0241\u023f\u0001\u0000\u0000"+ + "\u0000\u0242\u0245\u0001\u0000\u0000\u0000\u0243\u0241\u0001\u0000\u0000"+ + "\u0000\u0243\u0244\u0001\u0000\u0000\u0000\u0244\u0247\u0001\u0000\u0000"+ + "\u0000\u0245\u0243\u0001\u0000\u0000\u0000\u0246\u023e\u0001\u0000\u0000"+ + "\u0000\u0246\u0247\u0001\u0000\u0000\u0000\u0247\u0248\u0001\u0000\u0000"+ + "\u0000\u0248\u0249\u0005F\u0000\u0000\u0249u\u0001\u0000\u0000\u0000\u024a"+ + "\u0253\u0005C\u0000\u0000\u024b\u0250\u0003x<\u0000\u024c\u024d\u0005"+ + "H\u0000\u0000\u024d\u024f\u0003x<\u0000\u024e\u024c\u0001\u0000\u0000"+ + "\u0000\u024f\u0252\u0001\u0000\u0000\u0000\u0250\u024e\u0001\u0000\u0000"+ + "\u0000\u0250\u0251\u0001\u0000\u0000\u0000\u0251\u0254\u0001\u0000\u0000"+ + "\u0000\u0252\u0250\u0001\u0000\u0000\u0000\u0253\u024b\u0001\u0000\u0000"+ + "\u0000\u0253\u0254\u0001\u0000\u0000\u0000\u0254\u0255\u0001\u0000\u0000"+ + "\u0000\u0255\u0256\u0005D\u0000\u0000\u0256w\u0001\u0000\u0000\u0000\u0257"+ + "\u0258\u0003h4\u0000\u0258\u0259\u0005J\u0000\u0000\u0259\u025a\u0003"+ + "h4\u0000\u025ay\u0001\u0000\u0000\u0000\u025b\u025c\u0006=\uffff\uffff"+ + "\u0000\u025c\u025d\u0005@\u0000\u0000\u025d\u0262\u0001\u0000\u0000\u0000"+ + "\u025e\u025f\n\u0001\u0000\u0000\u025f\u0261\u0003|>\u0000\u0260\u025e"+ + "\u0001\u0000\u0000\u0000\u0261\u0264\u0001\u0000\u0000\u0000\u0262\u0260"+ + "\u0001\u0000\u0000\u0000\u0262\u0263\u0001\u0000\u0000\u0000\u0263{\u0001"+ + "\u0000\u0000\u0000\u0264\u0262\u0001\u0000\u0000\u0000\u0265\u0266\u0005"+ + "E\u0000\u0000\u0266\u0267\u0003h4\u0000\u0267\u0268\u0005F\u0000\u0000"+ + "\u0268\u026c\u0001\u0000\u0000\u0000\u0269\u026a\u0005K\u0000\u0000\u026a"+ + "\u026c\u0003~?\u0000\u026b\u0265\u0001\u0000\u0000\u0000\u026b\u0269\u0001"+ + "\u0000\u0000\u0000\u026c}\u0001\u0000\u0000\u0000\u026d\u026e\u0005@\u0000"+ + "\u0000\u026e\u007f\u0001\u0000\u0000\u0000\u026f\u0270\u0005@\u0000\u0000"+ + "\u0270\u0271\u0003\u0082A\u0000\u0271\u0081\u0001\u0000\u0000\u0000\u0272"+ + "\u0274\u0005A\u0000\u0000\u0273\u0275\u0003j5\u0000\u0274\u0273\u0001"+ + "\u0000\u0000\u0000\u0274\u0275\u0001\u0000\u0000\u0000\u0275\u0276\u0001"+ + "\u0000\u0000\u0000\u0276\u0277\u0005B\u0000\u0000\u0277\u0083\u0001\u0000"+ + "\u0000\u00002\u0087\u00a1\u00a7\u00bf\u00cd\u00d5\u00df\u00e6\u00ee\u00f3"+ + "\u00fb\u00fe\u0106\u010e\u011b\u0122\u0129\u0135\u013d\u0172\u0183\u0187"+ + "\u018c\u0194\u01a2\u01a5\u01ac\u01af\u01b2\u01b9\u01c4\u01cf\u01d2\u01dc"+ + "\u01ec\u01f0\u01ff\u0215\u0220\u0222\u022a\u0231\u0239\u0243\u0246\u0250"+ + "\u0253\u0262\u026b\u0274"; + public static final ATN _ATN = + new ATNDeserializer().deserialize(_serializedATN.toCharArray()); + static { + _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()]; + for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) { + _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); + } + } +} \ No newline at end of file diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/antlr/PMLParser.tokens b/src/main/java/gov/nist/csd/pm/pap/pml/antlr/PMLParser.tokens new file mode 100644 index 000000000..c0f8a0d1b --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/antlr/PMLParser.tokens @@ -0,0 +1,158 @@ +OPERATION=1 +NODEOP=2 +CHECK=3 +ROUTINE=4 +CREATE=5 +DELETE=6 +POLICY_ELEMENT=7 +CONTAINED=8 +RULE=9 +WHEN=10 +PERFORMS=11 +AS=12 +ON=13 +IN=14 +DO=15 +ANY=16 +ASCENDANT_OF=17 +INTERSECTION=18 +UNION=19 +PROCESS=20 +SET_RESOURCE_OPERATIONS=21 +ASSIGN=22 +DEASSIGN=23 +FROM=24 +SET_PROPERTIES=25 +WITH_PROPERTIES=26 +OF=27 +TO=28 +ASSOCIATE=29 +AND=30 +WITH=31 +DISSOCIATE=32 +DENY=33 +PROHIBITION=34 +OBLIGATION=35 +ACCESS_RIGHTS=36 +POLICY_CLASS=37 +OBJECT_ATTRIBUTE=38 +USER_ATTRIBUTE=39 +USER_ATTRIBUTES=40 +OBJECT_ATTRIBUTES=41 +OBJECT=42 +USER=43 +ATTRIBUTE=44 +ASSOCIATIONS=45 +BREAK=46 +DEFAULT=47 +MAP=48 +ELSE=49 +CONST=50 +IF=51 +RANGE=52 +CONTINUE=53 +FOREACH=54 +RETURN=55 +VAR=56 +STRING_TYPE=57 +BOOL_TYPE=58 +VOID_TYPE=59 +ARRAY_TYPE=60 +NIL_LIT=61 +TRUE=62 +FALSE=63 +ID=64 +OPEN_PAREN=65 +CLOSE_PAREN=66 +OPEN_CURLY=67 +CLOSE_CURLY=68 +OPEN_BRACKET=69 +CLOSE_BRACKET=70 +ASSIGN_EQUALS=71 +COMMA=72 +SEMI=73 +COLON=74 +DOT=75 +DECLARE_ASSIGN=76 +LOGICAL_OR=77 +LOGICAL_AND=78 +EQUALS=79 +NOT_EQUALS=80 +EXCLAMATION=81 +PLUS=82 +DOUBLE_QUOTE_STRING=83 +WS=84 +COMMENT=85 +LINE_COMMENT=86 +'operation'=1 +'nodeop'=2 +'check'=3 +'routine'=4 +'create'=5 +'delete'=6 +'contained'=8 +'rule'=9 +'when'=10 +'performs'=11 +'as'=12 +'on'=13 +'in'=14 +'do'=15 +'any'=16 +'ascendant of'=17 +'union'=19 +'process'=20 +'set resource operations'=21 +'assign'=22 +'deassign'=23 +'from'=24 +'set properties'=25 +'with properties'=26 +'of'=27 +'to'=28 +'associate'=29 +'and'=30 +'with'=31 +'dissociate'=32 +'deny'=33 +'prohibition'=34 +'obligation'=35 +'access rights'=36 +'attribute'=44 +'associations'=45 +'break'=46 +'default'=47 +'map'=48 +'else'=49 +'const'=50 +'if'=51 +'range'=52 +'continue'=53 +'foreach'=54 +'return'=55 +'var'=56 +'string'=57 +'bool'=58 +'void'=59 +'array'=60 +'nil'=61 +'true'=62 +'false'=63 +'('=65 +')'=66 +'{'=67 +'}'=68 +'['=69 +']'=70 +'='=71 +','=72 +';'=73 +':'=74 +'.'=75 +':='=76 +'||'=77 +'&&'=78 +'=='=79 +'!='=80 +'!'=81 +'+'=82 diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/antlr/PMLBaseListener.java b/src/main/java/gov/nist/csd/pm/pap/pml/antlr/PMLParserBaseListener.java similarity index 62% rename from src/main/java/gov/nist/csd/pm/policy/pml/antlr/PMLBaseListener.java rename to src/main/java/gov/nist/csd/pm/pap/pml/antlr/PMLParserBaseListener.java index d1134beb0..f854bc53d 100644 --- a/src/main/java/gov/nist/csd/pm/policy/pml/antlr/PMLBaseListener.java +++ b/src/main/java/gov/nist/csd/pm/pap/pml/antlr/PMLParserBaseListener.java @@ -1,16 +1,17 @@ -// Generated from PML.g4 by ANTLR 4.8 -package gov.nist.csd.pm.policy.pml.antlr; +// Generated from PMLParser.g4 by ANTLR 4.13.1 +package gov.nist.csd.pm.pap.pml.antlr; import org.antlr.v4.runtime.ParserRuleContext; import org.antlr.v4.runtime.tree.ErrorNode; import org.antlr.v4.runtime.tree.TerminalNode; /** - * This class provides an empty implementation of {@link PMLListener}, + * This class provides an empty implementation of {@link PMLParserListener}, * which can be extended to create a listener which only needs to handle a subset * of the available methods. */ -public class PMLBaseListener implements PMLListener { +@SuppressWarnings("CheckReturnValue") +public class PMLParserBaseListener implements PMLParserListener { /** * {@inheritDoc} * @@ -35,6 +36,18 @@ public class PMLBaseListener implements PMLListener { *

The default implementation does nothing.

*/ @Override public void exitStatement(PMLParser.StatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterStatementBlock(PMLParser.StatementBlockContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitStatementBlock(PMLParser.StatementBlockContext ctx) { } /** * {@inheritDoc} * @@ -52,25 +65,25 @@ public class PMLBaseListener implements PMLListener { * *

The default implementation does nothing.

*/ - @Override public void enterCreateAttributeStatement(PMLParser.CreateAttributeStatementContext ctx) { } + @Override public void enterCreateNonPCStatement(PMLParser.CreateNonPCStatementContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitCreateAttributeStatement(PMLParser.CreateAttributeStatementContext ctx) { } + @Override public void exitCreateNonPCStatement(PMLParser.CreateNonPCStatementContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void enterCreateUserOrObjectStatement(PMLParser.CreateUserOrObjectStatementContext ctx) { } + @Override public void enterNonPCNodeType(PMLParser.NonPCNodeTypeContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitCreateUserOrObjectStatement(PMLParser.CreateUserOrObjectStatementContext ctx) { } + @Override public void exitNonPCNodeType(PMLParser.NonPCNodeTypeContext ctx) { } /** * {@inheritDoc} * @@ -100,49 +113,97 @@ public class PMLBaseListener implements PMLListener { * *

The default implementation does nothing.

*/ - @Override public void enterAnyUserSubject(PMLParser.AnyUserSubjectContext ctx) { } + @Override public void enterAnyUserPattern(PMLParser.AnyUserPatternContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAnyUserPattern(PMLParser.AnyUserPatternContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterUserPattern(PMLParser.UserPatternContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitUserPattern(PMLParser.UserPatternContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterBasicSubjectPatternExpression(PMLParser.BasicSubjectPatternExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitBasicSubjectPatternExpression(PMLParser.BasicSubjectPatternExpressionContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitAnyUserSubject(PMLParser.AnyUserSubjectContext ctx) { } + @Override public void enterParenSubjectPatternExpression(PMLParser.ParenSubjectPatternExpressionContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void enterUserSubject(PMLParser.UserSubjectContext ctx) { } + @Override public void exitParenSubjectPatternExpression(PMLParser.ParenSubjectPatternExpressionContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitUserSubject(PMLParser.UserSubjectContext ctx) { } + @Override public void enterNegateSubjectPatternExpression(PMLParser.NegateSubjectPatternExpressionContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void enterUsersListSubject(PMLParser.UsersListSubjectContext ctx) { } + @Override public void exitNegateSubjectPatternExpression(PMLParser.NegateSubjectPatternExpressionContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitUsersListSubject(PMLParser.UsersListSubjectContext ctx) { } + @Override public void enterLogicalSubjectPatternExpression(PMLParser.LogicalSubjectPatternExpressionContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void enterUserAttrSubject(PMLParser.UserAttrSubjectContext ctx) { } + @Override public void exitLogicalSubjectPatternExpression(PMLParser.LogicalSubjectPatternExpressionContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitUserAttrSubject(PMLParser.UserAttrSubjectContext ctx) { } + @Override public void enterInSubject(PMLParser.InSubjectContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitInSubject(PMLParser.InSubjectContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterUsernameSubject(PMLParser.UsernameSubjectContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitUsernameSubject(PMLParser.UsernameSubjectContext ctx) { } /** * {@inheritDoc} * @@ -160,133 +221,193 @@ public class PMLBaseListener implements PMLListener { * *

The default implementation does nothing.

*/ - @Override public void enterPolicyElement(PMLParser.PolicyElementContext ctx) { } + @Override public void enterAnyOperation(PMLParser.AnyOperationContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitPolicyElement(PMLParser.PolicyElementContext ctx) { } + @Override public void exitAnyOperation(PMLParser.AnyOperationContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void enterAnyPolicyElement(PMLParser.AnyPolicyElementContext ctx) { } + @Override public void enterIDOperation(PMLParser.IDOperationContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitAnyPolicyElement(PMLParser.AnyPolicyElementContext ctx) { } + @Override public void exitIDOperation(PMLParser.IDOperationContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void enterAnyContainedIn(PMLParser.AnyContainedInContext ctx) { } + @Override public void enterOperandPattern(PMLParser.OperandPatternContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitAnyContainedIn(PMLParser.AnyContainedInContext ctx) { } + @Override public void exitOperandPattern(PMLParser.OperandPatternContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void enterAnyOfSet(PMLParser.AnyOfSetContext ctx) { } + @Override public void enterOperandPatternElement(PMLParser.OperandPatternElementContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitAnyOfSet(PMLParser.AnyOfSetContext ctx) { } + @Override public void exitOperandPatternElement(PMLParser.OperandPatternElementContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void enterAnyPe(PMLParser.AnyPeContext ctx) { } + @Override public void enterOperandPatternExpressionArray(PMLParser.OperandPatternExpressionArrayContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitAnyPe(PMLParser.AnyPeContext ctx) { } + @Override public void exitOperandPatternExpressionArray(PMLParser.OperandPatternExpressionArrayContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void enterResponse(PMLParser.ResponseContext ctx) { } + @Override public void enterParenOperandPatternExpression(PMLParser.ParenOperandPatternExpressionContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitResponse(PMLParser.ResponseContext ctx) { } + @Override public void exitParenOperandPatternExpression(PMLParser.ParenOperandPatternExpressionContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void enterResponseBlock(PMLParser.ResponseBlockContext ctx) { } + @Override public void enterNegateOperandPatternExpression(PMLParser.NegateOperandPatternExpressionContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitResponseBlock(PMLParser.ResponseBlockContext ctx) { } + @Override public void exitNegateOperandPatternExpression(PMLParser.NegateOperandPatternExpressionContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void enterResponseStatement(PMLParser.ResponseStatementContext ctx) { } + @Override public void enterBasicOperandPatternExpression(PMLParser.BasicOperandPatternExpressionContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitResponseStatement(PMLParser.ResponseStatementContext ctx) { } + @Override public void exitBasicOperandPatternExpression(PMLParser.BasicOperandPatternExpressionContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void enterCreateProhibitionStatement(PMLParser.CreateProhibitionStatementContext ctx) { } + @Override public void enterLogicalOperandPatternExpression(PMLParser.LogicalOperandPatternExpressionContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitCreateProhibitionStatement(PMLParser.CreateProhibitionStatementContext ctx) { } + @Override public void exitLogicalOperandPatternExpression(PMLParser.LogicalOperandPatternExpressionContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void enterProhibitionContainerList(PMLParser.ProhibitionContainerListContext ctx) { } + @Override public void enterAnyPolicyElement(PMLParser.AnyPolicyElementContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitProhibitionContainerList(PMLParser.ProhibitionContainerListContext ctx) { } + @Override public void exitAnyPolicyElement(PMLParser.AnyPolicyElementContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void enterProhibitionContainerExpression(PMLParser.ProhibitionContainerExpressionContext ctx) { } + @Override public void enterInPolicyElement(PMLParser.InPolicyElementContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitProhibitionContainerExpression(PMLParser.ProhibitionContainerExpressionContext ctx) { } + @Override public void exitInPolicyElement(PMLParser.InPolicyElementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPolicyElement(PMLParser.PolicyElementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPolicyElement(PMLParser.PolicyElementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterResponse(PMLParser.ResponseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitResponse(PMLParser.ResponseContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterResponseBlock(PMLParser.ResponseBlockContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitResponseBlock(PMLParser.ResponseBlockContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterResponseStatement(PMLParser.ResponseStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitResponseStatement(PMLParser.ResponseStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCreateProhibitionStatement(PMLParser.CreateProhibitionStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCreateProhibitionStatement(PMLParser.CreateProhibitionStatementContext ctx) { } /** * {@inheritDoc} * @@ -352,13 +473,13 @@ public class PMLBaseListener implements PMLListener { * *

The default implementation does nothing.

*/ - @Override public void enterSetResourceAccessRightsStatement(PMLParser.SetResourceAccessRightsStatementContext ctx) { } + @Override public void enterSetResourceOperationsStatement(PMLParser.SetResourceOperationsStatementContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitSetResourceAccessRightsStatement(PMLParser.SetResourceAccessRightsStatementContext ctx) { } + @Override public void exitSetResourceOperationsStatement(PMLParser.SetResourceOperationsStatementContext ctx) { } /** * {@inheritDoc} * @@ -436,169 +557,193 @@ public class PMLBaseListener implements PMLListener { * *

The default implementation does nothing.

*/ - @Override public void enterVariableDeclarationStatement(PMLParser.VariableDeclarationStatementContext ctx) { } + @Override public void enterVarDeclaration(PMLParser.VarDeclarationContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitVariableDeclarationStatement(PMLParser.VariableDeclarationStatementContext ctx) { } + @Override public void exitVarDeclaration(PMLParser.VarDeclarationContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void enterFunctionDefinitionStatement(PMLParser.FunctionDefinitionStatementContext ctx) { } + @Override public void enterShortDeclaration(PMLParser.ShortDeclarationContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitFunctionDefinitionStatement(PMLParser.FunctionDefinitionStatementContext ctx) { } + @Override public void exitShortDeclaration(PMLParser.ShortDeclarationContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void enterFormalArgList(PMLParser.FormalArgListContext ctx) { } + @Override public void enterVarSpec(PMLParser.VarSpecContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitFormalArgList(PMLParser.FormalArgListContext ctx) { } + @Override public void exitVarSpec(PMLParser.VarSpecContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void enterFormalArg(PMLParser.FormalArgContext ctx) { } + @Override public void enterVariableAssignmentStatement(PMLParser.VariableAssignmentStatementContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitFormalArg(PMLParser.FormalArgContext ctx) { } + @Override public void exitVariableAssignmentStatement(PMLParser.VariableAssignmentStatementContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void enterFormalArgType(PMLParser.FormalArgTypeContext ctx) { } + @Override public void enterFunctionDefinitionStatement(PMLParser.FunctionDefinitionStatementContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitFormalArgType(PMLParser.FormalArgTypeContext ctx) { } + @Override public void exitFunctionDefinitionStatement(PMLParser.FunctionDefinitionStatementContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void enterFunctionReturnStatement(PMLParser.FunctionReturnStatementContext ctx) { } + @Override public void enterFunctionSignature(PMLParser.FunctionSignatureContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitFunctionReturnStatement(PMLParser.FunctionReturnStatementContext ctx) { } + @Override public void exitFunctionSignature(PMLParser.FunctionSignatureContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void enterVariableReturnType(PMLParser.VariableReturnTypeContext ctx) { } + @Override public void enterFormalArgList(PMLParser.FormalArgListContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitVariableReturnType(PMLParser.VariableReturnTypeContext ctx) { } + @Override public void exitFormalArgList(PMLParser.FormalArgListContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void enterVoidReturnType(PMLParser.VoidReturnTypeContext ctx) { } + @Override public void enterFormalArg(PMLParser.FormalArgContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitVoidReturnType(PMLParser.VoidReturnTypeContext ctx) { } + @Override public void exitFormalArg(PMLParser.FormalArgContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void enterFuncBody(PMLParser.FuncBodyContext ctx) { } + @Override public void enterReturnStatement(PMLParser.ReturnStatementContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitFuncBody(PMLParser.FuncBodyContext ctx) { } + @Override public void exitReturnStatement(PMLParser.ReturnStatementContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void enterForeachStatement(PMLParser.ForeachStatementContext ctx) { } + @Override public void enterCheckStatement(PMLParser.CheckStatementContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitForeachStatement(PMLParser.ForeachStatementContext ctx) { } + @Override public void exitCheckStatement(PMLParser.CheckStatementContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void enterForRangeStatement(PMLParser.ForRangeStatementContext ctx) { } + @Override public void enterCheckStatementBlock(PMLParser.CheckStatementBlockContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitForRangeStatement(PMLParser.ForRangeStatementContext ctx) { } + @Override public void exitCheckStatementBlock(PMLParser.CheckStatementBlockContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void enterBreakStatement(PMLParser.BreakStatementContext ctx) { } + @Override public void enterIdArr(PMLParser.IdArrContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitBreakStatement(PMLParser.BreakStatementContext ctx) { } + @Override public void exitIdArr(PMLParser.IdArrContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void enterContinueStatement(PMLParser.ContinueStatementContext ctx) { } + @Override public void enterFunctionInvokeStatement(PMLParser.FunctionInvokeStatementContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitContinueStatement(PMLParser.ContinueStatementContext ctx) { } + @Override public void exitFunctionInvokeStatement(PMLParser.FunctionInvokeStatementContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void enterFunctionInvokeStatement(PMLParser.FunctionInvokeStatementContext ctx) { } + @Override public void enterForeachStatement(PMLParser.ForeachStatementContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitFunctionInvokeStatement(PMLParser.FunctionInvokeStatementContext ctx) { } + @Override public void exitForeachStatement(PMLParser.ForeachStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterBreakStatement(PMLParser.BreakStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitBreakStatement(PMLParser.BreakStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterContinueStatement(PMLParser.ContinueStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitContinueStatement(PMLParser.ContinueStatementContext ctx) { } /** * {@inheritDoc} * @@ -724,109 +869,133 @@ public class PMLBaseListener implements PMLListener { * *

The default implementation does nothing.

*/ - @Override public void enterStatementBlock(PMLParser.StatementBlockContext ctx) { } + @Override public void enterNegateExpression(PMLParser.NegateExpressionContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitStatementBlock(PMLParser.StatementBlockContext ctx) { } + @Override public void exitNegateExpression(PMLParser.NegateExpressionContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void enterExpression(PMLParser.ExpressionContext ctx) { } + @Override public void enterLogicalExpression(PMLParser.LogicalExpressionContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitExpression(PMLParser.ExpressionContext ctx) { } + @Override public void exitLogicalExpression(PMLParser.LogicalExpressionContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void enterArray(PMLParser.ArrayContext ctx) { } + @Override public void enterPlusExpression(PMLParser.PlusExpressionContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitArray(PMLParser.ArrayContext ctx) { } + @Override public void exitPlusExpression(PMLParser.PlusExpressionContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void enterMap(PMLParser.MapContext ctx) { } + @Override public void enterFunctionInvokeExpression(PMLParser.FunctionInvokeExpressionContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitMap(PMLParser.MapContext ctx) { } + @Override public void exitFunctionInvokeExpression(PMLParser.FunctionInvokeExpressionContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void enterMapEntry(PMLParser.MapEntryContext ctx) { } + @Override public void enterVariableReferenceExpression(PMLParser.VariableReferenceExpressionContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitMapEntry(PMLParser.MapEntryContext ctx) { } + @Override public void exitVariableReferenceExpression(PMLParser.VariableReferenceExpressionContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void enterEntryReference(PMLParser.EntryReferenceContext ctx) { } + @Override public void enterLiteralExpression(PMLParser.LiteralExpressionContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitEntryReference(PMLParser.EntryReferenceContext ctx) { } + @Override public void exitLiteralExpression(PMLParser.LiteralExpressionContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void enterStringLiteral(PMLParser.StringLiteralContext ctx) { } + @Override public void enterParenExpression(PMLParser.ParenExpressionContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitStringLiteral(PMLParser.StringLiteralContext ctx) { } + @Override public void exitParenExpression(PMLParser.ParenExpressionContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void enterBooleanLiteral(PMLParser.BooleanLiteralContext ctx) { } + @Override public void enterEqualsExpression(PMLParser.EqualsExpressionContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitBooleanLiteral(PMLParser.BooleanLiteralContext ctx) { } + @Override public void exitEqualsExpression(PMLParser.EqualsExpressionContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void enterNumberLiteral(PMLParser.NumberLiteralContext ctx) { } + @Override public void enterExpressionList(PMLParser.ExpressionListContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitNumberLiteral(PMLParser.NumberLiteralContext ctx) { } + @Override public void exitExpressionList(PMLParser.ExpressionListContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterStringLiteral(PMLParser.StringLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitStringLiteral(PMLParser.StringLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterBoolLiteral(PMLParser.BoolLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitBoolLiteral(PMLParser.BoolLiteralContext ctx) { } /** * {@inheritDoc} * @@ -851,6 +1020,90 @@ public class PMLBaseListener implements PMLListener { *

The default implementation does nothing.

*/ @Override public void exitMapLiteral(PMLParser.MapLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterStringLit(PMLParser.StringLitContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitStringLit(PMLParser.StringLitContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterBoolLit(PMLParser.BoolLitContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitBoolLit(PMLParser.BoolLitContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterArrayLit(PMLParser.ArrayLitContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitArrayLit(PMLParser.ArrayLitContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterStringArrayLit(PMLParser.StringArrayLitContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitStringArrayLit(PMLParser.StringArrayLitContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterMapLit(PMLParser.MapLitContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitMapLit(PMLParser.MapLitContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterElement(PMLParser.ElementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitElement(PMLParser.ElementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterReferenceByIndex(PMLParser.ReferenceByIndexContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitReferenceByIndex(PMLParser.ReferenceByIndexContext ctx) { } /** * {@inheritDoc} * @@ -868,13 +1121,37 @@ public class PMLBaseListener implements PMLListener { * *

The default implementation does nothing.

*/ - @Override public void enterReferenceByEntry(PMLParser.ReferenceByEntryContext ctx) { } + @Override public void enterBracketIndex(PMLParser.BracketIndexContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitBracketIndex(PMLParser.BracketIndexContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDotIndex(PMLParser.DotIndexContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDotIndex(PMLParser.DotIndexContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterId(PMLParser.IdContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitReferenceByEntry(PMLParser.ReferenceByEntryContext ctx) { } + @Override public void exitId(PMLParser.IdContext ctx) { } /** * {@inheritDoc} * diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/antlr/PMLBaseVisitor.java b/src/main/java/gov/nist/csd/pm/pap/pml/antlr/PMLParserBaseVisitor.java similarity index 65% rename from src/main/java/gov/nist/csd/pm/policy/pml/antlr/PMLBaseVisitor.java rename to src/main/java/gov/nist/csd/pm/pap/pml/antlr/PMLParserBaseVisitor.java index 4d53b3f4d..970abca2c 100644 --- a/src/main/java/gov/nist/csd/pm/policy/pml/antlr/PMLBaseVisitor.java +++ b/src/main/java/gov/nist/csd/pm/pap/pml/antlr/PMLParserBaseVisitor.java @@ -1,16 +1,17 @@ -// Generated from PML.g4 by ANTLR 4.8 -package gov.nist.csd.pm.policy.pml.antlr; +// Generated from PMLParser.g4 by ANTLR 4.13.1 +package gov.nist.csd.pm.pap.pml.antlr; import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor; /** - * This class provides an empty implementation of {@link PMLVisitor}, + * This class provides an empty implementation of {@link PMLParserVisitor}, * which can be extended to create a visitor which only needs to handle a subset * of the available methods. * * @param The return type of the visit operation. Use {@link Void} for * operations with no return type. */ -public class PMLBaseVisitor extends AbstractParseTreeVisitor implements PMLVisitor { +@SuppressWarnings("CheckReturnValue") +public class PMLParserBaseVisitor extends AbstractParseTreeVisitor implements PMLParserVisitor { /** * {@inheritDoc} * @@ -25,6 +26,13 @@ public class PMLBaseVisitor extends AbstractParseTreeVisitor implements PM * {@link #visitChildren} on {@code ctx}.

*/ @Override public T visitStatement(PMLParser.StatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitStatementBlock(PMLParser.StatementBlockContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * @@ -38,14 +46,14 @@ public class PMLBaseVisitor extends AbstractParseTreeVisitor implements PM *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitCreateAttributeStatement(PMLParser.CreateAttributeStatementContext ctx) { return visitChildren(ctx); } + @Override public T visitCreateNonPCStatement(PMLParser.CreateNonPCStatementContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitCreateUserOrObjectStatement(PMLParser.CreateUserOrObjectStatementContext ctx) { return visitChildren(ctx); } + @Override public T visitNonPCNodeType(PMLParser.NonPCNodeTypeContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * @@ -66,28 +74,56 @@ public class PMLBaseVisitor extends AbstractParseTreeVisitor implements PM *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitAnyUserSubject(PMLParser.AnyUserSubjectContext ctx) { return visitChildren(ctx); } + @Override public T visitAnyUserPattern(PMLParser.AnyUserPatternContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitUserPattern(PMLParser.UserPatternContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBasicSubjectPatternExpression(PMLParser.BasicSubjectPatternExpressionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitParenSubjectPatternExpression(PMLParser.ParenSubjectPatternExpressionContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitUserSubject(PMLParser.UserSubjectContext ctx) { return visitChildren(ctx); } + @Override public T visitNegateSubjectPatternExpression(PMLParser.NegateSubjectPatternExpressionContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitUsersListSubject(PMLParser.UsersListSubjectContext ctx) { return visitChildren(ctx); } + @Override public T visitLogicalSubjectPatternExpression(PMLParser.LogicalSubjectPatternExpressionContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitUserAttrSubject(PMLParser.UserAttrSubjectContext ctx) { return visitChildren(ctx); } + @Override public T visitInSubject(PMLParser.InSubjectContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitUsernameSubject(PMLParser.UsernameSubjectContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * @@ -101,77 +137,112 @@ public class PMLBaseVisitor extends AbstractParseTreeVisitor implements PM *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitPolicyElement(PMLParser.PolicyElementContext ctx) { return visitChildren(ctx); } + @Override public T visitAnyOperation(PMLParser.AnyOperationContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitAnyPolicyElement(PMLParser.AnyPolicyElementContext ctx) { return visitChildren(ctx); } + @Override public T visitIDOperation(PMLParser.IDOperationContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitAnyContainedIn(PMLParser.AnyContainedInContext ctx) { return visitChildren(ctx); } + @Override public T visitOperandPattern(PMLParser.OperandPatternContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitAnyOfSet(PMLParser.AnyOfSetContext ctx) { return visitChildren(ctx); } + @Override public T visitOperandPatternElement(PMLParser.OperandPatternElementContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitAnyPe(PMLParser.AnyPeContext ctx) { return visitChildren(ctx); } + @Override public T visitOperandPatternExpressionArray(PMLParser.OperandPatternExpressionArrayContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitResponse(PMLParser.ResponseContext ctx) { return visitChildren(ctx); } + @Override public T visitParenOperandPatternExpression(PMLParser.ParenOperandPatternExpressionContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitResponseBlock(PMLParser.ResponseBlockContext ctx) { return visitChildren(ctx); } + @Override public T visitNegateOperandPatternExpression(PMLParser.NegateOperandPatternExpressionContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitResponseStatement(PMLParser.ResponseStatementContext ctx) { return visitChildren(ctx); } + @Override public T visitBasicOperandPatternExpression(PMLParser.BasicOperandPatternExpressionContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitCreateProhibitionStatement(PMLParser.CreateProhibitionStatementContext ctx) { return visitChildren(ctx); } + @Override public T visitLogicalOperandPatternExpression(PMLParser.LogicalOperandPatternExpressionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAnyPolicyElement(PMLParser.AnyPolicyElementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitInPolicyElement(PMLParser.InPolicyElementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPolicyElement(PMLParser.PolicyElementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitResponse(PMLParser.ResponseContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitProhibitionContainerList(PMLParser.ProhibitionContainerListContext ctx) { return visitChildren(ctx); } + @Override public T visitResponseBlock(PMLParser.ResponseBlockContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitProhibitionContainerExpression(PMLParser.ProhibitionContainerExpressionContext ctx) { return visitChildren(ctx); } + @Override public T visitResponseStatement(PMLParser.ResponseStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCreateProhibitionStatement(PMLParser.CreateProhibitionStatementContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * @@ -213,7 +284,7 @@ public class PMLBaseVisitor extends AbstractParseTreeVisitor implements PM *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitSetResourceAccessRightsStatement(PMLParser.SetResourceAccessRightsStatementContext ctx) { return visitChildren(ctx); } + @Override public T visitSetResourceOperationsStatement(PMLParser.SetResourceOperationsStatementContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * @@ -262,98 +333,112 @@ public class PMLBaseVisitor extends AbstractParseTreeVisitor implements PM *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitVariableDeclarationStatement(PMLParser.VariableDeclarationStatementContext ctx) { return visitChildren(ctx); } + @Override public T visitVarDeclaration(PMLParser.VarDeclarationContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitFunctionDefinitionStatement(PMLParser.FunctionDefinitionStatementContext ctx) { return visitChildren(ctx); } + @Override public T visitShortDeclaration(PMLParser.ShortDeclarationContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitFormalArgList(PMLParser.FormalArgListContext ctx) { return visitChildren(ctx); } + @Override public T visitVarSpec(PMLParser.VarSpecContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitFormalArg(PMLParser.FormalArgContext ctx) { return visitChildren(ctx); } + @Override public T visitVariableAssignmentStatement(PMLParser.VariableAssignmentStatementContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitFormalArgType(PMLParser.FormalArgTypeContext ctx) { return visitChildren(ctx); } + @Override public T visitFunctionDefinitionStatement(PMLParser.FunctionDefinitionStatementContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitFunctionReturnStatement(PMLParser.FunctionReturnStatementContext ctx) { return visitChildren(ctx); } + @Override public T visitFunctionSignature(PMLParser.FunctionSignatureContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitVariableReturnType(PMLParser.VariableReturnTypeContext ctx) { return visitChildren(ctx); } + @Override public T visitFormalArgList(PMLParser.FormalArgListContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitVoidReturnType(PMLParser.VoidReturnTypeContext ctx) { return visitChildren(ctx); } + @Override public T visitFormalArg(PMLParser.FormalArgContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitFuncBody(PMLParser.FuncBodyContext ctx) { return visitChildren(ctx); } + @Override public T visitReturnStatement(PMLParser.ReturnStatementContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitForeachStatement(PMLParser.ForeachStatementContext ctx) { return visitChildren(ctx); } + @Override public T visitCheckStatement(PMLParser.CheckStatementContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitForRangeStatement(PMLParser.ForRangeStatementContext ctx) { return visitChildren(ctx); } + @Override public T visitCheckStatementBlock(PMLParser.CheckStatementBlockContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitBreakStatement(PMLParser.BreakStatementContext ctx) { return visitChildren(ctx); } + @Override public T visitIdArr(PMLParser.IdArrContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitContinueStatement(PMLParser.ContinueStatementContext ctx) { return visitChildren(ctx); } + @Override public T visitFunctionInvokeStatement(PMLParser.FunctionInvokeStatementContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitFunctionInvokeStatement(PMLParser.FunctionInvokeStatementContext ctx) { return visitChildren(ctx); } + @Override public T visitForeachStatement(PMLParser.ForeachStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBreakStatement(PMLParser.BreakStatementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitContinueStatement(PMLParser.ContinueStatementContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * @@ -430,63 +515,77 @@ public class PMLBaseVisitor extends AbstractParseTreeVisitor implements PM *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitStatementBlock(PMLParser.StatementBlockContext ctx) { return visitChildren(ctx); } + @Override public T visitNegateExpression(PMLParser.NegateExpressionContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitExpression(PMLParser.ExpressionContext ctx) { return visitChildren(ctx); } + @Override public T visitLogicalExpression(PMLParser.LogicalExpressionContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitArray(PMLParser.ArrayContext ctx) { return visitChildren(ctx); } + @Override public T visitPlusExpression(PMLParser.PlusExpressionContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitMap(PMLParser.MapContext ctx) { return visitChildren(ctx); } + @Override public T visitFunctionInvokeExpression(PMLParser.FunctionInvokeExpressionContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitMapEntry(PMLParser.MapEntryContext ctx) { return visitChildren(ctx); } + @Override public T visitVariableReferenceExpression(PMLParser.VariableReferenceExpressionContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitEntryReference(PMLParser.EntryReferenceContext ctx) { return visitChildren(ctx); } + @Override public T visitLiteralExpression(PMLParser.LiteralExpressionContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitStringLiteral(PMLParser.StringLiteralContext ctx) { return visitChildren(ctx); } + @Override public T visitParenExpression(PMLParser.ParenExpressionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitEqualsExpression(PMLParser.EqualsExpressionContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitBooleanLiteral(PMLParser.BooleanLiteralContext ctx) { return visitChildren(ctx); } + @Override public T visitExpressionList(PMLParser.ExpressionListContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitNumberLiteral(PMLParser.NumberLiteralContext ctx) { return visitChildren(ctx); } + @Override public T visitStringLiteral(PMLParser.StringLiteralContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBoolLiteral(PMLParser.BoolLiteralContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * @@ -501,6 +600,55 @@ public class PMLBaseVisitor extends AbstractParseTreeVisitor implements PM * {@link #visitChildren} on {@code ctx}.

*/ @Override public T visitMapLiteral(PMLParser.MapLiteralContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitStringLit(PMLParser.StringLitContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBoolLit(PMLParser.BoolLitContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitArrayLit(PMLParser.ArrayLitContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitStringArrayLit(PMLParser.StringArrayLitContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitMapLit(PMLParser.MapLitContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitElement(PMLParser.ElementContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitReferenceByIndex(PMLParser.ReferenceByIndexContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * @@ -514,7 +662,21 @@ public class PMLBaseVisitor extends AbstractParseTreeVisitor implements PM *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitReferenceByEntry(PMLParser.ReferenceByEntryContext ctx) { return visitChildren(ctx); } + @Override public T visitBracketIndex(PMLParser.BracketIndexContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDotIndex(PMLParser.DotIndexContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitId(PMLParser.IdContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/antlr/PMLListener.java b/src/main/java/gov/nist/csd/pm/pap/pml/antlr/PMLParserListener.java similarity index 50% rename from src/main/java/gov/nist/csd/pm/policy/pml/antlr/PMLListener.java rename to src/main/java/gov/nist/csd/pm/pap/pml/antlr/PMLParserListener.java index 7507a882b..3428e8f64 100644 --- a/src/main/java/gov/nist/csd/pm/policy/pml/antlr/PMLListener.java +++ b/src/main/java/gov/nist/csd/pm/pap/pml/antlr/PMLParserListener.java @@ -1,12 +1,12 @@ -// Generated from PML.g4 by ANTLR 4.8 -package gov.nist.csd.pm.policy.pml.antlr; +// Generated from PMLParser.g4 by ANTLR 4.13.1 +package gov.nist.csd.pm.pap.pml.antlr; import org.antlr.v4.runtime.tree.ParseTreeListener; /** * This interface defines a complete listener for a parse tree produced by * {@link PMLParser}. */ -public interface PMLListener extends ParseTreeListener { +public interface PMLParserListener extends ParseTreeListener { /** * Enter a parse tree produced by {@link PMLParser#pml}. * @param ctx the parse tree @@ -27,6 +27,16 @@ public interface PMLListener extends ParseTreeListener { * @param ctx the parse tree */ void exitStatement(PMLParser.StatementContext ctx); + /** + * Enter a parse tree produced by {@link PMLParser#statementBlock}. + * @param ctx the parse tree + */ + void enterStatementBlock(PMLParser.StatementBlockContext ctx); + /** + * Exit a parse tree produced by {@link PMLParser#statementBlock}. + * @param ctx the parse tree + */ + void exitStatementBlock(PMLParser.StatementBlockContext ctx); /** * Enter a parse tree produced by {@link PMLParser#createPolicyStatement}. * @param ctx the parse tree @@ -38,25 +48,25 @@ public interface PMLListener extends ParseTreeListener { */ void exitCreatePolicyStatement(PMLParser.CreatePolicyStatementContext ctx); /** - * Enter a parse tree produced by {@link PMLParser#createAttributeStatement}. + * Enter a parse tree produced by {@link PMLParser#createNonPCStatement}. * @param ctx the parse tree */ - void enterCreateAttributeStatement(PMLParser.CreateAttributeStatementContext ctx); + void enterCreateNonPCStatement(PMLParser.CreateNonPCStatementContext ctx); /** - * Exit a parse tree produced by {@link PMLParser#createAttributeStatement}. + * Exit a parse tree produced by {@link PMLParser#createNonPCStatement}. * @param ctx the parse tree */ - void exitCreateAttributeStatement(PMLParser.CreateAttributeStatementContext ctx); + void exitCreateNonPCStatement(PMLParser.CreateNonPCStatementContext ctx); /** - * Enter a parse tree produced by {@link PMLParser#createUserOrObjectStatement}. + * Enter a parse tree produced by {@link PMLParser#nonPCNodeType}. * @param ctx the parse tree */ - void enterCreateUserOrObjectStatement(PMLParser.CreateUserOrObjectStatementContext ctx); + void enterNonPCNodeType(PMLParser.NonPCNodeTypeContext ctx); /** - * Exit a parse tree produced by {@link PMLParser#createUserOrObjectStatement}. + * Exit a parse tree produced by {@link PMLParser#nonPCNodeType}. * @param ctx the parse tree */ - void exitCreateUserOrObjectStatement(PMLParser.CreateUserOrObjectStatementContext ctx); + void exitNonPCNodeType(PMLParser.NonPCNodeTypeContext ctx); /** * Enter a parse tree produced by {@link PMLParser#createObligationStatement}. * @param ctx the parse tree @@ -78,123 +88,251 @@ public interface PMLListener extends ParseTreeListener { */ void exitCreateRuleStatement(PMLParser.CreateRuleStatementContext ctx); /** - * Enter a parse tree produced by the {@code AnyUserSubject} - * labeled alternative in {@link PMLParser#subjectClause}. + * Enter a parse tree produced by the {@code AnyUserPattern} + * labeled alternative in {@link PMLParser#subjectPattern}. + * @param ctx the parse tree + */ + void enterAnyUserPattern(PMLParser.AnyUserPatternContext ctx); + /** + * Exit a parse tree produced by the {@code AnyUserPattern} + * labeled alternative in {@link PMLParser#subjectPattern}. + * @param ctx the parse tree + */ + void exitAnyUserPattern(PMLParser.AnyUserPatternContext ctx); + /** + * Enter a parse tree produced by the {@code UserPattern} + * labeled alternative in {@link PMLParser#subjectPattern}. + * @param ctx the parse tree + */ + void enterUserPattern(PMLParser.UserPatternContext ctx); + /** + * Exit a parse tree produced by the {@code UserPattern} + * labeled alternative in {@link PMLParser#subjectPattern}. + * @param ctx the parse tree + */ + void exitUserPattern(PMLParser.UserPatternContext ctx); + /** + * Enter a parse tree produced by the {@code BasicSubjectPatternExpression} + * labeled alternative in {@link PMLParser#subjectPatternExpression}. + * @param ctx the parse tree + */ + void enterBasicSubjectPatternExpression(PMLParser.BasicSubjectPatternExpressionContext ctx); + /** + * Exit a parse tree produced by the {@code BasicSubjectPatternExpression} + * labeled alternative in {@link PMLParser#subjectPatternExpression}. + * @param ctx the parse tree + */ + void exitBasicSubjectPatternExpression(PMLParser.BasicSubjectPatternExpressionContext ctx); + /** + * Enter a parse tree produced by the {@code ParenSubjectPatternExpression} + * labeled alternative in {@link PMLParser#subjectPatternExpression}. + * @param ctx the parse tree + */ + void enterParenSubjectPatternExpression(PMLParser.ParenSubjectPatternExpressionContext ctx); + /** + * Exit a parse tree produced by the {@code ParenSubjectPatternExpression} + * labeled alternative in {@link PMLParser#subjectPatternExpression}. + * @param ctx the parse tree + */ + void exitParenSubjectPatternExpression(PMLParser.ParenSubjectPatternExpressionContext ctx); + /** + * Enter a parse tree produced by the {@code NegateSubjectPatternExpression} + * labeled alternative in {@link PMLParser#subjectPatternExpression}. * @param ctx the parse tree */ - void enterAnyUserSubject(PMLParser.AnyUserSubjectContext ctx); + void enterNegateSubjectPatternExpression(PMLParser.NegateSubjectPatternExpressionContext ctx); /** - * Exit a parse tree produced by the {@code AnyUserSubject} - * labeled alternative in {@link PMLParser#subjectClause}. + * Exit a parse tree produced by the {@code NegateSubjectPatternExpression} + * labeled alternative in {@link PMLParser#subjectPatternExpression}. * @param ctx the parse tree */ - void exitAnyUserSubject(PMLParser.AnyUserSubjectContext ctx); + void exitNegateSubjectPatternExpression(PMLParser.NegateSubjectPatternExpressionContext ctx); /** - * Enter a parse tree produced by the {@code UserSubject} - * labeled alternative in {@link PMLParser#subjectClause}. + * Enter a parse tree produced by the {@code LogicalSubjectPatternExpression} + * labeled alternative in {@link PMLParser#subjectPatternExpression}. * @param ctx the parse tree */ - void enterUserSubject(PMLParser.UserSubjectContext ctx); + void enterLogicalSubjectPatternExpression(PMLParser.LogicalSubjectPatternExpressionContext ctx); /** - * Exit a parse tree produced by the {@code UserSubject} - * labeled alternative in {@link PMLParser#subjectClause}. + * Exit a parse tree produced by the {@code LogicalSubjectPatternExpression} + * labeled alternative in {@link PMLParser#subjectPatternExpression}. * @param ctx the parse tree */ - void exitUserSubject(PMLParser.UserSubjectContext ctx); + void exitLogicalSubjectPatternExpression(PMLParser.LogicalSubjectPatternExpressionContext ctx); /** - * Enter a parse tree produced by the {@code UsersListSubject} - * labeled alternative in {@link PMLParser#subjectClause}. + * Enter a parse tree produced by the {@code InSubject} + * labeled alternative in {@link PMLParser#basicSubjectPatternExpr}. * @param ctx the parse tree */ - void enterUsersListSubject(PMLParser.UsersListSubjectContext ctx); + void enterInSubject(PMLParser.InSubjectContext ctx); /** - * Exit a parse tree produced by the {@code UsersListSubject} - * labeled alternative in {@link PMLParser#subjectClause}. + * Exit a parse tree produced by the {@code InSubject} + * labeled alternative in {@link PMLParser#basicSubjectPatternExpr}. * @param ctx the parse tree */ - void exitUsersListSubject(PMLParser.UsersListSubjectContext ctx); + void exitInSubject(PMLParser.InSubjectContext ctx); /** - * Enter a parse tree produced by the {@code UserAttrSubject} - * labeled alternative in {@link PMLParser#subjectClause}. + * Enter a parse tree produced by the {@code UsernameSubject} + * labeled alternative in {@link PMLParser#basicSubjectPatternExpr}. * @param ctx the parse tree */ - void enterUserAttrSubject(PMLParser.UserAttrSubjectContext ctx); + void enterUsernameSubject(PMLParser.UsernameSubjectContext ctx); /** - * Exit a parse tree produced by the {@code UserAttrSubject} - * labeled alternative in {@link PMLParser#subjectClause}. + * Exit a parse tree produced by the {@code UsernameSubject} + * labeled alternative in {@link PMLParser#basicSubjectPatternExpr}. * @param ctx the parse tree */ - void exitUserAttrSubject(PMLParser.UserAttrSubjectContext ctx); + void exitUsernameSubject(PMLParser.UsernameSubjectContext ctx); /** * Enter a parse tree produced by the {@code ProcessSubject} - * labeled alternative in {@link PMLParser#subjectClause}. + * labeled alternative in {@link PMLParser#basicSubjectPatternExpr}. * @param ctx the parse tree */ void enterProcessSubject(PMLParser.ProcessSubjectContext ctx); /** * Exit a parse tree produced by the {@code ProcessSubject} - * labeled alternative in {@link PMLParser#subjectClause}. + * labeled alternative in {@link PMLParser#basicSubjectPatternExpr}. * @param ctx the parse tree */ void exitProcessSubject(PMLParser.ProcessSubjectContext ctx); /** - * Enter a parse tree produced by the {@code PolicyElement} - * labeled alternative in {@link PMLParser#onClause}. + * Enter a parse tree produced by the {@code AnyOperation} + * labeled alternative in {@link PMLParser#operationPattern}. * @param ctx the parse tree */ - void enterPolicyElement(PMLParser.PolicyElementContext ctx); + void enterAnyOperation(PMLParser.AnyOperationContext ctx); /** - * Exit a parse tree produced by the {@code PolicyElement} - * labeled alternative in {@link PMLParser#onClause}. + * Exit a parse tree produced by the {@code AnyOperation} + * labeled alternative in {@link PMLParser#operationPattern}. * @param ctx the parse tree */ - void exitPolicyElement(PMLParser.PolicyElementContext ctx); + void exitAnyOperation(PMLParser.AnyOperationContext ctx); /** - * Enter a parse tree produced by the {@code AnyPolicyElement} - * labeled alternative in {@link PMLParser#onClause}. + * Enter a parse tree produced by the {@code IDOperation} + * labeled alternative in {@link PMLParser#operationPattern}. * @param ctx the parse tree */ - void enterAnyPolicyElement(PMLParser.AnyPolicyElementContext ctx); + void enterIDOperation(PMLParser.IDOperationContext ctx); /** - * Exit a parse tree produced by the {@code AnyPolicyElement} - * labeled alternative in {@link PMLParser#onClause}. + * Exit a parse tree produced by the {@code IDOperation} + * labeled alternative in {@link PMLParser#operationPattern}. * @param ctx the parse tree */ - void exitAnyPolicyElement(PMLParser.AnyPolicyElementContext ctx); + void exitIDOperation(PMLParser.IDOperationContext ctx); + /** + * Enter a parse tree produced by {@link PMLParser#operandPattern}. + * @param ctx the parse tree + */ + void enterOperandPattern(PMLParser.OperandPatternContext ctx); + /** + * Exit a parse tree produced by {@link PMLParser#operandPattern}. + * @param ctx the parse tree + */ + void exitOperandPattern(PMLParser.OperandPatternContext ctx); + /** + * Enter a parse tree produced by {@link PMLParser#operandPatternElement}. + * @param ctx the parse tree + */ + void enterOperandPatternElement(PMLParser.OperandPatternElementContext ctx); + /** + * Exit a parse tree produced by {@link PMLParser#operandPatternElement}. + * @param ctx the parse tree + */ + void exitOperandPatternElement(PMLParser.OperandPatternElementContext ctx); + /** + * Enter a parse tree produced by {@link PMLParser#operandPatternExpressionArray}. + * @param ctx the parse tree + */ + void enterOperandPatternExpressionArray(PMLParser.OperandPatternExpressionArrayContext ctx); + /** + * Exit a parse tree produced by {@link PMLParser#operandPatternExpressionArray}. + * @param ctx the parse tree + */ + void exitOperandPatternExpressionArray(PMLParser.OperandPatternExpressionArrayContext ctx); + /** + * Enter a parse tree produced by the {@code ParenOperandPatternExpression} + * labeled alternative in {@link PMLParser#operandPatternExpression}. + * @param ctx the parse tree + */ + void enterParenOperandPatternExpression(PMLParser.ParenOperandPatternExpressionContext ctx); + /** + * Exit a parse tree produced by the {@code ParenOperandPatternExpression} + * labeled alternative in {@link PMLParser#operandPatternExpression}. + * @param ctx the parse tree + */ + void exitParenOperandPatternExpression(PMLParser.ParenOperandPatternExpressionContext ctx); /** - * Enter a parse tree produced by the {@code AnyContainedIn} - * labeled alternative in {@link PMLParser#onClause}. + * Enter a parse tree produced by the {@code NegateOperandPatternExpression} + * labeled alternative in {@link PMLParser#operandPatternExpression}. * @param ctx the parse tree */ - void enterAnyContainedIn(PMLParser.AnyContainedInContext ctx); + void enterNegateOperandPatternExpression(PMLParser.NegateOperandPatternExpressionContext ctx); /** - * Exit a parse tree produced by the {@code AnyContainedIn} - * labeled alternative in {@link PMLParser#onClause}. + * Exit a parse tree produced by the {@code NegateOperandPatternExpression} + * labeled alternative in {@link PMLParser#operandPatternExpression}. + * @param ctx the parse tree + */ + void exitNegateOperandPatternExpression(PMLParser.NegateOperandPatternExpressionContext ctx); + /** + * Enter a parse tree produced by the {@code BasicOperandPatternExpression} + * labeled alternative in {@link PMLParser#operandPatternExpression}. + * @param ctx the parse tree + */ + void enterBasicOperandPatternExpression(PMLParser.BasicOperandPatternExpressionContext ctx); + /** + * Exit a parse tree produced by the {@code BasicOperandPatternExpression} + * labeled alternative in {@link PMLParser#operandPatternExpression}. + * @param ctx the parse tree + */ + void exitBasicOperandPatternExpression(PMLParser.BasicOperandPatternExpressionContext ctx); + /** + * Enter a parse tree produced by the {@code LogicalOperandPatternExpression} + * labeled alternative in {@link PMLParser#operandPatternExpression}. + * @param ctx the parse tree + */ + void enterLogicalOperandPatternExpression(PMLParser.LogicalOperandPatternExpressionContext ctx); + /** + * Exit a parse tree produced by the {@code LogicalOperandPatternExpression} + * labeled alternative in {@link PMLParser#operandPatternExpression}. + * @param ctx the parse tree + */ + void exitLogicalOperandPatternExpression(PMLParser.LogicalOperandPatternExpressionContext ctx); + /** + * Enter a parse tree produced by the {@code AnyPolicyElement} + * labeled alternative in {@link PMLParser#basicOperandPatternExpr}. + * @param ctx the parse tree + */ + void enterAnyPolicyElement(PMLParser.AnyPolicyElementContext ctx); + /** + * Exit a parse tree produced by the {@code AnyPolicyElement} + * labeled alternative in {@link PMLParser#basicOperandPatternExpr}. * @param ctx the parse tree */ - void exitAnyContainedIn(PMLParser.AnyContainedInContext ctx); + void exitAnyPolicyElement(PMLParser.AnyPolicyElementContext ctx); /** - * Enter a parse tree produced by the {@code AnyOfSet} - * labeled alternative in {@link PMLParser#onClause}. + * Enter a parse tree produced by the {@code InPolicyElement} + * labeled alternative in {@link PMLParser#basicOperandPatternExpr}. * @param ctx the parse tree */ - void enterAnyOfSet(PMLParser.AnyOfSetContext ctx); + void enterInPolicyElement(PMLParser.InPolicyElementContext ctx); /** - * Exit a parse tree produced by the {@code AnyOfSet} - * labeled alternative in {@link PMLParser#onClause}. + * Exit a parse tree produced by the {@code InPolicyElement} + * labeled alternative in {@link PMLParser#basicOperandPatternExpr}. * @param ctx the parse tree */ - void exitAnyOfSet(PMLParser.AnyOfSetContext ctx); + void exitInPolicyElement(PMLParser.InPolicyElementContext ctx); /** - * Enter a parse tree produced by {@link PMLParser#anyPe}. + * Enter a parse tree produced by the {@code PolicyElement} + * labeled alternative in {@link PMLParser#basicOperandPatternExpr}. * @param ctx the parse tree */ - void enterAnyPe(PMLParser.AnyPeContext ctx); + void enterPolicyElement(PMLParser.PolicyElementContext ctx); /** - * Exit a parse tree produced by {@link PMLParser#anyPe}. + * Exit a parse tree produced by the {@code PolicyElement} + * labeled alternative in {@link PMLParser#basicOperandPatternExpr}. * @param ctx the parse tree */ - void exitAnyPe(PMLParser.AnyPeContext ctx); + void exitPolicyElement(PMLParser.PolicyElementContext ctx); /** * Enter a parse tree produced by {@link PMLParser#response}. * @param ctx the parse tree @@ -235,26 +373,6 @@ public interface PMLListener extends ParseTreeListener { * @param ctx the parse tree */ void exitCreateProhibitionStatement(PMLParser.CreateProhibitionStatementContext ctx); - /** - * Enter a parse tree produced by {@link PMLParser#prohibitionContainerList}. - * @param ctx the parse tree - */ - void enterProhibitionContainerList(PMLParser.ProhibitionContainerListContext ctx); - /** - * Exit a parse tree produced by {@link PMLParser#prohibitionContainerList}. - * @param ctx the parse tree - */ - void exitProhibitionContainerList(PMLParser.ProhibitionContainerListContext ctx); - /** - * Enter a parse tree produced by {@link PMLParser#prohibitionContainerExpression}. - * @param ctx the parse tree - */ - void enterProhibitionContainerExpression(PMLParser.ProhibitionContainerExpressionContext ctx); - /** - * Exit a parse tree produced by {@link PMLParser#prohibitionContainerExpression}. - * @param ctx the parse tree - */ - void exitProhibitionContainerExpression(PMLParser.ProhibitionContainerExpressionContext ctx); /** * Enter a parse tree produced by {@link PMLParser#setNodePropertiesStatement}. * @param ctx the parse tree @@ -306,15 +424,15 @@ public interface PMLListener extends ParseTreeListener { */ void exitDissociateStatement(PMLParser.DissociateStatementContext ctx); /** - * Enter a parse tree produced by {@link PMLParser#setResourceAccessRightsStatement}. + * Enter a parse tree produced by {@link PMLParser#setResourceOperationsStatement}. * @param ctx the parse tree */ - void enterSetResourceAccessRightsStatement(PMLParser.SetResourceAccessRightsStatementContext ctx); + void enterSetResourceOperationsStatement(PMLParser.SetResourceOperationsStatementContext ctx); /** - * Exit a parse tree produced by {@link PMLParser#setResourceAccessRightsStatement}. + * Exit a parse tree produced by {@link PMLParser#setResourceOperationsStatement}. * @param ctx the parse tree */ - void exitSetResourceAccessRightsStatement(PMLParser.SetResourceAccessRightsStatementContext ctx); + void exitSetResourceOperationsStatement(PMLParser.SetResourceOperationsStatementContext ctx); /** * Enter a parse tree produced by {@link PMLParser#deleteStatement}. * @param ctx the parse tree @@ -382,15 +500,49 @@ public interface PMLListener extends ParseTreeListener { */ void exitDeleteRuleStatement(PMLParser.DeleteRuleStatementContext ctx); /** - * Enter a parse tree produced by {@link PMLParser#variableDeclarationStatement}. + * Enter a parse tree produced by the {@code VarDeclaration} + * labeled alternative in {@link PMLParser#variableDeclarationStatement}. + * @param ctx the parse tree + */ + void enterVarDeclaration(PMLParser.VarDeclarationContext ctx); + /** + * Exit a parse tree produced by the {@code VarDeclaration} + * labeled alternative in {@link PMLParser#variableDeclarationStatement}. + * @param ctx the parse tree + */ + void exitVarDeclaration(PMLParser.VarDeclarationContext ctx); + /** + * Enter a parse tree produced by the {@code ShortDeclaration} + * labeled alternative in {@link PMLParser#variableDeclarationStatement}. + * @param ctx the parse tree + */ + void enterShortDeclaration(PMLParser.ShortDeclarationContext ctx); + /** + * Exit a parse tree produced by the {@code ShortDeclaration} + * labeled alternative in {@link PMLParser#variableDeclarationStatement}. + * @param ctx the parse tree + */ + void exitShortDeclaration(PMLParser.ShortDeclarationContext ctx); + /** + * Enter a parse tree produced by {@link PMLParser#varSpec}. * @param ctx the parse tree */ - void enterVariableDeclarationStatement(PMLParser.VariableDeclarationStatementContext ctx); + void enterVarSpec(PMLParser.VarSpecContext ctx); /** - * Exit a parse tree produced by {@link PMLParser#variableDeclarationStatement}. + * Exit a parse tree produced by {@link PMLParser#varSpec}. * @param ctx the parse tree */ - void exitVariableDeclarationStatement(PMLParser.VariableDeclarationStatementContext ctx); + void exitVarSpec(PMLParser.VarSpecContext ctx); + /** + * Enter a parse tree produced by {@link PMLParser#variableAssignmentStatement}. + * @param ctx the parse tree + */ + void enterVariableAssignmentStatement(PMLParser.VariableAssignmentStatementContext ctx); + /** + * Exit a parse tree produced by {@link PMLParser#variableAssignmentStatement}. + * @param ctx the parse tree + */ + void exitVariableAssignmentStatement(PMLParser.VariableAssignmentStatementContext ctx); /** * Enter a parse tree produced by {@link PMLParser#functionDefinitionStatement}. * @param ctx the parse tree @@ -401,6 +553,16 @@ public interface PMLListener extends ParseTreeListener { * @param ctx the parse tree */ void exitFunctionDefinitionStatement(PMLParser.FunctionDefinitionStatementContext ctx); + /** + * Enter a parse tree produced by {@link PMLParser#functionSignature}. + * @param ctx the parse tree + */ + void enterFunctionSignature(PMLParser.FunctionSignatureContext ctx); + /** + * Exit a parse tree produced by {@link PMLParser#functionSignature}. + * @param ctx the parse tree + */ + void exitFunctionSignature(PMLParser.FunctionSignatureContext ctx); /** * Enter a parse tree produced by {@link PMLParser#formalArgList}. * @param ctx the parse tree @@ -422,59 +584,55 @@ public interface PMLListener extends ParseTreeListener { */ void exitFormalArg(PMLParser.FormalArgContext ctx); /** - * Enter a parse tree produced by {@link PMLParser#formalArgType}. + * Enter a parse tree produced by {@link PMLParser#returnStatement}. * @param ctx the parse tree */ - void enterFormalArgType(PMLParser.FormalArgTypeContext ctx); + void enterReturnStatement(PMLParser.ReturnStatementContext ctx); /** - * Exit a parse tree produced by {@link PMLParser#formalArgType}. + * Exit a parse tree produced by {@link PMLParser#returnStatement}. * @param ctx the parse tree */ - void exitFormalArgType(PMLParser.FormalArgTypeContext ctx); + void exitReturnStatement(PMLParser.ReturnStatementContext ctx); /** - * Enter a parse tree produced by {@link PMLParser#functionReturnStatement}. + * Enter a parse tree produced by {@link PMLParser#checkStatement}. * @param ctx the parse tree */ - void enterFunctionReturnStatement(PMLParser.FunctionReturnStatementContext ctx); + void enterCheckStatement(PMLParser.CheckStatementContext ctx); /** - * Exit a parse tree produced by {@link PMLParser#functionReturnStatement}. + * Exit a parse tree produced by {@link PMLParser#checkStatement}. * @param ctx the parse tree */ - void exitFunctionReturnStatement(PMLParser.FunctionReturnStatementContext ctx); + void exitCheckStatement(PMLParser.CheckStatementContext ctx); /** - * Enter a parse tree produced by the {@code VariableReturnType} - * labeled alternative in {@link PMLParser#funcReturnType}. + * Enter a parse tree produced by {@link PMLParser#checkStatementBlock}. * @param ctx the parse tree */ - void enterVariableReturnType(PMLParser.VariableReturnTypeContext ctx); + void enterCheckStatementBlock(PMLParser.CheckStatementBlockContext ctx); /** - * Exit a parse tree produced by the {@code VariableReturnType} - * labeled alternative in {@link PMLParser#funcReturnType}. + * Exit a parse tree produced by {@link PMLParser#checkStatementBlock}. * @param ctx the parse tree */ - void exitVariableReturnType(PMLParser.VariableReturnTypeContext ctx); + void exitCheckStatementBlock(PMLParser.CheckStatementBlockContext ctx); /** - * Enter a parse tree produced by the {@code VoidReturnType} - * labeled alternative in {@link PMLParser#funcReturnType}. + * Enter a parse tree produced by {@link PMLParser#idArr}. * @param ctx the parse tree */ - void enterVoidReturnType(PMLParser.VoidReturnTypeContext ctx); + void enterIdArr(PMLParser.IdArrContext ctx); /** - * Exit a parse tree produced by the {@code VoidReturnType} - * labeled alternative in {@link PMLParser#funcReturnType}. + * Exit a parse tree produced by {@link PMLParser#idArr}. * @param ctx the parse tree */ - void exitVoidReturnType(PMLParser.VoidReturnTypeContext ctx); + void exitIdArr(PMLParser.IdArrContext ctx); /** - * Enter a parse tree produced by {@link PMLParser#funcBody}. + * Enter a parse tree produced by {@link PMLParser#functionInvokeStatement}. * @param ctx the parse tree */ - void enterFuncBody(PMLParser.FuncBodyContext ctx); + void enterFunctionInvokeStatement(PMLParser.FunctionInvokeStatementContext ctx); /** - * Exit a parse tree produced by {@link PMLParser#funcBody}. + * Exit a parse tree produced by {@link PMLParser#functionInvokeStatement}. * @param ctx the parse tree */ - void exitFuncBody(PMLParser.FuncBodyContext ctx); + void exitFunctionInvokeStatement(PMLParser.FunctionInvokeStatementContext ctx); /** * Enter a parse tree produced by {@link PMLParser#foreachStatement}. * @param ctx the parse tree @@ -485,16 +643,6 @@ public interface PMLListener extends ParseTreeListener { * @param ctx the parse tree */ void exitForeachStatement(PMLParser.ForeachStatementContext ctx); - /** - * Enter a parse tree produced by {@link PMLParser#forRangeStatement}. - * @param ctx the parse tree - */ - void enterForRangeStatement(PMLParser.ForRangeStatementContext ctx); - /** - * Exit a parse tree produced by {@link PMLParser#forRangeStatement}. - * @param ctx the parse tree - */ - void exitForRangeStatement(PMLParser.ForRangeStatementContext ctx); /** * Enter a parse tree produced by {@link PMLParser#breakStatement}. * @param ctx the parse tree @@ -515,16 +663,6 @@ public interface PMLListener extends ParseTreeListener { * @param ctx the parse tree */ void exitContinueStatement(PMLParser.ContinueStatementContext ctx); - /** - * Enter a parse tree produced by {@link PMLParser#functionInvokeStatement}. - * @param ctx the parse tree - */ - void enterFunctionInvokeStatement(PMLParser.FunctionInvokeStatementContext ctx); - /** - * Exit a parse tree produced by {@link PMLParser#functionInvokeStatement}. - * @param ctx the parse tree - */ - void exitFunctionInvokeStatement(PMLParser.FunctionInvokeStatementContext ctx); /** * Enter a parse tree produced by {@link PMLParser#ifStatement}. * @param ctx the parse tree @@ -636,101 +774,135 @@ public interface PMLListener extends ParseTreeListener { */ void exitArrayType(PMLParser.ArrayTypeContext ctx); /** - * Enter a parse tree produced by {@link PMLParser#statementBlock}. + * Enter a parse tree produced by the {@code NegateExpression} + * labeled alternative in {@link PMLParser#expression}. * @param ctx the parse tree */ - void enterStatementBlock(PMLParser.StatementBlockContext ctx); + void enterNegateExpression(PMLParser.NegateExpressionContext ctx); /** - * Exit a parse tree produced by {@link PMLParser#statementBlock}. + * Exit a parse tree produced by the {@code NegateExpression} + * labeled alternative in {@link PMLParser#expression}. * @param ctx the parse tree */ - void exitStatementBlock(PMLParser.StatementBlockContext ctx); + void exitNegateExpression(PMLParser.NegateExpressionContext ctx); /** - * Enter a parse tree produced by {@link PMLParser#expression}. + * Enter a parse tree produced by the {@code LogicalExpression} + * labeled alternative in {@link PMLParser#expression}. * @param ctx the parse tree */ - void enterExpression(PMLParser.ExpressionContext ctx); + void enterLogicalExpression(PMLParser.LogicalExpressionContext ctx); /** - * Exit a parse tree produced by {@link PMLParser#expression}. + * Exit a parse tree produced by the {@code LogicalExpression} + * labeled alternative in {@link PMLParser#expression}. * @param ctx the parse tree */ - void exitExpression(PMLParser.ExpressionContext ctx); + void exitLogicalExpression(PMLParser.LogicalExpressionContext ctx); /** - * Enter a parse tree produced by {@link PMLParser#array}. + * Enter a parse tree produced by the {@code PlusExpression} + * labeled alternative in {@link PMLParser#expression}. * @param ctx the parse tree */ - void enterArray(PMLParser.ArrayContext ctx); + void enterPlusExpression(PMLParser.PlusExpressionContext ctx); /** - * Exit a parse tree produced by {@link PMLParser#array}. + * Exit a parse tree produced by the {@code PlusExpression} + * labeled alternative in {@link PMLParser#expression}. * @param ctx the parse tree */ - void exitArray(PMLParser.ArrayContext ctx); + void exitPlusExpression(PMLParser.PlusExpressionContext ctx); /** - * Enter a parse tree produced by {@link PMLParser#map}. + * Enter a parse tree produced by the {@code FunctionInvokeExpression} + * labeled alternative in {@link PMLParser#expression}. * @param ctx the parse tree */ - void enterMap(PMLParser.MapContext ctx); + void enterFunctionInvokeExpression(PMLParser.FunctionInvokeExpressionContext ctx); /** - * Exit a parse tree produced by {@link PMLParser#map}. + * Exit a parse tree produced by the {@code FunctionInvokeExpression} + * labeled alternative in {@link PMLParser#expression}. * @param ctx the parse tree */ - void exitMap(PMLParser.MapContext ctx); + void exitFunctionInvokeExpression(PMLParser.FunctionInvokeExpressionContext ctx); /** - * Enter a parse tree produced by {@link PMLParser#mapEntry}. + * Enter a parse tree produced by the {@code VariableReferenceExpression} + * labeled alternative in {@link PMLParser#expression}. * @param ctx the parse tree */ - void enterMapEntry(PMLParser.MapEntryContext ctx); + void enterVariableReferenceExpression(PMLParser.VariableReferenceExpressionContext ctx); /** - * Exit a parse tree produced by {@link PMLParser#mapEntry}. + * Exit a parse tree produced by the {@code VariableReferenceExpression} + * labeled alternative in {@link PMLParser#expression}. * @param ctx the parse tree */ - void exitMapEntry(PMLParser.MapEntryContext ctx); + void exitVariableReferenceExpression(PMLParser.VariableReferenceExpressionContext ctx); /** - * Enter a parse tree produced by {@link PMLParser#entryReference}. + * Enter a parse tree produced by the {@code LiteralExpression} + * labeled alternative in {@link PMLParser#expression}. * @param ctx the parse tree */ - void enterEntryReference(PMLParser.EntryReferenceContext ctx); + void enterLiteralExpression(PMLParser.LiteralExpressionContext ctx); /** - * Exit a parse tree produced by {@link PMLParser#entryReference}. + * Exit a parse tree produced by the {@code LiteralExpression} + * labeled alternative in {@link PMLParser#expression}. * @param ctx the parse tree */ - void exitEntryReference(PMLParser.EntryReferenceContext ctx); + void exitLiteralExpression(PMLParser.LiteralExpressionContext ctx); /** - * Enter a parse tree produced by the {@code StringLiteral} - * labeled alternative in {@link PMLParser#literal}. + * Enter a parse tree produced by the {@code ParenExpression} + * labeled alternative in {@link PMLParser#expression}. * @param ctx the parse tree */ - void enterStringLiteral(PMLParser.StringLiteralContext ctx); + void enterParenExpression(PMLParser.ParenExpressionContext ctx); /** - * Exit a parse tree produced by the {@code StringLiteral} - * labeled alternative in {@link PMLParser#literal}. + * Exit a parse tree produced by the {@code ParenExpression} + * labeled alternative in {@link PMLParser#expression}. * @param ctx the parse tree */ - void exitStringLiteral(PMLParser.StringLiteralContext ctx); + void exitParenExpression(PMLParser.ParenExpressionContext ctx); /** - * Enter a parse tree produced by the {@code BooleanLiteral} + * Enter a parse tree produced by the {@code EqualsExpression} + * labeled alternative in {@link PMLParser#expression}. + * @param ctx the parse tree + */ + void enterEqualsExpression(PMLParser.EqualsExpressionContext ctx); + /** + * Exit a parse tree produced by the {@code EqualsExpression} + * labeled alternative in {@link PMLParser#expression}. + * @param ctx the parse tree + */ + void exitEqualsExpression(PMLParser.EqualsExpressionContext ctx); + /** + * Enter a parse tree produced by {@link PMLParser#expressionList}. + * @param ctx the parse tree + */ + void enterExpressionList(PMLParser.ExpressionListContext ctx); + /** + * Exit a parse tree produced by {@link PMLParser#expressionList}. + * @param ctx the parse tree + */ + void exitExpressionList(PMLParser.ExpressionListContext ctx); + /** + * Enter a parse tree produced by the {@code StringLiteral} * labeled alternative in {@link PMLParser#literal}. * @param ctx the parse tree */ - void enterBooleanLiteral(PMLParser.BooleanLiteralContext ctx); + void enterStringLiteral(PMLParser.StringLiteralContext ctx); /** - * Exit a parse tree produced by the {@code BooleanLiteral} + * Exit a parse tree produced by the {@code StringLiteral} * labeled alternative in {@link PMLParser#literal}. * @param ctx the parse tree */ - void exitBooleanLiteral(PMLParser.BooleanLiteralContext ctx); + void exitStringLiteral(PMLParser.StringLiteralContext ctx); /** - * Enter a parse tree produced by the {@code NumberLiteral} + * Enter a parse tree produced by the {@code BoolLiteral} * labeled alternative in {@link PMLParser#literal}. * @param ctx the parse tree */ - void enterNumberLiteral(PMLParser.NumberLiteralContext ctx); + void enterBoolLiteral(PMLParser.BoolLiteralContext ctx); /** - * Exit a parse tree produced by the {@code NumberLiteral} + * Exit a parse tree produced by the {@code BoolLiteral} * labeled alternative in {@link PMLParser#literal}. * @param ctx the parse tree */ - void exitNumberLiteral(PMLParser.NumberLiteralContext ctx); + void exitBoolLiteral(PMLParser.BoolLiteralContext ctx); /** * Enter a parse tree produced by the {@code ArrayLiteral} * labeled alternative in {@link PMLParser#literal}. @@ -755,6 +927,78 @@ public interface PMLListener extends ParseTreeListener { * @param ctx the parse tree */ void exitMapLiteral(PMLParser.MapLiteralContext ctx); + /** + * Enter a parse tree produced by {@link PMLParser#stringLit}. + * @param ctx the parse tree + */ + void enterStringLit(PMLParser.StringLitContext ctx); + /** + * Exit a parse tree produced by {@link PMLParser#stringLit}. + * @param ctx the parse tree + */ + void exitStringLit(PMLParser.StringLitContext ctx); + /** + * Enter a parse tree produced by {@link PMLParser#boolLit}. + * @param ctx the parse tree + */ + void enterBoolLit(PMLParser.BoolLitContext ctx); + /** + * Exit a parse tree produced by {@link PMLParser#boolLit}. + * @param ctx the parse tree + */ + void exitBoolLit(PMLParser.BoolLitContext ctx); + /** + * Enter a parse tree produced by {@link PMLParser#arrayLit}. + * @param ctx the parse tree + */ + void enterArrayLit(PMLParser.ArrayLitContext ctx); + /** + * Exit a parse tree produced by {@link PMLParser#arrayLit}. + * @param ctx the parse tree + */ + void exitArrayLit(PMLParser.ArrayLitContext ctx); + /** + * Enter a parse tree produced by {@link PMLParser#stringArrayLit}. + * @param ctx the parse tree + */ + void enterStringArrayLit(PMLParser.StringArrayLitContext ctx); + /** + * Exit a parse tree produced by {@link PMLParser#stringArrayLit}. + * @param ctx the parse tree + */ + void exitStringArrayLit(PMLParser.StringArrayLitContext ctx); + /** + * Enter a parse tree produced by {@link PMLParser#mapLit}. + * @param ctx the parse tree + */ + void enterMapLit(PMLParser.MapLitContext ctx); + /** + * Exit a parse tree produced by {@link PMLParser#mapLit}. + * @param ctx the parse tree + */ + void exitMapLit(PMLParser.MapLitContext ctx); + /** + * Enter a parse tree produced by {@link PMLParser#element}. + * @param ctx the parse tree + */ + void enterElement(PMLParser.ElementContext ctx); + /** + * Exit a parse tree produced by {@link PMLParser#element}. + * @param ctx the parse tree + */ + void exitElement(PMLParser.ElementContext ctx); + /** + * Enter a parse tree produced by the {@code ReferenceByIndex} + * labeled alternative in {@link PMLParser#variableReference}. + * @param ctx the parse tree + */ + void enterReferenceByIndex(PMLParser.ReferenceByIndexContext ctx); + /** + * Exit a parse tree produced by the {@code ReferenceByIndex} + * labeled alternative in {@link PMLParser#variableReference}. + * @param ctx the parse tree + */ + void exitReferenceByIndex(PMLParser.ReferenceByIndexContext ctx); /** * Enter a parse tree produced by the {@code ReferenceByID} * labeled alternative in {@link PMLParser#variableReference}. @@ -768,17 +1012,39 @@ public interface PMLListener extends ParseTreeListener { */ void exitReferenceByID(PMLParser.ReferenceByIDContext ctx); /** - * Enter a parse tree produced by the {@code ReferenceByEntry} - * labeled alternative in {@link PMLParser#variableReference}. + * Enter a parse tree produced by the {@code BracketIndex} + * labeled alternative in {@link PMLParser#index}. * @param ctx the parse tree */ - void enterReferenceByEntry(PMLParser.ReferenceByEntryContext ctx); + void enterBracketIndex(PMLParser.BracketIndexContext ctx); /** - * Exit a parse tree produced by the {@code ReferenceByEntry} - * labeled alternative in {@link PMLParser#variableReference}. + * Exit a parse tree produced by the {@code BracketIndex} + * labeled alternative in {@link PMLParser#index}. + * @param ctx the parse tree + */ + void exitBracketIndex(PMLParser.BracketIndexContext ctx); + /** + * Enter a parse tree produced by the {@code DotIndex} + * labeled alternative in {@link PMLParser#index}. + * @param ctx the parse tree + */ + void enterDotIndex(PMLParser.DotIndexContext ctx); + /** + * Exit a parse tree produced by the {@code DotIndex} + * labeled alternative in {@link PMLParser#index}. + * @param ctx the parse tree + */ + void exitDotIndex(PMLParser.DotIndexContext ctx); + /** + * Enter a parse tree produced by {@link PMLParser#id}. + * @param ctx the parse tree + */ + void enterId(PMLParser.IdContext ctx); + /** + * Exit a parse tree produced by {@link PMLParser#id}. * @param ctx the parse tree */ - void exitReferenceByEntry(PMLParser.ReferenceByEntryContext ctx); + void exitId(PMLParser.IdContext ctx); /** * Enter a parse tree produced by {@link PMLParser#functionInvoke}. * @param ctx the parse tree diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/antlr/PMLVisitor.java b/src/main/java/gov/nist/csd/pm/pap/pml/antlr/PMLParserVisitor.java similarity index 54% rename from src/main/java/gov/nist/csd/pm/policy/pml/antlr/PMLVisitor.java rename to src/main/java/gov/nist/csd/pm/pap/pml/antlr/PMLParserVisitor.java index 4107191ef..fb501024c 100644 --- a/src/main/java/gov/nist/csd/pm/policy/pml/antlr/PMLVisitor.java +++ b/src/main/java/gov/nist/csd/pm/pap/pml/antlr/PMLParserVisitor.java @@ -1,5 +1,5 @@ -// Generated from PML.g4 by ANTLR 4.8 -package gov.nist.csd.pm.policy.pml.antlr; +// Generated from PMLParser.g4 by ANTLR 4.13.1 +package gov.nist.csd.pm.pap.pml.antlr; import org.antlr.v4.runtime.tree.ParseTreeVisitor; /** @@ -9,7 +9,7 @@ * @param The return type of the visit operation. Use {@link Void} for * operations with no return type. */ -public interface PMLVisitor extends ParseTreeVisitor { +public interface PMLParserVisitor extends ParseTreeVisitor { /** * Visit a parse tree produced by {@link PMLParser#pml}. * @param ctx the parse tree @@ -22,6 +22,12 @@ public interface PMLVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitStatement(PMLParser.StatementContext ctx); + /** + * Visit a parse tree produced by {@link PMLParser#statementBlock}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitStatementBlock(PMLParser.StatementBlockContext ctx); /** * Visit a parse tree produced by {@link PMLParser#createPolicyStatement}. * @param ctx the parse tree @@ -29,17 +35,17 @@ public interface PMLVisitor extends ParseTreeVisitor { */ T visitCreatePolicyStatement(PMLParser.CreatePolicyStatementContext ctx); /** - * Visit a parse tree produced by {@link PMLParser#createAttributeStatement}. + * Visit a parse tree produced by {@link PMLParser#createNonPCStatement}. * @param ctx the parse tree * @return the visitor result */ - T visitCreateAttributeStatement(PMLParser.CreateAttributeStatementContext ctx); + T visitCreateNonPCStatement(PMLParser.CreateNonPCStatementContext ctx); /** - * Visit a parse tree produced by {@link PMLParser#createUserOrObjectStatement}. + * Visit a parse tree produced by {@link PMLParser#nonPCNodeType}. * @param ctx the parse tree * @return the visitor result */ - T visitCreateUserOrObjectStatement(PMLParser.CreateUserOrObjectStatementContext ctx); + T visitNonPCNodeType(PMLParser.NonPCNodeTypeContext ctx); /** * Visit a parse tree produced by {@link PMLParser#createObligationStatement}. * @param ctx the parse tree @@ -53,110 +59,173 @@ public interface PMLVisitor extends ParseTreeVisitor { */ T visitCreateRuleStatement(PMLParser.CreateRuleStatementContext ctx); /** - * Visit a parse tree produced by the {@code AnyUserSubject} - * labeled alternative in {@link PMLParser#subjectClause}. + * Visit a parse tree produced by the {@code AnyUserPattern} + * labeled alternative in {@link PMLParser#subjectPattern}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAnyUserPattern(PMLParser.AnyUserPatternContext ctx); + /** + * Visit a parse tree produced by the {@code UserPattern} + * labeled alternative in {@link PMLParser#subjectPattern}. * @param ctx the parse tree * @return the visitor result */ - T visitAnyUserSubject(PMLParser.AnyUserSubjectContext ctx); + T visitUserPattern(PMLParser.UserPatternContext ctx); /** - * Visit a parse tree produced by the {@code UserSubject} - * labeled alternative in {@link PMLParser#subjectClause}. + * Visit a parse tree produced by the {@code BasicSubjectPatternExpression} + * labeled alternative in {@link PMLParser#subjectPatternExpression}. * @param ctx the parse tree * @return the visitor result */ - T visitUserSubject(PMLParser.UserSubjectContext ctx); + T visitBasicSubjectPatternExpression(PMLParser.BasicSubjectPatternExpressionContext ctx); /** - * Visit a parse tree produced by the {@code UsersListSubject} - * labeled alternative in {@link PMLParser#subjectClause}. + * Visit a parse tree produced by the {@code ParenSubjectPatternExpression} + * labeled alternative in {@link PMLParser#subjectPatternExpression}. * @param ctx the parse tree * @return the visitor result */ - T visitUsersListSubject(PMLParser.UsersListSubjectContext ctx); + T visitParenSubjectPatternExpression(PMLParser.ParenSubjectPatternExpressionContext ctx); /** - * Visit a parse tree produced by the {@code UserAttrSubject} - * labeled alternative in {@link PMLParser#subjectClause}. + * Visit a parse tree produced by the {@code NegateSubjectPatternExpression} + * labeled alternative in {@link PMLParser#subjectPatternExpression}. * @param ctx the parse tree * @return the visitor result */ - T visitUserAttrSubject(PMLParser.UserAttrSubjectContext ctx); + T visitNegateSubjectPatternExpression(PMLParser.NegateSubjectPatternExpressionContext ctx); + /** + * Visit a parse tree produced by the {@code LogicalSubjectPatternExpression} + * labeled alternative in {@link PMLParser#subjectPatternExpression}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitLogicalSubjectPatternExpression(PMLParser.LogicalSubjectPatternExpressionContext ctx); + /** + * Visit a parse tree produced by the {@code InSubject} + * labeled alternative in {@link PMLParser#basicSubjectPatternExpr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitInSubject(PMLParser.InSubjectContext ctx); + /** + * Visit a parse tree produced by the {@code UsernameSubject} + * labeled alternative in {@link PMLParser#basicSubjectPatternExpr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitUsernameSubject(PMLParser.UsernameSubjectContext ctx); /** * Visit a parse tree produced by the {@code ProcessSubject} - * labeled alternative in {@link PMLParser#subjectClause}. + * labeled alternative in {@link PMLParser#basicSubjectPatternExpr}. * @param ctx the parse tree * @return the visitor result */ T visitProcessSubject(PMLParser.ProcessSubjectContext ctx); /** - * Visit a parse tree produced by the {@code PolicyElement} - * labeled alternative in {@link PMLParser#onClause}. + * Visit a parse tree produced by the {@code AnyOperation} + * labeled alternative in {@link PMLParser#operationPattern}. * @param ctx the parse tree * @return the visitor result */ - T visitPolicyElement(PMLParser.PolicyElementContext ctx); + T visitAnyOperation(PMLParser.AnyOperationContext ctx); /** - * Visit a parse tree produced by the {@code AnyPolicyElement} - * labeled alternative in {@link PMLParser#onClause}. + * Visit a parse tree produced by the {@code IDOperation} + * labeled alternative in {@link PMLParser#operationPattern}. * @param ctx the parse tree * @return the visitor result */ - T visitAnyPolicyElement(PMLParser.AnyPolicyElementContext ctx); + T visitIDOperation(PMLParser.IDOperationContext ctx); /** - * Visit a parse tree produced by the {@code AnyContainedIn} - * labeled alternative in {@link PMLParser#onClause}. + * Visit a parse tree produced by {@link PMLParser#operandPattern}. * @param ctx the parse tree * @return the visitor result */ - T visitAnyContainedIn(PMLParser.AnyContainedInContext ctx); + T visitOperandPattern(PMLParser.OperandPatternContext ctx); /** - * Visit a parse tree produced by the {@code AnyOfSet} - * labeled alternative in {@link PMLParser#onClause}. + * Visit a parse tree produced by {@link PMLParser#operandPatternElement}. * @param ctx the parse tree * @return the visitor result */ - T visitAnyOfSet(PMLParser.AnyOfSetContext ctx); + T visitOperandPatternElement(PMLParser.OperandPatternElementContext ctx); /** - * Visit a parse tree produced by {@link PMLParser#anyPe}. + * Visit a parse tree produced by {@link PMLParser#operandPatternExpressionArray}. * @param ctx the parse tree * @return the visitor result */ - T visitAnyPe(PMLParser.AnyPeContext ctx); + T visitOperandPatternExpressionArray(PMLParser.OperandPatternExpressionArrayContext ctx); /** - * Visit a parse tree produced by {@link PMLParser#response}. + * Visit a parse tree produced by the {@code ParenOperandPatternExpression} + * labeled alternative in {@link PMLParser#operandPatternExpression}. * @param ctx the parse tree * @return the visitor result */ - T visitResponse(PMLParser.ResponseContext ctx); + T visitParenOperandPatternExpression(PMLParser.ParenOperandPatternExpressionContext ctx); /** - * Visit a parse tree produced by {@link PMLParser#responseBlock}. + * Visit a parse tree produced by the {@code NegateOperandPatternExpression} + * labeled alternative in {@link PMLParser#operandPatternExpression}. * @param ctx the parse tree * @return the visitor result */ - T visitResponseBlock(PMLParser.ResponseBlockContext ctx); + T visitNegateOperandPatternExpression(PMLParser.NegateOperandPatternExpressionContext ctx); /** - * Visit a parse tree produced by {@link PMLParser#responseStatement}. + * Visit a parse tree produced by the {@code BasicOperandPatternExpression} + * labeled alternative in {@link PMLParser#operandPatternExpression}. * @param ctx the parse tree * @return the visitor result */ - T visitResponseStatement(PMLParser.ResponseStatementContext ctx); + T visitBasicOperandPatternExpression(PMLParser.BasicOperandPatternExpressionContext ctx); /** - * Visit a parse tree produced by {@link PMLParser#createProhibitionStatement}. + * Visit a parse tree produced by the {@code LogicalOperandPatternExpression} + * labeled alternative in {@link PMLParser#operandPatternExpression}. * @param ctx the parse tree * @return the visitor result */ - T visitCreateProhibitionStatement(PMLParser.CreateProhibitionStatementContext ctx); + T visitLogicalOperandPatternExpression(PMLParser.LogicalOperandPatternExpressionContext ctx); + /** + * Visit a parse tree produced by the {@code AnyPolicyElement} + * labeled alternative in {@link PMLParser#basicOperandPatternExpr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAnyPolicyElement(PMLParser.AnyPolicyElementContext ctx); /** - * Visit a parse tree produced by {@link PMLParser#prohibitionContainerList}. + * Visit a parse tree produced by the {@code InPolicyElement} + * labeled alternative in {@link PMLParser#basicOperandPatternExpr}. * @param ctx the parse tree * @return the visitor result */ - T visitProhibitionContainerList(PMLParser.ProhibitionContainerListContext ctx); + T visitInPolicyElement(PMLParser.InPolicyElementContext ctx); /** - * Visit a parse tree produced by {@link PMLParser#prohibitionContainerExpression}. + * Visit a parse tree produced by the {@code PolicyElement} + * labeled alternative in {@link PMLParser#basicOperandPatternExpr}. * @param ctx the parse tree * @return the visitor result */ - T visitProhibitionContainerExpression(PMLParser.ProhibitionContainerExpressionContext ctx); + T visitPolicyElement(PMLParser.PolicyElementContext ctx); + /** + * Visit a parse tree produced by {@link PMLParser#response}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitResponse(PMLParser.ResponseContext ctx); + /** + * Visit a parse tree produced by {@link PMLParser#responseBlock}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitResponseBlock(PMLParser.ResponseBlockContext ctx); + /** + * Visit a parse tree produced by {@link PMLParser#responseStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitResponseStatement(PMLParser.ResponseStatementContext ctx); + /** + * Visit a parse tree produced by {@link PMLParser#createProhibitionStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCreateProhibitionStatement(PMLParser.CreateProhibitionStatementContext ctx); /** * Visit a parse tree produced by {@link PMLParser#setNodePropertiesStatement}. * @param ctx the parse tree @@ -188,11 +257,11 @@ public interface PMLVisitor extends ParseTreeVisitor { */ T visitDissociateStatement(PMLParser.DissociateStatementContext ctx); /** - * Visit a parse tree produced by {@link PMLParser#setResourceAccessRightsStatement}. + * Visit a parse tree produced by {@link PMLParser#setResourceOperationsStatement}. * @param ctx the parse tree * @return the visitor result */ - T visitSetResourceAccessRightsStatement(PMLParser.SetResourceAccessRightsStatementContext ctx); + T visitSetResourceOperationsStatement(PMLParser.SetResourceOperationsStatementContext ctx); /** * Visit a parse tree produced by {@link PMLParser#deleteStatement}. * @param ctx the parse tree @@ -233,17 +302,43 @@ public interface PMLVisitor extends ParseTreeVisitor { */ T visitDeleteRuleStatement(PMLParser.DeleteRuleStatementContext ctx); /** - * Visit a parse tree produced by {@link PMLParser#variableDeclarationStatement}. + * Visit a parse tree produced by the {@code VarDeclaration} + * labeled alternative in {@link PMLParser#variableDeclarationStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitVarDeclaration(PMLParser.VarDeclarationContext ctx); + /** + * Visit a parse tree produced by the {@code ShortDeclaration} + * labeled alternative in {@link PMLParser#variableDeclarationStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitShortDeclaration(PMLParser.ShortDeclarationContext ctx); + /** + * Visit a parse tree produced by {@link PMLParser#varSpec}. * @param ctx the parse tree * @return the visitor result */ - T visitVariableDeclarationStatement(PMLParser.VariableDeclarationStatementContext ctx); + T visitVarSpec(PMLParser.VarSpecContext ctx); + /** + * Visit a parse tree produced by {@link PMLParser#variableAssignmentStatement}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitVariableAssignmentStatement(PMLParser.VariableAssignmentStatementContext ctx); /** * Visit a parse tree produced by {@link PMLParser#functionDefinitionStatement}. * @param ctx the parse tree * @return the visitor result */ T visitFunctionDefinitionStatement(PMLParser.FunctionDefinitionStatementContext ctx); + /** + * Visit a parse tree produced by {@link PMLParser#functionSignature}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFunctionSignature(PMLParser.FunctionSignatureContext ctx); /** * Visit a parse tree produced by {@link PMLParser#formalArgList}. * @param ctx the parse tree @@ -257,49 +352,41 @@ public interface PMLVisitor extends ParseTreeVisitor { */ T visitFormalArg(PMLParser.FormalArgContext ctx); /** - * Visit a parse tree produced by {@link PMLParser#formalArgType}. + * Visit a parse tree produced by {@link PMLParser#returnStatement}. * @param ctx the parse tree * @return the visitor result */ - T visitFormalArgType(PMLParser.FormalArgTypeContext ctx); + T visitReturnStatement(PMLParser.ReturnStatementContext ctx); /** - * Visit a parse tree produced by {@link PMLParser#functionReturnStatement}. + * Visit a parse tree produced by {@link PMLParser#checkStatement}. * @param ctx the parse tree * @return the visitor result */ - T visitFunctionReturnStatement(PMLParser.FunctionReturnStatementContext ctx); + T visitCheckStatement(PMLParser.CheckStatementContext ctx); /** - * Visit a parse tree produced by the {@code VariableReturnType} - * labeled alternative in {@link PMLParser#funcReturnType}. + * Visit a parse tree produced by {@link PMLParser#checkStatementBlock}. * @param ctx the parse tree * @return the visitor result */ - T visitVariableReturnType(PMLParser.VariableReturnTypeContext ctx); + T visitCheckStatementBlock(PMLParser.CheckStatementBlockContext ctx); /** - * Visit a parse tree produced by the {@code VoidReturnType} - * labeled alternative in {@link PMLParser#funcReturnType}. + * Visit a parse tree produced by {@link PMLParser#idArr}. * @param ctx the parse tree * @return the visitor result */ - T visitVoidReturnType(PMLParser.VoidReturnTypeContext ctx); + T visitIdArr(PMLParser.IdArrContext ctx); /** - * Visit a parse tree produced by {@link PMLParser#funcBody}. + * Visit a parse tree produced by {@link PMLParser#functionInvokeStatement}. * @param ctx the parse tree * @return the visitor result */ - T visitFuncBody(PMLParser.FuncBodyContext ctx); + T visitFunctionInvokeStatement(PMLParser.FunctionInvokeStatementContext ctx); /** * Visit a parse tree produced by {@link PMLParser#foreachStatement}. * @param ctx the parse tree * @return the visitor result */ T visitForeachStatement(PMLParser.ForeachStatementContext ctx); - /** - * Visit a parse tree produced by {@link PMLParser#forRangeStatement}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitForRangeStatement(PMLParser.ForRangeStatementContext ctx); /** * Visit a parse tree produced by {@link PMLParser#breakStatement}. * @param ctx the parse tree @@ -312,12 +399,6 @@ public interface PMLVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitContinueStatement(PMLParser.ContinueStatementContext ctx); - /** - * Visit a parse tree produced by {@link PMLParser#functionInvokeStatement}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitFunctionInvokeStatement(PMLParser.FunctionInvokeStatementContext ctx); /** * Visit a parse tree produced by {@link PMLParser#ifStatement}. * @param ctx the parse tree @@ -384,62 +465,81 @@ public interface PMLVisitor extends ParseTreeVisitor { */ T visitArrayType(PMLParser.ArrayTypeContext ctx); /** - * Visit a parse tree produced by {@link PMLParser#statementBlock}. + * Visit a parse tree produced by the {@code NegateExpression} + * labeled alternative in {@link PMLParser#expression}. * @param ctx the parse tree * @return the visitor result */ - T visitStatementBlock(PMLParser.StatementBlockContext ctx); + T visitNegateExpression(PMLParser.NegateExpressionContext ctx); /** - * Visit a parse tree produced by {@link PMLParser#expression}. + * Visit a parse tree produced by the {@code LogicalExpression} + * labeled alternative in {@link PMLParser#expression}. * @param ctx the parse tree * @return the visitor result */ - T visitExpression(PMLParser.ExpressionContext ctx); + T visitLogicalExpression(PMLParser.LogicalExpressionContext ctx); /** - * Visit a parse tree produced by {@link PMLParser#array}. + * Visit a parse tree produced by the {@code PlusExpression} + * labeled alternative in {@link PMLParser#expression}. * @param ctx the parse tree * @return the visitor result */ - T visitArray(PMLParser.ArrayContext ctx); + T visitPlusExpression(PMLParser.PlusExpressionContext ctx); /** - * Visit a parse tree produced by {@link PMLParser#map}. + * Visit a parse tree produced by the {@code FunctionInvokeExpression} + * labeled alternative in {@link PMLParser#expression}. * @param ctx the parse tree * @return the visitor result */ - T visitMap(PMLParser.MapContext ctx); + T visitFunctionInvokeExpression(PMLParser.FunctionInvokeExpressionContext ctx); /** - * Visit a parse tree produced by {@link PMLParser#mapEntry}. + * Visit a parse tree produced by the {@code VariableReferenceExpression} + * labeled alternative in {@link PMLParser#expression}. * @param ctx the parse tree * @return the visitor result */ - T visitMapEntry(PMLParser.MapEntryContext ctx); + T visitVariableReferenceExpression(PMLParser.VariableReferenceExpressionContext ctx); /** - * Visit a parse tree produced by {@link PMLParser#entryReference}. + * Visit a parse tree produced by the {@code LiteralExpression} + * labeled alternative in {@link PMLParser#expression}. * @param ctx the parse tree * @return the visitor result */ - T visitEntryReference(PMLParser.EntryReferenceContext ctx); + T visitLiteralExpression(PMLParser.LiteralExpressionContext ctx); /** - * Visit a parse tree produced by the {@code StringLiteral} - * labeled alternative in {@link PMLParser#literal}. + * Visit a parse tree produced by the {@code ParenExpression} + * labeled alternative in {@link PMLParser#expression}. * @param ctx the parse tree * @return the visitor result */ - T visitStringLiteral(PMLParser.StringLiteralContext ctx); + T visitParenExpression(PMLParser.ParenExpressionContext ctx); + /** + * Visit a parse tree produced by the {@code EqualsExpression} + * labeled alternative in {@link PMLParser#expression}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitEqualsExpression(PMLParser.EqualsExpressionContext ctx); + /** + * Visit a parse tree produced by {@link PMLParser#expressionList}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitExpressionList(PMLParser.ExpressionListContext ctx); /** - * Visit a parse tree produced by the {@code BooleanLiteral} + * Visit a parse tree produced by the {@code StringLiteral} * labeled alternative in {@link PMLParser#literal}. * @param ctx the parse tree * @return the visitor result */ - T visitBooleanLiteral(PMLParser.BooleanLiteralContext ctx); + T visitStringLiteral(PMLParser.StringLiteralContext ctx); /** - * Visit a parse tree produced by the {@code NumberLiteral} + * Visit a parse tree produced by the {@code BoolLiteral} * labeled alternative in {@link PMLParser#literal}. * @param ctx the parse tree * @return the visitor result */ - T visitNumberLiteral(PMLParser.NumberLiteralContext ctx); + T visitBoolLiteral(PMLParser.BoolLiteralContext ctx); /** * Visit a parse tree produced by the {@code ArrayLiteral} * labeled alternative in {@link PMLParser#literal}. @@ -454,6 +554,49 @@ public interface PMLVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitMapLiteral(PMLParser.MapLiteralContext ctx); + /** + * Visit a parse tree produced by {@link PMLParser#stringLit}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitStringLit(PMLParser.StringLitContext ctx); + /** + * Visit a parse tree produced by {@link PMLParser#boolLit}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitBoolLit(PMLParser.BoolLitContext ctx); + /** + * Visit a parse tree produced by {@link PMLParser#arrayLit}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitArrayLit(PMLParser.ArrayLitContext ctx); + /** + * Visit a parse tree produced by {@link PMLParser#stringArrayLit}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitStringArrayLit(PMLParser.StringArrayLitContext ctx); + /** + * Visit a parse tree produced by {@link PMLParser#mapLit}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitMapLit(PMLParser.MapLitContext ctx); + /** + * Visit a parse tree produced by {@link PMLParser#element}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitElement(PMLParser.ElementContext ctx); + /** + * Visit a parse tree produced by the {@code ReferenceByIndex} + * labeled alternative in {@link PMLParser#variableReference}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitReferenceByIndex(PMLParser.ReferenceByIndexContext ctx); /** * Visit a parse tree produced by the {@code ReferenceByID} * labeled alternative in {@link PMLParser#variableReference}. @@ -462,12 +605,25 @@ public interface PMLVisitor extends ParseTreeVisitor { */ T visitReferenceByID(PMLParser.ReferenceByIDContext ctx); /** - * Visit a parse tree produced by the {@code ReferenceByEntry} - * labeled alternative in {@link PMLParser#variableReference}. + * Visit a parse tree produced by the {@code BracketIndex} + * labeled alternative in {@link PMLParser#index}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitBracketIndex(PMLParser.BracketIndexContext ctx); + /** + * Visit a parse tree produced by the {@code DotIndex} + * labeled alternative in {@link PMLParser#index}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDotIndex(PMLParser.DotIndexContext ctx); + /** + * Visit a parse tree produced by {@link PMLParser#id}. * @param ctx the parse tree * @return the visitor result */ - T visitReferenceByEntry(PMLParser.ReferenceByEntryContext ctx); + T visitId(PMLParser.IdContext ctx); /** * Visit a parse tree produced by {@link PMLParser#functionInvoke}. * @param ctx the parse tree diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/Position.java b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/Position.java similarity index 96% rename from src/main/java/gov/nist/csd/pm/policy/pml/compiler/Position.java rename to src/main/java/gov/nist/csd/pm/pap/pml/compiler/Position.java index 3c0f11df5..444104c5b 100644 --- a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/Position.java +++ b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/Position.java @@ -1,4 +1,4 @@ -package gov.nist.csd.pm.policy.pml.compiler; +package gov.nist.csd.pm.pap.pml.compiler; import org.antlr.v4.runtime.ParserRuleContext; diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/Variable.java b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/Variable.java similarity index 84% rename from src/main/java/gov/nist/csd/pm/policy/pml/compiler/Variable.java rename to src/main/java/gov/nist/csd/pm/pap/pml/compiler/Variable.java index 9b58625f9..ba63b4337 100644 --- a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/Variable.java +++ b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/Variable.java @@ -1,6 +1,6 @@ -package gov.nist.csd.pm.policy.pml.compiler; +package gov.nist.csd.pm.pap.pml.compiler; -import gov.nist.csd.pm.policy.pml.model.expression.Type; +import gov.nist.csd.pm.pap.pml.type.Type; import java.io.Serializable; import java.util.Objects; diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/error/CompileError.java b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/error/CompileError.java similarity index 59% rename from src/main/java/gov/nist/csd/pm/policy/pml/compiler/error/CompileError.java rename to src/main/java/gov/nist/csd/pm/pap/pml/compiler/error/CompileError.java index bdae186e5..07c1fb84d 100644 --- a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/error/CompileError.java +++ b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/error/CompileError.java @@ -1,15 +1,18 @@ -package gov.nist.csd.pm.policy.pml.compiler.error; +package gov.nist.csd.pm.pap.pml.compiler.error; -import gov.nist.csd.pm.policy.pml.PMLFormatter; -import gov.nist.csd.pm.policy.pml.compiler.Position; +import gov.nist.csd.pm.pap.pml.compiler.Position; import org.antlr.v4.runtime.ParserRuleContext; +import org.antlr.v4.runtime.misc.Interval; import java.util.Objects; public record CompileError(Position position, String errorMessage) { public static String getText(ParserRuleContext ctx) { - return PMLFormatter.getText(ctx); + int startIndex = ctx.start.getStartIndex(); + int stopIndex = ctx.stop.getStopIndex(); + Interval interval = new Interval(startIndex, stopIndex); + return ctx.start.getInputStream().getText(interval); } public static CompileError fromParserRuleContext(ParserRuleContext ctx, String message) { @@ -31,4 +34,12 @@ public boolean equals(Object o) { public int hashCode() { return Objects.hash(position, errorMessage); } + + @Override + public String toString() { + return "CompileError{" + + "position=" + position + + ", errorMessage='" + errorMessage + '\'' + + '}'; + } } diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/error/ErrorLog.java b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/error/ErrorLog.java similarity index 85% rename from src/main/java/gov/nist/csd/pm/policy/pml/compiler/error/ErrorLog.java rename to src/main/java/gov/nist/csd/pm/pap/pml/compiler/error/ErrorLog.java index cb702692c..a531a46aa 100644 --- a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/error/ErrorLog.java +++ b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/error/ErrorLog.java @@ -1,6 +1,6 @@ -package gov.nist.csd.pm.policy.pml.compiler.error; +package gov.nist.csd.pm.pap.pml.compiler.error; -import gov.nist.csd.pm.policy.pml.compiler.Position; +import gov.nist.csd.pm.pap.pml.compiler.Position; import org.antlr.v4.runtime.ParserRuleContext; import java.util.ArrayList; @@ -30,6 +30,10 @@ public ErrorLog addError(int line, int charPos, int end, String msg) { return this; } + public void addErrors(List errors) { + this.errors.addAll(errors); + } + private void addError(CompileError error) { if (this.errors.contains(error)) { return; diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/AssignStmtVisitor.java b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/AssignStmtVisitor.java new file mode 100644 index 000000000..b7cf47b8c --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/AssignStmtVisitor.java @@ -0,0 +1,22 @@ +package gov.nist.csd.pm.pap.pml.compiler.visitor; + +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.statement.operation.AssignStatement; +import gov.nist.csd.pm.pap.pml.type.Type; + +public class AssignStmtVisitor extends PMLBaseVisitor { + + public AssignStmtVisitor(VisitorContext visitorCtx) { + super(visitorCtx); + } + + @Override + public AssignStatement visitAssignStatement(PMLParser.AssignStatementContext ctx) { + Expression ascendant = Expression.compile(visitorCtx, ctx.ascendantNode, Type.string()); + Expression descendants = Expression.compile(visitorCtx, ctx.descendantNodes, Type.array(Type.string())); + + return new AssignStatement(ascendant, descendants); + } +} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/AssociateStmtVisitor.java b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/AssociateStmtVisitor.java similarity index 55% rename from src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/AssociateStmtVisitor.java rename to src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/AssociateStmtVisitor.java index 98180091c..c3e66329f 100644 --- a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/AssociateStmtVisitor.java +++ b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/AssociateStmtVisitor.java @@ -1,18 +1,15 @@ -package gov.nist.csd.pm.policy.pml.compiler.visitor; +package gov.nist.csd.pm.pap.pml.compiler.visitor; -import gov.nist.csd.pm.policy.pml.antlr.PMLBaseVisitor; -import gov.nist.csd.pm.policy.pml.antlr.PMLParser; -import gov.nist.csd.pm.policy.pml.model.context.VisitorContext; -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.statement.AssociateStatement; -import gov.nist.csd.pm.policy.pml.statement.Expression; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.statement.operation.AssociateStatement; +import gov.nist.csd.pm.pap.pml.type.Type; public class AssociateStmtVisitor extends PMLBaseVisitor { - private final VisitorContext visitorCtx; - public AssociateStmtVisitor(VisitorContext visitorCtx) { - this.visitorCtx = visitorCtx; + super(visitorCtx); } @Override diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/BreakStmtVisitor.java b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/BreakStmtVisitor.java similarity index 52% rename from src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/BreakStmtVisitor.java rename to src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/BreakStmtVisitor.java index 1221480c5..c245104b4 100644 --- a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/BreakStmtVisitor.java +++ b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/BreakStmtVisitor.java @@ -1,27 +1,22 @@ -package gov.nist.csd.pm.policy.pml.compiler.visitor; +package gov.nist.csd.pm.pap.pml.compiler.visitor; -import gov.nist.csd.pm.policy.pml.antlr.PMLBaseVisitor; -import gov.nist.csd.pm.policy.pml.antlr.PMLParser; -import gov.nist.csd.pm.policy.pml.model.context.VisitorContext; -import gov.nist.csd.pm.policy.pml.statement.BreakStatement; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.exception.PMLCompilationRuntimeException; +import gov.nist.csd.pm.pap.pml.statement.BreakStatement; import org.antlr.v4.runtime.ParserRuleContext; public class BreakStmtVisitor extends PMLBaseVisitor { - private final VisitorContext visitorCtx; - public BreakStmtVisitor(VisitorContext visitorCtx) { - this.visitorCtx = visitorCtx; + super(visitorCtx); } @Override public BreakStatement visitBreakStatement(PMLParser.BreakStatementContext ctx) { - // check that there is a for loop parent + // check that there is a for loop descendant if (!inFor(ctx)) { - visitorCtx.errorLog().addError( - ctx, - "continue statement not in foreach" - ); + throw new PMLCompilationRuntimeException(ctx, "break statement not in foreach"); } return new BreakStatement(); diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CheckStatementBlockVisitor.java b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CheckStatementBlockVisitor.java new file mode 100644 index 000000000..e18958bde --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CheckStatementBlockVisitor.java @@ -0,0 +1,33 @@ +package gov.nist.csd.pm.pap.pml.compiler.visitor; + +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.statement.PMLStatement; +import gov.nist.csd.pm.pap.pml.statement.PMLStatementBlock; + +import java.util.ArrayList; +import java.util.List; + +public class CheckStatementBlockVisitor extends PMLBaseVisitor{ + + public CheckStatementBlockVisitor(VisitorContext visitorCtx) { + super(visitorCtx); + } + + @Override + public PMLStatementBlock visitCheckStatementBlock(PMLParser.CheckStatementBlockContext ctx) { + List statements = new ArrayList<>(); + + if (ctx == null) { + return new PMLStatementBlock(statements); + } + + CheckStatementVisitor checkVisitor = new CheckStatementVisitor(visitorCtx); + + for (PMLParser.CheckStatementContext checkStatementContext : ctx.checkStatement()) { + statements.add(checkVisitor.visitCheckStatement(checkStatementContext)); + } + + return new PMLStatementBlock(statements); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CheckStatementVisitor.java b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CheckStatementVisitor.java new file mode 100644 index 000000000..ff45c8634 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CheckStatementVisitor.java @@ -0,0 +1,21 @@ +package gov.nist.csd.pm.pap.pml.compiler.visitor; + +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.pml.statement.operation.CheckStatement; +import gov.nist.csd.pm.pap.pml.type.Type; + +public class CheckStatementVisitor extends PMLBaseVisitor { + public CheckStatementVisitor(VisitorContext visitorCtx) { + super(visitorCtx); + } + + @Override + public CheckStatement visitCheckStatement(PMLParser.CheckStatementContext ctx) { + Expression arExpr = Expression.compile(visitorCtx, ctx.ar, Type.string()); + Expression targetExpr = Expression.compile(visitorCtx, ctx.target, Type.string(), Type.array(Type.string())); + + return new CheckStatement(arExpr, targetExpr); + } +} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/ContinueStmtVisitor.java b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/ContinueStmtVisitor.java similarity index 61% rename from src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/ContinueStmtVisitor.java rename to src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/ContinueStmtVisitor.java index 756f80509..79ecc46f0 100644 --- a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/ContinueStmtVisitor.java +++ b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/ContinueStmtVisitor.java @@ -1,24 +1,22 @@ -package gov.nist.csd.pm.policy.pml.compiler.visitor; +package gov.nist.csd.pm.pap.pml.compiler.visitor; -import gov.nist.csd.pm.policy.pml.antlr.PMLBaseVisitor; -import gov.nist.csd.pm.policy.pml.antlr.PMLParser; -import gov.nist.csd.pm.policy.pml.model.context.VisitorContext; -import gov.nist.csd.pm.policy.pml.statement.ContinueStatement; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.exception.PMLCompilationRuntimeException; +import gov.nist.csd.pm.pap.pml.statement.ContinueStatement; import org.antlr.v4.runtime.ParserRuleContext; public class ContinueStmtVisitor extends PMLBaseVisitor { - private final VisitorContext visitorCtx; - public ContinueStmtVisitor(VisitorContext visitorCtx) { - this.visitorCtx = visitorCtx; + super(visitorCtx); } @Override public ContinueStatement visitContinueStatement(PMLParser.ContinueStatementContext ctx) { - // check that there is a for loop parent + // check that there is a for loop descendant if (!inFor(ctx)) { - visitorCtx.errorLog().addError( + throw new PMLCompilationRuntimeException( ctx, "continue statement not in foreach" ); diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CreateNonPCStmtVisitor.java b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CreateNonPCStmtVisitor.java new file mode 100644 index 000000000..32e646c6b --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CreateNonPCStmtVisitor.java @@ -0,0 +1,38 @@ +package gov.nist.csd.pm.pap.pml.compiler.visitor; + +import gov.nist.csd.pm.pap.graph.node.NodeType; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.statement.operation.CreateNonPCStatement; +import gov.nist.csd.pm.pap.pml.type.Type; + +import static gov.nist.csd.pm.pap.graph.node.NodeType.OA; + +public class CreateNonPCStmtVisitor extends PMLBaseVisitor { + + public CreateNonPCStmtVisitor(VisitorContext visitorCtx) { + super(visitorCtx); + } + + @Override + public CreateNonPCStatement visitCreateNonPCStatement(PMLParser.CreateNonPCStatementContext ctx) { + NodeType type = getNodeType(ctx.nonPCNodeType()); + Expression name = Expression.compile(visitorCtx, ctx.name, Type.string()); + Expression assignTo = Expression.compile(visitorCtx, ctx.in, Type.array(Type.string())); + + return new CreateNonPCStatement(name, type, assignTo); + } + + private NodeType getNodeType(PMLParser.NonPCNodeTypeContext nodeType) { + if (nodeType.OBJECT_ATTRIBUTE() != null) { + return OA; + } else if (nodeType.USER_ATTRIBUTE() != null) { + return NodeType.UA; + } else if (nodeType.OBJECT() != null) { + return NodeType.O; + } else { + return NodeType.U; + } + } +} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/CreateObligationStmtVisitor.java b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CreateObligationStmtVisitor.java similarity index 51% rename from src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/CreateObligationStmtVisitor.java rename to src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CreateObligationStmtVisitor.java index 26d446ae4..c27de10be 100644 --- a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/CreateObligationStmtVisitor.java +++ b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CreateObligationStmtVisitor.java @@ -1,31 +1,28 @@ -package gov.nist.csd.pm.policy.pml.compiler.visitor; +package gov.nist.csd.pm.pap.pml.compiler.visitor; -import gov.nist.csd.pm.policy.pml.antlr.PMLBaseVisitor; -import gov.nist.csd.pm.policy.pml.antlr.PMLParser; -import gov.nist.csd.pm.policy.pml.model.context.VisitorContext; -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.statement.CreateObligationStatement; -import gov.nist.csd.pm.policy.pml.statement.Expression; -import gov.nist.csd.pm.policy.pml.statement.PMLStatement; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.statement.operation.CreateObligationStatement; +import gov.nist.csd.pm.pap.pml.statement.operation.CreateRuleStatement; +import gov.nist.csd.pm.pap.pml.type.Type; import java.util.ArrayList; import java.util.List; public class CreateObligationStmtVisitor extends PMLBaseVisitor { - private final VisitorContext visitorCtx; - public CreateObligationStmtVisitor(VisitorContext visitorCtx) { - this.visitorCtx = visitorCtx; + super(visitorCtx); } @Override public CreateObligationStatement visitCreateObligationStatement(PMLParser.CreateObligationStatementContext ctx) { Expression name = Expression.compile(visitorCtx, ctx.expression(), Type.string()); - List ruleStmts = new ArrayList<>(); + List ruleStmts = new ArrayList<>(); for (PMLParser.CreateRuleStatementContext ruleStmt : ctx.createRuleStatement()) { - PMLStatement createRuleStmt = new CreateRuleStmtVisitor(visitorCtx) + CreateRuleStatement createRuleStmt = new CreateRuleStmtVisitor(visitorCtx) .visitCreateRuleStatement(ruleStmt); ruleStmts.add(createRuleStmt); } diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CreatePolicyStmtVisitor.java b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CreatePolicyStmtVisitor.java new file mode 100644 index 000000000..b23f2979b --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CreatePolicyStmtVisitor.java @@ -0,0 +1,21 @@ +package gov.nist.csd.pm.pap.pml.compiler.visitor; + +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.statement.operation.CreatePolicyStatement; +import gov.nist.csd.pm.pap.pml.type.Type; + +public class CreatePolicyStmtVisitor extends PMLBaseVisitor { + + public CreatePolicyStmtVisitor(VisitorContext visitorCtx) { + super(visitorCtx); + } + + @Override + public CreatePolicyStatement visitCreatePolicyStatement(PMLParser.CreatePolicyStatementContext ctx) { + Expression name = Expression.compile(visitorCtx, ctx.name, Type.string()); + + return new CreatePolicyStatement(name); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CreateProhibitionStmtVisitor.java b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CreateProhibitionStmtVisitor.java new file mode 100644 index 000000000..44ea487e9 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CreateProhibitionStmtVisitor.java @@ -0,0 +1,37 @@ +package gov.nist.csd.pm.pap.pml.compiler.visitor; + +import gov.nist.csd.pm.pap.prohibition.ProhibitionSubject; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.statement.operation.CreateProhibitionStatement; +import gov.nist.csd.pm.pap.pml.type.Type; + +public class CreateProhibitionStmtVisitor extends PMLBaseVisitor { + + public CreateProhibitionStmtVisitor(VisitorContext visitorCtx) { + super(visitorCtx); + } + + @Override + public CreateProhibitionStatement visitCreateProhibitionStatement(PMLParser.CreateProhibitionStatementContext ctx) { + Expression name = Expression.compile(visitorCtx, ctx.name, Type.string()); + Expression subject = Expression.compile(visitorCtx, ctx.subject, Type.string()); + ProhibitionSubject.Type type; + if (ctx.USER() != null) { + type = ProhibitionSubject.Type.USER; + } else if (ctx.USER_ATTRIBUTE() != null) { + type = ProhibitionSubject.Type.USER_ATTRIBUTE; + } else { + type = ProhibitionSubject.Type.PROCESS; + } + + Expression accessRights = Expression.compile(visitorCtx, ctx.accessRights, Type.array(Type.string())); + + boolean isIntersection = ctx.INTERSECTION() != null; + + Expression cc = Expression.compile(visitorCtx, ctx.containers, Type.array(Type.string())); + + return new CreateProhibitionStatement(name, subject, type, accessRights, isIntersection, cc); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CreateRuleStmtVisitor.java b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CreateRuleStmtVisitor.java new file mode 100644 index 000000000..5b5231c64 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CreateRuleStmtVisitor.java @@ -0,0 +1,285 @@ +package gov.nist.csd.pm.pap.pml.compiler.visitor; + +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.compiler.Variable; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.exception.PMLCompilationRuntimeException; +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.pml.expression.literal.LiteralVisitor; +import gov.nist.csd.pm.pap.pml.pattern.OperationPattern; +import gov.nist.csd.pm.pap.pml.pattern.operand.*; +import gov.nist.csd.pm.pap.pml.pattern.subject.*; +import gov.nist.csd.pm.pap.pml.scope.VariableAlreadyDefinedInScopeException; +import gov.nist.csd.pm.pap.pml.statement.*; +import gov.nist.csd.pm.pap.pml.statement.operation.CreateFunctionStatement; +import gov.nist.csd.pm.pap.pml.statement.operation.CreateRuleStatement; +import gov.nist.csd.pm.pap.pml.type.Type; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class CreateRuleStmtVisitor extends PMLBaseVisitor { + + public CreateRuleStmtVisitor(VisitorContext visitorCtx) { + super(visitorCtx); + } + + @Override + public CreateRuleStatement visitCreateRuleStatement(PMLParser.CreateRuleStatementContext ctx) { + SubjectPatternVisitor subjectPatternVisitor = new SubjectPatternVisitor(visitorCtx); + OperationPatternVisitor operationPatternVisitor = new OperationPatternVisitor(visitorCtx); + OperandMapVisitor operandMapVisitor = new OperandMapVisitor(visitorCtx); + ResponseVisitor responseVisitor = new ResponseVisitor(visitorCtx); + + Expression name = Expression.compile(visitorCtx, ctx.ruleName, Type.string()); + + return new CreateRuleStatement( + name, + subjectPatternVisitor.visit(ctx.subjectPattern()), + operationPatternVisitor.visit(ctx.operationPattern()), + operandMapVisitor.visitOperandPattern(ctx.operandPattern()), + responseVisitor.visitResponse(ctx.response()) + ); + } + + static class SubjectPatternVisitor extends PMLBaseVisitor { + + private LiteralVisitor literalVisitor; + private SubjectPatternExpressionVisitor subjectPatternExpressionVisitor; + + public SubjectPatternVisitor(VisitorContext visitorCtx) { + super(visitorCtx); + + this.literalVisitor = new LiteralVisitor(visitorCtx); + this.subjectPatternExpressionVisitor = new SubjectPatternExpressionVisitor(visitorCtx); + } + + @Override + public SubjectPattern visitAnyUserPattern(PMLParser.AnyUserPatternContext ctx) { + return new SubjectPattern(); + } + + @Override + public SubjectPattern visitUserPattern(PMLParser.UserPatternContext ctx) { + SubjectPatternExpression expr = subjectPatternExpressionVisitor.visit(ctx.subjectPatternExpression()); + return new SubjectPattern(expr); + } + } + + static class SubjectPatternExpressionVisitor extends PMLBaseVisitor { + private LiteralVisitor literalVisitor; + public SubjectPatternExpressionVisitor(VisitorContext visitorCtx) { + super(visitorCtx); + this.literalVisitor = new LiteralVisitor(visitorCtx); + } + + @Override + public SubjectPatternExpression visitBasicSubjectPatternExpression(PMLParser.BasicSubjectPatternExpressionContext ctx) { + return visit(ctx.basicSubjectPatternExpr()); + } + + @Override + public SubjectPatternExpression visitParenSubjectPatternExpression(PMLParser.ParenSubjectPatternExpressionContext ctx) { + return new ParenSubjectPatternExpression(visit(ctx.subjectPatternExpression())); + } + + @Override + public SubjectPatternExpression visitNegateSubjectPatternExpression(PMLParser.NegateSubjectPatternExpressionContext ctx) { + return new NegateSubjectPatternExpression(visit(ctx.subjectPatternExpression())); + } + + @Override + public SubjectPatternExpression visitLogicalSubjectPatternExpression(PMLParser.LogicalSubjectPatternExpressionContext ctx) { + return new LogicalSubjectPatternExpression( + visit(ctx.left), + visit(ctx.right), + ctx.LOGICAL_AND() != null + ); + } + + @Override + public SubjectPatternExpression visitInSubject(PMLParser.InSubjectContext ctx) { + return new InSubjectPattern(literalVisitor.visitStringLit(ctx.stringLit())); + } + + @Override + public SubjectPatternExpression visitUsernameSubject(PMLParser.UsernameSubjectContext ctx) { + return new UsernamePattern(literalVisitor.visitStringLit(ctx.stringLit())); + } + + @Override + public SubjectPatternExpression visitProcessSubject(PMLParser.ProcessSubjectContext ctx) { + return new ProcessSubjectPattern(literalVisitor.visitStringLit(ctx.stringLit())); + } + } + + static class OperationPatternVisitor extends PMLBaseVisitor { + + private LiteralVisitor literalVisitor; + + public OperationPatternVisitor(VisitorContext visitorCtx) { + super(visitorCtx); + + this.literalVisitor = new LiteralVisitor(visitorCtx); + } + + @Override + public OperationPattern visitAnyOperation(PMLParser.AnyOperationContext ctx) { + return new OperationPattern(); + } + + @Override + public OperationPattern visitIDOperation(PMLParser.IDOperationContext ctx) { + return new OperationPattern(literalVisitor.visitStringLit(ctx.stringLit()).getValue()); + } + } + + static class OperandPatternVisitor extends PMLBaseVisitor { + + private LiteralVisitor literalVisitor; + + public OperandPatternVisitor(VisitorContext visitorCtx) { + super(visitorCtx); + + this.literalVisitor = new LiteralVisitor(visitorCtx); + } + + @Override + public OperandPatternExpression visitParenOperandPatternExpression(PMLParser.ParenOperandPatternExpressionContext ctx) { + return new ParenOperandPatternExpression(visit(ctx.operandPatternExpression())); + } + + @Override + public OperandPatternExpression visitNegateOperandPatternExpression(PMLParser.NegateOperandPatternExpressionContext ctx) { + return new NegateOperandPatternExpression(visit(ctx.operandPatternExpression())); + } + + @Override + public OperandPatternExpression visitBasicOperandPatternExpression(PMLParser.BasicOperandPatternExpressionContext ctx) { + return visit(ctx.basicOperandPatternExpr()); + } + + @Override + public OperandPatternExpression visitLogicalOperandPatternExpression(PMLParser.LogicalOperandPatternExpressionContext ctx) { + return new LogicalOperandPatternExpression( + visit(ctx.left), + visit(ctx.right), + ctx.LOGICAL_AND() != null + ); + } + + @Override + public OperandPatternExpression visitAnyPolicyElement(PMLParser.AnyPolicyElementContext ctx) { + return new AnyOperandPattern(); + } + + @Override + public OperandPatternExpression visitInPolicyElement(PMLParser.InPolicyElementContext ctx) { + return new InOperandPattern(literalVisitor.visitStringLit(ctx.stringLit())); + } + + @Override + public OperandPatternExpression visitPolicyElement(PMLParser.PolicyElementContext ctx) { + return new NodeOperandPattern(literalVisitor.visitStringLit(ctx.stringLit())); + } + } + + static class OperandMapVisitor extends PMLBaseVisitor>> { + + private OperandPatternVisitor operandPatternVisitor = new OperandPatternVisitor(visitorCtx); + + public OperandMapVisitor(VisitorContext visitorCtx) { + super(visitorCtx); + + this.operandPatternVisitor = new OperandPatternVisitor(visitorCtx); + } + + @Override + public Map> visitOperandPattern(PMLParser.OperandPatternContext ctx) { + Map> map = new HashMap<>(); + + if (ctx == null) { + return new HashMap<>(); + } + + for (PMLParser.OperandPatternElementContext operandPatternElementContext : ctx.operandPatternElement()) { + Map> elementMap = visitOperandPatternElement(operandPatternElementContext); + map.putAll(elementMap); + } + + return map; + } + + @Override + public Map> visitOperandPatternElement(PMLParser.OperandPatternElementContext ctx) { + String key = ctx.key.getText(); + + List expressions = new ArrayList<>(); + if (ctx.single != null) { + OperandPatternExpression pattern = operandPatternVisitor.visit(ctx.single); + expressions.add(pattern); + } else if (ctx.multiple != null) { + for (PMLParser.OperandPatternExpressionContext operandCtx : ctx.multiple.operandPatternExpression()) { + expressions.add(operandPatternVisitor.visit(operandCtx)); + } + } else { + throw new PMLCompilationRuntimeException(ctx, "Invalid operand pattern expression: " + ctx.getText()); + } + + return Map.of(key, expressions); + } + } + + static class ResponseVisitor extends PMLBaseVisitor { + + public ResponseVisitor(VisitorContext visitorCtx) { + super(visitorCtx); + } + + @Override + public CreateRuleStatement.ResponseBlock visitResponse(PMLParser.ResponseContext ctx) { + String evtVar = ctx.ID().getText(); + + // create a new local parser scope for the response block + // add the event name and event context map to the local parser scope + VisitorContext localVisitorCtx = visitorCtx.copy(); + try { + localVisitorCtx.scope().addVariable(evtVar, new Variable(evtVar, Type.map(Type.string(), Type.any()), true)); + } catch (VariableAlreadyDefinedInScopeException e) { + throw new PMLCompilationRuntimeException(e); + } + + PMLParser.ResponseBlockContext responseBlockCtx = ctx.responseBlock(); + List responseStmtsCtx = responseBlockCtx.responseStatement(); + + StatementVisitor statementVisitor = new StatementVisitor(localVisitorCtx); + CreateRuleStmtVisitor createRuleStmtVisitor = new CreateRuleStmtVisitor(localVisitorCtx); + DeleteRuleStmtVisitor deleteRuleStmtVisitor = new DeleteRuleStmtVisitor(localVisitorCtx); + + List stmts = new ArrayList<>(); + for (PMLParser.ResponseStatementContext responseStmtCtx : responseStmtsCtx) { + PMLStatement stmt = null; + + if (responseStmtCtx.statement() != null) { + stmt = statementVisitor.visitStatement(responseStmtCtx.statement()); + } else if (responseStmtCtx.createRuleStatement() != null) { + stmt = createRuleStmtVisitor.visitCreateRuleStatement(responseStmtCtx.createRuleStatement()); + } else if (responseStmtCtx.deleteRuleStatement() != null) { + stmt = deleteRuleStmtVisitor.visitDeleteRuleStatement(responseStmtCtx.deleteRuleStatement()); + } + + if (stmt instanceof CreateFunctionStatement) { + throw new PMLCompilationRuntimeException(responseStmtCtx, "operations/routines are not allowed inside response blocks"); + } + + stmts.add(stmt); + } + + CreateRuleStatement.ResponseBlock responseBlock = new CreateRuleStatement.ResponseBlock(evtVar, stmts); + + return responseBlock; + } + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/DeassignStmtVisitor.java b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/DeassignStmtVisitor.java new file mode 100644 index 000000000..3c4aba979 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/DeassignStmtVisitor.java @@ -0,0 +1,23 @@ +package gov.nist.csd.pm.pap.pml.compiler.visitor; + +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.statement.operation.DeassignStatement; +import gov.nist.csd.pm.pap.pml.type.Type; + + +public class DeassignStmtVisitor extends PMLBaseVisitor { + + public DeassignStmtVisitor(VisitorContext visitorCtx) { + super(visitorCtx); + } + + @Override + public DeassignStatement visitDeassignStatement(PMLParser.DeassignStatementContext ctx) { + Expression name = Expression.compile(visitorCtx, ctx.ascendantNode, Type.string()); + Expression descendants = Expression.compile(visitorCtx, ctx.descendantNodes, Type.array(Type.string())); + + return new DeassignStatement(name, descendants); + } +} \ No newline at end of file diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/DeleteRuleStmtVisitor.java b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/DeleteRuleStmtVisitor.java similarity index 52% rename from src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/DeleteRuleStmtVisitor.java rename to src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/DeleteRuleStmtVisitor.java index 0f2650e7e..83017915e 100644 --- a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/DeleteRuleStmtVisitor.java +++ b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/DeleteRuleStmtVisitor.java @@ -1,18 +1,16 @@ -package gov.nist.csd.pm.policy.pml.compiler.visitor; +package gov.nist.csd.pm.pap.pml.compiler.visitor; -import gov.nist.csd.pm.policy.pml.antlr.PMLBaseVisitor; -import gov.nist.csd.pm.policy.pml.antlr.PMLParser; -import gov.nist.csd.pm.policy.pml.model.context.VisitorContext; -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.statement.DeleteRuleStatement; -import gov.nist.csd.pm.policy.pml.statement.Expression; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.statement.operation.DeleteRuleStatement; +import gov.nist.csd.pm.pap.pml.type.Type; -public class DeleteRuleStmtVisitor extends PMLBaseVisitor { - private final VisitorContext visitorCtx; +public class DeleteRuleStmtVisitor extends PMLBaseVisitor { public DeleteRuleStmtVisitor(VisitorContext visitorCtx) { - this.visitorCtx = visitorCtx; + super(visitorCtx); } @Override diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/DeleteStmtVisitor.java b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/DeleteStmtVisitor.java new file mode 100644 index 000000000..7d99953c1 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/DeleteStmtVisitor.java @@ -0,0 +1,43 @@ +package gov.nist.csd.pm.pap.pml.compiler.visitor; + +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.statement.operation.DeleteStatement; +import gov.nist.csd.pm.pap.pml.type.Type; + + +public class DeleteStmtVisitor extends PMLBaseVisitor { + + public DeleteStmtVisitor(VisitorContext visitorCtx) { + super(visitorCtx); + } + + @Override + public DeleteStatement visitDeleteStatement(PMLParser.DeleteStatementContext ctx) { + Expression nameExpr = Expression.compile(visitorCtx, ctx.expression(), Type.string()); + + PMLParser.DeleteTypeContext deleteTypeCtx = ctx.deleteType(); + DeleteStatement.Type deleteType = null; + if (deleteTypeCtx instanceof PMLParser.DeleteNodeContext deleteNodeCtx) { + PMLParser.NodeTypeContext nodeTypeCtx = deleteNodeCtx.nodeType(); + if (nodeTypeCtx.POLICY_CLASS() != null) { + deleteType = DeleteStatement.Type.POLICY_CLASS; + } else if (nodeTypeCtx.OBJECT_ATTRIBUTE() != null) { + deleteType = DeleteStatement.Type.OBJECT_ATTRIBUTE; + } else if (nodeTypeCtx.USER_ATTRIBUTE() != null) { + deleteType = DeleteStatement.Type.USER_ATTRIBUTE; + } else if (nodeTypeCtx.OBJECT() != null) { + deleteType = DeleteStatement.Type.OBJECT; + } else { + deleteType = DeleteStatement.Type.USER; + } + } else if (deleteTypeCtx instanceof PMLParser.DeleteProhibitionContext) { + deleteType = DeleteStatement.Type.PROHIBITION; + } else { + deleteType = DeleteStatement.Type.OBLIGATION; + } + + return new DeleteStatement(deleteType, nameExpr); + } +} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/DissociateStmtVisitor.java b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/DissociateStmtVisitor.java similarity index 50% rename from src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/DissociateStmtVisitor.java rename to src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/DissociateStmtVisitor.java index 4e3c71edb..50f590909 100644 --- a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/DissociateStmtVisitor.java +++ b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/DissociateStmtVisitor.java @@ -1,18 +1,15 @@ -package gov.nist.csd.pm.policy.pml.compiler.visitor; +package gov.nist.csd.pm.pap.pml.compiler.visitor; -import gov.nist.csd.pm.policy.pml.antlr.PMLBaseVisitor; -import gov.nist.csd.pm.policy.pml.antlr.PMLParser; -import gov.nist.csd.pm.policy.pml.model.context.VisitorContext; -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.statement.DissociateStatement; -import gov.nist.csd.pm.policy.pml.statement.Expression; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.statement.operation.DissociateStatement; +import gov.nist.csd.pm.pap.pml.type.Type; public class DissociateStmtVisitor extends PMLBaseVisitor { - private final VisitorContext visitorCtx; - public DissociateStmtVisitor(VisitorContext visitorCtx) { - this.visitorCtx = visitorCtx; + super(visitorCtx); } @Override diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/ForeachStmtVisitor.java b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/ForeachStmtVisitor.java new file mode 100644 index 000000000..033d8a4e0 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/ForeachStmtVisitor.java @@ -0,0 +1,77 @@ +package gov.nist.csd.pm.pap.pml.compiler.visitor; + +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.compiler.Variable; +import gov.nist.csd.pm.pap.pml.exception.PMLCompilationRuntimeException; +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.scope.PMLScopeException; +import gov.nist.csd.pm.pap.pml.statement.ForeachStatement; +import gov.nist.csd.pm.pap.pml.statement.PMLStatement; +import gov.nist.csd.pm.pap.pml.type.Type; + +import java.util.ArrayList; +import java.util.List; + +public class ForeachStmtVisitor extends PMLBaseVisitor { + + public ForeachStmtVisitor(VisitorContext visitorCtx) { + super(visitorCtx); + } + + @Override + public ForeachStatement visitForeachStatement(PMLParser.ForeachStatementContext ctx) { + boolean isMapFor = ctx.value != null; + + Expression iter; + if (isMapFor) { + iter = Expression.compile(visitorCtx, ctx.expression(), Type.map(Type.any(), Type.any())); + } else { + iter = Expression.compile(visitorCtx, ctx.expression(), Type.array(Type.any())); + } + + Type iterType; + try { + iterType = iter.getType(visitorCtx.scope()); + } catch (PMLScopeException e) { + throw new PMLCompilationRuntimeException(ctx, e.getMessage()); + } + + String varName = ctx.key.getText(); + String mapValueVarName = null; + if (isMapFor) { + mapValueVarName = ctx.value.getText(); + } + + List block = new ArrayList<>(); + Type keyType; + Type valueType = null; + if (isMapFor) { + keyType = iterType.getMapKeyType(); + valueType = iterType.getMapValueType(); + } else { + keyType = iterType.getArrayElementType(); + } + + VisitorContext localVisitorCtx = visitorCtx.copy(); + + try { + localVisitorCtx.scope().addVariable(varName, new Variable(varName, keyType, false)); + if (valueType != null) { + localVisitorCtx.scope().addVariable(mapValueVarName, new Variable(mapValueVarName, valueType, false)); + } + }catch (PMLScopeException e) { + throw new PMLCompilationRuntimeException(ctx, e.getMessage()); + } + + for (PMLParser.StatementContext stmtCtx : ctx.statementBlock().statement()) { + PMLStatement statement = new StatementVisitor(localVisitorCtx) + .visitStatement(stmtCtx); + block.add(statement); + + visitorCtx.scope().local().overwriteFromLocalScope(localVisitorCtx.scope().local()); + } + + return new ForeachStatement(varName, mapValueVarName, iter, block); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/FunctionDefinitionVisitor.java b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/FunctionDefinitionVisitor.java new file mode 100644 index 000000000..611fd0ae4 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/FunctionDefinitionVisitor.java @@ -0,0 +1,183 @@ +package gov.nist.csd.pm.pap.pml.compiler.visitor; + +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.compiler.Variable; +import gov.nist.csd.pm.pap.pml.exception.PMLCompilationRuntimeException; +import gov.nist.csd.pm.pap.pml.executable.PMLExecutableSignature; +import gov.nist.csd.pm.pap.pml.executable.operation.PMLStmtsOperation; +import gov.nist.csd.pm.pap.pml.executable.operation.PMLStmtsOperationSignature; +import gov.nist.csd.pm.pap.pml.executable.routine.PMLRoutineSignature; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.executable.routine.PMLStmtsRoutine; +import gov.nist.csd.pm.pap.pml.statement.PMLStatementBlock; +import gov.nist.csd.pm.pap.pml.statement.PMLStatementSerializable; +import gov.nist.csd.pm.pap.pml.statement.operation.CreateFunctionStatement; +import gov.nist.csd.pm.pap.pml.statement.operation.CreateOperationStatement; +import gov.nist.csd.pm.pap.pml.statement.operation.CreateRoutineStatement; +import gov.nist.csd.pm.pap.pml.type.Type; + +import java.util.*; + +public class FunctionDefinitionVisitor extends PMLBaseVisitor { + + public FunctionDefinitionVisitor(VisitorContext visitorCtx) { + super(visitorCtx); + } + + @Override + public CreateFunctionStatement visitFunctionDefinitionStatement(PMLParser.FunctionDefinitionStatementContext ctx) { + PMLParser.FunctionSignatureContext functionSignatureContext = ctx.functionSignature(); + boolean isOp = functionSignatureContext.OPERATION() != null; + + PMLExecutableSignature signature = new FunctionSignatureVisitor(visitorCtx, isOp).visitFunctionSignature(functionSignatureContext); + + PMLStatementBlock body = parseBody(ctx, signature.getOperands(), signature.getOperandTypes(), signature.getReturnType()); + + // check if the function is an operation + if (signature instanceof PMLStmtsOperationSignature pmlOperationSignature) { + return new CreateOperationStatement(new PMLStmtsOperation( + pmlOperationSignature.getFunctionName(), + pmlOperationSignature.getReturnType(), + pmlOperationSignature.getOperands(), + pmlOperationSignature.getNodeOperands(), + pmlOperationSignature.getOperandTypes(), + pmlOperationSignature.getChecks(), + body + )); + } else { + return new CreateRoutineStatement(new PMLStmtsRoutine( + signature.getFunctionName(), + signature.getReturnType(), + signature.getOperands(), + signature.getOperandTypes(), + body + )); + } + } + + private PMLStatementBlock parseBody(PMLParser.FunctionDefinitionStatementContext ctx, + List operandNames, + Map operandTypes, + Type returnType) { + // create a new scope for the function body + VisitorContext localVisitorCtx = visitorCtx.copy(); + + // add the args to the local scope, overwriting any variables with the same ID as the formal args + for (int i = 0; i < operandNames.size(); i++) { + String name = operandNames.get(i); + Type type = operandTypes.get(name); + + localVisitorCtx.scope().addOrOverwriteVariable( + name, + new Variable(name, type, false) + ); + } + + StatementBlockVisitor statementBlockVisitor = new StatementBlockVisitor(localVisitorCtx, returnType); + StatementBlockVisitor.Result result = statementBlockVisitor.visitStatementBlock(ctx.statementBlock()); + + if (!result.allPathsReturned() && !returnType.isVoid()) { + throw new PMLCompilationRuntimeException(ctx, "not all conditional paths return"); + } + + return new PMLStatementBlock(result.stmts()); + } + + public static class FunctionSignatureVisitor extends PMLBaseVisitor { + + private boolean isOp; + + public FunctionSignatureVisitor(VisitorContext visitorCtx, boolean isOp) { + super(visitorCtx); + + this.isOp = isOp; + } + + @Override + public PMLExecutableSignature visitFunctionSignature(PMLParser.FunctionSignatureContext ctx) { + String funcName = ctx.ID().getText(); + List args = parseFormalArgs(ctx.formalArgList()); + List operandNames = new ArrayList<>(); + List nodeops = new ArrayList<>(); + Map operandTypes = new HashMap<>(); + + for (FormalOperand operand : args) { + operandNames.add(operand.name); + operandTypes.put(operand.name, operand.type); + + if (operand.isNodeop) { + nodeops.add(operand.name); + } + } + + // write operands to scope for compiling check block + VisitorContext copy = visitorCtx.copy(); + for (int i = 0; i < operandNames.size(); i++) { + String name = operandNames.get(i); + Type type = operandTypes.get(name); + + copy.scope().addOrOverwriteVariable( + name, + new Variable(name, type, false) + ); + } + + Type returnType = parseReturnType(ctx.returnType); + + CheckStatementBlockVisitor checkStatementBlockVisitor = new CheckStatementBlockVisitor(copy); + PMLStatementBlock block = checkStatementBlockVisitor.visitCheckStatementBlock(ctx.checkStatementBlock()); + + if (isOp) { + return new PMLStmtsOperationSignature( + funcName, + returnType, + operandNames, + nodeops, + operandTypes, + block + ); + } else { + return new PMLRoutineSignature(funcName, returnType, operandNames, operandTypes); + } + } + + private record FormalOperand(String name, Type type, boolean isNodeop) {} + + private List parseFormalArgs(PMLParser.FormalArgListContext formalArgListCtx) { + List formalArgs = new ArrayList<>(); + Set argNames = new HashSet<>(); + for (int i = 0; i < formalArgListCtx.formalArg().size(); i++) { + PMLParser.FormalArgContext formalArgCtx = formalArgListCtx.formalArg().get(i); + String name = formalArgCtx.ID().getText(); + boolean isNodeop = formalArgCtx.NODEOP() != null; + + // check that two formal args dont have the same name and that there are no constants with the same name + if (argNames.contains(name)) { + throw new PMLCompilationRuntimeException( + formalArgCtx, + String.format("formal arg '%s' already defined in signature", name) + ); + } + + // get arg type + PMLParser.VariableTypeContext varTypeContext = formalArgCtx.variableType(); + Type type = Type.toType(varTypeContext); + + // req cap if operation + formalArgs.add(new FormalOperand(name, type, isNodeop)); + + argNames.add(name); + } + + return formalArgs; + } + + private Type parseReturnType(PMLParser.VariableTypeContext variableTypeContext) { + if (variableTypeContext == null) { + return Type.voidType(); + } + + return Type.toType(variableTypeContext); + } + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/FunctionInvokeStmtVisitor.java b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/FunctionInvokeStmtVisitor.java new file mode 100644 index 000000000..ac8ca09e7 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/FunctionInvokeStmtVisitor.java @@ -0,0 +1,98 @@ +package gov.nist.csd.pm.pap.pml.compiler.visitor; + +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.exception.PMLCompilationRuntimeException; +import gov.nist.csd.pm.pap.pml.executable.PMLExecutableSignature; +import gov.nist.csd.pm.pap.pml.executable.operation.PMLOperationSignature; +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.pml.expression.FunctionInvokeExpression; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.scope.PMLScopeException; +import gov.nist.csd.pm.pap.pml.scope.UnknownFunctionInScopeException; +import gov.nist.csd.pm.pap.pml.type.Type; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class FunctionInvokeStmtVisitor extends PMLBaseVisitor { + + public FunctionInvokeStmtVisitor(VisitorContext visitorCtx) { + super(visitorCtx); + } + + @Override + public FunctionInvokeExpression visitFunctionInvoke(PMLParser.FunctionInvokeContext ctx) { + return parse(ctx); + } + + @Override + public FunctionInvokeExpression visitFunctionInvokeStatement(PMLParser.FunctionInvokeStatementContext ctx) { + return parse(ctx.functionInvoke()); + } + + private FunctionInvokeExpression parse(PMLParser.FunctionInvokeContext funcCallCtx) { + String funcName = funcCallCtx.ID().getText(); + + // get actual arg expressions + PMLParser.FunctionInvokeArgsContext funcCallArgsCtx = funcCallCtx.functionInvokeArgs(); + List actualArgs = new ArrayList<>(); + + PMLParser.ExpressionListContext expressionListContext = funcCallArgsCtx.expressionList(); + if (expressionListContext != null) { + for (PMLParser.ExpressionContext exprCtx : expressionListContext.expression()) { + Expression expr = Expression.compile(visitorCtx, exprCtx, Type.any()); + + actualArgs.add(expr); + } + } + + // check the function is in scope and the args are correct + PMLExecutableSignature signature; + try { + signature = visitorCtx.scope().getFunction(funcName); + } catch (UnknownFunctionInScopeException e) { + throw new PMLCompilationRuntimeException(funcCallCtx, e.getMessage()); + } + + // check that the actual args are correct type only if the function is not a pattern function + // pattern operations are handled differently because we do not want to invoke them now, just + // prepare them to be invoked during the event processing flow + List formalArgs = signature.getOperands(); + if (formalArgs.size() != actualArgs.size()) { + throw new PMLCompilationRuntimeException( + funcCallCtx, + "wrong number of args for function call " + funcName + ": " + + "expected " + formalArgs.size() + ", got " + actualArgs.size() + ); + } else { + for (int i = 0; i < actualArgs.size(); i++) { + try { + Expression actual = actualArgs.get(i); + Type actualType = actual.getType(visitorCtx.scope()); + String operand = formalArgs.get(i); + Type formalType = signature.getOperandTypes().get(operand); + + if (!actual.getType(visitorCtx.scope()).equals(formalType)) { + throw new PMLCompilationRuntimeException( + funcCallCtx, + "invalid argument type: expected " + formalType + ", got " + + actualType + " at arg " + i + ); + } + } catch (PMLScopeException e) { + throw new PMLCompilationRuntimeException(funcCallCtx, e.getMessage()); + } + } + } + + Map operands = new HashMap<>(); + for (int i = 0; i < actualArgs.size(); i++) { + String operand = formalArgs.get(i); + operands.put(operand, actualArgs.get(i)); + } + + return new FunctionInvokeExpression(signature, operands); + } +} \ No newline at end of file diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/FunctionReturnStmtVisitor.java b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/FunctionReturnStmtVisitor.java new file mode 100644 index 000000000..292d0ced2 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/FunctionReturnStmtVisitor.java @@ -0,0 +1,51 @@ +package gov.nist.csd.pm.pap.pml.compiler.visitor; + +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.exception.PMLCompilationRuntimeException; +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.statement.FunctionReturnStatement; +import gov.nist.csd.pm.pap.pml.type.Type; +import org.antlr.v4.runtime.ParserRuleContext; + +public class FunctionReturnStmtVisitor extends PMLBaseVisitor { + + public FunctionReturnStmtVisitor(VisitorContext visitorCtx) { + super(visitorCtx); + } + + @Override + public FunctionReturnStatement visitReturnStatement(PMLParser.ReturnStatementContext ctx) { + ParserRuleContext enclosingCtx = getEnclosingContext(ctx); + if (enclosingCtx == null) { + throw new PMLCompilationRuntimeException( + ctx, + "return statement not in function definition or obligation response" + ); + } + + if (ctx.expression() == null) { + return new FunctionReturnStatement(); + } else if (enclosingCtx instanceof PMLParser.ResponseContext) { + throw new PMLCompilationRuntimeException( + ctx, + "return statement in response cannot return a value" + ); + } + + Expression e = Expression.compile(visitorCtx, ctx.expression(), Type.any()); + + return new FunctionReturnStatement(e); + } + + private ParserRuleContext getEnclosingContext(ParserRuleContext ctx) { + if (ctx instanceof PMLParser.FunctionDefinitionStatementContext || + ctx instanceof PMLParser.ResponseContext) { + return ctx; + } else if (ctx == null) { + return null; + } + + return getEnclosingContext(ctx.getParent()); + } +} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/IfStmtVisitor.java b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/IfStmtVisitor.java similarity index 62% rename from src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/IfStmtVisitor.java rename to src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/IfStmtVisitor.java index 0080e1c9a..65f4ca47d 100644 --- a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/IfStmtVisitor.java +++ b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/IfStmtVisitor.java @@ -1,29 +1,26 @@ -package gov.nist.csd.pm.policy.pml.compiler.visitor; +package gov.nist.csd.pm.pap.pml.compiler.visitor; -import gov.nist.csd.pm.policy.pml.antlr.PMLBaseVisitor; -import gov.nist.csd.pm.policy.pml.antlr.PMLParser; -import gov.nist.csd.pm.policy.pml.model.context.VisitorContext; -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.statement.IfStatement; -import gov.nist.csd.pm.policy.pml.statement.Expression; -import gov.nist.csd.pm.policy.pml.statement.PMLStatement; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.statement.IfStatement; +import gov.nist.csd.pm.pap.pml.statement.PMLStatement; +import gov.nist.csd.pm.pap.pml.statement.PMLStatementBlock; +import gov.nist.csd.pm.pap.pml.type.Type; import java.util.ArrayList; import java.util.List; -public class IfStmtVisitor extends PMLBaseVisitor { - - private final VisitorContext visitorCtx; +public class IfStmtVisitor extends PMLBaseVisitor { public IfStmtVisitor(VisitorContext visitorCtx) { - this.visitorCtx = visitorCtx; + super(visitorCtx); } @Override - public IfStatement visitIfStatement(PMLParser.IfStatementContext ctx) { + public PMLStatement visitIfStatement(PMLParser.IfStatementContext ctx) { // if block VisitorContext localVisitorCtx = visitorCtx.copy(); - boolean isComp = ctx.IS_COMPLEMENT() != null; Expression condition = Expression.compile(localVisitorCtx, ctx.condition, Type.bool()); List block = new ArrayList<>(); @@ -34,26 +31,25 @@ public IfStatement visitIfStatement(PMLParser.IfStatementContext ctx) { } // update outer scoped variables - visitorCtx.scope().overwriteVariables(localVisitorCtx.scope()); + visitorCtx.scope().local().overwriteFromLocalScope(localVisitorCtx.scope().local()); - IfStatement.ConditionalBlock ifBlock = new IfStatement.ConditionalBlock(isComp, condition, block); + IfStatement.ConditionalBlock ifBlock = new IfStatement.ConditionalBlock(condition, new PMLStatementBlock(block)); // else ifs localVisitorCtx = visitorCtx.copy(); statementVisitor = new StatementVisitor(localVisitorCtx); List elseIfs = new ArrayList<>(); for (PMLParser.ElseIfStatementContext elseIfStmtCtx : ctx.elseIfStatement()) { - isComp = elseIfStmtCtx.IS_COMPLEMENT() != null; condition = Expression.compile(visitorCtx, elseIfStmtCtx.condition, Type.bool()); block = new ArrayList<>(); for (PMLParser.StatementContext stmtCtx : elseIfStmtCtx.statementBlock().statement()) { PMLStatement statement = statementVisitor.visitStatement(stmtCtx); block.add(statement); } - elseIfs.add(new IfStatement.ConditionalBlock(isComp, condition, block)); + elseIfs.add(new IfStatement.ConditionalBlock(condition, new PMLStatementBlock(block))); // update outer scoped variables - visitorCtx.scope().overwriteVariables(localVisitorCtx.scope()); + visitorCtx.scope().local().overwriteFromLocalScope(localVisitorCtx.scope().local()); } // else @@ -67,9 +63,9 @@ public IfStatement visitIfStatement(PMLParser.IfStatementContext ctx) { } // update outer scoped variables - visitorCtx.scope().overwriteVariables(localVisitorCtx.scope()); + visitorCtx.scope().local().overwriteFromLocalScope(localVisitorCtx.scope().local()); } - return new IfStatement(ifBlock, elseIfs, block); + return new IfStatement(ifBlock, elseIfs, new PMLStatementBlock(block)); } } diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/PMLBaseVisitor.java b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/PMLBaseVisitor.java new file mode 100644 index 000000000..f38503629 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/PMLBaseVisitor.java @@ -0,0 +1,13 @@ +package gov.nist.csd.pm.pap.pml.compiler.visitor; + +import gov.nist.csd.pm.pap.pml.antlr.PMLParserBaseVisitor; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; + +public abstract class PMLBaseVisitor extends PMLParserBaseVisitor { + + protected VisitorContext visitorCtx; + + public PMLBaseVisitor(VisitorContext visitorCtx) { + this.visitorCtx = visitorCtx; + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/PMLVisitor.java b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/PMLVisitor.java new file mode 100644 index 000000000..4d1cebaa4 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/PMLVisitor.java @@ -0,0 +1,129 @@ +package gov.nist.csd.pm.pap.pml.compiler.visitor; + +import gov.nist.csd.pm.pap.pml.CompiledPML; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.exception.PMLCompilationRuntimeException; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.executable.PMLExecutableSignature; +import gov.nist.csd.pm.pap.pml.statement.*; +import gov.nist.csd.pm.pap.pml.statement.operation.CreateFunctionStatement; +import gov.nist.csd.pm.pap.pml.statement.operation.CreateOperationStatement; +import gov.nist.csd.pm.pap.pml.statement.operation.CreateRoutineStatement; + +import java.util.*; + +public class PMLVisitor extends PMLBaseVisitor> { + + public PMLVisitor(VisitorContext visitorCtx) { + super(visitorCtx); + } + + @Override + public List visitPml(PMLParser.PmlContext ctx) { + SortedStatements sortedStatements = sortStatements(ctx); + + VisitorContext copy = visitorCtx.copy(); + CompiledExecutables executables = compileExecutables(copy, sortedStatements.functionCtxs); + + List stmts = new ArrayList<>(); + stmts.addAll(executables.operations); + stmts.addAll(executables.routines); + stmts.addAll(compileStatements(sortedStatements.statementCtxs)); + + return stmts; + } + + private SortedStatements sortStatements(PMLParser.PmlContext ctx) { + List functionCtxs = new ArrayList<>(); + List statementCtxs = new ArrayList<>(); + + for (PMLParser.StatementContext stmtCtx : ctx.statement()) { + if (stmtCtx.functionDefinitionStatement() != null) { + functionCtxs.add(stmtCtx.functionDefinitionStatement()); + } else { + statementCtxs.add(stmtCtx); + } + } + + return new SortedStatements(functionCtxs, statementCtxs); + } + + private record SortedStatements(List functionCtxs, + List statementCtxs) {} + + private CompiledExecutables compileExecutables(VisitorContext visitorCtx, List functionSignatureCtxs) { + Map executables = new HashMap<>(visitorCtx.scope().global().getExecutables()); + // track the function definitions statements to be processed, + // any function with an error won't be processed but execution will continue inorder to find anymore errors + Map validFunctionDefs = new HashMap<>(); + + for (PMLParser.FunctionDefinitionStatementContext functionDefinitionStatementContext : functionSignatureCtxs) { + boolean isOp = functionDefinitionStatementContext.functionSignature().OPERATION() != null; + + FunctionDefinitionVisitor.FunctionSignatureVisitor functionSignatureVisitor = + new FunctionDefinitionVisitor.FunctionSignatureVisitor(visitorCtx, isOp); + + // visit the signature which will add to the scope, if an error occurs, log it and continue + try { + PMLExecutableSignature signature = functionSignatureVisitor.visitFunctionSignature( + functionDefinitionStatementContext.functionSignature()); + + // check that the function isn't already defined in the pml or global scope + if (executables.containsKey(signature.getFunctionName())) { + visitorCtx.errorLog().addError(functionDefinitionStatementContext, + "function '" + signature.getFunctionName() + "' already defined in scope"); + continue; + } + + executables.put(signature.getFunctionName(), signature); + validFunctionDefs.put(signature.getFunctionName(), functionDefinitionStatementContext); + } catch (PMLCompilationRuntimeException e) { + visitorCtx.errorLog().addErrors(e.getErrors()); + } + } + + // store all function signatures for use in compiling function bodies + visitorCtx.scope().global().addExecutables(executables); + + // compile function bodies + FunctionDefinitionVisitor functionDefinitionVisitor = new FunctionDefinitionVisitor(visitorCtx); + List operations = new ArrayList<>(); + List routines = new ArrayList<>(); + + for (PMLParser.FunctionDefinitionStatementContext functionDefinitionStatementContext : validFunctionDefs.values()) { + // visit the definition which will return the statement with body + try { + CreateFunctionStatement funcStmt = + functionDefinitionVisitor.visitFunctionDefinitionStatement(functionDefinitionStatementContext); + if (funcStmt instanceof CreateOperationStatement createOperationStatement) { + operations.add(createOperationStatement); + } else if (funcStmt instanceof CreateRoutineStatement createRoutineStatement) { + routines.add(createRoutineStatement); + } + } catch (PMLCompilationRuntimeException e) { + visitorCtx.errorLog().addErrors(e.getErrors()); + } + } + + return new CompiledExecutables(operations, routines); + } + + private record CompiledExecutables(List operations, List routines) {} + + private List compileStatements(List statementCtxs) { + List statements = new ArrayList<>(); + for (PMLParser.StatementContext stmtCtx : statementCtxs) { + StatementVisitor statementVisitor = new StatementVisitor(visitorCtx); + + try { + PMLStatement statement = statementVisitor.visitStatement(stmtCtx); + statements.add(statement); + } catch (PMLCompilationRuntimeException e) { + visitorCtx.errorLog().addErrors(e.getErrors()); + } + } + + return statements; + } + +} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/SetNodePropertiesStmtVisitor.java b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/SetNodePropertiesStmtVisitor.java similarity index 53% rename from src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/SetNodePropertiesStmtVisitor.java rename to src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/SetNodePropertiesStmtVisitor.java index 8518a3f76..d3829fd5a 100644 --- a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/SetNodePropertiesStmtVisitor.java +++ b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/SetNodePropertiesStmtVisitor.java @@ -1,18 +1,15 @@ -package gov.nist.csd.pm.policy.pml.compiler.visitor; +package gov.nist.csd.pm.pap.pml.compiler.visitor; -import gov.nist.csd.pm.policy.pml.antlr.PMLBaseVisitor; -import gov.nist.csd.pm.policy.pml.antlr.PMLParser; -import gov.nist.csd.pm.policy.pml.model.context.VisitorContext; -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.statement.Expression; -import gov.nist.csd.pm.policy.pml.statement.SetNodePropertiesStatement; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.statement.operation.SetNodePropertiesStatement; +import gov.nist.csd.pm.pap.pml.type.Type; public class SetNodePropertiesStmtVisitor extends PMLBaseVisitor { - private final VisitorContext visitorCtx; - public SetNodePropertiesStmtVisitor(VisitorContext visitorCtx) { - this.visitorCtx = visitorCtx; + super(visitorCtx); } @Override diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/SetResourceOperationsStmtVisitor.java b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/SetResourceOperationsStmtVisitor.java new file mode 100644 index 000000000..ae66a08a4 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/SetResourceOperationsStmtVisitor.java @@ -0,0 +1,28 @@ +package gov.nist.csd.pm.pap.pml.compiler.visitor; + +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.pml.expression.literal.ArrayLiteral; +import gov.nist.csd.pm.pap.pml.expression.literal.LiteralVisitor; +import gov.nist.csd.pm.pap.pml.expression.literal.StringLiteral; +import gov.nist.csd.pm.pap.pml.statement.operation.SetResourceOperationsStatement; +import gov.nist.csd.pm.pap.pml.type.Type; +import org.antlr.v4.runtime.tree.TerminalNode; + +import java.util.ArrayList; +import java.util.List; + +public class SetResourceOperationsStmtVisitor extends PMLBaseVisitor { + + public SetResourceOperationsStmtVisitor(VisitorContext visitorCtx) { + super(visitorCtx); + } + + @Override + public SetResourceOperationsStatement visitSetResourceOperationsStatement(PMLParser.SetResourceOperationsStatementContext ctx) { + Expression expression = Expression.compile(visitorCtx, ctx.accessRightsArr, Type.array(Type.string())); + + return new SetResourceOperationsStatement(expression); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/StatementBlockVisitor.java b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/StatementBlockVisitor.java new file mode 100644 index 000000000..77e596ee8 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/StatementBlockVisitor.java @@ -0,0 +1,112 @@ +package gov.nist.csd.pm.pap.pml.compiler.visitor; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.exception.PMLCompilationRuntimeException; +import gov.nist.csd.pm.pap.pml.statement.PMLStatement; +import gov.nist.csd.pm.pap.pml.statement.operation.CreateFunctionStatement; +import gov.nist.csd.pm.pap.pml.statement.FunctionReturnStatement; +import gov.nist.csd.pm.pap.pml.statement.IfStatement; +import gov.nist.csd.pm.pap.pml.type.Type; + +import java.util.ArrayList; +import java.util.List; + +public class StatementBlockVisitor extends PMLBaseVisitor { + + private Type returnType; + + public StatementBlockVisitor(VisitorContext visitorCtx, Type returnType) { + super(visitorCtx); + this.returnType = returnType; + } + + @Override + public Result visitStatementBlock(PMLParser.StatementBlockContext ctx) { + List stmts = new ArrayList<>(); + StatementVisitor statementVisitor = new StatementVisitor(visitorCtx); + for (PMLParser.StatementContext statementContext : ctx.statement()) { + PMLStatement pmlStatement = statementVisitor.visitStatement(statementContext); + + if (pmlStatement instanceof CreateFunctionStatement) { + throw new PMLCompilationRuntimeException(statementContext, "operations are not allowed inside statement blocks"); + } + + stmts.add(pmlStatement); + } + + try { + boolean allPathsReturned = checkAllPathsReturned(visitorCtx, stmts, returnType); + return new Result(allPathsReturned, stmts); + } catch (PMException e) { + throw new PMLCompilationRuntimeException(ctx, e.getMessage()); + } + } + + public static boolean checkAllPathsReturned(VisitorContext visitorCtx, List statements, Type returnType) + throws PMException { + if (statements.isEmpty()) { + return false; + } + + PMLStatement lastStmt = statements.getLast(); + if (lastStmt instanceof FunctionReturnStatement functionReturnStatement) { + if (!functionReturnStatement.matchesReturnType(returnType, visitorCtx.scope())) { + throw new PMException("return statement \"" + functionReturnStatement + "\" does not match return type " + returnType); + } + + return true; + } + + + boolean allPathsReturned = false; + PMLStatement pmlStatement; + for (int i = 0; i < statements.size(); i++) { + pmlStatement = statements.get(i); + + if (pmlStatement instanceof FunctionReturnStatement functionReturnStatement) { + if (i < statements.size() - 1) { + throw new PMException("function return should be last statement in block"); + } + + if (!functionReturnStatement.matchesReturnType(returnType, visitorCtx.scope())) { + throw new PMException("return statement \"" + functionReturnStatement + "\" does not match return type " + returnType); + } + + return true; + } else if (pmlStatement instanceof IfStatement ifStatement) { + if (!allIfStatementPathsReturned(visitorCtx, ifStatement, returnType)) { + return false; + } else { + allPathsReturned = true; + } + } + } + + return allPathsReturned; + } + + private static boolean allIfStatementPathsReturned(VisitorContext visitorCtx, IfStatement ifStatement, Type returnType) + throws PMException { + boolean check = checkAllPathsReturned(visitorCtx, ifStatement.getIfBlock().block().getStmts(), returnType); + if (!check) { + return false; + } + + // check else ifs + for (IfStatement.ConditionalBlock conditionalBlock : ifStatement.getIfElseBlocks()) { + check = checkAllPathsReturned(visitorCtx, conditionalBlock.block().getStmts(), returnType); + if (!check) { + return false; + } + } + + // check else + return checkAllPathsReturned(visitorCtx, ifStatement.getElseBlock().getStmts(), returnType); + } + + public record Result(boolean allPathsReturned, List stmts) { + + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/StatementVisitor.java b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/StatementVisitor.java new file mode 100644 index 000000000..de5f262a1 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/StatementVisitor.java @@ -0,0 +1,127 @@ +package gov.nist.csd.pm.pap.pml.compiler.visitor; + +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.statement.PMLStatement; + +public class StatementVisitor extends PMLBaseVisitor { + + public StatementVisitor(VisitorContext visitorCtx) { + super(visitorCtx); + } + + @Override + public PMLStatement visitCreatePolicyStatement(PMLParser.CreatePolicyStatementContext ctx) { + return new CreatePolicyStmtVisitor(visitorCtx).visitCreatePolicyStatement(ctx); + } + + @Override + public PMLStatement visitCreateNonPCStatement(PMLParser.CreateNonPCStatementContext ctx) { + return new CreateNonPCStmtVisitor(visitorCtx).visitCreateNonPCStatement(ctx); + } + + @Override + public PMLStatement visitCreateObligationStatement(PMLParser.CreateObligationStatementContext ctx) { + return new CreateObligationStmtVisitor(visitorCtx).visitCreateObligationStatement(ctx); + } + + @Override + public PMLStatement visitCreateProhibitionStatement(PMLParser.CreateProhibitionStatementContext ctx) { + return new CreateProhibitionStmtVisitor(visitorCtx).visitCreateProhibitionStatement(ctx); + } + + @Override + public PMLStatement visitSetNodePropertiesStatement(PMLParser.SetNodePropertiesStatementContext ctx) { + return new SetNodePropertiesStmtVisitor(visitorCtx).visitSetNodePropertiesStatement(ctx); + } + + @Override + public PMLStatement visitAssignStatement(PMLParser.AssignStatementContext ctx) { + return new AssignStmtVisitor(visitorCtx).visitAssignStatement(ctx); + } + + @Override + public PMLStatement visitDeassignStatement(PMLParser.DeassignStatementContext ctx) { + return new DeassignStmtVisitor(visitorCtx).visitDeassignStatement(ctx); + } + + @Override + public PMLStatement visitAssociateStatement(PMLParser.AssociateStatementContext ctx) { + return new AssociateStmtVisitor(visitorCtx).visitAssociateStatement(ctx); + } + + @Override + public PMLStatement visitDissociateStatement(PMLParser.DissociateStatementContext ctx) { + return new DissociateStmtVisitor(visitorCtx).visitDissociateStatement(ctx); + } + + @Override + public PMLStatement visitSetResourceOperationsStatement(PMLParser.SetResourceOperationsStatementContext ctx) { + return new SetResourceOperationsStmtVisitor(visitorCtx).visitSetResourceOperationsStatement(ctx); + } + + @Override + public PMLStatement visitDeleteStatement(PMLParser.DeleteStatementContext ctx) { + return new DeleteStmtVisitor(visitorCtx).visitDeleteStatement(ctx); + } + + @Override + public PMLStatement visitDeleteRuleStatement(PMLParser.DeleteRuleStatementContext ctx) { + return new DeleteRuleStmtVisitor(visitorCtx).visitDeleteRuleStatement(ctx); + } + + @Override + public PMLStatement visitVariableAssignmentStatement(PMLParser.VariableAssignmentStatementContext ctx) { + return new VarStmtVisitor(visitorCtx).visitVariableAssignmentStatement(ctx); + } + + @Override + public PMLStatement visitVarDeclaration(PMLParser.VarDeclarationContext ctx) { + return new VarStmtVisitor(visitorCtx).visitVarDeclaration(ctx); + } + + @Override + public PMLStatement visitShortDeclaration(PMLParser.ShortDeclarationContext ctx) { + return new VarStmtVisitor(visitorCtx).visitShortDeclaration(ctx); + } + + @Override + public PMLStatement visitFunctionDefinitionStatement(PMLParser.FunctionDefinitionStatementContext ctx) { + return new FunctionDefinitionVisitor(visitorCtx).visitFunctionDefinitionStatement(ctx); + } + + @Override + public PMLStatement visitReturnStatement(PMLParser.ReturnStatementContext ctx) { + return new FunctionReturnStmtVisitor(visitorCtx).visitReturnStatement(ctx); + } + + @Override + public PMLStatement visitFunctionInvokeStatement(PMLParser.FunctionInvokeStatementContext ctx) { + return new FunctionInvokeStmtVisitor(visitorCtx).visitFunctionInvokeStatement(ctx); + } + + @Override + public PMLStatement visitForeachStatement(PMLParser.ForeachStatementContext ctx) { + return new ForeachStmtVisitor(visitorCtx).visitForeachStatement(ctx); + } + + @Override + public PMLStatement visitBreakStatement(PMLParser.BreakStatementContext ctx) { + return new BreakStmtVisitor(visitorCtx).visitBreakStatement(ctx); + } + + @Override + public PMLStatement visitContinueStatement(PMLParser.ContinueStatementContext ctx) { + return new ContinueStmtVisitor(visitorCtx).visitContinueStatement(ctx); + } + + @Override + public PMLStatement visitIfStatement(PMLParser.IfStatementContext ctx) { + return new IfStmtVisitor(visitorCtx).visitIfStatement(ctx); + } + + @Override + public PMLStatement visitCheckStatement(PMLParser.CheckStatementContext ctx) { + return new CheckStatementVisitor(visitorCtx).visitCheckStatement(ctx); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/VarStmtVisitor.java b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/VarStmtVisitor.java new file mode 100644 index 000000000..c146b956d --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/compiler/visitor/VarStmtVisitor.java @@ -0,0 +1,87 @@ +package gov.nist.csd.pm.pap.pml.compiler.visitor; + +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.compiler.Variable; +import gov.nist.csd.pm.pap.pml.exception.PMLCompilationRuntimeException; +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.scope.PMLScopeException; +import gov.nist.csd.pm.pap.pml.statement.*; +import gov.nist.csd.pm.pap.pml.statement.ShortDeclarationStatement; +import gov.nist.csd.pm.pap.pml.statement.VariableAssignmentStatement; +import gov.nist.csd.pm.pap.pml.statement.VariableDeclarationStatement; +import gov.nist.csd.pm.pap.pml.type.Type; + +import java.util.ArrayList; +import java.util.List; + +public class VarStmtVisitor extends PMLBaseVisitor { + + + public VarStmtVisitor(VisitorContext visitorCtx) { + super(visitorCtx); + } + + @Override + public PMLStatement visitVarDeclaration(PMLParser.VarDeclarationContext ctx) { + List decls = new ArrayList<>(); + for (PMLParser.VarSpecContext varSpecContext : ctx.varSpec()) { + String varName = varSpecContext.ID().getText(); + Expression expr = Expression.compile(visitorCtx, varSpecContext.expression(), Type.any()); + + try { + visitorCtx.scope().addVariable(varName, new Variable(varName, expr.getType(visitorCtx.scope()), false)); + } catch (PMLScopeException e) { + throw new PMLCompilationRuntimeException(ctx, e.getMessage()); + } + + decls.add(new VariableDeclarationStatement.Declaration(varName, expr)); + } + + return new VariableDeclarationStatement(decls); + } + + @Override + public PMLStatement visitShortDeclaration(PMLParser.ShortDeclarationContext ctx) { + String varName = ctx.ID().getText(); + Expression expr = Expression.compile(visitorCtx, ctx.expression(), Type.any()); + + ShortDeclarationStatement stmt = new ShortDeclarationStatement(varName, expr); + + try { + if (visitorCtx.scope().variableExists(varName)) { + throw new PMLCompilationRuntimeException(ctx, "variable " + varName + " already exists"); + } + + visitorCtx.scope().addVariable(varName, new Variable(varName, expr.getType(visitorCtx.scope()), false)); + } catch (PMLScopeException e) { + throw new PMLCompilationRuntimeException(ctx, e.getMessage()); + } + + return stmt; + } + + @Override + public PMLStatement visitVariableAssignmentStatement(PMLParser.VariableAssignmentStatementContext ctx) { + String varName = ctx.ID().getText(); + Expression expr = Expression.compile(visitorCtx, ctx.expression(), Type.any()); + + VariableAssignmentStatement stmt = new VariableAssignmentStatement( + varName, + ctx.PLUS() != null, + expr + ); + + try { + if (visitorCtx.scope().getVariable(varName).isConst()) { + throw new PMLCompilationRuntimeException(ctx, "cannot reassign const variable"); + } + + // don't need to update variable since the name and type are the only thing that matter during compilation + } catch (PMLScopeException e) { + throw new PMLCompilationRuntimeException(ctx, e.getMessage()); + } + + return stmt; + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/context/ExecutionContext.java b/src/main/java/gov/nist/csd/pm/pap/pml/context/ExecutionContext.java new file mode 100644 index 000000000..d0b92e015 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/context/ExecutionContext.java @@ -0,0 +1,110 @@ +package gov.nist.csd.pm.pap.pml.context; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.executable.AdminExecutable; +import gov.nist.csd.pm.pap.pml.scope.ExecuteGlobalScope; +import gov.nist.csd.pm.pap.pml.statement.PMLStatement; +import gov.nist.csd.pm.pap.pml.value.*; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.pml.scope.Scope; + +import java.io.Serializable; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +public class ExecutionContext implements Serializable { + + protected final UserContext author; + protected final Scope> scope; + protected final PAP pap; + + public ExecutionContext(UserContext author, PAP pap) throws PMException { + this.author = author; + this.scope = new Scope<>(new ExecuteGlobalScope(pap)); + this.pap = pap; + } + + public ExecutionContext(UserContext author, PAP pap, Scope> scope) throws PMException { + this.author = author; + this.scope = scope; + this.pap = pap; + } + + public UserContext author() { + return author; + } + + public Scope> scope() { + return scope; + } + + public ExecutionContext copy() throws PMException { + return new ExecutionContext(author, pap, scope.copy()); + } + + public Value executeStatements(List stmts, Map operands) throws PMException { + ExecutionContext copy = writeOperandsToScope(operands); + + for (PMLStatement statement : stmts) { + Value value = statement.execute(copy, pap); + + scope.local().overwriteFromLocalScope(copy.scope.local()); + + if (value instanceof ReturnValue || value instanceof BreakValue || value instanceof ContinueValue) { + return value; + } + } + + return new VoidValue(); + } + + public Value executeOperationStatements(List stmts, Map operands) throws PMException { + return executeStatements(stmts, operands); + } + + public Value executeRoutineStatements(List stmts, Map operands) throws PMException { + return executeStatements(stmts, operands); + } + + protected ExecutionContext writeOperandsToScope(Map operands) throws PMException { + ExecutionContext copy = this.copy(); + + for (Map.Entry entry : operands.entrySet()) { + String key = entry.getKey(); + Object o = entry.getValue(); + + Value value; + if (o instanceof Value) { + value = (Value) o; + } else { + value = Value.fromObject(o); + } + + copy.scope.local().addOrOverwriteVariable(key, value); + } + + return copy; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (!(o instanceof ExecutionContext that)) { + return false; + } + return Objects.equals(author, that.author) && Objects.equals( + scope, + that.scope + ); + } + + @Override + public int hashCode() { + return Objects.hash(author, scope); + } + +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/context/VisitorContext.java b/src/main/java/gov/nist/csd/pm/pap/pml/context/VisitorContext.java new file mode 100644 index 000000000..301d59687 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/context/VisitorContext.java @@ -0,0 +1,48 @@ +package gov.nist.csd.pm.pap.pml.context; + +import gov.nist.csd.pm.pap.pml.PMLErrorHandler; +import gov.nist.csd.pm.pap.pml.compiler.Variable; +import gov.nist.csd.pm.pap.pml.compiler.error.ErrorLog; +import gov.nist.csd.pm.pap.pml.exception.PMLExecutionException; +import gov.nist.csd.pm.pap.pml.executable.PMLExecutableSignature; +import gov.nist.csd.pm.pap.pml.scope.GlobalScope; +import gov.nist.csd.pm.pap.pml.scope.Scope; +import org.antlr.v4.runtime.CommonTokenStream; +import org.antlr.v4.runtime.ListTokenSource; + +import java.util.List; +import java.util.Objects; + +public record VisitorContext(CommonTokenStream tokens, Scope scope, ErrorLog errorLog, PMLErrorHandler pmlErrorHandler) { + + public VisitorContext(Scope scope) { + this(new CommonTokenStream(new ListTokenSource(List.of())), scope, new ErrorLog(), new PMLErrorHandler()); + } + + public VisitorContext(GlobalScope globalScope) { + this(new CommonTokenStream(new ListTokenSource(List.of())), new Scope<>(globalScope), new ErrorLog(), new PMLErrorHandler()); + } + + public VisitorContext copy() { + // want to persist the error tracker and tokens + return new VisitorContext(this.tokens, scope.copy(), this.errorLog, this.pmlErrorHandler); + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + VisitorContext that = (VisitorContext) o; + return Objects.equals(tokens, that.tokens) && Objects.equals( + scope, that.scope) && Objects.equals(errorLog, that.errorLog); + } + + @Override + public int hashCode() { + return Objects.hash(tokens, scope, errorLog); + } +} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/model/exception/PMLCompilationException.java b/src/main/java/gov/nist/csd/pm/pap/pml/exception/PMLCompilationException.java similarity index 63% rename from src/main/java/gov/nist/csd/pm/policy/pml/model/exception/PMLCompilationException.java rename to src/main/java/gov/nist/csd/pm/pap/pml/exception/PMLCompilationException.java index 3ce23e6fd..b3836b233 100644 --- a/src/main/java/gov/nist/csd/pm/policy/pml/model/exception/PMLCompilationException.java +++ b/src/main/java/gov/nist/csd/pm/pap/pml/exception/PMLCompilationException.java @@ -1,10 +1,12 @@ -package gov.nist.csd.pm.policy.pml.model.exception; +package gov.nist.csd.pm.pap.pml.exception; -import gov.nist.csd.pm.policy.pml.compiler.error.CompileError; -import gov.nist.csd.pm.policy.pml.compiler.error.ErrorLog; -import gov.nist.csd.pm.policy.exceptions.PMException; +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.pml.compiler.error.CompileError; +import gov.nist.csd.pm.pap.pml.compiler.error.ErrorLog; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; public class PMLCompilationException extends PMException { @@ -15,6 +17,11 @@ public PMLCompilationException(ErrorLog errorLog) { this.errors = new ArrayList<>(errorLog.getErrors()); } + public PMLCompilationException(List errors) { + super(errors.toString()); + this.errors = errors; + } + public PMLCompilationException(CompileError error) { super(error.errorMessage()); this.errors = Arrays.asList(error); diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/exception/PMLCompilationRuntimeException.java b/src/main/java/gov/nist/csd/pm/pap/pml/exception/PMLCompilationRuntimeException.java new file mode 100644 index 000000000..563c9765b --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/exception/PMLCompilationRuntimeException.java @@ -0,0 +1,34 @@ +package gov.nist.csd.pm.pap.pml.exception; + +import gov.nist.csd.pm.pap.pml.compiler.Position; +import gov.nist.csd.pm.pap.pml.compiler.error.CompileError; +import org.antlr.v4.runtime.ParserRuleContext; + +import java.util.ArrayList; +import java.util.List; + +public class PMLCompilationRuntimeException extends RuntimeException { + + private List errors; + + public PMLCompilationRuntimeException(ParserRuleContext ctx, String message) { + this.errors = List.of(CompileError.fromParserRuleContext(ctx, message)); + } + + public PMLCompilationRuntimeException(String message) { + this.errors = new ArrayList<>(); + this.errors.add(new CompileError(new Position(0, 0, 0), message)); + } + + public PMLCompilationRuntimeException(List errors) { + this.errors = errors; + } + + public PMLCompilationRuntimeException(Throwable cause) { + super(cause); + } + + public List getErrors() { + return errors; + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/exception/PMLExecutionException.java b/src/main/java/gov/nist/csd/pm/pap/pml/exception/PMLExecutionException.java new file mode 100644 index 000000000..f60e520f3 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/exception/PMLExecutionException.java @@ -0,0 +1,18 @@ +package gov.nist.csd.pm.pap.pml.exception; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.pml.statement.PMLStatementSerializable; + +public class PMLExecutionException extends PMException { + public PMLExecutionException(PMLStatementSerializable stmt, Exception e) { + super("error executing: " + stmt.toString(), e); + } + + public PMLExecutionException(String msg) { + super(msg); + } + + public PMLExecutionException(Exception e) { + super(e); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/executable/PMLExecutableSignature.java b/src/main/java/gov/nist/csd/pm/pap/pml/executable/PMLExecutableSignature.java new file mode 100644 index 000000000..f7f34d6a7 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/executable/PMLExecutableSignature.java @@ -0,0 +1,72 @@ +package gov.nist.csd.pm.pap.pml.executable; + +import gov.nist.csd.pm.pap.pml.statement.PMLStatementSerializable; +import gov.nist.csd.pm.pap.pml.type.Type; + +import java.util.List; +import java.util.Map; +import java.util.Objects; + +public class PMLExecutableSignature implements PMLStatementSerializable { + + protected String functionName; + protected Type returnType; + protected List operands; + protected Map operandTypes; + + public PMLExecutableSignature(String functionName, Type returnType, List operands, Map operandTypes) { + this.functionName = functionName; + this.returnType = returnType; + this.operands = operands; + this.operandTypes = operandTypes; + } + + public String getFunctionName() { + return functionName; + } + + public Type getReturnType() { + return returnType; + } + + public List getOperands() { + return operands; + } + + public Map getOperandTypes() { + return operandTypes; + } + + protected String serializeFormalArgs() { + String pml = ""; + for (int i = 0; i < operands.size(); i++) { + String operand = operands.get(i); + Type operandType = operandTypes.get(operand); + + if (!pml.isEmpty()) { + pml += ", "; + } + + pml += operandType.toString() + " " + operand; + } + return pml; + } + + @Override + public String toFormattedString(int indentLevel) { + // by default a signature does not need a formatted string, classes that do need a formatted string will override + return ""; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof PMLExecutableSignature signature)) return false; + return Objects.equals(functionName, signature.functionName) && Objects.equals(returnType, signature.returnType) && Objects.equals(operands, signature.operands) && Objects.equals(operandTypes, signature.operandTypes); + } + + @Override + public int hashCode() { + return Objects.hash(functionName, returnType, operands, operandTypes); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/PMLBuiltinOperations.java b/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/PMLBuiltinOperations.java new file mode 100644 index 000000000..f15a43623 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/PMLBuiltinOperations.java @@ -0,0 +1,63 @@ +package gov.nist.csd.pm.pap.pml.executable.operation; + +import gov.nist.csd.pm.pap.pml.executable.operation.builtin.*; + +import java.util.HashMap; +import java.util.Map; + +public class PMLBuiltinOperations { + + // util operations + private static final Concat concat = new Concat(); + private static final Equals equals = new Equals(); + private static final Contains contains = new Contains(); + private static final ContainsKey containsKey = new ContainsKey(); + + // policy operations + private static final GetAssociationsWithSource getAssociationsWithSource = new GetAssociationsWithSource(); + private static final GetAssociationsWithTarget getAssociationsWithTarget = new GetAssociationsWithTarget(); + private static final GetAdjacentAscendants getAdjacentAscendants = new GetAdjacentAscendants(); + private static final GetAdjacentDescendants getAdjacentDescendants = new GetAdjacentDescendants(); + private static final GetNodeProperties getNodeProperties = new GetNodeProperties(); + private static final GetNodeType getNodeType = new GetNodeType(); + private static final HasPropertyKey hasPropertyKey = new HasPropertyKey(); + private static final HasPropertyValue hasPropertyValue = new HasPropertyValue(); + private static final NodeExists nodeExists = new NodeExists(); + private static final GetNode getNode = new GetNode(); + private static final Search search = new Search(); + private static final Append append = new Append(); + private static final AppendAll appendAll = new AppendAll(); + + private static final Map BUILTIN_FUNCTIONS = new HashMap<>(); + + static { + BUILTIN_FUNCTIONS.put(concat.getName(), concat); + BUILTIN_FUNCTIONS.put(equals.getName(), equals); + BUILTIN_FUNCTIONS.put(contains.getName(), contains); + BUILTIN_FUNCTIONS.put(containsKey.getName(), containsKey); + BUILTIN_FUNCTIONS.put(appendAll.getName(), appendAll); + BUILTIN_FUNCTIONS.put(append.getName(), append); + + BUILTIN_FUNCTIONS.put(getAssociationsWithSource.getName(), getAssociationsWithSource); + BUILTIN_FUNCTIONS.put(getAssociationsWithTarget.getName(), getAssociationsWithTarget); + BUILTIN_FUNCTIONS.put(getAdjacentAscendants.getName(), getAdjacentAscendants); + BUILTIN_FUNCTIONS.put(getAdjacentDescendants.getName(), getAdjacentDescendants); + BUILTIN_FUNCTIONS.put(getNodeProperties.getName(), getNodeProperties); + BUILTIN_FUNCTIONS.put(getNodeType.getName(), getNodeType); + BUILTIN_FUNCTIONS.put(hasPropertyKey.getName(), hasPropertyKey); + BUILTIN_FUNCTIONS.put(hasPropertyValue.getName(), hasPropertyValue); + BUILTIN_FUNCTIONS.put(nodeExists.getName(), nodeExists); + BUILTIN_FUNCTIONS.put(getNode.getName(), getNode); + BUILTIN_FUNCTIONS.put(search.getName(), search); + } + + public static Map builtinFunctions() { + return new HashMap<>(BUILTIN_FUNCTIONS); + } + + public static boolean isBuiltinFunction(String functionName) { + return BUILTIN_FUNCTIONS.containsKey(functionName); + } + + private PMLBuiltinOperations() {} +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/PMLOperation.java b/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/PMLOperation.java new file mode 100644 index 000000000..1f058a4ee --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/PMLOperation.java @@ -0,0 +1,110 @@ +package gov.nist.csd.pm.pap.pml.executable.operation; + +import gov.nist.csd.pm.pap.exception.OperandsDoNotMatchException; +import gov.nist.csd.pm.pap.op.Operation; +import gov.nist.csd.pm.pap.op.PreparedOperation; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.executable.PMLExecutableSignature; +import gov.nist.csd.pm.pap.pml.statement.PMLStatementBlock; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.pml.value.Value; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public abstract class PMLOperation extends Operation { + + private Type returnType; + private Map operandTypes; + protected ExecutionContext ctx; + + public PMLOperation(String name, + Type returnType, + List allOperands, + List nodeOperands, + Map operandTypes) { + super(name, allOperands, nodeOperands); + + validateOperands(allOperands, nodeOperands, operandTypes); + + this.returnType = returnType; + this.operandTypes = operandTypes; + } + + public PMLOperation(String name, + Type returnType, + List allOperands, + Map operandTypes) { + super(name, allOperands, new ArrayList<>()); + + validateOperands(allOperands, List.of(), operandTypes); + + this.returnType = returnType; + this.operandTypes = operandTypes; + + } + + public PMLOperation(String name, + Type returnType) { + super(name, new ArrayList<>(), new ArrayList<>()); + + this.returnType = returnType; + this.operandTypes = new HashMap<>(); + } + + private void validateOperands(List allOperands, List nodeOperands, Map operandTypes) { + if (operandTypes.size() != allOperands.size()) { + throw new IllegalArgumentException("expected " + allOperands.size() + + " operand types but got " + operandTypes.size()); + } else if (!(operandTypes.keySet().containsAll(allOperands) || operandTypes.keySet().containsAll(nodeOperands))) { + throw new IllegalArgumentException("operand types must contain all defined operands"); + } + + // check each node operand is a string or string array + for (String nodeOperand : nodeOperands) { + Type type = operandTypes.get(nodeOperand); + if (type.isString() || (type.isArray() && type.getArrayElementType().isString())) { + continue; + } + + throw new IllegalArgumentException("node operands must be of type string or string array"); + } + } + + public PMLExecutableSignature getSignature() { + return new PMLOperationSignature( + getName(), + getReturnType(), + getOperandNames(), + getNodeOperands(), + getOperandTypes() + ); + } + + public Type getReturnType() { + return returnType; + } + + public Map getOperandTypes() { + return operandTypes; + } + + public ExecutionContext getCtx() { + if (ctx == null) { + throw new IllegalArgumentException("execution context has not been set"); + } + + return ctx; + } + + public void setCtx(ExecutionContext ctx) { + this.ctx = ctx; + } + + @Override + public PreparedOperation withOperands(Map actualOperands) throws OperandsDoNotMatchException { + return new PMLPreparedOperation(this, actualOperands); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/PMLOperationSignature.java b/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/PMLOperationSignature.java new file mode 100644 index 000000000..62d51db2e --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/PMLOperationSignature.java @@ -0,0 +1,60 @@ +package gov.nist.csd.pm.pap.pml.executable.operation; + +import gov.nist.csd.pm.pap.pml.executable.PMLExecutableSignature; +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.pml.expression.literal.ArrayLiteral; +import gov.nist.csd.pm.pap.pml.expression.reference.ReferenceByID; +import gov.nist.csd.pm.pap.pml.statement.PMLStatementBlock; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.pml.value.ArrayValue; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Stream; + +public class PMLOperationSignature extends PMLExecutableSignature { + + private List nodeOperands; + + public PMLOperationSignature(String functionName, Type returnType, List allOperands, + List nodeOperands, Map operandTypes) { + super(functionName, returnType, allOperands, operandTypes); + + this.nodeOperands = nodeOperands; + } + + public List getNodeOperands() { + return nodeOperands; + } + + @Override + public String toFormattedString(int indentLevel) { + String argsStr = serializeFormalArgs(); + String indent = indent(indentLevel); + return String.format( + "%s%s %s(%s) %s", + indent, + "operation", + functionName, + argsStr, + returnType.isVoid() ? "" : returnType.toString() + " " + ); + } + + @Override + protected String serializeFormalArgs() { + String pml = ""; + for (int i = 0; i < operands.size(); i++) { + String operand = operands.get(i); + Type operandType = operandTypes.get(operand); + + if (!pml.isEmpty()) { + pml += ", "; + } + + pml += (nodeOperands.contains(operand) ? "nodeop " : "") + operandType.toString() + " " + operand; + } + return pml; + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/PMLOperationWrapper.java b/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/PMLOperationWrapper.java new file mode 100644 index 000000000..713b711ca --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/PMLOperationWrapper.java @@ -0,0 +1,54 @@ +package gov.nist.csd.pm.pap.pml.executable.operation; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.op.Operation; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.pml.value.Value; +import gov.nist.csd.pm.pap.query.UserContext; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class PMLOperationWrapper extends PMLOperation { + + private Operation operation; + + public PMLOperationWrapper(Operation operation) { + super( + operation.getName(), + Type.any(), + operation.getOperandNames(), + operation.getNodeOperands(), + getTypesFromOperandNames(operation.getOperandNames()) + ); + + this.operation = operation; + } + + public Operation getOperation() { + return operation; + } + + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { + operation.canExecute(pap, userCtx, operands); + } + + @Override + public Value execute(PAP pap, Map operands) throws PMException { + Object o = operation.execute(pap, operands); + + return Value.fromObject(o); + } + + public static Map getTypesFromOperandNames(List operandNames) { + Map types = new HashMap<>(); + for (String operandName : operandNames) { + types.put(operandName, Type.any()); + } + + return types; + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/PMLPreparedOperation.java b/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/PMLPreparedOperation.java new file mode 100644 index 000000000..6d47ff035 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/PMLPreparedOperation.java @@ -0,0 +1,20 @@ +package gov.nist.csd.pm.pap.pml.executable.operation; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.op.PreparedOperation; +import gov.nist.csd.pm.pap.pml.value.Value; + +import java.util.Map; + +public class PMLPreparedOperation extends PreparedOperation { + + public PMLPreparedOperation(PMLOperation op, Map operands) { + super(op, operands); + } + + @Override + public Value execute(PAP pap) throws PMException { + return getOp().execute(pap, getOperands()); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/PMLStmtsOperation.java b/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/PMLStmtsOperation.java new file mode 100644 index 000000000..4a221d7fc --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/PMLStmtsOperation.java @@ -0,0 +1,93 @@ +package gov.nist.csd.pm.pap.pml.executable.operation; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.executable.PMLExecutableSignature; +import gov.nist.csd.pm.pap.pml.statement.PMLStatementBlock; +import gov.nist.csd.pm.pap.pml.statement.PMLStatementSerializable; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.pml.value.Value; +import gov.nist.csd.pm.pap.query.UserContext; + +import java.util.List; +import java.util.Map; +import java.util.Objects; + +public class PMLStmtsOperation extends PMLOperation implements PMLStatementSerializable { + + private PMLStatementBlock checks; + private PMLStatementBlock statements; + + public PMLStmtsOperation(String name, + Type returnType, + List allOperands, + List nodeOperands, + Map operandTypes, + PMLStatementBlock checks, + PMLStatementBlock statements) { + super(name, returnType, allOperands, nodeOperands, operandTypes); + this.checks = checks; + this.statements = statements; + } + + public PMLStatementBlock getChecks() { + return checks; + } + + public PMLStatementBlock getStatements() { + return statements; + } + + @Override + public PMLExecutableSignature getSignature() { + return new PMLStmtsOperationSignature( + getName(), + getReturnType(), + getOperandNames(), + getNodeOperands(), + getOperandTypes(), + getChecks() + ); + } + + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { + ctx.executeOperationStatements(getChecks().getStmts(), operands); + } + + @Override + public Value execute(PAP pap, Map operands) throws PMException { + ExecutionContext ctx = getCtx(); + + return ctx.executeOperationStatements(statements.getStmts(), operands); + } + + @Override + public String toFormattedString(int indentLevel) { + return String.format( + "%s%s", + getSignature().toFormattedString(indentLevel), + getStatements().toFormattedString(indentLevel) + ); + } + + @Override + public String toString() { + return toFormattedString(0); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + if (!super.equals(o)) return false; + PMLStmtsOperation that = (PMLStmtsOperation) o; + return Objects.equals(statements, that.statements); + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode(), statements); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/PMLStmtsOperationSignature.java b/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/PMLStmtsOperationSignature.java new file mode 100644 index 000000000..667b68f34 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/PMLStmtsOperationSignature.java @@ -0,0 +1,43 @@ +package gov.nist.csd.pm.pap.pml.executable.operation; + +import gov.nist.csd.pm.pap.pml.statement.PMLStatementBlock; +import gov.nist.csd.pm.pap.pml.type.Type; + +import java.util.List; +import java.util.Map; + +public class PMLStmtsOperationSignature extends PMLOperationSignature{ + + private PMLStatementBlock checks; + + public PMLStmtsOperationSignature( + String functionName, + Type returnType, + List allOperands, + List nodeOperands, + Map operandTypes, + PMLStatementBlock checks) { + super(functionName, returnType, allOperands, nodeOperands, operandTypes); + + this.checks = checks; + } + + public PMLStatementBlock getChecks() { + return checks; + } + + @Override + public String toFormattedString(int indentLevel) { + String argsStr = serializeFormalArgs(); + String indent = indent(indentLevel); + return String.format( + "%s%s %s(%s) %s%s", + indent, + "operation", + functionName, + argsStr, + returnType.isVoid() ? "" : returnType.toString() + " ", + checks.getStmts().isEmpty() ? "" : checks.toFormattedString(indentLevel) + " " + ); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/Append.java b/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/Append.java new file mode 100644 index 000000000..829348225 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/Append.java @@ -0,0 +1,38 @@ +package gov.nist.csd.pm.pap.pml.executable.operation.builtin; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.executable.operation.PMLOperation; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.pml.value.ArrayValue; +import gov.nist.csd.pm.pap.pml.value.Value; +import gov.nist.csd.pm.pap.query.UserContext; + +import java.util.List; +import java.util.Map; + +public class Append extends PMLOperation { + public Append() { + super( + "append", + Type.array(Type.any()), + List.of("dst", "src"), + Map.of("dst", Type.array(Type.any()), "src", Type.any()) + ); + } + + @Override + public Value execute(PAP pap, Map operands) throws PMException { + List valueArr = (List) operands.get("dst"); + Value srcValue = (Value) operands.get("src"); + + valueArr.add(srcValue); + + return new ArrayValue(valueArr, Type.array(Type.any())); + } + + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { + + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/AppendAll.java b/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/AppendAll.java new file mode 100644 index 000000000..f9cdb61b4 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/AppendAll.java @@ -0,0 +1,38 @@ +package gov.nist.csd.pm.pap.pml.executable.operation.builtin; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.executable.operation.PMLOperation; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.pml.value.ArrayValue; +import gov.nist.csd.pm.pap.pml.value.Value; +import gov.nist.csd.pm.pap.query.UserContext; + +import java.util.List; +import java.util.Map; + +public class AppendAll extends PMLOperation { + public AppendAll() { + super( + "appendAll", + Type.array(Type.any()), + List.of("dst", "src"), + Map.of("dst", Type.array(Type.any()), "src", Type.array(Type.any())) + ); + } + + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { + + } + + @Override + public Value execute(PAP pap, Map operands) throws PMException { + List valueArr = (List) operands.get("dst"); + List srcValue = (List) operands.get("src"); + + valueArr.addAll(srcValue); + + return new ArrayValue(valueArr, Type.array(Type.any())); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/Concat.java b/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/Concat.java new file mode 100644 index 000000000..c5c98be55 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/Concat.java @@ -0,0 +1,43 @@ +package gov.nist.csd.pm.pap.pml.executable.operation.builtin; + + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.executable.operation.PMLOperation; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.pml.value.StringValue; +import gov.nist.csd.pm.pap.pml.value.Value; +import gov.nist.csd.pm.pap.query.UserContext; + +import java.util.List; +import java.util.Map; + +public class Concat extends PMLOperation { + + private static final String ARR_ARG = "arr"; + + public Concat() { + super( + "concat", + Type.string(), + List.of(ARR_ARG), + Map.of("concat", Type.array(Type.string())) + ); + } + + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { + + } + + @Override + public Value execute(PAP pap, Map operands) throws PMException { + List arr = ((Value) operands.get(ARR_ARG)).getArrayValue(); + StringBuilder s = new StringBuilder(); + for (Value v : arr) { + s.append(v.getStringValue()); + } + + return new StringValue(s.toString()); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/Contains.java b/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/Contains.java new file mode 100644 index 000000000..43fbd333e --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/Contains.java @@ -0,0 +1,38 @@ +package gov.nist.csd.pm.pap.pml.executable.operation.builtin; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.executable.operation.PMLOperation; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.pml.value.BoolValue; +import gov.nist.csd.pm.pap.pml.value.Value; +import gov.nist.csd.pm.pap.query.UserContext; + +import java.util.List; +import java.util.Map; + +public class Contains extends PMLOperation { + + public Contains() { + super( + "contains", + Type.bool(), + List.of("arr", "element"), + Map.of("arr", Type.array(Type.any()), "element", Type.any()) + ); + } + + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { + + } + + @Override + public Value execute(PAP pap, Map operands) throws PMException { + List valueArr = ((Value) operands.get("arr")).getArrayValue(); + Value element = (Value) operands.get("element"); + boolean contains = valueArr.contains(element); + return new BoolValue(contains); + } +} + diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/ContainsKey.java b/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/ContainsKey.java new file mode 100644 index 000000000..e05c564b7 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/ContainsKey.java @@ -0,0 +1,38 @@ +package gov.nist.csd.pm.pap.pml.executable.operation.builtin; + + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.executable.operation.PMLOperation; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.pml.value.BoolValue; +import gov.nist.csd.pm.pap.pml.value.Value; +import gov.nist.csd.pm.pap.query.UserContext; + +import java.util.List; +import java.util.Map; + +public class ContainsKey extends PMLOperation { + + public ContainsKey() { + super( + "containsKey", + Type.bool(), + List.of("map", "key"), + Map.of("map", Type.map(Type.any(), Type.any()), "key", Type.any()) + ); + } + + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { + + } + + @Override + public Value execute(PAP pap, Map operands) throws PMException { + Map valueMap = ((Value) operands.get("map")).getMapValue(); + Value element = (Value) operands.get("key"); + boolean contains = valueMap.containsKey(element); + return new BoolValue(contains); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/Equals.java b/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/Equals.java new file mode 100644 index 000000000..0b0571128 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/Equals.java @@ -0,0 +1,42 @@ +package gov.nist.csd.pm.pap.pml.executable.operation.builtin; + + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.executable.operation.PMLOperation; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.pml.value.BoolValue; +import gov.nist.csd.pm.pap.pml.value.Value; +import gov.nist.csd.pm.pap.query.UserContext; + +import java.util.List; +import java.util.Map; + + +public class Equals extends PMLOperation { + + private static final String VALUE1 = "value1"; + private static final String VALUE2 = "value2"; + + public Equals() { + super( + "equals", + Type.bool(), + List.of(VALUE1, VALUE2), + Map.of(VALUE1, Type.any(), VALUE2, Type.any()) + ); + } + + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { + + } + + @Override + public Value execute(PAP pap, Map operands) throws PMException { + Value v1 = (Value) operands.get(VALUE1); + Value v2 = (Value) operands.get(VALUE2); + + return new BoolValue(v1.equals(v2)); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/GetAdjacentAscendants.java b/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/GetAdjacentAscendants.java new file mode 100644 index 000000000..be9337728 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/GetAdjacentAscendants.java @@ -0,0 +1,46 @@ +package gov.nist.csd.pm.pap.pml.executable.operation.builtin; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.executable.operation.PMLOperation; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.pml.value.ArrayValue; +import gov.nist.csd.pm.pap.pml.value.StringValue; +import gov.nist.csd.pm.pap.pml.value.Value; +import gov.nist.csd.pm.pap.query.UserContext; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +public class GetAdjacentAscendants extends PMLOperation { + + private static final Type returnType = Type.array(Type.string()); + + public GetAdjacentAscendants() { + super( + "getAdjacentAscendants", + returnType, + List.of("nodeName"), + Map.of("nodeName", Type.string()) + ); + } + + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { + + } + + @Override + public Value execute(PAP pap, Map operands) throws PMException { + Value nodeName = (Value) operands.get("nodeName"); + + Collection ascendants = pap.query().graph().getAdjacentAscendants(nodeName.getStringValue()); + List ascValues = new ArrayList<>(ascendants.size()); + + ascendants.forEach(ascendant -> ascValues.add(new StringValue(ascendant))); + + return new ArrayValue(ascValues, returnType); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/GetAdjacentDescendants.java b/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/GetAdjacentDescendants.java new file mode 100644 index 000000000..194864c58 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/GetAdjacentDescendants.java @@ -0,0 +1,47 @@ +package gov.nist.csd.pm.pap.pml.executable.operation.builtin; + + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.executable.operation.PMLOperation; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.pml.value.ArrayValue; +import gov.nist.csd.pm.pap.pml.value.StringValue; +import gov.nist.csd.pm.pap.pml.value.Value; +import gov.nist.csd.pm.pap.query.UserContext; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +public class GetAdjacentDescendants extends PMLOperation { + + private static final Type returnType = Type.array(Type.string()); + + public GetAdjacentDescendants() { + super( + "getAdjacentDescendants", + Type.array(Type.any()), + List.of("nodeName"), + Map.of("nodeName", Type.string()) + ); + } + + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { + + } + + @Override + public Value execute(PAP pap, Map operands) throws PMException { + Value nodeName = (Value) operands.get("nodeName"); + + Collection ascendants = pap.query().graph().getAdjacentDescendants(nodeName.getStringValue()); + List ascValues = new ArrayList<>(ascendants.size()); + + ascendants.forEach(ascendant -> ascValues.add(new StringValue(ascendant))); + + return new ArrayValue(ascValues, returnType); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/GetAssociationsWithSource.java b/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/GetAssociationsWithSource.java new file mode 100644 index 000000000..eeecaadb4 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/GetAssociationsWithSource.java @@ -0,0 +1,46 @@ +package gov.nist.csd.pm.pap.pml.executable.operation.builtin; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.relationship.Association; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.executable.operation.PMLOperation; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.pml.value.ArrayValue; +import gov.nist.csd.pm.pap.pml.value.Value; +import gov.nist.csd.pm.pap.query.UserContext; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +public class GetAssociationsWithSource extends PMLOperation { + + private static final Type returnType = Type.array(Type.map(Type.string(), Type.any())); + + public GetAssociationsWithSource() { + super( + "getAssociationsWithSource", + returnType, + List.of("source"), + Map.of("source", Type.string()) + ); + } + + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { + + } + + @Override + public Value execute(PAP pap, Map operands) throws PMException { + Value source = (Value) operands.get("source"); + Collection associations = pap.query().graph().getAssociationsWithSource(source.getStringValue()); + List associationValues = new ArrayList<>(associations.size()); + for (Association association : associations) { + associationValues.add(Value.fromObject(association)); + } + + return new ArrayValue(associationValues, returnType); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/GetAssociationsWithTarget.java b/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/GetAssociationsWithTarget.java new file mode 100644 index 000000000..5a65c2e46 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/GetAssociationsWithTarget.java @@ -0,0 +1,47 @@ +package gov.nist.csd.pm.pap.pml.executable.operation.builtin; + + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.relationship.Association; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.executable.operation.PMLOperation; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.pml.value.ArrayValue; +import gov.nist.csd.pm.pap.pml.value.Value; +import gov.nist.csd.pm.pap.query.UserContext; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +public class GetAssociationsWithTarget extends PMLOperation { + + private static final Type returnType = Type.array(Type.map(Type.string(), Type.any())); + + public GetAssociationsWithTarget() { + super( + "getAssociationsWithTarget", + returnType, + List.of("target"), + Map.of("target", Type.string()) + ); + } + + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { + + } + + @Override + public Value execute(PAP pap, Map operands) throws PMException { + Value source = (Value) operands.get("target"); + Collection associations = pap.query().graph().getAssociationsWithTarget(source.getStringValue()); + List associationValues = new ArrayList<>(associations.size()); + for (Association association : associations) { + associationValues.add(Value.fromObject(association)); + } + + return new ArrayValue(associationValues, returnType); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/GetNode.java b/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/GetNode.java new file mode 100644 index 000000000..acae9b442 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/GetNode.java @@ -0,0 +1,40 @@ +package gov.nist.csd.pm.pap.pml.executable.operation.builtin; + + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.node.Node; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.executable.operation.PMLOperation; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.pml.value.Value; +import gov.nist.csd.pm.pap.query.UserContext; + +import java.util.List; +import java.util.Map; + + +public class GetNode extends PMLOperation { + + private static final String NODE_ARG = "nodeName"; + + public GetNode() { + super( + "getNode", + Type.map(Type.string(), Type.any()), + List.of(NODE_ARG), + Map.of(NODE_ARG, Type.string()) + ); + } + + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { + + } + + @Override + public Value execute(PAP pap, Map operands) throws PMException { + Node node = pap.query().graph().getNode(((Value) operands.get(NODE_ARG)).getStringValue()); + + return Value.fromObject(node); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/GetNodeProperties.java b/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/GetNodeProperties.java new file mode 100644 index 000000000..2395f6e9b --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/GetNodeProperties.java @@ -0,0 +1,47 @@ +package gov.nist.csd.pm.pap.pml.executable.operation.builtin; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.node.Node; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.executable.operation.PMLOperation; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.pml.value.MapValue; +import gov.nist.csd.pm.pap.pml.value.StringValue; +import gov.nist.csd.pm.pap.pml.value.Value; +import gov.nist.csd.pm.pap.query.UserContext; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class GetNodeProperties extends PMLOperation { + + private static final Type returnType = Type.map(Type.string(), Type.string()); + + + public GetNodeProperties() { + super( + "getNodeProperties", + returnType, + List.of("nodeName"), + Map.of("nodeName", Type.string()) + ); + } + + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { + + } + + @Override + public Value execute(PAP pap, Map operands) throws PMException { + Node node = pap.query().graph().getNode(((Value) operands.get("nodeName")).getStringValue()); + Map properties = node.getProperties(); + Map propertiesValues = new HashMap<>(); + for (Map.Entry prop : properties.entrySet()) { + propertiesValues.put(new StringValue(prop.getKey()), new StringValue(properties.get(prop.getValue()))); + } + + return new MapValue(propertiesValues, Type.string(), Type.string()); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/GetNodeType.java b/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/GetNodeType.java new file mode 100644 index 000000000..19f1a6a9e --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/GetNodeType.java @@ -0,0 +1,38 @@ +package gov.nist.csd.pm.pap.pml.executable.operation.builtin; + + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.node.Node; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.executable.operation.PMLOperation; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.pml.value.StringValue; +import gov.nist.csd.pm.pap.pml.value.Value; +import gov.nist.csd.pm.pap.query.UserContext; + +import java.util.List; +import java.util.Map; + +public class GetNodeType extends PMLOperation { + + public GetNodeType() { + super( + "getNodeType", + Type.string(), + List.of("nodeName"), + Map.of("nodeName", Type.string()) + ); + } + + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { + + } + + @Override + public Value execute(PAP pap, Map operands) throws PMException { + Node node = pap.query().graph().getNode(((Value) operands.get("nodeName")).getStringValue()); + return new StringValue(node.getType().toString()); + } +} + diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/HasPropertyKey.java b/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/HasPropertyKey.java new file mode 100644 index 000000000..10854e5b7 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/HasPropertyKey.java @@ -0,0 +1,40 @@ +package gov.nist.csd.pm.pap.pml.executable.operation.builtin; + + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.node.Node; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.executable.operation.PMLOperation; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.pml.value.BoolValue; +import gov.nist.csd.pm.pap.pml.value.Value; +import gov.nist.csd.pm.pap.query.UserContext; + +import java.util.List; +import java.util.Map; + + +public class HasPropertyKey extends PMLOperation { + + public HasPropertyKey() { + super("hasPropertyKey", + Type.bool(), + List.of("nodeName", "key"), + Map.of("nodeName", Type.string(), "key", Type.string()) + ); + } + + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { + + } + + @Override + public Value execute(PAP pap, Map operands) throws PMException { + String nodeName = ((Value) operands.get("nodeName")).getStringValue(); + String key = ((Value) operands.get("key")).getStringValue(); + Node node = pap.query().graph().getNode(nodeName); + boolean hasPropertyKey = node.getProperties().containsKey(key); + return new BoolValue(hasPropertyKey); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/HasPropertyValue.java b/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/HasPropertyValue.java new file mode 100644 index 000000000..ed4ebc3b2 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/HasPropertyValue.java @@ -0,0 +1,47 @@ +package gov.nist.csd.pm.pap.pml.executable.operation.builtin; + + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.node.Node; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.executable.operation.PMLOperation; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.pml.value.BoolValue; +import gov.nist.csd.pm.pap.pml.value.Value; +import gov.nist.csd.pm.pap.query.UserContext; + +import java.util.List; +import java.util.Map; + + +public class HasPropertyValue extends PMLOperation { + + public HasPropertyValue() { + super( + "hasPropertyValue", + Type.bool(), + List.of("nodeName", "key", "value"), + Map.of("nodeName", Type.string(), "key", Type.string(), "value", Type.string()) + ); + } + + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { + + } + + @Override + public Value execute(PAP pap, Map operands) throws PMException { + String nodeName = ((Value) operands.get("nodeName")).getStringValue(); + String key = ((Value) operands.get("key")).getStringValue(); + String value = ((Value) operands.get("value")).getStringValue(); + Node node = pap.query().graph().getNode(nodeName); + boolean has = node.getProperties().containsKey(key); + if (!has) { + return new BoolValue(false); + } + + has = node.getProperties().get(key).equals(value); + return new BoolValue(has); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/NodeExists.java b/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/NodeExists.java new file mode 100644 index 000000000..d4a03a67c --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/NodeExists.java @@ -0,0 +1,38 @@ +package gov.nist.csd.pm.pap.pml.executable.operation.builtin; + + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.executable.operation.PMLOperation; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.pml.value.BoolValue; +import gov.nist.csd.pm.pap.pml.value.Value; +import gov.nist.csd.pm.pap.query.UserContext; + +import java.util.List; +import java.util.Map; + + +public class NodeExists extends PMLOperation { + + private static final String NODE_ARG = "nodeName"; + + public NodeExists() { + super( + "nodeExists", + Type.bool(), + List.of(NODE_ARG), + Map.of(NODE_ARG, Type.string()) + ); + } + + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { + + } + + @Override + public Value execute(PAP pap, Map operands) throws PMException { + return new BoolValue(pap.query().graph().nodeExists(((Value) operands.get(NODE_ARG)).getStringValue())); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/Search.java b/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/Search.java new file mode 100644 index 000000000..9a0cbca84 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/executable/operation/builtin/Search.java @@ -0,0 +1,51 @@ +package gov.nist.csd.pm.pap.pml.executable.operation.builtin; + + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.node.NodeType; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.executable.operation.PMLOperation; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.pml.value.ArrayValue; +import gov.nist.csd.pm.pap.pml.value.StringValue; +import gov.nist.csd.pm.pap.pml.value.Value; +import gov.nist.csd.pm.pap.query.UserContext; + +import java.util.*; + +public class Search extends PMLOperation { + public Search() { + super( + "search", + Type.array(Type.string()), + List.of("type", "properties"), + Map.of("type", Type.string(), "properties", Type.map(Type.string(), Type.string())) + ); + } + + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { + + } + + @Override + public Value execute(PAP pap, Map operands) throws PMException { + NodeType nodeType = NodeType.toNodeType(((Value) operands.get("type")).getStringValue()); + + Map propertiesValue = ((Value) operands.get("properties")).getMapValue(); + + Map properties = new HashMap<>(); + for (Map.Entry prop : propertiesValue.entrySet()) { + properties.put(prop.getKey().getStringValue(), prop.getValue().getStringValue()); + } + + Collection search = pap.query().graph().search(nodeType, properties); + + List ret = new ArrayList<>(search.size()); + for (String s : search) { + ret.add(new StringValue(s)); + } + + return new ArrayValue(ret, Type.array(Type.string())); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/executable/routine/PMLRoutine.java b/src/main/java/gov/nist/csd/pm/pap/pml/executable/routine/PMLRoutine.java new file mode 100644 index 000000000..b5414a982 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/executable/routine/PMLRoutine.java @@ -0,0 +1,57 @@ +package gov.nist.csd.pm.pap.pml.executable.routine; + +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.pml.value.Value; +import gov.nist.csd.pm.pap.routine.Routine; + +import java.util.List; +import java.util.Map; + +public abstract class PMLRoutine extends Routine { + + private Type returnType; + private Map operandTypes; + protected ExecutionContext ctx; + + public PMLRoutine(String name, Type returnType, List operandNames, Map operandTypes) { + super(name, operandNames); + + if (operandTypes.size() != operandNames.size()) { + throw new IllegalArgumentException("expected " + operandNames.size() + + " operand types but got " + operandTypes.size()); + } + + this.returnType = returnType; + this.operandTypes = operandTypes; + } + + public PMLRoutineSignature getSignature() { + return new PMLRoutineSignature( + getName(), + getReturnType(), + getOperandNames(), + getOperandTypes() + ); + } + + public Map getOperandTypes() { + return operandTypes; + } + + public Type getReturnType() { + return returnType; + } + + public ExecutionContext getCtx() { + if (ctx == null) { + throw new IllegalArgumentException("execution context has not been set"); + } + + return ctx; + } + + public void setCtx(ExecutionContext ctx) { + this.ctx = ctx; + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/executable/routine/PMLRoutineSignature.java b/src/main/java/gov/nist/csd/pm/pap/pml/executable/routine/PMLRoutineSignature.java new file mode 100644 index 000000000..0c6b19c29 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/executable/routine/PMLRoutineSignature.java @@ -0,0 +1,28 @@ +package gov.nist.csd.pm.pap.pml.executable.routine; + +import gov.nist.csd.pm.pap.pml.executable.PMLExecutableSignature; +import gov.nist.csd.pm.pap.pml.type.Type; + +import java.util.List; +import java.util.Map; + +public class PMLRoutineSignature extends PMLExecutableSignature { + public PMLRoutineSignature(String functionName, Type returnType, List operands, Map operandTypes) { + super(functionName, returnType, operands, operandTypes); + } + + @Override + public String toFormattedString(int indentLevel) { + String argsStr = serializeFormalArgs(); + + String indent = indent(indentLevel); + return String.format( + "%s%s %s(%s) %s", + indent, + "routine", + functionName, + argsStr, + returnType.isVoid() ? "" : returnType.toString() + " " + ); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/executable/routine/PMLRoutineWrapper.java b/src/main/java/gov/nist/csd/pm/pap/pml/executable/routine/PMLRoutineWrapper.java new file mode 100644 index 000000000..31ba1f7f9 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/executable/routine/PMLRoutineWrapper.java @@ -0,0 +1,43 @@ +package gov.nist.csd.pm.pap.pml.executable.routine; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.pml.value.Value; +import gov.nist.csd.pm.pap.routine.Routine; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class PMLRoutineWrapper extends PMLRoutine { + + private Routine routine; + + public PMLRoutineWrapper(Routine routine) { + super( + routine.getName(), + Type.any(), + routine.getOperandNames(), + getTypesFromOperandNames(routine.getOperandNames()) + ); + + this.routine = routine; + } + + @Override + public Value execute(PAP pap, Map operands) throws PMException { + Object o = routine.execute(pap, operands); + + return Value.fromObject(o); + } + + public static Map getTypesFromOperandNames(List operandNames) { + Map types = new HashMap<>(); + for (String operandName : operandNames) { + types.put(operandName, Type.any()); + } + + return types; + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/executable/routine/PMLStmtsRoutine.java b/src/main/java/gov/nist/csd/pm/pap/pml/executable/routine/PMLStmtsRoutine.java new file mode 100644 index 000000000..7f00c5900 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/executable/routine/PMLStmtsRoutine.java @@ -0,0 +1,64 @@ +package gov.nist.csd.pm.pap.pml.executable.routine; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.statement.PMLStatementBlock; +import gov.nist.csd.pm.pap.pml.statement.PMLStatementSerializable; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.pml.value.Value; + +import java.util.List; +import java.util.Map; +import java.util.Objects; + +public class PMLStmtsRoutine extends PMLRoutine implements PMLStatementSerializable { + private PMLStatementBlock statements; + + public PMLStmtsRoutine(String name, Type returnType, List operandNames, Map operandTypes, PMLStatementBlock statements) { + super(name, returnType, operandNames, operandTypes); + this.statements = statements; + } + + public PMLStatementBlock getStatements() { + return statements; + } + + public void setStatements(PMLStatementBlock statements) { + this.statements = statements; + } + + @Override + public Value execute(PAP pap, Map operands) throws PMException { + ExecutionContext ctx = getCtx(); + + return ctx.executeRoutineStatements(statements.getStmts(), operands); + } + + + @Override + public String toFormattedString(int indentLevel) { + return String.format( + "%s%s", + getSignature().toFormattedString(indentLevel), + getStatements().toFormattedString(indentLevel) + ); + } + + @Override + public String toString() { + return toFormattedString(0); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof PMLStmtsRoutine that)) return false; + return Objects.equals(statements, that.statements); + } + + @Override + public int hashCode() { + return Objects.hashCode(statements); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/expression/EqualsExpression.java b/src/main/java/gov/nist/csd/pm/pap/pml/expression/EqualsExpression.java new file mode 100644 index 000000000..6d13d6927 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/expression/EqualsExpression.java @@ -0,0 +1,69 @@ +package gov.nist.csd.pm.pap.pml.expression; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.compiler.Variable; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.executable.PMLExecutableSignature; +import gov.nist.csd.pm.pap.pml.scope.PMLScopeException; +import gov.nist.csd.pm.pap.pml.scope.Scope; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.pml.value.BoolValue; +import gov.nist.csd.pm.pap.pml.value.Value; + +import java.util.Objects; + +public class EqualsExpression extends Expression { + + public static Expression compileEqualsExpression(VisitorContext visitorCtx, PMLParser.EqualsExpressionContext equalsExpressionContext) { + Expression left = Expression.compile(visitorCtx, equalsExpressionContext.left, Type.any()); + Expression right = Expression.compile(visitorCtx, equalsExpressionContext.right, Type.any()); + + return new EqualsExpression(left, right, equalsExpressionContext.EQUALS() != null); + } + + private Expression left; + private Expression right; + private boolean isEquals; + + public EqualsExpression(Expression left, Expression right, boolean isEquals) { + this.left = left; + this.right = right; + this.isEquals = isEquals; + } + + @Override + public Type getType(Scope scope) throws PMLScopeException { + return Type.bool(); + } + + @Override + public String toFormattedString(int indentLevel) { + return left.toString() + + (isEquals ? " == " : " != ") + + right.toString(); + } + + @Override + public Value execute(ExecutionContext ctx, PAP pap) throws PMException { + Value leftValue = left.execute(ctx, pap); + Value rightValue = right.execute(ctx, pap); + + return new BoolValue(isEquals == (leftValue.equals(rightValue))); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + EqualsExpression that = (EqualsExpression) o; + return isEquals == that.isEquals && Objects.equals(left, that.left) && Objects.equals(right, that.right); + } + + @Override + public int hashCode() { + return Objects.hash(left, right, isEquals); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/expression/Expression.java b/src/main/java/gov/nist/csd/pm/pap/pml/expression/Expression.java new file mode 100644 index 000000000..ff875eb83 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/expression/Expression.java @@ -0,0 +1,121 @@ +package gov.nist.csd.pm.pap.pml.expression; + +import gov.nist.csd.pm.pap.pml.PMLErrorHandler; +import gov.nist.csd.pm.pap.pml.exception.PMLCompilationRuntimeException; +import gov.nist.csd.pm.pap.pml.antlr.PMLLexer; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.compiler.Variable; +import gov.nist.csd.pm.pap.pml.executable.PMLExecutableSignature; +import gov.nist.csd.pm.pap.pml.expression.literal.Literal; +import gov.nist.csd.pm.pap.pml.expression.reference.VariableReference; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.scope.PMLScopeException; +import gov.nist.csd.pm.pap.pml.scope.Scope; +import gov.nist.csd.pm.pap.pml.statement.PMLStatement; +import gov.nist.csd.pm.pap.pml.type.Type; +import org.antlr.v4.runtime.CharStreams; +import org.antlr.v4.runtime.CommonTokenStream; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; + +public abstract class Expression implements PMLStatement { + + public static Expression fromString(VisitorContext visitorCtx, String input, Type expectedType) { + PMLErrorHandler pmlErrorHandler = new PMLErrorHandler(); + + PMLLexer lexer = new PMLLexer(CharStreams.fromString(input)); + lexer.removeErrorListeners(); + lexer.addErrorListener(pmlErrorHandler); + + CommonTokenStream tokens = new CommonTokenStream(lexer); + PMLParser parser = new PMLParser(tokens); + parser.removeErrorListeners(); + parser.addErrorListener(pmlErrorHandler); + + PMLParser.ExpressionContext exprCtx = parser.expression(); + + Expression expression = compile(visitorCtx, exprCtx, expectedType); + + if (!visitorCtx.errorLog().getErrors().isEmpty()) { + throw new PMLCompilationRuntimeException(pmlErrorHandler.getErrors()); + } + + return expression; + } + + public static Expression compile(VisitorContext visitorCtx, + PMLParser.ExpressionContext expressionCtx, + Type ... expectedTypes) { + Expression expression = null; + + if (expressionCtx instanceof PMLParser.VariableReferenceExpressionContext variableReferenceExpressionContext) { + expression = VariableReference.compileVariableReference(visitorCtx, variableReferenceExpressionContext.variableReference()); + + } else if (expressionCtx instanceof PMLParser.FunctionInvokeExpressionContext functionInvokeExpressionContext) { + expression = FunctionInvokeExpression.compileFunctionInvokeExpression(visitorCtx, functionInvokeExpressionContext); + + } else if (expressionCtx instanceof PMLParser.LiteralExpressionContext literalExpressionContext) { + expression = Literal.compileLiteral(visitorCtx, literalExpressionContext); + + } else if (expressionCtx instanceof PMLParser.NegateExpressionContext negatedExprContext) { + expression = NegatedExpression.compileNegatedExpression(visitorCtx, negatedExprContext); + + } else if (expressionCtx instanceof PMLParser.PlusExpressionContext plusExpressionsContext) { + expression = PlusExpression.compilePlusExpression(visitorCtx, plusExpressionsContext); + + } else if (expressionCtx instanceof PMLParser.EqualsExpressionContext equalsExpressionContext) { + expression = EqualsExpression.compileEqualsExpression(visitorCtx, equalsExpressionContext); + + } else if (expressionCtx instanceof PMLParser.LogicalExpressionContext logicalExpressionsContext) { + expression = LogicalExpression.compileLogicalExpression(visitorCtx, logicalExpressionsContext); + + } else if (expressionCtx instanceof PMLParser.ParenExpressionContext parenExpressionContext) { + expression = ParenExpression.compileParenExpression(visitorCtx, parenExpressionContext.expression()); + + } + + if (expression == null) { + throw new PMLCompilationRuntimeException(expressionCtx, "unrecognized expression context"); + } + + Type expressionType; + try { + expressionType = expression.getType(visitorCtx.scope()); + } catch (PMLScopeException e) { + throw new PMLCompilationRuntimeException(expressionCtx,e.getMessage()); + } + + // check the expression type is part of the given allowed types + // if no types are given then any type is allowed + boolean ok = expectedTypes.length == 0; + for (Type expectedType : expectedTypes) { + if (expectedType.equals(expressionType)) { + ok = true; + break; + } + } + + if(!ok) { + throw new PMLCompilationRuntimeException(expressionCtx, "expected expression type(s) " + + Arrays.toString(expectedTypes) + ", got " + expressionType); + } + + return expression; + } + + public abstract Type getType(Scope scope) throws PMLScopeException; + + @Override + public final String toString() { + return toFormattedString(0); + } + + @Override + public abstract int hashCode(); + + @Override + public abstract boolean equals(Object obj); +} + diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/expression/FunctionInvokeExpression.java b/src/main/java/gov/nist/csd/pm/pap/pml/expression/FunctionInvokeExpression.java new file mode 100644 index 000000000..99a182e14 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/expression/FunctionInvokeExpression.java @@ -0,0 +1,206 @@ +package gov.nist.csd.pm.pap.pml.expression; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.executable.AdminExecutable; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.compiler.Variable; +import gov.nist.csd.pm.pap.pml.exception.PMLCompilationRuntimeException; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.exception.PMLExecutionException; +import gov.nist.csd.pm.pap.pml.executable.PMLExecutableSignature; +import gov.nist.csd.pm.pap.pml.executable.operation.PMLOperation; +import gov.nist.csd.pm.pap.pml.executable.operation.PMLOperationWrapper; +import gov.nist.csd.pm.pap.pml.executable.routine.PMLRoutineWrapper; +import gov.nist.csd.pm.pap.pml.executable.routine.PMLRoutine; +import gov.nist.csd.pm.pap.pml.scope.PMLScopeException; +import gov.nist.csd.pm.pap.pml.scope.Scope; +import gov.nist.csd.pm.pap.pml.scope.UnknownFunctionInScopeException; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.pml.value.ReturnValue; +import gov.nist.csd.pm.pap.pml.value.Value; + +import java.util.*; + +public class FunctionInvokeExpression extends Expression { + + public static Expression compileFunctionInvokeExpression(VisitorContext visitorCtx, + PMLParser.FunctionInvokeExpressionContext functionInvokeExpressionContext) { + PMLParser.FunctionInvokeContext functionInvokeContext = functionInvokeExpressionContext.functionInvoke(); + return compileFunctionInvoke(visitorCtx, functionInvokeContext); + } + + public static Expression compileFunctionInvoke(VisitorContext visitorCtx, PMLParser.FunctionInvokeContext functionInvokeContext) { + String funcName = functionInvokeContext.ID().getText(); + + PMLExecutableSignature signature; + try { + signature = visitorCtx.scope().getFunction(funcName); + } catch (UnknownFunctionInScopeException e) { + throw new PMLCompilationRuntimeException(functionInvokeContext, e.getMessage()); + } + + List operandNames = signature.getOperands(); + Map operandTypes = signature.getOperandTypes(); + PMLParser.FunctionInvokeArgsContext funcCallArgsCtx = functionInvokeContext.functionInvokeArgs(); + List argExpressions = new ArrayList<>(); + PMLParser.ExpressionListContext expressionListContext = funcCallArgsCtx.expressionList(); + if (expressionListContext != null) { + argExpressions = expressionListContext.expression(); + } + + if (operandNames.size() != argExpressions.size()) { + throw new PMLCompilationRuntimeException( + functionInvokeContext, + "wrong number of args for signature call " + funcName + ": " + + "expected " + operandNames.size() + ", got " + argExpressions.size() + ); + } + + Map operands = new HashMap<>(); + for (int i = 0; i < operandNames.size(); i++) { + PMLParser.ExpressionContext exprCtx = argExpressions.get(i); + String operand = operandNames.get(i); + Type operandType = operandTypes.get(operand); + + Expression expr = Expression.compile(visitorCtx, exprCtx, operandType); + operands.put(operand, expr); + } + + return new FunctionInvokeExpression(signature, operands); + } + + private PMLExecutableSignature signature; + private List actualArgsList; + private Map operands; + + public FunctionInvokeExpression(PMLExecutableSignature signature, Map actualOperands) { + this.signature = signature; + this.actualArgsList = getActualArgsList(this.signature, actualOperands); + this.operands = new HashMap<>(actualOperands); + } + + public PMLExecutableSignature getSignature() { + return signature; + } + + public List getActualArgsList() { + return actualArgsList; + } + + @Override + public Value execute(ExecutionContext ctx, PAP pap) throws PMException { + String name = signature.getFunctionName(); + ExecutionContext funcInvokeCtx = ctx.copy(); + Map operandValues = prepareOperandExpressions(ctx, pap); + + // set the execution context if exec is a PML exec + AdminExecutable executable = funcInvokeCtx.scope().getFunction(name); + if (executable instanceof PMLRoutine pmlRoutine) { + pmlRoutine.setCtx(funcInvokeCtx); + } else if (executable instanceof PMLOperation pmlOperation) { + pmlOperation.setCtx(funcInvokeCtx); + } + + // PMLWrappers dont need Values, just objects + Map operands; + if ((executable instanceof PMLOperationWrapper) || (executable instanceof PMLRoutineWrapper)) { + operands = valuesMapToObjects(operandValues); + } else { + operands = new HashMap<>(operandValues); + } + + // execute the executable + Object o = pap.executeAdminExecutable(executable, operands); + + // return the value + Value value = Value.fromObject(o); + if (value instanceof ReturnValue returnValue) { + return returnValue.getValue(); + } else { + return value; + } + } + + private Map valuesMapToObjects(Map valuesMap) { + Map objectMap = new HashMap<>(); + for (Map.Entry entry : valuesMap.entrySet()) { + objectMap.put(entry.getKey(), entry.getValue().toObject()); + } + + return objectMap; + } + + private Map prepareOperandExpressions(ExecutionContext ctx, PAP pap) + throws PMException { + String funcName = signature.getFunctionName(); + List operandsNames = signature.getOperands(); + + if (operands.size() != operandsNames.size()) { + throw new PMLExecutionException("expected " + operandsNames.size() + " args for function \"" + + funcName + "\", got " + operands.size()); + } + + Map values = new HashMap<>(); + for (int i = 0; i < operandsNames.size(); i++) { + String operand = operandsNames.get(i); + Type operandType = signature.getOperandTypes().get(operand); + Expression operandExpr = operands.get(operand); + Value argValue = operandExpr.execute(ctx, pap); + + if (!argValue.getType().equals(operandType)) { + throw new PMLExecutionException("expected " + operandType + " for arg " + i + " for function \"" + + funcName + "\", got " + argValue.getType()); + } + + values.put(operand, argValue); + } + + return values; + } + + @Override + public String toFormattedString(int indentLevel) { + return String.format("%s%s(%s)", indent(indentLevel), signature.getFunctionName(), argsToString()); + } + + private String argsToString() { + StringBuilder s = new StringBuilder(); + for (Expression arg : actualArgsList) { + if (s.length() > 0) { + s.append(", "); + } + s.append(arg); + } + + return s.toString(); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof FunctionInvokeExpression that)) return false; + return Objects.equals(signature, that.signature) && Objects.equals(actualArgsList, that.actualArgsList) && Objects.equals(operands, that.operands); + } + + @Override + public int hashCode() { + return Objects.hash(signature, actualArgsList, operands); + } + + @Override + public Type getType(Scope scope) throws PMLScopeException { + return signature.getReturnType(); + } + + private List getActualArgsList(PMLExecutableSignature signature, Map args) { + List pmlOperandDefs = signature.getOperands(); + List actualArgs = new ArrayList<>(); + for (String operandDef : pmlOperandDefs) { + actualArgs.add(args.get(operandDef)); + } + + return actualArgs; + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/expression/LogicalExpression.java b/src/main/java/gov/nist/csd/pm/pap/pml/expression/LogicalExpression.java new file mode 100644 index 000000000..fbada3e59 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/expression/LogicalExpression.java @@ -0,0 +1,81 @@ +package gov.nist.csd.pm.pap.pml.expression; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.compiler.Variable; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.executable.PMLExecutableSignature; +import gov.nist.csd.pm.pap.pml.scope.PMLScopeException; +import gov.nist.csd.pm.pap.pml.scope.Scope; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.pml.value.BoolValue; +import gov.nist.csd.pm.pap.pml.value.Value; + +import java.util.Objects; + +public class LogicalExpression extends Expression { + + public static Expression compileLogicalExpression(VisitorContext visitorCtx, PMLParser.LogicalExpressionContext logicalExpressionsContext) { + Expression left = Expression.compile(visitorCtx, logicalExpressionsContext.left, Type.any()); + Expression right = Expression.compile(visitorCtx, logicalExpressionsContext.right, Type.any()); + + return new LogicalExpression(left, right, logicalExpressionsContext.LOGICAL_AND() != null); + } + + private Expression left; + private Expression right; + private boolean isAnd; + + public LogicalExpression(Expression left, Expression right, boolean isAnd) { + this.left = left; + this.right = right; + this.isAnd = isAnd; + } + + public Expression getLeft() { + return left; + } + + public Expression getRight() { + return right; + } + + public boolean isAnd() { + return isAnd; + } + + @Override + public Type getType(Scope scope) throws PMLScopeException { + return Type.bool(); + } + + @Override + public String toFormattedString(int indentLevel) { + return left.toString() + + (isAnd ? " && " : " || ") + + right.toString(); + } + + @Override + public Value execute(ExecutionContext ctx, PAP pap) throws PMException { + boolean leftValue = left.execute(ctx, pap).getBooleanValue(); + boolean rightValue = right.execute(ctx, pap).getBooleanValue(); + + return new BoolValue(isAnd ? leftValue && rightValue : leftValue || rightValue); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + LogicalExpression that = (LogicalExpression) o; + return isAnd == that.isAnd && Objects.equals(left, that.left) && Objects.equals(right, that.right); + } + + @Override + public int hashCode() { + return Objects.hash(left, right, isAnd); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/expression/NegatedExpression.java b/src/main/java/gov/nist/csd/pm/pap/pml/expression/NegatedExpression.java new file mode 100644 index 000000000..733191c56 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/expression/NegatedExpression.java @@ -0,0 +1,64 @@ +package gov.nist.csd.pm.pap.pml.expression; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.compiler.Variable; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.executable.PMLExecutableSignature; +import gov.nist.csd.pm.pap.pml.scope.PMLScopeException; +import gov.nist.csd.pm.pap.pml.scope.Scope; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.pml.value.ComplementedValue; +import gov.nist.csd.pm.pap.pml.value.Value; + +import java.util.Objects; + +public class NegatedExpression extends Expression { + + public static NegatedExpression compileNegatedExpression(VisitorContext visitorCtx, + PMLParser.NegateExpressionContext negateExpressionContext) { + Expression expression = Expression.compile(visitorCtx, negateExpressionContext.expression(), Type.any()); + + return new NegatedExpression(expression); + } + + private Expression expression; + + public NegatedExpression(Expression expression) { + this.expression = expression; + } + + public Expression getExpression() { + return expression; + } + + @Override + public Type getType(Scope scope) throws PMLScopeException { + return expression.getType(scope); + } + + @Override + public String toFormattedString(int indentLevel) { + return "!" + expression.toString(); + } + + @Override + public Value execute(ExecutionContext ctx, PAP pap) throws PMException { + return new ComplementedValue(expression.execute(ctx, pap)); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + NegatedExpression that = (NegatedExpression) o; + return Objects.equals(expression, that.expression); + } + + @Override + public int hashCode() { + return Objects.hashCode(expression); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/expression/ParenExpression.java b/src/main/java/gov/nist/csd/pm/pap/pml/expression/ParenExpression.java new file mode 100644 index 000000000..e1ce6f404 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/expression/ParenExpression.java @@ -0,0 +1,61 @@ +package gov.nist.csd.pm.pap.pml.expression; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.compiler.Variable; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.executable.PMLExecutableSignature; +import gov.nist.csd.pm.pap.pml.scope.PMLScopeException; +import gov.nist.csd.pm.pap.pml.scope.Scope; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.pml.value.Value; + +import java.util.Objects; + +public class ParenExpression extends Expression{ + + public static Expression compileParenExpression(VisitorContext visitorCtx, + PMLParser.ExpressionContext expressionCtx) { + return new ParenExpression(Expression.compile(visitorCtx, expressionCtx, Type.any())); + } + + private Expression expression; + + public ParenExpression(Expression expression) { + this.expression = expression; + } + + public Expression getExpression() { + return expression; + } + + @Override + public Type getType(Scope scope) throws PMLScopeException { + return expression.getType(scope); + } + + @Override + public String toFormattedString(int indentLevel) { + return String.format("(%s)", expression.toFormattedString(0)); + } + + @Override + public Value execute(ExecutionContext ctx, PAP pap) throws PMException { + return expression.execute(ctx, pap); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + ParenExpression that = (ParenExpression) o; + return Objects.equals(expression, that.expression); + } + + @Override + public int hashCode() { + return Objects.hashCode(expression); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/expression/PlusExpression.java b/src/main/java/gov/nist/csd/pm/pap/pml/expression/PlusExpression.java new file mode 100644 index 000000000..611f2f1dd --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/expression/PlusExpression.java @@ -0,0 +1,65 @@ +package gov.nist.csd.pm.pap.pml.expression; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.compiler.Variable; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.executable.PMLExecutableSignature; +import gov.nist.csd.pm.pap.pml.scope.PMLScopeException; +import gov.nist.csd.pm.pap.pml.scope.Scope; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.pml.value.StringValue; +import gov.nist.csd.pm.pap.pml.value.Value; + +import java.util.Objects; + +public class PlusExpression extends Expression{ + + public static Expression compilePlusExpression(VisitorContext visitorCtx, PMLParser.PlusExpressionContext plusExpressionsContext) { + return new PlusExpression( + Expression.compile(visitorCtx, plusExpressionsContext.left, Type.string()), + Expression.compile(visitorCtx, plusExpressionsContext.right, Type.string()) + ); + } + + private Expression left; + private Expression right; + + public PlusExpression(Expression left, Expression right) { + this.left = left; + this.right = right; + } + + @Override + public Type getType(Scope scope) throws PMLScopeException { + return Type.string(); + } + + @Override + public String toFormattedString(int indentLevel) { + return left.toString() + " + " + right.toString(); + } + + @Override + public Value execute(ExecutionContext ctx, PAP pap) throws PMException { + String leftValue = left.execute(ctx, pap).getStringValue(); + String rightValue = right.execute(ctx, pap).getStringValue(); + + return new StringValue(leftValue + rightValue); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + PlusExpression that = (PlusExpression) o; + return Objects.equals(left, that.left) && Objects.equals(right, that.right); + } + + @Override + public int hashCode() { + return Objects.hash(left, right); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/expression/literal/ArrayLiteral.java b/src/main/java/gov/nist/csd/pm/pap/pml/expression/literal/ArrayLiteral.java new file mode 100644 index 000000000..1700727c5 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/expression/literal/ArrayLiteral.java @@ -0,0 +1,89 @@ +package gov.nist.csd.pm.pap.pml.expression.literal; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.compiler.Variable; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.executable.PMLExecutableSignature; +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.pml.scope.PMLScopeException; +import gov.nist.csd.pm.pap.pml.scope.Scope; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.pml.value.ArrayValue; +import gov.nist.csd.pm.pap.pml.value.Value; + +import java.util.*; + +public class ArrayLiteral extends Literal { + + private final List array; + private final Type type; + + public ArrayLiteral(Expression[] array, Type elementType) { + this.array = Arrays.asList(array); + this.type = Type.array(elementType); + } + + public ArrayLiteral(List array, Type elementType) { + this.array = array; + this.type = Type.array(elementType); + } + + @Override + public Type getType(Scope scope) throws PMLScopeException { + return type; + } + + public void add(Expression expression) { + this.array.add(expression); + } + + public Expression[] getArray() { + return this.array.toArray(new Expression[]{}); + } + + public List getList() { + return this.array; + } + + public Type getType() { + return type; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + ArrayLiteral that = (ArrayLiteral) o; + return Objects.equals(array, that.array) + && Objects.equals(type, that.type); + } + + @Override + public int hashCode() { + return Objects.hash(array, type); + } + + @Override + public String toFormattedString(int indentLevel) { + StringBuilder s = new StringBuilder(); + for (Expression expression : array) { + if (s.length() > 0) { + s.append(", "); + } + + s.append(expression.toString()); + } + return String.format("[%s]", s); + } + + @Override + public Value execute(ExecutionContext ctx, PAP pap) throws PMException { + List values = new ArrayList<>(); + for (Expression expr : array) { + values.add(expr.execute(ctx, pap)); + } + + return new ArrayValue(values, type.getArrayElementType()); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/expression/literal/BoolLiteral.java b/src/main/java/gov/nist/csd/pm/pap/pml/expression/literal/BoolLiteral.java new file mode 100644 index 000000000..475a709e0 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/expression/literal/BoolLiteral.java @@ -0,0 +1,61 @@ +package gov.nist.csd.pm.pap.pml.expression.literal; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.scope.PMLScopeException; +import gov.nist.csd.pm.pap.pml.scope.Scope; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.pml.value.BoolValue; +import gov.nist.csd.pm.pap.pml.value.Value; + +import java.util.Objects; + +public class BoolLiteral extends Literal { + + private boolean value; + + public BoolLiteral(boolean value) { + this.value = value; + } + + public boolean isValue() { + return value; + } + + public void setValue(boolean value) { + this.value = value; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + BoolLiteral that = (BoolLiteral) o; + return value == that.value; + } + + @Override + public int hashCode() { + return Objects.hash(value); + } + + @Override + public String toFormattedString(int indentLevel) { + return value ? "true" : "false"; + } + + @Override + public Type getType(Scope scope) throws PMLScopeException { + return Type.bool(); + } + + @Override + public Value execute(ExecutionContext ctx, PAP pap) throws PMException { + return new BoolValue(value); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/expression/literal/Literal.java b/src/main/java/gov/nist/csd/pm/pap/pml/expression/literal/Literal.java new file mode 100644 index 000000000..1db6aba2b --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/expression/literal/Literal.java @@ -0,0 +1,13 @@ +package gov.nist.csd.pm.pap.pml.expression.literal; + +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; + +public abstract class Literal extends Expression { + + public static Expression compileLiteral(VisitorContext visitorCtx, PMLParser.LiteralExpressionContext literalExpressionContext) { + return new LiteralVisitor(visitorCtx) + .visitLiteralExpression(literalExpressionContext); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/expression/literal/LiteralVisitor.java b/src/main/java/gov/nist/csd/pm/pap/pml/expression/literal/LiteralVisitor.java new file mode 100644 index 000000000..ad460c0f1 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/expression/literal/LiteralVisitor.java @@ -0,0 +1,134 @@ +package gov.nist.csd.pm.pap.pml.expression.literal; + +import gov.nist.csd.pm.pap.pml.exception.PMLCompilationRuntimeException; +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.compiler.visitor.PMLBaseVisitor; + +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.scope.PMLScopeException; +import gov.nist.csd.pm.pap.pml.type.Type; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class LiteralVisitor extends PMLBaseVisitor { + + public LiteralVisitor(VisitorContext visitorCtx) { + super(visitorCtx); + } + + @Override + public StringLiteral visitStringLiteral(PMLParser.StringLiteralContext ctx) { + return visitStringLit(ctx.stringLit()); + } + + @Override + public StringLiteral visitStringLit(PMLParser.StringLitContext ctx) { + return new StringLiteral(removeQuotes(ctx.DOUBLE_QUOTE_STRING().toString())); + } + + @Override + public BoolLiteral visitBoolLiteral(PMLParser.BoolLiteralContext ctx) { + return new BoolLiteral(ctx.boolLit().TRUE() != null); + } + + @Override + public Expression visitArrayLiteral(PMLParser.ArrayLiteralContext ctx) { + PMLParser.ArrayLitContext arrayCtx = ctx.arrayLit(); + + PMLParser.ExpressionListContext expressionListContext = arrayCtx.expressionList(); + if (expressionListContext == null) { + return new ArrayLiteral(new ArrayList<>(), Type.any()); + } + + // set the element type to any if the list is empty + // element type being null is used in the following for loop to determine type dynamically + Type elementType = null; + if (expressionListContext.isEmpty()) { + elementType = Type.any(); + } + + // determine the type of the array literal elements + // if all the elements are of the same type then that is the element type + // if the elements are of different types then the type is ANY + List exprs = new ArrayList<>(); + for (PMLParser.ExpressionContext expressionCtx : expressionListContext.expression()) { + Expression expr = Expression.compile(visitorCtx, expressionCtx, Type.any()); + Type type; + try { + type = expr.getType(visitorCtx.scope()); + } catch (PMLScopeException e) { + throw new PMLCompilationRuntimeException(expressionCtx, e.getMessage()); + } + + if (elementType == null) { + elementType = type; + } else if (!type.equals(elementType)) { + elementType = Type.any(); + } + + exprs.add(expr); + } + + return new ArrayLiteral(new ArrayList<>(exprs), elementType); + } + + @Override + public Expression visitMapLiteral(PMLParser.MapLiteralContext ctx) { + Map map = new HashMap<>(); + + Type keyType = null; + Type valueType = null; + + for(PMLParser.ElementContext elementCtx : ctx.mapLit().element()) { + Expression keyExpr = Expression.compile(visitorCtx, elementCtx.key, Type.any()); + Expression valueExpr = Expression.compile(visitorCtx, elementCtx.value, Type.any()); + + Type keyExprType; + Type valueExprType; + try { + keyExprType = keyExpr.getType(visitorCtx.scope()); + valueExprType = valueExpr.getType(visitorCtx.scope()); + } catch (PMLScopeException e) { + throw new PMLCompilationRuntimeException(elementCtx, e.getMessage()); + } + + // check that all map keys are the same type + if (keyType == null) { + keyType = keyExprType; + } else if (!keyExprType.equals(keyType)) { + keyType = Type.any(); + } + + // if map values are different types then the value type for this map is ANY + if (valueType == null) { + valueType = valueExprType; + } else if (!valueExprType.equals(valueType)) { + valueType = Type.any(); + } + + map.put(keyExpr, valueExpr); + } + + if (keyType == null) { + keyType = Type.any(); + } + + if (valueType == null) { + valueType = Type.any(); + } + + return new MapLiteral(map, keyType, valueType); + } + + public static String removeQuotes(String s) { + if (s.startsWith("\"") && s.endsWith("\"")) { + return s.substring(1, s.length() - 1); + } else { + return s; + } + } +} \ No newline at end of file diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/expression/literal/MapLiteral.java b/src/main/java/gov/nist/csd/pm/pap/pml/expression/literal/MapLiteral.java new file mode 100644 index 000000000..5853198ca --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/expression/literal/MapLiteral.java @@ -0,0 +1,89 @@ +package gov.nist.csd.pm.pap.pml.expression.literal; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.compiler.Variable; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.executable.PMLExecutableSignature; +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.pml.scope.PMLScopeException; +import gov.nist.csd.pm.pap.pml.scope.Scope; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.pml.value.MapValue; +import gov.nist.csd.pm.pap.pml.value.Value; + +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +public class MapLiteral extends Literal { + + private final Map map; + private final Type type; + + public MapLiteral(Map map, Type keyType, Type valueType) { + this.map = map; + this.type = Type.map(keyType, valueType); + } + + @Override + public Type getType(Scope scope) throws PMLScopeException { + return type; + } + + public void put(Expression key, Expression value){ + this.map.put(key, value); + } + + public Map getMap() { + return map; + } + + public Type getType() { + return type; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + MapLiteral that = (MapLiteral) o; + return Objects.equals(this.map, that.map) + && Objects.equals(type, that.type); + } + + @Override + public int hashCode() { + return map.hashCode(); + } + + @Override + public String toFormattedString(int indentLevel) { + StringBuilder s = new StringBuilder(); + for (Expression k : map.keySet()) { + if (s.length() > 0) { + s.append(", "); + } + + s.append(k.toString()).append(": ").append(map.get(k)); + } + + return String.format("{%s}", s); + } + + @Override + public Value execute(ExecutionContext ctx, PAP pap) throws PMException { + Map values = new HashMap<>(); + + for (Expression keyExpr : map.keySet()) { + Expression valueExpr = map.get(keyExpr); + + Value key = keyExpr.execute(ctx, pap); + Value value = valueExpr.execute(ctx, pap); + + values.put(key, value); + } + + return new MapValue(values, type.getMapKeyType(), type.getMapValueType()); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/expression/literal/StringLiteral.java b/src/main/java/gov/nist/csd/pm/pap/pml/expression/literal/StringLiteral.java new file mode 100644 index 000000000..4d6add857 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/expression/literal/StringLiteral.java @@ -0,0 +1,63 @@ +package gov.nist.csd.pm.pap.pml.expression.literal; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.compiler.Variable; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.executable.PMLExecutableSignature; +import gov.nist.csd.pm.pap.pml.scope.PMLScopeException; +import gov.nist.csd.pm.pap.pml.scope.Scope; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.pml.value.StringValue; +import gov.nist.csd.pm.pap.pml.value.Value; + +import java.util.Objects; + +public class StringLiteral extends Literal{ + + private String value; + + public StringLiteral(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + @Override + public Type getType(Scope scope) throws PMLScopeException { + return Type.string(); + } + + @Override + public Value execute(ExecutionContext ctx, PAP pap) throws PMException { + return new StringValue(value); + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + StringLiteral that = (StringLiteral) o; + return Objects.equals(value, that.value); + } + + @Override + public int hashCode() { + return value.hashCode(); + } + + @Override + public String toFormattedString(int indentLevel) { + return String.format("\"%s\"", value); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/expression/reference/ReferenceByBracketIndex.java b/src/main/java/gov/nist/csd/pm/pap/pml/expression/reference/ReferenceByBracketIndex.java new file mode 100644 index 000000000..f5d13edd2 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/expression/reference/ReferenceByBracketIndex.java @@ -0,0 +1,60 @@ +package gov.nist.csd.pm.pap.pml.expression.reference; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.compiler.Variable; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.executable.PMLExecutableSignature; +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.pml.scope.PMLScopeException; +import gov.nist.csd.pm.pap.pml.scope.Scope; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.pml.value.Value; + +import java.util.Map; +import java.util.Objects; + +public class ReferenceByBracketIndex extends ReferenceByIndex{ + + private VariableReference varRef; + private Expression index; + + public ReferenceByBracketIndex(VariableReference varRef, Expression index) { + this.varRef = varRef; + this.index = index; + } + + @Override + public String toFormattedString(int indentLevel) { + return varRef + "." + index; + } + + @Override + public Type getType(Scope scope) throws PMLScopeException { + return varRef.getType(scope).getMapValueType(); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof ReferenceByBracketIndex that)) return false; + return Objects.equals(varRef, that.varRef) && Objects.equals(index, that.index); + } + + @Override + public int hashCode() { + return Objects.hash(varRef, index); + } + + @Override + public Value execute(ExecutionContext ctx, PAP pap) throws PMException { + Value indexValue = index.execute(ctx, pap); + Value value = varRef.execute(ctx, pap); + if (!value.getType().isMap()) { + return value; + } + + Map mapValue = value.getMapValue(); + return mapValue.get(indexValue); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/expression/reference/ReferenceByDotIndex.java b/src/main/java/gov/nist/csd/pm/pap/pml/expression/reference/ReferenceByDotIndex.java new file mode 100644 index 000000000..bb6054613 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/expression/reference/ReferenceByDotIndex.java @@ -0,0 +1,65 @@ +package gov.nist.csd.pm.pap.pml.expression.reference; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.compiler.Variable; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.executable.PMLExecutableSignature; +import gov.nist.csd.pm.pap.pml.scope.PMLScopeException; +import gov.nist.csd.pm.pap.pml.scope.Scope; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.pml.value.StringValue; +import gov.nist.csd.pm.pap.pml.value.Value; + +import java.util.Map; +import java.util.Objects; + +public class ReferenceByDotIndex extends ReferenceByIndex{ + + private VariableReference varRef; + private String index; + + public ReferenceByDotIndex(VariableReference varRef, String index) { + this.varRef = varRef; + this.index = index; + } + + @Override + public String toFormattedString(int indentLevel) { + return varRef + "." + index; + } + + @Override + public Type getType(Scope scope) throws PMLScopeException { + return varRef.getType(scope).getMapValueType(); + } + + @Override + public Value execute(ExecutionContext ctx, PAP pap) throws PMException { + Value value = varRef.execute(ctx, pap); + if (!value.getType().isMap()) { + return value; + } + + Map mapValue = value.getMapValue(); + + StringValue indexValue = new StringValue(index); + if (!mapValue.containsKey(indexValue)) { + throw new NullPointerException("map index " + index + " does not exist"); + } else { + return mapValue.get(indexValue); + } + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof ReferenceByDotIndex that)) return false; + return Objects.equals(varRef, that.varRef) && Objects.equals(index, that.index); + } + + @Override + public int hashCode() { + return Objects.hash(varRef, index); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/expression/reference/ReferenceByID.java b/src/main/java/gov/nist/csd/pm/pap/pml/expression/reference/ReferenceByID.java new file mode 100644 index 000000000..221d8df73 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/expression/reference/ReferenceByID.java @@ -0,0 +1,60 @@ +package gov.nist.csd.pm.pap.pml.expression.reference; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.compiler.Variable; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.exception.PMLExecutionException; +import gov.nist.csd.pm.pap.pml.executable.PMLExecutableSignature; +import gov.nist.csd.pm.pap.pml.scope.PMLScopeException; +import gov.nist.csd.pm.pap.pml.scope.Scope; +import gov.nist.csd.pm.pap.pml.scope.UnknownVariableInScopeException; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.pml.value.Value; + +import java.util.Objects; + +public class ReferenceByID extends VariableReference{ + + private final String id; + + public ReferenceByID(String id) { + this.id = id; + } + + @Override + public Type getType(Scope scope) throws PMLScopeException { + return scope.getVariable(id).type(); + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ReferenceByID that = (ReferenceByID) o; + return Objects.equals(id, that.id); + } + + @Override + public int hashCode() { + return Objects.hash(id); + } + + @Override + public String toFormattedString(int indentLevel) { + return id; + } + + @Override + public Value execute(ExecutionContext ctx, PAP pap) throws PMException { + try { + return ctx.scope().getVariable(id); + } catch (UnknownVariableInScopeException e) { + throw new PMLExecutionException(e); + } + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/expression/reference/ReferenceByIndex.java b/src/main/java/gov/nist/csd/pm/pap/pml/expression/reference/ReferenceByIndex.java new file mode 100644 index 000000000..2c9417ffa --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/expression/reference/ReferenceByIndex.java @@ -0,0 +1,8 @@ +package gov.nist.csd.pm.pap.pml.expression.reference; + +import gov.nist.csd.pm.pap.pml.executable.operation.PMLOperation; + +import java.util.Map; + +public abstract class ReferenceByIndex extends VariableReference{ +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/expression/reference/VariableReference.java b/src/main/java/gov/nist/csd/pm/pap/pml/expression/reference/VariableReference.java new file mode 100644 index 000000000..987a799fb --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/expression/reference/VariableReference.java @@ -0,0 +1,76 @@ +package gov.nist.csd.pm.pap.pml.expression.reference; + +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; + +import gov.nist.csd.pm.pap.pml.exception.PMLCompilationRuntimeException; +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.executable.operation.PMLOperation; +import gov.nist.csd.pm.pap.pml.scope.PMLScopeException; +import gov.nist.csd.pm.pap.pml.scope.UnknownVariableInScopeException; +import gov.nist.csd.pm.pap.pml.type.Type; + +import java.util.Map; + +public abstract class VariableReference extends Expression { + + public static VariableReference compileVariableReference(VisitorContext visitorCtx, PMLParser.VariableReferenceContext ctx) { + if (ctx instanceof PMLParser.ReferenceByIDContext referenceByIDContext) { + return visitReferenceByID(visitorCtx, referenceByIDContext); + } else if (ctx instanceof PMLParser.ReferenceByIndexContext referenceByIndexContext) { + return visitReferenceByIndex(visitorCtx, referenceByIndexContext); + } else { + throw new PMLCompilationRuntimeException(ctx, "invalid variable reference"); + } + } + + private static ReferenceByID visitReferenceByID(VisitorContext visitorCtx, PMLParser.ReferenceByIDContext ctx) { + String name = ctx.ID().getText(); + + // check variable name is in scope + try { + visitorCtx.scope().getVariable(name); + } catch (UnknownVariableInScopeException e) { + throw new PMLCompilationRuntimeException(ctx, e.getMessage()); + } + + return new ReferenceByID(name); + } + + private static ReferenceByIndex visitReferenceByIndex(VisitorContext visitorCtx, PMLParser.ReferenceByIndexContext ctx) { + VariableReference mapVarRef = compileVariableReference(visitorCtx, ctx.variableReference()); + + // check that the varref is a map + Type t; + try { + t = mapVarRef.getType(visitorCtx.scope()); + } catch (PMLScopeException ex) { + throw new PMLCompilationRuntimeException(ctx, ex.getMessage()); + } + + if (!t.isMap()) { + throw new PMLCompilationRuntimeException(ctx, "expected type map but got " + t); + } + + Type allowedKeyType = t.getMapKeyType(); + + return visitIndex(visitorCtx, ctx.index(), mapVarRef, allowedKeyType); + } + + private static ReferenceByIndex visitIndex(VisitorContext visitorCtx, PMLParser.IndexContext indexCtx, + VariableReference varRef, Type allowedKeyType) { + if (indexCtx instanceof PMLParser.BracketIndexContext bracketIndexContext) { + return new ReferenceByBracketIndex( + varRef, + Expression.compile(visitorCtx, bracketIndexContext.expression(), allowedKeyType) + ); + + } else if (indexCtx instanceof PMLParser.DotIndexContext dotIndexContext) { + String id = dotIndexContext.key.ID().getText(); + return new ReferenceByDotIndex(varRef, id); + + } + + throw new PMLCompilationRuntimeException(indexCtx, "invalid index"); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/pattern/OperationPattern.java b/src/main/java/gov/nist/csd/pm/pap/pml/pattern/OperationPattern.java new file mode 100644 index 000000000..768b411ce --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/pattern/OperationPattern.java @@ -0,0 +1,57 @@ +package gov.nist.csd.pm.pap.pml.pattern; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; + +import java.util.Objects; + +public class OperationPattern extends Pattern { + + private final String value; + private final boolean isAny; + + public OperationPattern(String value) { + this.value = value; + this.isAny = false; + } + + public OperationPattern() { + this.isAny = true; + this.value = null; + } + + public String getValue() { + return value; + } + + public boolean isAny() { + return isAny; + } + + @Override + public boolean matches(String value, PAP pap) throws PMException { + return isAny || value.equals(this.value); + } + + @Override + public ReferencedNodes getReferencedNodes() { + return new ReferencedNodes(false); + } + + @Override + public String toFormattedString(int indentLevel) { + return isAny ? "any operation" : value; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof OperationPattern that)) return false; + return isAny == that.isAny && Objects.equals(value, that.value); + } + + @Override + public int hashCode() { + return Objects.hash(value, isAny); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/pattern/Pattern.java b/src/main/java/gov/nist/csd/pm/pap/pml/pattern/Pattern.java new file mode 100644 index 000000000..0b5b3a68d --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/pattern/Pattern.java @@ -0,0 +1,48 @@ +package gov.nist.csd.pm.pap.pml.pattern; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.exception.NodeDoesNotExistException; +import gov.nist.csd.pm.pap.pml.statement.PMLStatementSerializable; +import gov.nist.csd.pm.pap.store.GraphStore; + +import java.io.Serializable; +import java.util.Collection; + +public abstract class Pattern implements Serializable, PMLStatementSerializable { + + public abstract boolean matches(String value, PAP pap) throws PMException; + public abstract ReferencedNodes getReferencedNodes(); + + @Override + public abstract boolean equals(Object obj); + + @Override + public abstract int hashCode(); + + @Override + public final String toString() { + return toFormattedString(0); + } + + public boolean matches(Collection value, PAP pap) throws PMException { + for (String s : value) { + if (matches(s, pap)) { + return true; + } + } + + return false; + } + + public void checkReferencedNodesExist(GraphStore graph) throws PMException { + ReferencedNodes ref = getReferencedNodes(); + for (String entity : ref.nodes()) { + if (!graph.nodeExists(entity)) { + throw new NodeDoesNotExistException(entity); + } + } + } + + +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/pattern/ReferencedNodes.java b/src/main/java/gov/nist/csd/pm/pap/pml/pattern/ReferencedNodes.java new file mode 100644 index 000000000..8462a15a0 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/pattern/ReferencedNodes.java @@ -0,0 +1,27 @@ +package gov.nist.csd.pm.pap.pml.pattern; + +import java.util.Collection; +import java.util.HashSet; +import java.util.Set; + +public record ReferencedNodes(Set nodes, boolean isAny) { + + public ReferencedNodes(boolean isAny) { + this(new HashSet<>(), isAny); + } + + public void addNodes(Collection entity) { + nodes.addAll(entity); + } + + public void addNode(String entity) { + nodes.add(entity); + } + + public ReferencedNodes combine(ReferencedNodes other) { + Set combined = new HashSet<>(this.nodes); + combined.addAll(other.nodes); + + return new ReferencedNodes(combined, other.isAny || this.isAny); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/pattern/operand/AnyOperandPattern.java b/src/main/java/gov/nist/csd/pm/pap/pml/pattern/operand/AnyOperandPattern.java new file mode 100644 index 000000000..b5e087322 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/pattern/operand/AnyOperandPattern.java @@ -0,0 +1,39 @@ +package gov.nist.csd.pm.pap.pml.pattern.operand; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.pml.pattern.ReferencedNodes; +import gov.nist.csd.pm.pap.PAP; + +import java.util.Collection; + +public class AnyOperandPattern extends OperandPatternExpression { + @Override + public boolean matches(String value, PAP pap) throws PMException { + return true; + } + + @Override + public boolean matches(Collection value, PAP pap) throws PMException { + return true; + } + + @Override + public ReferencedNodes getReferencedNodes() { + return new ReferencedNodes(true); + } + + @Override + public String toFormattedString(int indentLevel) { + return "any"; + } + + @Override + public int hashCode() { + return toString().hashCode(); + } + + @Override + public boolean equals(Object obj) { + return obj instanceof AnyOperandPattern; + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/pattern/operand/InOperandPattern.java b/src/main/java/gov/nist/csd/pm/pap/pml/pattern/operand/InOperandPattern.java new file mode 100644 index 000000000..ad6d43625 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/pattern/operand/InOperandPattern.java @@ -0,0 +1,51 @@ +package gov.nist.csd.pm.pap.pml.pattern.operand; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.pml.pattern.ReferencedNodes; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.expression.literal.StringLiteral; +import gov.nist.csd.pm.pap.pml.value.StringValue; + +import java.util.Objects; +import java.util.Set; + +public class InOperandPattern extends OperandPatternExpression { + + private String container; + + public InOperandPattern(StringLiteral container) { + this.container = container.getValue(); + } + + + public InOperandPattern(String container) { + this.container = container; + } + + @Override + public boolean matches(String value, PAP pap) throws PMException { + return pap.query().graph().isAscendant(value, container); + } + + @Override + public ReferencedNodes getReferencedNodes() { + return new ReferencedNodes(Set.of(container), false); + } + + @Override + public String toFormattedString(int indentLevel) { + return "in " + new StringValue(container); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof InOperandPattern that)) return false; + return Objects.equals(container, that.container); + } + + @Override + public int hashCode() { + return Objects.hashCode(container); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/pattern/operand/LogicalOperandPatternExpression.java b/src/main/java/gov/nist/csd/pm/pap/pml/pattern/operand/LogicalOperandPatternExpression.java new file mode 100644 index 000000000..41554678d --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/pattern/operand/LogicalOperandPatternExpression.java @@ -0,0 +1,63 @@ +package gov.nist.csd.pm.pap.pml.pattern.operand; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.pml.pattern.Pattern; +import gov.nist.csd.pm.pap.pml.pattern.ReferencedNodes; +import gov.nist.csd.pm.pap.PAP; + +import java.util.Objects; + +public class LogicalOperandPatternExpression extends OperandPatternExpression { + + private Pattern left; + private Pattern right; + private boolean isAnd; + + public LogicalOperandPatternExpression(Pattern left, Pattern right, boolean isAnd) { + this.left = left; + this.right = right; + this.isAnd = isAnd; + } + + public Pattern getLeft() { + return left; + } + + public Pattern getRight() { + return right; + } + + public boolean isAnd() { + return isAnd; + } + + @Override + public boolean matches(String value, PAP pap) throws PMException { + return isAnd ? left.matches(value, pap) && right.matches(value, pap) + : left.matches(value, pap) || right.matches(value, pap); + } + + @Override + public ReferencedNodes getReferencedNodes() { + return left.getReferencedNodes().combine(right.getReferencedNodes()); + } + + @Override + public String toFormattedString(int indentLevel) { + return left.toFormattedString(indentLevel) + + (isAnd ? " && " : " || ") + + right.toFormattedString(indentLevel); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof LogicalOperandPatternExpression that)) return false; + return isAnd == that.isAnd && Objects.equals(left, that.left) && Objects.equals(right, that.right); + } + + @Override + public int hashCode() { + return Objects.hash(left, right, isAnd); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/pattern/operand/NegateOperandPatternExpression.java b/src/main/java/gov/nist/csd/pm/pap/pml/pattern/operand/NegateOperandPatternExpression.java new file mode 100644 index 000000000..510b327b5 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/pattern/operand/NegateOperandPatternExpression.java @@ -0,0 +1,48 @@ +package gov.nist.csd.pm.pap.pml.pattern.operand; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.pml.pattern.Pattern; +import gov.nist.csd.pm.pap.pml.pattern.ReferencedNodes; +import gov.nist.csd.pm.pap.PAP; + +import java.util.Objects; + +public class NegateOperandPatternExpression extends OperandPatternExpression { + + private Pattern operandPatternExpression; + + public NegateOperandPatternExpression(Pattern operandPatternExpression) { + this.operandPatternExpression = operandPatternExpression; + } + + public Pattern getOperandPatternExpression() { + return operandPatternExpression; + } + + @Override + public boolean matches(String value, PAP pap) throws PMException { + return !operandPatternExpression.matches(value, pap); + } + + @Override + public ReferencedNodes getReferencedNodes() { + return operandPatternExpression.getReferencedNodes(); + } + + @Override + public String toFormattedString(int indentLevel) { + return "!" + operandPatternExpression.toFormattedString(indentLevel); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof NegateOperandPatternExpression that)) return false; + return Objects.equals(operandPatternExpression, that.operandPatternExpression); + } + + @Override + public int hashCode() { + return Objects.hashCode(operandPatternExpression); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/pattern/operand/NodeOperandPattern.java b/src/main/java/gov/nist/csd/pm/pap/pml/pattern/operand/NodeOperandPattern.java new file mode 100644 index 000000000..391d7eb52 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/pattern/operand/NodeOperandPattern.java @@ -0,0 +1,50 @@ +package gov.nist.csd.pm.pap.pml.pattern.operand; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.pml.pattern.ReferencedNodes; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.expression.literal.StringLiteral; +import gov.nist.csd.pm.pap.pml.value.StringValue; + +import java.util.Objects; +import java.util.Set; + +public class NodeOperandPattern extends OperandPatternExpression { + + private String node; + + public NodeOperandPattern(StringLiteral node) { + this.node = node.getValue(); + } + + public NodeOperandPattern(String node) { + this.node = node; + } + + @Override + public boolean matches(String value, PAP pap) throws PMException { + return value.equals(node); + } + + @Override + public ReferencedNodes getReferencedNodes() { + return new ReferencedNodes(Set.of(node), false); + } + + @Override + public String toFormattedString(int indentLevel) { + return new StringValue(node).toString(); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof NodeOperandPattern that)) return false; + return Objects.equals(node, that.node); + } + + @Override + public int hashCode() { + return Objects.hashCode(node); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/pattern/operand/OperandPatternExpression.java b/src/main/java/gov/nist/csd/pm/pap/pml/pattern/operand/OperandPatternExpression.java new file mode 100644 index 000000000..5c0d7d122 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/pattern/operand/OperandPatternExpression.java @@ -0,0 +1,6 @@ +package gov.nist.csd.pm.pap.pml.pattern.operand; + +import gov.nist.csd.pm.pap.pml.pattern.Pattern; + +public abstract class OperandPatternExpression extends Pattern { +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/pattern/operand/ParenOperandPatternExpression.java b/src/main/java/gov/nist/csd/pm/pap/pml/pattern/operand/ParenOperandPatternExpression.java new file mode 100644 index 000000000..ca27b18d8 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/pattern/operand/ParenOperandPatternExpression.java @@ -0,0 +1,48 @@ +package gov.nist.csd.pm.pap.pml.pattern.operand; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.pml.pattern.Pattern; +import gov.nist.csd.pm.pap.pml.pattern.ReferencedNodes; +import gov.nist.csd.pm.pap.PAP; + +import java.util.Objects; + +public class ParenOperandPatternExpression extends OperandPatternExpression { + + private Pattern expression; + + public ParenOperandPatternExpression(Pattern expression) { + this.expression = expression; + } + + public Pattern getExpression() { + return expression; + } + + @Override + public boolean matches(String value, PAP pap) throws PMException { + return expression.matches(value, pap); + } + + @Override + public ReferencedNodes getReferencedNodes() { + return expression.getReferencedNodes(); + } + + @Override + public String toFormattedString(int indentLevel) { + return "(" + expression.toFormattedString(indentLevel) + ")"; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof ParenOperandPatternExpression that)) return false; + return Objects.equals(expression, that.expression); + } + + @Override + public int hashCode() { + return Objects.hashCode(expression); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/pattern/subject/InSubjectPattern.java b/src/main/java/gov/nist/csd/pm/pap/pml/pattern/subject/InSubjectPattern.java new file mode 100644 index 000000000..4966b2beb --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/pattern/subject/InSubjectPattern.java @@ -0,0 +1,51 @@ +package gov.nist.csd.pm.pap.pml.pattern.subject; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.pml.pattern.ReferencedNodes; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.expression.literal.StringLiteral; +import gov.nist.csd.pm.pap.pml.value.StringValue; + +import java.util.Objects; +import java.util.Set; + +public class InSubjectPattern extends SubjectPatternExpression { + + private String container; + + public InSubjectPattern(StringLiteral container) { + this.container = container.getValue(); + } + + + public InSubjectPattern(String container) { + this.container = container; + } + + @Override + public boolean matches(String value, PAP pap) throws PMException { + return pap.query().graph().isAscendant(value, container); + } + + @Override + public ReferencedNodes getReferencedNodes() { + return new ReferencedNodes(Set.of(container), false); + } + + @Override + public String toFormattedString(int indentLevel) { + return "in " + new StringValue(container); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof InSubjectPattern that)) return false; + return Objects.equals(container, that.container); + } + + @Override + public int hashCode() { + return Objects.hashCode(container); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/pattern/subject/LogicalSubjectPatternExpression.java b/src/main/java/gov/nist/csd/pm/pap/pml/pattern/subject/LogicalSubjectPatternExpression.java new file mode 100644 index 000000000..14eac9a78 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/pattern/subject/LogicalSubjectPatternExpression.java @@ -0,0 +1,63 @@ +package gov.nist.csd.pm.pap.pml.pattern.subject; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.pml.pattern.Pattern; +import gov.nist.csd.pm.pap.pml.pattern.ReferencedNodes; +import gov.nist.csd.pm.pap.PAP; + +import java.util.Objects; + +public class LogicalSubjectPatternExpression extends SubjectPatternExpression { + + private Pattern left; + private Pattern right; + private boolean isAnd; + + public LogicalSubjectPatternExpression(Pattern left, Pattern right, boolean isAnd) { + this.left = left; + this.right = right; + this.isAnd = isAnd; + } + + public Pattern getLeft() { + return left; + } + + public Pattern getRight() { + return right; + } + + public boolean isAnd() { + return isAnd; + } + + @Override + public boolean matches(String value, PAP pap) throws PMException { + return isAnd ? left.matches(value, pap) && right.matches(value, pap) + : left.matches(value, pap) || right.matches(value, pap); + } + + @Override + public ReferencedNodes getReferencedNodes() { + return left.getReferencedNodes().combine(right.getReferencedNodes()); + } + + @Override + public String toFormattedString(int indentLevel) { + return left.toFormattedString(indentLevel) + + (isAnd ? " && " : " || ") + + right.toFormattedString(indentLevel); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof LogicalSubjectPatternExpression that)) return false; + return isAnd == that.isAnd && Objects.equals(left, that.left) && Objects.equals(right, that.right); + } + + @Override + public int hashCode() { + return Objects.hash(left, right, isAnd); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/pattern/subject/NegateSubjectPatternExpression.java b/src/main/java/gov/nist/csd/pm/pap/pml/pattern/subject/NegateSubjectPatternExpression.java new file mode 100644 index 000000000..fb42208b6 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/pattern/subject/NegateSubjectPatternExpression.java @@ -0,0 +1,48 @@ +package gov.nist.csd.pm.pap.pml.pattern.subject; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.pml.pattern.Pattern; +import gov.nist.csd.pm.pap.pml.pattern.ReferencedNodes; +import gov.nist.csd.pm.pap.PAP; + +import java.util.Objects; + +public class NegateSubjectPatternExpression extends SubjectPatternExpression { + + private Pattern subjectPatternExpression; + + public NegateSubjectPatternExpression(Pattern subjectPatternExpression) { + this.subjectPatternExpression = subjectPatternExpression; + } + + public Pattern getSubjectPatternExpression() { + return subjectPatternExpression; + } + + @Override + public boolean matches(String value, PAP pap) throws PMException { + return !subjectPatternExpression.matches(value, pap); + } + + @Override + public ReferencedNodes getReferencedNodes() { + return subjectPatternExpression.getReferencedNodes(); + } + + @Override + public String toFormattedString(int indentLevel) { + return "!" + subjectPatternExpression.toFormattedString(indentLevel); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof NegateSubjectPatternExpression that)) return false; + return Objects.equals(subjectPatternExpression, that.subjectPatternExpression); + } + + @Override + public int hashCode() { + return Objects.hashCode(subjectPatternExpression); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/pattern/subject/ParenSubjectPatternExpression.java b/src/main/java/gov/nist/csd/pm/pap/pml/pattern/subject/ParenSubjectPatternExpression.java new file mode 100644 index 000000000..447e90353 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/pattern/subject/ParenSubjectPatternExpression.java @@ -0,0 +1,48 @@ +package gov.nist.csd.pm.pap.pml.pattern.subject; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.pml.pattern.Pattern; +import gov.nist.csd.pm.pap.pml.pattern.ReferencedNodes; +import gov.nist.csd.pm.pap.PAP; + +import java.util.Objects; + +public class ParenSubjectPatternExpression extends SubjectPatternExpression { + + private Pattern expression; + + public ParenSubjectPatternExpression(Pattern expression) { + this.expression = expression; + } + + public Pattern getExpression() { + return expression; + } + + @Override + public boolean matches(String value, PAP pap) throws PMException { + return expression.matches(value, pap); + } + + @Override + public ReferencedNodes getReferencedNodes() { + return expression.getReferencedNodes(); + } + + @Override + public String toFormattedString(int indentLevel) { + return "(" + expression.toFormattedString(indentLevel) + ")"; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof ParenSubjectPatternExpression that)) return false; + return Objects.equals(expression, that.expression); + } + + @Override + public int hashCode() { + return Objects.hashCode(expression); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/pattern/subject/ProcessSubjectPattern.java b/src/main/java/gov/nist/csd/pm/pap/pml/pattern/subject/ProcessSubjectPattern.java new file mode 100644 index 000000000..576286287 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/pattern/subject/ProcessSubjectPattern.java @@ -0,0 +1,49 @@ +package gov.nist.csd.pm.pap.pml.pattern.subject; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.pml.pattern.ReferencedNodes; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.expression.literal.StringLiteral; +import gov.nist.csd.pm.pap.pml.value.StringValue; + +import java.util.Objects; + +public class ProcessSubjectPattern extends SubjectPatternExpression { + + private String process; + + public ProcessSubjectPattern(StringLiteral process) { + this.process = process.getValue(); + } + + public ProcessSubjectPattern(String process) { + this.process = process; + } + + @Override + public boolean matches(String value, PAP pap) throws PMException { + return value.equals(process); + } + + @Override + public ReferencedNodes getReferencedNodes() { + return new ReferencedNodes(false); + } + + @Override + public String toFormattedString(int indentLevel) { + return "process " + new StringValue(process); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof ProcessSubjectPattern that)) return false; + return Objects.equals(process, that.process); + } + + @Override + public int hashCode() { + return Objects.hashCode(process); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/pattern/subject/SubjectPattern.java b/src/main/java/gov/nist/csd/pm/pap/pml/pattern/subject/SubjectPattern.java new file mode 100644 index 000000000..8dfd28fee --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/pattern/subject/SubjectPattern.java @@ -0,0 +1,63 @@ +package gov.nist.csd.pm.pap.pml.pattern.subject; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.pml.pattern.Pattern; +import gov.nist.csd.pm.pap.pml.pattern.ReferencedNodes; +import gov.nist.csd.pm.pap.PAP; + +import java.util.Objects; + +public class SubjectPattern extends Pattern { + + private final boolean isAny; + private final SubjectPatternExpression subjectPatternExpression; + + public SubjectPattern() { + this.isAny = true; + this.subjectPatternExpression = null; + } + + public SubjectPattern(SubjectPatternExpression subjectPatternExpression) { + this.isAny = false; + this.subjectPatternExpression = subjectPatternExpression; + } + + public boolean isAny() { + return isAny; + } + + public SubjectPatternExpression getSubjectPatternExpression() { + return subjectPatternExpression; + } + + @Override + public boolean matches(String value, PAP pap) throws PMException { + return isAny || subjectPatternExpression.matches(value, pap); + } + + @Override + public ReferencedNodes getReferencedNodes() { + if (isAny) { + return new ReferencedNodes(true); + } + + return subjectPatternExpression.getReferencedNodes(); + } + + @Override + public String toFormattedString(int indentLevel) { + return isAny ? "any user" : "user " + subjectPatternExpression.toFormattedString(indentLevel); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof SubjectPattern that)) return false; + return isAny == that.isAny && Objects.equals(subjectPatternExpression, that.subjectPatternExpression); + } + + @Override + public int hashCode() { + return Objects.hash(isAny, subjectPatternExpression); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/pattern/subject/SubjectPatternExpression.java b/src/main/java/gov/nist/csd/pm/pap/pml/pattern/subject/SubjectPatternExpression.java new file mode 100644 index 000000000..a8db1b0fe --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/pattern/subject/SubjectPatternExpression.java @@ -0,0 +1,7 @@ +package gov.nist.csd.pm.pap.pml.pattern.subject; + +import gov.nist.csd.pm.pap.pml.pattern.Pattern; + +public abstract class SubjectPatternExpression extends Pattern { + +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/pattern/subject/UsernamePattern.java b/src/main/java/gov/nist/csd/pm/pap/pml/pattern/subject/UsernamePattern.java new file mode 100644 index 000000000..7ac3e8535 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/pattern/subject/UsernamePattern.java @@ -0,0 +1,50 @@ +package gov.nist.csd.pm.pap.pml.pattern.subject; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.pml.pattern.ReferencedNodes; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.expression.literal.StringLiteral; +import gov.nist.csd.pm.pap.pml.value.StringValue; + +import java.util.Objects; +import java.util.Set; + +public class UsernamePattern extends SubjectPatternExpression { + + private String user; + + public UsernamePattern(StringLiteral user) { + this.user = user.getValue(); + } + + public UsernamePattern(String user) { + this.user = user; + } + + @Override + public boolean matches(String value, PAP pap) throws PMException { + return value.equals(user); + } + + @Override + public ReferencedNodes getReferencedNodes() { + return new ReferencedNodes(Set.of(user), false); + } + + @Override + public String toFormattedString(int indentLevel) { + return new StringValue(user).toString(); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof UsernamePattern that)) return false; + return Objects.equals(user, that.user); + } + + @Override + public int hashCode() { + return Objects.hashCode(user); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/scope/CompileGlobalScope.java b/src/main/java/gov/nist/csd/pm/pap/pml/scope/CompileGlobalScope.java new file mode 100644 index 000000000..bb9738839 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/scope/CompileGlobalScope.java @@ -0,0 +1,41 @@ +package gov.nist.csd.pm.pap.pml.scope; + +import gov.nist.csd.pm.pap.pml.compiler.Variable; +import gov.nist.csd.pm.pap.pml.executable.PMLExecutableSignature; +import gov.nist.csd.pm.pap.pml.executable.operation.PMLOperation; +import gov.nist.csd.pm.pap.pml.type.Type; + +import java.util.HashMap; +import java.util.Map; + +import static gov.nist.csd.pm.pap.admin.AdminPolicyNode.*; +import static gov.nist.csd.pm.pap.pml.executable.operation.PMLBuiltinOperations.builtinFunctions; + +public class CompileGlobalScope extends GlobalScope { + + public CompileGlobalScope() { + loadBuiltinConstantsAndFunctions(); + } + + public CompileGlobalScope(Map constants, Map functions) { + super(constants, functions); + + loadBuiltinConstantsAndFunctions(); + } + + private void loadBuiltinConstantsAndFunctions() { + Map builtinConstants = new HashMap<>(); + + // admin policy nodes constants + builtinConstants.put(ADMIN_POLICY.constantName(), new Variable(ADMIN_POLICY.constantName(), Type.string(), true)); + builtinConstants.put(ADMIN_POLICY_OBJECT.constantName(), new Variable(ADMIN_POLICY_OBJECT.constantName(), Type.string(), true)); + + // add builtin operations + addConstants(builtinConstants); + + Map funcs = builtinFunctions(); + for (Map.Entry func : funcs.entrySet()) { + addExecutable(func.getKey(), func.getValue().getSignature()); + } + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/scope/ExecuteGlobalScope.java b/src/main/java/gov/nist/csd/pm/pap/pml/scope/ExecuteGlobalScope.java new file mode 100644 index 000000000..1092287d0 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/scope/ExecuteGlobalScope.java @@ -0,0 +1,74 @@ +package gov.nist.csd.pm.pap.pml.scope; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.executable.AdminExecutable; +import gov.nist.csd.pm.pap.op.Operation; +import gov.nist.csd.pm.pap.pml.executable.operation.PMLBuiltinOperations; +import gov.nist.csd.pm.pap.pml.executable.operation.PMLOperation; +import gov.nist.csd.pm.pap.pml.executable.operation.PMLOperationWrapper; +import gov.nist.csd.pm.pap.pml.executable.operation.PMLStmtsOperation; +import gov.nist.csd.pm.pap.pml.executable.routine.PMLRoutine; +import gov.nist.csd.pm.pap.pml.executable.routine.PMLRoutineWrapper; +import gov.nist.csd.pm.pap.pml.executable.routine.PMLStmtsRoutine; +import gov.nist.csd.pm.pap.pml.value.StringValue; +import gov.nist.csd.pm.pap.pml.value.Value; +import gov.nist.csd.pm.pap.routine.Routine; + +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +import static gov.nist.csd.pm.pap.admin.AdminPolicyNode.*; + +public class ExecuteGlobalScope extends GlobalScope> { + + private ExecuteGlobalScope() { + // buitin variables + Map builtinConstants = new HashMap<>(); + + builtinConstants.put(ADMIN_POLICY.constantName(), new StringValue(ADMIN_POLICY.nodeName())); + builtinConstants.put(ADMIN_POLICY_OBJECT.constantName(), new StringValue(ADMIN_POLICY_OBJECT.nodeName())); + + addConstants(builtinConstants); + + // add builtin operations + Map funcs = PMLBuiltinOperations.builtinFunctions(); + for (Map.Entry entry : funcs.entrySet()) { + addExecutable(entry.getKey(), entry.getValue()); + } + } + + public ExecuteGlobalScope(PAP pap) throws PMException { + this(); + + Map pmlConstants = pap.getPMLConstants(); + addConstants(pmlConstants); + + Map operations = pap.getPMLOperations(); + addExecutables(new HashMap<>(operations)); + + Map routines = pap.getPMLRoutines(); + addExecutables(new HashMap<>(routines)); + + Collection opNames = pap.query().operations().getAdminOperationNames(); + for (String opName : opNames) { + Operation operation = pap.query().operations().getAdminOperation(opName); + if (operation instanceof PMLStmtsOperation pmlStmtsOperation) { + addExecutable(opName, pmlStmtsOperation); + } else { + addExecutable(opName, new PMLOperationWrapper(operation)); + } + } + + Collection routineNames = pap.query().routines().getAdminRoutineNames(); + for (String routineName : routineNames) { + Routine routine = pap.query().routines().getAdminRoutine(routineName); + if (routine instanceof PMLStmtsRoutine pmlStmtsRoutine) { + addExecutable(routineName, pmlStmtsRoutine); + } else { + addExecutable(routineName, new PMLRoutineWrapper(routine)); + } + } + } +} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/model/scope/FunctionAlreadyDefinedInScopeException.java b/src/main/java/gov/nist/csd/pm/pap/pml/scope/FunctionAlreadyDefinedInScopeException.java similarity index 83% rename from src/main/java/gov/nist/csd/pm/policy/pml/model/scope/FunctionAlreadyDefinedInScopeException.java rename to src/main/java/gov/nist/csd/pm/pap/pml/scope/FunctionAlreadyDefinedInScopeException.java index 84ec16983..daf82e797 100644 --- a/src/main/java/gov/nist/csd/pm/policy/pml/model/scope/FunctionAlreadyDefinedInScopeException.java +++ b/src/main/java/gov/nist/csd/pm/pap/pml/scope/FunctionAlreadyDefinedInScopeException.java @@ -1,4 +1,4 @@ -package gov.nist.csd.pm.policy.pml.model.scope; +package gov.nist.csd.pm.pap.pml.scope; public class FunctionAlreadyDefinedInScopeException extends PMLScopeException { diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/scope/GlobalScope.java b/src/main/java/gov/nist/csd/pm/pap/pml/scope/GlobalScope.java new file mode 100644 index 000000000..3aa807599 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/scope/GlobalScope.java @@ -0,0 +1,67 @@ +package gov.nist.csd.pm.pap.pml.scope; + +import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +public abstract class GlobalScope implements Serializable { + + private Map constants; + private Map executables; + + protected GlobalScope() { + constants = new HashMap<>(); + executables = new HashMap<>(); + } + + public GlobalScope(Map constants, Map executables) { + this.constants = constants; + this.executables = executables; + } + + public void addConstant(String key, V value) { + this.constants.put(key, value); + } + + public void addExecutable(String name, F operation) { + this.executables.put(name, operation); + } + + public V getConstant(String varName) { + return constants.get(varName); + } + + public F getExecutable(String funcName) { + return executables.get(funcName); + } + + public Map getExecutables() { + return executables; + } + + public Map getConstants() { + return constants; + } + + public void addExecutables(Map funcs) { + executables.putAll(funcs); + } + + public void addConstants(Map c) { + constants.putAll(c); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + GlobalScope that = (GlobalScope) o; + return Objects.equals(constants, that.constants) && Objects.equals(executables, that.executables); + } + + @Override + public int hashCode() { + return Objects.hash(constants, executables); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/scope/LocalScope.java b/src/main/java/gov/nist/csd/pm/pap/pml/scope/LocalScope.java new file mode 100644 index 000000000..d322b096e --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/scope/LocalScope.java @@ -0,0 +1,101 @@ +package gov.nist.csd.pm.pap.pml.scope; + +import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +public class LocalScope implements Serializable { + + private final Map variables; + + private final LocalScope parentScope; + + public LocalScope() { + variables = new HashMap<>(); + parentScope = null; + } + + public LocalScope(LocalScope parentScope) { + variables = new HashMap<>(); + this.parentScope = parentScope; + } + + public LocalScope copy() { + LocalScope copy = new LocalScope<>(this); + copy.variables.putAll(variables); + + return copy; + } + + public void clearVariables() { + variables.clear(); + } + + public LocalScope parentScope() { + return parentScope; + } + + public Map getVariables() { + Map variables = new HashMap<>(); + + if (parentScope != null) { + variables.putAll(this.parentScope.variables); + } + + variables.putAll(this.variables); + + return variables; + } + + public V getVariable(String name) { + if (variables.containsKey(name)) { + return variables.get(name); + } else if (parentScope != null) { + return parentScope.getVariable(name); + } + + return null; + } + + public void addVariable(String name, V v) throws VariableAlreadyDefinedInScopeException { + if ((parentScope != null && parentScope.variables.containsKey(name)) || + variables.containsKey(name)) { + throw new VariableAlreadyDefinedInScopeException(name); + } + + variables.put(name, v); + } + + public void addOrOverwriteVariable(String name, V v) { + variables.put(name, v); + } + + public void overwriteFromLocalScope(LocalScope localScope) { + for (String varName : localScope.variables.keySet()) { + if (!this.variables.containsKey(varName)) { + continue; + } + + this.variables.put(varName, localScope.variables.get(varName)); + } + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + LocalScope that = (LocalScope) o; + return Objects.equals(variables, that.variables) && Objects.equals( + parentScope, that.parentScope); + } + + @Override + public int hashCode() { + return Objects.hash(variables, parentScope); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/scope/PMLScopeException.java b/src/main/java/gov/nist/csd/pm/pap/pml/scope/PMLScopeException.java new file mode 100644 index 000000000..853314418 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/scope/PMLScopeException.java @@ -0,0 +1,9 @@ +package gov.nist.csd.pm.pap.pml.scope; + +import gov.nist.csd.pm.pap.exception.PMException; + +public class PMLScopeException extends PMException { + public PMLScopeException(String message) { + super(message); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/scope/Scope.java b/src/main/java/gov/nist/csd/pm/pap/pml/scope/Scope.java new file mode 100644 index 000000000..2890b5796 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/scope/Scope.java @@ -0,0 +1,103 @@ +package gov.nist.csd.pm.pap.pml.scope; + +import java.io.Serializable; +import java.util.Objects; + +public class Scope implements Serializable { + + private GlobalScope global; + private LocalScope local; + + public Scope(GlobalScope global) { + this.global = global; + this.local = new LocalScope<>(); + } + + public Scope(GlobalScope global, LocalScope localScope) { + this.global = global; + this.local = localScope; + } + + public Scope copy() { + return new Scope<>(global, local.copy()); + } + + public GlobalScope global() { + return global; + } + + public LocalScope local() { + return local; + } + + public F getFunction(String name) throws UnknownFunctionInScopeException { + F function = global.getExecutable(name); + if (function == null) { + throw new UnknownFunctionInScopeException(name); + } + + return function; + } + + public boolean functionExists(String name) { + try { + getFunction(name); + return true; + } catch (UnknownFunctionInScopeException e) { + return false; + } + } + + public void addVariable(String name, V v) throws VariableAlreadyDefinedInScopeException { + if (variableExists(name)) { + throw new VariableAlreadyDefinedInScopeException(name); + } + + this.local.addVariable(name, v); + } + + public void addOrOverwriteVariable(String name, V v) { + this.local.addOrOverwriteVariable(name, v); + } + + public V getVariable(String name) throws UnknownVariableInScopeException { + V variable = global.getConstant(name); + if (variable != null) { + return variable; + } + + variable = local.getVariable(name); + if (variable != null) { + return variable; + } + + throw new UnknownVariableInScopeException(name); + } + + public boolean variableExists(String name) { + try { + getVariable(name); + } catch (UnknownVariableInScopeException e) { + return false; + } + + return true; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Scope scope = (Scope) o; + return Objects.equals(global, scope.global) && Objects.equals(local, scope.local); + } + + @Override + public int hashCode() { + return Objects.hash(global, local); + } +} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/model/scope/UnknownFunctionInScopeException.java b/src/main/java/gov/nist/csd/pm/pap/pml/scope/UnknownFunctionInScopeException.java similarity index 82% rename from src/main/java/gov/nist/csd/pm/policy/pml/model/scope/UnknownFunctionInScopeException.java rename to src/main/java/gov/nist/csd/pm/pap/pml/scope/UnknownFunctionInScopeException.java index 79f42bfa2..6e3d8c145 100644 --- a/src/main/java/gov/nist/csd/pm/policy/pml/model/scope/UnknownFunctionInScopeException.java +++ b/src/main/java/gov/nist/csd/pm/pap/pml/scope/UnknownFunctionInScopeException.java @@ -1,4 +1,4 @@ -package gov.nist.csd.pm.policy.pml.model.scope; +package gov.nist.csd.pm.pap.pml.scope; public class UnknownFunctionInScopeException extends PMLScopeException { diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/scope/UnknownVariableInScopeException.java b/src/main/java/gov/nist/csd/pm/pap/pml/scope/UnknownVariableInScopeException.java new file mode 100644 index 000000000..368614303 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/scope/UnknownVariableInScopeException.java @@ -0,0 +1,9 @@ +package gov.nist.csd.pm.pap.pml.scope; + +public class UnknownVariableInScopeException extends PMLScopeException { + + public UnknownVariableInScopeException(String name) { + super(String.format("unknown variable '%s' in scope", name)); + } + +} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/model/scope/VariableAlreadyDefinedInScopeException.java b/src/main/java/gov/nist/csd/pm/pap/pml/scope/VariableAlreadyDefinedInScopeException.java similarity index 83% rename from src/main/java/gov/nist/csd/pm/policy/pml/model/scope/VariableAlreadyDefinedInScopeException.java rename to src/main/java/gov/nist/csd/pm/pap/pml/scope/VariableAlreadyDefinedInScopeException.java index aea460130..c6421ef4f 100644 --- a/src/main/java/gov/nist/csd/pm/policy/pml/model/scope/VariableAlreadyDefinedInScopeException.java +++ b/src/main/java/gov/nist/csd/pm/pap/pml/scope/VariableAlreadyDefinedInScopeException.java @@ -1,4 +1,4 @@ -package gov.nist.csd.pm.policy.pml.model.scope; +package gov.nist.csd.pm.pap.pml.scope; public class VariableAlreadyDefinedInScopeException extends PMLScopeException{ diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/statement/BreakStatement.java b/src/main/java/gov/nist/csd/pm/pap/pml/statement/BreakStatement.java new file mode 100644 index 000000000..00b1acd13 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/statement/BreakStatement.java @@ -0,0 +1,31 @@ +package gov.nist.csd.pm.pap.pml.statement; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.value.BreakValue; +import gov.nist.csd.pm.pap.pml.value.Value; + + +public class BreakStatement extends ControlStatement { + + @Override + public String toFormattedString(int indentLevel) { + return indent(indentLevel) + "break"; + } + + @Override + public Value execute(ExecutionContext ctx, PAP pap) throws PMException { + return new BreakValue(); + } + + @Override + public int hashCode() { + return toString().hashCode(); + } + + @Override + public boolean equals(Object obj) { + return obj instanceof BreakStatement; + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/statement/ContinueStatement.java b/src/main/java/gov/nist/csd/pm/pap/pml/statement/ContinueStatement.java new file mode 100644 index 000000000..f06fd1d74 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/statement/ContinueStatement.java @@ -0,0 +1,31 @@ +package gov.nist.csd.pm.pap.pml.statement; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.value.ContinueValue; +import gov.nist.csd.pm.pap.pml.value.Value; + + +public class ContinueStatement extends ControlStatement { + + @Override + public String toFormattedString(int indentLevel) { + return indent(indentLevel) + "continue"; + } + + @Override + public Value execute(ExecutionContext ctx, PAP pap) throws PMException { + return new ContinueValue(); + } + + @Override + public int hashCode() { + return toString().hashCode(); + } + + @Override + public boolean equals(Object obj) { + return obj instanceof ContinueStatement; + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/statement/ControlStatement.java b/src/main/java/gov/nist/csd/pm/pap/pml/statement/ControlStatement.java new file mode 100644 index 000000000..8e7bdcf86 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/statement/ControlStatement.java @@ -0,0 +1,15 @@ +package gov.nist.csd.pm.pap.pml.statement; + +public abstract class ControlStatement implements PMLStatement{ + + @Override + public final String toString() { + return toFormattedString(0); + } + + @Override + public abstract int hashCode(); + + @Override + public abstract boolean equals(Object obj); +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/statement/ForeachStatement.java b/src/main/java/gov/nist/csd/pm/pap/pml/statement/ForeachStatement.java new file mode 100644 index 000000000..188a7a5a4 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/statement/ForeachStatement.java @@ -0,0 +1,98 @@ +package gov.nist.csd.pm.pap.pml.statement; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.pml.value.*; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +public class ForeachStatement extends ControlStatement { + + private final String varName; + private final String valueVarName; + private final Expression iter; + private final List statements; + + public ForeachStatement(String varName, String valueVarName, Expression iter, List statements) { + this.varName = varName; + this.valueVarName = valueVarName; + this.iter = iter; + this.statements = statements; + } + + @Override + public Value execute(ExecutionContext ctx, PAP pap) throws PMException { + if (statements.isEmpty()) { + return new VoidValue(); + } + + Value iterValue = iter.execute(ctx, pap); + if (iterValue instanceof ArrayValue arrayValue) { + return executeArrayIterator(ctx, arrayValue); + } else if (iterValue instanceof MapValue mapValue) { + return executeMapIterator(ctx, mapValue, pap); + } + + return new VoidValue(); + } + + private Value executeArrayIterator(ExecutionContext ctx, ArrayValue iterValue) throws PMException{ + for (Value v : iterValue.getValue()) { + Value value = ctx.executeStatements(statements, Map.of(varName, v)); + + if (value instanceof BreakValue) { + break; + } else if (value instanceof ReturnValue) { + return value; + } + } + return new VoidValue(); + } + + private Value executeMapIterator(ExecutionContext ctx, MapValue iterValue, PAP pap) throws PMException{ + for (Value key : iterValue.getValue().keySet()) { + Value mapValue = iterValue.getMapValue().get(key); + + Map operands = new HashMap<>(Map.of(varName, key)); + if (valueVarName != null) { + operands.put(valueVarName, mapValue); + } + + Value value = ctx.executeStatements(statements, operands); + + if (value instanceof BreakValue) { + break; + } else if (value instanceof ReturnValue) { + return value; + } + } + + return new VoidValue(); + } + + @Override + public String toFormattedString(int indentLevel) { + return String.format("%sforeach %s in %s %s", + indent(indentLevel), (valueVarName != null ? String.format("%s, %s", varName, valueVarName) : varName), + iter, + new PMLStatementBlock(statements).toFormattedString(indentLevel) + ); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof ForeachStatement that)) return false; + return Objects.equals(varName, that.varName) && Objects.equals(valueVarName, that.valueVarName) && Objects.equals(iter, that.iter) && Objects.equals(statements, that.statements); + } + + @Override + public int hashCode() { + return Objects.hash(varName, valueVarName, iter, statements); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/statement/FunctionReturnStatement.java b/src/main/java/gov/nist/csd/pm/pap/pml/statement/FunctionReturnStatement.java new file mode 100644 index 000000000..61d9ec84a --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/statement/FunctionReturnStatement.java @@ -0,0 +1,68 @@ +package gov.nist.csd.pm.pap.pml.statement; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.compiler.Variable; +import gov.nist.csd.pm.pap.pml.executable.PMLExecutableSignature; +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.scope.PMLScopeException; +import gov.nist.csd.pm.pap.pml.scope.Scope; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.pml.value.ReturnValue; +import gov.nist.csd.pm.pap.pml.value.Value; +import gov.nist.csd.pm.pap.pml.value.VoidValue; + +import java.util.Objects; + + +public class FunctionReturnStatement extends ControlStatement { + + private Expression expr; + + public FunctionReturnStatement() { + } + + public FunctionReturnStatement(Expression expr) { + this.expr = expr; + } + + public Expression getExpr() { + return expr; + } + + public boolean matchesReturnType(Type match, Scope scope) throws PMLScopeException { + if (expr == null) { + return match.equals(Type.voidType()); + } + + return expr.getType(scope).equals(match); + } + + @Override + public Value execute(ExecutionContext ctx, PAP pap) throws PMException { + if (expr == null) { + return new ReturnValue(new VoidValue()); + } + + return new ReturnValue(expr.execute(ctx, pap)); + } + + @Override + public String toFormattedString(int indentLevel) { + return String.format("%sreturn%s", indent(indentLevel), (expr == null ? "" : String.format(" %s", expr))); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + FunctionReturnStatement that = (FunctionReturnStatement) o; + return Objects.equals(expr, that.expr); + } + + @Override + public int hashCode() { + return Objects.hash(expr); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/statement/IfStatement.java b/src/main/java/gov/nist/csd/pm/pap/pml/statement/IfStatement.java new file mode 100644 index 000000000..5b40ae061 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/statement/IfStatement.java @@ -0,0 +1,102 @@ +package gov.nist.csd.pm.pap.pml.statement; + +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.value.Value; + +import java.io.Serializable; +import java.util.List; +import java.util.Objects; + + +public class IfStatement extends ControlStatement { + + private ConditionalBlock ifBlock; + private List ifElseBlocks; + private PMLStatementBlock elseBlockStatements; + + public IfStatement(ConditionalBlock ifBlock, List ifElseBlocks, PMLStatementBlock elseBlock) { + this.ifBlock = ifBlock; + this.ifElseBlocks = ifElseBlocks; + this.elseBlockStatements = elseBlock; + } + + public ConditionalBlock getIfBlock() { + return ifBlock; + } + + public List getIfElseBlocks() { + return ifElseBlocks; + } + + public PMLStatementBlock getElseBlock() { + return elseBlockStatements; + } + + @Override + public Value execute(ExecutionContext ctx, PAP pap) throws PMException { + boolean condition = ifBlock.condition.execute(ctx, pap).getBooleanValue(); + + if (condition) { + return ifBlock.block.execute(ctx, pap); + } + + // check else ifs + for (ConditionalBlock conditionalBlock : ifElseBlocks) { + condition = conditionalBlock.condition.execute(ctx, pap).getBooleanValue(); + if (condition) { + return conditionalBlock.block.execute(ctx, pap); + } + } + + return elseBlockStatements.execute(ctx, pap); + } + + @Override + public String toFormattedString(int indentLevel) { + return String.format( + "%s%s%s", + ifBlockToString(indentLevel), + elseIfBlockToString(indentLevel), + elseBlockToString(indentLevel) + ); + } + + private String elseBlockToString(int indentLevel) { + if (elseBlockStatements.getStmts().isEmpty()) { + return ""; + } + + return String.format(" else %s", elseBlockStatements.toFormattedString(indentLevel)); + } + + private String elseIfBlockToString(int indentLevel) { + StringBuilder s = new StringBuilder(); + for (ConditionalBlock b : ifElseBlocks) { + s.append(String.format(" else if %s %s", b.condition, b.block.toFormattedString(indentLevel))); + } + + return s.toString(); + } + + private String ifBlockToString(int indentLevel) { + return String.format("%sif %s %s", indent(indentLevel), ifBlock.condition, ifBlock.block.toFormattedString(indentLevel)); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + IfStatement ifStmt = (IfStatement) o; + return Objects.equals(ifBlock, ifStmt.ifBlock) && Objects.equals(ifElseBlocks, ifStmt.ifElseBlocks) && Objects.equals(elseBlockStatements, ifStmt.elseBlockStatements); + } + + @Override + public int hashCode() { + return Objects.hash(ifBlock, ifElseBlocks, elseBlockStatements); + } + + public record ConditionalBlock(Expression condition, PMLStatementBlock block) implements Serializable { } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/statement/PMLStatement.java b/src/main/java/gov/nist/csd/pm/pap/pml/statement/PMLStatement.java new file mode 100644 index 000000000..319f8f5f0 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/statement/PMLStatement.java @@ -0,0 +1,5 @@ +package gov.nist.csd.pm.pap.pml.statement; + +public interface PMLStatement extends PMLStatementExecutable, PMLStatementSerializable { + +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/statement/PMLStatementBlock.java b/src/main/java/gov/nist/csd/pm/pap/pml/statement/PMLStatementBlock.java new file mode 100644 index 000000000..4aaf4a3ea --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/statement/PMLStatementBlock.java @@ -0,0 +1,65 @@ +package gov.nist.csd.pm.pap.pml.statement; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.value.Value; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; + + +public class PMLStatementBlock extends ControlStatement { + + private List stmts; + + public PMLStatementBlock(List stmts) { + this.stmts = stmts; + } + + public PMLStatementBlock(PMLStatement ... statements) { + stmts = new ArrayList<>(List.of(statements)); + } + + public List getStmts() { + return stmts; + } + + public void setStmts(List stmts) { + this.stmts = stmts; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + PMLStatementBlock that = (PMLStatementBlock) o; + return Objects.equals(stmts, that.stmts); + } + + @Override + public int hashCode() { + return Objects.hash(stmts); + } + + @Override + public String toFormattedString(int indentLevel) { + StringBuilder sb = new StringBuilder("{\n"); + for (PMLStatement stmt : stmts) { + sb.append(stmt.toFormattedString(indentLevel+1)).append("\n"); + } + + return sb.append(indent(indentLevel)).append("}").toString(); + } + + @Override + public Value execute(ExecutionContext ctx, PAP pap) throws PMException { + return ctx.executeStatements(stmts, Map.of()); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/statement/PMLStatementExecutable.java b/src/main/java/gov/nist/csd/pm/pap/pml/statement/PMLStatementExecutable.java new file mode 100644 index 000000000..c8cb0365d --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/statement/PMLStatementExecutable.java @@ -0,0 +1,12 @@ +package gov.nist.csd.pm.pap.pml.statement; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.value.Value; + +public interface PMLStatementExecutable { + + Value execute(ExecutionContext ctx, PAP pap) throws PMException; + +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/statement/PMLStatementSerializable.java b/src/main/java/gov/nist/csd/pm/pap/pml/statement/PMLStatementSerializable.java new file mode 100644 index 000000000..496ee80fd --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/statement/PMLStatementSerializable.java @@ -0,0 +1,19 @@ +package gov.nist.csd.pm.pap.pml.statement; + +import java.io.Serializable; + +public interface PMLStatementSerializable extends Serializable { + + String toFormattedString(int indentLevel); + + default String indent(int indentLevel) { + String INDENT = " "; + return INDENT.repeat(indentLevel); + } + + @Override + boolean equals(Object o); + + @Override + int hashCode(); +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/statement/ShortDeclarationStatement.java b/src/main/java/gov/nist/csd/pm/pap/pml/statement/ShortDeclarationStatement.java new file mode 100644 index 000000000..362920e1e --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/statement/ShortDeclarationStatement.java @@ -0,0 +1,67 @@ +package gov.nist.csd.pm.pap.pml.statement; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.value.Value; +import gov.nist.csd.pm.pap.pml.value.VoidValue; + +import java.util.Objects; + + +public class ShortDeclarationStatement extends ControlStatement { + + private String id; + private Expression expression; + + public ShortDeclarationStatement(String id, Expression expression) { + this.id = id; + this.expression = expression; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public Expression getExpression() { + return expression; + } + + public void setExpression(Expression expression) { + this.expression = expression; + } + + @Override + public Value execute(ExecutionContext ctx, PAP pap) throws PMException { + ctx.scope().addVariable(id, expression.execute(ctx, pap)); + + return new VoidValue(); + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ShortDeclarationStatement that = (ShortDeclarationStatement) o; + return Objects.equals(id, that.id) && Objects.equals(expression, that.expression); + } + + @Override + public int hashCode() { + return Objects.hash(id, expression); + } + + @Override + public String toFormattedString(int indentLevel) { + return indent(indentLevel) + id + " := " + expression.toFormattedString(indentLevel); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/statement/VariableAssignmentStatement.java b/src/main/java/gov/nist/csd/pm/pap/pml/statement/VariableAssignmentStatement.java new file mode 100644 index 000000000..eb6a57a45 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/statement/VariableAssignmentStatement.java @@ -0,0 +1,89 @@ +package gov.nist.csd.pm.pap.pml.statement; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.value.StringValue; +import gov.nist.csd.pm.pap.pml.value.Value; +import gov.nist.csd.pm.pap.pml.value.VoidValue; + +import java.util.Objects; + + +public class VariableAssignmentStatement extends ControlStatement { + + private String id; + private boolean isPlus; + private Expression expression; + + public VariableAssignmentStatement(String id, boolean isPlus, Expression expression) { + this.id = id; + this.isPlus = isPlus; + this.expression = expression; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public boolean isPlus() { + return isPlus; + } + + public void setPlus(boolean plus) { + isPlus = plus; + } + + public Expression getExpression() { + return expression; + } + + public void setExpression(Expression expression) { + this.expression = expression; + } + + @Override + public Value execute(ExecutionContext ctx, PAP pap) throws PMException { + Value value = expression.execute(ctx, pap); + + // if statement uses '+=' add the existing value to the new value + if (isPlus) { + String strValue = ctx.scope().getVariable(id).getStringValue(); + String exprValue = expression.execute(ctx, pap).getStringValue(); + + value = new StringValue(strValue + exprValue); + } + + ctx.scope().local().addOrOverwriteVariable(id, value); + + return new VoidValue(); + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + VariableAssignmentStatement that = (VariableAssignmentStatement) o; + return isPlus == that.isPlus && Objects.equals(id, that.id) && Objects.equals( + expression, that.expression); + } + + @Override + public int hashCode() { + return Objects.hash(id, isPlus, expression); + } + + @Override + public String toFormattedString(int indentLevel) { + return indent(indentLevel) + id + (isPlus ? " +": " ") + "= " + expression; + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/statement/VariableDeclarationStatement.java b/src/main/java/gov/nist/csd/pm/pap/pml/statement/VariableDeclarationStatement.java new file mode 100644 index 000000000..ff71b173a --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/statement/VariableDeclarationStatement.java @@ -0,0 +1,89 @@ +package gov.nist.csd.pm.pap.pml.statement; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.value.Value; +import gov.nist.csd.pm.pap.pml.value.VoidValue; + +import java.util.List; +import java.util.Objects; + + +public class VariableDeclarationStatement extends ControlStatement { + + private List declarations; + + public VariableDeclarationStatement(List declarations) { + this.declarations = declarations; + } + + public List getDeclarations() { + return declarations; + } + + public void setDeclarations( + List declarations) { + this.declarations = declarations; + } + + @Override + public Value execute(ExecutionContext ctx, PAP pap) throws PMException { + for (Declaration declaration : declarations) { + Value value = declaration.expression.execute(ctx, pap); + + ctx.scope().local().addOrOverwriteVariable(declaration.id, value); + } + + return new VoidValue(); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + VariableDeclarationStatement that = (VariableDeclarationStatement) o; + return Objects.equals(declarations, that.declarations); + } + + @Override + public int hashCode() { + return Objects.hashCode(declarations); + } + + @Override + public String toFormattedString(int indentLevel) { + String indent = indent(indentLevel); + StringBuilder sb = new StringBuilder(); + sb.append(indent).append("var (\n"); + + for (Declaration declaration : declarations) { + sb.append(indent(indentLevel+1)).append(declaration.id).append(" = ").append(declaration.expression).append("\n"); + } + + sb.append(indent).append(")"); + + return sb.toString(); + } + + public record Declaration(String id, Expression expression) { + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Declaration that = (Declaration) o; + return Objects.equals(id, that.id) && Objects.equals(expression, that.expression); + } + + @Override + public int hashCode() { + return Objects.hash(id, expression); + } + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/AssignStatement.java b/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/AssignStatement.java new file mode 100644 index 000000000..cd7deaa04 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/AssignStatement.java @@ -0,0 +1,59 @@ +package gov.nist.csd.pm.pap.pml.statement.operation; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.op.graph.AssignOp; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.pml.value.Value; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +import static gov.nist.csd.pm.pap.op.graph.AssignOp.ASCENDANT_OPERAND; +import static gov.nist.csd.pm.pap.op.graph.GraphOp.DESCENDANTS_OPERAND; + + +public class AssignStatement extends OperationStatement { + + private Expression ascendant; + private Expression descendants; + + public AssignStatement(Expression ascendant, Expression descendants) { + super(new AssignOp()); + + this.ascendant = ascendant; + this.descendants = descendants; + } + + @Override + public Map prepareOperands(ExecutionContext ctx, PAP pap) throws PMException { + String asc = ascendant.execute(ctx, pap).getStringValue(); + List assignToValue = descendants.execute(ctx, pap).getArrayValue(); + List descs = new ArrayList<>(); + for (Value value : assignToValue) { + descs.add(value.getStringValue()); + } + + return Map.of(ASCENDANT_OPERAND, asc, DESCENDANTS_OPERAND, descs); + } + + @Override + public String toFormattedString(int indentLevel) { + return indent(indentLevel) + String.format("assign %s to %s", ascendant, descendants); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof AssignStatement that)) return false; + return Objects.equals(ascendant, that.ascendant) && Objects.equals(descendants, that.descendants); + } + + @Override + public int hashCode() { + return Objects.hash(ascendant, descendants); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/AssociateStatement.java b/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/AssociateStatement.java new file mode 100644 index 000000000..0d0b6134e --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/AssociateStatement.java @@ -0,0 +1,64 @@ +package gov.nist.csd.pm.pap.pml.statement.operation; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.op.graph.AssociateOp; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.pml.value.Value; + +import java.util.Map; +import java.util.Objects; + +import static gov.nist.csd.pm.pap.op.graph.AssociateOp.UA_OPERAND; +import static gov.nist.csd.pm.pap.op.graph.AssociateOp.TARGET_OPERAND; +import static gov.nist.csd.pm.pap.op.prohibition.ProhibitionOp.ARSET_OPERAND; + + +public class AssociateStatement extends OperationStatement { + + private Expression ua; + private Expression target; + private Expression accessRights; + + public AssociateStatement(Expression ua, Expression target, Expression accessRights) { + super(new AssociateOp()); + + this.ua = ua; + this.target = target; + this.accessRights = accessRights; + } + + @Override + public Map prepareOperands(ExecutionContext ctx, PAP pap) throws PMException { + Value uaValue = ua.execute(ctx, pap); + Value targetValue = target.execute(ctx, pap); + Value accessRightsValue = accessRights.execute(ctx, pap); + + AccessRightSet accessRightSet = new AccessRightSet(); + for (Value v : accessRightsValue.getArrayValue()) { + accessRightSet.add(v.getStringValue()); + } + + return Map.of(UA_OPERAND, uaValue.getStringValue(), TARGET_OPERAND, targetValue.getStringValue(), ARSET_OPERAND, accessRightSet); + } + + @Override + public String toFormattedString(int indentLevel) { + return indent(indentLevel) + String.format("associate %s and %s with %s", + ua, target, accessRights); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof AssociateStatement that)) return false; + return Objects.equals(ua, that.ua) && Objects.equals(target, that.target) && Objects.equals(accessRights, that.accessRights); + } + + @Override + public int hashCode() { + return Objects.hash(ua, target, accessRights); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/CheckStatement.java b/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/CheckStatement.java new file mode 100644 index 000000000..b8c9434e4 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/CheckStatement.java @@ -0,0 +1,76 @@ +package gov.nist.csd.pm.pap.pml.statement.operation; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.op.PrivilegeChecker; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.pml.statement.PMLStatement; +import gov.nist.csd.pm.pap.pml.value.Value; +import gov.nist.csd.pm.pap.pml.value.VoidValue; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +public class CheckStatement implements PMLStatement { + + private Expression arsExpr; + private Expression targetExpr; + + public CheckStatement(Expression arsExpr, Expression targetExpr) { + this.arsExpr = arsExpr; + this.targetExpr = targetExpr; + } + + @Override + public Value execute(ExecutionContext ctx, PAP pap) throws PMException { + Value ars = arsExpr.execute(ctx, pap); + Value target = targetExpr.execute(ctx, pap); + + List arsToCheck = new ArrayList<>(); + if (ars.getType().isString()) { + arsToCheck.add(ars.getStringValue()); + } else { + List arrayValue = ars.getArrayValue(); + for (Value v : arrayValue) { + arsToCheck.add(v.getStringValue()); + } + } + + if (target.getType().isString()) { + PrivilegeChecker.check(pap, ctx.author(), target.getStringValue(), arsToCheck); + } else { + List arrayValue = target.getArrayValue(); + for (Value value : arrayValue) { + PrivilegeChecker.check(pap, ctx.author(), value.getStringValue(), arsToCheck); + } + } + + return new VoidValue(); + } + + @Override + public String toFormattedString(int indentLevel) { + return indent(indentLevel) + + "check " + arsExpr.toFormattedString(0) + + " on " + targetExpr.toFormattedString(0); + } + + @Override + public String toString() { + return toFormattedString(0); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof CheckStatement that)) return false; + return Objects.equals(arsExpr, that.arsExpr) && Objects.equals(targetExpr, that.targetExpr); + } + + @Override + public int hashCode() { + return Objects.hash(arsExpr, targetExpr); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateFunctionStatement.java b/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateFunctionStatement.java new file mode 100644 index 000000000..16b6016c7 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateFunctionStatement.java @@ -0,0 +1,10 @@ +package gov.nist.csd.pm.pap.pml.statement.operation; + +import gov.nist.csd.pm.pap.pml.executable.PMLExecutableSignature; +import gov.nist.csd.pm.pap.pml.statement.PMLStatement; + +public interface CreateFunctionStatement extends PMLStatement { + + PMLExecutableSignature getSignature(); + +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateNonPCStatement.java b/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateNonPCStatement.java new file mode 100644 index 000000000..4fc533d47 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateNonPCStatement.java @@ -0,0 +1,79 @@ +package gov.nist.csd.pm.pap.pml.statement.operation; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.node.NodeType; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.op.Operation; +import gov.nist.csd.pm.pap.op.graph.CreateObjectAttributeOp; +import gov.nist.csd.pm.pap.op.graph.CreateObjectOp; +import gov.nist.csd.pm.pap.op.graph.CreateUserAttributeOp; +import gov.nist.csd.pm.pap.op.graph.CreateUserOp; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.pml.value.Value; + +import java.util.*; + +import static gov.nist.csd.pm.pap.op.graph.CreateNodeOp.*; + + +public class CreateNonPCStatement extends OperationStatement { + private Expression name; + private NodeType type; + private Expression assignTo; + + public CreateNonPCStatement(Expression name, NodeType type, Expression assignTo) { + super(getOpFromType(type)); + this.name = name; + this.type = type; + this.assignTo = assignTo; + } + + @Override + public Map prepareOperands(ExecutionContext ctx, PAP pap) throws PMException { + Value nameValue = name.execute(ctx, pap); + Value assignToValue = assignTo.execute(ctx, pap); + + List descendants = new ArrayList<>(); + List arrayValue = assignToValue.getArrayValue(); + for (Value descValue : arrayValue) { + descendants.add(descValue.getStringValue()); + } + + return Map.of( + NAME_OPERAND, nameValue.getStringValue(), + DESCENDANTS_OPERAND, descendants + ); + } + + @Override + public String toFormattedString(int indentLevel) { + return indent(indentLevel) + String.format( + "create %s %s in %s", + type.toString(), + name, + assignTo + ); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof CreateNonPCStatement that)) return false; + return Objects.equals(name, that.name) && type == that.type && Objects.equals(assignTo, that.assignTo); + } + + @Override + public int hashCode() { + return Objects.hash(name, type, assignTo); + } + + private static Operation getOpFromType(NodeType type) { + return switch (type) { + case OA -> new CreateObjectAttributeOp(); + case O -> new CreateObjectOp(); + case UA -> new CreateUserAttributeOp(); + default -> new CreateUserOp(); + }; + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateObligationStatement.java b/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateObligationStatement.java new file mode 100644 index 000000000..69d341b26 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateObligationStatement.java @@ -0,0 +1,113 @@ +package gov.nist.csd.pm.pap.pml.statement.operation; + +import gov.nist.csd.pm.pap.obligation.EventPattern; +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.exception.UnknownPatternException; +import gov.nist.csd.pm.pap.op.obligation.CreateObligationOp; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.expression.literal.StringLiteral; +import gov.nist.csd.pm.pap.obligation.Obligation; +import gov.nist.csd.pm.pap.obligation.Rule; +import gov.nist.csd.pm.pap.pml.expression.Expression; + +import java.util.*; + +import static gov.nist.csd.pm.pap.op.graph.GraphOp.*; +import static gov.nist.csd.pm.pap.op.obligation.ObligationOp.*; + + +public class CreateObligationStatement extends OperationStatement { + + private Expression name; + private List ruleStmts; + + public CreateObligationStatement(Expression name, List ruleStmts) { + super(new CreateObligationOp()); + this.name = name; + this.ruleStmts = ruleStmts; + } + + public Expression getName() { + return name; + } + + public List getRuleStmts() { + return ruleStmts; + } + + @Override + public Map prepareOperands(ExecutionContext ctx, PAP pap) + throws PMException { + String nameStr = name.execute(ctx, pap).getStringValue(); + + // execute the create rule statements and add to obligation + List rules = new ArrayList<>(); + for (CreateRuleStatement createRuleStmt : ruleStmts) { + Rule rule = createRuleStmt.execute(ctx, pap).getRuleValue(); + rules.add(rule); + } + + return Map.of(AUTHOR_OPERAND, ctx.author().getUser(), NAME_OPERAND, nameStr, RULES_OPERAND, rules); + } + + @Override + public String toFormattedString(int indentLevel) { + StringBuilder sb = new StringBuilder(); + for (CreateRuleStatement createRuleStatement : ruleStmts) { + sb.append(createRuleStatement.toFormattedString(indentLevel+1)).append("\n\n"); + } + + String indent = indent(indentLevel); + return String.format( + """ + %screate obligation %s { + %s%s}""", indent, name, sb, indent); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof CreateObligationStatement that)) return false; + return Objects.equals(name, that.name) && Objects.equals(ruleStmts, that.ruleStmts); + } + + @Override + public int hashCode() { + return Objects.hash(name, ruleStmts); + } + + public static CreateObligationStatement fromObligation(Obligation obligation) { + try { + return new CreateObligationStatement( + new StringLiteral(obligation.getName()), + createRuleStatementsFromObligation(obligation.getRules()) + ); + } catch (UnknownPatternException e) { + throw new RuntimeException(e); + } + } + + private static List createRuleStatementsFromObligation(List rules) throws UnknownPatternException { + List createRuleStatements = new ArrayList<>(); + + for (Rule rule : rules) { + EventPattern event = rule.getEventPattern(); + + CreateRuleStatement createRuleStatement = new CreateRuleStatement( + new StringLiteral(rule.getName()), + event.getSubjectPattern(), + event.getOperationPattern(), + event.getOperandPatterns(), + new CreateRuleStatement.ResponseBlock( + rule.getResponse().getEventCtxVariable(), + rule.getResponse().getStatements() + ) + ); + + createRuleStatements.add(createRuleStatement); + } + + return createRuleStatements; + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateOperationStatement.java b/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateOperationStatement.java new file mode 100644 index 000000000..f443c2b22 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateOperationStatement.java @@ -0,0 +1,65 @@ +package gov.nist.csd.pm.pap.pml.statement.operation; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.op.PreparedOperation; +import gov.nist.csd.pm.pap.op.operation.CreateAdminOperationOp; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.executable.PMLExecutableSignature; +import gov.nist.csd.pm.pap.pml.executable.operation.PMLStmtsOperation; +import gov.nist.csd.pm.pap.pml.value.Value; +import gov.nist.csd.pm.pap.pml.value.VoidValue; + +import java.util.Map; +import java.util.Objects; + +import static gov.nist.csd.pm.pap.op.operation.CreateAdminOperationOp.OPERATION_OPERAND; + +public class CreateOperationStatement extends PreparedOperation implements CreateFunctionStatement { + + protected PMLStmtsOperation op; + + public CreateOperationStatement(PMLStmtsOperation op) { + super(new CreateAdminOperationOp(), Map.of(OPERATION_OPERAND, op)); + + this.op = op; + } + + @Override + public String toFormattedString(int indentLevel) { + return op.toFormattedString(indentLevel); + } + + @Override + public Value execute(ExecutionContext ctx, PAP pap) throws PMException { + super.execute(pap); + + ctx.scope().global().addExecutable(op.getName(), op); + + return new VoidValue(); + } + + @Override + public PMLExecutableSignature getSignature() { + return op.getSignature(); + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (!(o instanceof CreateOperationStatement that)) { + return false; + } + if (!super.equals(o)) { + return false; + } + return Objects.equals(op, that.op); + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode(), op); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/CreatePolicyStatement.java b/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/CreatePolicyStatement.java new file mode 100644 index 000000000..afacde950 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/CreatePolicyStatement.java @@ -0,0 +1,48 @@ +package gov.nist.csd.pm.pap.pml.statement.operation; + +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.op.graph.CreatePolicyClassOp; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.expression.Expression; + +import java.util.Map; +import java.util.Objects; + +import static gov.nist.csd.pm.pap.op.graph.GraphOp.NAME_OPERAND; + +public class CreatePolicyStatement extends OperationStatement { + + private Expression name; + + public CreatePolicyStatement(Expression name) { + super(new CreatePolicyClassOp()); + + this.name = name; + } + + @Override + public Map prepareOperands(ExecutionContext ctx, PAP pap) + throws PMException { + String pcName = name.execute(ctx, pap).getStringValue(); + + return Map.of(NAME_OPERAND, pcName); + } + + @Override + public String toFormattedString(int indentLevel) { + return indent(indentLevel) + String.format("create PC %s", name); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof CreatePolicyStatement that)) return false; + return Objects.equals(name, that.name); + } + + @Override + public int hashCode() { + return Objects.hash(name); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateProhibitionStatement.java b/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateProhibitionStatement.java new file mode 100644 index 000000000..c12c9aaf6 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateProhibitionStatement.java @@ -0,0 +1,152 @@ +package gov.nist.csd.pm.pap.pml.statement.operation; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.prohibition.ContainerCondition; +import gov.nist.csd.pm.pap.prohibition.Prohibition; +import gov.nist.csd.pm.pap.prohibition.ProhibitionSubject; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.op.prohibition.CreateProhibitionOp; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.pml.expression.NegatedExpression; +import gov.nist.csd.pm.pap.pml.expression.literal.ArrayLiteral; +import gov.nist.csd.pm.pap.pml.expression.literal.StringLiteral; +import gov.nist.csd.pm.pap.pml.expression.reference.ReferenceByID; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.pml.value.ComplementedValue; +import gov.nist.csd.pm.pap.pml.value.Value; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +import static gov.nist.csd.pm.pap.op.AdminAccessRights.isAdminAccessRight; +import static gov.nist.csd.pm.pap.op.Operation.NAME_OPERAND; +import static gov.nist.csd.pm.pap.op.graph.GraphOp.ARSET_OPERAND; +import static gov.nist.csd.pm.pap.op.prohibition.ProhibitionOp.*; + +public class CreateProhibitionStatement extends OperationStatement { + + private Expression name; + private Expression subject; + private ProhibitionSubject.Type subjectType; + private Expression accessRights; + private boolean isIntersection; + private Expression containers; + + public CreateProhibitionStatement(Expression name, Expression subject, ProhibitionSubject.Type subjectType, Expression accessRights, + boolean isIntersection, Expression containers) { + super(new CreateProhibitionOp()); + this.name = name; + this.subject = subject; + this.subjectType = subjectType; + this.accessRights = accessRights; + this.isIntersection = isIntersection; + this.containers = containers; + } + + @Override + public Map prepareOperands(ExecutionContext ctx, PAP pap) + throws PMException { + Value idValue = this.name .execute(ctx, pap); + Value subjectValue = this.subject.execute(ctx, pap); + Value permissionsValue = this.accessRights.execute(ctx, pap); + + List arrayValue = permissionsValue.getArrayValue(); + AccessRightSet ops = new AccessRightSet(); + for (Value v : arrayValue) { + ops.add(v.getStringValue()); + } + + List containerConditions = new ArrayList<>(); + for (Value container : containers.execute(ctx, pap).getArrayValue()) { + boolean isComplement = container instanceof ComplementedValue; + String containerName = container.getStringValue(); + + containerConditions.add(new ContainerCondition(containerName, isComplement)); + } + + return Map.of( + NAME_OPERAND, idValue.getStringValue(), + SUBJECT_OPERAND, new ProhibitionSubject(subjectValue.getStringValue(), subjectType), + ARSET_OPERAND, ops, + INTERSECTION_OPERAND, isIntersection, + CONTAINERS_OPERAND, containerConditions + ); + } + + @Override + public String toFormattedString(int indentLevel) { + String subjectStr = getSubjectStr(); + String indent = indent(indentLevel); + return String.format( + """ + %screate prohibition %s + %s deny %s %s + %s access rights %s + %s on %s of %s""", + indent, name, + indent, subjectStr, subject, + indent, accessRights, + indent, (isIntersection ? "intersection" : "union"), containers + ); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof CreateProhibitionStatement that)) return false; + return isIntersection == that.isIntersection && Objects.equals(name, that.name) && Objects.equals(subject, that.subject) && subjectType == that.subjectType && Objects.equals(accessRights, that.accessRights) && Objects.equals(containers, that.containers); + } + + @Override + public int hashCode() { + return Objects.hash(name, subject, subjectType, accessRights, isIntersection, containers); + } + + private String getSubjectStr() { + String subjectStr = ""; + switch (subjectType) { + case USER_ATTRIBUTE -> subjectStr = "UA"; + case USER -> subjectStr = "U"; + case PROCESS -> subjectStr = "process"; + } + + return subjectStr; + } + + public static CreateProhibitionStatement fromProhibition(Prohibition prohibition) { + List accessRightsList = new ArrayList<>(); + for (String ar : prohibition.getAccessRightSet()) { + if (isAdminAccessRight(ar)) { + accessRightsList.add(new ReferenceByID(ar)); + } else { + accessRightsList.add(new StringLiteral(ar)); + } + } + ArrayLiteral arList = new ArrayLiteral(accessRightsList, Type.string()); + + List containersList = new ArrayList<>(); + for (ContainerCondition cc : prohibition.getContainers()) { + StringLiteral s = new StringLiteral(cc.getName()); + if (cc.isComplement()) { + containersList.add(new NegatedExpression(s)); + } else { + containersList.add(s); + } + } + + ArrayLiteral containers = new ArrayLiteral(containersList, Type.string()); + + return new CreateProhibitionStatement( + new StringLiteral(prohibition.getName()), + new StringLiteral(prohibition.getSubject().getName()), + prohibition.getSubject().getType(), + arList, + prohibition.isIntersection(), + containers + ); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateRoutineStatement.java b/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateRoutineStatement.java new file mode 100644 index 000000000..58e4a33d3 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateRoutineStatement.java @@ -0,0 +1,65 @@ +package gov.nist.csd.pm.pap.pml.statement.operation; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.op.PreparedOperation; +import gov.nist.csd.pm.pap.op.routine.CreateAdminRoutineOp; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.executable.PMLExecutableSignature; +import gov.nist.csd.pm.pap.pml.executable.routine.PMLRoutineSignature; +import gov.nist.csd.pm.pap.pml.executable.routine.PMLStmtsRoutine; +import gov.nist.csd.pm.pap.pml.value.Value; +import gov.nist.csd.pm.pap.pml.value.VoidValue; + +import java.util.Map; +import java.util.Objects; + +import static gov.nist.csd.pm.pap.op.routine.CreateAdminRoutineOp.ROUTINE_OPERAND; + +public class CreateRoutineStatement extends PreparedOperation implements CreateFunctionStatement { + + private PMLStmtsRoutine routine; + + public CreateRoutineStatement(PMLStmtsRoutine routine) { + super(new CreateAdminRoutineOp(), Map.of(ROUTINE_OPERAND, routine)); + + this.routine = routine; + } + + @Override + public String toFormattedString(int indentLevel) { + return String.format( + "%s%s", + new PMLRoutineSignature(routine.getName(), routine.getReturnType(), routine.getOperandNames(), routine.getOperandTypes()) + .toFormattedString(indentLevel), + routine.getStatements().toFormattedString(indentLevel) + ); + } + + @Override + public Value execute(ExecutionContext ctx, PAP pap) throws PMException { + super.execute(pap); + + ctx.scope().global().addExecutable(routine.getName(), routine); + + return new VoidValue(); + } + + @Override + public PMLExecutableSignature getSignature() { + return routine.getSignature(); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof CreateRoutineStatement that)) return false; + if (!super.equals(o)) return false; + return Objects.equals(routine, that.routine); + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode(), routine); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateRuleStatement.java b/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateRuleStatement.java new file mode 100644 index 000000000..1373a3092 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateRuleStatement.java @@ -0,0 +1,187 @@ +package gov.nist.csd.pm.pap.pml.statement.operation; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.obligation.EventPattern; +import gov.nist.csd.pm.pap.obligation.Response; +import gov.nist.csd.pm.pap.obligation.Rule; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.pml.pattern.OperationPattern; +import gov.nist.csd.pm.pap.pml.pattern.operand.OperandPatternExpression; +import gov.nist.csd.pm.pap.pml.pattern.subject.SubjectPattern; +import gov.nist.csd.pm.pap.pml.statement.PMLStatement; +import gov.nist.csd.pm.pap.pml.statement.PMLStatementBlock; +import gov.nist.csd.pm.pap.pml.value.RuleValue; +import gov.nist.csd.pm.pap.pml.value.Value; + +import java.io.Serializable; +import java.util.*; + + +public class CreateRuleStatement implements PMLStatement { + + protected Expression name; + protected SubjectPattern subjectPattern; + protected OperationPattern operationPattern; + protected Map> operandPattern; + protected ResponseBlock responseBlock; + + public CreateRuleStatement(Expression name, + SubjectPattern subjectPattern, + OperationPattern operationPattern, + Map> operandPattern, + ResponseBlock responseBlock) { + this.name = name; + this.subjectPattern = subjectPattern; + this.operationPattern = operationPattern; + this.operandPattern = operandPattern; + this.responseBlock = responseBlock; + } + + public Expression getName() { + return name; + } + + public void setName(Expression name) { + this.name = name; + } + + public SubjectPattern getSubjectPattern() { + return subjectPattern; + } + + public void setSubjectPattern(SubjectPattern subjectPattern) { + this.subjectPattern = subjectPattern; + } + + public OperationPattern getOperationPattern() { + return operationPattern; + } + + public void setOperationPattern(OperationPattern operationPattern) { + this.operationPattern = operationPattern; + } + + public Map> getOperandPattern() { + return operandPattern; + } + + public void setOperandPattern(Map> operandPattern) { + this.operandPattern = operandPattern; + } + + public ResponseBlock getResponseBlock() { + return responseBlock; + } + + public void setResponseBlock(ResponseBlock responseBlock) { + this.responseBlock = responseBlock; + } + + @Override + public Value execute(ExecutionContext ctx, PAP pap) throws PMException { + String nameValue = name.execute(ctx, pap).getStringValue(); + + return new RuleValue(new Rule( + nameValue, + new EventPattern( + subjectPattern, + operationPattern, + new HashMap<>(operandPattern) + ), + new Response(responseBlock.evtVar, responseBlock.getStatements()) + )); + } + + @Override + public String toFormattedString(int indentLevel) { + PMLStatementBlock block = new PMLStatementBlock(responseBlock.statements); + + String indent = indent(indentLevel); + + String operandsStr = ""; + for (Map.Entry> operandExpr : operandPattern.entrySet()) { + if (!operandsStr.isEmpty()) { + operandsStr += ",\n"; + } + + List value = operandExpr.getValue(); + + operandsStr += indent(indentLevel+1) + + operandExpr.getKey() + ": " + (value.size() == 1 ? value.getFirst() : value); + } + operandsStr = operandPattern.isEmpty() ? "" : indent + "on {\n" + operandsStr + "\n" + indent + "}"; + + return String.format( + """ + %screate rule %s + %swhen %s + %sperforms %s + %s + %sdo (%s) %s""", + indent, name, + indent, subjectPattern, + indent, operationPattern.isAny() ? operationPattern.toString() : "\"" + operationPattern.toString() + "\"", + operandsStr, + indent, responseBlock.evtVar, block.toFormattedString(indentLevel) + ); + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + CreateRuleStatement that = (CreateRuleStatement) o; + return Objects.equals(name, that.name) && + Objects.equals(subjectPattern, that.subjectPattern) && + Objects.equals(operationPattern, that.operationPattern) && + Objects.equals(operandPattern, that.operandPattern) && + Objects.equals(responseBlock, that.responseBlock); + } + + @Override + public int hashCode() { + return Objects.hash(name, subjectPattern, operationPattern, operandPattern, responseBlock); + } + + public static class ResponseBlock implements Serializable { + protected String evtVar; + protected List statements; + + public ResponseBlock(String evtVar, List statements) { + this.evtVar = evtVar; + this.statements = statements; + } + + public String getEvtVar() { + return evtVar; + } + + public List getStatements() { + return statements; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ResponseBlock that = (ResponseBlock) o; + return Objects.equals(evtVar, that.evtVar) && Objects.equals(statements, that.statements); + } + + @Override + public int hashCode() { + return Objects.hash(evtVar, statements); + } + } + +} \ No newline at end of file diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/DeassignStatement.java b/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/DeassignStatement.java new file mode 100644 index 000000000..39518de37 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/DeassignStatement.java @@ -0,0 +1,57 @@ +package gov.nist.csd.pm.pap.pml.statement.operation; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.op.graph.DeassignOp; +import gov.nist.csd.pm.pap.op.graph.GraphOp; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.pml.value.Value; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; + + +public class DeassignStatement extends OperationStatement { + + private Expression ascendant; + private Expression deassignFrom; + + public DeassignStatement(Expression ascendant, Expression deassignFrom) { + super(new DeassignOp()); + this.ascendant = ascendant; + this.deassignFrom = deassignFrom; + } + + @Override + public Map prepareOperands(ExecutionContext ctx, PAP pap) + throws PMException { + String asc = ascendant.execute(ctx, pap).getStringValue(); + List deassignFromValue = deassignFrom.execute(ctx, pap).getArrayValue(); + List descs = new ArrayList<>(); + for (Value value : deassignFromValue) { + descs.add(value.getStringValue()); + } + + return Map.of(GraphOp.ASCENDANT_OPERAND, asc, GraphOp.DESCENDANTS_OPERAND, descs); + } + + @Override + public String toFormattedString(int indentLevel) { + return indent(indentLevel) + String.format("deassign %s from %s", ascendant, deassignFrom); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof DeassignStatement that)) return false; + return Objects.equals(ascendant, that.ascendant) && Objects.equals(deassignFrom, that.deassignFrom); + } + + @Override + public int hashCode() { + return Objects.hash(ascendant, deassignFrom); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/DeleteRuleStatement.java b/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/DeleteRuleStatement.java new file mode 100644 index 000000000..9196bd2f0 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/DeleteRuleStatement.java @@ -0,0 +1,103 @@ +package gov.nist.csd.pm.pap.pml.statement.operation; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.obligation.Obligation; +import gov.nist.csd.pm.pap.obligation.Rule; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.op.Operation; +import gov.nist.csd.pm.pap.op.obligation.CreateObligationOp; +import gov.nist.csd.pm.pap.op.obligation.DeleteObligationOp; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.query.UserContext; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +import static gov.nist.csd.pm.pap.op.Operation.NAME_OPERAND; +import static gov.nist.csd.pm.pap.op.obligation.ObligationOp.AUTHOR_OPERAND; +import static gov.nist.csd.pm.pap.op.obligation.ObligationOp.RULES_OPERAND; + + +public class DeleteRuleStatement extends OperationStatement { + + private final Expression ruleExpr; + private final Expression oblExpr; + + public DeleteRuleStatement(Expression ruleExpr, Expression oblExpr) { + super(new UpdateObligationOp()); + this.ruleExpr = ruleExpr; + this.oblExpr = oblExpr; + } + + @Override + public Map prepareOperands(ExecutionContext ctx, PAP pap) throws PMException { + String ruleName = ruleExpr.execute(ctx, pap).getStringValue(); + String oblName = oblExpr.execute(ctx, pap).getStringValue(); + + Obligation obligation = pap.query().obligations().getObligation(oblName); + List rules = new ArrayList<>(); + for (Rule rule : obligation.getRules()) { + if (rule.getName().equals(ruleName)) { + continue; + } + + rules.add(rule); + } + + return Map.of( + AUTHOR_OPERAND, obligation.getAuthor(), + NAME_OPERAND, obligation.getName(), + RULES_OPERAND, rules + ); + } + + @Override + public String toFormattedString(int indentLevel) { + return indent(indentLevel) + String.format("delete rule %s from obligation %s", ruleExpr, oblExpr); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof DeleteRuleStatement that)) return false; + return Objects.equals(ruleExpr, that.ruleExpr) && Objects.equals(oblExpr, that.oblExpr); + } + + @Override + public int hashCode() { + return Objects.hash(ruleExpr, oblExpr); + } + + static class UpdateObligationOp extends Operation { + + public UpdateObligationOp() { + super( + "delete_rule", + List.of(AUTHOR_OPERAND, NAME_OPERAND, RULES_OPERAND) + ); + } + + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { + new DeleteObligationOp() + .canExecute(pap, userCtx, operands); + new CreateObligationOp() + .canExecute(pap, userCtx, operands); + } + + @Override + public Void execute(PAP pap, Map operands) throws PMException { + String author = (String) operands.get(AUTHOR_OPERAND); + String name = (String) operands.get(NAME_OPERAND); + List rules = (List) operands.get(RULES_OPERAND); + + pap.modify().obligations().deleteObligation(name); + pap.modify().obligations().createObligation(author, name, rules); + + return null; + } + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/DeleteStatement.java b/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/DeleteStatement.java new file mode 100644 index 000000000..4eebd0664 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/DeleteStatement.java @@ -0,0 +1,84 @@ +package gov.nist.csd.pm.pap.pml.statement.operation; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.op.Operation; +import gov.nist.csd.pm.pap.op.graph.*; +import gov.nist.csd.pm.pap.op.obligation.DeleteObligationOp; +import gov.nist.csd.pm.pap.op.prohibition.DeleteProhibitionOp; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.expression.Expression; + +import java.util.Map; +import java.util.Objects; + +import static gov.nist.csd.pm.pap.op.Operation.NAME_OPERAND; + +public class DeleteStatement extends OperationStatement { + + private Type type; + private Expression expression; + + public DeleteStatement(Type type, Expression expression) { + super(getOpFromType(type)); + this.type = type; + this.expression = expression; + } + + @Override + public Map prepareOperands(ExecutionContext ctx, PAP pap) throws PMException { + String name = expression.execute(ctx, pap).getStringValue(); + + return Map.of(NAME_OPERAND, name); + } + + @Override + public String toFormattedString(int indentLevel) { + String typeStr = ""; + switch (type) { + case PROHIBITION -> typeStr = "prohibition"; + case OBLIGATION -> typeStr = "obligation"; + case POLICY_CLASS -> typeStr = "PC"; + case OBJECT_ATTRIBUTE -> typeStr = "OA"; + case USER_ATTRIBUTE -> typeStr = "UA"; + case OBJECT -> typeStr = "O"; + case USER -> typeStr = "U"; + } + + return indent(indentLevel) + String.format("delete %s %s", typeStr, expression); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof DeleteStatement that)) return false; + return type == that.type && Objects.equals(expression, that.expression); + } + + @Override + public int hashCode() { + return Objects.hash(type, expression); + } + + public enum Type { + POLICY_CLASS, + OBJECT_ATTRIBUTE, + USER_ATTRIBUTE, + OBJECT, + USER, + PROHIBITION, + OBLIGATION + } + + private static Operation getOpFromType(Type type) { + return switch (type) { + case POLICY_CLASS -> new DeletePolicyClassOp(); + case OBJECT_ATTRIBUTE -> new DeleteObjectAttributeOp(); + case USER_ATTRIBUTE -> new DeleteUserAttributeOp(); + case OBJECT -> new DeleteObjectOp(); + case USER -> new DeleteUserOp(); + case PROHIBITION -> new DeleteProhibitionOp(); + case OBLIGATION -> new DeleteObligationOp(); + }; + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/DissociateStatement.java b/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/DissociateStatement.java new file mode 100644 index 000000000..e49dc70f7 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/DissociateStatement.java @@ -0,0 +1,51 @@ +package gov.nist.csd.pm.pap.pml.statement.operation; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.op.graph.DissociateOp; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.expression.Expression; + +import java.util.Map; +import java.util.Objects; + +import static gov.nist.csd.pm.pap.op.graph.GraphOp.TARGET_OPERAND; +import static gov.nist.csd.pm.pap.op.graph.GraphOp.UA_OPERAND; + + +public class DissociateStatement extends OperationStatement { + + private Expression uaExpr; + private Expression targetExpr; + + public DissociateStatement(Expression uaExpr, Expression targetExpr) { + super(new DissociateOp()); + this.uaExpr = uaExpr; + this.targetExpr = targetExpr; + } + + @Override + public Map prepareOperands(ExecutionContext ctx, PAP pap) throws PMException { + String ua = uaExpr.execute(ctx, pap).getStringValue(); + String target = targetExpr.execute(ctx, pap).getStringValue(); + + return Map.of(UA_OPERAND, ua, TARGET_OPERAND, target); + } + + @Override + public String toFormattedString(int indentLevel) { + return indent(indentLevel) + String.format("dissociate %s and %s", uaExpr, targetExpr); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof DissociateStatement that)) return false; + return Objects.equals(uaExpr, that.uaExpr) && Objects.equals(targetExpr, that.targetExpr); + } + + @Override + public int hashCode() { + return Objects.hash(uaExpr, targetExpr); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/OperationStatement.java b/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/OperationStatement.java new file mode 100644 index 000000000..9d472fd54 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/OperationStatement.java @@ -0,0 +1,46 @@ +package gov.nist.csd.pm.pap.pml.statement.operation; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.op.Operation; +import gov.nist.csd.pm.pap.op.PreparedOperation; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.statement.PMLStatement; +import gov.nist.csd.pm.pap.pml.value.VoidValue; + +import java.util.*; + +public abstract class OperationStatement extends PreparedOperation implements PMLStatement { + + public OperationStatement(Operation op) { + super(op, new HashMap<>()); + } + + public abstract Map prepareOperands(ExecutionContext ctx, PAP pap) throws PMException; + + @Override + public final VoidValue execute(ExecutionContext ctx, PAP pap) throws PMException { + Map prepareOperands = prepareOperands(ctx, pap); + setOperands(prepareOperands); + + execute(pap); + + return new VoidValue(); + } + + @Override + public final Void execute(PAP pap) throws PMException { + return super.execute(pap); + } + + @Override + public String toString() { + return toFormattedString(0); + } + + @Override + public abstract boolean equals(Object o); + + @Override + public abstract int hashCode(); +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/SetNodePropertiesStatement.java b/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/SetNodePropertiesStatement.java new file mode 100644 index 000000000..4d83f0af1 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/SetNodePropertiesStatement.java @@ -0,0 +1,57 @@ +package gov.nist.csd.pm.pap.pml.statement.operation; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.op.graph.SetNodePropertiesOp; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.pml.value.Value; + +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +import static gov.nist.csd.pm.pap.op.Operation.NAME_OPERAND; +import static gov.nist.csd.pm.pap.op.graph.GraphOp.PROPERTIES_OPERAND; + + +public class SetNodePropertiesStatement extends OperationStatement { + + private Expression nameExpr; + private Expression propertiesExpr; + + public SetNodePropertiesStatement(Expression nameExpr, Expression propertiesExpr) { + super(new SetNodePropertiesOp()); + this.nameExpr = nameExpr; + this.propertiesExpr = propertiesExpr; + } + + @Override + public Map prepareOperands(ExecutionContext ctx, PAP pap) throws PMException { + String name = nameExpr.execute(ctx, pap).getStringValue(); + Map map = propertiesExpr.execute(ctx, pap).getMapValue(); + Map properties = new HashMap<>(); + for (Value key : map.keySet()) { + properties.put(key.getStringValue(), map.get(key).getStringValue()); + } + + return Map.of(NAME_OPERAND, name, PROPERTIES_OPERAND, properties); + } + + @Override + public String toFormattedString(int indentLevel) { + return indent(indentLevel) + String.format("set properties of %s to %s", nameExpr, propertiesExpr); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof SetNodePropertiesStatement that)) return false; + return Objects.equals(nameExpr, that.nameExpr) && Objects.equals(propertiesExpr, that.propertiesExpr); + } + + @Override + public int hashCode() { + return Objects.hash(nameExpr, propertiesExpr); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/SetResourceOperationsStatement.java b/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/SetResourceOperationsStatement.java new file mode 100644 index 000000000..8d77972e6 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/statement/operation/SetResourceOperationsStatement.java @@ -0,0 +1,55 @@ +package gov.nist.csd.pm.pap.pml.statement.operation; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.op.operation.SetResourceOperationsOp; +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.value.Value; + +import java.util.Map; +import java.util.Objects; + +import static gov.nist.csd.pm.pap.op.operation.SetResourceOperationsOp.OPERATIONS_OPERAND; + + +public class SetResourceOperationsStatement extends OperationStatement { + + private Expression ops; + + public SetResourceOperationsStatement(Expression ops) { + super(new SetResourceOperationsOp()); + + this.ops = ops; + } + + @Override + public Map prepareOperands(ExecutionContext ctx, PAP pap) + throws PMException { + Value arValue = ops.execute(ctx, pap); + AccessRightSet accessRightSet = new AccessRightSet(); + for (Value v : arValue.getArrayValue()) { + accessRightSet.add(v.getStringValue()); + } + + return Map.of(OPERATIONS_OPERAND, accessRightSet); + } + + @Override + public String toFormattedString(int indentLevel) { + return indent(indentLevel) + String.format("set resource operations %s", ops); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof SetResourceOperationsStatement that)) return false; + return Objects.equals(ops, that.ops); + } + + @Override + public int hashCode() { + return Objects.hashCode(ops); + } +} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/model/expression/Type.java b/src/main/java/gov/nist/csd/pm/pap/pml/type/Type.java similarity index 81% rename from src/main/java/gov/nist/csd/pm/policy/pml/model/expression/Type.java rename to src/main/java/gov/nist/csd/pm/pap/pml/type/Type.java index 2a9f841da..02d989b1f 100644 --- a/src/main/java/gov/nist/csd/pm/policy/pml/model/expression/Type.java +++ b/src/main/java/gov/nist/csd/pm/pap/pml/type/Type.java @@ -1,21 +1,22 @@ -package gov.nist.csd.pm.policy.pml.model.expression; +package gov.nist.csd.pm.pap.pml.type; -import gov.nist.csd.pm.policy.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; import java.io.Serializable; +import java.util.Objects; public class Type implements Serializable { private boolean isVoid; private boolean isAny; private boolean isString; - private boolean isNumber; private boolean isBoolean; private boolean isArray; - private Type arrayType; + private Type arrayElementType; private boolean isMap; private Type mapKeyType; private Type mapValueType; + private boolean isPattern; public static Type any() { Type type = new Type(); @@ -29,12 +30,6 @@ public static Type string() { return type; } - public static Type number() { - Type type = new Type(); - type.isNumber = true; - return type; - } - public static Type bool() { Type type = new Type(); type.isBoolean = true; @@ -44,7 +39,7 @@ public static Type bool() { public static Type array(Type arrayElementsType) { Type type = new Type(); type.isArray = true; - type.arrayType = arrayElementsType; + type.arrayElementType = arrayElementsType; return type; } @@ -62,8 +57,14 @@ public static Type voidType() { return type; } + public static Type pattern() { + Type type = new Type(); + type.isPattern = true; + return type; + } + public static Type toType(PMLParser.VariableTypeContext varTypeContext) { - Type type = null; + Type type; if (varTypeContext instanceof PMLParser.StringTypeContext) { type = Type.string(); } else if (varTypeContext instanceof PMLParser.BooleanTypeContext) { @@ -75,7 +76,7 @@ public static Type toType(PMLParser.VariableTypeContext varTypeContext) { toType(mapVarTypeContext.mapType().keyType), toType(mapVarTypeContext.mapType().valueType) ); - } else if (varTypeContext instanceof PMLParser.AnyTypeContext) { + } else { type = Type.any(); } @@ -90,10 +91,6 @@ public boolean isString() { return isString || isAny; } - public boolean isNumber() { - return isNumber || isAny; - } - public boolean isBoolean() { return isBoolean || isAny; } @@ -110,12 +107,16 @@ public boolean isVoid() { return isVoid; } - public Type getArrayType() { + public boolean isPattern() { + return isPattern || isAny; + } + + public Type getArrayElementType() { if (isAny) { return Type.any(); } - return arrayType; + return arrayElementType; } public Type getMapKeyType() { @@ -143,33 +144,38 @@ public boolean equals(Object obj) { return true; } else if (isString && type.isString) { return true; - } else if (isNumber && type.isNumber) { - return true; } else if (isBoolean && type.isBoolean) { return true; } else if (isArray && type.isArray) { - return arrayType.equals(type.arrayType); + return arrayElementType.equals(type.arrayElementType); } else if (isMap && type.isMap) { return this.mapKeyType.equals(type.mapKeyType) && this.mapValueType.equals(type.mapValueType); + } else if (isPattern && type.isPattern) { + return true; } } return false; } + @Override + public int hashCode() { + return Objects.hash(isAny, isString, isBoolean, isArray, arrayElementType, isMap, mapKeyType, mapValueType); + } + @Override public String toString() { if (isVoid) { return "void"; } else if (isString) { return "string"; - } else if (isNumber) { - return "number"; + } else if (isPattern) { + return "pattern"; } else if (isBoolean) { - return "boolean"; + return "bool"; } else if (isArray) { - return "[]" + arrayType.toString(); + return "[]" + arrayElementType.toString(); } else if (isMap) { return "map[" + mapKeyType.toString() + "]" + mapValueType.toString(); } else { diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/value/ArrayValue.java b/src/main/java/gov/nist/csd/pm/pap/pml/value/ArrayValue.java new file mode 100644 index 000000000..62055ec92 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/value/ArrayValue.java @@ -0,0 +1,55 @@ +package gov.nist.csd.pm.pap.pml.value; + +import gov.nist.csd.pm.pap.pml.type.Type; + +import java.util.List; +import java.util.Objects; + +public class ArrayValue extends Value { + + private List value; + + public ArrayValue(List value, Type elementType) { + super(Type.array(elementType)); + this.value = value; + } + + public List getValue() { + return value; + } + + public void setValue(List value) { + this.value = value; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ArrayValue that = (ArrayValue) o; + return Objects.equals(value, that.value); + } + + @Override + public int hashCode() { + return Objects.hash(value); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + for (Value value : value) { + if (!sb.isEmpty()) { + sb.append(", "); + } + + sb.append(value); + } + + return "[" + sb + "]"; + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/value/BoolValue.java b/src/main/java/gov/nist/csd/pm/pap/pml/value/BoolValue.java new file mode 100644 index 000000000..597c83607 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/value/BoolValue.java @@ -0,0 +1,45 @@ +package gov.nist.csd.pm.pap.pml.value; + +import gov.nist.csd.pm.pap.pml.type.Type; + +import java.util.Objects; + +public class BoolValue extends Value { + + private boolean value; + + public BoolValue(Boolean value) { + super(Type.bool()); + this.value = value; + } + + public boolean getValue() { + return value; + } + + public void setValue(boolean value) { + this.value = value; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + BoolValue that = (BoolValue) o; + return value == that.value; + } + + @Override + public int hashCode() { + return Objects.hash(value); + } + + @Override + public String toString() { + return value ? "true" : "false"; + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/value/BreakValue.java b/src/main/java/gov/nist/csd/pm/pap/pml/value/BreakValue.java new file mode 100644 index 000000000..a58af7989 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/value/BreakValue.java @@ -0,0 +1,24 @@ +package gov.nist.csd.pm.pap.pml.value; + +import gov.nist.csd.pm.pap.pml.type.Type; + +public class BreakValue extends Value { + public BreakValue() { + super(Type.any()); + } + + @Override + public boolean equals(Object o) { + return false; + } + + @Override + public int hashCode() { + return 0; + } + + @Override + public String toString() { + return "break"; + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/value/ComplementedValue.java b/src/main/java/gov/nist/csd/pm/pap/pml/value/ComplementedValue.java new file mode 100644 index 000000000..3e5e33b2b --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/value/ComplementedValue.java @@ -0,0 +1,77 @@ +package gov.nist.csd.pm.pap.pml.value; + +import gov.nist.csd.pm.pap.obligation.Rule; + +import java.util.List; +import java.util.Map; +import java.util.Objects; + +public class ComplementedValue extends Value { + + private Value value; + + public ComplementedValue(Value value) { + super(value.getType()); + this.value = value; + } + + public Value getValue() { + return value; + } + + public void setValue(Value value) { + this.value = value; + } + + @Override + public String getStringValue() { + return value.getStringValue(); + } + + @Override + public Boolean getBooleanValue() { + return !value.getBooleanValue(); + } + + @Override + public List getArrayValue() { + return value.getArrayValue(); + } + + @Override + public Map getMapValue() { + return value.getMapValue(); + } + + @Override + public Value getProhibitionValue() { + return value.getProhibitionValue(); + } + + @Override + public Rule getRuleValue() { + return value.getRuleValue(); + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ComplementedValue that = (ComplementedValue) o; + return Objects.equals(value, that.value); + } + + @Override + public int hashCode() { + return Objects.hash(value); + } + + @Override + public String toString() { + return "!" + value.toString(); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/value/ContinueValue.java b/src/main/java/gov/nist/csd/pm/pap/pml/value/ContinueValue.java new file mode 100644 index 000000000..63e6efb2a --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/value/ContinueValue.java @@ -0,0 +1,24 @@ +package gov.nist.csd.pm.pap.pml.value; + +import gov.nist.csd.pm.pap.pml.type.Type; + +public class ContinueValue extends Value { + public ContinueValue() { + super(Type.any()); + } + + @Override + public boolean equals(Object o) { + return false; + } + + @Override + public int hashCode() { + return 0; + } + + @Override + public String toString() { + return null; + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/value/MapValue.java b/src/main/java/gov/nist/csd/pm/pap/pml/value/MapValue.java new file mode 100644 index 000000000..70b197d38 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/value/MapValue.java @@ -0,0 +1,55 @@ +package gov.nist.csd.pm.pap.pml.value; + +import gov.nist.csd.pm.pap.pml.type.Type; + +import java.util.Map; +import java.util.Objects; + +public class MapValue extends Value { + + private Map value; + + public MapValue(Map value, Type keyType, Type valueType) { + super(Type.map(keyType, valueType)); + this.value = value; + } + + public Map getValue() { + return value; + } + + public void setValue(Map value) { + this.value = value; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + MapValue mapValue = (MapValue) o; + return Objects.equals(value, mapValue.value); + } + + @Override + public int hashCode() { + return Objects.hash(value); + } + + @Override + public String toString() { + StringBuilder entries = new StringBuilder(); + for (Map.Entry entry : value.entrySet()) { + if (entries.length() > 0) { + entries.append(", "); + } + + entries.append(entry.getKey()).append(": ").append(entry.getValue()); + } + + return String.format("{%s}", entries); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/value/PatternValue.java b/src/main/java/gov/nist/csd/pm/pap/pml/value/PatternValue.java new file mode 100644 index 000000000..d2299af73 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/value/PatternValue.java @@ -0,0 +1,48 @@ +package gov.nist.csd.pm.pap.pml.value; + +import gov.nist.csd.pm.pap.pml.pattern.Pattern; +import gov.nist.csd.pm.pap.pml.type.Type; + +import java.util.Objects; + +public class PatternValue extends Value{ + + private Pattern value; + + public PatternValue(Pattern value) { + super(Type.any()); + this.value = value; + } + + public Pattern getValue() { + return value; + } + + public void setValue(Pattern value) { + this.value = value; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + PatternValue that = (PatternValue) o; + return Objects.equals(value, that.value); + } + + @Override + public int hashCode() { + return Objects.hashCode(value); + } + + @Override + public String toString() { + return "PatternValue{" + + "pattern=" + value + + '}'; + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/value/ProhibitionValue.java b/src/main/java/gov/nist/csd/pm/pap/pml/value/ProhibitionValue.java new file mode 100644 index 000000000..52d9a27be --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/value/ProhibitionValue.java @@ -0,0 +1,47 @@ +package gov.nist.csd.pm.pap.pml.value; + +import gov.nist.csd.pm.pap.prohibition.Prohibition; +import gov.nist.csd.pm.pap.pml.type.Type; + +import java.util.Objects; + +public class ProhibitionValue extends Value { + + private Prohibition value; + + public ProhibitionValue(Prohibition value) { + super(Type.any()); + + this.value = value; + } + + public Value getValue() { + return Value.fromObject(value); + } + + public void setValue(Prohibition value) { + this.value = value; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ProhibitionValue that = (ProhibitionValue) o; + return Objects.equals(value, that.value); + } + + @Override + public int hashCode() { + return value.hashCode(); + } + + @Override + public String toString() { + return value.toString(); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/value/ReturnValue.java b/src/main/java/gov/nist/csd/pm/pap/pml/value/ReturnValue.java new file mode 100644 index 000000000..ae3f0282d --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/value/ReturnValue.java @@ -0,0 +1,47 @@ +package gov.nist.csd.pm.pap.pml.value; + +import java.util.Objects; + +public class ReturnValue extends Value{ + + Value value; + + public ReturnValue(Value value) { + super(value.getType()); + + this.value = value; + } + + public Value getValue() { + return value; + } + + @Override + protected Value unwrap() { + return value.unwrap(); + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ReturnValue that = (ReturnValue) o; + return Objects.equals(value, that.value); + } + + @Override + public int hashCode() { + return Objects.hash(value); + } + + @Override + public String toString() { + return "ReturnValue{" + + "value=" + value + + '}'; + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/value/RuleValue.java b/src/main/java/gov/nist/csd/pm/pap/pml/value/RuleValue.java new file mode 100644 index 000000000..cf4acc73d --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/value/RuleValue.java @@ -0,0 +1,47 @@ +package gov.nist.csd.pm.pap.pml.value; + +import gov.nist.csd.pm.pap.obligation.Rule; +import gov.nist.csd.pm.pap.pml.type.Type; + +import java.util.Objects; + +public class RuleValue extends Value { + + private Rule value; + + public RuleValue(Rule value) { + super(Type.any()); + + this.value = value; + } + + public Rule getValue() { + return value; + } + + public void setValue(Rule value) { + this.value = value; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + RuleValue ruleValue = (RuleValue) o; + return Objects.equals(value, ruleValue.value); + } + + @Override + public int hashCode() { + return Objects.hash(value); + } + + @Override + public String toString() { + return value.toString(); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/value/StringValue.java b/src/main/java/gov/nist/csd/pm/pap/pml/value/StringValue.java new file mode 100644 index 000000000..d6728af5c --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/value/StringValue.java @@ -0,0 +1,45 @@ +package gov.nist.csd.pm.pap.pml.value; + +import gov.nist.csd.pm.pap.pml.type.Type; + +import java.util.Objects; + +public class StringValue extends Value { + + private String value; + + public StringValue(String s) { + super(Type.string()); + this.value = s; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + StringValue that = (StringValue) o; + return Objects.equals(value, that.value); + } + + @Override + public int hashCode() { + return Objects.hash(value); + } + + @Override + public String toString() { + return "\"" + value + "\""; + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/value/Value.java b/src/main/java/gov/nist/csd/pm/pap/pml/value/Value.java new file mode 100644 index 000000000..69a9722c7 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/value/Value.java @@ -0,0 +1,145 @@ +package gov.nist.csd.pm.pap.pml.value; + +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import gov.nist.csd.pm.pap.exception.PMRuntimeException; +import gov.nist.csd.pm.pap.obligation.Rule; +import gov.nist.csd.pm.pap.pml.pattern.Pattern; +import gov.nist.csd.pm.pap.pml.type.Type; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public abstract class Value implements Serializable { + + protected Type type; + + public Value(Type type) { + this.type = type; + } + + public Type getType() { + return type; + } + + public String getStringValue() { + return this.unwrap().to(StringValue.class).getValue(); + } + + protected Value unwrap() { + if (this instanceof ReturnValue rv) { + return rv.unwrap(); + } + + return this; + } + + public Boolean getBooleanValue() { + return this.unwrap().to(BoolValue.class).getValue(); + } + + public List getArrayValue() { + return this.unwrap().to(ArrayValue.class).getValue(); + } + + public Map getMapValue() { + return this.unwrap().to(MapValue.class).getValue(); + } + + public Value getProhibitionValue() { + return this.unwrap().to(ProhibitionValue.class).getValue(); + } + + public Rule getRuleValue() { + return this.unwrap().to(RuleValue.class).getValue(); + } + + public Pattern getPatternValue() { + return this.unwrap().to(PatternValue.class).getValue(); + } + + public T to(Class c) { + return c.cast(this); + } + + public Object toObject() { + if (type.isString()) { + return getStringValue(); + } else if (type.isBoolean()) { + return getBooleanValue(); + } else if (type.isArray()) { + List list = new ArrayList<>(); + List arrayValue = getArrayValue(); + for (Value value : arrayValue) { + list.add(value.toObject()); + } + + return list; + } else if (type.isMap()) { + Map map = new HashMap<>(); + Map mapValue = getMapValue(); + for (Map.Entry entry : mapValue.entrySet()) { + map.put(entry.getKey().toObject(), entry.getValue().toObject()); + } + + return map; + } + + throw new PMRuntimeException("cannot convert value of type " + type + " to an object"); + } + + @Override + public abstract boolean equals(Object o); + + @Override + public abstract int hashCode(); + + @Override + public abstract String toString(); + + public static Value fromObject(Object o) { + return switch (o) { + case null -> null; + case Value value -> value; + case String s -> new StringValue(s); + case List list -> toListValue(list); + case Boolean b -> new BoolValue(b); + case Map m -> toMapValue(m); + default -> objToValue(o); + }; + } + + private static ArrayValue toListValue(List list) { + List valueList = new ArrayList<>(); + for (Object arrObj : list) { + valueList.add(fromObject(arrObj)); + } + + return new ArrayValue(valueList, Type.array(Type.any())); + } + + private static MapValue toMapValue(Map m) { + Map map = new HashMap<>(); + for (Object key : m.keySet()) { + map.put(fromObject(key), fromObject(m.get(key))); + } + + return new MapValue(map, Type.string(), Type.any()); + } + + private static MapValue objToValue(Object o) { + Gson gson = new Gson(); + String json = gson.toJson(o); + Map map = gson.fromJson(json, new TypeToken>() {}.getType()); + + Map valueMap = new HashMap<>(); + for (Map.Entry e : map.entrySet()) { + valueMap.put(fromObject(e.getKey()), fromObject(e.getValue())); + } + + return new MapValue(valueMap, Type.string(), Type.any()); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/pml/value/VoidValue.java b/src/main/java/gov/nist/csd/pm/pap/pml/value/VoidValue.java new file mode 100644 index 000000000..215a740aa --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/pml/value/VoidValue.java @@ -0,0 +1,26 @@ +package gov.nist.csd.pm.pap.pml.value; + +import gov.nist.csd.pm.pap.pml.type.Type; + +import java.util.Objects; + +public class VoidValue extends Value { + public VoidValue() { + super(Type.voidType()); + } + + @Override + public boolean equals(Object o) { + return o instanceof VoidValue; + } + + @Override + public int hashCode() { + return Objects.hash(toString()); + } + + @Override + public String toString() { + return "void"; + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/prohibition/ContainerCondition.java b/src/main/java/gov/nist/csd/pm/pap/prohibition/ContainerCondition.java new file mode 100644 index 000000000..d9b6f26be --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/prohibition/ContainerCondition.java @@ -0,0 +1,58 @@ +package gov.nist.csd.pm.pap.prohibition; + +import java.io.Serializable; +import java.util.Objects; + +public class ContainerCondition implements Serializable { + + private String name; + private boolean complement; + + public ContainerCondition() { + } + + public ContainerCondition(String name, boolean complement) { + this.name = name; + this.complement = complement; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isComplement() { + return complement; + } + + public void setComplement(boolean complement) { + this.complement = complement; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ContainerCondition that = (ContainerCondition) o; + return complement == that.complement && Objects.equals(name, that.name); + } + + public int hashCode() { + return name.hashCode(); + } + + @Override + public String toString() { + return "ContainerCondition[" + + "name=" + name + ", " + + "complement=" + complement + ']'; + } + +} diff --git a/src/main/java/gov/nist/csd/pm/policy/model/prohibition/Prohibition.java b/src/main/java/gov/nist/csd/pm/pap/prohibition/Prohibition.java similarity index 52% rename from src/main/java/gov/nist/csd/pm/policy/model/prohibition/Prohibition.java rename to src/main/java/gov/nist/csd/pm/pap/prohibition/Prohibition.java index 2d0148006..b1067c398 100644 --- a/src/main/java/gov/nist/csd/pm/policy/model/prohibition/Prohibition.java +++ b/src/main/java/gov/nist/csd/pm/pap/prohibition/Prohibition.java @@ -1,62 +1,53 @@ -package gov.nist.csd.pm.policy.model.prohibition; +package gov.nist.csd.pm.pap.prohibition; -import gov.nist.csd.pm.policy.model.access.AccessRightSet; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.pml.statement.operation.CreateProhibitionStatement; import java.io.Serializable; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Objects; /** * Object representing a Prohibition. */ public class Prohibition implements Serializable { - private String label; + private String name; private ProhibitionSubject subject; - private List containers; + private Collection containers; private AccessRightSet accessRightSet; private boolean intersection; - public Prohibition() { - - } - - public Prohibition(String label, ProhibitionSubject subject, AccessRightSet accessRightSet, boolean intersection, List containers) { + public Prohibition(String name, ProhibitionSubject subject, AccessRightSet accessRightSet, boolean intersection, + Collection containers) { if (subject == null) { throw new IllegalArgumentException("Prohibition subject cannot be null"); } - this.label = label; + this.name = name; this.subject = subject; - if (containers == null) { - this.containers = new ArrayList<>(); - } else { - this.containers = containers; - } - - if (accessRightSet == null) { - this.accessRightSet = new AccessRightSet(); - } else { - this.accessRightSet = accessRightSet; - } - + this.containers = Objects.requireNonNullElseGet(containers, ArrayList::new); + this.accessRightSet = Objects.requireNonNullElseGet(accessRightSet, AccessRightSet::new); this.intersection = intersection; } public Prohibition(Prohibition prohibition) { - this.label = prohibition.getLabel(); + this.name = prohibition.getName(); this.subject = new ProhibitionSubject(prohibition.getSubject().getName(), prohibition.getSubject().getType()); this.containers = new ArrayList<>(prohibition.containers); this.accessRightSet = new AccessRightSet(prohibition.getAccessRightSet()); this.intersection = prohibition.isIntersection(); } - public String getLabel() { - return label; + public String getName() { + return name; } - public void setLabel(String label) { - this.label = label; + public void setName(String name) { + this.name = name; } public ProhibitionSubject getSubject() { @@ -67,7 +58,7 @@ public void setSubject(ProhibitionSubject subject) { this.subject = subject; } - public List getContainers() { + public Collection getContainers() { return containers; } @@ -91,15 +82,26 @@ public void setIntersection(boolean intersection) { this.intersection = intersection; } + @Override public boolean equals(Object o) { - if (!(o instanceof Prohibition p)) { + if (this == o) { + return true; + } + if (!(o instanceof Prohibition)) { return false; } - - return this.getLabel().equals(p.getLabel()); + Prohibition that = (Prohibition) o; + return intersection == that.intersection && Objects.equals(name, that.name) && Objects.equals( + subject, that.subject) && Objects.equals(containers, that.containers) && Objects.equals( + accessRightSet, that.accessRightSet); } public int hashCode() { - return Objects.hash(label); + return Objects.hash(name); + } + + @Override + public String toString() { + return CreateProhibitionStatement.fromProhibition(this).toString(); } } diff --git a/src/main/java/gov/nist/csd/pm/policy/model/prohibition/ProhibitionSubject.java b/src/main/java/gov/nist/csd/pm/pap/prohibition/ProhibitionSubject.java similarity index 80% rename from src/main/java/gov/nist/csd/pm/policy/model/prohibition/ProhibitionSubject.java rename to src/main/java/gov/nist/csd/pm/pap/prohibition/ProhibitionSubject.java index 4d9bbcf1c..5db74f32e 100644 --- a/src/main/java/gov/nist/csd/pm/policy/model/prohibition/ProhibitionSubject.java +++ b/src/main/java/gov/nist/csd/pm/pap/prohibition/ProhibitionSubject.java @@ -1,6 +1,6 @@ -package gov.nist.csd.pm.policy.model.prohibition; +package gov.nist.csd.pm.pap.prohibition; -import gov.nist.csd.pm.policy.exceptions.InvalidProhibitionSubjectException; +import gov.nist.csd.pm.pap.exception.InvalidProhibitionSubjectException; import java.io.Serializable; import java.util.Objects; @@ -74,13 +74,20 @@ private Type typeFromString(String s) throws InvalidProhibitionSubjectException @Override public boolean equals(Object o) { if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - ProhibitionSubject that = (ProhibitionSubject) o; - return Objects.equals(name, that.name) && type == that.type; + if (!(o instanceof ProhibitionSubject subject)) return false; + return Objects.equals(name, subject.name) && type == subject.type; } @Override public int hashCode() { return Objects.hash(name, type); } + + @Override + public String toString() { + return "ProhibitionSubject{" + + "name='" + name + '\'' + + ", type=" + type + + '}'; + } } diff --git a/src/main/java/gov/nist/csd/pm/pap/query/AccessQuerier.java b/src/main/java/gov/nist/csd/pm/pap/query/AccessQuerier.java new file mode 100644 index 000000000..de4a59e3e --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/query/AccessQuerier.java @@ -0,0 +1,14 @@ +package gov.nist.csd.pm.pap.query; + +import gov.nist.csd.pm.pap.store.PolicyStore; + +public abstract class AccessQuerier extends Querier implements AccessQuery{ + + public AccessQuerier(PolicyStore store) { + super(store); + } + + public AccessQuerier(Querier querier) { + super(querier); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/query/AccessQuery.java b/src/main/java/gov/nist/csd/pm/pap/query/AccessQuery.java new file mode 100644 index 000000000..82e6456ee --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/query/AccessQuery.java @@ -0,0 +1,25 @@ +package gov.nist.csd.pm.pap.query; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.query.explain.Explain; + +import java.util.Collection; +import java.util.Map; +import java.util.Set; + +public interface AccessQuery { + + AccessRightSet computePrivileges(UserContext userCtx, String target) throws PMException; + AccessRightSet computeDeniedPrivileges(UserContext userCtx, String target) throws PMException; + Map computePolicyClassAccessRights(UserContext userContext, String target) throws PMException; + Map computeCapabilityList(UserContext userCtx) throws PMException; + Map computeACL(String target) throws PMException; + Map computeDestinationAttributes(String user) throws PMException; + Map computeAscendantPrivileges(UserContext userCtx, String root) throws PMException; + Explain explain(UserContext userCtx, String target) throws PMException; + Set computePersonalObjectSystem(UserContext userCtx) throws PMException; + Collection computeAccessibleAscendants(UserContext userCtx, String root) throws PMException; + Collection computeAccessibleDescendants(UserContext userCtx, String root) throws PMException; + +} diff --git a/src/main/java/gov/nist/csd/pm/pdp/PolicyReviewer.java b/src/main/java/gov/nist/csd/pm/pap/query/AccessRightResolver.java similarity index 50% rename from src/main/java/gov/nist/csd/pm/pdp/PolicyReviewer.java rename to src/main/java/gov/nist/csd/pm/pap/query/AccessRightResolver.java index d4eeb4023..8394de47a 100644 --- a/src/main/java/gov/nist/csd/pm/pdp/PolicyReviewer.java +++ b/src/main/java/gov/nist/csd/pm/pap/query/AccessRightResolver.java @@ -1,44 +1,71 @@ -package gov.nist.csd.pm.pdp; +package gov.nist.csd.pm.pap.query; -import gov.nist.csd.pm.policy.model.graph.dag.TargetDagResult; -import gov.nist.csd.pm.policy.model.graph.dag.UserDagResult; -import gov.nist.csd.pm.policy.model.access.AccessRightSet; -import gov.nist.csd.pm.policy.model.prohibition.ContainerCondition; -import gov.nist.csd.pm.policy.model.prohibition.Prohibition; +import gov.nist.csd.pm.pap.graph.dag.TargetDagResult; +import gov.nist.csd.pm.pap.graph.dag.UserDagResult; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.prohibition.ContainerCondition; +import gov.nist.csd.pm.pap.prohibition.Prohibition; import java.util.*; -import gov.nist.csd.pm.policy.review.PolicyReview; +import static gov.nist.csd.pm.pap.op.AdminAccessRights.*; +import static gov.nist.csd.pm.pap.op.AdminAccessRights.ALL_RESOURCE_ACCESS_RIGHTS; -import static gov.nist.csd.pm.policy.model.access.AdminAccessRights.*; +public class AccessRightResolver { -public abstract class PolicyReviewer implements PolicyReview { + private AccessRightResolver() {} - public AccessRightSet resolvePermissions(UserDagResult userContext, TargetDagResult targetCtx, String target, AccessRightSet resourceOps) { - AccessRightSet allowed = resolveAllowedPermissions(targetCtx.pcSet(), resourceOps); + public static AccessRightSet resolvePrivileges(UserDagResult userCtx, TargetDagResult targetCtx, String target, AccessRightSet resourceOps) { + Map resolvedPcMap = new HashMap<>(); + for (Map.Entry pc : targetCtx.pcSet().entrySet()) { + AccessRightSet pcOps = pc.getValue(); - // remove any prohibited operations - Set denied = resolveProhibitions(userContext, targetCtx, target); - allowed.removeAll(denied); + // replace instances of *, *a or *r with the literal access rights + resolveWildcardAccessRights(pcOps, resourceOps); - return allowed; + resolvedPcMap.put(pc.getKey(), pcOps); + } + + AccessRightSet result = resolvePolicyClassAccessRightSets(resolvedPcMap); + + // remove any prohibited access rights + AccessRightSet denied = resolveDeniedAccessRights(userCtx, targetCtx, target); + result.removeAll(denied); + + return result; } - public AccessRightSet resolveAllowedPermissions(Map pcMap, AccessRightSet resourceOps) { - Map resolvedPcMap = new HashMap<>(); - for (Map.Entry pc : pcMap.entrySet()) { - AccessRightSet pcOps = pc.getValue(); + public static AccessRightSet resolveDeniedAccessRights(UserDagResult userCtx, TargetDagResult targetCtx, String target) { + AccessRightSet denied = new AccessRightSet(); + Set prohibitions = userCtx.prohibitions(); + Set reachedTargets = targetCtx.reachedTargets(); - // replace instances of *, *a or *r with the literal operations - resolveSpecialPermissions(pcOps, resourceOps); + for(Prohibition p : prohibitions) { + if (isProhibitionSatisfied(p, reachedTargets, target)) { + denied.addAll(p.getAccessRightSet()); + } + } - resolvedPcMap.put(pc.getKey(), pcOps); + return denied; + } + + public static List computeSatisfiedProhibitions(UserDagResult userDagResult, TargetDagResult targetDagResult, + String target) { + List satisfied = new ArrayList<>(); + + Set prohibitions = userDagResult.prohibitions(); + Set reachedTargets = targetDagResult.reachedTargets(); + + for(Prohibition p : prohibitions) { + if (isProhibitionSatisfied(p, reachedTargets, target)) { + satisfied.add(p); + } } - return resolvePolicyClassOperationSets(resolvedPcMap); + return satisfied; } - public AccessRightSet resolvePolicyClassOperationSets(Map pcMap) { + private static AccessRightSet resolvePolicyClassAccessRightSets(Map pcMap) { // retain only the ops that the decider knows about AccessRightSet allowed = new AccessRightSet(); boolean first = true; @@ -60,46 +87,33 @@ public AccessRightSet resolvePolicyClassOperationSets(Map prohibitions = userCtx.prohibitions(); - Set reachedTargets = targetCtx.reachedTargets(); - - for(Prohibition p : prohibitions) { - if (isProhibitionSatisfied(p, reachedTargets, target)) { - denied.addAll(p.getAccessRightSet()); + if (accessRightSet.contains(ALL_RESOURCE_ACCESS_RIGHTS)) { + accessRightSet.remove(ALL_RESOURCE_ACCESS_RIGHTS); + accessRightSet.addAll(resourceOps); } } - return denied; } - private boolean isProhibitionSatisfied(Prohibition prohibition, Set reachedTargets, String target) { + private static boolean isProhibitionSatisfied(Prohibition prohibition, Set reachedTargets, String target) { boolean inter = prohibition.isIntersection(); - List containers = prohibition.getContainers(); + Collection containers = prohibition.getContainers(); boolean addOps = false; for (ContainerCondition containerCondition : containers) { - String contName = containerCondition.name(); - boolean isComplement = containerCondition.complement(); + String contName = containerCondition.getName(); + boolean isComplement = containerCondition.isComplement(); if (target.equals(contName)) { // if the prohibition is UNION and the target is the container then the prohibition is satisfied @@ -134,4 +148,5 @@ private boolean isProhibitionSatisfied(Prohibition prohibition, Set reac return addOps; } + } diff --git a/src/main/java/gov/nist/csd/pm/pap/query/GraphQuerier.java b/src/main/java/gov/nist/csd/pm/pap/query/GraphQuerier.java new file mode 100644 index 000000000..c58e160d6 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/query/GraphQuerier.java @@ -0,0 +1,115 @@ +package gov.nist.csd.pm.pap.query; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.node.Node; +import gov.nist.csd.pm.pap.graph.node.NodeType; +import gov.nist.csd.pm.pap.graph.relationship.Association; +import gov.nist.csd.pm.pap.exception.NodeDoesNotExistException; +import gov.nist.csd.pm.pap.store.PolicyStore; + +import java.util.Collection; +import java.util.Map; + +public class GraphQuerier extends Querier implements GraphQuery{ + + public GraphQuerier(PolicyStore store) { + super(store); + } + + public GraphQuerier(Querier querier) { + this(querier.store); + } + + @Override + public Node getNode(String name) throws PMException { + checkNodeExists(name); + return store.graph().getNode(name); + } + + @Override + public Collection getAdjacentDescendants(String node) throws PMException { + checkNodeExists(node); + return store.graph().getAdjacentDescendants(node); + } + + @Override + public Collection getAdjacentAscendants(String node) throws PMException { + checkNodeExists(node); + return store.graph().getAdjacentAscendants(node); + } + + @Override + public Collection getAssociationsWithSource(String ua) throws PMException { + checkNodeExists(ua); + return store.graph().getAssociationsWithSource(ua); + } + + @Override + public Collection getAssociationsWithTarget(String target) throws PMException { + checkNodeExists(target); + return store.graph().getAssociationsWithTarget(target); + } + + @Override + public Collection getAttributeDescendants(String node) throws PMException { + checkNodeExists(node); + return store.graph().getAttributeDescendants(node); + } + + @Override + public Collection getPolicyClassDescendants(String node) throws PMException { + checkNodeExists(node); + return store.graph().getPolicyClassDescendants(node); + } + + @Override + public boolean isAscendant(String ascendant, String descendant) throws PMException { + checkNodeExists(ascendant); + checkNodeExists(descendant); + return store.graph().isAscendant(ascendant, descendant); + } + + @Override + public boolean isDescendant(String ascendant, String descendant) throws PMException { + checkNodeExists(ascendant); + checkNodeExists(descendant); + return store.graph().isDescendant(ascendant, descendant); + } + + @Override + public boolean nodeExists(String name) throws PMException { + return store.graph().nodeExists(name); + } + + @Override + public Collection search(NodeType type, Map properties) throws PMException { + return store.graph().search(type, properties); + } + + @Override + public Collection getPolicyClasses() throws PMException { + return store.graph().getPolicyClasses(); + } + + @Override + public Collection getAscendants(String node) throws PMException { + checkNodeExists(node); + return store.graph().getAscendants(node); + } + + @Override + public Collection getDescendants(String node) throws PMException { + checkNodeExists(node); + return store.graph().getDescendants(node); + } + + /** + * Check that the given nodes exists. + * @param node The node to check. + */ + protected void checkNodeExists(String node) throws PMException { + if (!store.graph().nodeExists(node)) { + throw new NodeDoesNotExistException(node); + } + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/query/GraphQuery.java b/src/main/java/gov/nist/csd/pm/pap/query/GraphQuery.java new file mode 100644 index 000000000..8c356dd8a --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/query/GraphQuery.java @@ -0,0 +1,140 @@ +package gov.nist.csd.pm.pap.query; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.node.Node; +import gov.nist.csd.pm.pap.graph.node.NodeType; +import gov.nist.csd.pm.pap.graph.relationship.Association; + +import java.util.Collection; +import java.util.Map; + +public interface GraphQuery { + + /** + * Check if a node exists in the graph. + * + * @param name The name of the node to check for. + * @return True if the node exists, false otherwise. + * @throws PMException If any PM related exceptions occur in the implementing class. + */ + boolean nodeExists(String name) throws PMException; + + /** + * Get the Node object associated with the given name. + * + * @param name The name of the node to get. + * @return The Node with the given name. + * @throws PMException If any PM related exceptions occur in the implementing class. + */ + Node getNode(String name) throws PMException; + + /** + * Search for nodes with the given type and/or properties. To return all nodes, use type=NodeType.ANY and properties=new HashMap<>(). + *

+ * Supports wildcard property values i.e. {"prop1": "*"} which will match any nodes with the "prop1" property key. + * + * @param type The type of nodes to search for. Use NodeType.ANY to search for any node type. + * @param properties The properties of nodes to search for. An empty map will match all nodes. + * @return The nodes that match the type and property criteria. + * @throws PMException If any PM related exceptions occur in the implementing class. + */ + Collection search(NodeType type, Map properties) throws PMException; + + /** + * Get all policy class names. + * + * @return The names of all policy classes. + * @throws PMException If any PM related exceptions occur in the implementing class. + */ + Collection getPolicyClasses() throws PMException; + + /** + * Get the adjacent descendants of the given node. + * + * @param node The node to get the descendants of. + * @return The names of the descendants of the given node. + * @throws PMException If any PM related exceptions occur in the implementing class. + */ + Collection getAdjacentDescendants(String node) throws PMException; + + /** + * Get the adjacent ascendants of the given node. + * + * @param node The node to get the ascendants of. + * @return The names of the ascendants of the given node. + * @throws PMException If any PM related exceptions occur in the implementing class. + */ + Collection getAdjacentAscendants(String node) throws PMException; + + /** + * Get the associations in which the given user attribute is the source. + * + * @param ua The user attribute to get the associations for. + * @return The associations in which the source of the relation is the given user attribute. + * @throws PMException If any PM related exceptions occur in the implementing class. + */ + Collection getAssociationsWithSource(String ua) throws PMException; + + /** + * Get the associations in which the given node is the target. + * + * @param target The target attribute to get the associations for. + * @return The associations in which the target of the relation is the given node. + * @throws PMException If any PM related exceptions occur in the implementing class. + */ + Collection getAssociationsWithTarget(String target) throws PMException; + + /** + * Get all ascendants of the node in no particular order. + * @param node The node to get the ascendants for. + * @return The ascendants of the given node. + * @throws PMException If any PM related exceptions occur in the implementing class. + */ + Collection getAscendants(String node) throws PMException; + + /** + * Get all descendants of the node in no particular order. + * @param node The node to get the descendants for. + * @return The descendants of the given node. + * @throws PMException If any PM related exceptions occur in the implementing class. + */ + Collection getDescendants(String node) throws PMException; + + /** + * Get the descendants of the given node that are attributes. + * + * @param node The node to get the attribute descendants of. + * @return A Collection of attribute names. + * @throws PMException If any PM related exceptions occur in the implementing class. + */ + Collection getAttributeDescendants(String node) throws PMException; + + /** + * Get the descendants of the given node that are policy classes. + * + * @param node The node to get the policy class descendants of. + * @return A Collection of policy class names. + * @throws PMException If any PM related exceptions occur in the implementing class. + */ + Collection getPolicyClassDescendants(String node) throws PMException; + + /** + * Return true if the ascendant is an ascendant of the descendant. + * + * @param ascendant The ascendant. + * @param descendant The descendant. + * @return True if the ascendant is an ascendant of the descendant. + * @throws PMException If any PM related exceptions occur in the implementing class. + */ + boolean isAscendant(String ascendant, String descendant) throws PMException; + + /** + * Return true if the descendant is a descendant of the ascendant. + * + * @param ascendant The ascendant. + * @param descendant The descendant. + * @return True if the descendant is a descendant of the ascendant. + * @throws PMException If any PM related exceptions occur in the implementing class. + */ + boolean isDescendant(String ascendant, String descendant) throws PMException; +} diff --git a/src/main/java/gov/nist/csd/pm/pap/query/ObligationsQuerier.java b/src/main/java/gov/nist/csd/pm/pap/query/ObligationsQuerier.java new file mode 100644 index 000000000..638fd6857 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/query/ObligationsQuerier.java @@ -0,0 +1,53 @@ +package gov.nist.csd.pm.pap.query; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.obligation.Obligation; +import gov.nist.csd.pm.pap.exception.ObligationDoesNotExistException; +import gov.nist.csd.pm.pap.store.PolicyStore; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +public class ObligationsQuerier extends Querier implements ObligationsQuery{ + + public ObligationsQuerier(PolicyStore store) { + super(store); + } + + public ObligationsQuerier(Querier querier) { + super(querier); + } + + @Override + public Obligation getObligation(String name) throws PMException { + if (!obligationExists(name)) { + throw new ObligationDoesNotExistException(name); + } + + return store.obligations().getObligation(name); + } + + @Override + public Collection getObligations() throws PMException { + return store.obligations().getObligations(); + } + + @Override + public boolean obligationExists(String name) throws PMException { + return store.obligations().obligationExists(name); + } + + @Override + public Collection getObligationsWithAuthor(String author) throws PMException { + Collection obligations = store.obligations().getObligations(); + List withAuthor = new ArrayList<>(); + for (Obligation obligation : obligations) { + if(obligation.getAuthor().equals(author)) { + withAuthor.add(obligation); + } + } + + return withAuthor; + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/query/ObligationsQuery.java b/src/main/java/gov/nist/csd/pm/pap/query/ObligationsQuery.java new file mode 100644 index 000000000..5b72cc9d5 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/query/ObligationsQuery.java @@ -0,0 +1,45 @@ +package gov.nist.csd.pm.pap.query; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.obligation.Obligation; + +import java.util.Collection; + +public interface ObligationsQuery { + + /** + * Get all obligations. + * + * @return All obligations. + * @throws PMException If any PM related exceptions occur in the implementing class. + */ + Collection getObligations() throws PMException; + + /** + * Check if an obligation exists with the given name. + * + * @param name The obligation to check. + * @return True if the obligation exists with the given name, false otherwise. + * @throws PMException If any PM related exceptions occur in the implementing class. + */ + boolean obligationExists(String name) throws PMException; + + /** + * Get the obligation associated with the given name. + * + * @param name The name of the obligation to get. + * @return The obligation object associated with the given name. + * @throws PMException If any PM related exceptions occur in the implementing class. + */ + Obligation getObligation(String name) throws PMException; + + /** + * Get the obligations created by the given author. + * + * @param user The user context representing the author to search for. + * @return A list of Obligation objects. + * @throws PMException If any PM related exceptions occur in the implementing class. + */ + Collection getObligationsWithAuthor(String user) throws PMException; + +} diff --git a/src/main/java/gov/nist/csd/pm/pap/query/OperationsQuerier.java b/src/main/java/gov/nist/csd/pm/pap/query/OperationsQuerier.java new file mode 100644 index 000000000..8432e8c09 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/query/OperationsQuerier.java @@ -0,0 +1,39 @@ +package gov.nist.csd.pm.pap.query; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.exception.OperationDoesNotExistException; +import gov.nist.csd.pm.pap.op.Operation; +import gov.nist.csd.pm.pap.store.PolicyStore; + +import java.util.*; + +public class OperationsQuerier extends Querier implements OperationsQuery{ + + public OperationsQuerier(PolicyStore store) { + super(store); + } + + public OperationsQuerier(Querier querier) { + super(querier); + } + + @Override + public AccessRightSet getResourceOperations() throws PMException { + return store.operations().getResourceOperations(); + } + + @Override + public Collection getAdminOperationNames() throws PMException { + return store.operations().getAdminOperationNames(); + } + + @Override + public Operation getAdminOperation(String operationName) throws PMException { + if (!store.operations().getAdminOperationNames().contains(operationName)) { + throw new OperationDoesNotExistException(operationName); + } + + return store.operations().getAdminOperation(operationName); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/query/OperationsQuery.java b/src/main/java/gov/nist/csd/pm/pap/query/OperationsQuery.java new file mode 100644 index 000000000..68e69cc65 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/query/OperationsQuery.java @@ -0,0 +1,15 @@ +package gov.nist.csd.pm.pap.query; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.op.Operation; + +import java.util.Collection; + +public interface OperationsQuery { + + AccessRightSet getResourceOperations() throws PMException; + Collection getAdminOperationNames() throws PMException; + Operation getAdminOperation(String operationName) throws PMException; + +} diff --git a/src/main/java/gov/nist/csd/pm/pap/query/PolicyQuerier.java b/src/main/java/gov/nist/csd/pm/pap/query/PolicyQuerier.java new file mode 100644 index 000000000..8b0c36fdf --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/query/PolicyQuerier.java @@ -0,0 +1,54 @@ +package gov.nist.csd.pm.pap.query; + +import gov.nist.csd.pm.pap.store.PolicyStore; + +public abstract class PolicyQuerier extends Querier implements PolicyQuery { + + private final GraphQuerier graphQuerier; + private final ProhibitionsQuerier prohibitionsQuerier; + private final ObligationsQuerier obligationsQuerier; + private final OperationsQuerier operationsQuerier; + private final RoutinesQuerier routinesQuerier; + + public PolicyQuerier(PolicyStore store) { + super(store); + + this.graphQuerier = new GraphQuerier(store); + this.prohibitionsQuerier = new ProhibitionsQuerier(store, graphQuerier); + this.obligationsQuerier = new ObligationsQuerier(store); + this.operationsQuerier = new OperationsQuerier(store); + this.routinesQuerier = new RoutinesQuerier(store); + } + + public PolicyQuerier(Querier querier) { + this(querier.store); + } + + @Override + public abstract AccessQuerier access(); + + @Override + public GraphQuerier graph() { + return graphQuerier; + } + + @Override + public ProhibitionsQuerier prohibitions() { + return prohibitionsQuerier; + } + + @Override + public ObligationsQuerier obligations() { + return obligationsQuerier; + } + + @Override + public OperationsQuerier operations() { + return operationsQuerier; + } + + @Override + public RoutinesQuerier routines() { + return routinesQuerier; + } +} \ No newline at end of file diff --git a/src/main/java/gov/nist/csd/pm/pap/query/PolicyQuery.java b/src/main/java/gov/nist/csd/pm/pap/query/PolicyQuery.java new file mode 100644 index 000000000..75290abb8 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/query/PolicyQuery.java @@ -0,0 +1,11 @@ +package gov.nist.csd.pm.pap.query; + +public interface PolicyQuery { + + AccessQuery access(); + GraphQuery graph(); + ProhibitionsQuery prohibitions(); + ObligationsQuery obligations(); + OperationsQuery operations(); + RoutinesQuery routines(); +} diff --git a/src/main/java/gov/nist/csd/pm/pap/query/ProhibitionsQuerier.java b/src/main/java/gov/nist/csd/pm/pap/query/ProhibitionsQuerier.java new file mode 100644 index 000000000..867239e98 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/query/ProhibitionsQuerier.java @@ -0,0 +1,81 @@ +package gov.nist.csd.pm.pap.query; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.dag.DepthFirstGraphWalker; +import gov.nist.csd.pm.pap.graph.dag.Direction; +import gov.nist.csd.pm.pap.prohibition.ContainerCondition; +import gov.nist.csd.pm.pap.prohibition.Prohibition; +import gov.nist.csd.pm.pap.exception.ProhibitionDoesNotExistException; +import gov.nist.csd.pm.pap.store.PolicyStore; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +public class ProhibitionsQuerier extends Querier implements ProhibitionsQuery { + + private GraphQuerier graphQuerier; + + public ProhibitionsQuerier(PolicyStore store, GraphQuerier graphQuerier) { + super(store); + + this.graphQuerier = graphQuerier; + } + + public ProhibitionsQuerier(Querier querier) { + super(querier); + } + + @Override + public Map> getProhibitions() throws PMException { + return store.prohibitions().getProhibitions(); + } + + @Override + public Collection getProhibitionsWithSubject(String subject) throws PMException { + return store.prohibitions().getProhibitions().getOrDefault(subject, new ArrayList<>()); + } + + @Override + public Prohibition getProhibition(String name) throws PMException { + if (!store.prohibitions().prohibitionExists(name)) { + throw new ProhibitionDoesNotExistException(name); + } + + return store.prohibitions().getProhibition(name); + } + + @Override + public Collection getInheritedProhibitionsFor(String subject) throws PMException { + List pros = new ArrayList<>(); + + new DepthFirstGraphWalker(graphQuerier) + .withVisitor((n) -> { + pros.addAll(getProhibitionsWithSubject(n)); + }) + .withDirection(Direction.DESCENDANTS) + .walk(subject); + + return pros; + } + + @Override + public Collection getProhibitionsWithContainer(String container) throws PMException { + Collection pros = new ArrayList<>(); + + Map> prohibitions = getProhibitions(); + for (String subject : prohibitions.keySet()) { + Collection subjectProhibitions = prohibitions.get(subject); + for (Prohibition prohibition : subjectProhibitions) { + for (ContainerCondition cc : prohibition.getContainers()) { + if (cc.getName().equals(container)) { + pros.add(prohibition); + } + } + } + } + + return pros; + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/query/ProhibitionsQuery.java b/src/main/java/gov/nist/csd/pm/pap/query/ProhibitionsQuery.java new file mode 100644 index 000000000..d4933a702 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/query/ProhibitionsQuery.java @@ -0,0 +1,39 @@ +package gov.nist.csd.pm.pap.query; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.prohibition.Prohibition; + +import java.util.Collection; +import java.util.Map; + +public interface ProhibitionsQuery { + + /** + * Get all prohibitions. + * + * @return All prohibitions. + * @throws PMException If any PM related exceptions occur in the implementing class. + */ + Map> getProhibitions() throws PMException; + + /** + * Get prohibitions with the given subject. + * + * @param subject The subject to get the prohibitions for (user, user attribute, process) + * @return The prohibitions with the given subject. + * @throws PMException If any PM related exceptions occur in the implementing class. + */ + Collection getProhibitionsWithSubject(String subject) throws PMException; + + /** + * Get the prohibition with the given name. + * @param name The public abstract of the prohibition to get. + * @return The prohibition with the given public abstract. + * @throws PMException If any PM related exceptions occur in the implementing class. + */ + Prohibition getProhibition(String name) throws PMException; + + Collection getInheritedProhibitionsFor(String subject) throws PMException; + Collection getProhibitionsWithContainer(String container) throws PMException; + +} diff --git a/src/main/java/gov/nist/csd/pm/pap/query/Querier.java b/src/main/java/gov/nist/csd/pm/pap/query/Querier.java new file mode 100644 index 000000000..0e75c850a --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/query/Querier.java @@ -0,0 +1,16 @@ +package gov.nist.csd.pm.pap.query; + +import gov.nist.csd.pm.pap.store.PolicyStore; + +public abstract class Querier { + + protected PolicyStore store; + + public Querier(PolicyStore store) { + this.store = store; + } + + public Querier(Querier querier) { + this(querier.store); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/query/RoutinesQuerier.java b/src/main/java/gov/nist/csd/pm/pap/query/RoutinesQuerier.java new file mode 100644 index 000000000..0315d616c --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/query/RoutinesQuerier.java @@ -0,0 +1,33 @@ +package gov.nist.csd.pm.pap.query; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.exception.RoutineDoesNotExistException; +import gov.nist.csd.pm.pap.routine.Routine; +import gov.nist.csd.pm.pap.store.PolicyStore; + +import java.util.*; + +public class RoutinesQuerier extends Querier implements RoutinesQuery { + + public RoutinesQuerier(PolicyStore store) { + super(store); + } + + public RoutinesQuerier(Querier querier) { + super(querier); + } + + @Override + public Collection getAdminRoutineNames() throws PMException { + return store.routines().getAdminRoutineNames(); + } + + @Override + public Routine getAdminRoutine(String routineName) throws PMException { + if (!store.routines().getAdminRoutineNames().contains(routineName)) { + throw new RoutineDoesNotExistException(routineName); + } + + return store.routines().getAdminRoutine(routineName); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/query/RoutinesQuery.java b/src/main/java/gov/nist/csd/pm/pap/query/RoutinesQuery.java new file mode 100644 index 000000000..7f0bafbfe --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/query/RoutinesQuery.java @@ -0,0 +1,13 @@ +package gov.nist.csd.pm.pap.query; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.routine.Routine; + +import java.util.Collection; + +public interface RoutinesQuery { + + Collection getAdminRoutineNames() throws PMException; + Routine getAdminRoutine(String routineName) throws PMException; + +} diff --git a/src/main/java/gov/nist/csd/pm/policy/model/access/UserContext.java b/src/main/java/gov/nist/csd/pm/pap/query/UserContext.java similarity index 96% rename from src/main/java/gov/nist/csd/pm/policy/model/access/UserContext.java rename to src/main/java/gov/nist/csd/pm/pap/query/UserContext.java index d4c8ecb43..1fa972fa2 100644 --- a/src/main/java/gov/nist/csd/pm/policy/model/access/UserContext.java +++ b/src/main/java/gov/nist/csd/pm/pap/query/UserContext.java @@ -1,4 +1,4 @@ -package gov.nist.csd.pm.policy.model.access; +package gov.nist.csd.pm.pap.query; import java.io.Serializable; import java.util.Objects; diff --git a/src/main/java/gov/nist/csd/pm/policy/model/audit/EdgePath.java b/src/main/java/gov/nist/csd/pm/pap/query/explain/EdgePath.java similarity index 87% rename from src/main/java/gov/nist/csd/pm/policy/model/audit/EdgePath.java rename to src/main/java/gov/nist/csd/pm/pap/query/explain/EdgePath.java index 0ad5f3505..c2380791d 100644 --- a/src/main/java/gov/nist/csd/pm/policy/model/audit/EdgePath.java +++ b/src/main/java/gov/nist/csd/pm/pap/query/explain/EdgePath.java @@ -1,6 +1,6 @@ -package gov.nist.csd.pm.policy.model.audit; +package gov.nist.csd.pm.pap.query.explain; -import gov.nist.csd.pm.policy.model.graph.relationships.Relationship; +import gov.nist.csd.pm.pap.graph.relationship.Relationship; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/gov/nist/csd/pm/pap/query/explain/Explain.java b/src/main/java/gov/nist/csd/pm/pap/query/explain/Explain.java new file mode 100644 index 000000000..299072687 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/query/explain/Explain.java @@ -0,0 +1,115 @@ +package gov.nist.csd.pm.pap.query.explain; + +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.prohibition.Prohibition; + +import java.util.*; + +public class Explain { + private AccessRightSet privileges; + private Map policyClasses; + private AccessRightSet deniedPrivileges; + private List prohibitions; + + public Explain() { + privileges = new AccessRightSet(); + policyClasses = new HashMap<>(); + deniedPrivileges = new AccessRightSet(); + prohibitions = new ArrayList<>(); + } + + public Explain(AccessRightSet privileges, Map policyClasses) { + this.privileges = privileges; + this.policyClasses = policyClasses; + } + + public Explain(AccessRightSet privileges, Map policyClasses, AccessRightSet deniedPrivileges, + List prohibitions) { + this.privileges = privileges; + this.policyClasses = policyClasses; + this.deniedPrivileges = deniedPrivileges; + this.prohibitions = prohibitions; + } + + public AccessRightSet getPrivileges() { + return privileges; + } + + public void setPrivileges(AccessRightSet privileges) { + this.privileges = privileges; + } + + public Map getPolicyClasses() { + return policyClasses; + } + + public void setPolicyClasses(Map policyClasses) { + this.policyClasses = policyClasses; + } + + public AccessRightSet getDeniedPrivileges() { + return deniedPrivileges; + } + + public void setDeniedPrivileges(AccessRightSet deniedPrivileges) { + this.deniedPrivileges = deniedPrivileges; + } + + public List getProhibitions() { + return prohibitions; + } + + public void setProhibitions(List prohibitions) { + this.prohibitions = prohibitions; + } + + @Override + public String toString() { + StringBuilder str = new StringBuilder("Privileges: " + privileges.toString()); + str.append("\nDenied: ").append(deniedPrivileges); + + for (String pc : policyClasses.keySet()) { + PolicyClassExplain policyClass = policyClasses.get(pc); + str.append("\n\t\t").append(pc).append(": ").append(policyClass.getArset()); + } + + str.append("\nPaths:"); + for (String pc : policyClasses.keySet()) { + PolicyClassExplain policyClass = policyClasses.get(pc); + str.append("\n\t\t").append(pc).append(": ").append(policyClass.getArset()); + Set paths = policyClass.getPaths(); + for (Path path : paths) { + str.append("\n\t\t\t- ").append(path); + } + } + + if (!deniedPrivileges.isEmpty()) { + str.append("\nProhibitions:"); + for (Prohibition p : prohibitions) { + str.append("\n- ").append(p); + } + } + + return str.toString(); + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Explain explain = (Explain) o; + return Objects.equals(privileges, explain.privileges) && Objects.equals( + policyClasses, explain.policyClasses) && Objects.equals( + deniedPrivileges, explain.deniedPrivileges) && Objects.equals( + prohibitions, explain.prohibitions); + } + + @Override + public int hashCode() { + return Objects.hash(privileges, policyClasses, deniedPrivileges, prohibitions); + } +} diff --git a/src/main/java/gov/nist/csd/pm/policy/model/audit/Path.java b/src/main/java/gov/nist/csd/pm/pap/query/explain/Path.java similarity index 67% rename from src/main/java/gov/nist/csd/pm/policy/model/audit/Path.java rename to src/main/java/gov/nist/csd/pm/pap/query/explain/Path.java index 23055a16a..98b059d70 100644 --- a/src/main/java/gov/nist/csd/pm/policy/model/audit/Path.java +++ b/src/main/java/gov/nist/csd/pm/pap/query/explain/Path.java @@ -1,6 +1,6 @@ -package gov.nist.csd.pm.policy.model.audit; +package gov.nist.csd.pm.pap.query.explain; -import gov.nist.csd.pm.policy.model.graph.relationships.Association; +import gov.nist.csd.pm.pap.graph.relationship.Association; import java.util.ArrayList; import java.util.List; @@ -47,19 +47,30 @@ public void setAssociation(Association association) { this.association = association; } + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Path path = (Path) o; + return Objects.equals(userDagPath, path.userDagPath) && Objects.equals( + targetDagPath, path.targetDagPath) && Objects.equals(association, path.association); + } + @Override public int hashCode() { return Objects.hash(userDagPath, targetDagPath, association); } @Override - public boolean equals(Object o) { - if (!(o instanceof Path)) { - return false; - } - - Path p = (Path)o; - return this.userDagPath.equals(p.userDagPath) && this.targetDagPath.equals(p.targetDagPath) - && this.association.equals(p.association); + public String toString() { + return "{" + + "userPath=" + userDagPath + + ", targetPath=" + targetDagPath + + ", association=" + association + + '}'; } } diff --git a/src/main/java/gov/nist/csd/pm/pap/query/explain/PolicyClassExplain.java b/src/main/java/gov/nist/csd/pm/pap/query/explain/PolicyClassExplain.java new file mode 100644 index 000000000..745f0df26 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/query/explain/PolicyClassExplain.java @@ -0,0 +1,56 @@ +package gov.nist.csd.pm.pap.query.explain; + +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; + +import java.util.HashSet; +import java.util.Objects; +import java.util.Set; + +public class PolicyClassExplain { + + private AccessRightSet arset; + private Set paths; + + public PolicyClassExplain() { + arset = new AccessRightSet(); + paths = new HashSet<>(); + } + + public PolicyClassExplain(AccessRightSet arset, Set paths) { + this.arset = arset; + this.paths = paths; + } + + public AccessRightSet getArset() { + return arset; + } + + public void setArset(AccessRightSet arset) { + this.arset = arset; + } + + public Set getPaths() { + return paths; + } + + public void setPaths(Set paths) { + this.paths = paths; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + PolicyClassExplain that = (PolicyClassExplain) o; + return Objects.equals(arset, that.arset) && Objects.equals(paths, that.paths); + } + + @Override + public int hashCode() { + return Objects.hash(arset, paths); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/routine/Routine.java b/src/main/java/gov/nist/csd/pm/pap/routine/Routine.java new file mode 100644 index 000000000..64f56a078 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/routine/Routine.java @@ -0,0 +1,12 @@ +package gov.nist.csd.pm.pap.routine; + +import gov.nist.csd.pm.pap.executable.AdminExecutable; + +import java.util.List; + +public abstract class Routine extends AdminExecutable { + + public Routine(String name, List operandNames) { + super(name, operandNames); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/serialization/PolicyDeserializer.java b/src/main/java/gov/nist/csd/pm/pap/serialization/PolicyDeserializer.java new file mode 100644 index 000000000..6e7a33a40 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/serialization/PolicyDeserializer.java @@ -0,0 +1,11 @@ +package gov.nist.csd.pm.pap.serialization; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.query.UserContext; + +public interface PolicyDeserializer { + + void deserialize(PAP pap, UserContext author, String input) throws PMException; + +} diff --git a/src/main/java/gov/nist/csd/pm/pap/serialization/PolicySerializer.java b/src/main/java/gov/nist/csd/pm/pap/serialization/PolicySerializer.java new file mode 100644 index 000000000..8ef8f5b5f --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/serialization/PolicySerializer.java @@ -0,0 +1,10 @@ +package gov.nist.csd.pm.pap.serialization; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.query.PolicyQuery; + +public interface PolicySerializer { + + String serialize(PolicyQuery policyQuery) throws PMException; + +} diff --git a/src/main/java/gov/nist/csd/pm/pap/serialization/json/JSONAssociation.java b/src/main/java/gov/nist/csd/pm/pap/serialization/json/JSONAssociation.java new file mode 100644 index 000000000..b6ca8019c --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/serialization/json/JSONAssociation.java @@ -0,0 +1,34 @@ +package gov.nist.csd.pm.pap.serialization.json; + +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; + +public class JSONAssociation { + + private String target; + private AccessRightSet arset; + + public JSONAssociation() { + arset = new AccessRightSet(); + } + + public JSONAssociation(String target, AccessRightSet arset) { + this.target = target; + this.arset = arset; + } + + public String getTarget() { + return target; + } + + public void setTarget(String target) { + this.target = target; + } + + public AccessRightSet getArset() { + return arset; + } + + public void setArset(AccessRightSet arset) { + this.arset = arset; + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/serialization/json/JSONConstant.java b/src/main/java/gov/nist/csd/pm/pap/serialization/json/JSONConstant.java new file mode 100644 index 000000000..efc54ce1b --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/serialization/json/JSONConstant.java @@ -0,0 +1,5 @@ +package gov.nist.csd.pm.pap.serialization.json; + +import gov.nist.csd.pm.pap.pml.value.Value; + +public record JSONConstant(Class valueClass, String value) { } diff --git a/src/main/java/gov/nist/csd/pm/pap/serialization/json/JSONDeserializer.java b/src/main/java/gov/nist/csd/pm/pap/serialization/json/JSONDeserializer.java new file mode 100644 index 000000000..3dcfe412a --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/serialization/json/JSONDeserializer.java @@ -0,0 +1,158 @@ +package gov.nist.csd.pm.pap.serialization.json; + +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.serialization.PolicyDeserializer; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.graph.node.NodeType; + +import java.util.*; + +import static gov.nist.csd.pm.pap.graph.node.NodeType.*; + +public class JSONDeserializer implements PolicyDeserializer { + + @Override + public void deserialize(PAP pap, UserContext author, String input) throws PMException { + Gson gson = new Gson(); + JSONPolicy jsonPolicy = gson.fromJson(input, new TypeToken() {}.getType()); + + pap.modify().operations().setResourceOperations(jsonPolicy.getResourceOperations()); + + createGraph(pap, jsonPolicy.getGraph()); + createRestOfPolicy( + pap, + author, + jsonPolicy.getProhibitions(), + jsonPolicy.getObligations(), + jsonPolicy.getOperations(), + jsonPolicy.getRoutines() + ); + } + + private void createRestOfPolicy(PAP pap, + UserContext author, + List prohibitions, + List obligations, + List operations, + List routines) throws PMException { + StringBuilder sb = new StringBuilder(); + for (String prohibition : prohibitions) { + sb.append(prohibition).append("\n"); + } + + for (String obligation : obligations) { + sb.append(obligation).append("\n"); + } + + for (String operation : operations) { + sb.append(operation).append("\n"); + } + + for (String routine : routines) { + sb.append(routine).append("\n"); + } + + pap.executePML(author, sb.toString()); + } + + private void createGraph(PAP pap, JSONGraph graph) + throws PMException { + createPCs(pap, graph); + + // create uas + createNodes(pap, UA, graph.uas); + + // create oas + createNodes(pap, OA, graph.oas); + + // associate uas and uas/oas + createAssociations(pap, graph.uas); + + // create u and o + createNodes(pap, U, graph.users); + createNodes(pap, O, graph.objects); + } + + private void createPCs(PAP pap, JSONGraph graph) throws PMException { + // create all policy class nodes first + for (Map.Entry policyClass : graph.pcs.entrySet()) { + Map properties = policyClass.getValue().getProperties(); + pap.modify().graph().createPolicyClass(policyClass.getKey()); + + if (properties != null) { + pap.modify().graph().setNodeProperties(policyClass.getKey(), properties); + } + + } + } + + private void createAssociations(PAP pap, Map uas) throws PMException { + for (Map.Entry entry : uas.entrySet()) { + String ua = entry.getKey(); + JSONNode jsonNode = entry.getValue(); + Map associations = jsonNode.getAssociations(); + if (associations == null) { + continue; + } + + for (Map.Entry association : associations.entrySet()) { + pap.modify().graph().associate(ua, association.getKey(), association.getValue()); + } + } + } + + private void createNodes(PAP pap, NodeType type, Map nodes) + throws PMException { + Set> entries = nodes.entrySet(); + for (Map.Entry entry : entries) { + String name = entry.getKey(); + createNode(pap, name, type, nodes); + } + } + + private void createNode(PAP pap, String name, NodeType type, Map nodes) throws PMException { + if (pap.query().graph().nodeExists(name)) { + return; + } + + JSONNode jsonNode = nodes.get(name); + + Collection assignments = jsonNode.getAssignments(); + boolean created = false; + for (String assignment : assignments) { + if (!pap.query().graph().nodeExists(assignment)) { + createNode(pap, assignment, type, nodes); + } + createOrAssign(pap, created, name, type, jsonNode, assignment); + created = true; + } + } + + private void createOrAssign(PAP pap, boolean create, String name, NodeType type, JSONNode node, String assignment) throws PMException { + if (!create) { + // create node + createNode(pap, type, name, node, List.of(assignment)); + + // set properties + if (node.getProperties() != null) { + pap.modify().graph().setNodeProperties(name, node.getProperties()); + } + } else { + pap.modify().graph().assign(name, List.of(assignment)); + } + } + + private void createNode(PAP pap, NodeType type, String key, JSONNode value, List existingAssignmentNodes) + throws PMException { + switch (type) { + case OA -> pap.modify().graph().createObjectAttribute(key, existingAssignmentNodes); + case UA -> pap.modify().graph().createUserAttribute(key, existingAssignmentNodes); + case O -> pap.modify().graph().createObject(key, value.getAssignments()); + case U -> pap.modify().graph().createUser(key, value.getAssignments()); + } + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/serialization/json/JSONGraph.java b/src/main/java/gov/nist/csd/pm/pap/serialization/json/JSONGraph.java new file mode 100644 index 000000000..7e6699efd --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/serialization/json/JSONGraph.java @@ -0,0 +1,64 @@ +package gov.nist.csd.pm.pap.serialization.json; + +import java.util.Map; + +public class JSONGraph { + + Map pcs; + Map uas; + Map oas; + Map users; + Map objects; + + public JSONGraph(Map pcs, + Map uas, + Map oas, + Map users, + Map objects) { + this.pcs = pcs; + this.uas = uas; + this.oas = oas; + this.users = users; + this.objects = objects; + } + + public Map getPcs() { + return pcs; + } + + public void setPcs(Map pcs) { + this.pcs = pcs; + } + + public Map getUas() { + return uas; + } + + public void setUas(Map uas) { + this.uas = uas; + } + + public Map getOas() { + return oas; + } + + public void setOas(Map oas) { + this.oas = oas; + } + + public Map getUsers() { + return users; + } + + public void setUsers(Map users) { + this.users = users; + } + + public Map getObjects() { + return objects; + } + + public void setObjects(Map objects) { + this.objects = objects; + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/serialization/json/JSONNode.java b/src/main/java/gov/nist/csd/pm/pap/serialization/json/JSONNode.java new file mode 100644 index 000000000..00bde7b1b --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/serialization/json/JSONNode.java @@ -0,0 +1,75 @@ +package gov.nist.csd.pm.pap.serialization.json; + +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; + +import java.util.Collection; +import java.util.Map; +import java.util.Objects; + +public class JSONNode { + + private Map properties; + private Collection assignments; + private Map associations; + + public JSONNode(Map properties, Collection assignments) { + if (!properties.isEmpty()) { + this.properties = properties; + } + + if (!assignments.isEmpty()) { + this.assignments = assignments; + } + } + + public JSONNode(Map properties, + Collection assignments, + Map associations) { + this(properties, assignments); + this.associations = associations; + } + + public Map getProperties() { + return properties; + } + + public void setProperties(Map properties) { + this.properties = properties; + } + + public Collection getAssignments() { + return assignments; + } + + public void setAssignments(Collection assignments) { + this.assignments = assignments; + } + + public Map getAssociations() { + return associations; + } + + public void setAssociations(Map associations) { + this.associations = associations; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + JSONNode jsonNode = (JSONNode) o; + return Objects.equals(properties, jsonNode.properties) && Objects.equals( + assignments, + jsonNode.assignments + ); + } + + @Override + public int hashCode() { + return Objects.hash(properties, assignments); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/serialization/json/JSONPolicy.java b/src/main/java/gov/nist/csd/pm/pap/serialization/json/JSONPolicy.java new file mode 100644 index 000000000..f475c6a22 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/serialization/json/JSONPolicy.java @@ -0,0 +1,87 @@ +package gov.nist.csd.pm.pap.serialization.json; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; + +import java.util.List; + +public class JSONPolicy { + + private AccessRightSet resourceOperations; + private JSONGraph graph; + private List prohibitions; + private List obligations; + private List operations; + private List routines; + + public JSONPolicy(AccessRightSet resourceOperations, JSONGraph graph, List prohibitions, List obligations, List operations, List routines) { + this.resourceOperations = resourceOperations; + this.graph = graph; + this.prohibitions = prohibitions; + this.obligations = obligations; + this.operations = operations; + this.routines = routines; + } + + public AccessRightSet getResourceOperations() { + return resourceOperations; + } + + public void setResourceOperations(AccessRightSet resourceOperations) { + this.resourceOperations = resourceOperations; + } + + public JSONGraph getGraph() { + return graph; + } + + public void setGraph(JSONGraph graph) { + this.graph = graph; + } + + public List getProhibitions() { + return prohibitions; + } + + public void setProhibitions(List prohibitions) { + this.prohibitions = prohibitions; + } + + public List getObligations() { + return obligations; + } + + public void setObligations(List obligations) { + this.obligations = obligations; + } + + public List getOperations() { + return operations; + } + + public void setOperations(List operations) { + this.operations = operations; + } + + public List getRoutines() { + return routines; + } + + public void setRoutines(List routines) { + this.routines = routines; + } + + @Override + public String toString() { + return new GsonBuilder() + .setPrettyPrinting() + .disableHtmlEscaping() + .create() + .toJson(this); + } + + public static JSONPolicy fromJSON(String json) { + return new Gson().fromJson(json, JSONPolicy.class); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/serialization/json/JSONPolicyClass.java b/src/main/java/gov/nist/csd/pm/pap/serialization/json/JSONPolicyClass.java new file mode 100644 index 000000000..a09e1e552 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/serialization/json/JSONPolicyClass.java @@ -0,0 +1,25 @@ +package gov.nist.csd.pm.pap.serialization.json; + +import java.util.List; +import java.util.Map; + +public class JSONPolicyClass { + + private Map properties; + + public JSONPolicyClass() { + + } + + public JSONPolicyClass(Map properties) { + this.properties = properties; + } + + public Map getProperties() { + return properties; + } + + public void setProperties(Map properties) { + this.properties = properties; + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/serialization/json/JSONSerializer.java b/src/main/java/gov/nist/csd/pm/pap/serialization/json/JSONSerializer.java new file mode 100644 index 000000000..c43fe8105 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/serialization/json/JSONSerializer.java @@ -0,0 +1,185 @@ +package gov.nist.csd.pm.pap.serialization.json; + +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.node.Node; +import gov.nist.csd.pm.pap.graph.node.NodeType; +import gov.nist.csd.pm.pap.graph.relationship.Association; +import gov.nist.csd.pm.pap.obligation.Obligation; +import gov.nist.csd.pm.pap.prohibition.Prohibition; +import gov.nist.csd.pm.pap.admin.AdminPolicy; +import gov.nist.csd.pm.pap.admin.AdminPolicyNode; +import gov.nist.csd.pm.pap.op.Operation; +import gov.nist.csd.pm.pap.pml.statement.PMLStatementSerializable; +import gov.nist.csd.pm.pap.routine.Routine; +import gov.nist.csd.pm.pap.serialization.PolicySerializer; +import gov.nist.csd.pm.pap.query.PolicyQuery; + +import java.util.*; + +import static gov.nist.csd.pm.pap.graph.node.NodeType.*; + +public class JSONSerializer implements PolicySerializer { + + @Override + public String serialize(PolicyQuery policyQuery) throws PMException { + return buildJSONPolicy(policyQuery) + .toString(); + } + + public JSONPolicy buildJSONPolicy(PolicyQuery policyQuery) throws PMException { + return new JSONPolicy( + policyQuery.operations().getResourceOperations(), + buildGraphJSON(policyQuery), + buildProhibitionsJSON(policyQuery), + buildObligationsJSON(policyQuery), + buildOperationsJSON(policyQuery), + buildRoutinesJSON(policyQuery) + ); + } + + private List buildRoutinesJSON(PolicyQuery policyQuery) throws PMException { + // can only serialize if implements PMLStatementSerializer + List json = new ArrayList<>(); + + Collection adminRoutineNames = policyQuery.routines().getAdminRoutineNames(); + for (String adminOperationName : adminRoutineNames) { + Routine routine = policyQuery.routines().getAdminRoutine(adminOperationName); + if (routine instanceof PMLStatementSerializable pmlStatementSerializable) { + json.add(pmlStatementSerializable.toFormattedString(0)); + } + } + + return json; + } + + private List buildOperationsJSON(PolicyQuery policyQuery) throws PMException { + // can only serialize if implements PMLStatementSerializer + List json = new ArrayList<>(); + + Collection adminOperationNames = policyQuery.operations().getAdminOperationNames(); + for (String adminOperationName : adminOperationNames) { + Operation operation = policyQuery.operations().getAdminOperation(adminOperationName); + if (operation instanceof PMLStatementSerializable pmlStatementSerializable) { + json.add(pmlStatementSerializable.toFormattedString(0)); + } + } + + return json; + } + + private List buildObligationsJSON(PolicyQuery policyQuery) throws PMException { + List jsonObligations = new ArrayList<>(); + Collection all = policyQuery.obligations().getObligations(); + for (Obligation obligation : all) { + jsonObligations.add(obligation.toString()); + } + + return jsonObligations; + } + + private List buildProhibitionsJSON(PolicyQuery policyQuery) throws PMException { + List prohibitions = new ArrayList<>(); + Map> all = policyQuery.prohibitions().getProhibitions(); + for (Collection value : all.values()) { + for (Prohibition prohibition : value) { + prohibitions.add(prohibition.toString()); + } + } + + return prohibitions; + } + + private JSONGraph buildGraphJSON(PolicyQuery policyQuery) throws PMException { + return new JSONGraph( + buildPolicyClasses(policyQuery), + buildUserAttributes(policyQuery), + buildNonUANodes(policyQuery, OA), + buildNonUANodes(policyQuery, U), + buildNonUANodes(policyQuery, O) + ); + } + + private Map buildNonUANodes(PolicyQuery policyQuery, NodeType type) throws PMException { + Map nodes = new HashMap<>(); + + Collection search = policyQuery.graph().search(type, new HashMap<>()); + for (String node : search) { + if (isUnmodifiedAdminNodeOrTarget(policyQuery, node)) { + continue; + } + + Node n = policyQuery.graph().getNode(node); + + String name = n.getName(); + Map properties = n.getProperties(); + Collection descs = new ArrayList<>(policyQuery.graph().getAdjacentDescendants(name)); + + nodes.put(name, new JSONNode(properties, descs)); + } + + return nodes; + } + + private boolean isUnmodifiedAdminNodeOrTarget(PolicyQuery policyQuery, String node) throws PMException { + Collection descendants = policyQuery.graph().getAdjacentDescendants(node); + return descendants.contains(AdminPolicyNode.ADMIN_POLICY.nodeName()) && descendants.size() == 1; + } + + private Map buildUserAttributes(PolicyQuery policyQuery) throws PMException { + Map userAttributes = new HashMap<>(); + + Collection search = policyQuery.graph().search(UA, new HashMap<>()); + for (String node : search) { + Node n = policyQuery.graph().getNode(node); + + String name = n.getName(); + Map properties = n.getProperties(); + Collection descendants = policyQuery.graph().getAdjacentDescendants(name); + Collection assocList = policyQuery.graph().getAssociationsWithSource(name); + Map assocMap = new HashMap<>(); + + for (Association assoc : assocList) { + assocMap.put(assoc.getTarget(), assoc.getAccessRightSet()); + } + + JSONNode jsonNode; + if (assocMap.isEmpty()) { + jsonNode = new JSONNode(properties, descendants); + } else { + jsonNode = new JSONNode(properties, descendants, assocMap); + } + + userAttributes.put(name, jsonNode); + } + + return userAttributes; + } + + private Map buildPolicyClasses(PolicyQuery policyQuery) throws PMException { + Map policyClassesList = new HashMap<>(); + + Collection policyClasses = policyQuery.graph().getPolicyClasses(); + for (String pc : policyClasses) { + if (AdminPolicy.isAdminPolicyNodeName(pc)) { + continue; + } + + JSONPolicyClass jsonPolicyClass = buildJSONPolicyCLass(pc, policyQuery); + + policyClassesList.put(pc, jsonPolicyClass); + } + + return policyClassesList; + } + + private JSONPolicyClass buildJSONPolicyCLass(String pc, PolicyQuery policyQuery) throws PMException { + Node node = policyQuery.graph().getNode(pc); + JSONPolicyClass jsonPolicyClass = new JSONPolicyClass(); + if (!node.getProperties().isEmpty()) { + jsonPolicyClass.setProperties(node.getProperties()); + } + + return jsonPolicyClass; + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/serialization/pml/PMLDeserializer.java b/src/main/java/gov/nist/csd/pm/pap/serialization/pml/PMLDeserializer.java new file mode 100644 index 000000000..244211367 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/serialization/pml/PMLDeserializer.java @@ -0,0 +1,14 @@ +package gov.nist.csd.pm.pap.serialization.pml; + +import gov.nist.csd.pm.pap.serialization.PolicyDeserializer; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.query.UserContext; + +public class PMLDeserializer implements PolicyDeserializer { + + @Override + public void deserialize(PAP pap, UserContext author, String input) throws PMException { + pap.executePML(author, input); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/serialization/pml/PMLSerializer.java b/src/main/java/gov/nist/csd/pm/pap/serialization/pml/PMLSerializer.java new file mode 100644 index 000000000..a341df7bd --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/serialization/pml/PMLSerializer.java @@ -0,0 +1,280 @@ +package gov.nist.csd.pm.pap.serialization.pml; + +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.admin.AdminPolicy; +import gov.nist.csd.pm.pap.admin.AdminPolicyNode; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.node.NodeType; +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.pml.expression.literal.ArrayLiteral; +import gov.nist.csd.pm.pap.pml.expression.literal.MapLiteral; +import gov.nist.csd.pm.pap.pml.expression.literal.StringLiteral; +import gov.nist.csd.pm.pap.pml.expression.reference.ReferenceByID; +import gov.nist.csd.pm.pap.pml.statement.operation.*; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.serialization.PolicySerializer; +import gov.nist.csd.pm.pap.query.PolicyQuery; +import gov.nist.csd.pm.pap.serialization.json.*; + +import java.util.*; + +import static gov.nist.csd.pm.pap.graph.node.NodeType.*; + +public class PMLSerializer implements PolicySerializer { + + @Override + public String serialize(PolicyQuery policyQuery) throws PMException { + JSONSerializer json = new JSONSerializer(); + JSONPolicy jsonPolicy = json.buildJSONPolicy(policyQuery); + + return serialize(jsonPolicy); + } + + private String serialize(JSONPolicy jsonPolicy) { + StringBuilder sb = new StringBuilder(); + + sb.append("// resource operations\n"); + sb.append(jsonResourceOperations(jsonPolicy.getResourceOperations())); + + sb.append("\n// GRAPH\n"); + sb.append(jsonGraphToPML(jsonPolicy.getGraph())); + + sb.append("\n// PROHIBITIONS\n"); + sb.append(concatStrings(jsonPolicy.getProhibitions())); + + sb.append("\n// OBLIGATIONS\n"); + sb.append(concatStrings(jsonPolicy.getObligations())); + + sb.append("\n// OPERATIONS\n"); + sb.append(concatStrings(jsonPolicy.getOperations())); + + sb.append("\n// ROUTINES\n"); + sb.append(concatStrings(jsonPolicy.getRoutines())); + + return sb.toString(); + } + + private String jsonResourceOperations(AccessRightSet accessRightSet) { + List expressions = new ArrayList<>(); + for (String ar : accessRightSet) { + expressions.add(new StringLiteral(ar)); + } + + ArrayLiteral arrayLiteral = new ArrayLiteral(expressions, Type.string()); + + return new SetResourceOperationsStatement(arrayLiteral).toFormattedString(0) + "\n"; + } + + private String jsonGraphToPML(JSONGraph jsonGraph) { + StringBuilder pml = new StringBuilder(); + + pml.append(buildPolicyClassesPML(jsonGraph)); + pml.append(buildAttributesPML(jsonGraph.getPcs().keySet(), jsonGraph.getUas(), UA)); + pml.append(buildAttributesPML(jsonGraph.getPcs().keySet(), jsonGraph.getOas(), OA)); + pml.append(buildAssociations(jsonGraph.getUas())); + pml.append(buildUsersAndObjectsPML(jsonGraph)); + + return pml.toString(); + } + + private String buildAssociations(Map uas) { + StringBuilder sb = new StringBuilder(); + for (Map.Entry ua : uas.entrySet()) { + String name = ua.getKey(); + JSONNode node = ua.getValue(); + + Map associations = node.getAssociations(); + if (associations == null) { + continue; + } + + for (Map.Entry assoc : associations.entrySet()) { + sb.append( + new AssociateStatement( + buildNameExpression(name), + buildNameExpression(assoc.getKey()), + setToExpression(assoc.getValue()) + ) + ).append("\n"); + } + } + + return sb.toString(); + } + + private String buildAttributesPML(Set pcs, Map attrs, NodeType type) { + StringBuilder pml = new StringBuilder(); + + Set createNodes = new HashSet<>(pcs); + + Set> entries = attrs.entrySet(); + for (Map.Entry entry : entries) { + String name = entry.getKey(); + createNode(pml, createNodes, name, type, attrs); + } + + return pml.toString(); + } + + private void createNode(StringBuilder sb, Set createdNodes, String name, NodeType type, Map nodes) { + if (createdNodes.contains(name)) { + return; + } + + JSONNode jsonNode = nodes.get(name); + + Collection assignments = jsonNode.getAssignments(); + boolean created = false; + for (String assignment : assignments) { + if (!createdNodes.contains(assignment)) { + createNode(sb, createdNodes, assignment, type, nodes); + } + createOrAssign(sb, createdNodes, created, name, type, jsonNode, assignment); + created = true; + } + } + + private void createOrAssign(StringBuilder sb, Set createdNodes, boolean create, String name, NodeType type, JSONNode node, String assignment) { + if (!create) { + sb.append(jsonNodeToPML(createdNodes, name, type, node, List.of(assignment))); + createdNodes.add(name); + } else { + sb.append(new AssignStatement( + buildNameExpression(name), + setToExpression(Set.of(assignment)) + )).append("\n"); + } + } + + private String buildPolicyClassesPML(JSONGraph jsonGraph) { + StringBuilder sb = new StringBuilder(); + + sb.append("// policy classes\n"); + + Map pcs = jsonGraph.getPcs(); + for (Map.Entry e : pcs.entrySet()) { + // do not serialize admin policy node + if (AdminPolicy.isAdminPolicyNodeName(e.getKey())) { + continue; + } + + sb.append(new CreatePolicyStatement( + buildNameExpression(e.getKey()) + )).append("\n"); + + SetNodePropertiesStatement setNodePropertiesStatement = + buildSetNodePropertiesStatement(e.getKey(), e.getValue().getProperties()); + if (setNodePropertiesStatement != null) { + sb.append(setNodePropertiesStatement).append("\n"); + } + } + + return sb.toString(); + } + + private String buildUsersAndObjectsPML(JSONGraph jsonGraph) { + StringBuilder sb = new StringBuilder(); + + sb.append("\n// users\n"); + for (Map.Entry e : jsonGraph.getUsers().entrySet()) { + sb.append(jsonNodeToPML(new HashSet<>(), e.getKey(), U, e.getValue(), e.getValue().getAssignments())); + } + + sb.append("\n// objects\n"); + for (Map.Entry e : jsonGraph.getObjects().entrySet()) { + sb.append(jsonNodeToPML(new HashSet<>(), e.getKey(), O, e.getValue(), e.getValue().getAssignments())); + } + + return sb.toString(); + } + + private String jsonNodeToPML(Set seen, String name, NodeType type, JSONNode jsonNode, Collection assignments) { + StringBuilder sb = new StringBuilder(); + + // if node is an admin node, assign to assignments not create + if (seen.contains(name)) { + sb.append(new AssignStatement( + buildNameExpression(name), + setToExpression(new HashSet<>(assignments)) + )).append("\n"); + } else { + sb.append(new CreateNonPCStatement( + buildNameExpression(name), + type, + setToExpression(new HashSet<>(assignments)) + )).append("\n"); + } + + SetNodePropertiesStatement setNodePropertiesStatement = + buildSetNodePropertiesStatement(name, jsonNode.getProperties()); + if (setNodePropertiesStatement != null) { + sb.append(setNodePropertiesStatement).append("\n"); + } + + return sb.toString(); + + } + + private String concatStrings(List strings) { + StringBuilder pml = new StringBuilder(); + + for (String s : strings) { + pml.append(s).append("\n"); + } + + return pml.toString(); + } + + private Expression buildNameExpression(String name) { + if (AdminPolicy.isAdminPolicyNodeName(name)) { + return new ReferenceByID( + AdminPolicyNode.fromNodeName(name).constantName() + ); + } + + return new StringLiteral(name); + } + + private ArrayLiteral setToExpression(Set set) { + Expression[] expressions = new Expression[set.size()]; + int i = 0; + for (String s : set) { + expressions[i] = buildNameExpression(s); + i++; + } + + return new ArrayLiteral( + expressions, + Type.string() + ); + } + + private SetNodePropertiesStatement buildSetNodePropertiesStatement(String name, Map properties) { + Expression propertiesExpression = propertiesMapToExpression(properties); + if (propertiesExpression == null) { + return null; + } + + return new SetNodePropertiesStatement( + buildNameExpression(name), + propertiesExpression + ); + } + + private Expression propertiesMapToExpression(Map properties) { + if (properties == null || properties.isEmpty()) { + return null; + } + + Map propertiesExpressions = new HashMap<>(); + for (Map.Entry property : properties.entrySet()) { + propertiesExpressions.put( + new StringLiteral(property.getKey()), + new StringLiteral(property.getValue()) + ); + } + + return new MapLiteral(propertiesExpressions, Type.string(), Type.string()); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/store/GraphStore.java b/src/main/java/gov/nist/csd/pm/pap/store/GraphStore.java new file mode 100644 index 000000000..e6eae1a78 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/store/GraphStore.java @@ -0,0 +1,37 @@ +package gov.nist.csd.pm.pap.store; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.node.Node; +import gov.nist.csd.pm.pap.graph.node.NodeType; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.graph.relationship.Association; +import gov.nist.csd.pm.pap.tx.Transactional; + +import java.util.Collection; +import java.util.Map; + +public interface GraphStore extends Transactional { + + void createNode(String name, NodeType type) throws PMException; + void deleteNode(String name) throws PMException; + void setNodeProperties(String name, Map properties) throws PMException; + void createAssignment(String start, String end) throws PMException; + void deleteAssignment(String start, String end) throws PMException; + void createAssociation(String ua, String target, AccessRightSet arset) throws PMException; + void deleteAssociation(String ua, String target) throws PMException; + + Node getNode(String name) throws PMException; + boolean nodeExists(String name) throws PMException; + Collection search(NodeType type, Map properties) throws PMException; + Collection getPolicyClasses() throws PMException; + Collection getAdjacentDescendants(String name) throws PMException; + Collection getAdjacentAscendants(String name) throws PMException; + Collection getAssociationsWithSource(String ua) throws PMException; + Collection getAssociationsWithTarget(String target) throws PMException; + Collection getAscendants(String node) throws PMException; + Collection getPolicyClassDescendants(String node) throws PMException; + Collection getAttributeDescendants(String node) throws PMException; + Collection getDescendants(String node) throws PMException; + boolean isAscendant(String asc, String dsc) throws PMException; + boolean isDescendant(String asc, String dsc) throws PMException; +} diff --git a/src/main/java/gov/nist/csd/pm/pap/store/GraphStoreBFS.java b/src/main/java/gov/nist/csd/pm/pap/store/GraphStoreBFS.java new file mode 100644 index 000000000..af301e977 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/store/GraphStoreBFS.java @@ -0,0 +1,26 @@ +package gov.nist.csd.pm.pap.store; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.dag.BreadthFirstGraphWalker; +import gov.nist.csd.pm.pap.graph.dag.Direction; + +import java.util.Collection; + +public class GraphStoreBFS extends BreadthFirstGraphWalker { + + private GraphStore graphStore; + + public GraphStoreBFS(GraphStore graphStore) { + super(null); + this.graphStore = graphStore; + } + + @Override + protected Collection getNextLevel(String node) throws PMException { + if (getDirection() == Direction.DESCENDANTS) { + return graphStore.getAdjacentDescendants(node); + } else { + return graphStore.getAdjacentAscendants(node); + } + } +} diff --git a/src/main/java/gov/nist/csd/pm/pap/store/GraphStoreDFS.java b/src/main/java/gov/nist/csd/pm/pap/store/GraphStoreDFS.java new file mode 100644 index 000000000..4805d1ff3 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/store/GraphStoreDFS.java @@ -0,0 +1,27 @@ +package gov.nist.csd.pm.pap.store; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.dag.DepthFirstGraphWalker; +import gov.nist.csd.pm.pap.graph.dag.Direction; + +import java.util.Collection; + +public class GraphStoreDFS extends DepthFirstGraphWalker { + + private GraphStore graphStore; + + public GraphStoreDFS(GraphStore graphStore) { + super(null); + this.graphStore = graphStore; + } + + @Override + protected Collection getNextLevel(String node) throws PMException { + if (getDirection() == Direction.DESCENDANTS) { + return graphStore.getAdjacentDescendants(node); + } else { + return graphStore.getAdjacentAscendants(node); + } + } + +} diff --git a/src/main/java/gov/nist/csd/pm/pap/store/ObligationsStore.java b/src/main/java/gov/nist/csd/pm/pap/store/ObligationsStore.java new file mode 100644 index 000000000..3df6cf2a3 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/store/ObligationsStore.java @@ -0,0 +1,10 @@ +package gov.nist.csd.pm.pap.store; + +import gov.nist.csd.pm.pap.tx.Transactional; +import gov.nist.csd.pm.pap.modification.ObligationsModification; +import gov.nist.csd.pm.pap.query.ObligationsQuery; + +public interface ObligationsStore extends ObligationsModification, ObligationsQuery, Transactional { + + +} diff --git a/src/main/java/gov/nist/csd/pm/pap/store/OperationsStore.java b/src/main/java/gov/nist/csd/pm/pap/store/OperationsStore.java new file mode 100644 index 000000000..7eb50c2e6 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/store/OperationsStore.java @@ -0,0 +1,9 @@ +package gov.nist.csd.pm.pap.store; + +import gov.nist.csd.pm.pap.tx.Transactional; +import gov.nist.csd.pm.pap.modification.OperationsModification; +import gov.nist.csd.pm.pap.query.OperationsQuery; + +public interface OperationsStore extends OperationsModification, OperationsQuery, Transactional { + +} diff --git a/src/main/java/gov/nist/csd/pm/pap/store/PolicyStore.java b/src/main/java/gov/nist/csd/pm/pap/store/PolicyStore.java new file mode 100644 index 000000000..b1b98d5bf --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/store/PolicyStore.java @@ -0,0 +1,15 @@ +package gov.nist.csd.pm.pap.store; + +import gov.nist.csd.pm.pap.tx.Transactional; + +public interface PolicyStore extends Transactional { + + GraphStore graph(); + ProhibitionsStore prohibitions(); + ObligationsStore obligations(); + OperationsStore operations(); + RoutinesStore routines(); + + void reset(); + +} diff --git a/src/main/java/gov/nist/csd/pm/pap/store/ProhibitionsStore.java b/src/main/java/gov/nist/csd/pm/pap/store/ProhibitionsStore.java new file mode 100644 index 000000000..5180df396 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/store/ProhibitionsStore.java @@ -0,0 +1,25 @@ +package gov.nist.csd.pm.pap.store; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.prohibition.ContainerCondition; +import gov.nist.csd.pm.pap.prohibition.Prohibition; +import gov.nist.csd.pm.pap.prohibition.ProhibitionSubject; +import gov.nist.csd.pm.pap.tx.Transactional; + +import java.util.Collection; +import java.util.Map; + +public interface ProhibitionsStore extends Transactional { + + void createProhibition(String name, + ProhibitionSubject subject, + AccessRightSet accessRightSet, + boolean intersection, + Collection containerConditions) throws PMException; + void deleteProhibition(String name) throws PMException; + + Map> getProhibitions() throws PMException; + Prohibition getProhibition(String name) throws PMException; + boolean prohibitionExists(String name) throws PMException; +} diff --git a/src/main/java/gov/nist/csd/pm/pap/store/RoutinesStore.java b/src/main/java/gov/nist/csd/pm/pap/store/RoutinesStore.java new file mode 100644 index 000000000..25c1e5f1e --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/store/RoutinesStore.java @@ -0,0 +1,9 @@ +package gov.nist.csd.pm.pap.store; + +import gov.nist.csd.pm.pap.tx.Transactional; +import gov.nist.csd.pm.pap.modification.RoutinesModification; +import gov.nist.csd.pm.pap.query.RoutinesQuery; + +public interface RoutinesStore extends Transactional, RoutinesModification, RoutinesQuery { + +} diff --git a/src/main/java/gov/nist/csd/pm/pap/tx/TransactionNotStartedException.java b/src/main/java/gov/nist/csd/pm/pap/tx/TransactionNotStartedException.java new file mode 100644 index 000000000..391c878bd --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pap/tx/TransactionNotStartedException.java @@ -0,0 +1,9 @@ +package gov.nist.csd.pm.pap.tx; + +import gov.nist.csd.pm.pap.exception.PMException; + +public class TransactionNotStartedException extends PMException { + public TransactionNotStartedException() { + super("a transaction has not been started using beginTx()"); + } +} diff --git a/src/main/java/gov/nist/csd/pm/policy/tx/Transactional.java b/src/main/java/gov/nist/csd/pm/pap/tx/Transactional.java similarity index 63% rename from src/main/java/gov/nist/csd/pm/policy/tx/Transactional.java rename to src/main/java/gov/nist/csd/pm/pap/tx/Transactional.java index 3fcc2e922..85c78a663 100644 --- a/src/main/java/gov/nist/csd/pm/policy/tx/Transactional.java +++ b/src/main/java/gov/nist/csd/pm/pap/tx/Transactional.java @@ -1,6 +1,6 @@ -package gov.nist.csd.pm.policy.tx; +package gov.nist.csd.pm.pap.tx; -import gov.nist.csd.pm.policy.exceptions.PMException; +import gov.nist.csd.pm.pap.exception.PMException; public interface Transactional { diff --git a/src/main/java/gov/nist/csd/pm/policy/tx/TxCommitException.java b/src/main/java/gov/nist/csd/pm/pap/tx/TxCommitException.java similarity index 69% rename from src/main/java/gov/nist/csd/pm/policy/tx/TxCommitException.java rename to src/main/java/gov/nist/csd/pm/pap/tx/TxCommitException.java index ad918bac6..4bd31a57f 100644 --- a/src/main/java/gov/nist/csd/pm/policy/tx/TxCommitException.java +++ b/src/main/java/gov/nist/csd/pm/pap/tx/TxCommitException.java @@ -1,6 +1,6 @@ -package gov.nist.csd.pm.policy.tx; +package gov.nist.csd.pm.pap.tx; -import gov.nist.csd.pm.policy.exceptions.PMException; +import gov.nist.csd.pm.pap.exception.PMException; public class TxCommitException extends PMException { public TxCommitException(Class target, Class tx) { diff --git a/src/main/java/gov/nist/csd/pm/policy/tx/TxRunner.java b/src/main/java/gov/nist/csd/pm/pap/tx/TxRunner.java similarity index 82% rename from src/main/java/gov/nist/csd/pm/policy/tx/TxRunner.java rename to src/main/java/gov/nist/csd/pm/pap/tx/TxRunner.java index a51fa510b..229922794 100644 --- a/src/main/java/gov/nist/csd/pm/policy/tx/TxRunner.java +++ b/src/main/java/gov/nist/csd/pm/pap/tx/TxRunner.java @@ -1,6 +1,6 @@ -package gov.nist.csd.pm.policy.tx; +package gov.nist.csd.pm.pap.tx; -import gov.nist.csd.pm.policy.exceptions.PMException; +import gov.nist.csd.pm.pap.exception.PMException; public class TxRunner { diff --git a/src/main/java/gov/nist/csd/pm/pdp/AccessAdjudication.java b/src/main/java/gov/nist/csd/pm/pdp/AccessAdjudication.java new file mode 100644 index 000000000..e4e7eb1e9 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pdp/AccessAdjudication.java @@ -0,0 +1,14 @@ +package gov.nist.csd.pm.pdp; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.query.UserContext; + +import java.util.List; + +public interface AccessAdjudication { + + ResourceAdjudicationResponse adjudicateResourceOperation(UserContext user, String policyElement, String resourceOperation) throws PMException; + AdminAdjudicationResponse adjudicateAdminOperations(UserContext user, List requests) throws PMException; + AdminAdjudicationResponse adjudicateAdminRoutine(UserContext user, RoutineRequest request) throws PMException; + +} diff --git a/src/main/java/gov/nist/csd/pm/pdp/AdminAdjudicationResponse.java b/src/main/java/gov/nist/csd/pm/pdp/AdminAdjudicationResponse.java new file mode 100644 index 000000000..f2152626a --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pdp/AdminAdjudicationResponse.java @@ -0,0 +1,44 @@ +package gov.nist.csd.pm.pdp; + +import java.util.Objects; + +public class AdminAdjudicationResponse { + + private Decision decision; + + public AdminAdjudicationResponse(Decision decision) { + this.decision = decision; + } + + public Decision getDecision() { + return decision; + } + + public void setDecision(Decision decision) { + this.decision = decision; + } + + @Override + public boolean equals(Object obj) { + if (obj == this) { + return true; + } + if (obj == null || obj.getClass() != this.getClass()) { + return false; + } + var that = (AdminAdjudicationResponse) obj; + return Objects.equals(this.decision, that.decision); + } + + @Override + public int hashCode() { + return Objects.hash(decision); + } + + @Override + public String toString() { + return "AdminAdjudicationResponse[" + + "status=" + decision + ']'; + } + +} diff --git a/src/main/java/gov/nist/csd/pm/pdp/Decision.java b/src/main/java/gov/nist/csd/pm/pdp/Decision.java new file mode 100644 index 000000000..a16b589d1 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pdp/Decision.java @@ -0,0 +1,6 @@ +package gov.nist.csd.pm.pdp; + +public enum Decision { + GRANT, + DENY +} diff --git a/src/main/java/gov/nist/csd/pm/pdp/EventResponseEvaluation.java b/src/main/java/gov/nist/csd/pm/pdp/EventResponseEvaluation.java new file mode 100644 index 000000000..534ba5435 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pdp/EventResponseEvaluation.java @@ -0,0 +1,10 @@ +package gov.nist.csd.pm.pdp; + +import gov.nist.csd.pm.pap.obligation.Response; +import gov.nist.csd.pm.pap.query.UserContext; + +public interface EventResponseEvaluation { + + public void evaluateResponse(UserContext userCtx, Response response); + +} diff --git a/src/main/java/gov/nist/csd/pm/pdp/OperationRequest.java b/src/main/java/gov/nist/csd/pm/pdp/OperationRequest.java new file mode 100644 index 000000000..fd02f64d8 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pdp/OperationRequest.java @@ -0,0 +1,6 @@ +package gov.nist.csd.pm.pdp; + +import java.util.Map; + +public record OperationRequest(String name, Map operands) { +} diff --git a/src/main/java/gov/nist/csd/pm/pdp/PDP.java b/src/main/java/gov/nist/csd/pm/pdp/PDP.java index 1a30b2e9a..d61c70b4a 100644 --- a/src/main/java/gov/nist/csd/pm/pdp/PDP.java +++ b/src/main/java/gov/nist/csd/pm/pdp/PDP.java @@ -1,148 +1,156 @@ package gov.nist.csd.pm.pdp; -import gov.nist.csd.pm.pap.PAP; -import gov.nist.csd.pm.pdp.adjudicator.Adjudicator; -import gov.nist.csd.pm.policy.*; -import gov.nist.csd.pm.policy.events.PolicyEvent; -import gov.nist.csd.pm.policy.events.PolicyEventEmitter; -import gov.nist.csd.pm.policy.events.PolicyEventListener; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.UserContext; -import gov.nist.csd.pm.policy.pml.PMLExecutable; -import gov.nist.csd.pm.policy.pml.PMLExecutor; -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; - -import java.util.ArrayList; -import java.util.List; - -public abstract class PDP implements PolicyEventEmitter { +import gov.nist.csd.pm.pap.graph.node.Node; +import gov.nist.csd.pm.pap.obligation.EventContext; +import gov.nist.csd.pm.epp.EventEmitter; +import gov.nist.csd.pm.epp.EventProcessor; +import gov.nist.csd.pm.pap.*; +import gov.nist.csd.pm.pap.exception.OperationDoesNotExistException; +import gov.nist.csd.pm.pap.op.Operation; +import gov.nist.csd.pm.pap.op.PrivilegeChecker; +import gov.nist.csd.pm.pap.pml.executable.operation.PMLOperation; +import gov.nist.csd.pm.pap.pml.executable.routine.PMLRoutine; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.exception.BootstrapExistingPolicyException; +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.tx.TxRunner; +import gov.nist.csd.pm.pap.routine.Routine; +import gov.nist.csd.pm.pdp.exception.UnauthorizedException; + +import java.util.*; + +import static gov.nist.csd.pm.pap.admin.AdminPolicy.ALL_NODE_NAMES; +import static gov.nist.csd.pm.pap.graph.node.NodeType.ANY; +import static gov.nist.csd.pm.pap.graph.node.Properties.NO_PROPERTIES; + +public class PDP implements EventEmitter, AccessAdjudication { protected final PAP pap; - protected final List eventListeners; + protected final List eventProcessors; - protected PDP(PAP pap) { + public PDP(PAP pap) { this.pap = pap; - this.eventListeners = new ArrayList<>(); + this.eventProcessors = new ArrayList<>(); } - public abstract PolicyReviewer reviewer() throws PMException; - - public abstract void runTx(UserContext userCtx, PDPTxRunner txRunner) throws PMException; - - @Override - public void addEventListener(PolicyEventListener listener, boolean sync) throws PMException { - eventListeners.add(listener); - - if (sync) { - listener.handlePolicyEvent(pap.policySync()); - } + public void runTx(UserContext userCtx, PDPTxRunner txRunner) throws PMException { + TxRunner.runTx(pap, () -> { + PDPTx pdpTx = new PDPTx(userCtx, pap, eventProcessors); + txRunner.run(pdpTx); + }); } - @Override - public void removeEventListener(PolicyEventListener listener) { - eventListeners.remove(listener); + public void executePML(UserContext userCtx, String pml) throws PMException { + runTx(userCtx, tx -> tx.executePML(userCtx, pml)); } - @Override - public void emitEvent(PolicyEvent event) throws PMException { - for (PolicyEventListener listener : eventListeners) { - listener.handlePolicyEvent(event); + public void bootstrap(PolicyBootstrapper bootstrapper) throws PMException { + if(!isPolicyEmpty()) { + throw new BootstrapExistingPolicyException(); } - } - public interface PDPTxRunner { - void run(PDPTx policy) throws PMException; + bootstrapper.bootstrap(pap); } - public static class PDPTx implements PolicyEventEmitter, PolicyEventListener, PMLExecutable, Policy { - - private final UserContext userCtx; - private final Adjudicator adjudicator; - private final PAP pap; - private List epps; + private boolean isPolicyEmpty() throws PMException { + Set nodes = new HashSet<>(pap.query().graph().search(ANY, NO_PROPERTIES)); - private PDPGraph pdpGraph; - private PDPProhibitions pdpProhibitions; - private PDPObligations pdpObligations; - private PDPUserDefinedPML pdpUserDefinedPML; + boolean prohibitionsEmpty = pap.query().prohibitions().getProhibitions().isEmpty(); + boolean obligationsEmpty = pap.query().obligations().getObligations().isEmpty(); - public PDPTx(UserContext userCtx, PAP pap, PolicyReviewer policyReviewer, List epps) throws PMException { - this.userCtx = userCtx; - this.adjudicator = new Adjudicator(userCtx, pap, policyReviewer); - this.pap = pap; - this.epps = epps; + return (nodes.isEmpty() || (nodes.size() == ALL_NODE_NAMES.size() && nodes.containsAll(ALL_NODE_NAMES))) && + prohibitionsEmpty && + obligationsEmpty; + } - this.pdpGraph = new PDPGraph(userCtx, adjudicator.graph(), pap, this); - this.pdpProhibitions = new PDPProhibitions(userCtx, adjudicator.prohibitions(), pap, this); - this.pdpObligations = new PDPObligations(userCtx, adjudicator.obligations(), pap, this); - this.pdpUserDefinedPML = new PDPUserDefinedPML(userCtx, adjudicator.userDefinedPML(), pap, this); - } + @Override + public void addEventListener(EventProcessor processor) { + eventProcessors.add(processor); + } - @Override - public void addEventListener(PolicyEventListener listener, boolean sync) throws PMException { - epps.add(listener); - - if (sync) { - listener.handlePolicyEvent(pap.policySync()); - } - } + @Override + public void removeEventListener(EventProcessor processor) { + eventProcessors.remove(processor); + } - @Override - public void removeEventListener(PolicyEventListener listener) { - epps.remove(listener); + @Override + public void emitEvent(EventContext event) throws PMException { + for (EventProcessor listener : eventProcessors) { + listener.processEvent(event); } + } - @Override - public void emitEvent(PolicyEvent event) throws PMException { - for (PolicyEventListener epp : epps) { - epp.handlePolicyEvent(event); - } + @Override + public ResourceAdjudicationResponse adjudicateResourceOperation(UserContext user, String target, String resourceOperation) throws PMException { + if (!pap.query().operations().getResourceOperations().contains(resourceOperation)) { + throw new OperationDoesNotExistException(resourceOperation); } - @Override - public void executePML(UserContext userContext, String input, FunctionDefinitionStatement... functionDefinitionStatements) throws PMException { - PMLExecutor.compileAndExecutePML(this, userContext, input, functionDefinitionStatements); + try { + PrivilegeChecker.check(pap, user, target, resourceOperation); + } catch (UnauthorizedException e) { + return new ResourceAdjudicationResponse(Decision.DENY); } - @Override - public Graph graph() { - return pdpGraph; - } + Node node = pap.query().graph().getNode(target); - @Override - public Prohibitions prohibitions() { - return pdpProhibitions; - } + emitEvent(new EventContext( + user.getUser(), + user.getProcess(), + resourceOperation, + Map.of("target", target), + List.of("target") + )); - @Override - public Obligations obligations() { - return pdpObligations; - } + return new ResourceAdjudicationResponse(Decision.GRANT, node); + } - @Override - public UserDefinedPML userDefinedPML() { - return pdpUserDefinedPML; + @Override + public AdminAdjudicationResponse adjudicateAdminOperations(UserContext user, List requests) throws PMException { + try { + runTx(user, tx -> { + PDPExecutionContext ctx = new PDPExecutionContext(user, tx); + + for (OperationRequest request : requests) { + Operation operation = pap.query() + .operations() + .getAdminOperation(request.name()); + + if (operation instanceof PMLOperation) { + ((PMLOperation)operation).setCtx(ctx); + } + + tx.executeAdminExecutable(operation, request.operands()); + + emitEvent(new EventContext( + user.getUser(), + user.getProcess(), + operation.getName(), + request.operands(), + operation.getNodeOperands() + )); + } + }); + } catch(UnauthorizedException e){ + return new AdminAdjudicationResponse(Decision.DENY); } - @Override - public PolicySerializer serialize() throws PMException { - adjudicator.serialize(); + return new AdminAdjudicationResponse(Decision.GRANT); + } - return pap.serialize(); - } + @Override + public AdminAdjudicationResponse adjudicateAdminRoutine(UserContext user, RoutineRequest request) throws PMException { + Routine adminRoutine = pap.query().routines().getAdminRoutine(request.name()); + runTx(user, tx -> { + PDPExecutionContext ctx = new PDPExecutionContext(user, tx); - @Override - public PolicyDeserializer deserialize() throws PMException { - adjudicator.deserialize(); + if (adminRoutine instanceof PMLRoutine) { + ((PMLRoutine)adminRoutine).setCtx(ctx); + } - return pap.deserialize(); - } + tx.executeAdminExecutable(adminRoutine, request.operands()); + }); - @Override - public void handlePolicyEvent(PolicyEvent event) throws PMException { - for (PolicyEventListener listener : epps) { - listener.handlePolicyEvent(event); - } - } + return new AdminAdjudicationResponse(Decision.GRANT); } } diff --git a/src/main/java/gov/nist/csd/pm/pdp/PDPEventEmitter.java b/src/main/java/gov/nist/csd/pm/pdp/PDPEventEmitter.java new file mode 100644 index 000000000..2ad719971 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pdp/PDPEventEmitter.java @@ -0,0 +1,34 @@ +package gov.nist.csd.pm.pdp; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.obligation.EventContext; +import gov.nist.csd.pm.epp.EventEmitter; +import gov.nist.csd.pm.epp.EventProcessor; + +import java.util.List; + +public class PDPEventEmitter implements EventEmitter { + + private List epps; + + public PDPEventEmitter(List epps) { + this.epps = epps; + } + + @Override + public void addEventListener(EventProcessor processor) { + this.epps.add(processor); + } + + @Override + public void removeEventListener(EventProcessor processor) { + this.epps.remove(processor); + } + + @Override + public void emitEvent(EventContext event) throws PMException { + for (EventProcessor epp : epps) { + epp.processEvent(event); + } + } +} diff --git a/src/main/java/gov/nist/csd/pm/pdp/PDPExecutionContext.java b/src/main/java/gov/nist/csd/pm/pdp/PDPExecutionContext.java new file mode 100644 index 000000000..31b4d5bf6 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pdp/PDPExecutionContext.java @@ -0,0 +1,70 @@ +package gov.nist.csd.pm.pdp; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.executable.AdminExecutable; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.scope.Scope; +import gov.nist.csd.pm.pap.pml.statement.PMLStatement; +import gov.nist.csd.pm.pap.pml.value.*; +import gov.nist.csd.pm.pap.query.UserContext; + +import java.util.List; +import java.util.Map; + +public class PDPExecutionContext extends ExecutionContext { + + private PDPTx pdpTx; + + public PDPExecutionContext(UserContext author, PDPTx pdpTx) throws PMException { + super(author, pdpTx.pap); + this.pdpTx = pdpTx; + } + + public PDPExecutionContext(UserContext author, PDPTx pdpTx, Scope> scope) throws PMException { + super(author, pdpTx.pap, scope); + this.pdpTx = pdpTx; + } + + @Override + public ExecutionContext copy() throws PMException { + return new PDPExecutionContext(author, pdpTx, scope); + } + + @Override + public Value executeStatements(List statements, Map operands) throws PMException { + ExecutionContext copy = writeOperandsToScope(operands); + + for (PMLStatement statement : statements) { + Value value = statement.execute(copy, pdpTx); + if (value instanceof ReturnValue || value instanceof BreakValue || value instanceof ContinueValue) { + return value; + } + } + + return new VoidValue(); + } + + @Override + public Value executeOperationStatements(List stmts, Map operands) throws PMException { + ExecutionContext copy = writeOperandsToScope(operands); + + // for operations, we don't want to use the PDPEC, just the normal one + // to avoid having access checks inside for loops when they call + // ctx.executeStatements() + ExecutionContext ctx = new ExecutionContext(copy.author(), pdpTx.pap, copy.scope()); + + for (PMLStatement statement : stmts) { + Value value = statement.execute(ctx, pdpTx.pap); + if (value instanceof ReturnValue || value instanceof BreakValue || value instanceof ContinueValue) { + return value; + } + } + + return new VoidValue(); + } + + @Override + public Value executeRoutineStatements(List stmts, Map operands) throws PMException { + return executeStatements(stmts, operands); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pdp/PDPGraph.java b/src/main/java/gov/nist/csd/pm/pdp/PDPGraph.java deleted file mode 100644 index d72b0c77f..000000000 --- a/src/main/java/gov/nist/csd/pm/pdp/PDPGraph.java +++ /dev/null @@ -1,314 +0,0 @@ -package gov.nist.csd.pm.pdp; - -import gov.nist.csd.pm.epp.EventContext; -import gov.nist.csd.pm.pap.PAP; -import gov.nist.csd.pm.pdp.adjudicator.GraphAdjudicator; -import gov.nist.csd.pm.policy.Graph; -import gov.nist.csd.pm.policy.events.*; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.AccessRightSet; -import gov.nist.csd.pm.policy.model.access.UserContext; -import gov.nist.csd.pm.policy.model.graph.nodes.Node; -import gov.nist.csd.pm.policy.model.graph.nodes.NodeType; -import gov.nist.csd.pm.policy.model.graph.relationships.Association; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import static gov.nist.csd.pm.policy.model.graph.nodes.Properties.NO_PROPERTIES; - -class PDPGraph implements Graph, PolicyEventEmitter { - - private UserContext userCtx; - private GraphAdjudicator adjudicator; - private PAP pap; - private PolicyEventListener listener; - - public PDPGraph(UserContext userCtx, GraphAdjudicator adjudicator, PAP pap, PolicyEventListener listener) { - this.userCtx = userCtx; - this.adjudicator = adjudicator; - this.pap = pap; - this.listener = listener; - } - - @Override - public void setResourceAccessRights(AccessRightSet accessRightSet) throws PMException { - adjudicator.setResourceAccessRights(accessRightSet); - - pap.graph().setResourceAccessRights(accessRightSet); - } - - @Override - public AccessRightSet getResourceAccessRights() throws PMException { - return pap.graph().getResourceAccessRights(); - } - - @Override - public String createPolicyClass(String name, Map properties) throws PMException { - adjudicator.createPolicyClass(name, properties); - - pap.graph().createPolicyClass(name, properties); - - emitEvent(new EventContext(userCtx, name, new CreatePolicyClassEvent(name, new HashMap<>()))); - - return name; - } - - @Override - public String createPolicyClass(String name) throws PMException { - return createPolicyClass(name, NO_PROPERTIES); - } - - @Override - public String createUserAttribute(String name, Map properties, String parent, String... parents) throws PMException { - adjudicator.createUserAttribute(name, properties, parent, parents); - - pap.graph().createUserAttribute(name, properties, parent, parents); - - CreateUserAttributeEvent event = - new CreateUserAttributeEvent(name, new HashMap<>(), parent, parents); - - emitCreateNodeEvent(event, name, parent, parents); - - return name; - } - - @Override - public String createUserAttribute(String name, String parent, String... parents) throws PMException { - return createUserAttribute(name, NO_PROPERTIES, parent, parents); - } - - @Override - public String createObjectAttribute(String name, Map properties, String parent, String... parents) throws PMException { - adjudicator.createObjectAttribute(name, properties, parent, parents); - - pap.graph().createObjectAttribute(name, properties, parent, parents); - - CreateObjectAttributeEvent event = - new CreateObjectAttributeEvent(name, new HashMap<>(), parent, parents); - - emitCreateNodeEvent(event, name, parent, parents); - - - return name; - } - - @Override - public String createObjectAttribute(String name, String parent, String... parents) throws PMException { - return createObjectAttribute(name, NO_PROPERTIES, parent, parents); - } - - @Override - public String createObject(String name, Map properties, String parent, String... parents) throws PMException { - adjudicator.createObject(name, properties, parent, parents); - - pap.graph().createObject(name, properties, parent, parents); - - CreateObjectEvent event = - new CreateObjectEvent(name, new HashMap<>(), parent, parents); - - emitCreateNodeEvent(event, name, parent, parents); - - return name; - } - - @Override - public String createObject(String name, String parent, String... parents) throws PMException { - return createObject(name, NO_PROPERTIES, parent, parents); - } - - @Override - public String createUser(String name, Map properties, String parent, String... parents) throws PMException { - adjudicator.createUser(name, properties, parent, parents); - - pap.graph().createUser(name, properties, parent, parents); - - CreateUserEvent event = new CreateUserEvent(name, new HashMap<>(), parent, parents); - - emitCreateNodeEvent(event, name, parent, parents); - - return name; - } - - @Override - public String createUser(String name, String parent, String... parents) throws PMException { - return createUser(name, NO_PROPERTIES, parent, parents); - } - - private void emitCreateNodeEvent(PolicyEvent event, String name, String parent, String ... parents) throws PMException { - // emit event for the new node - emitEvent(new EventContext(userCtx, name, event)); - - // emit event for creating a node in a parent - emitEvent(new EventContext(userCtx, parent, event)); - - // do the same for any additional parents - for (String p : parents) { - emitEvent(new EventContext(userCtx, p, event)); - } - } - - @Override - public void setNodeProperties(String name, Map properties) throws PMException { - adjudicator.setNodeProperties(name, properties); - - pap.graph().setNodeProperties(name, properties); - - emitEvent(new EventContext(userCtx, name, - new SetNodePropertiesEvent(name, properties))); - } - - @Override - public void deleteNode(String name) throws PMException { - adjudicator.deleteNode(name); - - // get parents of the deleted node before deleting to process event in the EPP - List parents = getParents(name); - - pap.graph().deleteNode(name); - - emitDeleteNodeEvent(new DeleteNodeEvent(name), name, parents); - } - - private void emitDeleteNodeEvent(PolicyEvent event, String name, List parents) throws PMException { - // emit delete node event on the deleted node - emitEvent(new EventContext(userCtx, name, event)); - - // emit delete node on each parent - for (String parent : parents) { - emitEvent(new EventContext(userCtx, parent, event)); - } - } - - @Override - public boolean nodeExists(String name) throws PMException { - return adjudicator.nodeExists(name); - } - - @Override - public Node getNode(String name) throws PMException { - return adjudicator.getNode(name); - } - - @Override - public List search(NodeType type, Map properties) throws PMException { - return adjudicator.search(type, properties); - } - - @Override - public List getPolicyClasses() throws PMException { - return pap.graph().getPolicyClasses(); - } - - @Override - public void assign(String child, String parent) throws PMException { - adjudicator.assign(child, parent); - - pap.graph().assign(child, parent); - - emitEvent(new EventContext(userCtx, child, - new AssignEvent(child, parent))); - emitEvent(new EventContext(userCtx, parent, - new AssignToEvent(child, parent))); - } - - @Override - public void deassign(String child, String parent) throws PMException { - adjudicator.deassign(child, parent); - - pap.graph().deassign(child, parent); - - emitEvent(new EventContext(userCtx, child, - new DeassignEvent(child, parent))); - emitEvent(new EventContext(userCtx, parent, - new DeassignFromEvent(child, parent))); - } - - @Override - public void assignAll(List children, String target) throws PMException { - adjudicator.assignAll(children, target); - - pap.graph().assignAll(children, target); - - emitEvent(new AssignAllEvent(children, target)); - } - - @Override - public void deassignAll(List children, String target) throws PMException { - adjudicator.assignAll(children, target); - - pap.graph().deassignAll(children, target); - - emitEvent(new DeassignAllEvent(children, target)); - } - - @Override - public void deassignAllFromAndDelete(String target) throws PMException { - adjudicator.deassignAllFromAndDelete(target); - - pap.graph().deassignAllFromAndDelete(target); - - emitEvent(new DeassignAllFromAndDeleteEvent(target)); - } - - @Override - public List getChildren(String node) throws PMException { - return adjudicator.getChildren(node); - } - - @Override - public void associate(String ua, String target, AccessRightSet accessRights) throws PMException { - adjudicator.associate(ua, target, accessRights); - - pap.graph().associate(ua, target, accessRights); - - emitEvent(new EventContext(userCtx, ua, - new AssociateEvent(ua, target, accessRights))); - emitEvent(new EventContext(userCtx, target, - new AssociateEvent(ua, target, accessRights))); - } - - @Override - public void dissociate(String ua, String target) throws PMException { - adjudicator.dissociate(ua, target); - - pap.graph().dissociate(ua, target); - - emitEvent(new EventContext(userCtx, ua, - new DissociateEvent(ua, target))); - emitEvent(new EventContext(userCtx, target, - new DissociateEvent(ua, target))); - } - - @Override - public List getParents(String node) throws PMException { - return adjudicator.getParents(node); - } - - @Override - public List getAssociationsWithSource(String ua) throws PMException { - return adjudicator.getAssociationsWithSource(ua); - } - - @Override - public List getAssociationsWithTarget(String target) throws PMException { - return adjudicator.getAssociationsWithTarget(target); - } - - - @Override - public void addEventListener(PolicyEventListener listener, boolean sync) throws PMException { - - } - - @Override - public void removeEventListener(PolicyEventListener listener) { - - } - - @Override - public void emitEvent(PolicyEvent event) throws PMException { - this.listener.handlePolicyEvent(event); - } -} diff --git a/src/main/java/gov/nist/csd/pm/pdp/PDPObligations.java b/src/main/java/gov/nist/csd/pm/pdp/PDPObligations.java deleted file mode 100644 index 711c76f09..000000000 --- a/src/main/java/gov/nist/csd/pm/pdp/PDPObligations.java +++ /dev/null @@ -1,141 +0,0 @@ -package gov.nist.csd.pm.pdp; - -import gov.nist.csd.pm.epp.EventContext; -import gov.nist.csd.pm.pap.PAP; -import gov.nist.csd.pm.pdp.adjudicator.ObligationsAdjudicator; -import gov.nist.csd.pm.policy.Obligations; -import gov.nist.csd.pm.policy.events.*; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.UserContext; -import gov.nist.csd.pm.policy.model.obligation.Obligation; -import gov.nist.csd.pm.policy.model.obligation.Rule; -import gov.nist.csd.pm.policy.model.obligation.event.EventSubject; -import gov.nist.csd.pm.policy.model.obligation.event.Target; - -import java.util.List; - -import static gov.nist.csd.pm.policy.model.obligation.event.EventSubject.Type.*; -import static gov.nist.csd.pm.policy.model.obligation.event.EventSubject.Type.PROCESS; -import static gov.nist.csd.pm.policy.model.obligation.event.Target.Type.*; -import static gov.nist.csd.pm.policy.model.obligation.event.Target.Type.ANY_OF_SET; - -class PDPObligations implements Obligations, PolicyEventEmitter { - private UserContext userCtx; - private ObligationsAdjudicator adjudicator; - private PAP pap; - private PolicyEventListener listener; - - public PDPObligations(UserContext userCtx, ObligationsAdjudicator adjudicator, PAP pap, PolicyEventListener listener) { - this.userCtx = userCtx; - this.adjudicator = adjudicator; - this.pap = pap; - this.listener = listener; - } - - @Override - public void create(UserContext author, String label, Rule... rules) throws PMException { - adjudicator.create(author, label, rules); - - pap.obligations().create(author, label, rules); - - emitObligationEvent(new CreateObligationEvent(author, label, List.of(rules)), rules); - } - - private void emitObligationEvent(PolicyEvent event, Rule... rules) throws PMException { - // emit events for each rule - for (Rule rule : rules) { - // emit event for the subject - EventSubject subject = rule.getEventPattern().getSubject(); - if (subject.getType() == ANY_USER) { - emitEvent(new EventContext(userCtx, "", event)); - } else if (subject.getType() == ANY_USER_WITH_ATTRIBUTE) { - emitEvent(new EventContext(userCtx, subject.anyUserWithAttribute(), event)); - } else if (subject.getType() == USERS) { - for (String user : subject.users()) { - emitEvent(new EventContext(userCtx, user, event)); - } - } else if (subject.getType() == PROCESS) { - emitEvent(new EventContext(userCtx, subject.process(), event)); - } - - // emit event for each target - Target target = rule.getEventPattern().getTarget(); - if (target.getType() == POLICY_ELEMENT) { - emitEvent(new EventContext(userCtx, target.policyElement(), event)); - } else if (target.getType() == ANY_POLICY_ELEMENT) { - emitEvent(new EventContext(userCtx, "", event)); - } else if (target.getType() == ANY_CONTAINED_IN) { - emitEvent(new EventContext(userCtx, target.anyContainedIn(), event)); - } else if (target.getType() == ANY_OF_SET) { - for (String policyElement : target.anyOfSet()) { - emitEvent(new EventContext(userCtx, policyElement, event)); - } - } - } - } - - @Override - public void update(UserContext author, String label, Rule... rules) throws PMException { - adjudicator.update(author, label, rules); - - pap.obligations().update(author, label, rules); - - emitObligationEvent( - new UpdateObligationEvent(author, label, List.of(rules)), - rules - ); - } - - @Override - public void delete(String label) throws PMException { - if (!exists(label)) { - return; - } - - adjudicator.delete(label); - - // get the obligation to use in the EPP before it is deleted - Obligation obligation = get(label); - - pap.obligations().delete(label); - - emitDeleteObligationEvent(obligation); - } - - private void emitDeleteObligationEvent(Obligation obligation) throws PMException { - emitObligationEvent( - new DeleteObligationEvent(obligation), - obligation.getRules().toArray(Rule[]::new) - ); - } - - @Override - public List getAll() throws PMException { - return adjudicator.getAll(); - } - - @Override - public boolean exists(String label) throws PMException { - return adjudicator.exists(label); - } - - @Override - public Obligation get(String label) throws PMException { - return adjudicator.get(label); - } - - @Override - public void addEventListener(PolicyEventListener listener, boolean sync) throws PMException { - - } - - @Override - public void removeEventListener(PolicyEventListener listener) { - - } - - @Override - public void emitEvent(PolicyEvent event) throws PMException { - this.listener.handlePolicyEvent(event); - } -} diff --git a/src/main/java/gov/nist/csd/pm/pdp/PDPProhibitions.java b/src/main/java/gov/nist/csd/pm/pdp/PDPProhibitions.java deleted file mode 100644 index b3de4c8be..000000000 --- a/src/main/java/gov/nist/csd/pm/pdp/PDPProhibitions.java +++ /dev/null @@ -1,133 +0,0 @@ -package gov.nist.csd.pm.pdp; - -import gov.nist.csd.pm.epp.EventContext; -import gov.nist.csd.pm.pap.PAP; -import gov.nist.csd.pm.pdp.adjudicator.ProhibitionsAdjudicator; -import gov.nist.csd.pm.policy.Prohibitions; -import gov.nist.csd.pm.policy.events.*; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.AccessRightSet; -import gov.nist.csd.pm.policy.model.access.UserContext; -import gov.nist.csd.pm.policy.model.prohibition.ContainerCondition; -import gov.nist.csd.pm.policy.model.prohibition.Prohibition; -import gov.nist.csd.pm.policy.model.prohibition.ProhibitionSubject; - -import java.util.List; -import java.util.Map; - -class PDPProhibitions implements Prohibitions, PolicyEventEmitter { - private UserContext userCtx; - private ProhibitionsAdjudicator adjudicator; - private PAP pap; - private PolicyEventListener listener; - - public PDPProhibitions(UserContext userCtx, ProhibitionsAdjudicator adjudicator, PAP pap, PolicyEventListener listener) { - this.userCtx = userCtx; - this.adjudicator = adjudicator; - this.pap = pap; - this.listener = listener; - } - - @Override - public void create(String label, ProhibitionSubject subject, AccessRightSet accessRightSet, boolean intersection, ContainerCondition... containerConditions) throws PMException { - adjudicator.create(label, subject, accessRightSet, intersection, containerConditions); - - pap.prohibitions().create(label, subject, accessRightSet, intersection, containerConditions); - - CreateProhibitionEvent createProhibitionEvent = new CreateProhibitionEvent( - label, subject, accessRightSet, intersection, List.of(containerConditions) - ); - - // emit event for subject - emitEvent(new EventContext(userCtx, subject.getName(), createProhibitionEvent)); - - // emit event for each container specified - for (ContainerCondition containerCondition : containerConditions) { - emitEvent(new EventContext(userCtx, containerCondition.name(), createProhibitionEvent)); - } - } - - @Override - public void update(String label, ProhibitionSubject subject, AccessRightSet accessRightSet, boolean intersection, ContainerCondition... containerConditions) throws PMException { - adjudicator.update(label, subject, accessRightSet, intersection, containerConditions); - - pap.prohibitions().update(label, subject, accessRightSet, intersection, containerConditions); - - UpdateProhibitionEvent updateProhibitionEvent = new UpdateProhibitionEvent( - label, subject, accessRightSet, intersection, List.of(containerConditions) - ); - - // emit event for subject - emitEvent(new EventContext(userCtx, subject.getName(), updateProhibitionEvent)); - - // emit event for each container specified - for (ContainerCondition containerCondition : containerConditions) { - emitEvent(new EventContext(userCtx, containerCondition.name(), updateProhibitionEvent)); - } - } - - @Override - public void delete(String label) throws PMException { - if (!exists(label)) { - return; - } - - adjudicator.delete(label); - - Prohibition prohibition = pap.prohibitions().get(label); - - pap.prohibitions().delete(label); - - emitDeleteProhibitionEvent(prohibition); - } - - private void emitDeleteProhibitionEvent(Prohibition prohibition) throws PMException { - ProhibitionSubject subject = prohibition.getSubject(); - List containerConditions = prohibition.getContainers(); - - DeleteProhibitionEvent deleteProhibitionEvent = new DeleteProhibitionEvent(prohibition); - - // emit event for subject - emitEvent(new EventContext(userCtx, subject.getName(), deleteProhibitionEvent)); - - // emit event for each container specified - for (ContainerCondition containerCondition : containerConditions) { - emitEvent(new EventContext(userCtx, containerCondition.name(), deleteProhibitionEvent)); - } - } - - @Override - public Map> getAll() throws PMException { - return adjudicator.getAll(); - } - - @Override - public boolean exists(String label) throws PMException { - return adjudicator.exists(label); - } - - @Override - public List getWithSubject(String subject) throws PMException { - return adjudicator.getWithSubject(subject); - } - - @Override - public Prohibition get(String label) throws PMException { - return adjudicator.get(label); - } - - @Override - public void addEventListener(PolicyEventListener listener, boolean sync) throws PMException { - - } - - @Override - public void removeEventListener(PolicyEventListener listener) { - - } - - @Override - public void emitEvent(PolicyEvent event) throws PMException { - this.listener.handlePolicyEvent(event); - } -} diff --git a/src/main/java/gov/nist/csd/pm/pdp/PDPTx.java b/src/main/java/gov/nist/csd/pm/pdp/PDPTx.java new file mode 100644 index 000000000..1f161983f --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pdp/PDPTx.java @@ -0,0 +1,160 @@ +package gov.nist.csd.pm.pdp; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.epp.EventProcessor; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.admin.AdminPolicyNode; +import gov.nist.csd.pm.pap.executable.AdminExecutable; +import gov.nist.csd.pm.pap.op.Operation; +import gov.nist.csd.pm.pap.op.PrivilegeChecker; +import gov.nist.csd.pm.pap.pml.PMLCompiler; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.executable.operation.PMLOperation; +import gov.nist.csd.pm.pap.pml.executable.routine.PMLRoutine; +import gov.nist.csd.pm.pap.pml.statement.PMLStatement; +import gov.nist.csd.pm.pap.pml.value.Value; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.routine.Routine; +import gov.nist.csd.pm.pap.serialization.PolicyDeserializer; +import gov.nist.csd.pm.pap.serialization.PolicySerializer; +import gov.nist.csd.pm.pdp.modification.PolicyModificationAdjudicator; +import gov.nist.csd.pm.pdp.query.PolicyQueryAdjudicator; + +import java.util.List; +import java.util.Map; + +import static gov.nist.csd.pm.pap.op.AdminAccessRights.*; + +public class PDPTx extends PAP { + + private final UserContext userCtx; + final PAP pap; + private final PDPEventEmitter eventEmitter; + + private final PolicyModificationAdjudicator pdpModifier; + private final PolicyQueryAdjudicator pdpQuerier; + + public PDPTx(UserContext userCtx, PAP pap, List epps) throws PMException { + super(pap); + + this.userCtx = userCtx; + this.pap = pap; + this.eventEmitter = new PDPEventEmitter(epps); + this.pdpModifier = new PolicyModificationAdjudicator(userCtx, pap, eventEmitter); + this.pdpQuerier = new PolicyQueryAdjudicator(userCtx, pap); + } + + public PolicyModificationAdjudicator modify() { + return pdpModifier; + } + + public PolicyQueryAdjudicator query() { + return pdpQuerier; + } + + @Override + public void setPMLOperations(Map pmlOperations) throws PMException { + PrivilegeChecker.check(pap, userCtx, AdminPolicyNode.ADMIN_POLICY_OBJECT.nodeName(), SET_PML_OPS); + + super.setPMLOperations(pmlOperations); + } + + @Override + public void setPMLOperations(PMLOperation... operations) throws PMException { + PrivilegeChecker.check(pap, userCtx, AdminPolicyNode.ADMIN_POLICY_OBJECT.nodeName(), SET_PML_OPS); + super.setPMLOperations(operations); + } + + @Override + public void setPMLRoutines(Map pmlRoutines) throws PMException { + PrivilegeChecker.check(pap, userCtx, AdminPolicyNode.ADMIN_POLICY_OBJECT.nodeName(), SET_PML_ROUTINES); + super.setPMLRoutines(pmlRoutines); + } + + @Override + public void setPMLRoutines(PMLRoutine... routines) throws PMException { + PrivilegeChecker.check(pap, userCtx, AdminPolicyNode.ADMIN_POLICY_OBJECT.nodeName(), SET_PML_ROUTINES); + super.setPMLRoutines(routines); + } + + @Override + public Map getPMLOperations() throws PMException { + PrivilegeChecker.check(pap, userCtx, AdminPolicyNode.ADMIN_POLICY_OBJECT.nodeName(), REVIEW_POLICY); + return super.getPMLOperations(); + } + + @Override + public Map getPMLRoutines() throws PMException { + PrivilegeChecker.check(pap, userCtx, AdminPolicyNode.ADMIN_POLICY_OBJECT.nodeName(), REVIEW_POLICY); + return super.getPMLRoutines(); + } + + @Override + public void setPMLConstants(Map pmlConstants) throws PMException { + PrivilegeChecker.check(pap, userCtx, AdminPolicyNode.ADMIN_POLICY_OBJECT.nodeName(), SET_PML_CONSTANTS); + super.setPMLConstants(pmlConstants); + } + + @Override + public Map getPMLConstants() throws PMException { + PrivilegeChecker.check(pap, userCtx, AdminPolicyNode.ADMIN_POLICY_OBJECT.nodeName(), REVIEW_POLICY); + return super.getPMLConstants(); + } + + @Override + public Object executeAdminExecutable(AdminExecutable adminExecutable, Map operands) throws PMException { + if (adminExecutable instanceof Routine routine) { + return routine.execute(this, operands); + } else if (adminExecutable instanceof Operation operation) { + operation.canExecute(pap, userCtx, operands); + return operation.execute(pap, operands); + } + + return adminExecutable.execute(pap, operands); + } + + @Override + public void reset() throws PMException { + PrivilegeChecker.check(pap, userCtx, AdminPolicyNode.ADMIN_POLICY_OBJECT.nodeName(), RESET); + + pap.reset(); + } + + @Override + public String serialize(PolicySerializer serializer) throws PMException { + PrivilegeChecker.check(pap, userCtx, AdminPolicyNode.ADMIN_POLICY_OBJECT.nodeName(), SERIALIZE_POLICY); + + return pap.serialize(serializer); + } + + @Override + public void deserialize(UserContext author, String input, PolicyDeserializer policyDeserializer) + throws PMException { + PrivilegeChecker.check(pap, userCtx, AdminPolicyNode.ADMIN_POLICY_OBJECT.nodeName(), DESERIALIZE_POLICY); + + pap.deserialize(author, input, policyDeserializer); + } + + public void executePML(UserContext author, String input) throws PMException { + PMLCompiler pmlCompiler = new PMLCompiler(pap); + List stmts = pmlCompiler.compilePML(input); + + ExecutionContext ctx = new PDPExecutionContext(author, this); + ctx.executeStatements(stmts, Map.of()); + } + + @Override + public void beginTx() throws PMException { + pap.beginTx(); + } + + @Override + public void commit() throws PMException { + pap.commit(); + } + + @Override + public void rollback() throws PMException { + pap.rollback(); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pdp/PDPTxRunner.java b/src/main/java/gov/nist/csd/pm/pdp/PDPTxRunner.java new file mode 100644 index 000000000..bd2f575e7 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pdp/PDPTxRunner.java @@ -0,0 +1,7 @@ +package gov.nist.csd.pm.pdp; + +import gov.nist.csd.pm.pap.exception.PMException; + +public interface PDPTxRunner { + void run(PDPTx policy) throws PMException; +} diff --git a/src/main/java/gov/nist/csd/pm/pdp/PDPUserDefinedPML.java b/src/main/java/gov/nist/csd/pm/pdp/PDPUserDefinedPML.java deleted file mode 100644 index 8c72c9e9f..000000000 --- a/src/main/java/gov/nist/csd/pm/pdp/PDPUserDefinedPML.java +++ /dev/null @@ -1,100 +0,0 @@ -package gov.nist.csd.pm.pdp; - -import gov.nist.csd.pm.epp.EventContext; -import gov.nist.csd.pm.pap.PAP; -import gov.nist.csd.pm.pdp.adjudicator.UserDefinedPMLAdjudicator; -import gov.nist.csd.pm.policy.UserDefinedPML; -import gov.nist.csd.pm.policy.events.*; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.UserContext; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; - -import java.util.Map; - -class PDPUserDefinedPML implements UserDefinedPML, PolicyEventEmitter { - private UserContext userCtx; - private UserDefinedPMLAdjudicator adjudicator; - private PAP pap; - private PolicyEventListener listener; - - public PDPUserDefinedPML(UserContext userCtx, UserDefinedPMLAdjudicator adjudicator, PAP pap, PolicyEventListener listener) { - this.userCtx = userCtx; - this.adjudicator = adjudicator; - this.pap = pap; - this.listener = listener; - } - - @Override - public void createFunction(FunctionDefinitionStatement functionDefinitionStatement) throws PMException { - adjudicator.createFunction(functionDefinitionStatement); - - pap.userDefinedPML().createFunction(functionDefinitionStatement); - - emitEvent(new EventContext(userCtx, new AddFunctionEvent(functionDefinitionStatement))); - } - - @Override - public void deleteFunction(String functionName) throws PMException { - adjudicator.deleteFunction(functionName); - - pap.userDefinedPML().deleteFunction(functionName); - - emitEvent(new EventContext(userCtx, new RemoveFunctionEvent(functionName))); - - } - - @Override - public Map getFunctions() throws PMException { - return pap.userDefinedPML().getFunctions(); - } - - @Override - public FunctionDefinitionStatement getFunction(String name) throws PMException { - return pap.userDefinedPML().getFunction(name); - } - - @Override - public void createConstant(String constantName, Value constantValue) throws PMException { - adjudicator.createConstant(constantName, constantValue); - - pap.userDefinedPML().createConstant(constantName, constantValue); - - emitEvent(new EventContext(userCtx, new AddConstantEvent(constantName, constantValue))); - - } - - @Override - public void deleteConstant(String constName) throws PMException { - adjudicator.deleteConstant(constName); - - pap.userDefinedPML().deleteConstant(constName); - - emitEvent(new EventContext(userCtx, new RemoveConstantEvent(constName))); - } - - @Override - public Map getConstants() throws PMException { - return pap.userDefinedPML().getConstants(); - } - - @Override - public Value getConstant(String name) throws PMException { - return pap.userDefinedPML().getConstant(name); - } - - @Override - public void addEventListener(PolicyEventListener listener, boolean sync) throws PMException { - - } - - @Override - public void removeEventListener(PolicyEventListener listener) { - - } - - @Override - public void emitEvent(PolicyEvent event) throws PMException { - this.listener.handlePolicyEvent(event); - } -} diff --git a/src/main/java/gov/nist/csd/pm/pdp/PMLBootstrapper.java b/src/main/java/gov/nist/csd/pm/pdp/PMLBootstrapper.java new file mode 100644 index 000000000..788ce97a2 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pdp/PMLBootstrapper.java @@ -0,0 +1,36 @@ +package gov.nist.csd.pm.pdp; + +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.pml.executable.operation.PMLOperation; +import gov.nist.csd.pm.pap.pml.executable.routine.PMLRoutine; +import gov.nist.csd.pm.pap.pml.value.Value; +import gov.nist.csd.pm.pap.query.UserContext; + +import java.util.List; +import java.util.Map; + +public class PMLBootstrapper implements PolicyBootstrapper { + + private UserContext boostrapper; + private String pml; + private List pmlOperations; + private List pmlRoutines; + private Map pmlConstants; + + public PMLBootstrapper(UserContext boostrapper, String pml, List pmlOperations, List pmlRoutines, Map pmlConstants) { + this.boostrapper = boostrapper; + this.pml = pml; + this.pmlOperations = pmlOperations; + this.pmlRoutines = pmlRoutines; + this.pmlConstants = pmlConstants; + } + + @Override + public void bootstrap(PAP pap) throws PMException { + pap.setPMLOperations(pmlOperations.toArray(PMLOperation[]::new)); + pap.setPMLRoutines(pmlRoutines.toArray(PMLRoutine[]::new)); + pap.setPMLConstants(pmlConstants); + pap.executePML(boostrapper, pml); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pdp/PolicyBootstrapper.java b/src/main/java/gov/nist/csd/pm/pdp/PolicyBootstrapper.java new file mode 100644 index 000000000..8b97fc45d --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pdp/PolicyBootstrapper.java @@ -0,0 +1,10 @@ +package gov.nist.csd.pm.pdp; + +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.exception.PMException; + +public interface PolicyBootstrapper { + + void bootstrap(PAP pap) throws PMException; + +} diff --git a/src/main/java/gov/nist/csd/pm/pdp/ResourceAdjudicationResponse.java b/src/main/java/gov/nist/csd/pm/pdp/ResourceAdjudicationResponse.java new file mode 100644 index 000000000..45de7f67f --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pdp/ResourceAdjudicationResponse.java @@ -0,0 +1,62 @@ +package gov.nist.csd.pm.pdp; + +import gov.nist.csd.pm.pap.graph.node.Node; + +import java.util.Objects; + +public class ResourceAdjudicationResponse { + + private Decision decision; + private Node resource; + + public ResourceAdjudicationResponse(Decision decision, Node resource) { + this.decision = decision; + this.resource = resource; + } + + public ResourceAdjudicationResponse(Decision decision) { + this.decision = decision; + } + + public Decision getDecision() { + return decision; + } + + public void setDecision(Decision decision) { + this.decision = decision; + } + + public Node getResource() { + return resource; + } + + public void setResource(Node resource) { + this.resource = resource; + } + + @Override + public boolean equals(Object obj) { + if (obj == this) { + return true; + } + if (obj == null || obj.getClass() != this.getClass()) { + return false; + } + var that = (ResourceAdjudicationResponse) obj; + return Objects.equals(this.decision, that.decision) && + Objects.equals(this.resource, that.resource); + } + + @Override + public int hashCode() { + return Objects.hash(decision, resource); + } + + @Override + public String toString() { + return "ResourceAdjudicationResponse[" + + "status=" + decision + ", " + + "node=" + resource + ']'; + } + +} diff --git a/src/main/java/gov/nist/csd/pm/pdp/RoutineRequest.java b/src/main/java/gov/nist/csd/pm/pdp/RoutineRequest.java new file mode 100644 index 000000000..b1fa2b8e0 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pdp/RoutineRequest.java @@ -0,0 +1,6 @@ +package gov.nist.csd.pm.pdp; + +import java.util.Map; + +public record RoutineRequest(String name, Map operands) { +} diff --git a/src/main/java/gov/nist/csd/pm/pdp/adjudicator/AccessRightChecker.java b/src/main/java/gov/nist/csd/pm/pdp/adjudicator/AccessRightChecker.java deleted file mode 100644 index 22f1ebdc0..000000000 --- a/src/main/java/gov/nist/csd/pm/pdp/adjudicator/AccessRightChecker.java +++ /dev/null @@ -1,46 +0,0 @@ -package gov.nist.csd.pm.pdp.adjudicator; - -import gov.nist.csd.pm.pap.PAP; -import gov.nist.csd.pm.pap.SuperPolicy; -import gov.nist.csd.pm.pdp.PolicyReviewer; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.exceptions.RepObjectNotSetException; -import gov.nist.csd.pm.policy.exceptions.UnauthorizedException; -import gov.nist.csd.pm.policy.model.access.AccessRightSet; -import gov.nist.csd.pm.policy.model.access.UserContext; -import gov.nist.csd.pm.policy.model.graph.nodes.Node; - -import java.util.Arrays; - -import static gov.nist.csd.pm.policy.model.graph.nodes.NodeType.PC; -import static gov.nist.csd.pm.policy.model.graph.nodes.Properties.REP_PROPERTY; - -public class AccessRightChecker { - - private final PAP pap; - private final PolicyReviewer policyReviewer; - - public AccessRightChecker(PAP pap, PolicyReviewer policyReviewer) { - this.pap = pap; - this.policyReviewer = policyReviewer; - } - - public void check(UserContext userCtx, String target, String... toCheck) throws PMException { - // if checking the permissions on a PC, check the permissions on the rep node for the PC - Node targetNode = pap.graph().getNode(target); - - if (targetNode.getType().equals(PC)) { - target = SuperPolicy.pcRepObjectAttribute(target); - } - - AccessRightSet accessRights = policyReviewer.getAccessRights(userCtx, target); - if(accessRights.isEmpty()) { - throw new UnauthorizedException(userCtx, target, toCheck); - } else { - if (!accessRights.containsAll(Arrays.asList(toCheck))) { - throw new UnauthorizedException(userCtx, target, toCheck); - } - } - } - -} diff --git a/src/main/java/gov/nist/csd/pm/pdp/adjudicator/Adjudicator.java b/src/main/java/gov/nist/csd/pm/pdp/adjudicator/Adjudicator.java deleted file mode 100644 index 74d0b58f9..000000000 --- a/src/main/java/gov/nist/csd/pm/pdp/adjudicator/Adjudicator.java +++ /dev/null @@ -1,70 +0,0 @@ -package gov.nist.csd.pm.pdp.adjudicator; - -import gov.nist.csd.pm.pap.PAP; -import gov.nist.csd.pm.pdp.PolicyReviewer; -import gov.nist.csd.pm.policy.Policy; -import gov.nist.csd.pm.policy.PolicyDeserializer; -import gov.nist.csd.pm.policy.PolicySerializer; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.UserContext; - -import static gov.nist.csd.pm.pap.SuperPolicy.SUPER_PC_REP; -import static gov.nist.csd.pm.policy.model.access.AdminAccessRights.FROM_STRING; -import static gov.nist.csd.pm.policy.model.access.AdminAccessRights.TO_STRING; - -public class Adjudicator implements Policy { - - private final UserContext userCtx; - private final PAP pap; - private final AccessRightChecker accessRightChecker; - - private final GraphAdjudicator graphAdjudicator; - private final ProhibitionsAdjudicator prohibitionsAdjudicator; - private final ObligationsAdjudicator obligationsAdjudicator; - private final UserDefinedPMLAdjudicator userDefinedPMLAdjudicator; - - public Adjudicator(UserContext userCtx, PAP pap, PolicyReviewer policyReviewer) { - this.userCtx = userCtx; - this.pap = pap; - this.accessRightChecker = new AccessRightChecker(pap, policyReviewer); - - graphAdjudicator = new GraphAdjudicator(userCtx, pap, accessRightChecker); - prohibitionsAdjudicator = new ProhibitionsAdjudicator(userCtx, pap, accessRightChecker); - obligationsAdjudicator = new ObligationsAdjudicator(userCtx, pap, accessRightChecker); - userDefinedPMLAdjudicator = new UserDefinedPMLAdjudicator(userCtx, pap, accessRightChecker); - } - - @Override - public GraphAdjudicator graph() { - return graphAdjudicator; - } - - @Override - public ProhibitionsAdjudicator prohibitions() { - return prohibitionsAdjudicator; - } - - @Override - public ObligationsAdjudicator obligations() { - return obligationsAdjudicator; - } - - @Override - public UserDefinedPMLAdjudicator userDefinedPML() { - return userDefinedPMLAdjudicator; - } - - @Override - public PolicySerializer serialize() throws PMException { - accessRightChecker.check(userCtx, SUPER_PC_REP, TO_STRING); - - return null; - } - - @Override - public PolicyDeserializer deserialize() throws PMException { - accessRightChecker.check(userCtx, SUPER_PC_REP, FROM_STRING); - - return null; - } -} diff --git a/src/main/java/gov/nist/csd/pm/pdp/adjudicator/GraphAdjudicator.java b/src/main/java/gov/nist/csd/pm/pdp/adjudicator/GraphAdjudicator.java deleted file mode 100644 index 5bc54ed5b..000000000 --- a/src/main/java/gov/nist/csd/pm/pdp/adjudicator/GraphAdjudicator.java +++ /dev/null @@ -1,450 +0,0 @@ -package gov.nist.csd.pm.pdp.adjudicator; - -import gov.nist.csd.pm.pap.PAP; -import gov.nist.csd.pm.pap.SuperPolicy; -import gov.nist.csd.pm.policy.Graph; -import gov.nist.csd.pm.policy.exceptions.NodeDoesNotExistException; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.exceptions.UnauthorizedException; -import gov.nist.csd.pm.policy.model.access.AccessRightSet; -import gov.nist.csd.pm.policy.model.access.UserContext; -import gov.nist.csd.pm.policy.model.graph.nodes.Node; -import gov.nist.csd.pm.policy.model.graph.nodes.NodeType; -import gov.nist.csd.pm.policy.model.graph.relationships.Association; -import gov.nist.csd.pm.policy.model.graph.relationships.InvalidAssignmentException; -import gov.nist.csd.pm.policy.model.graph.relationships.InvalidAssociationException; - -import java.util.List; -import java.util.Map; - -import static gov.nist.csd.pm.pap.SuperPolicy.SUPER_PC_REP; -import static gov.nist.csd.pm.policy.model.access.AdminAccessRights.*; -import static gov.nist.csd.pm.policy.model.graph.nodes.NodeType.PC; -import static gov.nist.csd.pm.policy.model.graph.nodes.Properties.NO_PROPERTIES; - -public class GraphAdjudicator implements Graph { - - private final UserContext userCtx; - private final PAP pap; - private final AccessRightChecker accessRightChecker; - - public GraphAdjudicator(UserContext userCtx, PAP pap, AccessRightChecker accessRightChecker) { - this.userCtx = userCtx; - this.pap = pap; - this.accessRightChecker = accessRightChecker; - } - - @Override - public void setResourceAccessRights(AccessRightSet accessRightSet) throws PMException { - accessRightChecker.check(userCtx, SUPER_PC_REP, SET_RESOURCE_ACCESS_RIGHTS); - } - - @Override - public AccessRightSet getResourceAccessRights() throws PMException { - return null; - } - - @Override - public String createPolicyClass(String name, Map properties) throws PMException { - // check that the user has the CREATE_POLICY_CLASS right on the super policy object - accessRightChecker.check(userCtx, SUPER_PC_REP, CREATE_POLICY_CLASS); - - return null; - } - - @Override - public String createPolicyClass(String name) throws PMException { - return createPolicyClass(name, NO_PROPERTIES); - } - - @Override - public String createUserAttribute(String name, Map properties, String parent, String... parents) throws PMException { - checkParents(CREATE_USER_ATTRIBUTE, parent); - checkParents(CREATE_USER_ATTRIBUTE, parents); - - return null; - } - - @Override - public String createUserAttribute(String name, String parent, String... parents) throws PMException { - return createUserAttribute(name, NO_PROPERTIES, parent, parents); - } - - @Override - public String createObjectAttribute(String name, Map properties, String parent, String... parents) throws PMException { - checkParents(CREATE_OBJECT_ATTRIBUTE, parent); - checkParents(CREATE_OBJECT_ATTRIBUTE, parents); - - return null; - } - - @Override - public String createObjectAttribute(String name, String parent, String... parents) throws PMException { - return createObjectAttribute(name, NO_PROPERTIES, parent, parents); - } - - @Override - public String createObject(String name, Map properties, String parent, String... parents) throws PMException { - checkParents(CREATE_OBJECT, parent); - checkParents(CREATE_OBJECT, parents); - - return null; - } - - @Override - public String createObject(String name, String parent, String... parents) throws PMException { - return createObject(name, NO_PROPERTIES, parent, parents); - } - - @Override - public String createUser(String name, Map properties, String parent, String... parents) throws PMException { - checkParents(CREATE_USER, parent); - checkParents(CREATE_USER, parents); - - return null; - } - - @Override - public String createUser(String name, String parent, String... parents) throws PMException { - return createUser(name, NO_PROPERTIES, parent, parents); - } - - private void checkParents(String accessRight, String ... parents) throws PMException { - for (String parent : parents) { - accessRightChecker.check(userCtx, parent, accessRight); - } - } - - @Override - public void setNodeProperties(String name, Map properties) throws PMException { - accessRightChecker.check(userCtx, name, SET_NODE_PROPERTIES); - } - - @Override - public boolean nodeExists(String name) throws PMException { - boolean exists = pap.graph().nodeExists(name); - if (!exists) { - return false; - } - - try { - accessRightChecker.check(userCtx, name); - return true; - } catch (UnauthorizedException e) { - return false; - } - } - - @Override - public Node getNode(String name) throws PMException { - // get node - Node node = pap.graph().getNode(name); - - // check user has permissions on the node - try { - accessRightChecker.check(userCtx, name); - } catch (UnauthorizedException e) { - // if no permissions, the user shouldn't know it exists - throw new NodeDoesNotExistException(name); - } - - return node; - } - - @Override - public List search(NodeType type, Map properties) throws PMException { - List search = pap.graph().search(type, properties); - search.removeIf(node -> { - try { - accessRightChecker.check(userCtx, node); - return false; - } catch (PMException e) { - return true; - } - }); - - return search; - } - - @Override - public List getPolicyClasses() throws PMException { - List policyClasses = pap.graph().getPolicyClasses(); - policyClasses.removeIf(pc -> { - try { - accessRightChecker.check(userCtx, SuperPolicy.pcRepObjectAttribute(pc)); - return false; - } catch (PMException e) { - return true; - } - }); - - return policyClasses; - } - - @Override - public void deleteNode(String name) throws PMException { - NodeType nodeType = pap.graph().getNode(name).getType(); - - if (nodeType == PC) { - accessRightChecker.check(userCtx, SuperPolicy.pcRepObjectAttribute(name), DELETE_POLICY_CLASS); - return; - } - - String op = switch (nodeType) { - case OA -> DELETE_OBJECT_ATTRIBUTE; - case UA -> DELETE_USER_ATTRIBUTE; - case O -> DELETE_OBJECT; - case U -> DELETE_USER; - default -> DELETE_POLICY_CLASS; - }; - - // check the user can delete the node - accessRightChecker.check(userCtx, name, op); - - // check that the user can delete the node from the node's parents - List parents = pap.graph().getParents(name); - - for(String parent : parents) { - accessRightChecker.check(userCtx, parent, op); - } - } - - @Override - public void assign(String child, String parent) throws PMException { - Node childNode = pap.graph().getNode(child); - Node parentNode = pap.graph().getNode(parent); - - String childAR = switch (childNode.getType()) { - case OA -> ASSIGN_OBJECT_ATTRIBUTE; - case UA -> ASSIGN_USER_ATTRIBUTE; - case O -> ASSIGN_OBJECT; - case U -> ASSIGN_USER; - default -> throw new IllegalArgumentException("cannot assign node of type " + childNode.getType()); - }; - - String parentAR = switch (parentNode.getType()) { - case OA -> ASSIGN_TO_OBJECT_ATTRIBUTE; - case UA -> ASSIGN_TO_USER_ATTRIBUTE; - case PC -> ASSIGN_TO_POLICY_CLASS; - default -> throw new IllegalArgumentException("cannot assign to a node of type " + parentNode.getType()); - }; - - //check the user can assign the child - accessRightChecker.check(userCtx, child, childAR); - - // check that the user can assign to the parent node - accessRightChecker.check(userCtx, parent, parentAR); - } - - @Override - public void deassign(String child, String parent) throws PMException { - Node childNode = pap.graph().getNode(child); - Node parentNode = pap.graph().getNode(parent); - - String childAR = switch (childNode.getType()) { - case OA -> DEASSIGN_OBJECT_ATTRIBUTE; - case UA -> DEASSIGN_USER_ATTRIBUTE; - case O -> DEASSIGN_OBJECT; - case U -> DEASSIGN_USER; - default -> throw new InvalidAssignmentException("cannot deassign node of type " + childNode.getType()); - }; - - String parentAR = switch (parentNode.getType()) { - case OA -> DEASSIGN_FROM_OBJECT_ATTRIBUTE; - case UA -> DEASSIGN_FROM_USER_ATTRIBUTE; - case PC -> DEASSIGN_FROM_POLICY_CLASS; - default -> throw new InvalidAssignmentException("cannot deassign from a node of type " + parentNode.getType()); - }; - - //check the user can deassign the child - accessRightChecker.check(userCtx, child, childAR); - - // check that the user can deassign from the parent node - accessRightChecker.check(userCtx, parent, parentAR); - } - - @Override - public void assignAll(List children, String target) throws PMException { - Node parentNode = pap.graph().getNode(target); - - String parentAR = switch (parentNode.getType()) { - case OA -> ASSIGN_TO_OBJECT_ATTRIBUTE; - case UA -> ASSIGN_TO_USER_ATTRIBUTE; - case PC -> ASSIGN_TO_POLICY_CLASS; - default -> throw new IllegalArgumentException("cannot assign to a node of type " + parentNode.getType()); - }; - - // check user can assign to parent - accessRightChecker.check(userCtx, target, parentAR); - - // check the user can assign each child - for (String child : children) { - Node childNode = pap.graph().getNode(child); - - String childAR = switch (childNode.getType()) { - case OA -> ASSIGN_OBJECT_ATTRIBUTE; - case UA -> ASSIGN_USER_ATTRIBUTE; - case O -> ASSIGN_OBJECT; - case U -> ASSIGN_USER; - default -> throw new IllegalArgumentException("cannot assign node of type " + childNode.getType()); - }; - - accessRightChecker.check(userCtx, child, childAR); - } - } - - @Override - public void deassignAll(List children, String target) throws PMException { - Node parentNode = pap.graph().getNode(target); - - String parentAR = switch (parentNode.getType()) { - case OA -> DEASSIGN_FROM_OBJECT_ATTRIBUTE; - case UA -> DEASSIGN_FROM_USER_ATTRIBUTE; - case PC -> DEASSIGN_FROM_POLICY_CLASS; - default -> throw new InvalidAssignmentException("cannot deassign from a node of type " + parentNode.getType()); - }; - - // check user can deassign from parent - accessRightChecker.check(userCtx, target, parentAR); - - // check the user can deassign each child - for (String child : children) { - Node childNode = pap.graph().getNode(child); - - String childAR = switch (childNode.getType()) { - case OA -> DEASSIGN_OBJECT_ATTRIBUTE; - case UA -> DEASSIGN_USER_ATTRIBUTE; - case O -> DEASSIGN_OBJECT; - case U -> DEASSIGN_USER; - default -> throw new InvalidAssignmentException("cannot deassign node of type " + childNode.getType()); - }; - - accessRightChecker.check(userCtx, child, childAR); - } - } - - @Override - public void deassignAllFromAndDelete(String target) throws PMException { - Node parentNode = pap.graph().getNode(target); - - String parentAR = switch (parentNode.getType()) { - case OA -> DEASSIGN_FROM_OBJECT_ATTRIBUTE; - case UA -> DEASSIGN_FROM_USER_ATTRIBUTE; - case PC -> DEASSIGN_FROM_POLICY_CLASS; - default -> throw new InvalidAssignmentException("cannot deassign from a node of type " + parentNode.getType()); - }; - - // check user can deassign from parent - accessRightChecker.check(userCtx, target, parentAR); - - parentAR = switch (parentNode.getType()) { - case OA -> DELETE_OBJECT_ATTRIBUTE; - case UA -> DELETE_USER_ATTRIBUTE; - case O -> DELETE_OBJECT; - case U -> DELETE_USER; - default -> DELETE_POLICY_CLASS; - }; - - // check the user can delete the target - accessRightChecker.check(userCtx, target, parentAR); - - // check the user can deassign each child - for (String child : pap.graph().getChildren(target)) { - Node childNode = pap.graph().getNode(child); - - String childAR = switch (childNode.getType()) { - case OA -> DEASSIGN_OBJECT_ATTRIBUTE; - case UA -> DEASSIGN_USER_ATTRIBUTE; - case O -> DEASSIGN_OBJECT; - case U -> DEASSIGN_USER; - default -> throw new InvalidAssignmentException("cannot deassign node of type " + childNode.getType()); - }; - - accessRightChecker.check(userCtx, child, childAR); - } - } - - @Override - public List getParents(String node) throws PMException { - List parents = pap.graph().getParents(node); - parents.removeIf(parent -> { - try { - accessRightChecker.check(userCtx, parent); - return false; - } catch (PMException e) { - return true; - } - }); - - return parents; - } - - @Override - public List getChildren(String node) throws PMException { - List children = pap.graph().getChildren(node); - children.removeIf(child -> { - try { - accessRightChecker.check(userCtx, child); - return false; - } catch (PMException e) { - return true; - } - }); - - return children; - } - - @Override - public void associate(String ua, String target, AccessRightSet accessRights) throws PMException { - Node targetNode = pap.graph().getNode(target); - - String targetAR = switch (targetNode.getType()) { - case OA -> DISSOCIATE_OBJECT_ATTRIBUTE; - case UA -> DISSOCIATE_USER_ATTRIBUTE; - default -> throw new InvalidAssociationException("cannot associate a target node of type " + targetNode.getType()); - }; - - //check the user can associate the source and target nodes - accessRightChecker.check(userCtx, ua, ASSOCIATE_USER_ATTRIBUTE); - accessRightChecker.check(userCtx, target, targetAR); - } - - @Override - public void dissociate(String ua, String target) throws PMException { - Node targetNode = pap.graph().getNode(target); - - String targetAR = switch (targetNode.getType()) { - case OA -> DISSOCIATE_OBJECT_ATTRIBUTE; - case UA -> DISSOCIATE_USER_ATTRIBUTE; - default -> throw new InvalidAssociationException("cannot dissociate a target node of type " + targetNode.getType()); - }; - - //check the user can dissociate the source and target nodes - accessRightChecker.check(userCtx, ua, DISSOCIATE_USER_ATTRIBUTE); - accessRightChecker.check(userCtx, target, targetAR); - } - - @Override - public List getAssociationsWithSource(String ua) throws PMException { - return getAssociations(pap.graph().getAssociationsWithSource(ua)); - } - - @Override - public List getAssociationsWithTarget(String target) throws PMException { - return getAssociations(pap.graph().getAssociationsWithTarget(target)); - } - - private List getAssociations(List associations) { - associations.removeIf(association -> { - try { - accessRightChecker.check(userCtx, association.getSource(), GET_ASSOCIATIONS); - accessRightChecker.check(userCtx, association.getTarget(), GET_ASSOCIATIONS); - return false; - } catch (PMException e) { - return true; - } - }); - - return associations; - } -} diff --git a/src/main/java/gov/nist/csd/pm/pdp/adjudicator/ObligationsAdjudicator.java b/src/main/java/gov/nist/csd/pm/pdp/adjudicator/ObligationsAdjudicator.java deleted file mode 100644 index b3253d475..000000000 --- a/src/main/java/gov/nist/csd/pm/pdp/adjudicator/ObligationsAdjudicator.java +++ /dev/null @@ -1,137 +0,0 @@ -package gov.nist.csd.pm.pdp.adjudicator; - -import gov.nist.csd.pm.pap.PAP; -import gov.nist.csd.pm.policy.Obligations; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.exceptions.UnauthorizedException; -import gov.nist.csd.pm.policy.model.access.UserContext; -import gov.nist.csd.pm.policy.model.obligation.Obligation; -import gov.nist.csd.pm.policy.model.obligation.Rule; -import gov.nist.csd.pm.policy.model.obligation.event.EventSubject; -import gov.nist.csd.pm.policy.model.obligation.event.Target; - -import java.util.List; - -import static gov.nist.csd.pm.pap.SuperPolicy.SUPER_PC_REP; -import static gov.nist.csd.pm.policy.model.access.AdminAccessRights.*; -import static gov.nist.csd.pm.policy.model.access.AdminAccessRights.DELETE_OBLIGATION; - -public class ObligationsAdjudicator implements Obligations { - private final UserContext userCtx; - private final PAP pap; - private final AccessRightChecker accessRightChecker; - - public ObligationsAdjudicator(UserContext userCtx, PAP pap, AccessRightChecker accessRightChecker) { - this.userCtx = userCtx; - this.pap = pap; - this.accessRightChecker = accessRightChecker; - } - - @Override - public void create(UserContext author, String label, Rule... rules) throws PMException { - for (Rule rule : rules) { - EventSubject subject = rule.getEventPattern().getSubject(); - checkSubject(subject, CREATE_OBLIGATION); - - Target target = rule.getEventPattern().getTarget(); - checkTarget(target, CREATE_OBLIGATION); - } - } - - private void checkTarget(Target target, String accessRight) throws PMException { - if (target.getType() == Target.Type.POLICY_ELEMENT) { - accessRightChecker.check(userCtx, target.policyElement(), accessRight); - } else if (target.getType() == Target.Type.ANY_POLICY_ELEMENT) { - accessRightChecker.check(userCtx, SUPER_PC_REP, accessRight); - } else if (target.getType() == Target.Type.ANY_CONTAINED_IN) { - accessRightChecker.check(userCtx, target.anyContainedIn(), accessRight); - } else if (target.getType() == Target.Type.ANY_OF_SET) { - for (String policyElement : target.anyOfSet()) { - accessRightChecker.check(userCtx, policyElement, accessRight); - } - } - } - - private void checkSubject(EventSubject subject, String accessRight) throws PMException { - if (subject.getType() == EventSubject.Type.ANY_USER) { - accessRightChecker.check(userCtx, SUPER_PC_REP, accessRight); - } else if (subject.getType() == EventSubject.Type.ANY_USER_WITH_ATTRIBUTE) { - accessRightChecker.check(userCtx, subject.anyUserWithAttribute(), accessRight); - } else if (subject.getType() == EventSubject.Type.PROCESS) { - // need permissions on super object create a process obligation - accessRightChecker.check(userCtx, SUPER_PC_REP, accessRight); - } else if (subject.getType() == EventSubject.Type.USERS) { - for (String user : subject.users()) { - accessRightChecker.check(userCtx, user, accessRight); - } - } - } - - @Override - public void update(UserContext author, String label, Rule... rules) throws PMException { - create(author, label, rules); - } - - @Override - public void delete(String label) throws PMException { - Obligation obligation = pap.obligations().get(label); - for (Rule rule : obligation.getRules()) { - EventSubject subject = rule.getEventPattern().getSubject(); - checkSubject(subject, DELETE_OBLIGATION); - - Target target = rule.getEventPattern().getTarget(); - checkTarget(target, DELETE_OBLIGATION); - } - } - - @Override - public List getAll() throws PMException { - List obligations = pap.obligations().getAll(); - obligations.removeIf(obligation -> { - try { - for (Rule rule : obligation.getRules()) { - EventSubject subject = rule.getEventPattern().getSubject(); - checkSubject(subject, GET_OBLIGATION); - - Target target = rule.getEventPattern().getTarget(); - checkTarget(target, GET_OBLIGATION); - } - return false; - } catch (PMException e) { - return true; - } - }); - - return obligations; - } - - @Override - public boolean exists(String label) throws PMException { - boolean exists = pap.obligations().exists(label); - if (!exists) { - return false; - } - - try { - get(label); - } catch (UnauthorizedException e) { - return false; - } - - return true; - } - - @Override - public Obligation get(String label) throws PMException { - Obligation obligation = pap.obligations().get(label); - for (Rule rule : obligation.getRules()) { - EventSubject subject = rule.getEventPattern().getSubject(); - checkSubject(subject, GET_OBLIGATION); - - Target target = rule.getEventPattern().getTarget(); - checkTarget(target, GET_OBLIGATION); - } - - return obligation; - } -} diff --git a/src/main/java/gov/nist/csd/pm/pdp/adjudicator/ProhibitionsAdjudicator.java b/src/main/java/gov/nist/csd/pm/pdp/adjudicator/ProhibitionsAdjudicator.java deleted file mode 100644 index edcb590f4..000000000 --- a/src/main/java/gov/nist/csd/pm/pdp/adjudicator/ProhibitionsAdjudicator.java +++ /dev/null @@ -1,155 +0,0 @@ -package gov.nist.csd.pm.pdp.adjudicator; - -import gov.nist.csd.pm.pap.PAP; -import gov.nist.csd.pm.policy.Prohibitions; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.exceptions.UnauthorizedException; -import gov.nist.csd.pm.policy.model.access.AccessRightSet; -import gov.nist.csd.pm.policy.model.access.UserContext; -import gov.nist.csd.pm.policy.model.prohibition.ContainerCondition; -import gov.nist.csd.pm.policy.model.prohibition.Prohibition; -import gov.nist.csd.pm.policy.model.prohibition.ProhibitionSubject; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import static gov.nist.csd.pm.pap.SuperPolicy.SUPER_PC_REP; -import static gov.nist.csd.pm.policy.model.access.AdminAccessRights.*; -import static gov.nist.csd.pm.policy.model.access.AdminAccessRights.ADD_CONTAINER_COMPLEMENT_TO_PROHIBITION; - -public class ProhibitionsAdjudicator implements Prohibitions { - private final UserContext userCtx; - private final PAP pap; - private final AccessRightChecker accessRightChecker; - - public ProhibitionsAdjudicator(UserContext userCtx, PAP pap, AccessRightChecker accessRightChecker) { - this.userCtx = userCtx; - this.pap = pap; - this.accessRightChecker = accessRightChecker; - } - - @Override - public void create(String label, ProhibitionSubject subject, AccessRightSet accessRightSet, boolean intersection, ContainerCondition... containerConditions) throws PMException { - if (subject.getType() == ProhibitionSubject.Type.PROCESS) { - accessRightChecker.check(userCtx, SUPER_PC_REP, CREATE_PROCESS_PROHIBITION); - } else { - accessRightChecker.check(userCtx, subject.getName(), CREATE_PROHIBITION); - } - - - // check that the user can create a prohibition for each container in the condition - for (ContainerCondition contCond : containerConditions) { - accessRightChecker.check(userCtx, contCond.name(), ADD_CONTAINER_TO_PROHIBITION); - - // there is another access right needed if the condition is a complement - if (contCond.complement()) { - accessRightChecker.check(userCtx, SUPER_PC_REP, ADD_CONTAINER_COMPLEMENT_TO_PROHIBITION); - } - } - } - - @Override - public void update(String label, ProhibitionSubject subject, AccessRightSet accessRightSet, boolean intersection, ContainerCondition... containerConditions) throws PMException { - create(label, subject, accessRightSet, intersection, containerConditions); - } - - @Override - public void delete(String label) throws PMException { - Prohibition prohibition = pap.prohibitions().get(label); - - // check that the user can create a prohibition for the subject - if (prohibition.getSubject().getType() == ProhibitionSubject.Type.PROCESS) { - accessRightChecker.check(userCtx, SUPER_PC_REP, DELETE_PROCESS_PROHIBITION); - } else { - accessRightChecker.check(userCtx, prohibition.getSubject().getName(), DELETE_PROHIBITION); - } - - // check that the user can create a prohibition for each container in the condition - for (ContainerCondition contCond : prohibition.getContainers()) { - accessRightChecker.check(userCtx, contCond.name(), REMOVE_CONTAINER_FROM_PROHIBITION); - - // there is another access right needed if the condition is a complement - if (contCond.complement()) { - accessRightChecker.check(userCtx, SUPER_PC_REP, REMOVE_CONTAINER_COMPLEMENT_FROM_PROHIBITION); - } - } - } - - @Override - public Map> getAll() throws PMException { - Map> prohibitions = pap.prohibitions().getAll(); - Map> retProhibitions = new HashMap<>(); - for (String subject : prohibitions.keySet()) { - List subjectPros = filterProhibitions(prohibitions.get(subject)); - retProhibitions.put(subject, subjectPros); - } - - return retProhibitions; - } - - @Override - public boolean exists(String label) throws PMException { - boolean exists = pap.prohibitions().exists(label); - if (!exists) { - return false; - } - - try { - get(label); - } catch (UnauthorizedException e) { - return false; - } - - - return true; - } - - @Override - public List getWithSubject(String subject) throws PMException { - return filterProhibitions(pap.prohibitions().getWithSubject(subject)); - } - - @Override - public Prohibition get(String label) throws PMException { - Prohibition prohibition = pap.prohibitions().get(label); - - // check user has access to subject prohibitions - if (prohibition.getSubject().getType() == ProhibitionSubject.Type.PROCESS) { - accessRightChecker.check(userCtx, SUPER_PC_REP, GET_PROCESS_PROHIBITIONS); - } else { - accessRightChecker.check(userCtx, prohibition.getSubject().getName(), GET_PROHIBITIONS); - } - - // check user has access to each target prohibitions - for (ContainerCondition containerCondition : prohibition.getContainers()) { - accessRightChecker.check(userCtx, containerCondition.name(), GET_PROHIBITIONS); - } - - return prohibition; - } - - private List filterProhibitions(List prohibitions) { - prohibitions.removeIf(prohibition -> { - try { - // check user has access to subject prohibitions - if (prohibition.getSubject().getType() == ProhibitionSubject.Type.PROCESS) { - accessRightChecker.check(userCtx, SUPER_PC_REP, GET_PROCESS_PROHIBITIONS); - } else { - accessRightChecker.check(userCtx, prohibition.getSubject().getName(), GET_PROHIBITIONS); - } - - // check user has access to each target prohibitions - for (ContainerCondition containerCondition : prohibition.getContainers()) { - accessRightChecker.check(userCtx, containerCondition.name(), GET_PROHIBITIONS); - } - - return false; - } catch (PMException e) { - return true; - } - }); - - return prohibitions; - } -} diff --git a/src/main/java/gov/nist/csd/pm/pdp/adjudicator/UserDefinedPMLAdjudicator.java b/src/main/java/gov/nist/csd/pm/pdp/adjudicator/UserDefinedPMLAdjudicator.java deleted file mode 100644 index 7d34b2b42..000000000 --- a/src/main/java/gov/nist/csd/pm/pdp/adjudicator/UserDefinedPMLAdjudicator.java +++ /dev/null @@ -1,69 +0,0 @@ -package gov.nist.csd.pm.pdp.adjudicator; - -import gov.nist.csd.pm.pap.PAP; -import gov.nist.csd.pm.policy.UserDefinedPML; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.UserContext; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; - -import java.util.Map; - -import static gov.nist.csd.pm.pap.SuperPolicy.SUPER_PC_REP; -import static gov.nist.csd.pm.policy.model.access.AdminAccessRights.*; - -public class UserDefinedPMLAdjudicator implements UserDefinedPML { - private final UserContext userCtx; - private final PAP pap; - private final AccessRightChecker accessRightChecker; - - public UserDefinedPMLAdjudicator(UserContext userCtx, PAP pap, AccessRightChecker accessRightChecker) { - this.userCtx = userCtx; - this.pap = pap; - this.accessRightChecker = accessRightChecker; - } - - @Override - public void createFunction(FunctionDefinitionStatement functionDefinitionStatement) throws PMException { - accessRightChecker.check(userCtx, SUPER_PC_REP, ADD_FUNCTION); - } - - @Override - public void deleteFunction(String functionName) throws PMException { - accessRightChecker.check(userCtx, SUPER_PC_REP, REMOVE_FUNCTION); - } - - @Override - public Map getFunctions() throws PMException { - // accessRightChecker.check(userCtx, SUPER_PC_REP, GET_FUNCTIONS); - - return null; - } - - @Override - public FunctionDefinitionStatement getFunction(String name) throws PMException { - return null; - } - - @Override - public void createConstant(String constantName, Value constantValue) throws PMException { - accessRightChecker.check(userCtx, SUPER_PC_REP, ADD_CONSTANT); - } - - @Override - public void deleteConstant(String constName) throws PMException { - accessRightChecker.check(userCtx, SUPER_PC_REP, REMOVE_CONSTANT); - } - - @Override - public Map getConstants() throws PMException { - // accessRightChecker.check(userCtx, SUPER_PC_REP, GET_CONSTANTS); - - return null; - } - - @Override - public Value getConstant(String name) throws PMException { - return null; - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/exceptions/UnauthorizedException.java b/src/main/java/gov/nist/csd/pm/pdp/exception/UnauthorizedException.java similarity index 70% rename from src/main/java/gov/nist/csd/pm/policy/exceptions/UnauthorizedException.java rename to src/main/java/gov/nist/csd/pm/pdp/exception/UnauthorizedException.java index e6b29218c..6b57ff5c2 100644 --- a/src/main/java/gov/nist/csd/pm/policy/exceptions/UnauthorizedException.java +++ b/src/main/java/gov/nist/csd/pm/pdp/exception/UnauthorizedException.java @@ -1,6 +1,7 @@ -package gov.nist.csd.pm.policy.exceptions; +package gov.nist.csd.pm.pdp.exception; -import gov.nist.csd.pm.policy.model.access.UserContext; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.exception.PMException; import java.util.Arrays; diff --git a/src/main/java/gov/nist/csd/pm/pdp/memory/BulkPolicyReviewer.java b/src/main/java/gov/nist/csd/pm/pdp/memory/BulkPolicyReviewer.java deleted file mode 100644 index 747c10744..000000000 --- a/src/main/java/gov/nist/csd/pm/pdp/memory/BulkPolicyReviewer.java +++ /dev/null @@ -1,126 +0,0 @@ -package gov.nist.csd.pm.pdp.memory; - -import gov.nist.csd.pm.pap.PAP; -import gov.nist.csd.pm.pap.memory.dag.DepthFirstGraphWalker; -import gov.nist.csd.pm.policy.Policy; -import gov.nist.csd.pm.policy.events.PolicyEvent; -import gov.nist.csd.pm.policy.events.PolicyEventListener; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.AccessRightSet; -import gov.nist.csd.pm.policy.model.access.UserContext; -import gov.nist.csd.pm.policy.model.graph.dag.TargetDagResult; -import gov.nist.csd.pm.policy.model.graph.dag.UserDagResult; -import gov.nist.csd.pm.policy.model.graph.dag.propagator.Propagator; -import gov.nist.csd.pm.policy.model.graph.dag.visitor.Visitor; -import gov.nist.csd.pm.policy.model.graph.dag.walker.Direction; - -import java.util.*; - -public class BulkPolicyReviewer extends MemoryPolicyReviewer { - - private final UserDagEventListener userDagEventListener; - private final PAP pap; - private Map> visitedNodes = new HashMap<>(); - - public BulkPolicyReviewer(UserContext userCtx, PAP pap) throws PMException { - super(pap); - this.pap = pap; - - this.userDagEventListener = new UserDagEventListener(userCtx, pap); - pap.addEventListener(userDagEventListener, true); - } - - @Override - public AccessRightSet getAccessRights(UserContext userCtx, String target) throws PMException { - AccessRightSet accessRights = new AccessRightSet(); - - UserDagResult userDagResult = userDagEventListener.userDagResult; - - if (userDagResult.borderTargets().isEmpty()) { - return accessRights; - } - - TargetDagResult targetDagResult = processTargetDAG(target, userDagResult); - - return resolvePermissions(userDagResult, targetDagResult, target, pap.graph().getResourceAccessRights()); - } - - @Override - protected TargetDagResult processTargetDAG(String target, UserDagResult userCtx) throws PMException { - Map borderTargets = userCtx.borderTargets(); - Set reachedTargets = new HashSet<>(); - - Visitor visitor = node -> { - // mark the node as reached, to be used for resolving prohibitions - if (userCtx.prohibitionTargets().contains(node)) { - reachedTargets.add(node); - } - - Map nodeCtx = visitedNodes.getOrDefault(node, new HashMap<>()); - if (nodeCtx.isEmpty()) { - visitedNodes.put(node, nodeCtx); - } - - if (userDagEventListener.policyClasses.contains(node)) { - nodeCtx.put(node, new AccessRightSet()); - } else if (borderTargets.containsKey(node)) { - Set uaOps = borderTargets.get(node); - for (Map.Entry pc : nodeCtx.entrySet()) { - AccessRightSet pcOps = pc.getValue(); - pcOps.addAll(uaOps); - nodeCtx.put(pc.getKey(), pcOps); - } - } - }; - - Propagator propagator = (parent, child) -> { - Map parentCtx = visitedNodes.get(parent); - Map nodeCtx = visitedNodes.getOrDefault(child, new HashMap<>()); - - for (Map.Entry entry : parentCtx.entrySet()) { - AccessRightSet ops = nodeCtx.getOrDefault(entry.getKey(), new AccessRightSet()); - ops.addAll(entry.getValue()); - nodeCtx.put(entry.getKey(), ops); - } - - visitedNodes.put(child, nodeCtx); - }; - - new DepthFirstGraphWalker(pap.graph()) - .withDirection(Direction.PARENTS) - .withVisitor(visitor) - .withPropagator(propagator) - .withSinglePathShortCircuit(node -> visitedNodes.containsKey(node)) - .walk(target); - - Map pcMap = visitedNodes.get(target); - - // remove the target to avoid cluttering the visited nodes cache - visitedNodes.remove(target); - - return new TargetDagResult(pcMap, reachedTargets); - } - - class UserDagEventListener implements PolicyEventListener { - - private UserContext userCtx; - private MemoryPolicyReviewer memoryPolicyReviewer; - private Policy policy; - UserDagResult userDagResult; - List policyClasses; - UserDagEventListener(UserContext userContext, Policy policy) throws PMException { - this.userCtx = userContext; - this.policy = policy; - - this.memoryPolicyReviewer = new MemoryPolicyReviewer(policy); - this.userDagResult = processUserDAG(userCtx.getUser(), userCtx.getProcess()); - this.policyClasses = policy.graph().getPolicyClasses(); - } - - @Override - public void handlePolicyEvent(PolicyEvent event) throws PMException { - this.userDagResult = memoryPolicyReviewer.processUserDAG(userCtx.getUser(), userCtx.getProcess()); - this.policyClasses = policy.graph().getPolicyClasses(); - } - } -} diff --git a/src/main/java/gov/nist/csd/pm/pdp/memory/MemoryPDP.java b/src/main/java/gov/nist/csd/pm/pdp/memory/MemoryPDP.java deleted file mode 100644 index b991f959f..000000000 --- a/src/main/java/gov/nist/csd/pm/pdp/memory/MemoryPDP.java +++ /dev/null @@ -1,76 +0,0 @@ -package gov.nist.csd.pm.pdp.memory; - -import gov.nist.csd.pm.pap.PAP; -import gov.nist.csd.pm.pap.memory.MemoryPolicyStore; -import gov.nist.csd.pm.pap.memory.MemoryPolicyStoreEventHandler; -import gov.nist.csd.pm.pdp.PDP; -import gov.nist.csd.pm.pdp.PolicyReviewer; -import gov.nist.csd.pm.policy.events.*; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.UserContext; -import gov.nist.csd.pm.policy.tx.TxRunner; - -public class MemoryPDP extends PDP { - - private final BasePolicyEventHandler policyEventHandler; - - public MemoryPDP(PAP pap, boolean loadPolicyIntoMemory) throws PMException { - super(pap); - - if (loadPolicyIntoMemory) { - // load the policy into memory - this.policyEventHandler = new ReviewerPolicyListener(new MemoryPolicyStore()); - this.pap.addEventListener(this.policyEventHandler, true); - } else { - this.policyEventHandler = new EmbeddedPolicyListener(pap); - } - } - - @Override - public PolicyReviewer reviewer() throws PMException { - return new MemoryPolicyReviewer(policyEventHandler); - } - - public void runTx(UserContext userCtx, PDPTxRunner txRunner) throws PMException { - TxRunner.runTx(pap, () -> { - PDPTx pdpTx = new PDPTx(userCtx, pap, new BulkPolicyReviewer(userCtx, pap), eventListeners); - txRunner.run(pdpTx); - }); - } - - private static class ReviewerPolicyListener extends MemoryPolicyStoreEventHandler { - - public ReviewerPolicyListener(MemoryPolicyStore store) { - super(store); - } - - @Override - public void handlePolicyEvent(PolicyEvent event) throws PMException { - // ignore begin and commit events - // reviewer will operate as all events are added to the policy - // in the event of rollback it will call policySync to rollback - - if (event instanceof RollbackTxEvent rollbackTxEvent) { - handlePolicySync(rollbackTxEvent.policySync()); - } else { - super.handlePolicyEvent(event); - } - } - - private void handlePolicySync(PolicySynchronizationEvent event) { - this.policy = event.getPolicyStore(); - } - } - - private static class EmbeddedPolicyListener extends BasePolicyEventHandler { - - public EmbeddedPolicyListener(PAP pap) { - super(pap); - } - - @Override - public void handlePolicyEvent(PolicyEvent event) throws PMException { - // don't need to handle events as the pap will be updated in real time - } - } -} diff --git a/src/main/java/gov/nist/csd/pm/pdp/modification/GraphModificationAdjudicator.java b/src/main/java/gov/nist/csd/pm/pdp/modification/GraphModificationAdjudicator.java new file mode 100644 index 000000000..a4996fa89 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pdp/modification/GraphModificationAdjudicator.java @@ -0,0 +1,154 @@ +package gov.nist.csd.pm.pdp.modification; + +import gov.nist.csd.pm.pap.obligation.EventContext; +import gov.nist.csd.pm.epp.EventEmitter; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.modification.GraphModifier; +import gov.nist.csd.pm.pap.op.Operation; +import gov.nist.csd.pm.pap.op.graph.*; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.graph.node.NodeType; + +import java.util.Collection; +import java.util.Map; + +import static gov.nist.csd.pm.pap.op.Operation.NAME_OPERAND; +import static gov.nist.csd.pm.pap.op.graph.GraphOp.*; + +public class GraphModificationAdjudicator extends GraphModifier { + + private final UserContext userCtx; + private final PAP pap; + private final EventEmitter eventEmitter; + + public GraphModificationAdjudicator(UserContext userCtx, PAP pap, EventEmitter eventEmitter) { + super(pap.modify()); + this.userCtx = userCtx; + this.pap = pap; + this.eventEmitter = eventEmitter; + } + + @Override + public String createPolicyClass(String name) throws PMException { + EventContext event = new CreatePolicyClassOp() + .withOperands(Map.of(NAME_OPERAND, name)) + .execute(pap, userCtx); + + eventEmitter.emitEvent(event); + + return name; + } + + @Override + public String createUserAttribute(String name, Collection descendants) throws PMException { + EventContext event = new CreateUserAttributeOp() + .withOperands(Map.of(NAME_OPERAND, name, DESCENDANTS_OPERAND, descendants)) + .execute(pap, userCtx); + + eventEmitter.emitEvent(event); + + return name; + } + + @Override + public String createObjectAttribute(String name, Collection descendants) throws PMException { + EventContext event = new CreateObjectAttributeOp() + .withOperands(Map.of(NAME_OPERAND, name, DESCENDANTS_OPERAND, descendants)) + .execute(pap, userCtx); + + eventEmitter.emitEvent(event); + + return name; + } + + @Override + public String createObject(String name, Collection descendants) throws PMException { + EventContext event = new CreateObjectOp() + .withOperands(Map.of(NAME_OPERAND, name, DESCENDANTS_OPERAND, descendants)) + .execute(pap, userCtx); + + eventEmitter.emitEvent(event); + + return name; + } + + @Override + public String createUser(String name, Collection descendants) throws PMException { + EventContext event = new CreateUserOp() + .withOperands(Map.of(NAME_OPERAND, name, DESCENDANTS_OPERAND, descendants)) + .execute(pap, userCtx); + + eventEmitter.emitEvent(event); + + return name; + } + + @Override + public void setNodeProperties(String name, Map properties) throws PMException { + EventContext event = new SetNodePropertiesOp() + .withOperands(Map.of(NAME_OPERAND, name, PROPERTIES_OPERAND, properties)) + .execute(pap, userCtx); + + eventEmitter.emitEvent(event); + } + + @Override + public void deleteNode(String name) throws PMException { + NodeType nodeType = pap.query().graph().getNode(name).getType(); + Collection descendants = pap.query().graph().getAdjacentDescendants(name); + + Operation op = new DeletePolicyClassOp(); + + switch (nodeType) { + case OA -> op = new DeleteObjectAttributeOp(); + case UA -> op = new DeleteUserAttributeOp(); + case O -> op = new DeleteObjectOp(); + case U -> op = new DeleteUserOp(); + } + + EventContext event = op. + withOperands(Map.of(NAME_OPERAND, name, TYPE_OPERAND, nodeType, DESCENDANTS_OPERAND, descendants)) + .execute(pap, userCtx); + + eventEmitter.emitEvent(event); + } + + @Override + public void assign(String ascendant, Collection descendants) throws PMException { + EventContext event = new AssignOp() + .withOperands(Map.of(ASCENDANT_OPERAND, ascendant, DESCENDANTS_OPERAND, descendants)) + .execute(pap, userCtx); + + eventEmitter.emitEvent(event); + } + + @Override + public void deassign(String ascendant, Collection descendants) throws PMException { + EventContext event = new DeassignOp() + .withOperands(Map.of(ASCENDANT_OPERAND, ascendant, DESCENDANTS_OPERAND, descendants)) + .execute(pap, userCtx); + + eventEmitter.emitEvent(event); + } + + @Override + public void associate(String ua, String target, AccessRightSet accessRights) throws PMException { + EventContext event = new AssociateOp() + .withOperands(Map.of(UA_OPERAND, ua, TARGET_OPERAND, target, ARSET_OPERAND, accessRights)) + .execute(pap, userCtx); + + eventEmitter.emitEvent(event); + } + + @Override + public void dissociate(String ua, String target) throws PMException { + EventContext event = new DissociateOp() + .withOperands(Map.of(UA_OPERAND, ua, TARGET_OPERAND, target)) + .execute(pap, userCtx); + + eventEmitter.emitEvent(event); + + } +} diff --git a/src/main/java/gov/nist/csd/pm/pdp/modification/ObligationsModificationAdjudicator.java b/src/main/java/gov/nist/csd/pm/pdp/modification/ObligationsModificationAdjudicator.java new file mode 100644 index 000000000..e485b2f6c --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pdp/modification/ObligationsModificationAdjudicator.java @@ -0,0 +1,57 @@ +package gov.nist.csd.pm.pdp.modification; + +import gov.nist.csd.pm.pap.obligation.EventContext; +import gov.nist.csd.pm.pap.obligation.Obligation; +import gov.nist.csd.pm.epp.EventEmitter; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.modification.ObligationsModifier; +import gov.nist.csd.pm.pap.op.obligation.CreateObligationOp; +import gov.nist.csd.pm.pap.op.obligation.DeleteObligationOp; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.obligation.Rule; + +import java.util.List; +import java.util.Map; + +import static gov.nist.csd.pm.pap.op.Operation.NAME_OPERAND; +import static gov.nist.csd.pm.pap.op.obligation.ObligationOp.AUTHOR_OPERAND; +import static gov.nist.csd.pm.pap.op.obligation.ObligationOp.RULES_OPERAND; + +public class ObligationsModificationAdjudicator extends ObligationsModifier { + + private final UserContext userCtx; + private final PAP pap; + private final EventEmitter eventEmitter; + + public ObligationsModificationAdjudicator(UserContext userCtx, PAP pap, EventEmitter eventEmitter) { + super(pap.modify()); + this.userCtx = userCtx; + this.pap = pap; + this.eventEmitter = eventEmitter; + } + + @Override + public void createObligation(String author, String name, List rules) throws PMException { + EventContext event = new CreateObligationOp() + .withOperands(Map.of(AUTHOR_OPERAND, author, NAME_OPERAND, name, RULES_OPERAND, rules)) + .execute(pap, userCtx); + + eventEmitter.emitEvent(event); + } + + @Override + public void deleteObligation(String name) throws PMException { + Obligation obligation = pap.query().obligations().getObligation(name); + + EventContext event = new DeleteObligationOp() + .withOperands(Map.of( + AUTHOR_OPERAND, obligation.getAuthor(), + NAME_OPERAND, obligation.getName(), + RULES_OPERAND, obligation.getRules() + )) + .execute(pap, userCtx); + + eventEmitter.emitEvent(event); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pdp/modification/OperationsModificationAdjudicator.java b/src/main/java/gov/nist/csd/pm/pdp/modification/OperationsModificationAdjudicator.java new file mode 100644 index 000000000..db5d4e8ac --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pdp/modification/OperationsModificationAdjudicator.java @@ -0,0 +1,60 @@ +package gov.nist.csd.pm.pdp.modification; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.obligation.EventContext; +import gov.nist.csd.pm.epp.EventEmitter; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.modification.OperationsModifier; +import gov.nist.csd.pm.pap.op.Operation; +import gov.nist.csd.pm.pap.op.operation.CreateAdminOperationOp; +import gov.nist.csd.pm.pap.op.operation.DeleteAdminOperationOp; +import gov.nist.csd.pm.pap.op.operation.SetResourceOperationsOp; +import gov.nist.csd.pm.pap.query.UserContext; + +import java.util.Map; + +import static gov.nist.csd.pm.pap.op.Operation.NAME_OPERAND; +import static gov.nist.csd.pm.pap.op.operation.CreateAdminOperationOp.OPERATION_OPERAND; +import static gov.nist.csd.pm.pap.op.operation.SetResourceOperationsOp.OPERATIONS_OPERAND; + +public class OperationsModificationAdjudicator extends OperationsModifier { + + private final UserContext userCtx; + private final PAP pap; + private final EventEmitter eventEmitter; + + public OperationsModificationAdjudicator(UserContext userCtx, PAP pap, EventEmitter eventEmitter) throws PMException { + super(pap.modify()); + this.userCtx = userCtx; + this.pap = pap; + this.eventEmitter = eventEmitter; + } + + @Override + public void setResourceOperations(AccessRightSet accessRightSet) throws PMException { + EventContext event = new SetResourceOperationsOp() + .withOperands(Map.of(OPERATIONS_OPERAND, accessRightSet)) + .execute(pap, userCtx); + + eventEmitter.emitEvent(event); + } + + @Override + public void createAdminOperation(Operation operation) throws PMException { + EventContext event = new CreateAdminOperationOp() + .withOperands(Map.of(OPERATION_OPERAND, operation)) + .execute(pap, userCtx); + + eventEmitter.emitEvent(event); + } + + @Override + public void deleteAdminOperation(String operation) throws PMException { + EventContext event = new DeleteAdminOperationOp() + .withOperands(Map.of(NAME_OPERAND, operation)) + .execute(pap, userCtx); + + eventEmitter.emitEvent(event); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pdp/modification/PolicyModificationAdjudicator.java b/src/main/java/gov/nist/csd/pm/pdp/modification/PolicyModificationAdjudicator.java new file mode 100644 index 000000000..3b7b11f2b --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pdp/modification/PolicyModificationAdjudicator.java @@ -0,0 +1,51 @@ +package gov.nist.csd.pm.pdp.modification; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.epp.EventEmitter; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.modification.*; +import gov.nist.csd.pm.pap.query.UserContext; + +public class PolicyModificationAdjudicator extends PolicyModifier { + + private final GraphModificationAdjudicator graph; + private final ProhibitionsModificationAdjudicator prohibitions; + private final ObligationsModificationAdjudicator obligations; + private final OperationsModificationAdjudicator operations; + private final RoutinesModificationAdjudicator routines; + + public PolicyModificationAdjudicator(UserContext userCtx, PAP pap, EventEmitter eventEmitter) throws PMException { + super(pap.modify()); + this.graph = new GraphModificationAdjudicator(userCtx, pap, eventEmitter); + this.prohibitions = new ProhibitionsModificationAdjudicator(userCtx, pap, eventEmitter); + this.obligations = new ObligationsModificationAdjudicator(userCtx, pap, eventEmitter); + this.operations = new OperationsModificationAdjudicator(userCtx, pap, eventEmitter); + this.routines = new RoutinesModificationAdjudicator(userCtx, pap, eventEmitter); + } + + @Override + public GraphModifier graph() { + return graph; + } + + @Override + public ProhibitionsModifier prohibitions() { + return prohibitions; + } + + @Override + public ObligationsModifier obligations() { + return obligations; + } + + @Override + public OperationsModifier operations() { + return operations; + } + + @Override + public RoutinesModifier routines() { + return routines; + } + +} diff --git a/src/main/java/gov/nist/csd/pm/pdp/modification/ProhibitionsModificationAdjudicator.java b/src/main/java/gov/nist/csd/pm/pdp/modification/ProhibitionsModificationAdjudicator.java new file mode 100644 index 000000000..1e104ed5b --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pdp/modification/ProhibitionsModificationAdjudicator.java @@ -0,0 +1,65 @@ +package gov.nist.csd.pm.pdp.modification; + +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.obligation.EventContext; +import gov.nist.csd.pm.epp.EventEmitter; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.modification.ProhibitionsModifier; +import gov.nist.csd.pm.pap.op.prohibition.CreateProhibitionOp; +import gov.nist.csd.pm.pap.op.prohibition.DeleteProhibitionOp; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.prohibition.ContainerCondition; +import gov.nist.csd.pm.pap.prohibition.Prohibition; +import gov.nist.csd.pm.pap.prohibition.ProhibitionSubject; + +import java.util.Collection; +import java.util.Map; + +import static gov.nist.csd.pm.pap.op.Operation.NAME_OPERAND; +import static gov.nist.csd.pm.pap.op.prohibition.ProhibitionOp.*; + +public class ProhibitionsModificationAdjudicator extends ProhibitionsModifier { + private final UserContext userCtx; + private final PAP pap; + private final EventEmitter eventEmitter; + + public ProhibitionsModificationAdjudicator(UserContext userCtx, PAP pap, EventEmitter eventEmitter) { + super(pap.modify()); + this.userCtx = userCtx; + this.pap = pap; + this.eventEmitter = eventEmitter; + } + + @Override + public void createProhibition(String name, ProhibitionSubject subject, AccessRightSet accessRightSet, boolean intersection, Collection containerConditions) throws PMException { + EventContext event = new CreateProhibitionOp() + .withOperands(Map.of( + NAME_OPERAND, name, + SUBJECT_OPERAND, subject, + ARSET_OPERAND, accessRightSet, + INTERSECTION_OPERAND, intersection, + CONTAINERS_OPERAND, containerConditions + )) + .execute(pap, userCtx); + + eventEmitter.emitEvent(event); + } + + @Override + public void deleteProhibition(String name) throws PMException { + Prohibition prohibition = pap.query().prohibitions().getProhibition(name); + + EventContext event = new DeleteProhibitionOp() + .withOperands(Map.of( + NAME_OPERAND, prohibition.getName(), + SUBJECT_OPERAND, prohibition.getSubject(), + ARSET_OPERAND, prohibition.getAccessRightSet(), + INTERSECTION_OPERAND, prohibition.isIntersection(), + CONTAINERS_OPERAND, prohibition.getContainers() + )) + .execute(pap, userCtx); + + eventEmitter.emitEvent(event); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pdp/modification/RoutinesModificationAdjudicator.java b/src/main/java/gov/nist/csd/pm/pdp/modification/RoutinesModificationAdjudicator.java new file mode 100644 index 000000000..6addbe734 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pdp/modification/RoutinesModificationAdjudicator.java @@ -0,0 +1,48 @@ +package gov.nist.csd.pm.pdp.modification; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.obligation.EventContext; +import gov.nist.csd.pm.epp.EventEmitter; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.modification.RoutinesModifier; +import gov.nist.csd.pm.pap.op.routine.CreateAdminRoutineOp; +import gov.nist.csd.pm.pap.op.routine.DeleteAdminRoutineOp; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.routine.Routine; + +import java.util.Map; + +import static gov.nist.csd.pm.pap.op.Operation.NAME_OPERAND; +import static gov.nist.csd.pm.pap.op.routine.CreateAdminRoutineOp.ROUTINE_OPERAND; + +public class RoutinesModificationAdjudicator extends RoutinesModifier { + + private final UserContext userCtx; + private final PAP pap; + private final EventEmitter eventEmitter; + + public RoutinesModificationAdjudicator(UserContext userCtx, PAP pap, EventEmitter eventEmitter) { + super(pap.modify()); + this.userCtx = userCtx; + this.pap = pap; + this.eventEmitter = eventEmitter; + } + + @Override + public void createAdminRoutine(Routine routine) throws PMException { + EventContext event = new CreateAdminRoutineOp() + .withOperands(Map.of(ROUTINE_OPERAND, routine)) + .execute(pap, userCtx); + + eventEmitter.emitEvent(event); + } + + @Override + public void deleteAdminRoutine(String name) throws PMException { + EventContext event = new DeleteAdminRoutineOp() + .withOperands(Map.of(NAME_OPERAND, name)) + .execute(pap, userCtx); + + eventEmitter.emitEvent(event); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pdp/query/AccessQueryAdjudicator.java b/src/main/java/gov/nist/csd/pm/pdp/query/AccessQueryAdjudicator.java new file mode 100644 index 000000000..1b476f5ea --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pdp/query/AccessQueryAdjudicator.java @@ -0,0 +1,110 @@ +package gov.nist.csd.pm.pdp.query; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.op.AdminAccessRights; +import gov.nist.csd.pm.pap.op.PrivilegeChecker; +import gov.nist.csd.pm.pap.query.AccessQuerier; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.query.explain.Explain; + +import java.util.Collection; +import java.util.Map; +import java.util.Set; + +public class AccessQueryAdjudicator extends AccessQuerier { + + private final UserContext userCtx; + private final PAP pap; + + public AccessQueryAdjudicator(UserContext userCtx, PAP pap) { + super(pap.query()); + this.userCtx = userCtx; + this.pap = pap; + } + + @Override + public AccessRightSet computePrivileges(UserContext userCtx, String target) throws PMException { + PrivilegeChecker.check(pap, userCtx, userCtx.getUser(), AdminAccessRights.REVIEW_POLICY); + PrivilegeChecker.check(pap, userCtx, target, AdminAccessRights.REVIEW_POLICY); + + return pap.query().access().computePrivileges(userCtx, target); + } + + @Override + public AccessRightSet computeDeniedPrivileges(UserContext userCtx, String target) throws PMException { + PrivilegeChecker.check(pap, userCtx, userCtx.getUser(), AdminAccessRights.REVIEW_POLICY); + PrivilegeChecker.check(pap, userCtx, target, AdminAccessRights.REVIEW_POLICY); + + return pap.query().access().computeDeniedPrivileges(userCtx, target); + } + + @Override + public Map computePolicyClassAccessRights(UserContext userCtx, String target) + throws PMException { + PrivilegeChecker.check(pap, userCtx, userCtx.getUser(), AdminAccessRights.REVIEW_POLICY); + PrivilegeChecker.check(pap, userCtx, target, AdminAccessRights.REVIEW_POLICY); + + return pap.query().access().computePolicyClassAccessRights(userCtx, target); + } + + @Override + public Map computeCapabilityList(UserContext userCtx) throws PMException { + PrivilegeChecker.check(pap, userCtx, userCtx.getUser(), AdminAccessRights.REVIEW_POLICY); + + return pap.query().access().computeCapabilityList(userCtx); + } + + @Override + public Map computeACL(String target) throws PMException { + PrivilegeChecker.check(pap, userCtx, target, AdminAccessRights.REVIEW_POLICY); + + return pap.query().access().computeACL(target); + } + + @Override + public Map computeDestinationAttributes(String user) throws PMException { + PrivilegeChecker.check(pap, userCtx, user, AdminAccessRights.REVIEW_POLICY); + + return pap.query().access().computeDestinationAttributes(user); + } + + @Override + public Map computeAscendantPrivileges(UserContext userCtx, String root) throws PMException { + PrivilegeChecker.check(pap, userCtx, userCtx.getUser(), AdminAccessRights.REVIEW_POLICY); + + return pap.query().access().computeAscendantPrivileges(userCtx, root); + } + + @Override + public Explain explain(UserContext userCtx, String target) throws PMException { + PrivilegeChecker.check(pap, userCtx, userCtx.getUser(), AdminAccessRights.REVIEW_POLICY); + PrivilegeChecker.check(pap, userCtx, target, AdminAccessRights.REVIEW_POLICY); + + return pap.query().access().explain(userCtx, target); + } + + @Override + public Set computePersonalObjectSystem(UserContext userCtx) throws PMException { + PrivilegeChecker.check(pap, userCtx, userCtx.getUser(), AdminAccessRights.REVIEW_POLICY); + + return pap.query().access().computePersonalObjectSystem(userCtx); + } + + @Override + public Collection computeAccessibleAscendants(UserContext userCtx, String root) throws PMException { + PrivilegeChecker.check(pap, userCtx, userCtx.getUser(), AdminAccessRights.REVIEW_POLICY); + PrivilegeChecker.check(pap, userCtx, root, AdminAccessRights.REVIEW_POLICY); + + return pap.query().access().computeAccessibleAscendants(userCtx, root); + } + + @Override + public Collection computeAccessibleDescendants(UserContext userCtx, String root) throws PMException { + PrivilegeChecker.check(pap, userCtx, userCtx.getUser(), AdminAccessRights.REVIEW_POLICY); + PrivilegeChecker.check(pap, userCtx, root, AdminAccessRights.REVIEW_POLICY); + + return pap.query().access().computeAccessibleDescendants(userCtx, root); + } +} diff --git a/src/main/java/gov/nist/csd/pm/pdp/query/GraphQueryAdjudicator.java b/src/main/java/gov/nist/csd/pm/pdp/query/GraphQueryAdjudicator.java new file mode 100644 index 000000000..1821010f4 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pdp/query/GraphQueryAdjudicator.java @@ -0,0 +1,184 @@ +package gov.nist.csd.pm.pdp.query; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.node.Node; +import gov.nist.csd.pm.pap.graph.node.NodeType; +import gov.nist.csd.pm.pap.graph.relationship.Association; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.admin.AdminPolicyNode; +import gov.nist.csd.pm.pap.op.PrivilegeChecker; +import gov.nist.csd.pm.pap.query.GraphQuerier; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pdp.exception.UnauthorizedException; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +import static gov.nist.csd.pm.pap.op.AdminAccessRights.REVIEW_POLICY; + +public class GraphQueryAdjudicator extends GraphQuerier { + + private final UserContext userCtx; + private final PAP pap; + + public GraphQueryAdjudicator(UserContext userCtx, PAP pap) { + super(pap.query()); + this.userCtx = userCtx; + this.pap = pap; + } + + @Override + public boolean nodeExists(String name) throws PMException { + boolean exists = pap.query().graph().nodeExists(name); + + // check user has permissions on the node + PrivilegeChecker.check(pap, userCtx, name); + + return exists; + } + + @Override + public Node getNode(String name) throws PMException { + // get node + Node node = pap.query().graph().getNode(name); + + // check user has permissions on the node + PrivilegeChecker.check(pap, userCtx, name); + + return node; + } + + @Override + public Collection search(NodeType type, Map properties) throws PMException { + Collection search = pap.query().graph().search(type, properties); + search.removeIf(node -> { + try { + PrivilegeChecker.check(pap, userCtx, node); + return false; + } catch (PMException e) { + return true; + } + }); + + return search; + } + + @Override + public Collection getPolicyClasses() throws PMException { + List policyClasses = new ArrayList<>(); + for (String pc : pap.query().graph().getPolicyClasses()) { + try { + PrivilegeChecker.check(pap, userCtx, AdminPolicyNode.ADMIN_POLICY_OBJECT.nodeName()); + } catch (UnauthorizedException e) { + continue; + } + + policyClasses.add(pc); + } + + return policyClasses; + } + + @Override + public Collection getAdjacentDescendants(String node) throws PMException { + List descendants = new ArrayList<>(); + for (String descendant : pap.query().graph().getAdjacentDescendants(node)) { + try { + PrivilegeChecker.check(pap, userCtx, descendant); + } catch (UnauthorizedException e) { + continue; + } + + descendants.add(descendant); + } + + return descendants; + } + + @Override + public Collection getAdjacentAscendants(String node) throws PMException { + List ascendants = new ArrayList<>(); + for (String ascendant : pap.query().graph().getAdjacentAscendants(node)) { + try { + PrivilegeChecker.check(pap, userCtx, ascendant); + } catch (UnauthorizedException e) { + continue; + } + + ascendants.add(ascendant); + } + + return ascendants; + } + + @Override + public Collection getAssociationsWithSource(String ua) throws PMException { + return getAssociations(pap.query().graph().getAssociationsWithSource(ua)); + } + + @Override + public Collection getAssociationsWithTarget(String target) throws PMException { + return getAssociations(pap.query().graph().getAssociationsWithTarget(target)); + } + + @Override + public Collection getAttributeDescendants(String node) throws PMException { + PrivilegeChecker.check(pap, userCtx, node, REVIEW_POLICY); + + return pap.query().graph().getAttributeDescendants(node); + } + + @Override + public Collection getPolicyClassDescendants(String node) throws PMException { + PrivilegeChecker.check(pap, userCtx, node, REVIEW_POLICY); + + return pap.query().graph().getPolicyClassDescendants(node); + } + + @Override + public boolean isAscendant(String ascendant, String descendant) throws PMException { + PrivilegeChecker.check(pap, userCtx, ascendant, REVIEW_POLICY); + PrivilegeChecker.check(pap, userCtx, descendant, REVIEW_POLICY); + + return pap.query().graph().isAscendant(ascendant, descendant); + } + + @Override + public boolean isDescendant(String ascendant, String descendant) throws PMException { + PrivilegeChecker.check(pap, userCtx, ascendant, REVIEW_POLICY); + + return pap.query().graph().isDescendant(ascendant, descendant); + } + + @Override + public Collection getAscendants(String node) throws PMException { + PrivilegeChecker.check(pap, userCtx, node, REVIEW_POLICY); + + return pap.query().graph().getAscendants(node); + } + + @Override + public Collection getDescendants(String node) throws PMException { + PrivilegeChecker.check(pap, userCtx, node, REVIEW_POLICY); + + return pap.query().graph().getDescendants(node); + } + + private List getAssociations(Collection associations) { + List ret = new ArrayList<>(); + for (Association association : associations) { + try { + PrivilegeChecker.check(pap, userCtx, association.getSource(), REVIEW_POLICY); + PrivilegeChecker.check(pap, userCtx, association.getTarget(), REVIEW_POLICY); + } catch (PMException e) { + continue; + } + + ret.add(association); + } + + return ret; + } +} diff --git a/src/main/java/gov/nist/csd/pm/pdp/query/ObligationsQueryAdjudicator.java b/src/main/java/gov/nist/csd/pm/pdp/query/ObligationsQueryAdjudicator.java new file mode 100644 index 000000000..496cd7b54 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pdp/query/ObligationsQueryAdjudicator.java @@ -0,0 +1,97 @@ +package gov.nist.csd.pm.pdp.query; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.obligation.EventPattern; +import gov.nist.csd.pm.pap.obligation.Rule; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.op.AdminAccessRights; +import gov.nist.csd.pm.pap.op.PrivilegeChecker; +import gov.nist.csd.pm.pap.pml.pattern.operand.OperandPatternExpression; +import gov.nist.csd.pm.pap.query.ObligationsQuerier; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.obligation.Obligation; +import gov.nist.csd.pm.pdp.exception.UnauthorizedException; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +import static gov.nist.csd.pm.pap.op.AdminAccessRights.GET_OBLIGATION; + +public class ObligationsQueryAdjudicator extends ObligationsQuerier { + + private final UserContext userCtx; + private final PAP pap; + + public ObligationsQueryAdjudicator(UserContext userCtx, PAP pap) { + super(pap.query()); + this.userCtx = userCtx; + this.pap = pap; + } + + @Override + public Collection getObligations() throws PMException { + Collection obligations = pap.query().obligations().getObligations(); + obligations.removeIf(obligation -> { + try { + for (Rule rule : obligation.getRules()) { + checkRule(rule); + } + return false; + } catch (PMException e) { + return true; + } + }); + + return obligations; + } + + @Override + public boolean obligationExists(String name) throws PMException { + boolean exists = pap.query().obligations().obligationExists(name); + if (!exists) { + return false; + } + + try { + getObligation(name); + } catch (UnauthorizedException e) { + return false; + } + + return true; + } + + @Override + public Obligation getObligation(String name) throws PMException { + Obligation obligation = pap.query().obligations().getObligation(name); + for (Rule rule : obligation.getRules()) { + checkRule(rule); + } + + return obligation; + } + + @Override + public Collection getObligationsWithAuthor(String user) throws PMException { + PrivilegeChecker.check(pap, userCtx, user, AdminAccessRights.REVIEW_POLICY); + + return pap.query().obligations().getObligationsWithAuthor(user); + } + + private void checkRule(Rule rule) throws PMException { + EventPattern eventPattern = rule.getEventPattern(); + + // check subject + PrivilegeChecker.checkPattern(pap, userCtx, eventPattern.getSubjectPattern(), GET_OBLIGATION); + + // cannot check operation as it is not a node + + // check operands + for (Map.Entry> operandPattern : eventPattern.getOperandPatterns().entrySet()) { + for (OperandPatternExpression operandPatternExpression : operandPattern.getValue()) { + PrivilegeChecker.checkPattern(pap, userCtx, operandPatternExpression, GET_OBLIGATION); + } + } + } +} diff --git a/src/main/java/gov/nist/csd/pm/pdp/query/OperationsQueryAdjudicator.java b/src/main/java/gov/nist/csd/pm/pdp/query/OperationsQueryAdjudicator.java new file mode 100644 index 000000000..f4dd56f04 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pdp/query/OperationsQueryAdjudicator.java @@ -0,0 +1,49 @@ +package gov.nist.csd.pm.pdp.query; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.admin.AdminPolicyNode; +import gov.nist.csd.pm.pap.op.AdminAccessRights; +import gov.nist.csd.pm.pap.op.Operation; +import gov.nist.csd.pm.pap.op.PrivilegeChecker; +import gov.nist.csd.pm.pap.query.OperationsQuerier; +import gov.nist.csd.pm.pap.query.UserContext; + +import java.util.Collection; + +public class OperationsQueryAdjudicator extends OperationsQuerier { + + private UserContext userCtx; + private PAP pap; + + public OperationsQueryAdjudicator(UserContext userCtx, PAP pap) { + super(pap.query()); + + this.pap = pap; + this.userCtx = userCtx; + } + + @Override + public AccessRightSet getResourceOperations() throws PMException { + PrivilegeChecker.check(pap, userCtx, AdminPolicyNode.ADMIN_POLICY_OBJECT.nodeName(), AdminAccessRights.REVIEW_POLICY); + + return pap.query().operations().getResourceOperations(); + } + + @Override + public Collection getAdminOperationNames() throws PMException { + PrivilegeChecker.check(pap, userCtx, AdminPolicyNode.ADMIN_POLICY_OBJECT.nodeName(), AdminAccessRights.REVIEW_POLICY); + + return pap.query().operations().getAdminOperationNames(); + } + + @Override + public Operation getAdminOperation(String operationName) throws PMException { + PrivilegeChecker.check(pap, userCtx, AdminPolicyNode.ADMIN_POLICY_OBJECT.nodeName(), AdminAccessRights.REVIEW_POLICY); + + return pap.query().operations().getAdminOperation(operationName); + } + + +} diff --git a/src/main/java/gov/nist/csd/pm/pdp/query/PolicyQueryAdjudicator.java b/src/main/java/gov/nist/csd/pm/pdp/query/PolicyQueryAdjudicator.java new file mode 100644 index 000000000..174c1c013 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pdp/query/PolicyQueryAdjudicator.java @@ -0,0 +1,55 @@ +package gov.nist.csd.pm.pdp.query; + +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.query.*; + +public class PolicyQueryAdjudicator extends PolicyQuerier { + + private final AccessQueryAdjudicator access; + private final GraphQueryAdjudicator graph; + private final ProhibitionsQueryAdjudicator prohibitions; + private final ObligationsQueryAdjudicator obligations; + private final OperationsQueryAdjudicator operations; + private final RoutinesQueryAdjudicator routines; + + public PolicyQueryAdjudicator(UserContext userCtx, PAP pap) { + super(pap.query()); + this.access = new AccessQueryAdjudicator(userCtx, pap); + this.graph = new GraphQueryAdjudicator(userCtx, pap); + this.prohibitions = new ProhibitionsQueryAdjudicator(userCtx, pap); + this.obligations = new ObligationsQueryAdjudicator(userCtx, pap); + this.operations = new OperationsQueryAdjudicator(userCtx, pap); + this.routines = new RoutinesQueryAdjudicator(userCtx, pap); + } + + @Override + public AccessQueryAdjudicator access() { + return access; + } + + @Override + public GraphQueryAdjudicator graph() { + return graph; + } + + @Override + public ProhibitionsQueryAdjudicator prohibitions() { + return prohibitions; + } + + @Override + public ObligationsQueryAdjudicator obligations() { + return obligations; + } + + @Override + public OperationsQueryAdjudicator operations() { + return operations; + } + + @Override + public RoutinesQuerier routines() { + return routines; + } + +} diff --git a/src/main/java/gov/nist/csd/pm/pdp/query/ProhibitionsQueryAdjudicator.java b/src/main/java/gov/nist/csd/pm/pdp/query/ProhibitionsQueryAdjudicator.java new file mode 100644 index 000000000..490b06e26 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pdp/query/ProhibitionsQueryAdjudicator.java @@ -0,0 +1,108 @@ +package gov.nist.csd.pm.pdp.query; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.prohibition.ContainerCondition; +import gov.nist.csd.pm.pap.prohibition.ProhibitionSubject; +import gov.nist.csd.pm.pap.admin.AdminPolicyNode; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.op.AdminAccessRights; +import gov.nist.csd.pm.pap.op.PrivilegeChecker; +import gov.nist.csd.pm.pap.query.ProhibitionsQuerier; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.prohibition.Prohibition; + +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +import static gov.nist.csd.pm.pap.op.AdminAccessRights.GET_PROCESS_PROHIBITIONS; +import static gov.nist.csd.pm.pap.op.AdminAccessRights.GET_PROHIBITIONS; + +public class ProhibitionsQueryAdjudicator extends ProhibitionsQuerier { + + private final UserContext userCtx; + private final PAP pap; + + public ProhibitionsQueryAdjudicator(UserContext userCtx, PAP pap) { + super(pap.query()); + this.userCtx = userCtx; + this.pap = pap; + } + + @Override + public Map> getProhibitions() throws PMException { + Map> prohibitions = pap.query().prohibitions().getProhibitions(); + Map> retProhibitions = new HashMap<>(); + for (String subject : prohibitions.keySet()) { + Collection subjectPros = filterProhibitions(prohibitions.get(subject)); + retProhibitions.put(subject, subjectPros); + } + + return retProhibitions; + } + + @Override + public Collection getProhibitionsWithSubject(String subject) throws PMException { + return filterProhibitions(pap.query().prohibitions().getProhibitionsWithSubject(subject)); + } + + @Override + public Prohibition getProhibition(String name) throws PMException { + Prohibition prohibition = pap.query().prohibitions().getProhibition(name); + + // check user has access to subject + if (prohibition.getSubject().getType() == ProhibitionSubject.Type.PROCESS) { + PrivilegeChecker.check(pap, userCtx, AdminPolicyNode.ADMIN_POLICY_OBJECT.nodeName(), GET_PROCESS_PROHIBITIONS); + } else { + PrivilegeChecker.check(pap, userCtx, prohibition.getSubject().getName(), GET_PROHIBITIONS); + } + + // check user has access to each container condition + for (ContainerCondition containerCondition : prohibition.getContainers()) { + PrivilegeChecker.check(pap, userCtx, containerCondition.getName(), GET_PROHIBITIONS); + } + + return prohibition; + } + + @Override + public Collection getInheritedProhibitionsFor(String subject) throws PMException { + PrivilegeChecker.check(pap, this.userCtx, subject, AdminAccessRights.REVIEW_POLICY); + + return pap.query().prohibitions().getInheritedProhibitionsFor(subject); + } + + @Override + public Collection getProhibitionsWithContainer(String container) throws PMException { + PrivilegeChecker.check(pap, this.userCtx, container, AdminAccessRights.REVIEW_POLICY); + + return pap.query().prohibitions().getProhibitionsWithContainer(container); + } + + + + private Collection filterProhibitions(Collection prohibitions) { + prohibitions.removeIf(prohibition -> { + try { + // check user has access to subject prohibitions + if (prohibition.getSubject().getType() == ProhibitionSubject.Type.PROCESS) { + PrivilegeChecker.check(pap, userCtx, AdminPolicyNode.ADMIN_POLICY_OBJECT.nodeName(), + GET_PROCESS_PROHIBITIONS); + } else { + PrivilegeChecker.check(pap, userCtx, prohibition.getSubject().getName(), GET_PROHIBITIONS); + } + + // check user has access to each target prohibitions + for (ContainerCondition containerCondition : prohibition.getContainers()) { + PrivilegeChecker.check(pap, userCtx, containerCondition.getName(), GET_PROHIBITIONS); + } + + return false; + } catch (PMException e) { + return true; + } + }); + + return prohibitions; + } +} diff --git a/src/main/java/gov/nist/csd/pm/pdp/query/RoutinesQueryAdjudicator.java b/src/main/java/gov/nist/csd/pm/pdp/query/RoutinesQueryAdjudicator.java new file mode 100644 index 000000000..900cff610 --- /dev/null +++ b/src/main/java/gov/nist/csd/pm/pdp/query/RoutinesQueryAdjudicator.java @@ -0,0 +1,39 @@ +package gov.nist.csd.pm.pdp.query; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.admin.AdminPolicyNode; +import gov.nist.csd.pm.pap.op.AdminAccessRights; +import gov.nist.csd.pm.pap.op.PrivilegeChecker; +import gov.nist.csd.pm.pap.query.RoutinesQuerier; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.routine.Routine; + +import java.util.Collection; + +public class RoutinesQueryAdjudicator extends RoutinesQuerier { + + private PAP pap; + private UserContext userCtx; + + public RoutinesQueryAdjudicator(UserContext userCtx, PAP pap) { + super(pap.query()); + + this.pap = pap; + this.userCtx = userCtx; + } + + @Override + public Collection getAdminRoutineNames() throws PMException { + PrivilegeChecker.check(pap, userCtx, AdminPolicyNode.ADMIN_POLICY_OBJECT.nodeName(), AdminAccessRights.REVIEW_POLICY); + + return pap.query().routines().getAdminRoutineNames(); + } + + @Override + public Routine getAdminRoutine(String routineName) throws PMException { + PrivilegeChecker.check(pap, userCtx, AdminPolicyNode.ADMIN_POLICY_OBJECT.nodeName(), AdminAccessRights.REVIEW_POLICY); + + return pap.query().routines().getAdminRoutine(routineName); + } +} diff --git a/src/main/java/gov/nist/csd/pm/policy/Graph.java b/src/main/java/gov/nist/csd/pm/policy/Graph.java deleted file mode 100644 index ab5e7f0f2..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/Graph.java +++ /dev/null @@ -1,241 +0,0 @@ -package gov.nist.csd.pm.policy; - -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.AccessRightSet; -import gov.nist.csd.pm.policy.model.graph.nodes.Node; -import gov.nist.csd.pm.policy.model.graph.nodes.NodeType; -import gov.nist.csd.pm.policy.model.graph.relationships.Association; - -import java.util.List; -import java.util.Map; - -public interface Graph { - - /** - * Set the resource access rights recognized in this policy. - * @param accessRightSet the operations to set as the resource access rights - */ - void setResourceAccessRights(AccessRightSet accessRightSet) throws PMException; - - /** - * Get the resource access rights recognized by this policy. - * @return The resource access rights recognized by this policy. - * @throws PMException - */ - AccessRightSet getResourceAccessRights() throws PMException; - - /** - * Create a policy class in the graph. - * - * @param name the name of the policy class. - * @return the node representing the new policy class. - * @throws PMException - */ - String createPolicyClass(String name, Map properties) throws PMException; - String createPolicyClass(String name) throws PMException; - - /** - * Create a new user attribute. User attributes do not have to be connected to the graph, therefore - * the parents argument is optional. - * @param name the name of the suer attribute - * @param parent is the parent to initially assign the new node to. A user attribute needs to be connected - * to the graph when created. - * @param parents is a list of 0 or more additional parents to assign the new node to. - * @return the user attribute node - * @throws PMException - */ - String createUserAttribute(String name, Map properties, String parent, String ... parents) throws PMException; - String createUserAttribute(String name, String parent, String ... parents) throws PMException; - - /** - * Create a new object attribute with the given name, and assign it to the given parents. - * Note: Node names must be unique. - * - * @param name the unique name of the node. - * @param parent is the parent to initially assign the new node to. An object attribute needs to be connected - * to the graph when created. - * @param parents is a list of 0 or more additional parents to assign the new node to. - * @return the object attribute node - * @throws PMException - */ - String createObjectAttribute(String name, Map properties, String parent, String ... parents) throws PMException; - String createObjectAttribute(String name, String parent, String ... parents) throws PMException; - - /** - * Create a new object with the given name, and assign it to the given parents. - * Note: Node names must be unique. - * - * @param name the unique name of the node. - * @param parent is the parent to initially assign the new node to. An object needs to be connected to the - * graph when created. - * @param parents is a list of 0 or more additional parents to assign the new node to. - * @return the object node - * @throws PMException - */ - String createObject(String name, Map properties, String parent, String ... parents) throws PMException; - String createObject(String name, String parent, String ... parents) throws PMException; - - /** - * Create a new user with the given name, and assign it to the given parents. - * Note: Node names must be unique. - * - * @param name the unique name of the node. - * @param parent is the parent to initially assign the new node to. A user needs to be connected to the - * graph when created. - * @param parents is a list of 0 or more additional parents to assign the new node to. - * @return the user node - * @throws PMException - */ - String createUser(String name, Map properties, String parent, String ... parents) throws PMException; - String createUser(String name, String parent, String ... parents) throws PMException; - - /** - * Update the properties of the node with the given name. The given properties overwrite any existing properties. - * - * @param name the name of the node to update. - * @param properties the properties to give the node. - * @throws PMException - */ - void setNodeProperties(String name, Map properties) throws PMException; - - /** - * Check if a node exists in the graph. - * @param name The name of the node to check for. - * @return True if the node exists, false otherwise. - * @throws PMException - */ - boolean nodeExists(String name) throws PMException; - - /** - * Get the Node object associated with the given name. - * @param name The name of the node to get. - * @return A Node object associated with the given name. - * @throws PMException - */ - Node getNode(String name) throws PMException; - - /** - * Search for nodes with the given type and/or properties. - * Supports wildcard property values i.e. {"prop1": "*"} which will match any nodes with the "prop1" property key. - * @param type The type of nodes to search for. Use NodeType.ANY to search for any node type. - * @param properties The properties of nodes to search for. - * @return The nodes that match the type and property criteria. - * @throws PMException - */ - List search(NodeType type, Map properties) throws PMException; - - /** - * Get the policy classes in the policy. - * @return The policy class nodes. - * @throws PMException - */ - List getPolicyClasses() throws PMException; - - /** - * Delete the node with the given name from the graph. The node must not have any other nodes assigned to it. - * If the node does not exist, no exception will be thrown as this is the desired state. - * - * @param name the name of the node to delete. - * @throws PMException - */ - void deleteNode(String name) throws PMException; - - /** - * Assign the child node to the parent node. The child and parent nodes must both already exist in the graph, - * and the types must make a valid assignment. An example of a valid assignment is assigning o1, an object, to oa1, - * an object attribute. o1 is the child (objects can never be the parent in an assignment), and oa1 is the parent. - * If the child is already assigned to the parent, no exception will be thrown as this is the desired state. - * - * @param child the name of the child node. - * @param parent the name of the parent node. - * @throws PMException - */ - void assign(String child, String parent) throws PMException; - - /** - * Remove the assignment between the child and parent nodes. An exception will be thrown if either node - * does not exist. If the assignment doesn't exist, no exception will be thrown as this is the desired state. - * - * @param child the name of the child node. - * @param parent the name of the parent node. - * @throws PMException - */ - void deassign(String child, String parent) throws PMException; - - /** - * Assign the children of the given attribute to the target attribute of the same type. - * @param children The children to assign to the target. - * @param target The target attribute to assign the children to. - * @throws PMException - */ - void assignAll(List children, String target) throws PMException; - - /** - * Deassign the children of the given attribute from the target attribute of the same type. - * @param children The children to deassign from the given target. - * @param target The target attribute to deassign the children from. - * @throws PMException - */ - void deassignAll(List children, String target) throws PMException; - - /** - * Deassign all nodes assigned to the given node and delete the given node. - * from the rest of the graph. - * @param target The node to deassign all children from. - * @throws PMException - */ - void deassignAllFromAndDelete(String target) throws PMException; - - /** - * Get the parents of the given node. - * @param node The node to get the parents of. - * @return The names of the parents of the given node. - * @throws PMException - */ - List getParents(String node) throws PMException; - - /** - * Get the children of the given node. - * @param node The node to get the children of. - * @return The names of the children of the given node. - * @throws PMException - */ - List getChildren(String node) throws PMException; - - /** - * Create an Association between the user attribute and the Target node with the provided access rights. If an association - * already exists between these two nodes, overwrite the existing access rights with the ones provided. Associations - * can only begin at a user attribute but can point to either an object or user attribute - * - * @param ua the name of the user attribute. - * @param target the name of the target attribute. - * @param accessRights a set of access rights to add to the association. - * @throws PMException - */ - void associate(String ua, String target, AccessRightSet accessRights) throws PMException; - - /** - * Delete the Association between the user attribute and Target node. - * - * @param ua the name of the user attribute. - * @param target the name of the target attribute. - * @throws PMException - */ - void dissociate(String ua, String target) throws PMException; - - /** - * Get the associations in which the source of the relation is the given user attribute (ua). - * @param ua The user attribute to get the associations for. - * @return The associations in which the source of the relation is the given user attribute (ua). - * @throws PMException - */ - List getAssociationsWithSource(String ua) throws PMException; - - /** - * Get the associations in which the target of the relation is the given node. - * @param target The target attribute to get the associations for. - * @return The associations in which the target of the relation is the given node. - * @throws PMException - */ - List getAssociationsWithTarget(String target) throws PMException; -} diff --git a/src/main/java/gov/nist/csd/pm/policy/Obligations.java b/src/main/java/gov/nist/csd/pm/policy/Obligations.java deleted file mode 100644 index 8ee0274c9..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/Obligations.java +++ /dev/null @@ -1,62 +0,0 @@ -package gov.nist.csd.pm.policy; - -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.UserContext; -import gov.nist.csd.pm.policy.model.obligation.Obligation; -import gov.nist.csd.pm.policy.model.obligation.Rule; - -import java.util.List; - -public interface Obligations { - - /** - * Create a new obligation. - * - * @param author the user/process that is creating the obligation. - * @param label the label of the obligation. - * @param rules the rules of the obligation. - * @throws PMException - */ - void create(UserContext author, String label, Rule... rules) throws PMException; - - /** - * Update the obligation with the given label. If the label in the provided object is not null and different from - * the label parameter, the label will also be updated. - * @param author the user/process that created the obligation - * @param label the label of the obligation to update - * @param rules the updated obligation rules - * @throws PMException - */ - void update(UserContext author, String label, Rule... rules) throws PMException; - - /** - * Delete the obligation with the given label. - * @param label the label of the obligation to delete - * @throws PMException - */ - void delete(String label) throws PMException; - - /** - * Get all obligations. - * @return All obligations. - * @throws PMException - */ - List getAll() throws PMException; - - /** - * Check if an obligation exists with the given label. - * @param label The obligation to check. - * @return True if the obligation exists with the given label, false otherwise. - * @throws PMException - */ - boolean exists(String label) throws PMException; - - /** - * Get the Obligation object associated with the given label. - * @param label The label of the obligation to get. - * @return The Obligation object associated with the given label. - * @throws PMException - */ - Obligation get(String label) throws PMException; - -} diff --git a/src/main/java/gov/nist/csd/pm/policy/Policy.java b/src/main/java/gov/nist/csd/pm/policy/Policy.java deleted file mode 100644 index be1be70a8..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/Policy.java +++ /dev/null @@ -1,12 +0,0 @@ -package gov.nist.csd.pm.policy; - -import gov.nist.csd.pm.policy.exceptions.PMException; - -public interface Policy { - Graph graph(); - Prohibitions prohibitions(); - Obligations obligations(); - UserDefinedPML userDefinedPML(); - PolicySerializer serialize() throws PMException; - PolicyDeserializer deserialize() throws PMException; -} diff --git a/src/main/java/gov/nist/csd/pm/policy/PolicyDeserializer.java b/src/main/java/gov/nist/csd/pm/policy/PolicyDeserializer.java deleted file mode 100644 index 228bbf99c..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/PolicyDeserializer.java +++ /dev/null @@ -1,13 +0,0 @@ -package gov.nist.csd.pm.policy; - -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.UserContext; -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; - -public interface PolicyDeserializer { - - void fromJSON(String json) throws PMException; - - void fromPML(UserContext author, String pml, FunctionDefinitionStatement ... customFunctions) throws PMException; - -} diff --git a/src/main/java/gov/nist/csd/pm/policy/PolicySerializer.java b/src/main/java/gov/nist/csd/pm/policy/PolicySerializer.java deleted file mode 100644 index 70858b338..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/PolicySerializer.java +++ /dev/null @@ -1,11 +0,0 @@ -package gov.nist.csd.pm.policy; - -import gov.nist.csd.pm.policy.exceptions.PMException; - -public interface PolicySerializer { - - String toJSON() throws PMException; - - String toPML() throws PMException; - -} diff --git a/src/main/java/gov/nist/csd/pm/policy/Prohibitions.java b/src/main/java/gov/nist/csd/pm/policy/Prohibitions.java deleted file mode 100644 index c1f992e9f..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/Prohibitions.java +++ /dev/null @@ -1,79 +0,0 @@ -package gov.nist.csd.pm.policy; - -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.AccessRightSet; -import gov.nist.csd.pm.policy.model.prohibition.ContainerCondition; -import gov.nist.csd.pm.policy.model.prohibition.Prohibition; -import gov.nist.csd.pm.policy.model.prohibition.ProhibitionSubject; - -import java.util.List; -import java.util.Map; - -public interface Prohibitions { - - /** - * Create a new prohibition. - * - * @param label the identifier of this prohibition. - * @param subject ths subject of the prohibition (user, user attribute, or process). - * @param accessRightSet the access rights to be denied - * @param intersection a boolean flag that determines if the intersection of the containers should be denied or not. - * @param containerConditions the containers to deny the subject access to. - * @throws PMException - */ - void create(String label, ProhibitionSubject subject, AccessRightSet accessRightSet, - boolean intersection, ContainerCondition... containerConditions) throws PMException; - - /** - * Update an existing prohibition. - * - * @param label the identifier of this prohibition. - * @param subject ths subject of the prohibition (user, user attribute, or process). - * @param accessRightSet the access rights to be denied - * @param intersection a boolean flag that determines if the intersection of the containers should be denied or not. - * @param containerConditions the containers to deny the subject access to. - * @throws PMException - */ - void update(String label, ProhibitionSubject subject, AccessRightSet accessRightSet, - boolean intersection, ContainerCondition ... containerConditions) throws PMException; - - /** - * Delete the prohibition, and remove it from the data structure. - * - * @param label The name of the prohibition to delete. - * @throws PMException - */ - void delete(String label) throws PMException; - - /** - * Get all prohibitions. - * @return All prohibitions. - * @throws PMException - */ - Map> getAll() throws PMException; - - /** - * Check if a prohibition exists with the given label. - * @param label The label of the prohibition to check. - * @return True if a prohibition exists with the given label, false otherwise. - * @throws PMException - */ - boolean exists(String label) throws PMException; - - /** - * Get prohibitions with the given subject. - * @param subject The subject to get the prohibitions for (user, user attribute, process) - * @return The prohibitions with the given subject. - * @throws PMException - */ - List getWithSubject(String subject) throws PMException; - - /** - * Get the prohibition with the given label. - * @param label The label of the prohibition to get. - * @return The prohibition with the given label. - * @throws PMException - */ - Prohibition get(String label) throws PMException; - -} diff --git a/src/main/java/gov/nist/csd/pm/policy/UserDefinedPML.java b/src/main/java/gov/nist/csd/pm/policy/UserDefinedPML.java deleted file mode 100644 index 78018dd32..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/UserDefinedPML.java +++ /dev/null @@ -1,69 +0,0 @@ -package gov.nist.csd.pm.policy; - -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; -import gov.nist.csd.pm.policy.exceptions.PMException; - -import java.util.Map; - -public interface UserDefinedPML { - - /** - * Add a new user defined PML function. The function will be available to any subsequent PML statements. - * @param functionDefinitionStatement The function definition to add. - * @throws PMException - */ - void createFunction(FunctionDefinitionStatement functionDefinitionStatement) throws PMException; - - /** - * Remove a user defined PML function. - * @param functionName The name of the function to be removed. - * @throws PMException - */ - void deleteFunction(String functionName) throws PMException; - - /** - * Get all user defined PML functions. - * @return A map of function names to function definitions for all functions. - * @throws PMException - */ - Map getFunctions() throws PMException; - - /** - * Get the function definition with the given name. - * @param name The name of the function to get. - * @return The function definition of the function with the given name. - * @throws PMException - */ - FunctionDefinitionStatement getFunction(String name) throws PMException; - - /** - * Add a new user defined PML constant. The constant will be available to any subsequent PML statements. - * @param constantName The name of the constant. - * @param constantValue The value of the constant. - * @throws PMException - */ - void createConstant(String constantName, Value constantValue) throws PMException; - - /** - * Remove a PML constant. - * @param constName The name of the constant to remove. - * @throws PMException - */ - void deleteConstant(String constName) throws PMException; - - /** - * Get all user defined contants. - * @return A map of constant names to constant values for all constants. - * @throws PMException - */ - Map getConstants() throws PMException; - - /** - * Get the constant value with the given name. - * @param name The name of the constant to get. - * @return The value of the constant with the given name. - * @throws PMException - */ - Value getConstant(String name) throws PMException; -} diff --git a/src/main/java/gov/nist/csd/pm/policy/events/AddConstantEvent.java b/src/main/java/gov/nist/csd/pm/policy/events/AddConstantEvent.java deleted file mode 100644 index 21f44ec52..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/events/AddConstantEvent.java +++ /dev/null @@ -1,27 +0,0 @@ -package gov.nist.csd.pm.policy.events; - -import gov.nist.csd.pm.policy.pml.model.expression.Value; - -public class AddConstantEvent implements PolicyEvent { - - private final String name; - private final Value value; - - public AddConstantEvent(String name, Value value) { - this.name = name; - this.value = value; - } - - public String getName() { - return name; - } - - public Value getValue() { - return value; - } - - @Override - public String getEventName() { - return "add_constant"; - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/events/AddFunctionEvent.java b/src/main/java/gov/nist/csd/pm/policy/events/AddFunctionEvent.java deleted file mode 100644 index 51949e5bb..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/events/AddFunctionEvent.java +++ /dev/null @@ -1,21 +0,0 @@ -package gov.nist.csd.pm.policy.events; - -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; - -public class AddFunctionEvent implements PolicyEvent { - - private final FunctionDefinitionStatement functionDefinitionStatement; - - public AddFunctionEvent(FunctionDefinitionStatement functionDefinitionStatement) { - this.functionDefinitionStatement = functionDefinitionStatement; - } - - public FunctionDefinitionStatement getFunctionDefinitionStatement() { - return functionDefinitionStatement; - } - - @Override - public String getEventName() { - return "add_function"; - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/events/AssignAllEvent.java b/src/main/java/gov/nist/csd/pm/policy/events/AssignAllEvent.java deleted file mode 100644 index f06c090f3..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/events/AssignAllEvent.java +++ /dev/null @@ -1,27 +0,0 @@ -package gov.nist.csd.pm.policy.events; - -import java.util.List; - -public class AssignAllEvent implements PolicyEvent{ - - private final List children; - private final String target; - - public AssignAllEvent(List children, String target) { - this.children = children; - this.target = target; - } - - public List getChildren() { - return children; - } - - public String getTarget() { - return target; - } - - @Override - public String getEventName() { - return "assign_all"; - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/events/AssignEvent.java b/src/main/java/gov/nist/csd/pm/policy/events/AssignEvent.java deleted file mode 100644 index 57eb6e5bb..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/events/AssignEvent.java +++ /dev/null @@ -1,25 +0,0 @@ -package gov.nist.csd.pm.policy.events; - -public class AssignEvent implements PolicyEvent { - - private final String child; - private final String parent; - - public AssignEvent(String child, String parent) { - this.child = child; - this.parent = parent; - } - - public String getChild() { - return child; - } - - public String getParent() { - return parent; - } - - @Override - public String getEventName() { - return "assign"; - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/events/AssignToEvent.java b/src/main/java/gov/nist/csd/pm/policy/events/AssignToEvent.java deleted file mode 100644 index 6a9bcc788..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/events/AssignToEvent.java +++ /dev/null @@ -1,25 +0,0 @@ -package gov.nist.csd.pm.policy.events; - -public class AssignToEvent implements PolicyEvent { - - private final String child; - private final String parent; - - public AssignToEvent(String child, String parent) { - this.child = child; - this.parent = parent; - } - - public String getChild() { - return child; - } - - public String getParent() { - return parent; - } - - @Override - public String getEventName() { - return "assign_to"; - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/events/AssociateEvent.java b/src/main/java/gov/nist/csd/pm/policy/events/AssociateEvent.java deleted file mode 100644 index cdf1222ad..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/events/AssociateEvent.java +++ /dev/null @@ -1,33 +0,0 @@ -package gov.nist.csd.pm.policy.events; - -import gov.nist.csd.pm.policy.model.access.AccessRightSet; - -public class AssociateEvent implements PolicyEvent { - - private final String ua; - private final String target; - private final AccessRightSet accessRightSet; - - public AssociateEvent(String ua, String target, AccessRightSet accessRightSet) { - this.ua = ua; - this.target = target; - this.accessRightSet = accessRightSet; - } - - public String getUa() { - return ua; - } - - public String getTarget() { - return target; - } - - public AccessRightSet getAccessRightSet() { - return accessRightSet; - } - - @Override - public String getEventName() { - return "associate"; - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/events/BasePolicyEventHandler.java b/src/main/java/gov/nist/csd/pm/policy/events/BasePolicyEventHandler.java deleted file mode 100644 index a3fd34f98..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/events/BasePolicyEventHandler.java +++ /dev/null @@ -1,185 +0,0 @@ -package gov.nist.csd.pm.policy.events; - -import gov.nist.csd.pm.policy.*; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.obligation.Rule; -import gov.nist.csd.pm.policy.model.prohibition.ContainerCondition; - -/** - * Implements the PolicyEventListener interface to apply policy events to the passed PolicyAuthor. - */ -public abstract class BasePolicyEventHandler implements PolicyEventListener, Policy { - - protected Policy policy; - - protected BasePolicyEventHandler(Policy policy) { - this.policy = policy; - } - - @Override - public void handlePolicyEvent(PolicyEvent event) throws PMException { - if (event instanceof CreateNodeEvent createNodeEvent) { - handleCreateNodeEvent(createNodeEvent); - } else if (event instanceof AssignEvent assignEvent) { - handleAssignEvent(assignEvent); - } else if (event instanceof AssociateEvent associateEvent) { - handleAssociateEvent(associateEvent); - } else if (event instanceof CreateObligationEvent createObligationEvent) { - handleCreateObligationEvent(createObligationEvent); - } else if (event instanceof CreateProhibitionEvent createProhibitionEvent) { - handleCreateProhibitionEvent(createProhibitionEvent); - } else if (event instanceof DeassignEvent deassignEvent) { - handleDeassignEvent(deassignEvent); - } else if (event instanceof DeleteNodeEvent deleteNodeEvent) { - handleDeleteNodeEvent(deleteNodeEvent); - } else if (event instanceof DeleteObligationEvent deleteObligationEvent) { - handleDeleteObligationEvent(deleteObligationEvent); - } else if (event instanceof DeleteProhibitionEvent deleteProhibitionEvent) { - handleDeleteProhibitionEvent(deleteProhibitionEvent); - } else if (event instanceof DissociateEvent dissociateEvent) { - handleDissociateEvent(dissociateEvent); - } else if (event instanceof SetNodePropertiesEvent setNodePropertiesEvent) { - handleSetNodePropertiesEvent(setNodePropertiesEvent); - } else if (event instanceof SetResourceAccessRightsEvent setResourceAccessRightsEvent) { - handleSetResourceAccessRights(setResourceAccessRightsEvent); - } else if (event instanceof UpdateObligationEvent updateObligationEvent) { - handleUpdateObligationEvent(updateObligationEvent); - } else if (event instanceof UpdateProhibitionEvent updateProhibitionEvent) { - handleUpdateProhibitionEvent(updateProhibitionEvent); - } - } - - protected void handleUpdateProhibitionEvent(UpdateProhibitionEvent updateProhibitionEvent) throws PMException { - policy.prohibitions().update( - updateProhibitionEvent.getName(), - updateProhibitionEvent.getSubject(), - updateProhibitionEvent.getAccessRightSet(), - updateProhibitionEvent.isIntersection(), - updateProhibitionEvent.getContainers().toArray(ContainerCondition[]::new) - ); - } - - protected void handleUpdateObligationEvent(UpdateObligationEvent updateObligationEvent) throws PMException { - policy.obligations().update( - updateObligationEvent.getAuthor(), - updateObligationEvent.getLabel(), - updateObligationEvent.getRules().toArray(Rule[]::new) - ); - } - - protected void handleSetResourceAccessRights(SetResourceAccessRightsEvent setResourceAccessRightsEvent) throws PMException { - policy.graph().setResourceAccessRights(setResourceAccessRightsEvent.getAccessRightSet()); - } - - protected void handleSetNodePropertiesEvent(SetNodePropertiesEvent setNodePropertiesEvent) throws PMException { - policy.graph().setNodeProperties(setNodePropertiesEvent.getName(), setNodePropertiesEvent.getProperties()); - } - - protected void handleDissociateEvent(DissociateEvent dissociateEvent) throws PMException { - policy.graph().dissociate(dissociateEvent.getUa(), dissociateEvent.getTarget()); - } - - protected void handleDeleteProhibitionEvent(DeleteProhibitionEvent deleteProhibitionEvent) throws PMException { - policy.prohibitions().delete(deleteProhibitionEvent.getProhibition().getLabel()); - } - - protected void handleDeleteObligationEvent(DeleteObligationEvent deleteObligationEvent) throws PMException { - policy.obligations().delete(deleteObligationEvent.getObligation().getLabel()); - } - - protected void handleDeleteNodeEvent(DeleteNodeEvent deleteNodeEvent) throws PMException { - policy.graph().deleteNode(deleteNodeEvent.getName()); - } - - protected void handleDeassignEvent(DeassignEvent deassignEvent) throws PMException { - policy.graph().deassign(deassignEvent.getChild(), deassignEvent.getParent()); - } - - protected void handleCreateProhibitionEvent(CreateProhibitionEvent createProhibitionEvent) throws PMException { - policy.prohibitions().create( - createProhibitionEvent.getLabel(), - createProhibitionEvent.getSubject(), - createProhibitionEvent.getAccessRightSet(), - createProhibitionEvent.isIntersection(), - createProhibitionEvent.getContainers().toArray(ContainerCondition[]::new) - ); - } - - protected void handleCreateObligationEvent(CreateObligationEvent createObligationEvent) throws PMException { - policy.obligations().create(createObligationEvent.getAuthor(), - createObligationEvent.getLabel(), - createObligationEvent.getRules().toArray(Rule[]::new)); - } - - protected void handleAssociateEvent(AssociateEvent associateEvent) throws PMException { - policy.graph().associate(associateEvent.getUa(), associateEvent.getTarget(), associateEvent.getAccessRightSet()); - } - - protected void handleAssignEvent(AssignEvent assignEvent) throws PMException { - policy.graph().assign(assignEvent.getChild(), assignEvent.getParent()); - } - - protected void handleCreateNodeEvent(CreateNodeEvent createNodeEvent) throws PMException { - switch (createNodeEvent.getType()) { - case PC -> this.policy.graph().createPolicyClass( - createNodeEvent.getName(), - createNodeEvent.getProperties() - ); - case OA -> this.policy.graph().createObjectAttribute( - createNodeEvent.getName(), - createNodeEvent.getProperties(), - createNodeEvent.getInitialParent(), - createNodeEvent.getAdditionalParents() - ); - case UA -> this.policy.graph().createUserAttribute( - createNodeEvent.getName(), - createNodeEvent.getProperties(), - createNodeEvent.getInitialParent(), - createNodeEvent.getAdditionalParents() - ); - case O -> this.policy.graph().createObject( - createNodeEvent.getName(), - createNodeEvent.getProperties(), - createNodeEvent.getInitialParent(), - createNodeEvent.getAdditionalParents() - ); - case U -> this.policy.graph().createUser( - createNodeEvent.getName(), - createNodeEvent.getProperties(), - createNodeEvent.getInitialParent(), - createNodeEvent.getAdditionalParents() - ); - default -> { /* ANY will never be passed as a node type */ } - } - } - - @Override - public Graph graph() { - return policy.graph(); - } - - @Override - public Prohibitions prohibitions() { - return policy.prohibitions(); - } - - @Override - public Obligations obligations() { - return policy.obligations(); - } - - @Override - public UserDefinedPML userDefinedPML() { - return policy.userDefinedPML(); - } - - @Override - public PolicySerializer serialize() throws PMException { - return policy.serialize(); - } - - @Override - public PolicyDeserializer deserialize() throws PMException { - return policy.deserialize(); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/events/BeginTxEvent.java b/src/main/java/gov/nist/csd/pm/policy/events/BeginTxEvent.java deleted file mode 100644 index 642f872ef..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/events/BeginTxEvent.java +++ /dev/null @@ -1,8 +0,0 @@ -package gov.nist.csd.pm.policy.events; - -public class BeginTxEvent implements PolicyEvent { - @Override - public String getEventName() { - return "begin_tx"; - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/events/CommitTxEvent.java b/src/main/java/gov/nist/csd/pm/policy/events/CommitTxEvent.java deleted file mode 100644 index b5158b509..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/events/CommitTxEvent.java +++ /dev/null @@ -1,11 +0,0 @@ -package gov.nist.csd.pm.policy.events; - -public class CommitTxEvent implements PolicyEvent { - - public CommitTxEvent() { /* This object is used to notify a listener that a commit event happened */ } - - @Override - public String getEventName() { - return "commit_tx"; - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/events/CreateNodeEvent.java b/src/main/java/gov/nist/csd/pm/policy/events/CreateNodeEvent.java deleted file mode 100644 index d9f4802f7..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/events/CreateNodeEvent.java +++ /dev/null @@ -1,48 +0,0 @@ -package gov.nist.csd.pm.policy.events; - -import gov.nist.csd.pm.policy.model.graph.nodes.NodeType; - -import java.util.Map; - -public abstract class CreateNodeEvent implements PolicyEvent { - - private final String name; - private final NodeType type; - private final Map properties; - private String initialParent; - private String[] additionalParents; - - protected CreateNodeEvent(String name, NodeType type, Map properties, String initialParent, String ... parents) { - this.name = name; - this.type = type; - this.properties = properties; - this.initialParent = initialParent; - this.additionalParents = parents; - } - - protected CreateNodeEvent(String name, NodeType type, Map properties) { - this.name = name; - this.type = type; - this.properties = properties; - } - - public String getName() { - return name; - } - - public NodeType getType() { - return type; - } - - public Map getProperties() { - return properties; - } - - public String getInitialParent() { - return initialParent; - } - - public String[] getAdditionalParents() { - return additionalParents; - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/events/CreateObjectAttributeEvent.java b/src/main/java/gov/nist/csd/pm/policy/events/CreateObjectAttributeEvent.java deleted file mode 100644 index adb019433..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/events/CreateObjectAttributeEvent.java +++ /dev/null @@ -1,16 +0,0 @@ -package gov.nist.csd.pm.policy.events; - -import gov.nist.csd.pm.policy.model.graph.nodes.NodeType; - -import java.util.Map; - -public class CreateObjectAttributeEvent extends CreateNodeEvent{ - public CreateObjectAttributeEvent(String name, Map properties, String initialParent, String... parents) { - super(name, NodeType.OA, properties, initialParent, parents); - } - - @Override - public String getEventName() { - return "create_object_attribute"; - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/events/CreateObjectEvent.java b/src/main/java/gov/nist/csd/pm/policy/events/CreateObjectEvent.java deleted file mode 100644 index dcff5b318..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/events/CreateObjectEvent.java +++ /dev/null @@ -1,16 +0,0 @@ -package gov.nist.csd.pm.policy.events; - -import gov.nist.csd.pm.policy.model.graph.nodes.NodeType; - -import java.util.Map; - -public class CreateObjectEvent extends CreateNodeEvent{ - public CreateObjectEvent(String name, Map properties, String initialParent, String... parents) { - super(name, NodeType.O, properties, initialParent, parents); - } - - @Override - public String getEventName() { - return "create_object"; - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/events/CreateObligationEvent.java b/src/main/java/gov/nist/csd/pm/policy/events/CreateObligationEvent.java deleted file mode 100644 index 7133abc04..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/events/CreateObligationEvent.java +++ /dev/null @@ -1,36 +0,0 @@ -package gov.nist.csd.pm.policy.events; - -import gov.nist.csd.pm.policy.model.access.UserContext; -import gov.nist.csd.pm.policy.model.obligation.Rule; - -import java.util.List; - -public class CreateObligationEvent implements PolicyEvent { - - private final UserContext author; - private final String label; - private final List rules; - - public CreateObligationEvent(UserContext author, String label, List rules) { - this.author = author; - this.label = label; - this.rules = rules; - } - - public UserContext getAuthor() { - return author; - } - - public String getLabel() { - return label; - } - - public List getRules() { - return rules; - } - - @Override - public String getEventName() { - return "create_obligation"; - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/events/CreatePolicyClassEvent.java b/src/main/java/gov/nist/csd/pm/policy/events/CreatePolicyClassEvent.java deleted file mode 100644 index 9bcc0bf23..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/events/CreatePolicyClassEvent.java +++ /dev/null @@ -1,16 +0,0 @@ -package gov.nist.csd.pm.policy.events; - -import gov.nist.csd.pm.policy.model.graph.nodes.NodeType; - -import java.util.Map; - -public class CreatePolicyClassEvent extends CreateNodeEvent{ - public CreatePolicyClassEvent(String name, Map properties) { - super(name, NodeType.PC, properties); - } - - @Override - public String getEventName() { - return "create_policy_class"; - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/events/CreateProhibitionEvent.java b/src/main/java/gov/nist/csd/pm/policy/events/CreateProhibitionEvent.java deleted file mode 100644 index f4024aa56..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/events/CreateProhibitionEvent.java +++ /dev/null @@ -1,49 +0,0 @@ -package gov.nist.csd.pm.policy.events; - -import gov.nist.csd.pm.policy.model.access.AccessRightSet; -import gov.nist.csd.pm.policy.model.prohibition.ContainerCondition; -import gov.nist.csd.pm.policy.model.prohibition.ProhibitionSubject; - -import java.util.List; - -public class CreateProhibitionEvent implements PolicyEvent { - - private final String label; - private final ProhibitionSubject subject; - private final List containers; - private final AccessRightSet accessRightSet; - private final boolean intersection; - - public CreateProhibitionEvent(String label, ProhibitionSubject subject, AccessRightSet accessRightSet, boolean intersection, List containers) { - this.label = label; - this.subject = subject; - this.accessRightSet = accessRightSet; - this.intersection = intersection; - this.containers = containers; - } - - public String getLabel() { - return label; - } - - public ProhibitionSubject getSubject() { - return subject; - } - - public List getContainers() { - return containers; - } - - public AccessRightSet getAccessRightSet() { - return accessRightSet; - } - - public boolean isIntersection() { - return intersection; - } - - @Override - public String getEventName() { - return "create_prohibition"; - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/events/CreateUserAttributeEvent.java b/src/main/java/gov/nist/csd/pm/policy/events/CreateUserAttributeEvent.java deleted file mode 100644 index 2800be0fe..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/events/CreateUserAttributeEvent.java +++ /dev/null @@ -1,16 +0,0 @@ -package gov.nist.csd.pm.policy.events; - -import gov.nist.csd.pm.policy.model.graph.nodes.NodeType; - -import java.util.Map; - -public class CreateUserAttributeEvent extends CreateNodeEvent{ - public CreateUserAttributeEvent(String name, Map properties, String initialParent, String... parents) { - super(name, NodeType.UA, properties, initialParent, parents); - } - - @Override - public String getEventName() { - return "create_user_attribute"; - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/events/CreateUserEvent.java b/src/main/java/gov/nist/csd/pm/policy/events/CreateUserEvent.java deleted file mode 100644 index 10096ae69..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/events/CreateUserEvent.java +++ /dev/null @@ -1,16 +0,0 @@ -package gov.nist.csd.pm.policy.events; - -import gov.nist.csd.pm.policy.model.graph.nodes.NodeType; - -import java.util.Map; - -public class CreateUserEvent extends CreateNodeEvent{ - public CreateUserEvent(String name, Map properties, String initialParent, String... parents) { - super(name, NodeType.U, properties, initialParent, parents); - } - - @Override - public String getEventName() { - return "create_user"; - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/events/DeassignAllEvent.java b/src/main/java/gov/nist/csd/pm/policy/events/DeassignAllEvent.java deleted file mode 100644 index 83f6de370..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/events/DeassignAllEvent.java +++ /dev/null @@ -1,27 +0,0 @@ -package gov.nist.csd.pm.policy.events; - -import java.util.List; - -public class DeassignAllEvent implements PolicyEvent{ - - private final List children; - private final String target; - - public DeassignAllEvent(List children, String target) { - this.children = children; - this.target = target; - } - - public List getChildren() { - return children; - } - - public String getTarget() { - return target; - } - - @Override - public String getEventName() { - return "deassign_all"; - } -} \ No newline at end of file diff --git a/src/main/java/gov/nist/csd/pm/policy/events/DeassignAllFromAndDeleteEvent.java b/src/main/java/gov/nist/csd/pm/policy/events/DeassignAllFromAndDeleteEvent.java deleted file mode 100644 index d66cdf96b..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/events/DeassignAllFromAndDeleteEvent.java +++ /dev/null @@ -1,19 +0,0 @@ -package gov.nist.csd.pm.policy.events; - -public class DeassignAllFromAndDeleteEvent implements PolicyEvent{ - - private final String node; - - public DeassignAllFromAndDeleteEvent(String node) { - this.node = node; - } - - public String getNode() { - return node; - } - - @Override - public String getEventName() { - return "deassign_all_from_and_delete"; - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/events/DeassignEvent.java b/src/main/java/gov/nist/csd/pm/policy/events/DeassignEvent.java deleted file mode 100644 index ac6d8ad2f..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/events/DeassignEvent.java +++ /dev/null @@ -1,25 +0,0 @@ -package gov.nist.csd.pm.policy.events; - -public class DeassignEvent implements PolicyEvent { - - private final String child; - private final String parent; - - public DeassignEvent(String child, String parent) { - this.child = child; - this.parent = parent; - } - - public String getChild() { - return child; - } - - public String getParent() { - return parent; - } - - @Override - public String getEventName() { - return "deassign"; - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/events/DeassignFromEvent.java b/src/main/java/gov/nist/csd/pm/policy/events/DeassignFromEvent.java deleted file mode 100644 index 8fc138a01..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/events/DeassignFromEvent.java +++ /dev/null @@ -1,25 +0,0 @@ -package gov.nist.csd.pm.policy.events; - -public class DeassignFromEvent implements PolicyEvent { - - private final String child; - private final String parent; - - public DeassignFromEvent(String child, String parent) { - this.child = child; - this.parent = parent; - } - - public String getChild() { - return child; - } - - public String getParent() { - return parent; - } - - @Override - public String getEventName() { - return "deassign_from"; - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/events/DeleteNodeEvent.java b/src/main/java/gov/nist/csd/pm/policy/events/DeleteNodeEvent.java deleted file mode 100644 index 2c6bf4024..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/events/DeleteNodeEvent.java +++ /dev/null @@ -1,19 +0,0 @@ -package gov.nist.csd.pm.policy.events; - -public class DeleteNodeEvent implements PolicyEvent { - - private final String name; - - public DeleteNodeEvent(String name) { - this.name = name; - } - - public String getName() { - return name; - } - - @Override - public String getEventName() { - return "delete_node"; - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/events/DeleteObligationEvent.java b/src/main/java/gov/nist/csd/pm/policy/events/DeleteObligationEvent.java deleted file mode 100644 index cf5564bf1..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/events/DeleteObligationEvent.java +++ /dev/null @@ -1,21 +0,0 @@ -package gov.nist.csd.pm.policy.events; - -import gov.nist.csd.pm.policy.model.obligation.Obligation; - -public class DeleteObligationEvent implements PolicyEvent { - - private final Obligation obligation; - - public DeleteObligationEvent(Obligation obligation) { - this.obligation = obligation; - } - - public Obligation getObligation() { - return obligation; - } - - @Override - public String getEventName() { - return "delete_obligation"; - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/events/DeleteProhibitionEvent.java b/src/main/java/gov/nist/csd/pm/policy/events/DeleteProhibitionEvent.java deleted file mode 100644 index 8e3c76bd4..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/events/DeleteProhibitionEvent.java +++ /dev/null @@ -1,21 +0,0 @@ -package gov.nist.csd.pm.policy.events; - -import gov.nist.csd.pm.policy.model.prohibition.Prohibition; - -public class DeleteProhibitionEvent implements PolicyEvent { - - private final Prohibition prohibition; - - public DeleteProhibitionEvent(Prohibition prohibition) { - this.prohibition = prohibition; - } - - public Prohibition getProhibition() { - return prohibition; - } - - @Override - public String getEventName() { - return "delete_prohibition"; - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/events/DissociateEvent.java b/src/main/java/gov/nist/csd/pm/policy/events/DissociateEvent.java deleted file mode 100644 index 7178e729d..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/events/DissociateEvent.java +++ /dev/null @@ -1,25 +0,0 @@ -package gov.nist.csd.pm.policy.events; - -public class DissociateEvent implements PolicyEvent { - - private final String ua; - private final String target; - - public DissociateEvent(String ua, String target) { - this.ua = ua; - this.target = target; - } - - public String getUa() { - return ua; - } - - public String getTarget() { - return target; - } - - @Override - public String getEventName() { - return "dissociate"; - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/events/PolicyEvent.java b/src/main/java/gov/nist/csd/pm/policy/events/PolicyEvent.java deleted file mode 100644 index 6b6eb86c6..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/events/PolicyEvent.java +++ /dev/null @@ -1,7 +0,0 @@ -package gov.nist.csd.pm.policy.events; - -public interface PolicyEvent { - - String getEventName(); - -} diff --git a/src/main/java/gov/nist/csd/pm/policy/events/PolicyEventEmitter.java b/src/main/java/gov/nist/csd/pm/policy/events/PolicyEventEmitter.java deleted file mode 100644 index 5ba27489c..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/events/PolicyEventEmitter.java +++ /dev/null @@ -1,9 +0,0 @@ -package gov.nist.csd.pm.policy.events; - -import gov.nist.csd.pm.policy.exceptions.PMException; - -public interface PolicyEventEmitter { - void addEventListener(PolicyEventListener listener, boolean sync) throws PMException; - void removeEventListener(PolicyEventListener listener); - void emitEvent(PolicyEvent event) throws PMException; -} diff --git a/src/main/java/gov/nist/csd/pm/policy/events/PolicyEventHandler.java b/src/main/java/gov/nist/csd/pm/policy/events/PolicyEventHandler.java deleted file mode 100644 index 7b877b8f8..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/events/PolicyEventHandler.java +++ /dev/null @@ -1,109 +0,0 @@ -package gov.nist.csd.pm.policy.events; - -import gov.nist.csd.pm.policy.exceptions.PMException; - -public class PolicyEventHandler { - - public PolicyEventHandler() {} - - public void handle(PolicyEvent event) throws PMException { - if (event instanceof AddConstantEvent e) { - handleAddConstantEvent(e); - } else if (event instanceof AddFunctionEvent e) { - handleAddFunctionEvent(e); - } else if (event instanceof AssignEvent e) { - handleAssignEvent(e); - } else if (event instanceof AssignToEvent e) { - handleAssignToEvent(e); - } else if (event instanceof AssociateEvent e) { - handleAssociateEvent(e); - } else if (event instanceof BeginTxEvent e) { - handleBeginTxEvent(e); - } else if (event instanceof CommitTxEvent e) { - handleCommitTxEvent(e); - }else if (event instanceof CreateObjectAttributeEvent e) { - handleCreateObjectAttributeEvent(e); - } else if (event instanceof CreateObjectEvent e) { - handleCreateObjectEvent(e); - } else if (event instanceof CreateObligationEvent e) { - handleCreateObligationEvent(e); - } else if (event instanceof CreatePolicyClassEvent e) { - handleCreatePolicyClassEvent(e); - } else if (event instanceof CreateProhibitionEvent e) { - handleCreateProhibitionEvent(e); - } else if (event instanceof CreateUserAttributeEvent e) { - handleCreateUserAttributeEvent(e); - } else if (event instanceof CreateUserEvent e) { - handleCreateUserEvent(e); - } else if (event instanceof CreateNodeEvent e) { - handleCreateNodeEvent(e); - } else if (event instanceof DeassignEvent e) { - handleDeassignEvent(e); - } else if (event instanceof DeassignFromEvent e) { - handleDeassignFromEvent(e); - } else if (event instanceof DeleteNodeEvent e) { - handleDeleteNodeEvent(e); - } else if (event instanceof DeleteObligationEvent e) { - handleDeleteObligationEvent(e); - } else if (event instanceof DeleteProhibitionEvent e) { - handleDeleteProhibitionEvent(e); - } else if (event instanceof DissociateEvent e) { - handleDissociateEvent(e); - } else if (event instanceof PolicySynchronizationEvent e) { - handlePolicySyncEvent(e); - } else if (event instanceof RemoveConstantEvent e) { - handleRemoveConstantEvent(e); - } else if (event instanceof RemoveFunctionEvent e) { - handleRemoveFunctionEvent(e); - } else if (event instanceof RollbackTxEvent e) { - handleRollbackTxEvent(e); - } else if (event instanceof SetNodePropertiesEvent e) { - handleSetNodePropertiesEvent(e); - } else if (event instanceof SetResourceAccessRightsEvent e) { - handleSetResourceAccessRightsEvent(e); - } else if (event instanceof UpdateObligationEvent e) { - handleUpdateObligationEvent(e); - } else if (event instanceof UpdateProhibitionEvent e) { - handleUpdateProhibitionEvent(e); - } else if (event instanceof AssignAllEvent e) { - handleAssignAllEvent(e); - } else if (event instanceof DeassignAllEvent e) { - handleDeassignAllEvent(e); - } else if (event instanceof DeassignAllFromAndDeleteEvent e) { - handleDeassignAllFromAndDeleteEvent(e); - } - } - - public void handleDeassignAllFromAndDeleteEvent(DeassignAllFromAndDeleteEvent e) throws PMException {} - public void handleDeassignAllEvent(DeassignAllEvent e) throws PMException {} - public void handleAssignAllEvent(AssignAllEvent e) throws PMException {} - public void handleAddConstantEvent(AddConstantEvent e) throws PMException {} - public void handleAddFunctionEvent(AddFunctionEvent e) throws PMException {} - public void handleAssignEvent(AssignEvent e) throws PMException {} - public void handleAssignToEvent(AssignToEvent e) throws PMException {} - public void handleAssociateEvent(AssociateEvent e) throws PMException {} - public void handleBeginTxEvent(BeginTxEvent e) throws PMException {} - public void handleCommitTxEvent(CommitTxEvent e) throws PMException {} - public void handleCreateNodeEvent(CreateNodeEvent e) throws PMException {} - public void handleCreateObjectAttributeEvent(CreateObjectAttributeEvent e) throws PMException {} - public void handleCreateObjectEvent(CreateObjectEvent e) throws PMException {} - public void handleCreateObligationEvent(CreateObligationEvent e) throws PMException {} - public void handleCreatePolicyClassEvent(CreatePolicyClassEvent e) throws PMException {} - public void handleCreateProhibitionEvent(CreateProhibitionEvent e) throws PMException {} - public void handleCreateUserAttributeEvent(CreateUserAttributeEvent e) throws PMException {} - public void handleCreateUserEvent(CreateUserEvent e) throws PMException {} - public void handleDeassignEvent(DeassignEvent e) throws PMException {} - public void handleDeassignFromEvent(DeassignFromEvent e) throws PMException {} - public void handleDeleteNodeEvent(DeleteNodeEvent e) throws PMException {} - public void handleDeleteObligationEvent(DeleteObligationEvent e) throws PMException {} - public void handleDeleteProhibitionEvent(DeleteProhibitionEvent e) throws PMException {} - public void handleDissociateEvent(DissociateEvent e) throws PMException {} - public void handlePolicySyncEvent(PolicySynchronizationEvent e) throws PMException {} - public void handleRemoveConstantEvent(RemoveConstantEvent e) throws PMException {} - public void handleRemoveFunctionEvent(RemoveFunctionEvent e) throws PMException {} - public void handleRollbackTxEvent(RollbackTxEvent e) throws PMException {} - public void handleSetNodePropertiesEvent(SetNodePropertiesEvent e) throws PMException {} - public void handleSetResourceAccessRightsEvent(SetResourceAccessRightsEvent e) throws PMException {} - public void handleUpdateObligationEvent(UpdateObligationEvent e) throws PMException {} - public void handleUpdateProhibitionEvent(UpdateProhibitionEvent e) throws PMException {} -} diff --git a/src/main/java/gov/nist/csd/pm/policy/events/PolicyEventListener.java b/src/main/java/gov/nist/csd/pm/policy/events/PolicyEventListener.java deleted file mode 100644 index 03064d944..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/events/PolicyEventListener.java +++ /dev/null @@ -1,9 +0,0 @@ -package gov.nist.csd.pm.policy.events; - -import gov.nist.csd.pm.policy.exceptions.PMException; - -public interface PolicyEventListener { - - void handlePolicyEvent(PolicyEvent event) throws PMException; - -} diff --git a/src/main/java/gov/nist/csd/pm/policy/events/PolicySync.java b/src/main/java/gov/nist/csd/pm/policy/events/PolicySync.java deleted file mode 100644 index 741058ab1..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/events/PolicySync.java +++ /dev/null @@ -1,9 +0,0 @@ -package gov.nist.csd.pm.policy.events; - -import gov.nist.csd.pm.policy.exceptions.PMException; - -public interface PolicySync { - - PolicySynchronizationEvent policySync() throws PMException; - -} diff --git a/src/main/java/gov/nist/csd/pm/policy/events/PolicySynchronizationEvent.java b/src/main/java/gov/nist/csd/pm/policy/events/PolicySynchronizationEvent.java deleted file mode 100644 index 250b41974..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/events/PolicySynchronizationEvent.java +++ /dev/null @@ -1,21 +0,0 @@ -package gov.nist.csd.pm.policy.events; - -import gov.nist.csd.pm.pap.memory.MemoryPolicyStore; - -public class PolicySynchronizationEvent implements PolicyEvent { - - private final MemoryPolicyStore policyStore; - - public PolicySynchronizationEvent(MemoryPolicyStore policyStore) { - this.policyStore = policyStore; - } - - public MemoryPolicyStore getPolicyStore() { - return policyStore; - } - - @Override - public String getEventName() { - return "policy_sync"; - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/events/RemoveConstantEvent.java b/src/main/java/gov/nist/csd/pm/policy/events/RemoveConstantEvent.java deleted file mode 100644 index 9d836a7df..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/events/RemoveConstantEvent.java +++ /dev/null @@ -1,19 +0,0 @@ -package gov.nist.csd.pm.policy.events; - -public class RemoveConstantEvent implements PolicyEvent { - - private final String name; - - public RemoveConstantEvent(String name) { - this.name = name; - } - - public String getName() { - return name; - } - - @Override - public String getEventName() { - return "remove_constant"; - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/events/RemoveFunctionEvent.java b/src/main/java/gov/nist/csd/pm/policy/events/RemoveFunctionEvent.java deleted file mode 100644 index d67996555..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/events/RemoveFunctionEvent.java +++ /dev/null @@ -1,19 +0,0 @@ -package gov.nist.csd.pm.policy.events; - -public class RemoveFunctionEvent implements PolicyEvent { - - private String functionName; - - public RemoveFunctionEvent(String functionName) { - this.functionName = functionName; - } - - public String getFunctionName() { - return functionName; - } - - @Override - public String getEventName() { - return "remove_function"; - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/events/RollbackTxEvent.java b/src/main/java/gov/nist/csd/pm/policy/events/RollbackTxEvent.java deleted file mode 100644 index e7e6d0def..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/events/RollbackTxEvent.java +++ /dev/null @@ -1,22 +0,0 @@ -package gov.nist.csd.pm.policy.events; - -import gov.nist.csd.pm.policy.exceptions.PMException; - -public class RollbackTxEvent implements PolicySync, PolicyEvent { - - private final PolicySync policySync; - - public RollbackTxEvent(PolicySync policySync) { - this.policySync = policySync; - } - - @Override - public PolicySynchronizationEvent policySync() throws PMException { - return policySync.policySync(); - } - - @Override - public String getEventName() { - return "rollback_tx"; - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/events/SetNodePropertiesEvent.java b/src/main/java/gov/nist/csd/pm/policy/events/SetNodePropertiesEvent.java deleted file mode 100644 index 094ef83ac..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/events/SetNodePropertiesEvent.java +++ /dev/null @@ -1,27 +0,0 @@ -package gov.nist.csd.pm.policy.events; - -import java.util.Map; - -public class SetNodePropertiesEvent implements PolicyEvent { - - private final String name; - private final Map properties; - - public SetNodePropertiesEvent(String name, Map properties) { - this.name = name; - this.properties = properties; - } - - public String getName() { - return name; - } - - public Map getProperties() { - return properties; - } - - @Override - public String getEventName() { - return "set_node_properties"; - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/events/SetResourceAccessRightsEvent.java b/src/main/java/gov/nist/csd/pm/policy/events/SetResourceAccessRightsEvent.java deleted file mode 100644 index ad698e17c..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/events/SetResourceAccessRightsEvent.java +++ /dev/null @@ -1,21 +0,0 @@ -package gov.nist.csd.pm.policy.events; - -import gov.nist.csd.pm.policy.model.access.AccessRightSet; - -public class SetResourceAccessRightsEvent implements PolicyEvent { - - private final AccessRightSet accessRightSet; - - public SetResourceAccessRightsEvent(AccessRightSet accessRightSet) { - this.accessRightSet = accessRightSet; - } - - public AccessRightSet getAccessRightSet() { - return accessRightSet; - } - - @Override - public String getEventName() { - return "set_resource_access_rights"; - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/events/UpdateObligationEvent.java b/src/main/java/gov/nist/csd/pm/policy/events/UpdateObligationEvent.java deleted file mode 100644 index 87917af03..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/events/UpdateObligationEvent.java +++ /dev/null @@ -1,36 +0,0 @@ -package gov.nist.csd.pm.policy.events; - -import gov.nist.csd.pm.policy.model.access.UserContext; -import gov.nist.csd.pm.policy.model.obligation.Rule; - -import java.util.List; - -public class UpdateObligationEvent implements PolicyEvent { - - private UserContext author; - private String label; - private List rules; - - public UpdateObligationEvent(UserContext author, String label, List rules) { - this.author = author; - this.label = label; - this.rules = rules; - } - - public UserContext getAuthor() { - return author; - } - - public String getLabel() { - return label; - } - - public List getRules() { - return rules; - } - - @Override - public String getEventName() { - return "update_obligation"; - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/events/UpdateProhibitionEvent.java b/src/main/java/gov/nist/csd/pm/policy/events/UpdateProhibitionEvent.java deleted file mode 100644 index c76f39cf4..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/events/UpdateProhibitionEvent.java +++ /dev/null @@ -1,49 +0,0 @@ -package gov.nist.csd.pm.policy.events; - -import gov.nist.csd.pm.policy.model.access.AccessRightSet; -import gov.nist.csd.pm.policy.model.prohibition.ContainerCondition; -import gov.nist.csd.pm.policy.model.prohibition.ProhibitionSubject; - -import java.util.List; - -public class UpdateProhibitionEvent implements PolicyEvent { - - private final String name; - private final ProhibitionSubject subject; - private final List containers; - private final AccessRightSet accessRightSet; - private final boolean intersection; - - public UpdateProhibitionEvent(String name, ProhibitionSubject subject, AccessRightSet accessRightSet, boolean intersection, List containers) { - this.name = name; - this.subject = subject; - this.accessRightSet = accessRightSet; - this.intersection = intersection; - this.containers = containers; - } - - public String getName() { - return name; - } - - public ProhibitionSubject getSubject() { - return subject; - } - - public List getContainers() { - return containers; - } - - public AccessRightSet getAccessRightSet() { - return accessRightSet; - } - - public boolean isIntersection() { - return intersection; - } - - @Override - public String getEventName() { - return "update_prohibition"; - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/exceptions/ConstantAlreadyDefinedException.java b/src/main/java/gov/nist/csd/pm/policy/exceptions/ConstantAlreadyDefinedException.java deleted file mode 100644 index 5e8974c3c..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/exceptions/ConstantAlreadyDefinedException.java +++ /dev/null @@ -1,7 +0,0 @@ -package gov.nist.csd.pm.policy.exceptions; - -public class ConstantAlreadyDefinedException extends PMException { - public ConstantAlreadyDefinedException(String name) { - super("constant \"" + name + "\" is already defined"); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/exceptions/DisconnectedNodeException.java b/src/main/java/gov/nist/csd/pm/policy/exceptions/DisconnectedNodeException.java deleted file mode 100644 index c1b37c97e..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/exceptions/DisconnectedNodeException.java +++ /dev/null @@ -1,7 +0,0 @@ -package gov.nist.csd.pm.policy.exceptions; - -public class DisconnectedNodeException extends PMException{ - public DisconnectedNodeException(String child, String parent) { - super("deleting " + child + " from " + parent + " would make " + child + " a disconnected node"); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/exceptions/EventProcessorException.java b/src/main/java/gov/nist/csd/pm/policy/exceptions/EventProcessorException.java deleted file mode 100644 index b0a0f228b..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/exceptions/EventProcessorException.java +++ /dev/null @@ -1,18 +0,0 @@ -package gov.nist.csd.pm.policy.exceptions; - -public class EventProcessorException extends PMException { - private String source; - - public EventProcessorException(String msg) { - super(msg); - } - - public String getSource() { - return source; - } - - public void setSource(String source) { - this.source = source; - } - -} diff --git a/src/main/java/gov/nist/csd/pm/policy/exceptions/FunctionAlreadyDefinedException.java b/src/main/java/gov/nist/csd/pm/policy/exceptions/FunctionAlreadyDefinedException.java deleted file mode 100644 index f5f26e7e9..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/exceptions/FunctionAlreadyDefinedException.java +++ /dev/null @@ -1,7 +0,0 @@ -package gov.nist.csd.pm.policy.exceptions; - -public class FunctionAlreadyDefinedException extends PMException { - public FunctionAlreadyDefinedException(String functionName) { - super("a function with the name \"" + functionName + "\" is already defined"); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/exceptions/NoParentException.java b/src/main/java/gov/nist/csd/pm/policy/exceptions/NoParentException.java deleted file mode 100644 index 0b24ae94b..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/exceptions/NoParentException.java +++ /dev/null @@ -1,7 +0,0 @@ -package gov.nist.csd.pm.policy.exceptions; - -public class NoParentException extends PMException{ - public NoParentException() { - super("a null or empty parent value was provided"); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/exceptions/NodeHasChildrenException.java b/src/main/java/gov/nist/csd/pm/policy/exceptions/NodeHasChildrenException.java deleted file mode 100644 index acc434357..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/exceptions/NodeHasChildrenException.java +++ /dev/null @@ -1,7 +0,0 @@ -package gov.nist.csd.pm.policy.exceptions; - -public class NodeHasChildrenException extends PMException{ - public NodeHasChildrenException(String node) { - super("cannot delete " + node + ", it has nodes assigned to it"); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/exceptions/ObligationDoesNotExistException.java b/src/main/java/gov/nist/csd/pm/policy/exceptions/ObligationDoesNotExistException.java deleted file mode 100644 index c7432105e..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/exceptions/ObligationDoesNotExistException.java +++ /dev/null @@ -1,7 +0,0 @@ -package gov.nist.csd.pm.policy.exceptions; - -public class ObligationDoesNotExistException extends PMException{ - public ObligationDoesNotExistException(String label) { - super("obligation with label " + label + " does not exist"); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/exceptions/ObligationExistsException.java b/src/main/java/gov/nist/csd/pm/policy/exceptions/ObligationExistsException.java deleted file mode 100644 index 15409c533..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/exceptions/ObligationExistsException.java +++ /dev/null @@ -1,7 +0,0 @@ -package gov.nist.csd.pm.policy.exceptions; - -public class ObligationExistsException extends PMException{ - public ObligationExistsException(String label) { - super("obligation with label " + label + " already exists"); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/exceptions/PMException.java b/src/main/java/gov/nist/csd/pm/policy/exceptions/PMException.java deleted file mode 100644 index ce28b898e..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/exceptions/PMException.java +++ /dev/null @@ -1,36 +0,0 @@ -package gov.nist.csd.pm.policy.exceptions; - -import java.security.spec.ECField; -import java.sql.SQLException; -import java.util.Stack; - -/** - * Root exception to cover any possible error in the Policy Machine interfaces. This is to support multiple implementations - * of the same interfaces that may have different and unplanned exceptions. These exceptions can be wrapped in a PMException. - */ -public class PMException extends Exception { - private static final long serialVersionUID = 1L; - - private String message; - - private StackTraceElement[] stackTrace; - - public PMException(String msg, StackTraceElement ... stackTraceElements) { - this.message = msg; - this.stackTrace = stackTraceElements; - } - - public PMException(Exception e) { - this.message = e.getMessage(); - this.stackTrace = e.getStackTrace(); - } - - public String getMessage() { - return message; - } - - @Override - public StackTraceElement[] getStackTrace() { - return stackTrace; - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/exceptions/PMRuntimeException.java b/src/main/java/gov/nist/csd/pm/policy/exceptions/PMRuntimeException.java deleted file mode 100644 index af1e469c4..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/exceptions/PMRuntimeException.java +++ /dev/null @@ -1,8 +0,0 @@ -package gov.nist.csd.pm.policy.exceptions; - -public class PMRuntimeException extends RuntimeException { - - public PMRuntimeException(String message) { - super(message); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/exceptions/ProhibitionDoesNotExistException.java b/src/main/java/gov/nist/csd/pm/policy/exceptions/ProhibitionDoesNotExistException.java deleted file mode 100644 index ed27e3224..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/exceptions/ProhibitionDoesNotExistException.java +++ /dev/null @@ -1,7 +0,0 @@ -package gov.nist.csd.pm.policy.exceptions; - -public class ProhibitionDoesNotExistException extends PMException{ - public ProhibitionDoesNotExistException(String label) { - super("prohibition with the label " + label + " does not exist"); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/exceptions/ProhibitionExistsException.java b/src/main/java/gov/nist/csd/pm/policy/exceptions/ProhibitionExistsException.java deleted file mode 100644 index 55d460a55..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/exceptions/ProhibitionExistsException.java +++ /dev/null @@ -1,7 +0,0 @@ -package gov.nist.csd.pm.policy.exceptions; - -public class ProhibitionExistsException extends PMException{ - public ProhibitionExistsException(String label) { - super("a prohibition with the label " + label + " already exists"); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/exceptions/TransactionNotStartedException.java b/src/main/java/gov/nist/csd/pm/policy/exceptions/TransactionNotStartedException.java deleted file mode 100644 index b21c71e16..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/exceptions/TransactionNotStartedException.java +++ /dev/null @@ -1,7 +0,0 @@ -package gov.nist.csd.pm.policy.exceptions; - -public class TransactionNotStartedException extends PMException{ - public TransactionNotStartedException() { - super("a transaction has not been started using beginTx()"); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/json/JSONGraph.java b/src/main/java/gov/nist/csd/pm/policy/json/JSONGraph.java deleted file mode 100644 index e487190ea..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/json/JSONGraph.java +++ /dev/null @@ -1,56 +0,0 @@ -package gov.nist.csd.pm.policy.json; - -import gov.nist.csd.pm.policy.model.access.AccessRightSet; -import gov.nist.csd.pm.policy.model.graph.nodes.Node; - -import java.util.List; -import java.util.Map; - -public class JSONGraph { - AccessRightSet resourceAccessRights; - List nodes; - List assignments; - Map> associations; - - public JSONGraph() { - } - - public JSONGraph(AccessRightSet resourceAccessRights, List nodes, List assignments, Map> associations) { - this.resourceAccessRights = resourceAccessRights; - this.nodes = nodes; - this.assignments = assignments; - this.associations = associations; - } - - public AccessRightSet getResourceAccessRights() { - return resourceAccessRights; - } - - public void setResourceAccessRights(AccessRightSet resourceAccessRights) { - this.resourceAccessRights = resourceAccessRights; - } - - public List getNodes() { - return nodes; - } - - public void setNodes(List nodes) { - this.nodes = nodes; - } - - public List getAssignments() { - return assignments; - } - - public void setAssignments(List assignments) { - this.assignments = assignments; - } - - public Map> getAssociations() { - return associations; - } - - public void setAssociations(Map> associations) { - this.associations = associations; - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/json/JSONPolicy.java b/src/main/java/gov/nist/csd/pm/policy/json/JSONPolicy.java deleted file mode 100644 index 4255801e7..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/json/JSONPolicy.java +++ /dev/null @@ -1,57 +0,0 @@ -package gov.nist.csd.pm.policy.json; - -import com.google.gson.Gson; - -public class JSONPolicy { - private String graph; - private String prohibitions; - private String obligations; - private String userDefinedPML; - - public JSONPolicy() { - } - - public JSONPolicy(String graph, String prohibitions, String obligations, String userDefinedPML) { - this.graph = graph; - this.prohibitions = prohibitions; - this.obligations = obligations; - this.userDefinedPML = userDefinedPML; - } - - public String getGraph() { - return graph; - } - - public void setGraph(String graph) { - this.graph = graph; - } - - public String getProhibitions() { - return prohibitions; - } - - public void setProhibitions(String prohibitions) { - this.prohibitions = prohibitions; - } - - public String getObligations() { - return obligations; - } - - public void setObligations(String obligations) { - this.obligations = obligations; - } - - public String getUserDefinedPML() { - return userDefinedPML; - } - - public void setUserDefinedPML(String userDefinedPML) { - this.userDefinedPML = userDefinedPML; - } - - public static JSONPolicy fromJson(String json) { - JSONPolicy jsonPolicy = new Gson().fromJson(json, JSONPolicy.class); - return jsonPolicy; - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/json/JSONUserDefinedPML.java b/src/main/java/gov/nist/csd/pm/policy/json/JSONUserDefinedPML.java deleted file mode 100644 index 038a7c769..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/json/JSONUserDefinedPML.java +++ /dev/null @@ -1,35 +0,0 @@ -package gov.nist.csd.pm.policy.json; - -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; - -import java.util.Map; - -public class JSONUserDefinedPML { - Map functions; - Map constants; - - public JSONUserDefinedPML() { - } - - public JSONUserDefinedPML(Map functions, Map constants) { - this.functions = functions; - this.constants = constants; - } - - public Map getFunctions() { - return functions; - } - - public void setFunctions(Map functions) { - this.functions = functions; - } - - public Map getConstants() { - return constants; - } - - public void setConstants(Map constants) { - this.constants = constants; - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/model/access/AccessRightSet.java b/src/main/java/gov/nist/csd/pm/policy/model/access/AccessRightSet.java deleted file mode 100644 index 74a162289..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/model/access/AccessRightSet.java +++ /dev/null @@ -1,19 +0,0 @@ -package gov.nist.csd.pm.policy.model.access; - -import java.util.Arrays; -import java.util.Collection; -import java.util.HashSet; - -public class AccessRightSet extends HashSet { - - public AccessRightSet(){ - } - - public AccessRightSet(String ... ops) { - this.addAll(Arrays.asList(ops)); - } - - public AccessRightSet(Collection ops) { - this.addAll(ops); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/model/access/AdminAccessRights.java b/src/main/java/gov/nist/csd/pm/policy/model/access/AdminAccessRights.java deleted file mode 100644 index f5e3f2567..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/model/access/AdminAccessRights.java +++ /dev/null @@ -1,170 +0,0 @@ -package gov.nist.csd.pm.policy.model.access; - -public class AdminAccessRights { - - public static final String CREATE_POLICY_CLASS = "create_policy_class"; - public static final String CREATE_OBJECT = "create_object"; - public static final String CREATE_OBJECT_ATTRIBUTE = "create_object_attribute"; - public static final String CREATE_USER_ATTRIBUTE = "create_user_attribute"; - public static final String CREATE_USER = "create_user"; - public static final String SET_NODE_PROPERTIES = "set_node_properties"; - public static final String DELETE_POLICY_CLASS = "delete_policy_class"; - public static final String DELETE_OBJECT = "delete_object"; - public static final String DELETE_OBJECT_ATTRIBUTE = "delete_object_attribute"; - public static final String DELETE_USER_ATTRIBUTE = "delete_user_attribute"; - public static final String DELETE_USER = "delete_user"; - public static final String ASSIGN_OBJECT_ATTRIBUTE = "assign_object_attribute"; - public static final String ASSIGN_TO_OBJECT_ATTRIBUTE = "assign_to_object_attribute"; - public static final String ASSIGN_OBJECT = "assign_object"; - public static final String ASSIGN_USER_ATTRIBUTE = "assign_user_attribute"; - public static final String ASSIGN_TO_USER_ATTRIBUTE = "assign_to_user_attribute"; - public static final String ASSIGN_TO_POLICY_CLASS = "assign_to_policy_class"; - public static final String ASSIGN_USER = "assign_user"; - - public static final String DEASSIGN_USER_ATTRIBUTE = "deassign_user_attribute"; - public static final String DEASSIGN_OBJECT_ATTRIBUTE = "deassign_object_attribute"; - public static final String DEASSIGN_USER = "deassign_user"; - public static final String DEASSIGN_OBJECT = "deassign_object"; - public static final String DEASSIGN_FROM_USER_ATTRIBUTE = "deassign_from_user_attribute"; - public static final String DEASSIGN_FROM_OBJECT_ATTRIBUTE = "deassign_from_object_attribute"; - public static final String DEASSIGN_FROM_POLICY_CLASS = "deassign_from_policy_class"; - - public static final String ASSOCIATE_USER_ATTRIBUTE = "associate_user_attribute"; - public static final String ASSOCIATE_OBJECT_ATTRIBUTE = "associate_object_attribute"; - public static final String DISSOCIATE_USER_ATTRIBUTE = "associate_user_attribute"; - public static final String DISSOCIATE_OBJECT_ATTRIBUTE = "associate_object_attribute"; - public static final String GET_ASSOCIATIONS = "get_associations"; - public static final String GET_PROHIBITIONS = "get_prohibitions"; - public static final String GET_ACCESS_RIGHTS = "get_access_rights"; - - // prohibitions - public static final String CREATE_PROHIBITION = "create_prohibition"; - public static final String CREATE_PROCESS_PROHIBITION = "create_process_prohibition"; - public static final String DELETE_PROCESS_PROHIBITION = "delete_process_prohibition"; - public static final String GET_PROCESS_PROHIBITIONS = "get_process_prohibitions"; - public static final String ADD_CONTAINER_TO_PROHIBITION = "add_container_to_prohibition"; - public static final String ADD_CONTAINER_COMPLEMENT_TO_PROHIBITION = "add_container_complement_to_prohibition"; - public static final String REMOVE_CONTAINER_FROM_PROHIBITION = "remove_container_to_prohibition"; - public static final String REMOVE_CONTAINER_COMPLEMENT_FROM_PROHIBITION = "remove_container_complement_to_prohibition"; - public static final String DELETE_PROHIBITION = "delete_prohibition"; - - // obligations - public static final String CREATE_OBLIGATION = "create_obligation"; - public static final String DELETE_OBLIGATION = "delete_obligation"; - public static final String GET_OBLIGATION = "get_obligation"; - public static final String DELETE_RULE = "delete_rule"; - public static final String SET_RESOURCE_ACCESS_RIGHTS = "set_resource_access_rights"; - public static final String GET_RESOURCE_ACCESS_RIGHTS = "get_resource_access_rights"; - - // pml - public static final String ADD_FUNCTION = "add_function"; - public static final String REMOVE_FUNCTION = "remove_function"; - public static final String GET_FUNCTIONS = "get_functions"; - public static final String ADD_CONSTANT = "add_constant"; - public static final String REMOVE_CONSTANT = "remove_constant"; - public static final String GET_CONSTANTS = "get_constants"; - public static final String GET_CONTEXT = "get_context"; - public static final String TO_STRING = "to_string"; - public static final String FROM_STRING = "from_string"; - public static final String ALL_ACCESS_RIGHTS = "*"; - public static final String ALL_ADMIN_ACCESS_RIGHTS = "*a"; - public static final String ALL_RESOURCE_ACCESS_RIGHTS = "*r"; - - private static final AccessRightSet ALL_ADMIN_ACCESS_RIGHTS_SET = new AccessRightSet( - CREATE_POLICY_CLASS, - CREATE_OBJECT, - CREATE_OBJECT_ATTRIBUTE, - CREATE_USER_ATTRIBUTE, - CREATE_USER, - SET_NODE_PROPERTIES, - DELETE_POLICY_CLASS, - DELETE_OBJECT, - DELETE_OBJECT_ATTRIBUTE, - DELETE_USER_ATTRIBUTE, - DELETE_USER, - ASSIGN_OBJECT_ATTRIBUTE, - ASSIGN_TO_OBJECT_ATTRIBUTE, - ASSIGN_OBJECT, - ASSIGN_USER_ATTRIBUTE, - ASSIGN_TO_USER_ATTRIBUTE, - ASSIGN_USER, - ASSIGN_TO_POLICY_CLASS, - - DEASSIGN_USER_ATTRIBUTE, - DEASSIGN_OBJECT_ATTRIBUTE, - DEASSIGN_USER, - DEASSIGN_OBJECT, - DEASSIGN_FROM_USER_ATTRIBUTE, - DEASSIGN_FROM_OBJECT_ATTRIBUTE, - DEASSIGN_FROM_POLICY_CLASS, - - ASSOCIATE_USER_ATTRIBUTE, - ASSOCIATE_OBJECT_ATTRIBUTE, - DISSOCIATE_USER_ATTRIBUTE, - DISSOCIATE_OBJECT_ATTRIBUTE, - GET_ASSOCIATIONS, - GET_PROHIBITIONS, - GET_ACCESS_RIGHTS, - - // prohibitions - CREATE_PROHIBITION, - CREATE_PROCESS_PROHIBITION, - DELETE_PROCESS_PROHIBITION, - GET_PROCESS_PROHIBITIONS, - ADD_CONTAINER_TO_PROHIBITION, - ADD_CONTAINER_COMPLEMENT_TO_PROHIBITION, - REMOVE_CONTAINER_FROM_PROHIBITION, - REMOVE_CONTAINER_COMPLEMENT_FROM_PROHIBITION, - DELETE_PROHIBITION, - - // obligations - CREATE_OBLIGATION, - DELETE_OBLIGATION, - GET_OBLIGATION, - DELETE_RULE, - SET_RESOURCE_ACCESS_RIGHTS, - GET_RESOURCE_ACCESS_RIGHTS, - - // pml - ADD_FUNCTION, - REMOVE_FUNCTION, - GET_FUNCTIONS, - ADD_CONSTANT, - REMOVE_CONSTANT, - GET_CONSTANTS, - GET_CONTEXT, - TO_STRING, - FROM_STRING - ); - - private static final AccessRightSet WILDCARD_ACCESS_RIGHTS_SET = new AccessRightSet( - ALL_ACCESS_RIGHTS, - ALL_ADMIN_ACCESS_RIGHTS, - ALL_RESOURCE_ACCESS_RIGHTS - ); - - private static final AccessRightSet ALL_ACCESS_RIGHTS_SET = new AccessRightSet(ALL_ACCESS_RIGHTS); - - private AdminAccessRights() {} - - public static AccessRightSet allAdminAccessRights() { - return new AccessRightSet(ALL_ADMIN_ACCESS_RIGHTS_SET); - } - - public static AccessRightSet allAccessRights() { - return new AccessRightSet(ALL_ACCESS_RIGHTS_SET); - } - - public static AccessRightSet wildcardAccessRights() { - return new AccessRightSet(WILDCARD_ACCESS_RIGHTS_SET); - } - - public static boolean isAdminAccessRight(String ar) { - return ALL_ADMIN_ACCESS_RIGHTS_SET.contains(ar); - } - - public static boolean isWildcardAccessRight(String ar) { - return WILDCARD_ACCESS_RIGHTS_SET.contains(ar); - } - -} diff --git a/src/main/java/gov/nist/csd/pm/policy/model/audit/Explain.java b/src/main/java/gov/nist/csd/pm/policy/model/audit/Explain.java deleted file mode 100644 index 2790f5a42..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/model/audit/Explain.java +++ /dev/null @@ -1,57 +0,0 @@ -package gov.nist.csd.pm.policy.model.audit; - -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -public class Explain { - private Set permissions; - private Map policyClasses; - - public Explain() { - permissions = new HashSet<>(); - policyClasses = new HashMap<>(); - } - - public Explain(Set permissions, Map policyClasses) { - this.permissions = permissions; - this.policyClasses = policyClasses; - } - - public Set getPermissions() { - return permissions; - } - - public void setPermissions(Set permissions) { - this.permissions = permissions; - } - - public Map getPolicyClasses() { - return policyClasses; - } - - public void setPolicyClasses(Map policyClasses) { - this.policyClasses = policyClasses; - } - - public String toString() { - StringBuilder str = new StringBuilder("Permissions: " + permissions.toString()); - for (String pc : policyClasses.keySet()) { - PolicyClass policyClass = policyClasses.get(pc); - str.append("\n\t\t").append(pc).append(": ").append(policyClass.getOperations()); - } - - str.append("\nPaths:"); - for (String pc : policyClasses.keySet()) { - PolicyClass policyClass = policyClasses.get(pc); - str.append("\n\t\t").append(pc).append(": ").append(policyClass.getOperations()); - Set paths = policyClass.getPaths(); - for (Path path : paths) { - str.append("\n\t\t\t- ").append(path); - } - } - - return str.toString(); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/model/audit/PolicyClass.java b/src/main/java/gov/nist/csd/pm/policy/model/audit/PolicyClass.java deleted file mode 100644 index 19c644df3..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/model/audit/PolicyClass.java +++ /dev/null @@ -1,35 +0,0 @@ -package gov.nist.csd.pm.policy.model.audit; - -import java.util.HashSet; -import java.util.Set; - -public class PolicyClass { - private Set operations; - private Set paths; - - public PolicyClass() { - operations = new HashSet<>(); - paths = new HashSet<>(); - } - - public PolicyClass(Set operations, Set paths) { - this.operations = operations; - this.paths = paths; - } - - public Set getOperations() { - return operations; - } - - public void setOperations(Set operations) { - this.operations = operations; - } - - public Set getPaths() { - return paths; - } - - public void setPaths(Set paths) { - this.paths = paths; - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/model/audit/ResolvedPath.java b/src/main/java/gov/nist/csd/pm/policy/model/audit/ResolvedPath.java deleted file mode 100644 index 5cbc3e935..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/model/audit/ResolvedPath.java +++ /dev/null @@ -1,34 +0,0 @@ -package gov.nist.csd.pm.policy.model.audit; - -import gov.nist.csd.pm.policy.model.access.AccessRightSet; - -import java.util.Set; - -public class ResolvedPath { - private String pc; - private EdgePath path; - private AccessRightSet ops; - - public ResolvedPath() { - - } - - public ResolvedPath(String pc, EdgePath path, AccessRightSet ops) { - this.pc = pc; - this.path = path; - this.ops = ops; - } - - public String getPc() { - return pc; - } - - public EdgePath getPath() { - return path; - } - - public Set getOps() { - return ops; - } -} - diff --git a/src/main/java/gov/nist/csd/pm/policy/model/graph/dag/UserDagResult.java b/src/main/java/gov/nist/csd/pm/policy/model/graph/dag/UserDagResult.java deleted file mode 100644 index cd679ab1e..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/model/graph/dag/UserDagResult.java +++ /dev/null @@ -1,12 +0,0 @@ -package gov.nist.csd.pm.policy.model.graph.dag; - -import gov.nist.csd.pm.policy.model.access.AccessRightSet; -import gov.nist.csd.pm.policy.model.prohibition.Prohibition; - -import java.util.Map; -import java.util.Set; - -public record UserDagResult(Map borderTargets, - Set prohibitions, - Set prohibitionTargets) { -} diff --git a/src/main/java/gov/nist/csd/pm/policy/model/graph/dag/propagator/Propagator.java b/src/main/java/gov/nist/csd/pm/policy/model/graph/dag/propagator/Propagator.java deleted file mode 100644 index 741799f83..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/model/graph/dag/propagator/Propagator.java +++ /dev/null @@ -1,14 +0,0 @@ -package gov.nist.csd.pm.policy.model.graph.dag.propagator; - -import gov.nist.csd.pm.policy.exceptions.PMException; - -public interface Propagator { - - /** - * Propagate information from the node to the target node. This can be from a parent to a child if direction is - * - * @param src the node that holds the information already. - * @param dst the node to propagate the information to. - */ - void propagate(String src, String dst) throws PMException; -} diff --git a/src/main/java/gov/nist/csd/pm/policy/model/graph/dag/visitor/Visitor.java b/src/main/java/gov/nist/csd/pm/policy/model/graph/dag/visitor/Visitor.java deleted file mode 100644 index cde956ba6..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/model/graph/dag/visitor/Visitor.java +++ /dev/null @@ -1,8 +0,0 @@ -package gov.nist.csd.pm.policy.model.graph.dag.visitor; - -import gov.nist.csd.pm.policy.exceptions.PMException; - -public interface Visitor { - - void visit(String node) throws PMException; -} diff --git a/src/main/java/gov/nist/csd/pm/policy/model/graph/dag/walker/Direction.java b/src/main/java/gov/nist/csd/pm/policy/model/graph/dag/walker/Direction.java deleted file mode 100644 index aca5ec1d6..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/model/graph/dag/walker/Direction.java +++ /dev/null @@ -1,6 +0,0 @@ -package gov.nist.csd.pm.policy.model.graph.dag.walker; - -public enum Direction { - CHILDREN, - PARENTS -} diff --git a/src/main/java/gov/nist/csd/pm/policy/model/graph/dag/walker/GraphWalker.java b/src/main/java/gov/nist/csd/pm/policy/model/graph/dag/walker/GraphWalker.java deleted file mode 100644 index 4b23c3752..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/model/graph/dag/walker/GraphWalker.java +++ /dev/null @@ -1,13 +0,0 @@ -package gov.nist.csd.pm.policy.model.graph.dag.walker; - -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.graph.dag.ShortCircuit; - -public interface GraphWalker { - - /** - * Traverse a graph starting at the start node. - */ - void walk(String start) throws PMException; - -} diff --git a/src/main/java/gov/nist/csd/pm/policy/model/graph/relationships/Assignment.java b/src/main/java/gov/nist/csd/pm/policy/model/graph/relationships/Assignment.java deleted file mode 100644 index eeec68756..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/model/graph/relationships/Assignment.java +++ /dev/null @@ -1,46 +0,0 @@ -package gov.nist.csd.pm.policy.model.graph.relationships; - -import gov.nist.csd.pm.policy.model.graph.nodes.NodeType; - -import java.io.Serializable; -import java.util.EnumMap; -import java.util.Map; - -import static gov.nist.csd.pm.policy.model.graph.nodes.NodeType.*; - -/** - * This object represents an Assignment in a NGAC graph - */ -public class Assignment extends Relationship implements Serializable { - - public Assignment(String source, String target) { - super(source, target); - } - - private static final Map validAssignments = new EnumMap<>(NodeType.class); - static { - validAssignments.put(PC, new NodeType[]{}); - validAssignments.put(OA, new NodeType[]{PC, OA}); - validAssignments.put(O, new NodeType[]{OA}); - validAssignments.put(UA, new NodeType[]{UA, PC}); - validAssignments.put(U, new NodeType[]{UA}); - } - - /** - * Check if the assignment provided, is valid under NGAC. - * - * @param childType The type of the child. - * @param parentType The type of the parent. - * @throws InvalidAssignmentException if the child type is not allowed to be assigned to the parent type. - */ - public static void checkAssignment(NodeType childType, NodeType parentType) throws InvalidAssignmentException { - NodeType[] check = validAssignments.get(childType); - for (NodeType nt : check) { - if (nt.equals(parentType)) { - return; - } - } - - throw new InvalidAssignmentException(String.format("cannot assign a node of type %s to a node of type %s", childType, parentType)); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/model/obligation/Obligation.java b/src/main/java/gov/nist/csd/pm/policy/model/obligation/Obligation.java deleted file mode 100644 index 866f0c9cf..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/model/obligation/Obligation.java +++ /dev/null @@ -1,118 +0,0 @@ -package gov.nist.csd.pm.policy.model.obligation; - -import gov.nist.csd.pm.policy.model.obligation.event.EventPattern; -import gov.nist.csd.pm.policy.model.access.UserContext; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -public class Obligation implements Cloneable, Serializable { - - private UserContext author; - private String label; - private List rules; - - public Obligation() { - } - - public Obligation(UserContext author, String label) { - this.author = author; - this.label = label; - this.rules = new ArrayList<>(); - } - - public Obligation(UserContext author, String label, List rules) { - this.author = author; - this.label = label; - this.rules = new ArrayList<>(); - for (Rule rule : rules) { - this.rules.add(new Rule(rule)); - } - } - - public Obligation(Obligation obligation) { - this.label = obligation.label; - this.rules = new ArrayList<>(); - for (Rule rule : obligation.getRules()) { - this.rules.add(new Rule(rule)); - } - this.author = obligation.author; - } - - @Override - public Obligation clone() { - Obligation o; - try { - o = (Obligation) super.clone(); - } catch (CloneNotSupportedException e) { - return new Obligation(this.author, this.label); - } - - o.author = this.author; - o.label = this.label; - return o; - } - - public Obligation addRule(String label, EventPattern eventPattern, Response response) { - rules.add(new Rule(label, eventPattern, response)); - return this; - } - - public void deleteRule(String label) { - rules.removeIf(rule -> rule.getLabel().equals(label)); - } - - public UserContext getAuthor() { - return author; - } - - public void setAuthor(UserContext userCtx) { - this.author = userCtx; - } - - public String getLabel() { - return label; - } - - public void setLabel(String label) { - this.label = label; - } - - public List getRules() { - return rules; - } - - public Rule getRule(String ruleLabel) { - for (Rule rule : rules) { - if (rule.getLabel().equals(ruleLabel)) { - return rule; - } - } - - return null; - } - - public void setRules(List rules) { - this.rules = rules; - } - - public Obligation addRule(Rule rule) { - this.rules.add(rule); - return this; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Obligation that = (Obligation) o; - return Objects.equals(author, that.author) && Objects.equals(label, that.label) && Objects.equals(rules, that.rules); - } - - @Override - public int hashCode() { - return Objects.hash(author, label, rules); - } -} \ No newline at end of file diff --git a/src/main/java/gov/nist/csd/pm/policy/model/obligation/Response.java b/src/main/java/gov/nist/csd/pm/policy/model/obligation/Response.java deleted file mode 100644 index 78984001b..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/model/obligation/Response.java +++ /dev/null @@ -1,85 +0,0 @@ -package gov.nist.csd.pm.policy.model.obligation; - -import gov.nist.csd.pm.policy.Policy; -import gov.nist.csd.pm.policy.pml.model.context.ExecutionContext; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.pml.statement.PMLStatement; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.UserContext; -import gov.nist.csd.pm.epp.EventContext; - -import java.io.Serializable; -import java.util.List; -import java.util.Objects; - -public class Response implements Serializable { - - private final ExecutionContext executionCtx; - private final List stmts; - private final String eventCtxVariable; - - public Response(String eventCtxVariable, ExecutionContext executionCtx, List stmts) { - this.eventCtxVariable = eventCtxVariable; - this.executionCtx = executionCtx; - this.stmts = stmts; - } - - public Response(String eventCtxVariable, ExecutionContext executionCtx, PMLStatement... stmts) { - this.eventCtxVariable = eventCtxVariable; - this.executionCtx = executionCtx; - this.stmts = List.of(stmts); - } - - public Response(UserContext author, PMLStatement... stmts) { - this.eventCtxVariable = ""; - this.executionCtx = new ExecutionContext(author); - this.stmts = List.of(stmts); - } - - public Response(UserContext author, String eventCtxVariable, PMLStatement... stmts) { - this.eventCtxVariable = eventCtxVariable; - this.executionCtx = new ExecutionContext(author); - this.stmts = List.of(stmts); - } - - public Response(Response response) { - this.eventCtxVariable = response.eventCtxVariable; - this.executionCtx = response.executionCtx; - this.stmts = response.stmts; - } - - public String getEventCtxVariable() { - return eventCtxVariable; - } - - public List getStatements() { - return stmts; - } - - public ExecutionContext getExecutionCtx() { - return executionCtx; - } - - public Value execute(Policy policyAuthor, EventContext eventCtx) throws PMException { - executionCtx.scope().putValue(eventCtxVariable, Value.objectToValue(eventCtx)); - - for (PMLStatement stmt : stmts) { - stmt.execute(executionCtx, policyAuthor); - } - - return new Value(); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Response response = (Response) o; - return Objects.equals(executionCtx, response.executionCtx) && Objects.equals(stmts, response.stmts); - } - - @Override - public int hashCode() { - return Objects.hash(executionCtx, stmts); - } -} \ No newline at end of file diff --git a/src/main/java/gov/nist/csd/pm/policy/model/obligation/Rule.java b/src/main/java/gov/nist/csd/pm/policy/model/obligation/Rule.java deleted file mode 100644 index 6184838c4..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/model/obligation/Rule.java +++ /dev/null @@ -1,80 +0,0 @@ -package gov.nist.csd.pm.policy.model.obligation; - -import gov.nist.csd.pm.policy.model.obligation.event.EventPattern; -import gov.nist.csd.pm.policy.model.obligation.event.Performs; -import gov.nist.csd.pm.policy.model.obligation.event.EventSubject; -import gov.nist.csd.pm.policy.model.obligation.event.Target; - -import java.io.Serializable; -import java.util.Objects; - -public class Rule implements Serializable { - - private String label; - private EventPattern eventPattern; - private Response response; - - public Rule() { - } - - public Rule(String label, EventPattern eventPattern, Response response) { - this.label = label; - this.eventPattern = eventPattern; - this.response = response; - } - - public Rule(String label, EventSubject subject, Performs performs, Target target, Response response) { - this.label = label; - this.eventPattern = new EventPattern(subject, performs, target); - this.response = response; - } - - public Rule(String label, EventSubject subject, Performs performs, Response response) { - this.label = label; - this.eventPattern = new EventPattern(subject, performs); - this.response = response; - } - - public Rule(Rule rule) { - this.label = rule.label; - this.eventPattern = new EventPattern(rule.eventPattern); - this.response = new Response(rule.response); - } - - public String getLabel() { - return label; - } - - public void setLabel(String label) { - this.label = label; - } - - public EventPattern getEventPattern() { - return eventPattern; - } - - public void setEventPattern(EventPattern eventPattern) { - this.eventPattern = eventPattern; - } - - public Response getResponse() { - return response; - } - - public void setResponse(Response response) { - this.response = response; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Rule rule = (Rule) o; - return label.equals(rule.label) && eventPattern.equals(rule.eventPattern) && response.equals(rule.response); - } - - @Override - public int hashCode() { - return Objects.hash(label, eventPattern, response); - } -} \ No newline at end of file diff --git a/src/main/java/gov/nist/csd/pm/policy/model/obligation/event/EventPattern.java b/src/main/java/gov/nist/csd/pm/policy/model/obligation/event/EventPattern.java deleted file mode 100644 index c76057c48..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/model/obligation/event/EventPattern.java +++ /dev/null @@ -1,72 +0,0 @@ -package gov.nist.csd.pm.policy.model.obligation.event; - - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Objects; - -public class EventPattern implements Serializable { - - private EventSubject subject; - private List operations; - private Target target; - - public EventPattern() { - } - - public EventPattern(EventSubject subject, Performs performs) { - this.subject = subject; - this.operations = Arrays.asList(performs.events()); - this.target = Target.anyPolicyElement(); - } - public EventPattern(EventSubject subject, Performs performs, Target target) { - this.subject = subject; - this.operations = Arrays.asList(performs.events()); - this.target = target; - } - - public EventPattern(EventPattern eventPattern) { - this.subject = eventPattern.subject; - this.operations = new ArrayList<>(eventPattern.operations); - this.target = eventPattern.target; - } - - public void setSubject(EventSubject subject) { - this.subject = subject; - } - - public void setOperations(List operations) { - this.operations = operations; - } - - public void setTarget(Target target) { - this.target = target; - } - - public EventSubject getSubject() { - return subject; - } - - public List getOperations() { - return operations; - } - - public Target getTarget() { - return target; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - EventPattern that = (EventPattern) o; - return Objects.equals(subject, that.subject) && Objects.equals(operations, that.operations) && Objects.equals(target, that.target); - } - - @Override - public int hashCode() { - return Objects.hash(subject, operations, target); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/model/obligation/event/EventSubject.java b/src/main/java/gov/nist/csd/pm/policy/model/obligation/event/EventSubject.java deleted file mode 100644 index 094826f9f..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/model/obligation/event/EventSubject.java +++ /dev/null @@ -1,110 +0,0 @@ -package gov.nist.csd.pm.policy.model.obligation.event; - -import gov.nist.csd.pm.pdp.PolicyReviewer; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.UserContext; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Objects; - -public class EventSubject implements Serializable { - - public static EventSubject anyUser() { - return new EventSubject(Type.ANY_USER, new ArrayList<>()); - } - - public static EventSubject anyUserWithAttribute(String attr) { - return new EventSubject(Type.ANY_USER_WITH_ATTRIBUTE, Arrays.asList(attr)); - } - - public static EventSubject process(String process) { - return new EventSubject(Type.PROCESS, Arrays.asList(process)); - } - - public static EventSubject users(String ... users) { - return new EventSubject(Type.USERS, Arrays.asList(users)); - } - - private Type type; - private List subjects; - - public EventSubject() { - } - - private EventSubject(Type type, List subjects) { - this.type = type; - this.subjects = subjects; - } - - public Type getType() { - return type; - } - - public void setType(Type type) { - this.type = type; - } - - public List getSubjects() { - return subjects; - } - - public void setSubjects(List subjects) { - this.subjects = subjects; - } - - public String anyUserWithAttribute() { - return subjects.get(0); - } - - public String process() { - return subjects.get(0); - } - - public List users() { - return subjects; - } - - public boolean matches(UserContext userCtx, PolicyReviewer policyReviewer) throws PMException { - switch (type) { - case ANY_USER -> { - return true; - } - case ANY_USER_WITH_ATTRIBUTE -> { - String user = userCtx.getUser(); - return policyReviewer.isContained(user, anyUserWithAttribute()); - } - case PROCESS -> { - return userCtx.getProcess().equals(process()); - } - case USERS -> { - return users().contains(userCtx.getUser()); - } - default -> { - return false; - } - } - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - EventSubject subject = (EventSubject) o; - return type == subject.type && Objects.equals(subjects, subject.subjects); - } - - @Override - public int hashCode() { - return Objects.hash(type, subjects); - } - - public enum Type { - ANY_USER, - ANY_USER_WITH_ATTRIBUTE, - PROCESS, - USERS - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/model/obligation/event/Performs.java b/src/main/java/gov/nist/csd/pm/policy/model/obligation/event/Performs.java deleted file mode 100644 index 68977f00a..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/model/obligation/event/Performs.java +++ /dev/null @@ -1,23 +0,0 @@ -package gov.nist.csd.pm.policy.model.obligation.event; - -import java.util.Arrays; - -public record Performs (String ... events) { - - public static Performs events(String ... events) { - return new Performs(events); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Performs performs = (Performs) o; - return Arrays.equals(events, performs.events); - } - - @Override - public int hashCode() { - return Arrays.hashCode(events); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/model/obligation/event/Target.java b/src/main/java/gov/nist/csd/pm/policy/model/obligation/event/Target.java deleted file mode 100644 index 94e0d1c5a..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/model/obligation/event/Target.java +++ /dev/null @@ -1,106 +0,0 @@ -package gov.nist.csd.pm.policy.model.obligation.event; - -import gov.nist.csd.pm.pdp.PolicyReviewer; -import gov.nist.csd.pm.policy.exceptions.PMException; - -import java.io.Serializable; -import java.util.*; - -public class Target implements Serializable { - - public static Target anyContainedIn(String anyContainedIn) { - return new Target(Type.ANY_CONTAINED_IN, Collections.singletonList(anyContainedIn)); - } - - public static Target anyOfSet(String ... set) { - return new Target(Type.ANY_OF_SET, Arrays.asList(set)); - } - - public static Target anyPolicyElement() { - return new Target(Type.ANY_POLICY_ELEMENT, new ArrayList<>()); - } - - public static Target policyElement(String policyElement) { - return new Target(Type.POLICY_ELEMENT, Arrays.asList(policyElement)); - } - - private Type type; - private List policyElements; - - public Target() { - } - - public Target(Type type, List policyElements) { - this.type = type; - this.policyElements = policyElements; - } - - public Type getType() { - return type; - } - - public void setType(Type type) { - this.type = type; - } - - public List getPolicyElements() { - return policyElements; - } - - public void setPolicyElements(List policyElements) { - this.policyElements = policyElements; - } - - public String anyContainedIn() { - return policyElements.get(0); - } - - public List anyOfSet() { - return policyElements; - } - - public String policyElement() { - return policyElements.get(0); - } - - public boolean matches(String target, PolicyReviewer policyReviewer) throws PMException { - switch (type) { - case ANY_CONTAINED_IN -> { - return policyReviewer.isContained(target, anyContainedIn()); - } - case POLICY_ELEMENT -> { - return policyElement().equals(target); - } - case ANY_POLICY_ELEMENT -> { - return true; - } - case ANY_OF_SET -> { - return anyOfSet().contains(target); - } - default -> { - return false; - } - } - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Target target = (Target) o; - return type == target.type && Objects.equals(policyElements, target.policyElements); - } - - @Override - public int hashCode() { - return Objects.hash(type, policyElements); - } - - public enum Type { - ANY_CONTAINED_IN, - ANY_OF_SET, - ANY_POLICY_ELEMENT, - POLICY_ELEMENT - } - -} diff --git a/src/main/java/gov/nist/csd/pm/policy/model/prohibition/ContainerCondition.java b/src/main/java/gov/nist/csd/pm/policy/model/prohibition/ContainerCondition.java deleted file mode 100644 index 26a4e99ff..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/model/prohibition/ContainerCondition.java +++ /dev/null @@ -1,18 +0,0 @@ -package gov.nist.csd.pm.policy.model.prohibition; - -import java.io.Serializable; - -public record ContainerCondition(String name, boolean complement) implements Serializable { - - public boolean equals(Object o) { - if (!(o instanceof ContainerCondition cc)) { - return false; - } - - return this.name.equals(cc.name) && this.complement == cc.complement; - } - - public int hashCode() { - return name.hashCode(); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/PMLBuiltinConstants.java b/src/main/java/gov/nist/csd/pm/policy/pml/PMLBuiltinConstants.java deleted file mode 100644 index ea4a15b43..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/PMLBuiltinConstants.java +++ /dev/null @@ -1,56 +0,0 @@ -package gov.nist.csd.pm.policy.pml; - -import gov.nist.csd.pm.policy.pml.compiler.Variable; -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.model.access.AdminAccessRights; - -import java.util.HashMap; -import java.util.Map; - -import static gov.nist.csd.pm.pap.SuperPolicy.*; -import static gov.nist.csd.pm.policy.model.access.AdminAccessRights.ALL_ADMIN_ACCESS_RIGHTS; -import static gov.nist.csd.pm.policy.model.access.AdminAccessRights.ALL_RESOURCE_ACCESS_RIGHTS; - -public class PMLBuiltinConstants { - - private PMLBuiltinConstants() { } - - private static final Map BUILTIN_VALUES = new HashMap<>(); - static { - BUILTIN_VALUES.put(SUPER_USER, new Value(SUPER_USER)); - BUILTIN_VALUES.put(SUPER_PC, new Value(SUPER_PC)); - BUILTIN_VALUES.put(SUPER_UA, new Value(SUPER_UA)); - BUILTIN_VALUES.put(SUPER_PC_REP, new Value(SUPER_PC_REP)); - - for (String adminAccessRight : AdminAccessRights.allAdminAccessRights()) { - BUILTIN_VALUES.put(adminAccessRight, new Value(adminAccessRight)); - } - - BUILTIN_VALUES.put(ALL_ADMIN_ACCESS_RIGHTS, new Value(ALL_ADMIN_ACCESS_RIGHTS)); - BUILTIN_VALUES.put(ALL_RESOURCE_ACCESS_RIGHTS, new Value(ALL_RESOURCE_ACCESS_RIGHTS)); - } - - private static final Map BUILTIN_VARIABLES = new HashMap<>(); - static { - BUILTIN_VARIABLES.put(SUPER_USER, new Variable(SUPER_USER, Type.string(), true)); - BUILTIN_VARIABLES.put(SUPER_PC, new Variable(SUPER_PC, Type.string(), true)); - BUILTIN_VARIABLES.put(SUPER_UA, new Variable(SUPER_UA, Type.string(), true)); - BUILTIN_VARIABLES.put(SUPER_PC_REP, new Variable(SUPER_PC_REP, Type.string(), true)); - - for (String adminAccessRight : AdminAccessRights.allAdminAccessRights()) { - BUILTIN_VARIABLES.put(adminAccessRight, new Variable(adminAccessRight, Type.string(), true)); - } - - BUILTIN_VARIABLES.put(ALL_ADMIN_ACCESS_RIGHTS, new Variable(ALL_ADMIN_ACCESS_RIGHTS, Type.string(), true)); - BUILTIN_VARIABLES.put(ALL_RESOURCE_ACCESS_RIGHTS, new Variable(ALL_RESOURCE_ACCESS_RIGHTS, Type.string(), true)); - } - - public static Map builtinValues() { - return new HashMap<>(BUILTIN_VALUES); - } - - public static Map builtinVariables() { - return new HashMap<>(BUILTIN_VARIABLES); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/PMLBuiltinFunctions.java b/src/main/java/gov/nist/csd/pm/policy/pml/PMLBuiltinFunctions.java deleted file mode 100644 index b14887227..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/PMLBuiltinFunctions.java +++ /dev/null @@ -1,77 +0,0 @@ -package gov.nist.csd.pm.policy.pml; - -import gov.nist.csd.pm.policy.pml.functions.*; -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; - -import java.util.HashMap; -import java.util.Map; - -public class PMLBuiltinFunctions { - - // util functions - private static final FunctionDefinitionStatement concat = new Concat(); - private static final FunctionDefinitionStatement equals = new Equals(); - private static final FunctionDefinitionStatement contains = new Contains(); - private static final FunctionDefinitionStatement containsKey = new ContainsKey(); - private static final FunctionDefinitionStatement numToStr = new NumToStr(); - - // policy functions - private static final FunctionDefinitionStatement getAssociationsWithSource = new GetAssociationsWithSource(); - private static final FunctionDefinitionStatement getAssociationsWithTarget = new GetAssociationsWithTarget(); - private static final FunctionDefinitionStatement getChildren = new GetChildren(); - private static final FunctionDefinitionStatement getParents = new GetParents(); - private static final FunctionDefinitionStatement getNodeProperties = new GetNodeProperties(); - private static final FunctionDefinitionStatement getNodeType = new GetNodeType(); - private static final FunctionDefinitionStatement getProhibitionsFor = new GetProhibitionsFor(); - private static final FunctionDefinitionStatement hasPropertyKey = new HasPropertyKey(); - private static final FunctionDefinitionStatement hasPropertyValue = new HasPropertyValue(); - private static final FunctionDefinitionStatement nodeExists = new NodeExists(); - private static final FunctionDefinitionStatement getNode = new GetNode(); - private static final FunctionDefinitionStatement search = new Search(); - private static final FunctionDefinitionStatement assignAll = new AssignAll(); - private static final FunctionDefinitionStatement deassignAll = new DeassignAll(); - private static final FunctionDefinitionStatement deassignAllFromAndDelete = new DeassignAllFromAndDelete(); - private static final FunctionDefinitionStatement append = new Append(); - private static final FunctionDefinitionStatement appendAll = new AppendAll(); - private static final FunctionDefinitionStatement length = new Length(); - - - private static final Map BUILTIN_FUNCTIONS = new HashMap<>(); - - static { - BUILTIN_FUNCTIONS.put(concat.getFunctionName(), concat); - BUILTIN_FUNCTIONS.put(equals.getFunctionName(), equals); - BUILTIN_FUNCTIONS.put(contains.getFunctionName(), contains); - BUILTIN_FUNCTIONS.put(containsKey.getFunctionName(), containsKey); - BUILTIN_FUNCTIONS.put(numToStr.getFunctionName(), numToStr); - - BUILTIN_FUNCTIONS.put(getAssociationsWithSource.getFunctionName(), getAssociationsWithSource); - BUILTIN_FUNCTIONS.put(getAssociationsWithTarget.getFunctionName(), getAssociationsWithTarget); - BUILTIN_FUNCTIONS.put(getChildren.getFunctionName(), getChildren); - BUILTIN_FUNCTIONS.put(getParents.getFunctionName(), getParents); - BUILTIN_FUNCTIONS.put(getNodeProperties.getFunctionName(), getNodeProperties); - BUILTIN_FUNCTIONS.put(getNodeType.getFunctionName(), getNodeType); - BUILTIN_FUNCTIONS.put(getProhibitionsFor.getFunctionName(), getProhibitionsFor); - BUILTIN_FUNCTIONS.put(hasPropertyKey.getFunctionName(), hasPropertyKey); - BUILTIN_FUNCTIONS.put(hasPropertyValue.getFunctionName(), hasPropertyValue); - BUILTIN_FUNCTIONS.put(nodeExists.getFunctionName(), nodeExists); - BUILTIN_FUNCTIONS.put(getNode.getFunctionName(), getNode); - BUILTIN_FUNCTIONS.put(search.getFunctionName(), search); - BUILTIN_FUNCTIONS.put(assignAll.getFunctionName(), assignAll); - BUILTIN_FUNCTIONS.put(deassignAll.getFunctionName(), deassignAll); - BUILTIN_FUNCTIONS.put(deassignAllFromAndDelete.getFunctionName(), deassignAllFromAndDelete); - BUILTIN_FUNCTIONS.put(append.getFunctionName(), append); - BUILTIN_FUNCTIONS.put(appendAll.getFunctionName(), appendAll); - BUILTIN_FUNCTIONS.put(length.getFunctionName(), length); - } - - public static Map builtinFunctions() { - return new HashMap<>(BUILTIN_FUNCTIONS); - } - - public static boolean isBuiltinFunction(String functionName) { - return BUILTIN_FUNCTIONS.containsKey(functionName); - } - - private PMLBuiltinFunctions() {} -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/PMLCompiler.java b/src/main/java/gov/nist/csd/pm/policy/pml/PMLCompiler.java deleted file mode 100644 index 628a8f399..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/PMLCompiler.java +++ /dev/null @@ -1,62 +0,0 @@ -package gov.nist.csd.pm.policy.pml; - -import gov.nist.csd.pm.policy.Policy; -import gov.nist.csd.pm.policy.pml.antlr.PMLLexer; -import gov.nist.csd.pm.policy.pml.antlr.PMLParser; -import gov.nist.csd.pm.policy.pml.compiler.error.ErrorLog; -import gov.nist.csd.pm.policy.pml.compiler.visitor.PolicyVisitor; -import gov.nist.csd.pm.policy.pml.model.context.VisitorContext; -import gov.nist.csd.pm.policy.pml.model.exception.PMLCompilationException; -import gov.nist.csd.pm.policy.pml.model.scope.FunctionAlreadyDefinedInScopeException; -import gov.nist.csd.pm.policy.pml.model.scope.Scope; -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; -import gov.nist.csd.pm.policy.pml.statement.PMLStatement; -import gov.nist.csd.pm.policy.exceptions.PMException; -import org.antlr.v4.runtime.*; - -import java.util.ArrayList; -import java.util.List; - -public class PMLCompiler { - - public static List compilePML(Policy policy, String input, FunctionDefinitionStatement... customBuiltinFunctions) throws PMException { - ErrorLog errorLog = new ErrorLog(); - Scope scope = new Scope(Scope.Mode.COMPILE); - scope.loadFromPMLContext(PMLContext.fromPolicy(policy)); - - // add custom builtin functions to scope - for (FunctionDefinitionStatement func : customBuiltinFunctions) { - try { - scope.addFunction(func); - } catch (FunctionAlreadyDefinedInScopeException e) { - errorLog.addError(0, 0, 0, e.getMessage()); - } - } - - PMLLexer lexer = new PMLLexer(CharStreams.fromString(input)); - CommonTokenStream tokens = new CommonTokenStream(lexer); - PMLParser parser = new PMLParser(tokens); - parser.addErrorListener(new BaseErrorListener() { - @Override - public void syntaxError(Recognizer recognizer, Object offendingSymbol, int line, int charPositionInLine, String msg, RecognitionException e) { - errorLog.addError(line, charPositionInLine, offendingSymbol.toString().length(), msg); - } - }); - - PolicyVisitor policyVisitor = new PolicyVisitor(new VisitorContext(scope, errorLog)); - List stmts = new ArrayList<>(); - try { - stmts = policyVisitor.visitPml(parser.pml()); - } catch (Exception e) { - errorLog.addError(parser.pml(), e.getMessage()); - } - - // throw an exception if there are any errors from parsing - if (!errorLog.getErrors().isEmpty()) { - throw new PMLCompilationException(errorLog); - } - - return stmts; - } - -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/PMLContext.java b/src/main/java/gov/nist/csd/pm/policy/pml/PMLContext.java deleted file mode 100644 index 62c3a661c..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/PMLContext.java +++ /dev/null @@ -1,62 +0,0 @@ -package gov.nist.csd.pm.policy.pml; - -import gov.nist.csd.pm.policy.Policy; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; -import gov.nist.csd.pm.policy.pml.model.expression.Value; - -import java.util.HashMap; -import java.util.Map; - -public class PMLContext { - - public static PMLContext fromPolicy(Policy policy) throws PMException { - Map functions = policy.userDefinedPML().getFunctions(); - Map constants = policy.userDefinedPML().getConstants(); - - return new PMLContext(functions, constants); - } - - private final Map functions; - - private final Map constants; - - public PMLContext() { - functions = new HashMap<>(); - constants = new HashMap<>(); - } - - public PMLContext(Map functions, Map constants) { - this.functions = functions; - this.constants = constants; - } - - public void addFunction(FunctionDefinitionStatement functionDefinitionStatement) { - this.functions.put(functionDefinitionStatement.getFunctionName(), functionDefinitionStatement); - } - - public void removeFunction(String functionName) { - this.functions.remove(functionName); - } - - public Map getFunctions() { - return functions; - } - - public void addConstant(String constantName, Value constantValue) { - this.constants.put(constantName, constantValue); - } - - public void removeConstant(String constName) { - this.constants.remove(constName); - } - - public Map getConstants() { - return constants; - } - - public PMLContext getContext() { - return this; - } - -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/PMLExecutable.java b/src/main/java/gov/nist/csd/pm/policy/pml/PMLExecutable.java deleted file mode 100644 index ae4ae027c..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/PMLExecutable.java +++ /dev/null @@ -1,12 +0,0 @@ -package gov.nist.csd.pm.policy.pml; - -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.UserContext; - -public interface PMLExecutable { - - void executePML(UserContext userContext, String input, - FunctionDefinitionStatement... functionDefinitionStatements) throws PMException; - -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/PMLExecutor.java b/src/main/java/gov/nist/csd/pm/policy/pml/PMLExecutor.java deleted file mode 100644 index 78ad08563..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/PMLExecutor.java +++ /dev/null @@ -1,88 +0,0 @@ -package gov.nist.csd.pm.policy.pml; - -import gov.nist.csd.pm.policy.Policy; -import gov.nist.csd.pm.policy.pml.model.context.ExecutionContext; -import gov.nist.csd.pm.policy.pml.model.exception.PMLExecutionException; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; -import gov.nist.csd.pm.policy.pml.statement.PMLStatement; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.UserContext; -import gov.nist.csd.pm.policy.pml.model.scope.PMLScopeException; - -import java.util.*; - -public class PMLExecutor { - - public static void compileAndExecutePML(Policy policy, UserContext author, String input, - FunctionDefinitionStatement ... customFunctions) throws PMException { - // compile the PML into statements - List compiledStatements = PMLCompiler.compilePML(policy, input, customFunctions); - - // initialize the execution context - ExecutionContext ctx = new ExecutionContext(author); - ctx.scope().loadFromPMLContext(PMLContext.fromPolicy(policy)); - - ExecutionContext predefined; - try { - // add custom builtin functions to scope - for (FunctionDefinitionStatement func : customFunctions) { - ctx.scope().addFunction(func); - } - - // store the predefined ctx to avoid adding again at the end of execution - predefined = ctx.copy(); - } catch (PMLScopeException e) { - throw new PMLExecutionException(e.getMessage()); - } - - // execute each statement - for (PMLStatement stmt : compiledStatements) { - try { - stmt.execute(ctx, policy); - } catch (PMException e) { - System.err.println(e.getMessage() + ": " + stmt); - throw e; - } - } - - // save any top level functions and constants to be used later - saveTopLevelFunctionsAndConstants(policy, predefined, ctx); - } - - private static void saveTopLevelFunctionsAndConstants(Policy policy, ExecutionContext predefinedCtx, ExecutionContext ctx) throws PMException { - Map predefinedFunctions = predefinedCtx.scope().functions(); - Map predefinedConstants = predefinedCtx.scope().values(); - - Map topLevelFunctions = ctx.scope().functions(); - for (String funcName : topLevelFunctions.keySet()) { - if (predefinedFunctions.containsKey(funcName)) { - continue; - } - - FunctionDefinitionStatement funcDef = topLevelFunctions.get(funcName); - policy.userDefinedPML().createFunction(funcDef); - } - - Map topLevelConstants = ctx.scope().values(); - for (String name : topLevelConstants.keySet()) { - if (predefinedConstants.containsKey(name)) { - continue; - } - - Value value = topLevelConstants.get(name); - policy.userDefinedPML().createConstant(name, value); - } - } - - public static Value executeStatementBlock(ExecutionContext executionCtx, Policy policyAuthor, List statements) throws PMException { - for (PMLStatement statement : statements) { - Value value = statement.execute(executionCtx, policyAuthor); - if (value.isReturn() || value.isBreak() || value.isContinue()) { - return value; - } - } - - return new Value(); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/PMLFormatter.java b/src/main/java/gov/nist/csd/pm/policy/pml/PMLFormatter.java deleted file mode 100644 index 531103484..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/PMLFormatter.java +++ /dev/null @@ -1,409 +0,0 @@ -package gov.nist.csd.pm.policy.pml; - -import gov.nist.csd.pm.policy.pml.antlr.PMLBaseVisitor; -import gov.nist.csd.pm.policy.pml.antlr.PMLLexer; -import gov.nist.csd.pm.policy.pml.antlr.PMLParser; -import gov.nist.csd.pm.policy.pml.statement.PMLStatement; -import org.antlr.v4.runtime.CharStreams; -import org.antlr.v4.runtime.CommonTokenStream; -import org.antlr.v4.runtime.ParserRuleContext; -import org.antlr.v4.runtime.misc.Interval; - -import java.util.List; -import java.util.Scanner; - -public class PMLFormatter extends PMLBaseVisitor { - - private static final String SPACES = " "; - public static final String NEW_LINE = "\n"; - - private int indentLevel; - - private PMLFormatter() { - indentLevel = 0; - } - - private String indent() { - return SPACES.repeat(indentLevel); - } - - public static String format(String pml) { - PMLLexer lexer = new PMLLexer(CharStreams.fromString(pml)); - CommonTokenStream tokens = new CommonTokenStream(lexer); - PMLParser parser = new PMLParser(tokens); - - String formatted = new PMLFormatter().visitPml(parser.pml()); - - return removeEmptyLines(formatted); - } - - private static String removeEmptyLines(String formatted) { - StringBuilder ret = new StringBuilder(); - Scanner sc = new Scanner(formatted); - while (sc.hasNextLine()) { - String line = sc.nextLine(); - if (line.isEmpty()) { - continue; - } - - ret.append(line).append(NEW_LINE); - } - - return ret.toString(); - } - - public static String getText(ParserRuleContext ctx) { - int startIndex = ctx.start.getStartIndex(); - int stopIndex = ctx.stop.getStopIndex(); - Interval interval = new Interval(startIndex, stopIndex); - return ctx.start.getInputStream().getText(interval); - } - - public static String statementsToString(List stmts) { - StringBuilder s = new StringBuilder(); - - for (PMLStatement stmt : stmts) { - s.append(stmt); - } - - return s.toString(); - } - - @Override - public String visitPml(PMLParser.PmlContext ctx) { - StringBuilder s = new StringBuilder(); - for (PMLParser.StatementContext stmtCtx : ctx.statement()) { - s.append(visitStatement(stmtCtx)); - } - return s.toString(); - } - - @Override - public String visitStatement(PMLParser.StatementContext ctx) { - if (ctx.variableDeclarationStatement() != null) { - return visitVarStmt(ctx.variableDeclarationStatement()); - } else if (ctx.functionDefinitionStatement() != null) { - return visitFuncDefStmt(ctx.functionDefinitionStatement()); - } else if (ctx.foreachStatement() != null) { - return visitForeachStmt(ctx.foreachStatement()); - } else if (ctx.functionInvokeStatement() != null) { - return visitFuncCallStmt(ctx.functionInvokeStatement()); - } else if (ctx.ifStatement() != null) { - return visitIfStmt(ctx.ifStatement()); - } else if (ctx.createAttributeStatement() != null) { - return visitCreateAttributeStatement(ctx.createAttributeStatement()); - } else if (ctx.createPolicyStatement() != null) { - return visitCreatePolicyStatement(ctx.createPolicyStatement()); - } else if (ctx.createUserOrObjectStatement() != null) { - return visitCreateUserOrObjectStatement(ctx.createUserOrObjectStatement()); - } else if (ctx.createProhibitionStatement() != null) { - return visitCreateProhibitionStatement(ctx.createProhibitionStatement()); - } else if (ctx.createObligationStatement() != null) { - return visitCreateObligationStatement(ctx.createObligationStatement()); - } else if (ctx.setNodePropertiesStatement() != null) { - return visitSetNodePropertiesStatement(ctx.setNodePropertiesStatement()); - } else if (ctx.assignStatement() != null) { - return visitAssignStatement(ctx.assignStatement()); - } else if (ctx.deassignStatement() != null) { - return visitDeassignStatement(ctx.deassignStatement()); - } else if (ctx.deleteStatement() != null) { - return visitDeleteStatement(ctx.deleteStatement()); - } else if (ctx.associateStatement() != null) { - return visitAssociateStatement(ctx.associateStatement()); - } else if (ctx.dissociateStatement() != null) { - return visitDissociateStatement(ctx.dissociateStatement()); - } else if (ctx.functionReturnStatement() != null) { - return visitFuncReturnStmt(ctx.functionReturnStatement()); - } else if (ctx.breakStatement() != null) { - return visitBreakStmt(ctx.breakStatement()); - } else if (ctx.continueStatement() != null) { - return visitContinueStmt(ctx.continueStatement()); - } else if (ctx.setResourceAccessRightsStatement() != null) { - return visitSetResourceAccessRightsStatement(ctx.setResourceAccessRightsStatement()); - } else if (ctx.deleteRuleStatement() != null) { - return visitDeleteRuleStatement(ctx.deleteRuleStatement()); - } - - return getText(ctx); - } - - private String formatStmt(ParserRuleContext ctx) { - String text = getText(ctx); - return indent() + text + NEW_LINE; - } - - public String visitVarStmt(PMLParser.VariableDeclarationStatementContext ctx) { - return formatStmt(ctx); - } - - public String visitFuncDefStmt(PMLParser.FunctionDefinitionStatementContext ctx) { - String text = getText(ctx); - int stmtStartIndex = ctx.start.getStartIndex(); - PMLParser.FuncBodyContext funcBodyCtx = ctx.funcBody(); - int openCurlyIndex = funcBodyCtx.OPEN_CURLY().getSymbol().getStartIndex() - stmtStartIndex; - int closeCurlyIndex = funcBodyCtx.CLOSE_CURLY().getSymbol().getStartIndex() - stmtStartIndex; - String signature = indent() + (text.substring(0, openCurlyIndex + 1).trim()) + NEW_LINE; - - String body = visitStatements(funcBodyCtx.statement()); - - String close = "\n" + indent() + text.substring(closeCurlyIndex).trim() + NEW_LINE; - - return signature + body + close; - } - - private String visitStatements(List stmts) { - indentLevel++; - StringBuilder body = new StringBuilder(); - for (PMLParser.StatementContext stmtCtx : stmts) { - body.append(visitStatement(stmtCtx)); - } - indentLevel--; - - return body.toString(); - } - - public String visitFuncReturnStmt(PMLParser.FunctionReturnStatementContext ctx) { - return formatStmt(ctx); - } - - public String visitForeachStmt(PMLParser.ForeachStatementContext ctx) { - String text = getText(ctx); - int stmtStartIndex = ctx.start.getStartIndex(); - PMLParser.StatementBlockContext forStmtsCtx = ctx.statementBlock(); - int openCurlyIndex = forStmtsCtx.OPEN_CURLY().getSymbol().getStartIndex() - stmtStartIndex; - int closeCurlyIndex = forStmtsCtx.CLOSE_CURLY().getSymbol().getStartIndex() - stmtStartIndex; - String forloop = indent() + (text.substring(0, openCurlyIndex + 1).trim()) + NEW_LINE; - - String body = visitStatements(ctx.statementBlock().statement()); - - String close = "\n" + indent() + text.substring(closeCurlyIndex).trim() + NEW_LINE; - - return forloop + body + close; - } - - public String visitBreakStmt(PMLParser.BreakStatementContext ctx) { - return formatStmt(ctx); - } - - public String visitContinueStmt(PMLParser.ContinueStatementContext ctx) { - return formatStmt(ctx); - } - - public String visitFuncCallStmt(PMLParser.FunctionInvokeStatementContext ctx) { - return formatStmt(ctx); - } - - public String visitIfStmt(PMLParser.IfStatementContext ctx) { - String text = getText(ctx); - int startIndex = ctx.start.getStartIndex(); - int openCurlyIndex = (ctx.statementBlock().OPEN_CURLY().getSymbol().getStartIndex()) - startIndex; - String ifStr = indent() + text.substring(0, openCurlyIndex).trim() + " "; - - String ifStmtBlock = visitStatementBlock(ctx.statementBlock()); - - StringBuilder elseIfStmtBlock = new StringBuilder(); - for (PMLParser.ElseIfStatementContext elseIfStmtCtx : ctx.elseIfStatement()) { - elseIfStmtBlock.append(visitElseIfStatement(elseIfStmtCtx)); - } - - String elseStmtBlock = visitElseStatement(ctx.elseStatement()); - - return ifStr + ifStmtBlock + elseIfStmtBlock + elseStmtBlock; - } - - @Override - public String visitElseIfStatement(PMLParser.ElseIfStatementContext ctx) { - if (ctx == null) { - return ""; - } - - String text = getText(ctx); - int startIndex = ctx.start.getStartIndex(); - int openCurlyIndex = (ctx.statementBlock().OPEN_CURLY().getSymbol().getStartIndex()) - startIndex; - String ifStr = " " + text.substring(0, openCurlyIndex).trim() + " "; - - String stmtBlock = visitStatementBlock(ctx.statementBlock()); - - return ifStr + stmtBlock; - } - - @Override - public String visitElseStatement(PMLParser.ElseStatementContext ctx) { - if (ctx == null) { - return ""; - } - - String text = getText(ctx); - int startIndex = ctx.start.getStartIndex(); - int openCurlyIndex = (ctx.statementBlock().OPEN_CURLY().getSymbol().getStartIndex()) - startIndex; - String elseStr = " " + text.substring(0, openCurlyIndex).trim(); - - String stmtBlock = visitStatementBlock(ctx.statementBlock()); - - return elseStr + stmtBlock + NEW_LINE; - } - - @Override - public String visitStatementBlock(PMLParser.StatementBlockContext ctx) { - StringBuilder block = new StringBuilder(); - - indentLevel++; - for (PMLParser.StatementContext stmtCtx : ctx.statement()) { - block.append(visitStatement(stmtCtx)); - } - indentLevel--; - - return "{" + NEW_LINE + block + indent() + "}"; - } - - @Override - public String visitCreatePolicyStatement(PMLParser.CreatePolicyStatementContext ctx) { - return formatStmt(ctx); - } - - @Override - public String visitCreateAttributeStatement(PMLParser.CreateAttributeStatementContext ctx) { - return formatStmt(ctx); - } - - @Override - public String visitCreateUserOrObjectStatement(PMLParser.CreateUserOrObjectStatementContext ctx) { - return formatStmt(ctx); - } - - @Override - public String visitSetNodePropertiesStatement(PMLParser.SetNodePropertiesStatementContext ctx) { - return formatStmt(ctx); - } - - @Override - public String visitAssignStatement(PMLParser.AssignStatementContext ctx) { - return formatStmt(ctx); - } - - @Override - public String visitDeassignStatement(PMLParser.DeassignStatementContext ctx) { - return formatStmt(ctx); - } - - @Override - public String visitAssociateStatement(PMLParser.AssociateStatementContext ctx) { - return formatStmt(ctx); - } - - @Override - public String visitDissociateStatement(PMLParser.DissociateStatementContext ctx) { - return formatStmt(ctx); - } - - @Override - public String visitDeleteStatement(PMLParser.DeleteStatementContext ctx) { - return formatStmt(ctx); - } - - @Override - public String visitCreateObligationStatement(PMLParser.CreateObligationStatementContext ctx) { - String text = getText(ctx); - int stmtStartIndex = ctx.start.getStartIndex(); - int openCurlyIndex = ctx.OPEN_CURLY().getSymbol().getStartIndex() - stmtStartIndex; - int closeCurlyIndex = ctx.CLOSE_CURLY().getSymbol().getStartIndex() - stmtStartIndex; - String create = indent() + (text.substring(0, openCurlyIndex + 1).trim()) + NEW_LINE; - - StringBuilder body = new StringBuilder(); - List createRuleStmts = ctx.createRuleStatement(); - indentLevel++; - for (PMLParser.CreateRuleStatementContext createRuleStmtCtx : createRuleStmts) { - body.append(visitCreateRuleStatement(createRuleStmtCtx)); - } - indentLevel--; - - String close = "\n" + indent() + text.substring(closeCurlyIndex).trim() + NEW_LINE; - - return create + body + close; - } - - @Override - public String visitCreateRuleStatement(PMLParser.CreateRuleStatementContext ctx) { - String text = getText(ctx); - int stmtStartIndex = ctx.start.getStartIndex(); - int whenIndex = ctx.WHEN().getSymbol().getStartIndex() - stmtStartIndex; - String create = indent() + (text.substring(0, whenIndex).trim()) + NEW_LINE; - - int performsIndex = ctx.PERFORMS().getSymbol().getStartIndex() - stmtStartIndex; - String when = indent() + (text.substring(whenIndex, performsIndex).trim()) + NEW_LINE; - - int doIndex = ctx.response().DO().getSymbol().getStartIndex() - stmtStartIndex; - String performs = ""; - String on = ""; - int performsEndIndex = 0; - if (ctx.ON() != null) { - int onIndex = ctx.ON().getSymbol().getStartIndex() - stmtStartIndex; - performsEndIndex = onIndex; - on = indent() + (text.substring(onIndex, doIndex).trim()) + NEW_LINE; - } else { - performsEndIndex = doIndex; - } - - performs = indent() + (text.substring(performsIndex, performsEndIndex).trim()) + NEW_LINE; - - String response = visitResponse(ctx.response()); - - return create + when + performs + on + response; - } - - @Override - public String visitResponse(PMLParser.ResponseContext ctx) { - String text = getText(ctx); - - int start = ctx.start.getStartIndex(); - int closeParenIndex = (ctx.CLOSE_PAREN().getSymbol().getStopIndex() + 1) - start; - String doStr = indent() + text.substring(0, closeParenIndex).trim() + " "; - - String response = visitResponseBlock(ctx.responseBlock()); - - return doStr + response; - } - - @Override - public String visitResponseBlock(PMLParser.ResponseBlockContext ctx) { - indentLevel++; - String responseBlock = visitResponseStatements(ctx.responseStatement()); - indentLevel--; - - return "{" + NEW_LINE + responseBlock + indent() + "}" + NEW_LINE; - } - - public String visitResponseStatements(List ctx) { - StringBuilder stmts = new StringBuilder(); - for (PMLParser.ResponseStatementContext stmtCtx : ctx) { - stmts.append(visitResponseStatement(stmtCtx)).append(NEW_LINE); - } - return stmts.toString(); - } - - @Override - public String visitResponseStatement(PMLParser.ResponseStatementContext ctx) { - if (ctx.statement() != null) { - return visitStatement(ctx.statement()); - } else if (ctx.createRuleStatement() != null){ - return visitCreateRuleStatement(ctx.createRuleStatement()); - } else { - return visitDeleteRuleStatement(ctx.deleteRuleStatement()); - } - } - - @Override - public String visitDeleteRuleStatement(PMLParser.DeleteRuleStatementContext ctx) { - return formatStmt(ctx); - } - - @Override - public String visitCreateProhibitionStatement(PMLParser.CreateProhibitionStatementContext ctx) { - return formatStmt(ctx); - } - - @Override - public String visitSetResourceAccessRightsStatement(PMLParser.SetResourceAccessRightsStatementContext ctx) { - return formatStmt(ctx); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/PMLSerializable.java b/src/main/java/gov/nist/csd/pm/policy/pml/PMLSerializable.java deleted file mode 100644 index 6db23f4b1..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/PMLSerializable.java +++ /dev/null @@ -1,12 +0,0 @@ -package gov.nist.csd.pm.policy.pml; - -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.UserContext; - -public interface PMLSerializable { - - void fromPML(UserContext author, String input, FunctionDefinitionStatement... customFunctions) throws PMException; - String toPML(boolean format) throws PMException; - -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/PMLSerializer.java b/src/main/java/gov/nist/csd/pm/policy/pml/PMLSerializer.java deleted file mode 100644 index 334d300f1..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/PMLSerializer.java +++ /dev/null @@ -1,273 +0,0 @@ -package gov.nist.csd.pm.policy.pml; - -import gov.nist.csd.pm.pap.memory.dag.BreadthFirstGraphWalker; -import gov.nist.csd.pm.policy.Policy; -import gov.nist.csd.pm.policy.model.graph.dag.walker.Direction; -import gov.nist.csd.pm.policy.model.graph.nodes.Node; -import gov.nist.csd.pm.policy.model.graph.nodes.NodeType; -import gov.nist.csd.pm.policy.model.graph.relationships.Association; -import gov.nist.csd.pm.policy.model.obligation.Obligation; -import gov.nist.csd.pm.policy.model.prohibition.Prohibition; -import gov.nist.csd.pm.policy.pml.model.expression.*; -import gov.nist.csd.pm.policy.pml.statement.*; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.UserContext; - -import java.util.*; - -import static gov.nist.csd.pm.policy.model.access.AdminAccessRights.isAdminAccessRight; -import static gov.nist.csd.pm.policy.model.graph.nodes.NodeType.OA; -import static gov.nist.csd.pm.policy.model.graph.nodes.NodeType.UA; - -public class PMLSerializer implements PMLSerializable { - - private final Policy policy; - - public PMLSerializer(Policy policy) { - this.policy = policy; - } - - @Override - public void fromPML(UserContext author, String input, FunctionDefinitionStatement... customFunctions) throws PMException { - PMLExecutor.compileAndExecutePML(policy, author, input, customFunctions); - } - - @Override - public String toPML(boolean format) throws PMException { - String pml = toPML(policy); - if (format) { - pml = PMLFormatter.format(pml); - } - - return pml; - } - - private String toPML(Policy policy) throws PMException { - String pml = ""; - String constants = serializeConstants(policy); - if (!constants.isEmpty()) { - pml += constants + "\n"; - } - - String functions = serializeFunctions(policy); - if (!functions.isEmpty()) { - pml += functions + "\n"; - } - - String graph = serializeGraph(policy); - if (!graph.isEmpty()) { - pml += graph + "\n"; - } - - String prohibitions = serializeProhibitions(policy); - if (!prohibitions.isEmpty()) { - pml += prohibitions + "\n"; - } - - String obligations = serializeObligations(policy); - if (!obligations.isEmpty()) { - pml += obligations; - } - - return pml.trim(); - } - - private String serializeObligations(Policy policy) throws PMException { - StringBuilder pml = new StringBuilder(); - - List obligations = policy.obligations().getAll(); - for (Obligation o : obligations) { - if (!pml.isEmpty()) { - pml.append("\n"); - } - pml.append(CreateObligationStatement.fromObligation(o)); - } - - return pml.toString(); - } - - private String serializeProhibitions(Policy policy) throws PMException { - StringBuilder pml = new StringBuilder(); - - Map> prohibitions = policy.prohibitions().getAll(); - for (List subjectPros : prohibitions.values()) { - for (Prohibition p : subjectPros) { - if (!pml.isEmpty()) { - pml.append("\n"); - } - - pml.append(CreateProhibitionStatement.fromProhibition(p)); - } - } - - return pml.toString(); - } - - private String serializeGraph(Policy policy) throws PMException { - StringBuilder pml = new StringBuilder(); - - // resource access rights - ArrayLiteral arrayLiteral = new ArrayLiteral(Type.string()); - for (String ar : policy.graph().getResourceAccessRights()) { - arrayLiteral.add(new Expression(new Literal(ar))); - } - pml.append(new SetResourceAccessRightsStatement(new Expression(new Literal(arrayLiteral)))).append("\n"); - - List policyClasses = policy.graph().getPolicyClasses(); - Set attributes = new HashSet<>(); - Set usersAndObjects = new HashSet<>(); - Map> delayedAssociations = new HashMap<>(); - - for (String policyClass : policyClasses) { - pml.append(new CreatePolicyStatement(new Expression(new Literal(policyClass)))).append("\n"); - - Node pcNode = policy.graph().getNode(policyClass); - if (!pcNode.getProperties().isEmpty()) { - PMLStatement stmt = buildSetNodePropertiesStatement(pcNode.getName(), pcNode.getProperties()); - pml.append(stmt).append("\n"); - } - - new BreadthFirstGraphWalker(policy.graph()) - .withPropagator((child, parent) -> { - Node childNode = policy.graph().getNode(child); - - if (childNode.getType() == OA || childNode.getType() == UA) { - if (!attributes.contains(child)) { - attributes.add(child); - PMLStatement stmt = buildCreateNodeStatement(child, childNode.getType(), parent); - pml.append(stmt).append("\n"); - if (!childNode.getProperties().isEmpty()) { - stmt = buildSetNodePropertiesStatement(child, childNode.getProperties()); - pml.append(stmt).append("\n"); - } - } else { - pml.append(new AssignStatement( - new Expression(new Literal(child)), - new Expression(new Literal(new ArrayLiteral(new Expression[]{new Expression(new Literal(parent))}, Type.string()))) - )).append("\n"); - } - - if (delayedAssociations.containsKey(child)) { - List associateStatements = delayedAssociations.get(child); - for (AssociateStatement stmt : associateStatements) { - pml.append(stmt).append("\n"); - } - - delayedAssociations.remove(child); - } - - if (childNode.getType() == UA) { - List sourceAssociations = policy.graph().getAssociationsWithSource(child); - for (Association association : sourceAssociations) { - - ArrayLiteral arLiteral = new ArrayLiteral(Type.string()); - for (String ar : association.getAccessRightSet()) { - if (isAdminAccessRight(ar)) { - arLiteral.add(new Expression(new VariableReference(ar, Type.string()))); - } else { - arLiteral.add(new Expression(new Literal(ar))); - } - } - - String target = association.getTarget(); - AssociateStatement stmt = new AssociateStatement( - new Expression(new Literal(child)), - new Expression(new Literal(association.getTarget())), - new Expression(new Literal(arLiteral)) - ); - - if (!attributes.contains(target)) { - List associateStmts = delayedAssociations.getOrDefault(target, new ArrayList<>()); - associateStmts.add(stmt); - delayedAssociations.put(target, associateStmts); - } else { - pml.append(stmt).append("\n"); - } - } - } - } else { - if (!usersAndObjects.contains(child)) { - usersAndObjects.add(child); - PMLStatement stmt = buildCreateNodeStatement(child, childNode.getType(), parent); - pml.append(stmt).append("\n"); - } else { - pml.append(new AssignStatement( - new Expression(new Literal(child)), - new Expression(new Literal(new ArrayLiteral(new Expression[]{new Expression(new Literal(parent))}, Type.string()))) - )).append("\n"); - } - } - }) - .withDirection(Direction.CHILDREN) - .walk(policyClass); - } - - return pml.toString().trim(); - } - - private PMLStatement buildSetNodePropertiesStatement(String name, Map properties) { - Map propertiesExpressions = new HashMap<>(); - for (Map.Entry property : properties.entrySet()) { - propertiesExpressions.put( - new Expression(new Literal(property.getKey())), - new Expression(new Literal(property.getValue())) - ); - } - - return new SetNodePropertiesStatement( - new Expression(new Literal(name)), - new Expression(new Literal(new MapLiteral(propertiesExpressions, Type.string(), Type.string()))) - ); - } - - private PMLStatement buildCreateNodeStatement(String name, NodeType type, String parent) { - if (type == UA || type == OA) { - return new CreateAttrStatement( - new Expression(new Literal(name)), - type, - new Expression(new Literal(new ArrayLiteral(new Expression[]{new Expression(new Literal(parent))}, Type.string()))) - ); - } else { - return new CreateUserOrObjectStatement( - new Expression(new Literal(name)), - type, - new Expression(new Literal(new ArrayLiteral(new Expression[]{new Expression(new Literal(parent))}, Type.string()))) - ); - } - } - - private String serializeFunctions(Policy policy) throws PMException { - StringBuilder pml = new StringBuilder(); - Map functions = policy.userDefinedPML().getFunctions(); - for (FunctionDefinitionStatement func : functions.values()) { - if (func.isFunctionExecutor()) { - continue; - } - - if (!pml.isEmpty()) { - pml.append("\n"); - } - - pml.append(func); - } - - return pml.toString(); - } - - private String serializeConstants(Policy policy) throws PMException { - StringBuilder pml = new StringBuilder(); - Map constants = policy.userDefinedPML().getConstants(); - for (Map.Entry c : constants.entrySet()) { - if (!pml.isEmpty()) { - pml.append("\n"); - } - - pml.append(serializeConstant(c.getKey(), c.getValue())); - } - return pml.toString(); - } - - private String serializeConstant(String name, Value value) { - return String.format("const %s = %s", name, value.toString()); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/antlr/PML.g4 b/src/main/java/gov/nist/csd/pm/policy/pml/antlr/PML.g4 deleted file mode 100644 index 325f7c7f9..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/antlr/PML.g4 +++ /dev/null @@ -1,281 +0,0 @@ -grammar PML; - -pml: (statement)* EOF ; -statement: ( - createPolicyStatement - | createAttributeStatement - | createUserOrObjectStatement - | createObligationStatement - | createProhibitionStatement - | setNodePropertiesStatement - | assignStatement - | deassignStatement - | associateStatement - | dissociateStatement - | setResourceAccessRightsStatement - | deleteStatement - | deleteRuleStatement - | variableDeclarationStatement - | functionDefinitionStatement - | functionReturnStatement - | foreachStatement - | forRangeStatement - | breakStatement - | continueStatement - | functionInvokeStatement - | ifStatement -) ; - -createPolicyStatement: - CREATE POLICY_CLASS expression ; - -createAttributeStatement: - CREATE (OBJECT_ATTRIBUTE | USER_ATTRIBUTE) name=expression IN parents=expression ; - -createUserOrObjectStatement: - CREATE (USER | OBJECT) name=expression IN parents=expression ; - -createObligationStatement: - CREATE OBLIGATION expression OPEN_CURLY createRuleStatement* CLOSE_CURLY; -createRuleStatement: - CREATE RULE ruleName=expression - WHEN subjectClause - PERFORMS performsClause=expression - (ON onClause)? - response ; -subjectClause: - ANY_USER #AnyUserSubject - | USER user=expression #UserSubject - | USERS users=expression #UsersListSubject - | ANY_USER_WITH_ATTRIBUTE attribute=expression #UserAttrSubject - | PROCESS process=expression #ProcessSubject ; -onClause: - expression #PolicyElement - | anyPe #AnyPolicyElement - | anyPe IN expression #AnyContainedIn - | anyPe OF expression #AnyOfSet ; -anyPe: ANY POLICY_ELEMENT; -response: - DO OPEN_PAREN ID CLOSE_PAREN responseBlock; -responseBlock: - OPEN_CURLY responseStatement* CLOSE_CURLY ; -responseStatement: - statement - | createRuleStatement - | deleteRuleStatement ; - -createProhibitionStatement: - CREATE PROHIBITION name=expression DENY (USER | USER_ATTRIBUTE | PROCESS) subject=expression - ACCESS_RIGHTS accessRights=expression - ON (INTERSECTION|UNION) OF containers=prohibitionContainerList ; -prohibitionContainerList: - OPEN_BRACKET (prohibitionContainerExpression (COMMA prohibitionContainerExpression)*)? CLOSE_BRACKET ; -prohibitionContainerExpression: - IS_COMPLEMENT? container=expression ; - -setNodePropertiesStatement: - SET_PROPERTIES OF name=expression TO properties=expression ; - -assignStatement: - ASSIGN childNode=expression TO parentNodes=expression ; - -deassignStatement: - DEASSIGN childNode=expression FROM parentNodes=expression ; - -associateStatement: - ASSOCIATE ua=expression AND target=expression WITH accessRights=expression ; - -dissociateStatement: - DISSOCIATE ua=expression AND target=expression ; - -setResourceAccessRightsStatement: - SET_RESOURCE_ACCESS_RIGHTS accessRights=expression; - -deleteStatement: - DELETE deleteType expression ; -deleteType: - nodeType #DeleteNode - | OBLIGATION #DeleteObligation - | PROHIBITION #DeleteProhibition ; -nodeType: - (POLICY_CLASS | OBJECT_ATTRIBUTE | USER_ATTRIBUTE | OBJECT | USER) ; - -deleteRuleStatement: - DELETE RULE ruleName=expression FROM OBLIGATION obligationName=expression ; - -variableDeclarationStatement: - (LET | CONST)? ID EQUALS expression ; - -functionDefinitionStatement: - FUNCTION ID OPEN_PAREN formalArgList CLOSE_PAREN funcReturnType? funcBody ; -formalArgList: - (formalArg (COMMA formalArg)*)? ; -formalArg: - formalArgType ID ; -formalArgType: - variableType ; -functionReturnStatement: - (RETURN expression | RETURN) ; -funcReturnType: - variableType #VariableReturnType - | VOID_TYPE #VoidReturnType; -funcBody: - OPEN_CURLY statement* CLOSE_CURLY; - -foreachStatement: - FOREACH key=ID (COMMA mapValue=ID)? IN expression statementBlock ; - -forRangeStatement: - FOR ID IN_RANGE - lowerBound=(OPEN_BRACKET|OPEN_PAREN) lower=expression COMMA upper=expression upperBound=(CLOSE_BRACKET|CLOSE_PAREN) - statementBlock ; - -breakStatement: - BREAK ; - -continueStatement: - CONTINUE ; - -functionInvokeStatement: - functionInvoke; - -ifStatement: - IF (IS_COMPLEMENT)? condition=expression statementBlock - elseIfStatement* - elseStatement? ; -elseIfStatement: - ELSE IF (IS_COMPLEMENT)? condition=expression statementBlock ; -elseStatement: - ELSE statementBlock ; - -variableType: - STRING_TYPE #StringType - | BOOLEAN_TYPE #BooleanType - | arrayType #ArrayVarType - | mapType #MapVarType - | ANY #AnyType ; -mapType: MAP_TYPE OPEN_BRACKET keyType=variableType CLOSE_BRACKET valueType=variableType ; -arrayType: OPEN_BRACKET CLOSE_BRACKET variableType ; - -statementBlock: OPEN_CURLY statement* CLOSE_CURLY ; - -expression: - variableReference - | functionInvoke - | literal - | left=expression (EQUALS_OP | NOT_EQUALS_OP) right=expression - | left=expression (AND_OP | OR_OP) right=expression; - -array: - OPEN_BRACKET (expression (COMMA expression)*)? CLOSE_BRACKET ; - -map: - OPEN_CURLY (mapEntry (COMMA mapEntry)*)? CLOSE_CURLY ; -mapEntry: - key=expression COLON value=expression ; -entryReference: - ID (OPEN_BRACKET key=expression CLOSE_BRACKET)+ ; - -literal: - STRING #StringLiteral - | BOOLEAN #BooleanLiteral - | NUMBER #NumberLiteral - | array #ArrayLiteral - | map #MapLiteral ; - -variableReference: - ID #ReferenceByID - | entryReference #ReferenceByEntry ; - -functionInvoke: - ID functionInvokeArgs ; -functionInvokeArgs: - OPEN_PAREN (expression (COMMA expression)*)? CLOSE_PAREN ; - -// LEXER RULEs -CREATE: [c][r][e][a][t][e] ; -DELETE: [d][e][l][e][t][e] ; -BREAK: [b][r][e][a][k] ; -CONTINUE: [c][o][n][t][i][n][u][e] ; - -// obligation keywords -POLICY_ELEMENT: [p][o][l][i][c][y][ ][e][l][e][m][e][n][t] ; -RULE: [r][u][l][e] ; -WHEN: [w][h][e][n] ; -PERFORMS: [p][e][r][f][o][r][m][s] ; -AS: [a][s] ; -ON: [o][n] ; -DO: [d][o] ; -ANY_USER: ANY [ ] USER ; -USERS: USER [s] ; -ANY_USER_WITH_ATTRIBUTE: ANY_USER [ ][w][i][t][h][ ] ATTR ; -PROCESS: [p][r][o][c][e][s][s] ; -INTERSECTION: [i][n][t][e][r][s][e][c][t][i][o][n] ; -UNION: [u][n][i][o][n] ; - -SET_RESOURCE_ACCESS_RIGHTS: [s][e][t][ ][r][e][s][o][u][r][c][e][ ] ACCESS_RIGHTS; -ASSIGN: [a][s][s][i][g][n] ; -DEASSIGN: [d][e][a][s][s][i][g][n] ; -FROM: [f][r][o][m] ; -SET_PROPERTIES: [s][e][t][ ][p][r][o][p][e][r][t][i][e][s] ; -OF: [o][f] ; -TO: [t][o] ; -ASSOCIATE: [a][s][s][o][c][i][a][t][e] ; -AND: [a][n][d] ; -WITH: [w][i][t][h] ; -DISSOCIATE: [d][i][s][s][o][c][i][a][t][e] ; -DENY: [d][e][n][y]; -PROHIBITION: [p][r][o][h][i][b][i][t][i][o][n]; -OBLIGATION: [o][b][l][i][g][a][t][i][o][n]; -ACCESS_RIGHTS: [a][c][c][e][s][s][ ][r][i][g][h][t][s] ; - -POLICY_CLASS: ([p][o][l][i][c][y][ ][c][l][a][s][s] | [p][c]) ; -OBJECT_ATTRIBUTE: (OBJECT [ ] ATTR | [o][a]) ; -USER_ATTRIBUTE: (USER [ ] ATTR | [u][a]); -OBJECT: ([o][b][j][e][c][t] | [o]); -USER: ([u][s][e][r] | [u]) ; -ATTR: [a][t][t][r][i][b][u][t][e] ; - -ANY: [a][n][y] ; -LET: [l][e][t] ; -CONST: [c][o][n][s][t] ; -FUNCTION: [f][u][n][c][t][i][o][n] ; -RETURN: [r][e][t][u][r][n] ; -BOOLEAN: (TRUE|FALSE) ; -TRUE: [t][r][u][e] ; -FALSE: [f][a][l][s][e] ; -STRING_TYPE: [s][t][r][i][n][g] ; -BOOLEAN_TYPE: [b][o][o][l][e][a][n] ; -VOID_TYPE: [v][o][i][d] ; -ARRAY_TYPE: [a][r][r][a][y] ; -MAP_TYPE: [m][a][p] ; -FOREACH: [f][o][r][e][a][c][h] ; -FOR: [f][o][r] ; -IN: [i][n] ; -IF: [i][f] ; -ELSE: [e][l][s][e] ; -IN_RANGE: [i][n][ ][r][a][n][g][e] ; - -NUMBER: [0-9]+ ; -ID: [a-zA-Z0-9_]+ ; -STRING: DOUBLE_QUOTE_STRING | SINGLE_QUOTE_STRING ; -DOUBLE_QUOTE_STRING : '"' ( '\\"' | ~('\n'|'\r') )*? '"' ; -SINGLE_QUOTE_STRING : '\'' ( '\\\'' | ~('\n'|'\r') )*? '\'' ; -LINE_COMMENT : '#' ~'\n'* '\n' -> channel(HIDDEN) ; -WS : [ \t\n\r]+ -> skip ; -COMMA: ',' ; -COLON: ':' ; -OPEN_CURLY: '{' ; -CLOSE_CURLY: '}' ; -OPEN_BRACKET: '[' ; -CLOSE_BRACKET: ']' ; -OPEN_ANGLE_BRACKET: '<' ; -CLOSE_ANGLE_BRACKET: '>' ; -OPEN_PAREN: '(' ; -CLOSE_PAREN: ')' ; -IS_COMPLEMENT: '!' ; -EQUALS: '=' ; -AND_OP: '&&' ; -OR_OP: '||' ; -EQUALS_OP: '==' ; -NOT_EQUALS_OP: '!=' ; \ No newline at end of file diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/antlr/PML.interp b/src/main/java/gov/nist/csd/pm/policy/pml/antlr/PML.interp deleted file mode 100644 index 2bfc62450..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/antlr/PML.interp +++ /dev/null @@ -1,226 +0,0 @@ -token literal names: -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -',' -':' -'{' -'}' -'[' -']' -'<' -'>' -'(' -')' -'!' -'=' -'&&' -'||' -'==' -'!=' - -token symbolic names: -null -CREATE -DELETE -BREAK -CONTINUE -POLICY_ELEMENT -RULE -WHEN -PERFORMS -AS -ON -DO -ANY_USER -USERS -ANY_USER_WITH_ATTRIBUTE -PROCESS -INTERSECTION -UNION -SET_RESOURCE_ACCESS_RIGHTS -ASSIGN -DEASSIGN -FROM -SET_PROPERTIES -OF -TO -ASSOCIATE -AND -WITH -DISSOCIATE -DENY -PROHIBITION -OBLIGATION -ACCESS_RIGHTS -POLICY_CLASS -OBJECT_ATTRIBUTE -USER_ATTRIBUTE -OBJECT -USER -ATTR -ANY -LET -CONST -FUNCTION -RETURN -BOOLEAN -TRUE -FALSE -STRING_TYPE -BOOLEAN_TYPE -VOID_TYPE -ARRAY_TYPE -MAP_TYPE -FOREACH -FOR -IN -IF -ELSE -IN_RANGE -NUMBER -ID -STRING -DOUBLE_QUOTE_STRING -SINGLE_QUOTE_STRING -LINE_COMMENT -WS -COMMA -COLON -OPEN_CURLY -CLOSE_CURLY -OPEN_BRACKET -CLOSE_BRACKET -OPEN_ANGLE_BRACKET -CLOSE_ANGLE_BRACKET -OPEN_PAREN -CLOSE_PAREN -IS_COMPLEMENT -EQUALS -AND_OP -OR_OP -EQUALS_OP -NOT_EQUALS_OP - -rule names: -pml -statement -createPolicyStatement -createAttributeStatement -createUserOrObjectStatement -createObligationStatement -createRuleStatement -subjectClause -onClause -anyPe -response -responseBlock -responseStatement -createProhibitionStatement -prohibitionContainerList -prohibitionContainerExpression -setNodePropertiesStatement -assignStatement -deassignStatement -associateStatement -dissociateStatement -setResourceAccessRightsStatement -deleteStatement -deleteType -nodeType -deleteRuleStatement -variableDeclarationStatement -functionDefinitionStatement -formalArgList -formalArg -formalArgType -functionReturnStatement -funcReturnType -funcBody -foreachStatement -forRangeStatement -breakStatement -continueStatement -functionInvokeStatement -ifStatement -elseIfStatement -elseStatement -variableType -mapType -arrayType -statementBlock -expression -array -map -mapEntry -entryReference -literal -variableReference -functionInvoke -functionInvokeArgs - - -atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 82, 523, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 3, 2, 7, 2, 114, 10, 2, 12, 2, 14, 2, 117, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 143, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 7, 7, 166, 10, 7, 12, 7, 14, 7, 169, 11, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 182, 10, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 195, 10, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 207, 10, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 7, 13, 220, 10, 13, 12, 13, 14, 13, 223, 11, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 5, 14, 230, 10, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 7, 16, 249, 10, 16, 12, 16, 14, 16, 252, 11, 16, 5, 16, 254, 10, 16, 3, 16, 3, 16, 3, 17, 5, 17, 259, 10, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 5, 25, 301, 10, 25, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 5, 28, 313, 10, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 5, 29, 325, 10, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 7, 30, 332, 10, 30, 12, 30, 14, 30, 335, 11, 30, 5, 30, 337, 10, 30, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 5, 33, 347, 10, 33, 3, 34, 3, 34, 5, 34, 351, 10, 34, 3, 35, 3, 35, 7, 35, 355, 10, 35, 12, 35, 14, 35, 358, 11, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 5, 36, 366, 10, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 39, 3, 39, 3, 40, 3, 40, 3, 41, 3, 41, 5, 41, 390, 10, 41, 3, 41, 3, 41, 3, 41, 7, 41, 395, 10, 41, 12, 41, 14, 41, 398, 11, 41, 3, 41, 5, 41, 401, 10, 41, 3, 42, 3, 42, 3, 42, 5, 42, 406, 10, 42, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 5, 44, 419, 10, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 7, 47, 433, 10, 47, 12, 47, 14, 47, 436, 11, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 48, 5, 48, 444, 10, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 7, 48, 452, 10, 48, 12, 48, 14, 48, 455, 11, 48, 3, 49, 3, 49, 3, 49, 3, 49, 7, 49, 461, 10, 49, 12, 49, 14, 49, 464, 11, 49, 5, 49, 466, 10, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 50, 7, 50, 474, 10, 50, 12, 50, 14, 50, 477, 11, 50, 5, 50, 479, 10, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 6, 52, 492, 10, 52, 13, 52, 14, 52, 493, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 5, 53, 501, 10, 53, 3, 54, 3, 54, 5, 54, 505, 10, 54, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 7, 56, 514, 10, 56, 12, 56, 14, 56, 517, 11, 56, 5, 56, 519, 10, 56, 3, 56, 3, 56, 3, 56, 2, 3, 94, 57, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 2, 12, 3, 2, 36, 37, 3, 2, 38, 39, 5, 2, 17, 17, 37, 37, 39, 39, 3, 2, 18, 19, 3, 2, 35, 39, 3, 2, 42, 43, 4, 2, 71, 71, 75, 75, 4, 2, 72, 72, 76, 76, 3, 2, 81, 82, 3, 2, 79, 80, 2, 539, 2, 115, 3, 2, 2, 2, 4, 142, 3, 2, 2, 2, 6, 144, 3, 2, 2, 2, 8, 148, 3, 2, 2, 2, 10, 154, 3, 2, 2, 2, 12, 160, 3, 2, 2, 2, 14, 172, 3, 2, 2, 2, 16, 194, 3, 2, 2, 2, 18, 206, 3, 2, 2, 2, 20, 208, 3, 2, 2, 2, 22, 211, 3, 2, 2, 2, 24, 217, 3, 2, 2, 2, 26, 229, 3, 2, 2, 2, 28, 231, 3, 2, 2, 2, 30, 244, 3, 2, 2, 2, 32, 258, 3, 2, 2, 2, 34, 262, 3, 2, 2, 2, 36, 268, 3, 2, 2, 2, 38, 273, 3, 2, 2, 2, 40, 278, 3, 2, 2, 2, 42, 285, 3, 2, 2, 2, 44, 290, 3, 2, 2, 2, 46, 293, 3, 2, 2, 2, 48, 300, 3, 2, 2, 2, 50, 302, 3, 2, 2, 2, 52, 304, 3, 2, 2, 2, 54, 312, 3, 2, 2, 2, 56, 318, 3, 2, 2, 2, 58, 336, 3, 2, 2, 2, 60, 338, 3, 2, 2, 2, 62, 341, 3, 2, 2, 2, 64, 346, 3, 2, 2, 2, 66, 350, 3, 2, 2, 2, 68, 352, 3, 2, 2, 2, 70, 361, 3, 2, 2, 2, 72, 371, 3, 2, 2, 2, 74, 381, 3, 2, 2, 2, 76, 383, 3, 2, 2, 2, 78, 385, 3, 2, 2, 2, 80, 387, 3, 2, 2, 2, 82, 402, 3, 2, 2, 2, 84, 410, 3, 2, 2, 2, 86, 418, 3, 2, 2, 2, 88, 420, 3, 2, 2, 2, 90, 426, 3, 2, 2, 2, 92, 430, 3, 2, 2, 2, 94, 443, 3, 2, 2, 2, 96, 456, 3, 2, 2, 2, 98, 469, 3, 2, 2, 2, 100, 482, 3, 2, 2, 2, 102, 486, 3, 2, 2, 2, 104, 500, 3, 2, 2, 2, 106, 504, 3, 2, 2, 2, 108, 506, 3, 2, 2, 2, 110, 509, 3, 2, 2, 2, 112, 114, 5, 4, 3, 2, 113, 112, 3, 2, 2, 2, 114, 117, 3, 2, 2, 2, 115, 113, 3, 2, 2, 2, 115, 116, 3, 2, 2, 2, 116, 118, 3, 2, 2, 2, 117, 115, 3, 2, 2, 2, 118, 119, 7, 2, 2, 3, 119, 3, 3, 2, 2, 2, 120, 143, 5, 6, 4, 2, 121, 143, 5, 8, 5, 2, 122, 143, 5, 10, 6, 2, 123, 143, 5, 12, 7, 2, 124, 143, 5, 28, 15, 2, 125, 143, 5, 34, 18, 2, 126, 143, 5, 36, 19, 2, 127, 143, 5, 38, 20, 2, 128, 143, 5, 40, 21, 2, 129, 143, 5, 42, 22, 2, 130, 143, 5, 44, 23, 2, 131, 143, 5, 46, 24, 2, 132, 143, 5, 52, 27, 2, 133, 143, 5, 54, 28, 2, 134, 143, 5, 56, 29, 2, 135, 143, 5, 64, 33, 2, 136, 143, 5, 70, 36, 2, 137, 143, 5, 72, 37, 2, 138, 143, 5, 74, 38, 2, 139, 143, 5, 76, 39, 2, 140, 143, 5, 78, 40, 2, 141, 143, 5, 80, 41, 2, 142, 120, 3, 2, 2, 2, 142, 121, 3, 2, 2, 2, 142, 122, 3, 2, 2, 2, 142, 123, 3, 2, 2, 2, 142, 124, 3, 2, 2, 2, 142, 125, 3, 2, 2, 2, 142, 126, 3, 2, 2, 2, 142, 127, 3, 2, 2, 2, 142, 128, 3, 2, 2, 2, 142, 129, 3, 2, 2, 2, 142, 130, 3, 2, 2, 2, 142, 131, 3, 2, 2, 2, 142, 132, 3, 2, 2, 2, 142, 133, 3, 2, 2, 2, 142, 134, 3, 2, 2, 2, 142, 135, 3, 2, 2, 2, 142, 136, 3, 2, 2, 2, 142, 137, 3, 2, 2, 2, 142, 138, 3, 2, 2, 2, 142, 139, 3, 2, 2, 2, 142, 140, 3, 2, 2, 2, 142, 141, 3, 2, 2, 2, 143, 5, 3, 2, 2, 2, 144, 145, 7, 3, 2, 2, 145, 146, 7, 35, 2, 2, 146, 147, 5, 94, 48, 2, 147, 7, 3, 2, 2, 2, 148, 149, 7, 3, 2, 2, 149, 150, 9, 2, 2, 2, 150, 151, 5, 94, 48, 2, 151, 152, 7, 56, 2, 2, 152, 153, 5, 94, 48, 2, 153, 9, 3, 2, 2, 2, 154, 155, 7, 3, 2, 2, 155, 156, 9, 3, 2, 2, 156, 157, 5, 94, 48, 2, 157, 158, 7, 56, 2, 2, 158, 159, 5, 94, 48, 2, 159, 11, 3, 2, 2, 2, 160, 161, 7, 3, 2, 2, 161, 162, 7, 33, 2, 2, 162, 163, 5, 94, 48, 2, 163, 167, 7, 69, 2, 2, 164, 166, 5, 14, 8, 2, 165, 164, 3, 2, 2, 2, 166, 169, 3, 2, 2, 2, 167, 165, 3, 2, 2, 2, 167, 168, 3, 2, 2, 2, 168, 170, 3, 2, 2, 2, 169, 167, 3, 2, 2, 2, 170, 171, 7, 70, 2, 2, 171, 13, 3, 2, 2, 2, 172, 173, 7, 3, 2, 2, 173, 174, 7, 8, 2, 2, 174, 175, 5, 94, 48, 2, 175, 176, 7, 9, 2, 2, 176, 177, 5, 16, 9, 2, 177, 178, 7, 10, 2, 2, 178, 181, 5, 94, 48, 2, 179, 180, 7, 12, 2, 2, 180, 182, 5, 18, 10, 2, 181, 179, 3, 2, 2, 2, 181, 182, 3, 2, 2, 2, 182, 183, 3, 2, 2, 2, 183, 184, 5, 22, 12, 2, 184, 15, 3, 2, 2, 2, 185, 195, 7, 14, 2, 2, 186, 187, 7, 39, 2, 2, 187, 195, 5, 94, 48, 2, 188, 189, 7, 15, 2, 2, 189, 195, 5, 94, 48, 2, 190, 191, 7, 16, 2, 2, 191, 195, 5, 94, 48, 2, 192, 193, 7, 17, 2, 2, 193, 195, 5, 94, 48, 2, 194, 185, 3, 2, 2, 2, 194, 186, 3, 2, 2, 2, 194, 188, 3, 2, 2, 2, 194, 190, 3, 2, 2, 2, 194, 192, 3, 2, 2, 2, 195, 17, 3, 2, 2, 2, 196, 207, 5, 94, 48, 2, 197, 207, 5, 20, 11, 2, 198, 199, 5, 20, 11, 2, 199, 200, 7, 56, 2, 2, 200, 201, 5, 94, 48, 2, 201, 207, 3, 2, 2, 2, 202, 203, 5, 20, 11, 2, 203, 204, 7, 25, 2, 2, 204, 205, 5, 94, 48, 2, 205, 207, 3, 2, 2, 2, 206, 196, 3, 2, 2, 2, 206, 197, 3, 2, 2, 2, 206, 198, 3, 2, 2, 2, 206, 202, 3, 2, 2, 2, 207, 19, 3, 2, 2, 2, 208, 209, 7, 41, 2, 2, 209, 210, 7, 7, 2, 2, 210, 21, 3, 2, 2, 2, 211, 212, 7, 13, 2, 2, 212, 213, 7, 75, 2, 2, 213, 214, 7, 61, 2, 2, 214, 215, 7, 76, 2, 2, 215, 216, 5, 24, 13, 2, 216, 23, 3, 2, 2, 2, 217, 221, 7, 69, 2, 2, 218, 220, 5, 26, 14, 2, 219, 218, 3, 2, 2, 2, 220, 223, 3, 2, 2, 2, 221, 219, 3, 2, 2, 2, 221, 222, 3, 2, 2, 2, 222, 224, 3, 2, 2, 2, 223, 221, 3, 2, 2, 2, 224, 225, 7, 70, 2, 2, 225, 25, 3, 2, 2, 2, 226, 230, 5, 4, 3, 2, 227, 230, 5, 14, 8, 2, 228, 230, 5, 52, 27, 2, 229, 226, 3, 2, 2, 2, 229, 227, 3, 2, 2, 2, 229, 228, 3, 2, 2, 2, 230, 27, 3, 2, 2, 2, 231, 232, 7, 3, 2, 2, 232, 233, 7, 32, 2, 2, 233, 234, 5, 94, 48, 2, 234, 235, 7, 31, 2, 2, 235, 236, 9, 4, 2, 2, 236, 237, 5, 94, 48, 2, 237, 238, 7, 34, 2, 2, 238, 239, 5, 94, 48, 2, 239, 240, 7, 12, 2, 2, 240, 241, 9, 5, 2, 2, 241, 242, 7, 25, 2, 2, 242, 243, 5, 30, 16, 2, 243, 29, 3, 2, 2, 2, 244, 253, 7, 71, 2, 2, 245, 250, 5, 32, 17, 2, 246, 247, 7, 67, 2, 2, 247, 249, 5, 32, 17, 2, 248, 246, 3, 2, 2, 2, 249, 252, 3, 2, 2, 2, 250, 248, 3, 2, 2, 2, 250, 251, 3, 2, 2, 2, 251, 254, 3, 2, 2, 2, 252, 250, 3, 2, 2, 2, 253, 245, 3, 2, 2, 2, 253, 254, 3, 2, 2, 2, 254, 255, 3, 2, 2, 2, 255, 256, 7, 72, 2, 2, 256, 31, 3, 2, 2, 2, 257, 259, 7, 77, 2, 2, 258, 257, 3, 2, 2, 2, 258, 259, 3, 2, 2, 2, 259, 260, 3, 2, 2, 2, 260, 261, 5, 94, 48, 2, 261, 33, 3, 2, 2, 2, 262, 263, 7, 24, 2, 2, 263, 264, 7, 25, 2, 2, 264, 265, 5, 94, 48, 2, 265, 266, 7, 26, 2, 2, 266, 267, 5, 94, 48, 2, 267, 35, 3, 2, 2, 2, 268, 269, 7, 21, 2, 2, 269, 270, 5, 94, 48, 2, 270, 271, 7, 26, 2, 2, 271, 272, 5, 94, 48, 2, 272, 37, 3, 2, 2, 2, 273, 274, 7, 22, 2, 2, 274, 275, 5, 94, 48, 2, 275, 276, 7, 23, 2, 2, 276, 277, 5, 94, 48, 2, 277, 39, 3, 2, 2, 2, 278, 279, 7, 27, 2, 2, 279, 280, 5, 94, 48, 2, 280, 281, 7, 28, 2, 2, 281, 282, 5, 94, 48, 2, 282, 283, 7, 29, 2, 2, 283, 284, 5, 94, 48, 2, 284, 41, 3, 2, 2, 2, 285, 286, 7, 30, 2, 2, 286, 287, 5, 94, 48, 2, 287, 288, 7, 28, 2, 2, 288, 289, 5, 94, 48, 2, 289, 43, 3, 2, 2, 2, 290, 291, 7, 20, 2, 2, 291, 292, 5, 94, 48, 2, 292, 45, 3, 2, 2, 2, 293, 294, 7, 4, 2, 2, 294, 295, 5, 48, 25, 2, 295, 296, 5, 94, 48, 2, 296, 47, 3, 2, 2, 2, 297, 301, 5, 50, 26, 2, 298, 301, 7, 33, 2, 2, 299, 301, 7, 32, 2, 2, 300, 297, 3, 2, 2, 2, 300, 298, 3, 2, 2, 2, 300, 299, 3, 2, 2, 2, 301, 49, 3, 2, 2, 2, 302, 303, 9, 6, 2, 2, 303, 51, 3, 2, 2, 2, 304, 305, 7, 4, 2, 2, 305, 306, 7, 8, 2, 2, 306, 307, 5, 94, 48, 2, 307, 308, 7, 23, 2, 2, 308, 309, 7, 33, 2, 2, 309, 310, 5, 94, 48, 2, 310, 53, 3, 2, 2, 2, 311, 313, 9, 7, 2, 2, 312, 311, 3, 2, 2, 2, 312, 313, 3, 2, 2, 2, 313, 314, 3, 2, 2, 2, 314, 315, 7, 61, 2, 2, 315, 316, 7, 78, 2, 2, 316, 317, 5, 94, 48, 2, 317, 55, 3, 2, 2, 2, 318, 319, 7, 44, 2, 2, 319, 320, 7, 61, 2, 2, 320, 321, 7, 75, 2, 2, 321, 322, 5, 58, 30, 2, 322, 324, 7, 76, 2, 2, 323, 325, 5, 66, 34, 2, 324, 323, 3, 2, 2, 2, 324, 325, 3, 2, 2, 2, 325, 326, 3, 2, 2, 2, 326, 327, 5, 68, 35, 2, 327, 57, 3, 2, 2, 2, 328, 333, 5, 60, 31, 2, 329, 330, 7, 67, 2, 2, 330, 332, 5, 60, 31, 2, 331, 329, 3, 2, 2, 2, 332, 335, 3, 2, 2, 2, 333, 331, 3, 2, 2, 2, 333, 334, 3, 2, 2, 2, 334, 337, 3, 2, 2, 2, 335, 333, 3, 2, 2, 2, 336, 328, 3, 2, 2, 2, 336, 337, 3, 2, 2, 2, 337, 59, 3, 2, 2, 2, 338, 339, 5, 62, 32, 2, 339, 340, 7, 61, 2, 2, 340, 61, 3, 2, 2, 2, 341, 342, 5, 86, 44, 2, 342, 63, 3, 2, 2, 2, 343, 344, 7, 45, 2, 2, 344, 347, 5, 94, 48, 2, 345, 347, 7, 45, 2, 2, 346, 343, 3, 2, 2, 2, 346, 345, 3, 2, 2, 2, 347, 65, 3, 2, 2, 2, 348, 351, 5, 86, 44, 2, 349, 351, 7, 51, 2, 2, 350, 348, 3, 2, 2, 2, 350, 349, 3, 2, 2, 2, 351, 67, 3, 2, 2, 2, 352, 356, 7, 69, 2, 2, 353, 355, 5, 4, 3, 2, 354, 353, 3, 2, 2, 2, 355, 358, 3, 2, 2, 2, 356, 354, 3, 2, 2, 2, 356, 357, 3, 2, 2, 2, 357, 359, 3, 2, 2, 2, 358, 356, 3, 2, 2, 2, 359, 360, 7, 70, 2, 2, 360, 69, 3, 2, 2, 2, 361, 362, 7, 54, 2, 2, 362, 365, 7, 61, 2, 2, 363, 364, 7, 67, 2, 2, 364, 366, 7, 61, 2, 2, 365, 363, 3, 2, 2, 2, 365, 366, 3, 2, 2, 2, 366, 367, 3, 2, 2, 2, 367, 368, 7, 56, 2, 2, 368, 369, 5, 94, 48, 2, 369, 370, 5, 92, 47, 2, 370, 71, 3, 2, 2, 2, 371, 372, 7, 55, 2, 2, 372, 373, 7, 61, 2, 2, 373, 374, 7, 59, 2, 2, 374, 375, 9, 8, 2, 2, 375, 376, 5, 94, 48, 2, 376, 377, 7, 67, 2, 2, 377, 378, 5, 94, 48, 2, 378, 379, 9, 9, 2, 2, 379, 380, 5, 92, 47, 2, 380, 73, 3, 2, 2, 2, 381, 382, 7, 5, 2, 2, 382, 75, 3, 2, 2, 2, 383, 384, 7, 6, 2, 2, 384, 77, 3, 2, 2, 2, 385, 386, 5, 108, 55, 2, 386, 79, 3, 2, 2, 2, 387, 389, 7, 57, 2, 2, 388, 390, 7, 77, 2, 2, 389, 388, 3, 2, 2, 2, 389, 390, 3, 2, 2, 2, 390, 391, 3, 2, 2, 2, 391, 392, 5, 94, 48, 2, 392, 396, 5, 92, 47, 2, 393, 395, 5, 82, 42, 2, 394, 393, 3, 2, 2, 2, 395, 398, 3, 2, 2, 2, 396, 394, 3, 2, 2, 2, 396, 397, 3, 2, 2, 2, 397, 400, 3, 2, 2, 2, 398, 396, 3, 2, 2, 2, 399, 401, 5, 84, 43, 2, 400, 399, 3, 2, 2, 2, 400, 401, 3, 2, 2, 2, 401, 81, 3, 2, 2, 2, 402, 403, 7, 58, 2, 2, 403, 405, 7, 57, 2, 2, 404, 406, 7, 77, 2, 2, 405, 404, 3, 2, 2, 2, 405, 406, 3, 2, 2, 2, 406, 407, 3, 2, 2, 2, 407, 408, 5, 94, 48, 2, 408, 409, 5, 92, 47, 2, 409, 83, 3, 2, 2, 2, 410, 411, 7, 58, 2, 2, 411, 412, 5, 92, 47, 2, 412, 85, 3, 2, 2, 2, 413, 419, 7, 49, 2, 2, 414, 419, 7, 50, 2, 2, 415, 419, 5, 90, 46, 2, 416, 419, 5, 88, 45, 2, 417, 419, 7, 41, 2, 2, 418, 413, 3, 2, 2, 2, 418, 414, 3, 2, 2, 2, 418, 415, 3, 2, 2, 2, 418, 416, 3, 2, 2, 2, 418, 417, 3, 2, 2, 2, 419, 87, 3, 2, 2, 2, 420, 421, 7, 53, 2, 2, 421, 422, 7, 71, 2, 2, 422, 423, 5, 86, 44, 2, 423, 424, 7, 72, 2, 2, 424, 425, 5, 86, 44, 2, 425, 89, 3, 2, 2, 2, 426, 427, 7, 71, 2, 2, 427, 428, 7, 72, 2, 2, 428, 429, 5, 86, 44, 2, 429, 91, 3, 2, 2, 2, 430, 434, 7, 69, 2, 2, 431, 433, 5, 4, 3, 2, 432, 431, 3, 2, 2, 2, 433, 436, 3, 2, 2, 2, 434, 432, 3, 2, 2, 2, 434, 435, 3, 2, 2, 2, 435, 437, 3, 2, 2, 2, 436, 434, 3, 2, 2, 2, 437, 438, 7, 70, 2, 2, 438, 93, 3, 2, 2, 2, 439, 440, 8, 48, 1, 2, 440, 444, 5, 106, 54, 2, 441, 444, 5, 108, 55, 2, 442, 444, 5, 104, 53, 2, 443, 439, 3, 2, 2, 2, 443, 441, 3, 2, 2, 2, 443, 442, 3, 2, 2, 2, 444, 453, 3, 2, 2, 2, 445, 446, 12, 4, 2, 2, 446, 447, 9, 10, 2, 2, 447, 452, 5, 94, 48, 5, 448, 449, 12, 3, 2, 2, 449, 450, 9, 11, 2, 2, 450, 452, 5, 94, 48, 4, 451, 445, 3, 2, 2, 2, 451, 448, 3, 2, 2, 2, 452, 455, 3, 2, 2, 2, 453, 451, 3, 2, 2, 2, 453, 454, 3, 2, 2, 2, 454, 95, 3, 2, 2, 2, 455, 453, 3, 2, 2, 2, 456, 465, 7, 71, 2, 2, 457, 462, 5, 94, 48, 2, 458, 459, 7, 67, 2, 2, 459, 461, 5, 94, 48, 2, 460, 458, 3, 2, 2, 2, 461, 464, 3, 2, 2, 2, 462, 460, 3, 2, 2, 2, 462, 463, 3, 2, 2, 2, 463, 466, 3, 2, 2, 2, 464, 462, 3, 2, 2, 2, 465, 457, 3, 2, 2, 2, 465, 466, 3, 2, 2, 2, 466, 467, 3, 2, 2, 2, 467, 468, 7, 72, 2, 2, 468, 97, 3, 2, 2, 2, 469, 478, 7, 69, 2, 2, 470, 475, 5, 100, 51, 2, 471, 472, 7, 67, 2, 2, 472, 474, 5, 100, 51, 2, 473, 471, 3, 2, 2, 2, 474, 477, 3, 2, 2, 2, 475, 473, 3, 2, 2, 2, 475, 476, 3, 2, 2, 2, 476, 479, 3, 2, 2, 2, 477, 475, 3, 2, 2, 2, 478, 470, 3, 2, 2, 2, 478, 479, 3, 2, 2, 2, 479, 480, 3, 2, 2, 2, 480, 481, 7, 70, 2, 2, 481, 99, 3, 2, 2, 2, 482, 483, 5, 94, 48, 2, 483, 484, 7, 68, 2, 2, 484, 485, 5, 94, 48, 2, 485, 101, 3, 2, 2, 2, 486, 491, 7, 61, 2, 2, 487, 488, 7, 71, 2, 2, 488, 489, 5, 94, 48, 2, 489, 490, 7, 72, 2, 2, 490, 492, 3, 2, 2, 2, 491, 487, 3, 2, 2, 2, 492, 493, 3, 2, 2, 2, 493, 491, 3, 2, 2, 2, 493, 494, 3, 2, 2, 2, 494, 103, 3, 2, 2, 2, 495, 501, 7, 62, 2, 2, 496, 501, 7, 46, 2, 2, 497, 501, 7, 60, 2, 2, 498, 501, 5, 96, 49, 2, 499, 501, 5, 98, 50, 2, 500, 495, 3, 2, 2, 2, 500, 496, 3, 2, 2, 2, 500, 497, 3, 2, 2, 2, 500, 498, 3, 2, 2, 2, 500, 499, 3, 2, 2, 2, 501, 105, 3, 2, 2, 2, 502, 505, 7, 61, 2, 2, 503, 505, 5, 102, 52, 2, 504, 502, 3, 2, 2, 2, 504, 503, 3, 2, 2, 2, 505, 107, 3, 2, 2, 2, 506, 507, 7, 61, 2, 2, 507, 508, 5, 110, 56, 2, 508, 109, 3, 2, 2, 2, 509, 518, 7, 75, 2, 2, 510, 515, 5, 94, 48, 2, 511, 512, 7, 67, 2, 2, 512, 514, 5, 94, 48, 2, 513, 511, 3, 2, 2, 2, 514, 517, 3, 2, 2, 2, 515, 513, 3, 2, 2, 2, 515, 516, 3, 2, 2, 2, 516, 519, 3, 2, 2, 2, 517, 515, 3, 2, 2, 2, 518, 510, 3, 2, 2, 2, 518, 519, 3, 2, 2, 2, 519, 520, 3, 2, 2, 2, 520, 521, 7, 76, 2, 2, 521, 111, 3, 2, 2, 2, 40, 115, 142, 167, 181, 194, 206, 221, 229, 250, 253, 258, 300, 312, 324, 333, 336, 346, 350, 356, 365, 389, 396, 400, 405, 418, 434, 443, 451, 453, 462, 465, 475, 478, 493, 500, 504, 515, 518] \ No newline at end of file diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/antlr/PML.tokens b/src/main/java/gov/nist/csd/pm/policy/pml/antlr/PML.tokens deleted file mode 100644 index 5d93e50e8..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/antlr/PML.tokens +++ /dev/null @@ -1,96 +0,0 @@ -CREATE=1 -DELETE=2 -BREAK=3 -CONTINUE=4 -POLICY_ELEMENT=5 -RULE=6 -WHEN=7 -PERFORMS=8 -AS=9 -ON=10 -DO=11 -ANY_USER=12 -USERS=13 -ANY_USER_WITH_ATTRIBUTE=14 -PROCESS=15 -INTERSECTION=16 -UNION=17 -SET_RESOURCE_ACCESS_RIGHTS=18 -ASSIGN=19 -DEASSIGN=20 -FROM=21 -SET_PROPERTIES=22 -OF=23 -TO=24 -ASSOCIATE=25 -AND=26 -WITH=27 -DISSOCIATE=28 -DENY=29 -PROHIBITION=30 -OBLIGATION=31 -ACCESS_RIGHTS=32 -POLICY_CLASS=33 -OBJECT_ATTRIBUTE=34 -USER_ATTRIBUTE=35 -OBJECT=36 -USER=37 -ATTR=38 -ANY=39 -LET=40 -CONST=41 -FUNCTION=42 -RETURN=43 -BOOLEAN=44 -TRUE=45 -FALSE=46 -STRING_TYPE=47 -BOOLEAN_TYPE=48 -VOID_TYPE=49 -ARRAY_TYPE=50 -MAP_TYPE=51 -FOREACH=52 -FOR=53 -IN=54 -IF=55 -ELSE=56 -IN_RANGE=57 -NUMBER=58 -ID=59 -STRING=60 -DOUBLE_QUOTE_STRING=61 -SINGLE_QUOTE_STRING=62 -LINE_COMMENT=63 -WS=64 -COMMA=65 -COLON=66 -OPEN_CURLY=67 -CLOSE_CURLY=68 -OPEN_BRACKET=69 -CLOSE_BRACKET=70 -OPEN_ANGLE_BRACKET=71 -CLOSE_ANGLE_BRACKET=72 -OPEN_PAREN=73 -CLOSE_PAREN=74 -IS_COMPLEMENT=75 -EQUALS=76 -AND_OP=77 -OR_OP=78 -EQUALS_OP=79 -NOT_EQUALS_OP=80 -','=65 -':'=66 -'{'=67 -'}'=68 -'['=69 -']'=70 -'<'=71 -'>'=72 -'('=73 -')'=74 -'!'=75 -'='=76 -'&&'=77 -'||'=78 -'=='=79 -'!='=80 diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/antlr/PMLLexer.interp b/src/main/java/gov/nist/csd/pm/policy/pml/antlr/PMLLexer.interp deleted file mode 100644 index 6118c2801..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/antlr/PMLLexer.interp +++ /dev/null @@ -1,257 +0,0 @@ -token literal names: -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -',' -':' -'{' -'}' -'[' -']' -'<' -'>' -'(' -')' -'!' -'=' -'&&' -'||' -'==' -'!=' - -token symbolic names: -null -CREATE -DELETE -BREAK -CONTINUE -POLICY_ELEMENT -RULE -WHEN -PERFORMS -AS -ON -DO -ANY_USER -USERS -ANY_USER_WITH_ATTRIBUTE -PROCESS -INTERSECTION -UNION -SET_RESOURCE_ACCESS_RIGHTS -ASSIGN -DEASSIGN -FROM -SET_PROPERTIES -OF -TO -ASSOCIATE -AND -WITH -DISSOCIATE -DENY -PROHIBITION -OBLIGATION -ACCESS_RIGHTS -POLICY_CLASS -OBJECT_ATTRIBUTE -USER_ATTRIBUTE -OBJECT -USER -ATTR -ANY -LET -CONST -FUNCTION -RETURN -BOOLEAN -TRUE -FALSE -STRING_TYPE -BOOLEAN_TYPE -VOID_TYPE -ARRAY_TYPE -MAP_TYPE -FOREACH -FOR -IN -IF -ELSE -IN_RANGE -NUMBER -ID -STRING -DOUBLE_QUOTE_STRING -SINGLE_QUOTE_STRING -LINE_COMMENT -WS -COMMA -COLON -OPEN_CURLY -CLOSE_CURLY -OPEN_BRACKET -CLOSE_BRACKET -OPEN_ANGLE_BRACKET -CLOSE_ANGLE_BRACKET -OPEN_PAREN -CLOSE_PAREN -IS_COMPLEMENT -EQUALS -AND_OP -OR_OP -EQUALS_OP -NOT_EQUALS_OP - -rule names: -CREATE -DELETE -BREAK -CONTINUE -POLICY_ELEMENT -RULE -WHEN -PERFORMS -AS -ON -DO -ANY_USER -USERS -ANY_USER_WITH_ATTRIBUTE -PROCESS -INTERSECTION -UNION -SET_RESOURCE_ACCESS_RIGHTS -ASSIGN -DEASSIGN -FROM -SET_PROPERTIES -OF -TO -ASSOCIATE -AND -WITH -DISSOCIATE -DENY -PROHIBITION -OBLIGATION -ACCESS_RIGHTS -POLICY_CLASS -OBJECT_ATTRIBUTE -USER_ATTRIBUTE -OBJECT -USER -ATTR -ANY -LET -CONST -FUNCTION -RETURN -BOOLEAN -TRUE -FALSE -STRING_TYPE -BOOLEAN_TYPE -VOID_TYPE -ARRAY_TYPE -MAP_TYPE -FOREACH -FOR -IN -IF -ELSE -IN_RANGE -NUMBER -ID -STRING -DOUBLE_QUOTE_STRING -SINGLE_QUOTE_STRING -LINE_COMMENT -WS -COMMA -COLON -OPEN_CURLY -CLOSE_CURLY -OPEN_BRACKET -CLOSE_BRACKET -OPEN_ANGLE_BRACKET -CLOSE_ANGLE_BRACKET -OPEN_PAREN -CLOSE_PAREN -IS_COMPLEMENT -EQUALS -AND_OP -OR_OP -EQUALS_OP -NOT_EQUALS_OP - -channel names: -DEFAULT_TOKEN_CHANNEL -HIDDEN - -mode names: -DEFAULT_MODE - -atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 82, 662, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 422, 10, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 5, 35, 430, 10, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 5, 36, 438, 10, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 5, 37, 447, 10, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 5, 38, 454, 10, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 5, 45, 498, 10, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 6, 59, 574, 10, 59, 13, 59, 14, 59, 575, 3, 60, 6, 60, 579, 10, 60, 13, 60, 14, 60, 580, 3, 61, 3, 61, 5, 61, 585, 10, 61, 3, 62, 3, 62, 3, 62, 3, 62, 7, 62, 591, 10, 62, 12, 62, 14, 62, 594, 11, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 63, 7, 63, 602, 10, 63, 12, 63, 14, 63, 605, 11, 63, 3, 63, 3, 63, 3, 64, 3, 64, 7, 64, 611, 10, 64, 12, 64, 14, 64, 614, 11, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 65, 6, 65, 621, 10, 65, 13, 65, 14, 65, 622, 3, 65, 3, 65, 3, 66, 3, 66, 3, 67, 3, 67, 3, 68, 3, 68, 3, 69, 3, 69, 3, 70, 3, 70, 3, 71, 3, 71, 3, 72, 3, 72, 3, 73, 3, 73, 3, 74, 3, 74, 3, 75, 3, 75, 3, 76, 3, 76, 3, 77, 3, 77, 3, 78, 3, 78, 3, 78, 3, 79, 3, 79, 3, 79, 3, 80, 3, 80, 3, 80, 3, 81, 3, 81, 3, 81, 4, 592, 603, 2, 82, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 69, 137, 70, 139, 71, 141, 72, 143, 73, 145, 74, 147, 75, 149, 76, 151, 77, 153, 78, 155, 79, 157, 80, 159, 81, 161, 82, 3, 2, 31, 3, 2, 101, 101, 3, 2, 116, 116, 3, 2, 103, 103, 3, 2, 99, 99, 3, 2, 118, 118, 3, 2, 102, 102, 3, 2, 110, 110, 3, 2, 100, 100, 3, 2, 109, 109, 3, 2, 113, 113, 3, 2, 112, 112, 3, 2, 107, 107, 3, 2, 119, 119, 3, 2, 114, 114, 3, 2, 123, 123, 3, 2, 34, 34, 3, 2, 111, 111, 3, 2, 121, 121, 3, 2, 106, 106, 3, 2, 104, 104, 3, 2, 117, 117, 3, 2, 105, 105, 3, 2, 108, 108, 3, 2, 120, 120, 3, 2, 50, 59, 6, 2, 50, 59, 67, 92, 97, 97, 99, 124, 4, 2, 12, 12, 15, 15, 3, 2, 12, 12, 5, 2, 11, 12, 15, 15, 34, 34, 2, 676, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 145, 3, 2, 2, 2, 2, 147, 3, 2, 2, 2, 2, 149, 3, 2, 2, 2, 2, 151, 3, 2, 2, 2, 2, 153, 3, 2, 2, 2, 2, 155, 3, 2, 2, 2, 2, 157, 3, 2, 2, 2, 2, 159, 3, 2, 2, 2, 2, 161, 3, 2, 2, 2, 3, 163, 3, 2, 2, 2, 5, 170, 3, 2, 2, 2, 7, 177, 3, 2, 2, 2, 9, 183, 3, 2, 2, 2, 11, 192, 3, 2, 2, 2, 13, 207, 3, 2, 2, 2, 15, 212, 3, 2, 2, 2, 17, 217, 3, 2, 2, 2, 19, 226, 3, 2, 2, 2, 21, 229, 3, 2, 2, 2, 23, 232, 3, 2, 2, 2, 25, 235, 3, 2, 2, 2, 27, 239, 3, 2, 2, 2, 29, 242, 3, 2, 2, 2, 31, 251, 3, 2, 2, 2, 33, 259, 3, 2, 2, 2, 35, 272, 3, 2, 2, 2, 37, 278, 3, 2, 2, 2, 39, 293, 3, 2, 2, 2, 41, 300, 3, 2, 2, 2, 43, 309, 3, 2, 2, 2, 45, 314, 3, 2, 2, 2, 47, 329, 3, 2, 2, 2, 49, 332, 3, 2, 2, 2, 51, 335, 3, 2, 2, 2, 53, 345, 3, 2, 2, 2, 55, 349, 3, 2, 2, 2, 57, 354, 3, 2, 2, 2, 59, 365, 3, 2, 2, 2, 61, 370, 3, 2, 2, 2, 63, 382, 3, 2, 2, 2, 65, 393, 3, 2, 2, 2, 67, 421, 3, 2, 2, 2, 69, 429, 3, 2, 2, 2, 71, 437, 3, 2, 2, 2, 73, 446, 3, 2, 2, 2, 75, 453, 3, 2, 2, 2, 77, 455, 3, 2, 2, 2, 79, 465, 3, 2, 2, 2, 81, 469, 3, 2, 2, 2, 83, 473, 3, 2, 2, 2, 85, 479, 3, 2, 2, 2, 87, 488, 3, 2, 2, 2, 89, 497, 3, 2, 2, 2, 91, 499, 3, 2, 2, 2, 93, 504, 3, 2, 2, 2, 95, 510, 3, 2, 2, 2, 97, 517, 3, 2, 2, 2, 99, 525, 3, 2, 2, 2, 101, 530, 3, 2, 2, 2, 103, 536, 3, 2, 2, 2, 105, 540, 3, 2, 2, 2, 107, 548, 3, 2, 2, 2, 109, 552, 3, 2, 2, 2, 111, 555, 3, 2, 2, 2, 113, 558, 3, 2, 2, 2, 115, 563, 3, 2, 2, 2, 117, 573, 3, 2, 2, 2, 119, 578, 3, 2, 2, 2, 121, 584, 3, 2, 2, 2, 123, 586, 3, 2, 2, 2, 125, 597, 3, 2, 2, 2, 127, 608, 3, 2, 2, 2, 129, 620, 3, 2, 2, 2, 131, 626, 3, 2, 2, 2, 133, 628, 3, 2, 2, 2, 135, 630, 3, 2, 2, 2, 137, 632, 3, 2, 2, 2, 139, 634, 3, 2, 2, 2, 141, 636, 3, 2, 2, 2, 143, 638, 3, 2, 2, 2, 145, 640, 3, 2, 2, 2, 147, 642, 3, 2, 2, 2, 149, 644, 3, 2, 2, 2, 151, 646, 3, 2, 2, 2, 153, 648, 3, 2, 2, 2, 155, 650, 3, 2, 2, 2, 157, 653, 3, 2, 2, 2, 159, 656, 3, 2, 2, 2, 161, 659, 3, 2, 2, 2, 163, 164, 9, 2, 2, 2, 164, 165, 9, 3, 2, 2, 165, 166, 9, 4, 2, 2, 166, 167, 9, 5, 2, 2, 167, 168, 9, 6, 2, 2, 168, 169, 9, 4, 2, 2, 169, 4, 3, 2, 2, 2, 170, 171, 9, 7, 2, 2, 171, 172, 9, 4, 2, 2, 172, 173, 9, 8, 2, 2, 173, 174, 9, 4, 2, 2, 174, 175, 9, 6, 2, 2, 175, 176, 9, 4, 2, 2, 176, 6, 3, 2, 2, 2, 177, 178, 9, 9, 2, 2, 178, 179, 9, 3, 2, 2, 179, 180, 9, 4, 2, 2, 180, 181, 9, 5, 2, 2, 181, 182, 9, 10, 2, 2, 182, 8, 3, 2, 2, 2, 183, 184, 9, 2, 2, 2, 184, 185, 9, 11, 2, 2, 185, 186, 9, 12, 2, 2, 186, 187, 9, 6, 2, 2, 187, 188, 9, 13, 2, 2, 188, 189, 9, 12, 2, 2, 189, 190, 9, 14, 2, 2, 190, 191, 9, 4, 2, 2, 191, 10, 3, 2, 2, 2, 192, 193, 9, 15, 2, 2, 193, 194, 9, 11, 2, 2, 194, 195, 9, 8, 2, 2, 195, 196, 9, 13, 2, 2, 196, 197, 9, 2, 2, 2, 197, 198, 9, 16, 2, 2, 198, 199, 9, 17, 2, 2, 199, 200, 9, 4, 2, 2, 200, 201, 9, 8, 2, 2, 201, 202, 9, 4, 2, 2, 202, 203, 9, 18, 2, 2, 203, 204, 9, 4, 2, 2, 204, 205, 9, 12, 2, 2, 205, 206, 9, 6, 2, 2, 206, 12, 3, 2, 2, 2, 207, 208, 9, 3, 2, 2, 208, 209, 9, 14, 2, 2, 209, 210, 9, 8, 2, 2, 210, 211, 9, 4, 2, 2, 211, 14, 3, 2, 2, 2, 212, 213, 9, 19, 2, 2, 213, 214, 9, 20, 2, 2, 214, 215, 9, 4, 2, 2, 215, 216, 9, 12, 2, 2, 216, 16, 3, 2, 2, 2, 217, 218, 9, 15, 2, 2, 218, 219, 9, 4, 2, 2, 219, 220, 9, 3, 2, 2, 220, 221, 9, 21, 2, 2, 221, 222, 9, 11, 2, 2, 222, 223, 9, 3, 2, 2, 223, 224, 9, 18, 2, 2, 224, 225, 9, 22, 2, 2, 225, 18, 3, 2, 2, 2, 226, 227, 9, 5, 2, 2, 227, 228, 9, 22, 2, 2, 228, 20, 3, 2, 2, 2, 229, 230, 9, 11, 2, 2, 230, 231, 9, 12, 2, 2, 231, 22, 3, 2, 2, 2, 232, 233, 9, 7, 2, 2, 233, 234, 9, 11, 2, 2, 234, 24, 3, 2, 2, 2, 235, 236, 5, 79, 40, 2, 236, 237, 9, 17, 2, 2, 237, 238, 5, 75, 38, 2, 238, 26, 3, 2, 2, 2, 239, 240, 5, 75, 38, 2, 240, 241, 9, 22, 2, 2, 241, 28, 3, 2, 2, 2, 242, 243, 5, 25, 13, 2, 243, 244, 9, 17, 2, 2, 244, 245, 9, 19, 2, 2, 245, 246, 9, 13, 2, 2, 246, 247, 9, 6, 2, 2, 247, 248, 9, 20, 2, 2, 248, 249, 9, 17, 2, 2, 249, 250, 5, 77, 39, 2, 250, 30, 3, 2, 2, 2, 251, 252, 9, 15, 2, 2, 252, 253, 9, 3, 2, 2, 253, 254, 9, 11, 2, 2, 254, 255, 9, 2, 2, 2, 255, 256, 9, 4, 2, 2, 256, 257, 9, 22, 2, 2, 257, 258, 9, 22, 2, 2, 258, 32, 3, 2, 2, 2, 259, 260, 9, 13, 2, 2, 260, 261, 9, 12, 2, 2, 261, 262, 9, 6, 2, 2, 262, 263, 9, 4, 2, 2, 263, 264, 9, 3, 2, 2, 264, 265, 9, 22, 2, 2, 265, 266, 9, 4, 2, 2, 266, 267, 9, 2, 2, 2, 267, 268, 9, 6, 2, 2, 268, 269, 9, 13, 2, 2, 269, 270, 9, 11, 2, 2, 270, 271, 9, 12, 2, 2, 271, 34, 3, 2, 2, 2, 272, 273, 9, 14, 2, 2, 273, 274, 9, 12, 2, 2, 274, 275, 9, 13, 2, 2, 275, 276, 9, 11, 2, 2, 276, 277, 9, 12, 2, 2, 277, 36, 3, 2, 2, 2, 278, 279, 9, 22, 2, 2, 279, 280, 9, 4, 2, 2, 280, 281, 9, 6, 2, 2, 281, 282, 9, 17, 2, 2, 282, 283, 9, 3, 2, 2, 283, 284, 9, 4, 2, 2, 284, 285, 9, 22, 2, 2, 285, 286, 9, 11, 2, 2, 286, 287, 9, 14, 2, 2, 287, 288, 9, 3, 2, 2, 288, 289, 9, 2, 2, 2, 289, 290, 9, 4, 2, 2, 290, 291, 9, 17, 2, 2, 291, 292, 5, 65, 33, 2, 292, 38, 3, 2, 2, 2, 293, 294, 9, 5, 2, 2, 294, 295, 9, 22, 2, 2, 295, 296, 9, 22, 2, 2, 296, 297, 9, 13, 2, 2, 297, 298, 9, 23, 2, 2, 298, 299, 9, 12, 2, 2, 299, 40, 3, 2, 2, 2, 300, 301, 9, 7, 2, 2, 301, 302, 9, 4, 2, 2, 302, 303, 9, 5, 2, 2, 303, 304, 9, 22, 2, 2, 304, 305, 9, 22, 2, 2, 305, 306, 9, 13, 2, 2, 306, 307, 9, 23, 2, 2, 307, 308, 9, 12, 2, 2, 308, 42, 3, 2, 2, 2, 309, 310, 9, 21, 2, 2, 310, 311, 9, 3, 2, 2, 311, 312, 9, 11, 2, 2, 312, 313, 9, 18, 2, 2, 313, 44, 3, 2, 2, 2, 314, 315, 9, 22, 2, 2, 315, 316, 9, 4, 2, 2, 316, 317, 9, 6, 2, 2, 317, 318, 9, 17, 2, 2, 318, 319, 9, 15, 2, 2, 319, 320, 9, 3, 2, 2, 320, 321, 9, 11, 2, 2, 321, 322, 9, 15, 2, 2, 322, 323, 9, 4, 2, 2, 323, 324, 9, 3, 2, 2, 324, 325, 9, 6, 2, 2, 325, 326, 9, 13, 2, 2, 326, 327, 9, 4, 2, 2, 327, 328, 9, 22, 2, 2, 328, 46, 3, 2, 2, 2, 329, 330, 9, 11, 2, 2, 330, 331, 9, 21, 2, 2, 331, 48, 3, 2, 2, 2, 332, 333, 9, 6, 2, 2, 333, 334, 9, 11, 2, 2, 334, 50, 3, 2, 2, 2, 335, 336, 9, 5, 2, 2, 336, 337, 9, 22, 2, 2, 337, 338, 9, 22, 2, 2, 338, 339, 9, 11, 2, 2, 339, 340, 9, 2, 2, 2, 340, 341, 9, 13, 2, 2, 341, 342, 9, 5, 2, 2, 342, 343, 9, 6, 2, 2, 343, 344, 9, 4, 2, 2, 344, 52, 3, 2, 2, 2, 345, 346, 9, 5, 2, 2, 346, 347, 9, 12, 2, 2, 347, 348, 9, 7, 2, 2, 348, 54, 3, 2, 2, 2, 349, 350, 9, 19, 2, 2, 350, 351, 9, 13, 2, 2, 351, 352, 9, 6, 2, 2, 352, 353, 9, 20, 2, 2, 353, 56, 3, 2, 2, 2, 354, 355, 9, 7, 2, 2, 355, 356, 9, 13, 2, 2, 356, 357, 9, 22, 2, 2, 357, 358, 9, 22, 2, 2, 358, 359, 9, 11, 2, 2, 359, 360, 9, 2, 2, 2, 360, 361, 9, 13, 2, 2, 361, 362, 9, 5, 2, 2, 362, 363, 9, 6, 2, 2, 363, 364, 9, 4, 2, 2, 364, 58, 3, 2, 2, 2, 365, 366, 9, 7, 2, 2, 366, 367, 9, 4, 2, 2, 367, 368, 9, 12, 2, 2, 368, 369, 9, 16, 2, 2, 369, 60, 3, 2, 2, 2, 370, 371, 9, 15, 2, 2, 371, 372, 9, 3, 2, 2, 372, 373, 9, 11, 2, 2, 373, 374, 9, 20, 2, 2, 374, 375, 9, 13, 2, 2, 375, 376, 9, 9, 2, 2, 376, 377, 9, 13, 2, 2, 377, 378, 9, 6, 2, 2, 378, 379, 9, 13, 2, 2, 379, 380, 9, 11, 2, 2, 380, 381, 9, 12, 2, 2, 381, 62, 3, 2, 2, 2, 382, 383, 9, 11, 2, 2, 383, 384, 9, 9, 2, 2, 384, 385, 9, 8, 2, 2, 385, 386, 9, 13, 2, 2, 386, 387, 9, 23, 2, 2, 387, 388, 9, 5, 2, 2, 388, 389, 9, 6, 2, 2, 389, 390, 9, 13, 2, 2, 390, 391, 9, 11, 2, 2, 391, 392, 9, 12, 2, 2, 392, 64, 3, 2, 2, 2, 393, 394, 9, 5, 2, 2, 394, 395, 9, 2, 2, 2, 395, 396, 9, 2, 2, 2, 396, 397, 9, 4, 2, 2, 397, 398, 9, 22, 2, 2, 398, 399, 9, 22, 2, 2, 399, 400, 9, 17, 2, 2, 400, 401, 9, 3, 2, 2, 401, 402, 9, 13, 2, 2, 402, 403, 9, 23, 2, 2, 403, 404, 9, 20, 2, 2, 404, 405, 9, 6, 2, 2, 405, 406, 9, 22, 2, 2, 406, 66, 3, 2, 2, 2, 407, 408, 9, 15, 2, 2, 408, 409, 9, 11, 2, 2, 409, 410, 9, 8, 2, 2, 410, 411, 9, 13, 2, 2, 411, 412, 9, 2, 2, 2, 412, 413, 9, 16, 2, 2, 413, 414, 9, 17, 2, 2, 414, 415, 9, 2, 2, 2, 415, 416, 9, 8, 2, 2, 416, 417, 9, 5, 2, 2, 417, 418, 9, 22, 2, 2, 418, 422, 9, 22, 2, 2, 419, 420, 9, 15, 2, 2, 420, 422, 9, 2, 2, 2, 421, 407, 3, 2, 2, 2, 421, 419, 3, 2, 2, 2, 422, 68, 3, 2, 2, 2, 423, 424, 5, 73, 37, 2, 424, 425, 9, 17, 2, 2, 425, 426, 5, 77, 39, 2, 426, 430, 3, 2, 2, 2, 427, 428, 9, 11, 2, 2, 428, 430, 9, 5, 2, 2, 429, 423, 3, 2, 2, 2, 429, 427, 3, 2, 2, 2, 430, 70, 3, 2, 2, 2, 431, 432, 5, 75, 38, 2, 432, 433, 9, 17, 2, 2, 433, 434, 5, 77, 39, 2, 434, 438, 3, 2, 2, 2, 435, 436, 9, 14, 2, 2, 436, 438, 9, 5, 2, 2, 437, 431, 3, 2, 2, 2, 437, 435, 3, 2, 2, 2, 438, 72, 3, 2, 2, 2, 439, 440, 9, 11, 2, 2, 440, 441, 9, 9, 2, 2, 441, 442, 9, 24, 2, 2, 442, 443, 9, 4, 2, 2, 443, 444, 9, 2, 2, 2, 444, 447, 9, 6, 2, 2, 445, 447, 9, 11, 2, 2, 446, 439, 3, 2, 2, 2, 446, 445, 3, 2, 2, 2, 447, 74, 3, 2, 2, 2, 448, 449, 9, 14, 2, 2, 449, 450, 9, 22, 2, 2, 450, 451, 9, 4, 2, 2, 451, 454, 9, 3, 2, 2, 452, 454, 9, 14, 2, 2, 453, 448, 3, 2, 2, 2, 453, 452, 3, 2, 2, 2, 454, 76, 3, 2, 2, 2, 455, 456, 9, 5, 2, 2, 456, 457, 9, 6, 2, 2, 457, 458, 9, 6, 2, 2, 458, 459, 9, 3, 2, 2, 459, 460, 9, 13, 2, 2, 460, 461, 9, 9, 2, 2, 461, 462, 9, 14, 2, 2, 462, 463, 9, 6, 2, 2, 463, 464, 9, 4, 2, 2, 464, 78, 3, 2, 2, 2, 465, 466, 9, 5, 2, 2, 466, 467, 9, 12, 2, 2, 467, 468, 9, 16, 2, 2, 468, 80, 3, 2, 2, 2, 469, 470, 9, 8, 2, 2, 470, 471, 9, 4, 2, 2, 471, 472, 9, 6, 2, 2, 472, 82, 3, 2, 2, 2, 473, 474, 9, 2, 2, 2, 474, 475, 9, 11, 2, 2, 475, 476, 9, 12, 2, 2, 476, 477, 9, 22, 2, 2, 477, 478, 9, 6, 2, 2, 478, 84, 3, 2, 2, 2, 479, 480, 9, 21, 2, 2, 480, 481, 9, 14, 2, 2, 481, 482, 9, 12, 2, 2, 482, 483, 9, 2, 2, 2, 483, 484, 9, 6, 2, 2, 484, 485, 9, 13, 2, 2, 485, 486, 9, 11, 2, 2, 486, 487, 9, 12, 2, 2, 487, 86, 3, 2, 2, 2, 488, 489, 9, 3, 2, 2, 489, 490, 9, 4, 2, 2, 490, 491, 9, 6, 2, 2, 491, 492, 9, 14, 2, 2, 492, 493, 9, 3, 2, 2, 493, 494, 9, 12, 2, 2, 494, 88, 3, 2, 2, 2, 495, 498, 5, 91, 46, 2, 496, 498, 5, 93, 47, 2, 497, 495, 3, 2, 2, 2, 497, 496, 3, 2, 2, 2, 498, 90, 3, 2, 2, 2, 499, 500, 9, 6, 2, 2, 500, 501, 9, 3, 2, 2, 501, 502, 9, 14, 2, 2, 502, 503, 9, 4, 2, 2, 503, 92, 3, 2, 2, 2, 504, 505, 9, 21, 2, 2, 505, 506, 9, 5, 2, 2, 506, 507, 9, 8, 2, 2, 507, 508, 9, 22, 2, 2, 508, 509, 9, 4, 2, 2, 509, 94, 3, 2, 2, 2, 510, 511, 9, 22, 2, 2, 511, 512, 9, 6, 2, 2, 512, 513, 9, 3, 2, 2, 513, 514, 9, 13, 2, 2, 514, 515, 9, 12, 2, 2, 515, 516, 9, 23, 2, 2, 516, 96, 3, 2, 2, 2, 517, 518, 9, 9, 2, 2, 518, 519, 9, 11, 2, 2, 519, 520, 9, 11, 2, 2, 520, 521, 9, 8, 2, 2, 521, 522, 9, 4, 2, 2, 522, 523, 9, 5, 2, 2, 523, 524, 9, 12, 2, 2, 524, 98, 3, 2, 2, 2, 525, 526, 9, 25, 2, 2, 526, 527, 9, 11, 2, 2, 527, 528, 9, 13, 2, 2, 528, 529, 9, 7, 2, 2, 529, 100, 3, 2, 2, 2, 530, 531, 9, 5, 2, 2, 531, 532, 9, 3, 2, 2, 532, 533, 9, 3, 2, 2, 533, 534, 9, 5, 2, 2, 534, 535, 9, 16, 2, 2, 535, 102, 3, 2, 2, 2, 536, 537, 9, 18, 2, 2, 537, 538, 9, 5, 2, 2, 538, 539, 9, 15, 2, 2, 539, 104, 3, 2, 2, 2, 540, 541, 9, 21, 2, 2, 541, 542, 9, 11, 2, 2, 542, 543, 9, 3, 2, 2, 543, 544, 9, 4, 2, 2, 544, 545, 9, 5, 2, 2, 545, 546, 9, 2, 2, 2, 546, 547, 9, 20, 2, 2, 547, 106, 3, 2, 2, 2, 548, 549, 9, 21, 2, 2, 549, 550, 9, 11, 2, 2, 550, 551, 9, 3, 2, 2, 551, 108, 3, 2, 2, 2, 552, 553, 9, 13, 2, 2, 553, 554, 9, 12, 2, 2, 554, 110, 3, 2, 2, 2, 555, 556, 9, 13, 2, 2, 556, 557, 9, 21, 2, 2, 557, 112, 3, 2, 2, 2, 558, 559, 9, 4, 2, 2, 559, 560, 9, 8, 2, 2, 560, 561, 9, 22, 2, 2, 561, 562, 9, 4, 2, 2, 562, 114, 3, 2, 2, 2, 563, 564, 9, 13, 2, 2, 564, 565, 9, 12, 2, 2, 565, 566, 9, 17, 2, 2, 566, 567, 9, 3, 2, 2, 567, 568, 9, 5, 2, 2, 568, 569, 9, 12, 2, 2, 569, 570, 9, 23, 2, 2, 570, 571, 9, 4, 2, 2, 571, 116, 3, 2, 2, 2, 572, 574, 9, 26, 2, 2, 573, 572, 3, 2, 2, 2, 574, 575, 3, 2, 2, 2, 575, 573, 3, 2, 2, 2, 575, 576, 3, 2, 2, 2, 576, 118, 3, 2, 2, 2, 577, 579, 9, 27, 2, 2, 578, 577, 3, 2, 2, 2, 579, 580, 3, 2, 2, 2, 580, 578, 3, 2, 2, 2, 580, 581, 3, 2, 2, 2, 581, 120, 3, 2, 2, 2, 582, 585, 5, 123, 62, 2, 583, 585, 5, 125, 63, 2, 584, 582, 3, 2, 2, 2, 584, 583, 3, 2, 2, 2, 585, 122, 3, 2, 2, 2, 586, 592, 7, 36, 2, 2, 587, 588, 7, 94, 2, 2, 588, 591, 7, 36, 2, 2, 589, 591, 10, 28, 2, 2, 590, 587, 3, 2, 2, 2, 590, 589, 3, 2, 2, 2, 591, 594, 3, 2, 2, 2, 592, 593, 3, 2, 2, 2, 592, 590, 3, 2, 2, 2, 593, 595, 3, 2, 2, 2, 594, 592, 3, 2, 2, 2, 595, 596, 7, 36, 2, 2, 596, 124, 3, 2, 2, 2, 597, 603, 7, 41, 2, 2, 598, 599, 7, 94, 2, 2, 599, 602, 7, 41, 2, 2, 600, 602, 10, 28, 2, 2, 601, 598, 3, 2, 2, 2, 601, 600, 3, 2, 2, 2, 602, 605, 3, 2, 2, 2, 603, 604, 3, 2, 2, 2, 603, 601, 3, 2, 2, 2, 604, 606, 3, 2, 2, 2, 605, 603, 3, 2, 2, 2, 606, 607, 7, 41, 2, 2, 607, 126, 3, 2, 2, 2, 608, 612, 7, 37, 2, 2, 609, 611, 10, 29, 2, 2, 610, 609, 3, 2, 2, 2, 611, 614, 3, 2, 2, 2, 612, 610, 3, 2, 2, 2, 612, 613, 3, 2, 2, 2, 613, 615, 3, 2, 2, 2, 614, 612, 3, 2, 2, 2, 615, 616, 7, 12, 2, 2, 616, 617, 3, 2, 2, 2, 617, 618, 8, 64, 2, 2, 618, 128, 3, 2, 2, 2, 619, 621, 9, 30, 2, 2, 620, 619, 3, 2, 2, 2, 621, 622, 3, 2, 2, 2, 622, 620, 3, 2, 2, 2, 622, 623, 3, 2, 2, 2, 623, 624, 3, 2, 2, 2, 624, 625, 8, 65, 3, 2, 625, 130, 3, 2, 2, 2, 626, 627, 7, 46, 2, 2, 627, 132, 3, 2, 2, 2, 628, 629, 7, 60, 2, 2, 629, 134, 3, 2, 2, 2, 630, 631, 7, 125, 2, 2, 631, 136, 3, 2, 2, 2, 632, 633, 7, 127, 2, 2, 633, 138, 3, 2, 2, 2, 634, 635, 7, 93, 2, 2, 635, 140, 3, 2, 2, 2, 636, 637, 7, 95, 2, 2, 637, 142, 3, 2, 2, 2, 638, 639, 7, 62, 2, 2, 639, 144, 3, 2, 2, 2, 640, 641, 7, 64, 2, 2, 641, 146, 3, 2, 2, 2, 642, 643, 7, 42, 2, 2, 643, 148, 3, 2, 2, 2, 644, 645, 7, 43, 2, 2, 645, 150, 3, 2, 2, 2, 646, 647, 7, 35, 2, 2, 647, 152, 3, 2, 2, 2, 648, 649, 7, 63, 2, 2, 649, 154, 3, 2, 2, 2, 650, 651, 7, 40, 2, 2, 651, 652, 7, 40, 2, 2, 652, 156, 3, 2, 2, 2, 653, 654, 7, 126, 2, 2, 654, 655, 7, 126, 2, 2, 655, 158, 3, 2, 2, 2, 656, 657, 7, 63, 2, 2, 657, 658, 7, 63, 2, 2, 658, 160, 3, 2, 2, 2, 659, 660, 7, 35, 2, 2, 660, 661, 7, 63, 2, 2, 661, 162, 3, 2, 2, 2, 18, 2, 421, 429, 437, 446, 453, 497, 575, 580, 584, 590, 592, 601, 603, 612, 622, 4, 2, 3, 2, 8, 2, 2] \ No newline at end of file diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/antlr/PMLLexer.java b/src/main/java/gov/nist/csd/pm/policy/pml/antlr/PMLLexer.java deleted file mode 100644 index f8acc2ec0..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/antlr/PMLLexer.java +++ /dev/null @@ -1,383 +0,0 @@ -// Generated from PML.g4 by ANTLR 4.8 -package gov.nist.csd.pm.policy.pml.antlr; -import org.antlr.v4.runtime.Lexer; -import org.antlr.v4.runtime.CharStream; -import org.antlr.v4.runtime.Token; -import org.antlr.v4.runtime.TokenStream; -import org.antlr.v4.runtime.*; -import org.antlr.v4.runtime.atn.*; -import org.antlr.v4.runtime.dfa.DFA; -import org.antlr.v4.runtime.misc.*; - -@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"}) -public class PMLLexer extends Lexer { - static { RuntimeMetaData.checkVersion("4.8", RuntimeMetaData.VERSION); } - - protected static final DFA[] _decisionToDFA; - protected static final PredictionContextCache _sharedContextCache = - new PredictionContextCache(); - public static final int - CREATE=1, DELETE=2, BREAK=3, CONTINUE=4, POLICY_ELEMENT=5, RULE=6, WHEN=7, - PERFORMS=8, AS=9, ON=10, DO=11, ANY_USER=12, USERS=13, ANY_USER_WITH_ATTRIBUTE=14, - PROCESS=15, INTERSECTION=16, UNION=17, SET_RESOURCE_ACCESS_RIGHTS=18, - ASSIGN=19, DEASSIGN=20, FROM=21, SET_PROPERTIES=22, OF=23, TO=24, ASSOCIATE=25, - AND=26, WITH=27, DISSOCIATE=28, DENY=29, PROHIBITION=30, OBLIGATION=31, - ACCESS_RIGHTS=32, POLICY_CLASS=33, OBJECT_ATTRIBUTE=34, USER_ATTRIBUTE=35, - OBJECT=36, USER=37, ATTR=38, ANY=39, LET=40, CONST=41, FUNCTION=42, RETURN=43, - BOOLEAN=44, TRUE=45, FALSE=46, STRING_TYPE=47, BOOLEAN_TYPE=48, VOID_TYPE=49, - ARRAY_TYPE=50, MAP_TYPE=51, FOREACH=52, FOR=53, IN=54, IF=55, ELSE=56, - IN_RANGE=57, NUMBER=58, ID=59, STRING=60, DOUBLE_QUOTE_STRING=61, SINGLE_QUOTE_STRING=62, - LINE_COMMENT=63, WS=64, COMMA=65, COLON=66, OPEN_CURLY=67, CLOSE_CURLY=68, - OPEN_BRACKET=69, CLOSE_BRACKET=70, OPEN_ANGLE_BRACKET=71, CLOSE_ANGLE_BRACKET=72, - OPEN_PAREN=73, CLOSE_PAREN=74, IS_COMPLEMENT=75, EQUALS=76, AND_OP=77, - OR_OP=78, EQUALS_OP=79, NOT_EQUALS_OP=80; - public static String[] channelNames = { - "DEFAULT_TOKEN_CHANNEL", "HIDDEN" - }; - - public static String[] modeNames = { - "DEFAULT_MODE" - }; - - private static String[] makeRuleNames() { - return new String[] { - "CREATE", "DELETE", "BREAK", "CONTINUE", "POLICY_ELEMENT", "RULE", "WHEN", - "PERFORMS", "AS", "ON", "DO", "ANY_USER", "USERS", "ANY_USER_WITH_ATTRIBUTE", - "PROCESS", "INTERSECTION", "UNION", "SET_RESOURCE_ACCESS_RIGHTS", "ASSIGN", - "DEASSIGN", "FROM", "SET_PROPERTIES", "OF", "TO", "ASSOCIATE", "AND", - "WITH", "DISSOCIATE", "DENY", "PROHIBITION", "OBLIGATION", "ACCESS_RIGHTS", - "POLICY_CLASS", "OBJECT_ATTRIBUTE", "USER_ATTRIBUTE", "OBJECT", "USER", - "ATTR", "ANY", "LET", "CONST", "FUNCTION", "RETURN", "BOOLEAN", "TRUE", - "FALSE", "STRING_TYPE", "BOOLEAN_TYPE", "VOID_TYPE", "ARRAY_TYPE", "MAP_TYPE", - "FOREACH", "FOR", "IN", "IF", "ELSE", "IN_RANGE", "NUMBER", "ID", "STRING", - "DOUBLE_QUOTE_STRING", "SINGLE_QUOTE_STRING", "LINE_COMMENT", "WS", "COMMA", - "COLON", "OPEN_CURLY", "CLOSE_CURLY", "OPEN_BRACKET", "CLOSE_BRACKET", - "OPEN_ANGLE_BRACKET", "CLOSE_ANGLE_BRACKET", "OPEN_PAREN", "CLOSE_PAREN", - "IS_COMPLEMENT", "EQUALS", "AND_OP", "OR_OP", "EQUALS_OP", "NOT_EQUALS_OP" - }; - } - public static final String[] ruleNames = makeRuleNames(); - - private static String[] makeLiteralNames() { - return new String[] { - null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, "','", "':'", "'{'", "'}'", "'['", "']'", - "'<'", "'>'", "'('", "')'", "'!'", "'='", "'&&'", "'||'", "'=='", "'!='" - }; - } - private static final String[] _LITERAL_NAMES = makeLiteralNames(); - private static String[] makeSymbolicNames() { - return new String[] { - null, "CREATE", "DELETE", "BREAK", "CONTINUE", "POLICY_ELEMENT", "RULE", - "WHEN", "PERFORMS", "AS", "ON", "DO", "ANY_USER", "USERS", "ANY_USER_WITH_ATTRIBUTE", - "PROCESS", "INTERSECTION", "UNION", "SET_RESOURCE_ACCESS_RIGHTS", "ASSIGN", - "DEASSIGN", "FROM", "SET_PROPERTIES", "OF", "TO", "ASSOCIATE", "AND", - "WITH", "DISSOCIATE", "DENY", "PROHIBITION", "OBLIGATION", "ACCESS_RIGHTS", - "POLICY_CLASS", "OBJECT_ATTRIBUTE", "USER_ATTRIBUTE", "OBJECT", "USER", - "ATTR", "ANY", "LET", "CONST", "FUNCTION", "RETURN", "BOOLEAN", "TRUE", - "FALSE", "STRING_TYPE", "BOOLEAN_TYPE", "VOID_TYPE", "ARRAY_TYPE", "MAP_TYPE", - "FOREACH", "FOR", "IN", "IF", "ELSE", "IN_RANGE", "NUMBER", "ID", "STRING", - "DOUBLE_QUOTE_STRING", "SINGLE_QUOTE_STRING", "LINE_COMMENT", "WS", "COMMA", - "COLON", "OPEN_CURLY", "CLOSE_CURLY", "OPEN_BRACKET", "CLOSE_BRACKET", - "OPEN_ANGLE_BRACKET", "CLOSE_ANGLE_BRACKET", "OPEN_PAREN", "CLOSE_PAREN", - "IS_COMPLEMENT", "EQUALS", "AND_OP", "OR_OP", "EQUALS_OP", "NOT_EQUALS_OP" - }; - } - private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); - public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); - - /** - * @deprecated Use {@link #VOCABULARY} instead. - */ - @Deprecated - public static final String[] tokenNames; - static { - tokenNames = new String[_SYMBOLIC_NAMES.length]; - for (int i = 0; i < tokenNames.length; i++) { - tokenNames[i] = VOCABULARY.getLiteralName(i); - if (tokenNames[i] == null) { - tokenNames[i] = VOCABULARY.getSymbolicName(i); - } - - if (tokenNames[i] == null) { - tokenNames[i] = ""; - } - } - } - - @Override - @Deprecated - public String[] getTokenNames() { - return tokenNames; - } - - @Override - - public Vocabulary getVocabulary() { - return VOCABULARY; - } - - - public PMLLexer(CharStream input) { - super(input); - _interp = new LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); - } - - @Override - public String getGrammarFileName() { return "PML.g4"; } - - @Override - public String[] getRuleNames() { return ruleNames; } - - @Override - public String getSerializedATN() { return _serializedATN; } - - @Override - public String[] getChannelNames() { return channelNames; } - - @Override - public String[] getModeNames() { return modeNames; } - - @Override - public ATN getATN() { return _ATN; } - - public static final String _serializedATN = - "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2R\u0296\b\1\4\2\t"+ - "\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13"+ - "\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+ - "\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+ - "\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\4 \t \4!"+ - "\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4"+ - ",\t,\4-\t-\4.\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64\t"+ - "\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:\4;\t;\4<\t<\4=\t="+ - "\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\tC\4D\tD\4E\tE\4F\tF\4G\tG\4H\tH\4I"+ - "\tI\4J\tJ\4K\tK\4L\tL\4M\tM\4N\tN\4O\tO\4P\tP\4Q\tQ\3\2\3\2\3\2\3\2\3"+ - "\2\3\2\3\2\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\4\3\4\3\4\3\4\3\4\3\4\3\5\3\5"+ - "\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3"+ - "\6\3\6\3\6\3\6\3\6\3\7\3\7\3\7\3\7\3\7\3\b\3\b\3\b\3\b\3\b\3\t\3\t\3\t"+ - "\3\t\3\t\3\t\3\t\3\t\3\t\3\n\3\n\3\n\3\13\3\13\3\13\3\f\3\f\3\f\3\r\3"+ - "\r\3\r\3\r\3\16\3\16\3\16\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\17"+ - "\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\21\3\21\3\21\3\21\3\21\3\21"+ - "\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\22\3\22\3\22\3\22\3\22\3\22\3\23"+ - "\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23"+ - "\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\25\3\25\3\25\3\25\3\25\3\25\3\25"+ - "\3\25\3\25\3\26\3\26\3\26\3\26\3\26\3\27\3\27\3\27\3\27\3\27\3\27\3\27"+ - "\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\27\3\30\3\30\3\30\3\31\3\31\3\31"+ - "\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\33\3\33\3\33\3\33"+ - "\3\34\3\34\3\34\3\34\3\34\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35"+ - "\3\35\3\35\3\36\3\36\3\36\3\36\3\36\3\37\3\37\3\37\3\37\3\37\3\37\3\37"+ - "\3\37\3\37\3\37\3\37\3\37\3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3!\3!\3!\3"+ - "!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3"+ - "\"\3\"\3\"\3\"\3\"\5\"\u01a6\n\"\3#\3#\3#\3#\3#\3#\5#\u01ae\n#\3$\3$\3"+ - "$\3$\3$\3$\5$\u01b6\n$\3%\3%\3%\3%\3%\3%\3%\5%\u01bf\n%\3&\3&\3&\3&\3"+ - "&\5&\u01c6\n&\3\'\3\'\3\'\3\'\3\'\3\'\3\'\3\'\3\'\3\'\3(\3(\3(\3(\3)\3"+ - ")\3)\3)\3*\3*\3*\3*\3*\3*\3+\3+\3+\3+\3+\3+\3+\3+\3+\3,\3,\3,\3,\3,\3"+ - ",\3,\3-\3-\5-\u01f2\n-\3.\3.\3.\3.\3.\3/\3/\3/\3/\3/\3/\3\60\3\60\3\60"+ - "\3\60\3\60\3\60\3\60\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\62\3\62"+ - "\3\62\3\62\3\62\3\63\3\63\3\63\3\63\3\63\3\63\3\64\3\64\3\64\3\64\3\65"+ - "\3\65\3\65\3\65\3\65\3\65\3\65\3\65\3\66\3\66\3\66\3\66\3\67\3\67\3\67"+ - "\38\38\38\39\39\39\39\39\3:\3:\3:\3:\3:\3:\3:\3:\3:\3;\6;\u023e\n;\r;"+ - "\16;\u023f\3<\6<\u0243\n<\r<\16<\u0244\3=\3=\5=\u0249\n=\3>\3>\3>\3>\7"+ - ">\u024f\n>\f>\16>\u0252\13>\3>\3>\3?\3?\3?\3?\7?\u025a\n?\f?\16?\u025d"+ - "\13?\3?\3?\3@\3@\7@\u0263\n@\f@\16@\u0266\13@\3@\3@\3@\3@\3A\6A\u026d"+ - "\nA\rA\16A\u026e\3A\3A\3B\3B\3C\3C\3D\3D\3E\3E\3F\3F\3G\3G\3H\3H\3I\3"+ - "I\3J\3J\3K\3K\3L\3L\3M\3M\3N\3N\3N\3O\3O\3O\3P\3P\3P\3Q\3Q\3Q\4\u0250"+ - "\u025b\2R\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16\33"+ - "\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63\33\65\34\67"+ - "\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65"+ - "i\66k\67m8o9q:s;u{?}@\177A\u0081B\u0083C\u0085D\u0087E\u0089F\u008b"+ - "G\u008dH\u008fI\u0091J\u0093K\u0095L\u0097M\u0099N\u009bO\u009dP\u009f"+ - "Q\u00a1R\3\2\37\3\2ee\3\2tt\3\2gg\3\2cc\3\2vv\3\2ff\3\2nn\3\2dd\3\2mm"+ - "\3\2qq\3\2pp\3\2kk\3\2ww\3\2rr\3\2{{\3\2\"\"\3\2oo\3\2yy\3\2jj\3\2hh\3"+ - "\2uu\3\2ii\3\2ll\3\2xx\3\2\62;\6\2\62;C\\aac|\4\2\f\f\17\17\3\2\f\f\5"+ - "\2\13\f\17\17\"\"\2\u02a4\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2"+ - "\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2"+ - "\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3"+ - "\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2"+ - "\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67"+ - "\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2"+ - "\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2"+ - "\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]"+ - "\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\2c\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2i\3\2"+ - "\2\2\2k\3\2\2\2\2m\3\2\2\2\2o\3\2\2\2\2q\3\2\2\2\2s\3\2\2\2\2u\3\2\2\2"+ - "\2w\3\2\2\2\2y\3\2\2\2\2{\3\2\2\2\2}\3\2\2\2\2\177\3\2\2\2\2\u0081\3\2"+ - "\2\2\2\u0083\3\2\2\2\2\u0085\3\2\2\2\2\u0087\3\2\2\2\2\u0089\3\2\2\2\2"+ - "\u008b\3\2\2\2\2\u008d\3\2\2\2\2\u008f\3\2\2\2\2\u0091\3\2\2\2\2\u0093"+ - "\3\2\2\2\2\u0095\3\2\2\2\2\u0097\3\2\2\2\2\u0099\3\2\2\2\2\u009b\3\2\2"+ - "\2\2\u009d\3\2\2\2\2\u009f\3\2\2\2\2\u00a1\3\2\2\2\3\u00a3\3\2\2\2\5\u00aa"+ - "\3\2\2\2\7\u00b1\3\2\2\2\t\u00b7\3\2\2\2\13\u00c0\3\2\2\2\r\u00cf\3\2"+ - "\2\2\17\u00d4\3\2\2\2\21\u00d9\3\2\2\2\23\u00e2\3\2\2\2\25\u00e5\3\2\2"+ - "\2\27\u00e8\3\2\2\2\31\u00eb\3\2\2\2\33\u00ef\3\2\2\2\35\u00f2\3\2\2\2"+ - "\37\u00fb\3\2\2\2!\u0103\3\2\2\2#\u0110\3\2\2\2%\u0116\3\2\2\2\'\u0125"+ - "\3\2\2\2)\u012c\3\2\2\2+\u0135\3\2\2\2-\u013a\3\2\2\2/\u0149\3\2\2\2\61"+ - "\u014c\3\2\2\2\63\u014f\3\2\2\2\65\u0159\3\2\2\2\67\u015d\3\2\2\29\u0162"+ - "\3\2\2\2;\u016d\3\2\2\2=\u0172\3\2\2\2?\u017e\3\2\2\2A\u0189\3\2\2\2C"+ - "\u01a5\3\2\2\2E\u01ad\3\2\2\2G\u01b5\3\2\2\2I\u01be\3\2\2\2K\u01c5\3\2"+ - "\2\2M\u01c7\3\2\2\2O\u01d1\3\2\2\2Q\u01d5\3\2\2\2S\u01d9\3\2\2\2U\u01df"+ - "\3\2\2\2W\u01e8\3\2\2\2Y\u01f1\3\2\2\2[\u01f3\3\2\2\2]\u01f8\3\2\2\2_"+ - "\u01fe\3\2\2\2a\u0205\3\2\2\2c\u020d\3\2\2\2e\u0212\3\2\2\2g\u0218\3\2"+ - "\2\2i\u021c\3\2\2\2k\u0224\3\2\2\2m\u0228\3\2\2\2o\u022b\3\2\2\2q\u022e"+ - "\3\2\2\2s\u0233\3\2\2\2u\u023d\3\2\2\2w\u0242\3\2\2\2y\u0248\3\2\2\2{"+ - "\u024a\3\2\2\2}\u0255\3\2\2\2\177\u0260\3\2\2\2\u0081\u026c\3\2\2\2\u0083"+ - "\u0272\3\2\2\2\u0085\u0274\3\2\2\2\u0087\u0276\3\2\2\2\u0089\u0278\3\2"+ - "\2\2\u008b\u027a\3\2\2\2\u008d\u027c\3\2\2\2\u008f\u027e\3\2\2\2\u0091"+ - "\u0280\3\2\2\2\u0093\u0282\3\2\2\2\u0095\u0284\3\2\2\2\u0097\u0286\3\2"+ - "\2\2\u0099\u0288\3\2\2\2\u009b\u028a\3\2\2\2\u009d\u028d\3\2\2\2\u009f"+ - "\u0290\3\2\2\2\u00a1\u0293\3\2\2\2\u00a3\u00a4\t\2\2\2\u00a4\u00a5\t\3"+ - "\2\2\u00a5\u00a6\t\4\2\2\u00a6\u00a7\t\5\2\2\u00a7\u00a8\t\6\2\2\u00a8"+ - "\u00a9\t\4\2\2\u00a9\4\3\2\2\2\u00aa\u00ab\t\7\2\2\u00ab\u00ac\t\4\2\2"+ - "\u00ac\u00ad\t\b\2\2\u00ad\u00ae\t\4\2\2\u00ae\u00af\t\6\2\2\u00af\u00b0"+ - "\t\4\2\2\u00b0\6\3\2\2\2\u00b1\u00b2\t\t\2\2\u00b2\u00b3\t\3\2\2\u00b3"+ - "\u00b4\t\4\2\2\u00b4\u00b5\t\5\2\2\u00b5\u00b6\t\n\2\2\u00b6\b\3\2\2\2"+ - "\u00b7\u00b8\t\2\2\2\u00b8\u00b9\t\13\2\2\u00b9\u00ba\t\f\2\2\u00ba\u00bb"+ - "\t\6\2\2\u00bb\u00bc\t\r\2\2\u00bc\u00bd\t\f\2\2\u00bd\u00be\t\16\2\2"+ - "\u00be\u00bf\t\4\2\2\u00bf\n\3\2\2\2\u00c0\u00c1\t\17\2\2\u00c1\u00c2"+ - "\t\13\2\2\u00c2\u00c3\t\b\2\2\u00c3\u00c4\t\r\2\2\u00c4\u00c5\t\2\2\2"+ - "\u00c5\u00c6\t\20\2\2\u00c6\u00c7\t\21\2\2\u00c7\u00c8\t\4\2\2\u00c8\u00c9"+ - "\t\b\2\2\u00c9\u00ca\t\4\2\2\u00ca\u00cb\t\22\2\2\u00cb\u00cc\t\4\2\2"+ - "\u00cc\u00cd\t\f\2\2\u00cd\u00ce\t\6\2\2\u00ce\f\3\2\2\2\u00cf\u00d0\t"+ - "\3\2\2\u00d0\u00d1\t\16\2\2\u00d1\u00d2\t\b\2\2\u00d2\u00d3\t\4\2\2\u00d3"+ - "\16\3\2\2\2\u00d4\u00d5\t\23\2\2\u00d5\u00d6\t\24\2\2\u00d6\u00d7\t\4"+ - "\2\2\u00d7\u00d8\t\f\2\2\u00d8\20\3\2\2\2\u00d9\u00da\t\17\2\2\u00da\u00db"+ - "\t\4\2\2\u00db\u00dc\t\3\2\2\u00dc\u00dd\t\25\2\2\u00dd\u00de\t\13\2\2"+ - "\u00de\u00df\t\3\2\2\u00df\u00e0\t\22\2\2\u00e0\u00e1\t\26\2\2\u00e1\22"+ - "\3\2\2\2\u00e2\u00e3\t\5\2\2\u00e3\u00e4\t\26\2\2\u00e4\24\3\2\2\2\u00e5"+ - "\u00e6\t\13\2\2\u00e6\u00e7\t\f\2\2\u00e7\26\3\2\2\2\u00e8\u00e9\t\7\2"+ - "\2\u00e9\u00ea\t\13\2\2\u00ea\30\3\2\2\2\u00eb\u00ec\5O(\2\u00ec\u00ed"+ - "\t\21\2\2\u00ed\u00ee\5K&\2\u00ee\32\3\2\2\2\u00ef\u00f0\5K&\2\u00f0\u00f1"+ - "\t\26\2\2\u00f1\34\3\2\2\2\u00f2\u00f3\5\31\r\2\u00f3\u00f4\t\21\2\2\u00f4"+ - "\u00f5\t\23\2\2\u00f5\u00f6\t\r\2\2\u00f6\u00f7\t\6\2\2\u00f7\u00f8\t"+ - "\24\2\2\u00f8\u00f9\t\21\2\2\u00f9\u00fa\5M\'\2\u00fa\36\3\2\2\2\u00fb"+ - "\u00fc\t\17\2\2\u00fc\u00fd\t\3\2\2\u00fd\u00fe\t\13\2\2\u00fe\u00ff\t"+ - "\2\2\2\u00ff\u0100\t\4\2\2\u0100\u0101\t\26\2\2\u0101\u0102\t\26\2\2\u0102"+ - " \3\2\2\2\u0103\u0104\t\r\2\2\u0104\u0105\t\f\2\2\u0105\u0106\t\6\2\2"+ - "\u0106\u0107\t\4\2\2\u0107\u0108\t\3\2\2\u0108\u0109\t\26\2\2\u0109\u010a"+ - "\t\4\2\2\u010a\u010b\t\2\2\2\u010b\u010c\t\6\2\2\u010c\u010d\t\r\2\2\u010d"+ - "\u010e\t\13\2\2\u010e\u010f\t\f\2\2\u010f\"\3\2\2\2\u0110\u0111\t\16\2"+ - "\2\u0111\u0112\t\f\2\2\u0112\u0113\t\r\2\2\u0113\u0114\t\13\2\2\u0114"+ - "\u0115\t\f\2\2\u0115$\3\2\2\2\u0116\u0117\t\26\2\2\u0117\u0118\t\4\2\2"+ - "\u0118\u0119\t\6\2\2\u0119\u011a\t\21\2\2\u011a\u011b\t\3\2\2\u011b\u011c"+ - "\t\4\2\2\u011c\u011d\t\26\2\2\u011d\u011e\t\13\2\2\u011e\u011f\t\16\2"+ - "\2\u011f\u0120\t\3\2\2\u0120\u0121\t\2\2\2\u0121\u0122\t\4\2\2\u0122\u0123"+ - "\t\21\2\2\u0123\u0124\5A!\2\u0124&\3\2\2\2\u0125\u0126\t\5\2\2\u0126\u0127"+ - "\t\26\2\2\u0127\u0128\t\26\2\2\u0128\u0129\t\r\2\2\u0129\u012a\t\27\2"+ - "\2\u012a\u012b\t\f\2\2\u012b(\3\2\2\2\u012c\u012d\t\7\2\2\u012d\u012e"+ - "\t\4\2\2\u012e\u012f\t\5\2\2\u012f\u0130\t\26\2\2\u0130\u0131\t\26\2\2"+ - "\u0131\u0132\t\r\2\2\u0132\u0133\t\27\2\2\u0133\u0134\t\f\2\2\u0134*\3"+ - "\2\2\2\u0135\u0136\t\25\2\2\u0136\u0137\t\3\2\2\u0137\u0138\t\13\2\2\u0138"+ - "\u0139\t\22\2\2\u0139,\3\2\2\2\u013a\u013b\t\26\2\2\u013b\u013c\t\4\2"+ - "\2\u013c\u013d\t\6\2\2\u013d\u013e\t\21\2\2\u013e\u013f\t\17\2\2\u013f"+ - "\u0140\t\3\2\2\u0140\u0141\t\13\2\2\u0141\u0142\t\17\2\2\u0142\u0143\t"+ - "\4\2\2\u0143\u0144\t\3\2\2\u0144\u0145\t\6\2\2\u0145\u0146\t\r\2\2\u0146"+ - "\u0147\t\4\2\2\u0147\u0148\t\26\2\2\u0148.\3\2\2\2\u0149\u014a\t\13\2"+ - "\2\u014a\u014b\t\25\2\2\u014b\60\3\2\2\2\u014c\u014d\t\6\2\2\u014d\u014e"+ - "\t\13\2\2\u014e\62\3\2\2\2\u014f\u0150\t\5\2\2\u0150\u0151\t\26\2\2\u0151"+ - "\u0152\t\26\2\2\u0152\u0153\t\13\2\2\u0153\u0154\t\2\2\2\u0154\u0155\t"+ - "\r\2\2\u0155\u0156\t\5\2\2\u0156\u0157\t\6\2\2\u0157\u0158\t\4\2\2\u0158"+ - "\64\3\2\2\2\u0159\u015a\t\5\2\2\u015a\u015b\t\f\2\2\u015b\u015c\t\7\2"+ - "\2\u015c\66\3\2\2\2\u015d\u015e\t\23\2\2\u015e\u015f\t\r\2\2\u015f\u0160"+ - "\t\6\2\2\u0160\u0161\t\24\2\2\u01618\3\2\2\2\u0162\u0163\t\7\2\2\u0163"+ - "\u0164\t\r\2\2\u0164\u0165\t\26\2\2\u0165\u0166\t\26\2\2\u0166\u0167\t"+ - "\13\2\2\u0167\u0168\t\2\2\2\u0168\u0169\t\r\2\2\u0169\u016a\t\5\2\2\u016a"+ - "\u016b\t\6\2\2\u016b\u016c\t\4\2\2\u016c:\3\2\2\2\u016d\u016e\t\7\2\2"+ - "\u016e\u016f\t\4\2\2\u016f\u0170\t\f\2\2\u0170\u0171\t\20\2\2\u0171<\3"+ - "\2\2\2\u0172\u0173\t\17\2\2\u0173\u0174\t\3\2\2\u0174\u0175\t\13\2\2\u0175"+ - "\u0176\t\24\2\2\u0176\u0177\t\r\2\2\u0177\u0178\t\t\2\2\u0178\u0179\t"+ - "\r\2\2\u0179\u017a\t\6\2\2\u017a\u017b\t\r\2\2\u017b\u017c\t\13\2\2\u017c"+ - "\u017d\t\f\2\2\u017d>\3\2\2\2\u017e\u017f\t\13\2\2\u017f\u0180\t\t\2\2"+ - "\u0180\u0181\t\b\2\2\u0181\u0182\t\r\2\2\u0182\u0183\t\27\2\2\u0183\u0184"+ - "\t\5\2\2\u0184\u0185\t\6\2\2\u0185\u0186\t\r\2\2\u0186\u0187\t\13\2\2"+ - "\u0187\u0188\t\f\2\2\u0188@\3\2\2\2\u0189\u018a\t\5\2\2\u018a\u018b\t"+ - "\2\2\2\u018b\u018c\t\2\2\2\u018c\u018d\t\4\2\2\u018d\u018e\t\26\2\2\u018e"+ - "\u018f\t\26\2\2\u018f\u0190\t\21\2\2\u0190\u0191\t\3\2\2\u0191\u0192\t"+ - "\r\2\2\u0192\u0193\t\27\2\2\u0193\u0194\t\24\2\2\u0194\u0195\t\6\2\2\u0195"+ - "\u0196\t\26\2\2\u0196B\3\2\2\2\u0197\u0198\t\17\2\2\u0198\u0199\t\13\2"+ - "\2\u0199\u019a\t\b\2\2\u019a\u019b\t\r\2\2\u019b\u019c\t\2\2\2\u019c\u019d"+ - "\t\20\2\2\u019d\u019e\t\21\2\2\u019e\u019f\t\2\2\2\u019f\u01a0\t\b\2\2"+ - "\u01a0\u01a1\t\5\2\2\u01a1\u01a2\t\26\2\2\u01a2\u01a6\t\26\2\2\u01a3\u01a4"+ - "\t\17\2\2\u01a4\u01a6\t\2\2\2\u01a5\u0197\3\2\2\2\u01a5\u01a3\3\2\2\2"+ - "\u01a6D\3\2\2\2\u01a7\u01a8\5I%\2\u01a8\u01a9\t\21\2\2\u01a9\u01aa\5M"+ - "\'\2\u01aa\u01ae\3\2\2\2\u01ab\u01ac\t\13\2\2\u01ac\u01ae\t\5\2\2\u01ad"+ - "\u01a7\3\2\2\2\u01ad\u01ab\3\2\2\2\u01aeF\3\2\2\2\u01af\u01b0\5K&\2\u01b0"+ - "\u01b1\t\21\2\2\u01b1\u01b2\5M\'\2\u01b2\u01b6\3\2\2\2\u01b3\u01b4\t\16"+ - "\2\2\u01b4\u01b6\t\5\2\2\u01b5\u01af\3\2\2\2\u01b5\u01b3\3\2\2\2\u01b6"+ - "H\3\2\2\2\u01b7\u01b8\t\13\2\2\u01b8\u01b9\t\t\2\2\u01b9\u01ba\t\30\2"+ - "\2\u01ba\u01bb\t\4\2\2\u01bb\u01bc\t\2\2\2\u01bc\u01bf\t\6\2\2\u01bd\u01bf"+ - "\t\13\2\2\u01be\u01b7\3\2\2\2\u01be\u01bd\3\2\2\2\u01bfJ\3\2\2\2\u01c0"+ - "\u01c1\t\16\2\2\u01c1\u01c2\t\26\2\2\u01c2\u01c3\t\4\2\2\u01c3\u01c6\t"+ - "\3\2\2\u01c4\u01c6\t\16\2\2\u01c5\u01c0\3\2\2\2\u01c5\u01c4\3\2\2\2\u01c6"+ - "L\3\2\2\2\u01c7\u01c8\t\5\2\2\u01c8\u01c9\t\6\2\2\u01c9\u01ca\t\6\2\2"+ - "\u01ca\u01cb\t\3\2\2\u01cb\u01cc\t\r\2\2\u01cc\u01cd\t\t\2\2\u01cd\u01ce"+ - "\t\16\2\2\u01ce\u01cf\t\6\2\2\u01cf\u01d0\t\4\2\2\u01d0N\3\2\2\2\u01d1"+ - "\u01d2\t\5\2\2\u01d2\u01d3\t\f\2\2\u01d3\u01d4\t\20\2\2\u01d4P\3\2\2\2"+ - "\u01d5\u01d6\t\b\2\2\u01d6\u01d7\t\4\2\2\u01d7\u01d8\t\6\2\2\u01d8R\3"+ - "\2\2\2\u01d9\u01da\t\2\2\2\u01da\u01db\t\13\2\2\u01db\u01dc\t\f\2\2\u01dc"+ - "\u01dd\t\26\2\2\u01dd\u01de\t\6\2\2\u01deT\3\2\2\2\u01df\u01e0\t\25\2"+ - "\2\u01e0\u01e1\t\16\2\2\u01e1\u01e2\t\f\2\2\u01e2\u01e3\t\2\2\2\u01e3"+ - "\u01e4\t\6\2\2\u01e4\u01e5\t\r\2\2\u01e5\u01e6\t\13\2\2\u01e6\u01e7\t"+ - "\f\2\2\u01e7V\3\2\2\2\u01e8\u01e9\t\3\2\2\u01e9\u01ea\t\4\2\2\u01ea\u01eb"+ - "\t\6\2\2\u01eb\u01ec\t\16\2\2\u01ec\u01ed\t\3\2\2\u01ed\u01ee\t\f\2\2"+ - "\u01eeX\3\2\2\2\u01ef\u01f2\5[.\2\u01f0\u01f2\5]/\2\u01f1\u01ef\3\2\2"+ - "\2\u01f1\u01f0\3\2\2\2\u01f2Z\3\2\2\2\u01f3\u01f4\t\6\2\2\u01f4\u01f5"+ - "\t\3\2\2\u01f5\u01f6\t\16\2\2\u01f6\u01f7\t\4\2\2\u01f7\\\3\2\2\2\u01f8"+ - "\u01f9\t\25\2\2\u01f9\u01fa\t\5\2\2\u01fa\u01fb\t\b\2\2\u01fb\u01fc\t"+ - "\26\2\2\u01fc\u01fd\t\4\2\2\u01fd^\3\2\2\2\u01fe\u01ff\t\26\2\2\u01ff"+ - "\u0200\t\6\2\2\u0200\u0201\t\3\2\2\u0201\u0202\t\r\2\2\u0202\u0203\t\f"+ - "\2\2\u0203\u0204\t\27\2\2\u0204`\3\2\2\2\u0205\u0206\t\t\2\2\u0206\u0207"+ - "\t\13\2\2\u0207\u0208\t\13\2\2\u0208\u0209\t\b\2\2\u0209\u020a\t\4\2\2"+ - "\u020a\u020b\t\5\2\2\u020b\u020c\t\f\2\2\u020cb\3\2\2\2\u020d\u020e\t"+ - "\31\2\2\u020e\u020f\t\13\2\2\u020f\u0210\t\r\2\2\u0210\u0211\t\7\2\2\u0211"+ - "d\3\2\2\2\u0212\u0213\t\5\2\2\u0213\u0214\t\3\2\2\u0214\u0215\t\3\2\2"+ - "\u0215\u0216\t\5\2\2\u0216\u0217\t\20\2\2\u0217f\3\2\2\2\u0218\u0219\t"+ - "\22\2\2\u0219\u021a\t\5\2\2\u021a\u021b\t\17\2\2\u021bh\3\2\2\2\u021c"+ - "\u021d\t\25\2\2\u021d\u021e\t\13\2\2\u021e\u021f\t\3\2\2\u021f\u0220\t"+ - "\4\2\2\u0220\u0221\t\5\2\2\u0221\u0222\t\2\2\2\u0222\u0223\t\24\2\2\u0223"+ - "j\3\2\2\2\u0224\u0225\t\25\2\2\u0225\u0226\t\13\2\2\u0226\u0227\t\3\2"+ - "\2\u0227l\3\2\2\2\u0228\u0229\t\r\2\2\u0229\u022a\t\f\2\2\u022an\3\2\2"+ - "\2\u022b\u022c\t\r\2\2\u022c\u022d\t\25\2\2\u022dp\3\2\2\2\u022e\u022f"+ - "\t\4\2\2\u022f\u0230\t\b\2\2\u0230\u0231\t\26\2\2\u0231\u0232\t\4\2\2"+ - "\u0232r\3\2\2\2\u0233\u0234\t\r\2\2\u0234\u0235\t\f\2\2\u0235\u0236\t"+ - "\21\2\2\u0236\u0237\t\3\2\2\u0237\u0238\t\5\2\2\u0238\u0239\t\f\2\2\u0239"+ - "\u023a\t\27\2\2\u023a\u023b\t\4\2\2\u023bt\3\2\2\2\u023c\u023e\t\32\2"+ - "\2\u023d\u023c\3\2\2\2\u023e\u023f\3\2\2\2\u023f\u023d\3\2\2\2\u023f\u0240"+ - "\3\2\2\2\u0240v\3\2\2\2\u0241\u0243\t\33\2\2\u0242\u0241\3\2\2\2\u0243"+ - "\u0244\3\2\2\2\u0244\u0242\3\2\2\2\u0244\u0245\3\2\2\2\u0245x\3\2\2\2"+ - "\u0246\u0249\5{>\2\u0247\u0249\5}?\2\u0248\u0246\3\2\2\2\u0248\u0247\3"+ - "\2\2\2\u0249z\3\2\2\2\u024a\u0250\7$\2\2\u024b\u024c\7^\2\2\u024c\u024f"+ - "\7$\2\2\u024d\u024f\n\34\2\2\u024e\u024b\3\2\2\2\u024e\u024d\3\2\2\2\u024f"+ - "\u0252\3\2\2\2\u0250\u0251\3\2\2\2\u0250\u024e\3\2\2\2\u0251\u0253\3\2"+ - "\2\2\u0252\u0250\3\2\2\2\u0253\u0254\7$\2\2\u0254|\3\2\2\2\u0255\u025b"+ - "\7)\2\2\u0256\u0257\7^\2\2\u0257\u025a\7)\2\2\u0258\u025a\n\34\2\2\u0259"+ - "\u0256\3\2\2\2\u0259\u0258\3\2\2\2\u025a\u025d\3\2\2\2\u025b\u025c\3\2"+ - "\2\2\u025b\u0259\3\2\2\2\u025c\u025e\3\2\2\2\u025d\u025b\3\2\2\2\u025e"+ - "\u025f\7)\2\2\u025f~\3\2\2\2\u0260\u0264\7%\2\2\u0261\u0263\n\35\2\2\u0262"+ - "\u0261\3\2\2\2\u0263\u0266\3\2\2\2\u0264\u0262\3\2\2\2\u0264\u0265\3\2"+ - "\2\2\u0265\u0267\3\2\2\2\u0266\u0264\3\2\2\2\u0267\u0268\7\f\2\2\u0268"+ - "\u0269\3\2\2\2\u0269\u026a\b@\2\2\u026a\u0080\3\2\2\2\u026b\u026d\t\36"+ - "\2\2\u026c\u026b\3\2\2\2\u026d\u026e\3\2\2\2\u026e\u026c\3\2\2\2\u026e"+ - "\u026f\3\2\2\2\u026f\u0270\3\2\2\2\u0270\u0271\bA\3\2\u0271\u0082\3\2"+ - "\2\2\u0272\u0273\7.\2\2\u0273\u0084\3\2\2\2\u0274\u0275\7<\2\2\u0275\u0086"+ - "\3\2\2\2\u0276\u0277\7}\2\2\u0277\u0088\3\2\2\2\u0278\u0279\7\177\2\2"+ - "\u0279\u008a\3\2\2\2\u027a\u027b\7]\2\2\u027b\u008c\3\2\2\2\u027c\u027d"+ - "\7_\2\2\u027d\u008e\3\2\2\2\u027e\u027f\7>\2\2\u027f\u0090\3\2\2\2\u0280"+ - "\u0281\7@\2\2\u0281\u0092\3\2\2\2\u0282\u0283\7*\2\2\u0283\u0094\3\2\2"+ - "\2\u0284\u0285\7+\2\2\u0285\u0096\3\2\2\2\u0286\u0287\7#\2\2\u0287\u0098"+ - "\3\2\2\2\u0288\u0289\7?\2\2\u0289\u009a\3\2\2\2\u028a\u028b\7(\2\2\u028b"+ - "\u028c\7(\2\2\u028c\u009c\3\2\2\2\u028d\u028e\7~\2\2\u028e\u028f\7~\2"+ - "\2\u028f\u009e\3\2\2\2\u0290\u0291\7?\2\2\u0291\u0292\7?\2\2\u0292\u00a0"+ - "\3\2\2\2\u0293\u0294\7#\2\2\u0294\u0295\7?\2\2\u0295\u00a2\3\2\2\2\22"+ - "\2\u01a5\u01ad\u01b5\u01be\u01c5\u01f1\u023f\u0244\u0248\u024e\u0250\u0259"+ - "\u025b\u0264\u026e\4\2\3\2\b\2\2"; - public static final ATN _ATN = - new ATNDeserializer().deserialize(_serializedATN.toCharArray()); - static { - _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()]; - for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) { - _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); - } - } -} \ No newline at end of file diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/antlr/PMLLexer.tokens b/src/main/java/gov/nist/csd/pm/policy/pml/antlr/PMLLexer.tokens deleted file mode 100644 index 5d93e50e8..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/antlr/PMLLexer.tokens +++ /dev/null @@ -1,96 +0,0 @@ -CREATE=1 -DELETE=2 -BREAK=3 -CONTINUE=4 -POLICY_ELEMENT=5 -RULE=6 -WHEN=7 -PERFORMS=8 -AS=9 -ON=10 -DO=11 -ANY_USER=12 -USERS=13 -ANY_USER_WITH_ATTRIBUTE=14 -PROCESS=15 -INTERSECTION=16 -UNION=17 -SET_RESOURCE_ACCESS_RIGHTS=18 -ASSIGN=19 -DEASSIGN=20 -FROM=21 -SET_PROPERTIES=22 -OF=23 -TO=24 -ASSOCIATE=25 -AND=26 -WITH=27 -DISSOCIATE=28 -DENY=29 -PROHIBITION=30 -OBLIGATION=31 -ACCESS_RIGHTS=32 -POLICY_CLASS=33 -OBJECT_ATTRIBUTE=34 -USER_ATTRIBUTE=35 -OBJECT=36 -USER=37 -ATTR=38 -ANY=39 -LET=40 -CONST=41 -FUNCTION=42 -RETURN=43 -BOOLEAN=44 -TRUE=45 -FALSE=46 -STRING_TYPE=47 -BOOLEAN_TYPE=48 -VOID_TYPE=49 -ARRAY_TYPE=50 -MAP_TYPE=51 -FOREACH=52 -FOR=53 -IN=54 -IF=55 -ELSE=56 -IN_RANGE=57 -NUMBER=58 -ID=59 -STRING=60 -DOUBLE_QUOTE_STRING=61 -SINGLE_QUOTE_STRING=62 -LINE_COMMENT=63 -WS=64 -COMMA=65 -COLON=66 -OPEN_CURLY=67 -CLOSE_CURLY=68 -OPEN_BRACKET=69 -CLOSE_BRACKET=70 -OPEN_ANGLE_BRACKET=71 -CLOSE_ANGLE_BRACKET=72 -OPEN_PAREN=73 -CLOSE_PAREN=74 -IS_COMPLEMENT=75 -EQUALS=76 -AND_OP=77 -OR_OP=78 -EQUALS_OP=79 -NOT_EQUALS_OP=80 -','=65 -':'=66 -'{'=67 -'}'=68 -'['=69 -']'=70 -'<'=71 -'>'=72 -'('=73 -')'=74 -'!'=75 -'='=76 -'&&'=77 -'||'=78 -'=='=79 -'!='=80 diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/antlr/PMLParser.java b/src/main/java/gov/nist/csd/pm/policy/pml/antlr/PMLParser.java deleted file mode 100644 index 8092be594..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/antlr/PMLParser.java +++ /dev/null @@ -1,4689 +0,0 @@ -// Generated from PML.g4 by ANTLR 4.8 -package gov.nist.csd.pm.policy.pml.antlr; -import org.antlr.v4.runtime.atn.*; -import org.antlr.v4.runtime.dfa.DFA; -import org.antlr.v4.runtime.*; -import org.antlr.v4.runtime.misc.*; -import org.antlr.v4.runtime.tree.*; -import java.util.List; -import java.util.Iterator; -import java.util.ArrayList; - -@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"}) -public class PMLParser extends Parser { - static { RuntimeMetaData.checkVersion("4.8", RuntimeMetaData.VERSION); } - - protected static final DFA[] _decisionToDFA; - protected static final PredictionContextCache _sharedContextCache = - new PredictionContextCache(); - public static final int - CREATE=1, DELETE=2, BREAK=3, CONTINUE=4, POLICY_ELEMENT=5, RULE=6, WHEN=7, - PERFORMS=8, AS=9, ON=10, DO=11, ANY_USER=12, USERS=13, ANY_USER_WITH_ATTRIBUTE=14, - PROCESS=15, INTERSECTION=16, UNION=17, SET_RESOURCE_ACCESS_RIGHTS=18, - ASSIGN=19, DEASSIGN=20, FROM=21, SET_PROPERTIES=22, OF=23, TO=24, ASSOCIATE=25, - AND=26, WITH=27, DISSOCIATE=28, DENY=29, PROHIBITION=30, OBLIGATION=31, - ACCESS_RIGHTS=32, POLICY_CLASS=33, OBJECT_ATTRIBUTE=34, USER_ATTRIBUTE=35, - OBJECT=36, USER=37, ATTR=38, ANY=39, LET=40, CONST=41, FUNCTION=42, RETURN=43, - BOOLEAN=44, TRUE=45, FALSE=46, STRING_TYPE=47, BOOLEAN_TYPE=48, VOID_TYPE=49, - ARRAY_TYPE=50, MAP_TYPE=51, FOREACH=52, FOR=53, IN=54, IF=55, ELSE=56, - IN_RANGE=57, NUMBER=58, ID=59, STRING=60, DOUBLE_QUOTE_STRING=61, SINGLE_QUOTE_STRING=62, - LINE_COMMENT=63, WS=64, COMMA=65, COLON=66, OPEN_CURLY=67, CLOSE_CURLY=68, - OPEN_BRACKET=69, CLOSE_BRACKET=70, OPEN_ANGLE_BRACKET=71, CLOSE_ANGLE_BRACKET=72, - OPEN_PAREN=73, CLOSE_PAREN=74, IS_COMPLEMENT=75, EQUALS=76, AND_OP=77, - OR_OP=78, EQUALS_OP=79, NOT_EQUALS_OP=80; - public static final int - RULE_pml = 0, RULE_statement = 1, RULE_createPolicyStatement = 2, RULE_createAttributeStatement = 3, - RULE_createUserOrObjectStatement = 4, RULE_createObligationStatement = 5, - RULE_createRuleStatement = 6, RULE_subjectClause = 7, RULE_onClause = 8, - RULE_anyPe = 9, RULE_response = 10, RULE_responseBlock = 11, RULE_responseStatement = 12, - RULE_createProhibitionStatement = 13, RULE_prohibitionContainerList = 14, - RULE_prohibitionContainerExpression = 15, RULE_setNodePropertiesStatement = 16, - RULE_assignStatement = 17, RULE_deassignStatement = 18, RULE_associateStatement = 19, - RULE_dissociateStatement = 20, RULE_setResourceAccessRightsStatement = 21, - RULE_deleteStatement = 22, RULE_deleteType = 23, RULE_nodeType = 24, RULE_deleteRuleStatement = 25, - RULE_variableDeclarationStatement = 26, RULE_functionDefinitionStatement = 27, - RULE_formalArgList = 28, RULE_formalArg = 29, RULE_formalArgType = 30, - RULE_functionReturnStatement = 31, RULE_funcReturnType = 32, RULE_funcBody = 33, - RULE_foreachStatement = 34, RULE_forRangeStatement = 35, RULE_breakStatement = 36, - RULE_continueStatement = 37, RULE_functionInvokeStatement = 38, RULE_ifStatement = 39, - RULE_elseIfStatement = 40, RULE_elseStatement = 41, RULE_variableType = 42, - RULE_mapType = 43, RULE_arrayType = 44, RULE_statementBlock = 45, RULE_expression = 46, - RULE_array = 47, RULE_map = 48, RULE_mapEntry = 49, RULE_entryReference = 50, - RULE_literal = 51, RULE_variableReference = 52, RULE_functionInvoke = 53, - RULE_functionInvokeArgs = 54; - private static String[] makeRuleNames() { - return new String[] { - "pml", "statement", "createPolicyStatement", "createAttributeStatement", - "createUserOrObjectStatement", "createObligationStatement", "createRuleStatement", - "subjectClause", "onClause", "anyPe", "response", "responseBlock", "responseStatement", - "createProhibitionStatement", "prohibitionContainerList", "prohibitionContainerExpression", - "setNodePropertiesStatement", "assignStatement", "deassignStatement", - "associateStatement", "dissociateStatement", "setResourceAccessRightsStatement", - "deleteStatement", "deleteType", "nodeType", "deleteRuleStatement", "variableDeclarationStatement", - "functionDefinitionStatement", "formalArgList", "formalArg", "formalArgType", - "functionReturnStatement", "funcReturnType", "funcBody", "foreachStatement", - "forRangeStatement", "breakStatement", "continueStatement", "functionInvokeStatement", - "ifStatement", "elseIfStatement", "elseStatement", "variableType", "mapType", - "arrayType", "statementBlock", "expression", "array", "map", "mapEntry", - "entryReference", "literal", "variableReference", "functionInvoke", "functionInvokeArgs" - }; - } - public static final String[] ruleNames = makeRuleNames(); - - private static String[] makeLiteralNames() { - return new String[] { - null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, "','", "':'", "'{'", "'}'", "'['", "']'", - "'<'", "'>'", "'('", "')'", "'!'", "'='", "'&&'", "'||'", "'=='", "'!='" - }; - } - private static final String[] _LITERAL_NAMES = makeLiteralNames(); - private static String[] makeSymbolicNames() { - return new String[] { - null, "CREATE", "DELETE", "BREAK", "CONTINUE", "POLICY_ELEMENT", "RULE", - "WHEN", "PERFORMS", "AS", "ON", "DO", "ANY_USER", "USERS", "ANY_USER_WITH_ATTRIBUTE", - "PROCESS", "INTERSECTION", "UNION", "SET_RESOURCE_ACCESS_RIGHTS", "ASSIGN", - "DEASSIGN", "FROM", "SET_PROPERTIES", "OF", "TO", "ASSOCIATE", "AND", - "WITH", "DISSOCIATE", "DENY", "PROHIBITION", "OBLIGATION", "ACCESS_RIGHTS", - "POLICY_CLASS", "OBJECT_ATTRIBUTE", "USER_ATTRIBUTE", "OBJECT", "USER", - "ATTR", "ANY", "LET", "CONST", "FUNCTION", "RETURN", "BOOLEAN", "TRUE", - "FALSE", "STRING_TYPE", "BOOLEAN_TYPE", "VOID_TYPE", "ARRAY_TYPE", "MAP_TYPE", - "FOREACH", "FOR", "IN", "IF", "ELSE", "IN_RANGE", "NUMBER", "ID", "STRING", - "DOUBLE_QUOTE_STRING", "SINGLE_QUOTE_STRING", "LINE_COMMENT", "WS", "COMMA", - "COLON", "OPEN_CURLY", "CLOSE_CURLY", "OPEN_BRACKET", "CLOSE_BRACKET", - "OPEN_ANGLE_BRACKET", "CLOSE_ANGLE_BRACKET", "OPEN_PAREN", "CLOSE_PAREN", - "IS_COMPLEMENT", "EQUALS", "AND_OP", "OR_OP", "EQUALS_OP", "NOT_EQUALS_OP" - }; - } - private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); - public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); - - /** - * @deprecated Use {@link #VOCABULARY} instead. - */ - @Deprecated - public static final String[] tokenNames; - static { - tokenNames = new String[_SYMBOLIC_NAMES.length]; - for (int i = 0; i < tokenNames.length; i++) { - tokenNames[i] = VOCABULARY.getLiteralName(i); - if (tokenNames[i] == null) { - tokenNames[i] = VOCABULARY.getSymbolicName(i); - } - - if (tokenNames[i] == null) { - tokenNames[i] = ""; - } - } - } - - @Override - @Deprecated - public String[] getTokenNames() { - return tokenNames; - } - - @Override - - public Vocabulary getVocabulary() { - return VOCABULARY; - } - - @Override - public String getGrammarFileName() { return "PML.g4"; } - - @Override - public String[] getRuleNames() { return ruleNames; } - - @Override - public String getSerializedATN() { return _serializedATN; } - - @Override - public ATN getATN() { return _ATN; } - - public PMLParser(TokenStream input) { - super(input); - _interp = new ParserATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); - } - - public static class PmlContext extends ParserRuleContext { - public TerminalNode EOF() { return getToken(PMLParser.EOF, 0); } - public List statement() { - return getRuleContexts(StatementContext.class); - } - public StatementContext statement(int i) { - return getRuleContext(StatementContext.class,i); - } - public PmlContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_pml; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterPml(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitPml(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitPml(this); - else return visitor.visitChildren(this); - } - } - - public final PmlContext pml() throws RecognitionException { - PmlContext _localctx = new PmlContext(_ctx, getState()); - enterRule(_localctx, 0, RULE_pml); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(113); - _errHandler.sync(this); - _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CREATE) | (1L << DELETE) | (1L << BREAK) | (1L << CONTINUE) | (1L << SET_RESOURCE_ACCESS_RIGHTS) | (1L << ASSIGN) | (1L << DEASSIGN) | (1L << SET_PROPERTIES) | (1L << ASSOCIATE) | (1L << DISSOCIATE) | (1L << LET) | (1L << CONST) | (1L << FUNCTION) | (1L << RETURN) | (1L << FOREACH) | (1L << FOR) | (1L << IF) | (1L << ID))) != 0)) { - { - { - setState(110); - statement(); - } - } - setState(115); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(116); - match(EOF); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class StatementContext extends ParserRuleContext { - public CreatePolicyStatementContext createPolicyStatement() { - return getRuleContext(CreatePolicyStatementContext.class,0); - } - public CreateAttributeStatementContext createAttributeStatement() { - return getRuleContext(CreateAttributeStatementContext.class,0); - } - public CreateUserOrObjectStatementContext createUserOrObjectStatement() { - return getRuleContext(CreateUserOrObjectStatementContext.class,0); - } - public CreateObligationStatementContext createObligationStatement() { - return getRuleContext(CreateObligationStatementContext.class,0); - } - public CreateProhibitionStatementContext createProhibitionStatement() { - return getRuleContext(CreateProhibitionStatementContext.class,0); - } - public SetNodePropertiesStatementContext setNodePropertiesStatement() { - return getRuleContext(SetNodePropertiesStatementContext.class,0); - } - public AssignStatementContext assignStatement() { - return getRuleContext(AssignStatementContext.class,0); - } - public DeassignStatementContext deassignStatement() { - return getRuleContext(DeassignStatementContext.class,0); - } - public AssociateStatementContext associateStatement() { - return getRuleContext(AssociateStatementContext.class,0); - } - public DissociateStatementContext dissociateStatement() { - return getRuleContext(DissociateStatementContext.class,0); - } - public SetResourceAccessRightsStatementContext setResourceAccessRightsStatement() { - return getRuleContext(SetResourceAccessRightsStatementContext.class,0); - } - public DeleteStatementContext deleteStatement() { - return getRuleContext(DeleteStatementContext.class,0); - } - public DeleteRuleStatementContext deleteRuleStatement() { - return getRuleContext(DeleteRuleStatementContext.class,0); - } - public VariableDeclarationStatementContext variableDeclarationStatement() { - return getRuleContext(VariableDeclarationStatementContext.class,0); - } - public FunctionDefinitionStatementContext functionDefinitionStatement() { - return getRuleContext(FunctionDefinitionStatementContext.class,0); - } - public FunctionReturnStatementContext functionReturnStatement() { - return getRuleContext(FunctionReturnStatementContext.class,0); - } - public ForeachStatementContext foreachStatement() { - return getRuleContext(ForeachStatementContext.class,0); - } - public ForRangeStatementContext forRangeStatement() { - return getRuleContext(ForRangeStatementContext.class,0); - } - public BreakStatementContext breakStatement() { - return getRuleContext(BreakStatementContext.class,0); - } - public ContinueStatementContext continueStatement() { - return getRuleContext(ContinueStatementContext.class,0); - } - public FunctionInvokeStatementContext functionInvokeStatement() { - return getRuleContext(FunctionInvokeStatementContext.class,0); - } - public IfStatementContext ifStatement() { - return getRuleContext(IfStatementContext.class,0); - } - public StatementContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_statement; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterStatement(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitStatement(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitStatement(this); - else return visitor.visitChildren(this); - } - } - - public final StatementContext statement() throws RecognitionException { - StatementContext _localctx = new StatementContext(_ctx, getState()); - enterRule(_localctx, 2, RULE_statement); - try { - enterOuterAlt(_localctx, 1); - { - setState(140); - _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,1,_ctx) ) { - case 1: - { - setState(118); - createPolicyStatement(); - } - break; - case 2: - { - setState(119); - createAttributeStatement(); - } - break; - case 3: - { - setState(120); - createUserOrObjectStatement(); - } - break; - case 4: - { - setState(121); - createObligationStatement(); - } - break; - case 5: - { - setState(122); - createProhibitionStatement(); - } - break; - case 6: - { - setState(123); - setNodePropertiesStatement(); - } - break; - case 7: - { - setState(124); - assignStatement(); - } - break; - case 8: - { - setState(125); - deassignStatement(); - } - break; - case 9: - { - setState(126); - associateStatement(); - } - break; - case 10: - { - setState(127); - dissociateStatement(); - } - break; - case 11: - { - setState(128); - setResourceAccessRightsStatement(); - } - break; - case 12: - { - setState(129); - deleteStatement(); - } - break; - case 13: - { - setState(130); - deleteRuleStatement(); - } - break; - case 14: - { - setState(131); - variableDeclarationStatement(); - } - break; - case 15: - { - setState(132); - functionDefinitionStatement(); - } - break; - case 16: - { - setState(133); - functionReturnStatement(); - } - break; - case 17: - { - setState(134); - foreachStatement(); - } - break; - case 18: - { - setState(135); - forRangeStatement(); - } - break; - case 19: - { - setState(136); - breakStatement(); - } - break; - case 20: - { - setState(137); - continueStatement(); - } - break; - case 21: - { - setState(138); - functionInvokeStatement(); - } - break; - case 22: - { - setState(139); - ifStatement(); - } - break; - } - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class CreatePolicyStatementContext extends ParserRuleContext { - public TerminalNode CREATE() { return getToken(PMLParser.CREATE, 0); } - public TerminalNode POLICY_CLASS() { return getToken(PMLParser.POLICY_CLASS, 0); } - public ExpressionContext expression() { - return getRuleContext(ExpressionContext.class,0); - } - public CreatePolicyStatementContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_createPolicyStatement; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterCreatePolicyStatement(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitCreatePolicyStatement(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitCreatePolicyStatement(this); - else return visitor.visitChildren(this); - } - } - - public final CreatePolicyStatementContext createPolicyStatement() throws RecognitionException { - CreatePolicyStatementContext _localctx = new CreatePolicyStatementContext(_ctx, getState()); - enterRule(_localctx, 4, RULE_createPolicyStatement); - try { - enterOuterAlt(_localctx, 1); - { - setState(142); - match(CREATE); - setState(143); - match(POLICY_CLASS); - setState(144); - expression(0); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class CreateAttributeStatementContext extends ParserRuleContext { - public ExpressionContext name; - public ExpressionContext parents; - public TerminalNode CREATE() { return getToken(PMLParser.CREATE, 0); } - public TerminalNode IN() { return getToken(PMLParser.IN, 0); } - public TerminalNode OBJECT_ATTRIBUTE() { return getToken(PMLParser.OBJECT_ATTRIBUTE, 0); } - public TerminalNode USER_ATTRIBUTE() { return getToken(PMLParser.USER_ATTRIBUTE, 0); } - public List expression() { - return getRuleContexts(ExpressionContext.class); - } - public ExpressionContext expression(int i) { - return getRuleContext(ExpressionContext.class,i); - } - public CreateAttributeStatementContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_createAttributeStatement; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterCreateAttributeStatement(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitCreateAttributeStatement(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitCreateAttributeStatement(this); - else return visitor.visitChildren(this); - } - } - - public final CreateAttributeStatementContext createAttributeStatement() throws RecognitionException { - CreateAttributeStatementContext _localctx = new CreateAttributeStatementContext(_ctx, getState()); - enterRule(_localctx, 6, RULE_createAttributeStatement); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(146); - match(CREATE); - setState(147); - _la = _input.LA(1); - if ( !(_la==OBJECT_ATTRIBUTE || _la==USER_ATTRIBUTE) ) { - _errHandler.recoverInline(this); - } - else { - if ( _input.LA(1)==Token.EOF ) matchedEOF = true; - _errHandler.reportMatch(this); - consume(); - } - setState(148); - ((CreateAttributeStatementContext)_localctx).name = expression(0); - setState(149); - match(IN); - setState(150); - ((CreateAttributeStatementContext)_localctx).parents = expression(0); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class CreateUserOrObjectStatementContext extends ParserRuleContext { - public ExpressionContext name; - public ExpressionContext parents; - public TerminalNode CREATE() { return getToken(PMLParser.CREATE, 0); } - public TerminalNode IN() { return getToken(PMLParser.IN, 0); } - public TerminalNode USER() { return getToken(PMLParser.USER, 0); } - public TerminalNode OBJECT() { return getToken(PMLParser.OBJECT, 0); } - public List expression() { - return getRuleContexts(ExpressionContext.class); - } - public ExpressionContext expression(int i) { - return getRuleContext(ExpressionContext.class,i); - } - public CreateUserOrObjectStatementContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_createUserOrObjectStatement; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterCreateUserOrObjectStatement(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitCreateUserOrObjectStatement(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitCreateUserOrObjectStatement(this); - else return visitor.visitChildren(this); - } - } - - public final CreateUserOrObjectStatementContext createUserOrObjectStatement() throws RecognitionException { - CreateUserOrObjectStatementContext _localctx = new CreateUserOrObjectStatementContext(_ctx, getState()); - enterRule(_localctx, 8, RULE_createUserOrObjectStatement); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(152); - match(CREATE); - setState(153); - _la = _input.LA(1); - if ( !(_la==OBJECT || _la==USER) ) { - _errHandler.recoverInline(this); - } - else { - if ( _input.LA(1)==Token.EOF ) matchedEOF = true; - _errHandler.reportMatch(this); - consume(); - } - setState(154); - ((CreateUserOrObjectStatementContext)_localctx).name = expression(0); - setState(155); - match(IN); - setState(156); - ((CreateUserOrObjectStatementContext)_localctx).parents = expression(0); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class CreateObligationStatementContext extends ParserRuleContext { - public TerminalNode CREATE() { return getToken(PMLParser.CREATE, 0); } - public TerminalNode OBLIGATION() { return getToken(PMLParser.OBLIGATION, 0); } - public ExpressionContext expression() { - return getRuleContext(ExpressionContext.class,0); - } - public TerminalNode OPEN_CURLY() { return getToken(PMLParser.OPEN_CURLY, 0); } - public TerminalNode CLOSE_CURLY() { return getToken(PMLParser.CLOSE_CURLY, 0); } - public List createRuleStatement() { - return getRuleContexts(CreateRuleStatementContext.class); - } - public CreateRuleStatementContext createRuleStatement(int i) { - return getRuleContext(CreateRuleStatementContext.class,i); - } - public CreateObligationStatementContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_createObligationStatement; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterCreateObligationStatement(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitCreateObligationStatement(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitCreateObligationStatement(this); - else return visitor.visitChildren(this); - } - } - - public final CreateObligationStatementContext createObligationStatement() throws RecognitionException { - CreateObligationStatementContext _localctx = new CreateObligationStatementContext(_ctx, getState()); - enterRule(_localctx, 10, RULE_createObligationStatement); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(158); - match(CREATE); - setState(159); - match(OBLIGATION); - setState(160); - expression(0); - setState(161); - match(OPEN_CURLY); - setState(165); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==CREATE) { - { - { - setState(162); - createRuleStatement(); - } - } - setState(167); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(168); - match(CLOSE_CURLY); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class CreateRuleStatementContext extends ParserRuleContext { - public ExpressionContext ruleName; - public ExpressionContext performsClause; - public TerminalNode CREATE() { return getToken(PMLParser.CREATE, 0); } - public TerminalNode RULE() { return getToken(PMLParser.RULE, 0); } - public TerminalNode WHEN() { return getToken(PMLParser.WHEN, 0); } - public SubjectClauseContext subjectClause() { - return getRuleContext(SubjectClauseContext.class,0); - } - public TerminalNode PERFORMS() { return getToken(PMLParser.PERFORMS, 0); } - public ResponseContext response() { - return getRuleContext(ResponseContext.class,0); - } - public List expression() { - return getRuleContexts(ExpressionContext.class); - } - public ExpressionContext expression(int i) { - return getRuleContext(ExpressionContext.class,i); - } - public TerminalNode ON() { return getToken(PMLParser.ON, 0); } - public OnClauseContext onClause() { - return getRuleContext(OnClauseContext.class,0); - } - public CreateRuleStatementContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_createRuleStatement; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterCreateRuleStatement(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitCreateRuleStatement(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitCreateRuleStatement(this); - else return visitor.visitChildren(this); - } - } - - public final CreateRuleStatementContext createRuleStatement() throws RecognitionException { - CreateRuleStatementContext _localctx = new CreateRuleStatementContext(_ctx, getState()); - enterRule(_localctx, 12, RULE_createRuleStatement); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(170); - match(CREATE); - setState(171); - match(RULE); - setState(172); - ((CreateRuleStatementContext)_localctx).ruleName = expression(0); - setState(173); - match(WHEN); - setState(174); - subjectClause(); - setState(175); - match(PERFORMS); - setState(176); - ((CreateRuleStatementContext)_localctx).performsClause = expression(0); - setState(179); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==ON) { - { - setState(177); - match(ON); - setState(178); - onClause(); - } - } - - setState(181); - response(); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class SubjectClauseContext extends ParserRuleContext { - public SubjectClauseContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_subjectClause; } - - public SubjectClauseContext() { } - public void copyFrom(SubjectClauseContext ctx) { - super.copyFrom(ctx); - } - } - public static class UserSubjectContext extends SubjectClauseContext { - public ExpressionContext user; - public TerminalNode USER() { return getToken(PMLParser.USER, 0); } - public ExpressionContext expression() { - return getRuleContext(ExpressionContext.class,0); - } - public UserSubjectContext(SubjectClauseContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterUserSubject(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitUserSubject(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitUserSubject(this); - else return visitor.visitChildren(this); - } - } - public static class UsersListSubjectContext extends SubjectClauseContext { - public ExpressionContext users; - public TerminalNode USERS() { return getToken(PMLParser.USERS, 0); } - public ExpressionContext expression() { - return getRuleContext(ExpressionContext.class,0); - } - public UsersListSubjectContext(SubjectClauseContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterUsersListSubject(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitUsersListSubject(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitUsersListSubject(this); - else return visitor.visitChildren(this); - } - } - public static class UserAttrSubjectContext extends SubjectClauseContext { - public ExpressionContext attribute; - public TerminalNode ANY_USER_WITH_ATTRIBUTE() { return getToken(PMLParser.ANY_USER_WITH_ATTRIBUTE, 0); } - public ExpressionContext expression() { - return getRuleContext(ExpressionContext.class,0); - } - public UserAttrSubjectContext(SubjectClauseContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterUserAttrSubject(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitUserAttrSubject(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitUserAttrSubject(this); - else return visitor.visitChildren(this); - } - } - public static class ProcessSubjectContext extends SubjectClauseContext { - public ExpressionContext process; - public TerminalNode PROCESS() { return getToken(PMLParser.PROCESS, 0); } - public ExpressionContext expression() { - return getRuleContext(ExpressionContext.class,0); - } - public ProcessSubjectContext(SubjectClauseContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterProcessSubject(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitProcessSubject(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitProcessSubject(this); - else return visitor.visitChildren(this); - } - } - public static class AnyUserSubjectContext extends SubjectClauseContext { - public TerminalNode ANY_USER() { return getToken(PMLParser.ANY_USER, 0); } - public AnyUserSubjectContext(SubjectClauseContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterAnyUserSubject(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitAnyUserSubject(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitAnyUserSubject(this); - else return visitor.visitChildren(this); - } - } - - public final SubjectClauseContext subjectClause() throws RecognitionException { - SubjectClauseContext _localctx = new SubjectClauseContext(_ctx, getState()); - enterRule(_localctx, 14, RULE_subjectClause); - try { - setState(192); - _errHandler.sync(this); - switch (_input.LA(1)) { - case ANY_USER: - _localctx = new AnyUserSubjectContext(_localctx); - enterOuterAlt(_localctx, 1); - { - setState(183); - match(ANY_USER); - } - break; - case USER: - _localctx = new UserSubjectContext(_localctx); - enterOuterAlt(_localctx, 2); - { - setState(184); - match(USER); - setState(185); - ((UserSubjectContext)_localctx).user = expression(0); - } - break; - case USERS: - _localctx = new UsersListSubjectContext(_localctx); - enterOuterAlt(_localctx, 3); - { - setState(186); - match(USERS); - setState(187); - ((UsersListSubjectContext)_localctx).users = expression(0); - } - break; - case ANY_USER_WITH_ATTRIBUTE: - _localctx = new UserAttrSubjectContext(_localctx); - enterOuterAlt(_localctx, 4); - { - setState(188); - match(ANY_USER_WITH_ATTRIBUTE); - setState(189); - ((UserAttrSubjectContext)_localctx).attribute = expression(0); - } - break; - case PROCESS: - _localctx = new ProcessSubjectContext(_localctx); - enterOuterAlt(_localctx, 5); - { - setState(190); - match(PROCESS); - setState(191); - ((ProcessSubjectContext)_localctx).process = expression(0); - } - break; - default: - throw new NoViableAltException(this); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class OnClauseContext extends ParserRuleContext { - public OnClauseContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_onClause; } - - public OnClauseContext() { } - public void copyFrom(OnClauseContext ctx) { - super.copyFrom(ctx); - } - } - public static class AnyContainedInContext extends OnClauseContext { - public AnyPeContext anyPe() { - return getRuleContext(AnyPeContext.class,0); - } - public TerminalNode IN() { return getToken(PMLParser.IN, 0); } - public ExpressionContext expression() { - return getRuleContext(ExpressionContext.class,0); - } - public AnyContainedInContext(OnClauseContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterAnyContainedIn(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitAnyContainedIn(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitAnyContainedIn(this); - else return visitor.visitChildren(this); - } - } - public static class AnyOfSetContext extends OnClauseContext { - public AnyPeContext anyPe() { - return getRuleContext(AnyPeContext.class,0); - } - public TerminalNode OF() { return getToken(PMLParser.OF, 0); } - public ExpressionContext expression() { - return getRuleContext(ExpressionContext.class,0); - } - public AnyOfSetContext(OnClauseContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterAnyOfSet(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitAnyOfSet(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitAnyOfSet(this); - else return visitor.visitChildren(this); - } - } - public static class AnyPolicyElementContext extends OnClauseContext { - public AnyPeContext anyPe() { - return getRuleContext(AnyPeContext.class,0); - } - public AnyPolicyElementContext(OnClauseContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterAnyPolicyElement(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitAnyPolicyElement(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitAnyPolicyElement(this); - else return visitor.visitChildren(this); - } - } - public static class PolicyElementContext extends OnClauseContext { - public ExpressionContext expression() { - return getRuleContext(ExpressionContext.class,0); - } - public PolicyElementContext(OnClauseContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterPolicyElement(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitPolicyElement(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitPolicyElement(this); - else return visitor.visitChildren(this); - } - } - - public final OnClauseContext onClause() throws RecognitionException { - OnClauseContext _localctx = new OnClauseContext(_ctx, getState()); - enterRule(_localctx, 16, RULE_onClause); - try { - setState(204); - _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,5,_ctx) ) { - case 1: - _localctx = new PolicyElementContext(_localctx); - enterOuterAlt(_localctx, 1); - { - setState(194); - expression(0); - } - break; - case 2: - _localctx = new AnyPolicyElementContext(_localctx); - enterOuterAlt(_localctx, 2); - { - setState(195); - anyPe(); - } - break; - case 3: - _localctx = new AnyContainedInContext(_localctx); - enterOuterAlt(_localctx, 3); - { - setState(196); - anyPe(); - setState(197); - match(IN); - setState(198); - expression(0); - } - break; - case 4: - _localctx = new AnyOfSetContext(_localctx); - enterOuterAlt(_localctx, 4); - { - setState(200); - anyPe(); - setState(201); - match(OF); - setState(202); - expression(0); - } - break; - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class AnyPeContext extends ParserRuleContext { - public TerminalNode ANY() { return getToken(PMLParser.ANY, 0); } - public TerminalNode POLICY_ELEMENT() { return getToken(PMLParser.POLICY_ELEMENT, 0); } - public AnyPeContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_anyPe; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterAnyPe(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitAnyPe(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitAnyPe(this); - else return visitor.visitChildren(this); - } - } - - public final AnyPeContext anyPe() throws RecognitionException { - AnyPeContext _localctx = new AnyPeContext(_ctx, getState()); - enterRule(_localctx, 18, RULE_anyPe); - try { - enterOuterAlt(_localctx, 1); - { - setState(206); - match(ANY); - setState(207); - match(POLICY_ELEMENT); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class ResponseContext extends ParserRuleContext { - public TerminalNode DO() { return getToken(PMLParser.DO, 0); } - public TerminalNode OPEN_PAREN() { return getToken(PMLParser.OPEN_PAREN, 0); } - public TerminalNode ID() { return getToken(PMLParser.ID, 0); } - public TerminalNode CLOSE_PAREN() { return getToken(PMLParser.CLOSE_PAREN, 0); } - public ResponseBlockContext responseBlock() { - return getRuleContext(ResponseBlockContext.class,0); - } - public ResponseContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_response; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterResponse(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitResponse(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitResponse(this); - else return visitor.visitChildren(this); - } - } - - public final ResponseContext response() throws RecognitionException { - ResponseContext _localctx = new ResponseContext(_ctx, getState()); - enterRule(_localctx, 20, RULE_response); - try { - enterOuterAlt(_localctx, 1); - { - setState(209); - match(DO); - setState(210); - match(OPEN_PAREN); - setState(211); - match(ID); - setState(212); - match(CLOSE_PAREN); - setState(213); - responseBlock(); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class ResponseBlockContext extends ParserRuleContext { - public TerminalNode OPEN_CURLY() { return getToken(PMLParser.OPEN_CURLY, 0); } - public TerminalNode CLOSE_CURLY() { return getToken(PMLParser.CLOSE_CURLY, 0); } - public List responseStatement() { - return getRuleContexts(ResponseStatementContext.class); - } - public ResponseStatementContext responseStatement(int i) { - return getRuleContext(ResponseStatementContext.class,i); - } - public ResponseBlockContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_responseBlock; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterResponseBlock(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitResponseBlock(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitResponseBlock(this); - else return visitor.visitChildren(this); - } - } - - public final ResponseBlockContext responseBlock() throws RecognitionException { - ResponseBlockContext _localctx = new ResponseBlockContext(_ctx, getState()); - enterRule(_localctx, 22, RULE_responseBlock); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(215); - match(OPEN_CURLY); - setState(219); - _errHandler.sync(this); - _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CREATE) | (1L << DELETE) | (1L << BREAK) | (1L << CONTINUE) | (1L << SET_RESOURCE_ACCESS_RIGHTS) | (1L << ASSIGN) | (1L << DEASSIGN) | (1L << SET_PROPERTIES) | (1L << ASSOCIATE) | (1L << DISSOCIATE) | (1L << LET) | (1L << CONST) | (1L << FUNCTION) | (1L << RETURN) | (1L << FOREACH) | (1L << FOR) | (1L << IF) | (1L << ID))) != 0)) { - { - { - setState(216); - responseStatement(); - } - } - setState(221); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(222); - match(CLOSE_CURLY); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class ResponseStatementContext extends ParserRuleContext { - public StatementContext statement() { - return getRuleContext(StatementContext.class,0); - } - public CreateRuleStatementContext createRuleStatement() { - return getRuleContext(CreateRuleStatementContext.class,0); - } - public DeleteRuleStatementContext deleteRuleStatement() { - return getRuleContext(DeleteRuleStatementContext.class,0); - } - public ResponseStatementContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_responseStatement; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterResponseStatement(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitResponseStatement(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitResponseStatement(this); - else return visitor.visitChildren(this); - } - } - - public final ResponseStatementContext responseStatement() throws RecognitionException { - ResponseStatementContext _localctx = new ResponseStatementContext(_ctx, getState()); - enterRule(_localctx, 24, RULE_responseStatement); - try { - setState(227); - _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,7,_ctx) ) { - case 1: - enterOuterAlt(_localctx, 1); - { - setState(224); - statement(); - } - break; - case 2: - enterOuterAlt(_localctx, 2); - { - setState(225); - createRuleStatement(); - } - break; - case 3: - enterOuterAlt(_localctx, 3); - { - setState(226); - deleteRuleStatement(); - } - break; - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class CreateProhibitionStatementContext extends ParserRuleContext { - public ExpressionContext name; - public ExpressionContext subject; - public ExpressionContext accessRights; - public ProhibitionContainerListContext containers; - public TerminalNode CREATE() { return getToken(PMLParser.CREATE, 0); } - public TerminalNode PROHIBITION() { return getToken(PMLParser.PROHIBITION, 0); } - public TerminalNode DENY() { return getToken(PMLParser.DENY, 0); } - public TerminalNode ACCESS_RIGHTS() { return getToken(PMLParser.ACCESS_RIGHTS, 0); } - public TerminalNode ON() { return getToken(PMLParser.ON, 0); } - public TerminalNode OF() { return getToken(PMLParser.OF, 0); } - public List expression() { - return getRuleContexts(ExpressionContext.class); - } - public ExpressionContext expression(int i) { - return getRuleContext(ExpressionContext.class,i); - } - public TerminalNode USER() { return getToken(PMLParser.USER, 0); } - public TerminalNode USER_ATTRIBUTE() { return getToken(PMLParser.USER_ATTRIBUTE, 0); } - public TerminalNode PROCESS() { return getToken(PMLParser.PROCESS, 0); } - public TerminalNode INTERSECTION() { return getToken(PMLParser.INTERSECTION, 0); } - public TerminalNode UNION() { return getToken(PMLParser.UNION, 0); } - public ProhibitionContainerListContext prohibitionContainerList() { - return getRuleContext(ProhibitionContainerListContext.class,0); - } - public CreateProhibitionStatementContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_createProhibitionStatement; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterCreateProhibitionStatement(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitCreateProhibitionStatement(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitCreateProhibitionStatement(this); - else return visitor.visitChildren(this); - } - } - - public final CreateProhibitionStatementContext createProhibitionStatement() throws RecognitionException { - CreateProhibitionStatementContext _localctx = new CreateProhibitionStatementContext(_ctx, getState()); - enterRule(_localctx, 26, RULE_createProhibitionStatement); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(229); - match(CREATE); - setState(230); - match(PROHIBITION); - setState(231); - ((CreateProhibitionStatementContext)_localctx).name = expression(0); - setState(232); - match(DENY); - setState(233); - _la = _input.LA(1); - if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << PROCESS) | (1L << USER_ATTRIBUTE) | (1L << USER))) != 0)) ) { - _errHandler.recoverInline(this); - } - else { - if ( _input.LA(1)==Token.EOF ) matchedEOF = true; - _errHandler.reportMatch(this); - consume(); - } - setState(234); - ((CreateProhibitionStatementContext)_localctx).subject = expression(0); - setState(235); - match(ACCESS_RIGHTS); - setState(236); - ((CreateProhibitionStatementContext)_localctx).accessRights = expression(0); - setState(237); - match(ON); - setState(238); - _la = _input.LA(1); - if ( !(_la==INTERSECTION || _la==UNION) ) { - _errHandler.recoverInline(this); - } - else { - if ( _input.LA(1)==Token.EOF ) matchedEOF = true; - _errHandler.reportMatch(this); - consume(); - } - setState(239); - match(OF); - setState(240); - ((CreateProhibitionStatementContext)_localctx).containers = prohibitionContainerList(); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class ProhibitionContainerListContext extends ParserRuleContext { - public TerminalNode OPEN_BRACKET() { return getToken(PMLParser.OPEN_BRACKET, 0); } - public TerminalNode CLOSE_BRACKET() { return getToken(PMLParser.CLOSE_BRACKET, 0); } - public List prohibitionContainerExpression() { - return getRuleContexts(ProhibitionContainerExpressionContext.class); - } - public ProhibitionContainerExpressionContext prohibitionContainerExpression(int i) { - return getRuleContext(ProhibitionContainerExpressionContext.class,i); - } - public List COMMA() { return getTokens(PMLParser.COMMA); } - public TerminalNode COMMA(int i) { - return getToken(PMLParser.COMMA, i); - } - public ProhibitionContainerListContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_prohibitionContainerList; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterProhibitionContainerList(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitProhibitionContainerList(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitProhibitionContainerList(this); - else return visitor.visitChildren(this); - } - } - - public final ProhibitionContainerListContext prohibitionContainerList() throws RecognitionException { - ProhibitionContainerListContext _localctx = new ProhibitionContainerListContext(_ctx, getState()); - enterRule(_localctx, 28, RULE_prohibitionContainerList); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(242); - match(OPEN_BRACKET); - setState(251); - _errHandler.sync(this); - _la = _input.LA(1); - if (((((_la - 44)) & ~0x3f) == 0 && ((1L << (_la - 44)) & ((1L << (BOOLEAN - 44)) | (1L << (NUMBER - 44)) | (1L << (ID - 44)) | (1L << (STRING - 44)) | (1L << (OPEN_CURLY - 44)) | (1L << (OPEN_BRACKET - 44)) | (1L << (IS_COMPLEMENT - 44)))) != 0)) { - { - setState(243); - prohibitionContainerExpression(); - setState(248); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==COMMA) { - { - { - setState(244); - match(COMMA); - setState(245); - prohibitionContainerExpression(); - } - } - setState(250); - _errHandler.sync(this); - _la = _input.LA(1); - } - } - } - - setState(253); - match(CLOSE_BRACKET); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class ProhibitionContainerExpressionContext extends ParserRuleContext { - public ExpressionContext container; - public ExpressionContext expression() { - return getRuleContext(ExpressionContext.class,0); - } - public TerminalNode IS_COMPLEMENT() { return getToken(PMLParser.IS_COMPLEMENT, 0); } - public ProhibitionContainerExpressionContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_prohibitionContainerExpression; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterProhibitionContainerExpression(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitProhibitionContainerExpression(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitProhibitionContainerExpression(this); - else return visitor.visitChildren(this); - } - } - - public final ProhibitionContainerExpressionContext prohibitionContainerExpression() throws RecognitionException { - ProhibitionContainerExpressionContext _localctx = new ProhibitionContainerExpressionContext(_ctx, getState()); - enterRule(_localctx, 30, RULE_prohibitionContainerExpression); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(256); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==IS_COMPLEMENT) { - { - setState(255); - match(IS_COMPLEMENT); - } - } - - setState(258); - ((ProhibitionContainerExpressionContext)_localctx).container = expression(0); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class SetNodePropertiesStatementContext extends ParserRuleContext { - public ExpressionContext name; - public ExpressionContext properties; - public TerminalNode SET_PROPERTIES() { return getToken(PMLParser.SET_PROPERTIES, 0); } - public TerminalNode OF() { return getToken(PMLParser.OF, 0); } - public TerminalNode TO() { return getToken(PMLParser.TO, 0); } - public List expression() { - return getRuleContexts(ExpressionContext.class); - } - public ExpressionContext expression(int i) { - return getRuleContext(ExpressionContext.class,i); - } - public SetNodePropertiesStatementContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_setNodePropertiesStatement; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterSetNodePropertiesStatement(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitSetNodePropertiesStatement(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitSetNodePropertiesStatement(this); - else return visitor.visitChildren(this); - } - } - - public final SetNodePropertiesStatementContext setNodePropertiesStatement() throws RecognitionException { - SetNodePropertiesStatementContext _localctx = new SetNodePropertiesStatementContext(_ctx, getState()); - enterRule(_localctx, 32, RULE_setNodePropertiesStatement); - try { - enterOuterAlt(_localctx, 1); - { - setState(260); - match(SET_PROPERTIES); - setState(261); - match(OF); - setState(262); - ((SetNodePropertiesStatementContext)_localctx).name = expression(0); - setState(263); - match(TO); - setState(264); - ((SetNodePropertiesStatementContext)_localctx).properties = expression(0); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class AssignStatementContext extends ParserRuleContext { - public ExpressionContext childNode; - public ExpressionContext parentNodes; - public TerminalNode ASSIGN() { return getToken(PMLParser.ASSIGN, 0); } - public TerminalNode TO() { return getToken(PMLParser.TO, 0); } - public List expression() { - return getRuleContexts(ExpressionContext.class); - } - public ExpressionContext expression(int i) { - return getRuleContext(ExpressionContext.class,i); - } - public AssignStatementContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_assignStatement; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterAssignStatement(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitAssignStatement(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitAssignStatement(this); - else return visitor.visitChildren(this); - } - } - - public final AssignStatementContext assignStatement() throws RecognitionException { - AssignStatementContext _localctx = new AssignStatementContext(_ctx, getState()); - enterRule(_localctx, 34, RULE_assignStatement); - try { - enterOuterAlt(_localctx, 1); - { - setState(266); - match(ASSIGN); - setState(267); - ((AssignStatementContext)_localctx).childNode = expression(0); - setState(268); - match(TO); - setState(269); - ((AssignStatementContext)_localctx).parentNodes = expression(0); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class DeassignStatementContext extends ParserRuleContext { - public ExpressionContext childNode; - public ExpressionContext parentNodes; - public TerminalNode DEASSIGN() { return getToken(PMLParser.DEASSIGN, 0); } - public TerminalNode FROM() { return getToken(PMLParser.FROM, 0); } - public List expression() { - return getRuleContexts(ExpressionContext.class); - } - public ExpressionContext expression(int i) { - return getRuleContext(ExpressionContext.class,i); - } - public DeassignStatementContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_deassignStatement; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterDeassignStatement(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitDeassignStatement(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitDeassignStatement(this); - else return visitor.visitChildren(this); - } - } - - public final DeassignStatementContext deassignStatement() throws RecognitionException { - DeassignStatementContext _localctx = new DeassignStatementContext(_ctx, getState()); - enterRule(_localctx, 36, RULE_deassignStatement); - try { - enterOuterAlt(_localctx, 1); - { - setState(271); - match(DEASSIGN); - setState(272); - ((DeassignStatementContext)_localctx).childNode = expression(0); - setState(273); - match(FROM); - setState(274); - ((DeassignStatementContext)_localctx).parentNodes = expression(0); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class AssociateStatementContext extends ParserRuleContext { - public ExpressionContext ua; - public ExpressionContext target; - public ExpressionContext accessRights; - public TerminalNode ASSOCIATE() { return getToken(PMLParser.ASSOCIATE, 0); } - public TerminalNode AND() { return getToken(PMLParser.AND, 0); } - public TerminalNode WITH() { return getToken(PMLParser.WITH, 0); } - public List expression() { - return getRuleContexts(ExpressionContext.class); - } - public ExpressionContext expression(int i) { - return getRuleContext(ExpressionContext.class,i); - } - public AssociateStatementContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_associateStatement; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterAssociateStatement(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitAssociateStatement(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitAssociateStatement(this); - else return visitor.visitChildren(this); - } - } - - public final AssociateStatementContext associateStatement() throws RecognitionException { - AssociateStatementContext _localctx = new AssociateStatementContext(_ctx, getState()); - enterRule(_localctx, 38, RULE_associateStatement); - try { - enterOuterAlt(_localctx, 1); - { - setState(276); - match(ASSOCIATE); - setState(277); - ((AssociateStatementContext)_localctx).ua = expression(0); - setState(278); - match(AND); - setState(279); - ((AssociateStatementContext)_localctx).target = expression(0); - setState(280); - match(WITH); - setState(281); - ((AssociateStatementContext)_localctx).accessRights = expression(0); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class DissociateStatementContext extends ParserRuleContext { - public ExpressionContext ua; - public ExpressionContext target; - public TerminalNode DISSOCIATE() { return getToken(PMLParser.DISSOCIATE, 0); } - public TerminalNode AND() { return getToken(PMLParser.AND, 0); } - public List expression() { - return getRuleContexts(ExpressionContext.class); - } - public ExpressionContext expression(int i) { - return getRuleContext(ExpressionContext.class,i); - } - public DissociateStatementContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_dissociateStatement; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterDissociateStatement(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitDissociateStatement(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitDissociateStatement(this); - else return visitor.visitChildren(this); - } - } - - public final DissociateStatementContext dissociateStatement() throws RecognitionException { - DissociateStatementContext _localctx = new DissociateStatementContext(_ctx, getState()); - enterRule(_localctx, 40, RULE_dissociateStatement); - try { - enterOuterAlt(_localctx, 1); - { - setState(283); - match(DISSOCIATE); - setState(284); - ((DissociateStatementContext)_localctx).ua = expression(0); - setState(285); - match(AND); - setState(286); - ((DissociateStatementContext)_localctx).target = expression(0); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class SetResourceAccessRightsStatementContext extends ParserRuleContext { - public ExpressionContext accessRights; - public TerminalNode SET_RESOURCE_ACCESS_RIGHTS() { return getToken(PMLParser.SET_RESOURCE_ACCESS_RIGHTS, 0); } - public ExpressionContext expression() { - return getRuleContext(ExpressionContext.class,0); - } - public SetResourceAccessRightsStatementContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_setResourceAccessRightsStatement; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterSetResourceAccessRightsStatement(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitSetResourceAccessRightsStatement(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitSetResourceAccessRightsStatement(this); - else return visitor.visitChildren(this); - } - } - - public final SetResourceAccessRightsStatementContext setResourceAccessRightsStatement() throws RecognitionException { - SetResourceAccessRightsStatementContext _localctx = new SetResourceAccessRightsStatementContext(_ctx, getState()); - enterRule(_localctx, 42, RULE_setResourceAccessRightsStatement); - try { - enterOuterAlt(_localctx, 1); - { - setState(288); - match(SET_RESOURCE_ACCESS_RIGHTS); - setState(289); - ((SetResourceAccessRightsStatementContext)_localctx).accessRights = expression(0); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class DeleteStatementContext extends ParserRuleContext { - public TerminalNode DELETE() { return getToken(PMLParser.DELETE, 0); } - public DeleteTypeContext deleteType() { - return getRuleContext(DeleteTypeContext.class,0); - } - public ExpressionContext expression() { - return getRuleContext(ExpressionContext.class,0); - } - public DeleteStatementContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_deleteStatement; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterDeleteStatement(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitDeleteStatement(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitDeleteStatement(this); - else return visitor.visitChildren(this); - } - } - - public final DeleteStatementContext deleteStatement() throws RecognitionException { - DeleteStatementContext _localctx = new DeleteStatementContext(_ctx, getState()); - enterRule(_localctx, 44, RULE_deleteStatement); - try { - enterOuterAlt(_localctx, 1); - { - setState(291); - match(DELETE); - setState(292); - deleteType(); - setState(293); - expression(0); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class DeleteTypeContext extends ParserRuleContext { - public DeleteTypeContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_deleteType; } - - public DeleteTypeContext() { } - public void copyFrom(DeleteTypeContext ctx) { - super.copyFrom(ctx); - } - } - public static class DeleteNodeContext extends DeleteTypeContext { - public NodeTypeContext nodeType() { - return getRuleContext(NodeTypeContext.class,0); - } - public DeleteNodeContext(DeleteTypeContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterDeleteNode(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitDeleteNode(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitDeleteNode(this); - else return visitor.visitChildren(this); - } - } - public static class DeleteProhibitionContext extends DeleteTypeContext { - public TerminalNode PROHIBITION() { return getToken(PMLParser.PROHIBITION, 0); } - public DeleteProhibitionContext(DeleteTypeContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterDeleteProhibition(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitDeleteProhibition(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitDeleteProhibition(this); - else return visitor.visitChildren(this); - } - } - public static class DeleteObligationContext extends DeleteTypeContext { - public TerminalNode OBLIGATION() { return getToken(PMLParser.OBLIGATION, 0); } - public DeleteObligationContext(DeleteTypeContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterDeleteObligation(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitDeleteObligation(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitDeleteObligation(this); - else return visitor.visitChildren(this); - } - } - - public final DeleteTypeContext deleteType() throws RecognitionException { - DeleteTypeContext _localctx = new DeleteTypeContext(_ctx, getState()); - enterRule(_localctx, 46, RULE_deleteType); - try { - setState(298); - _errHandler.sync(this); - switch (_input.LA(1)) { - case POLICY_CLASS: - case OBJECT_ATTRIBUTE: - case USER_ATTRIBUTE: - case OBJECT: - case USER: - _localctx = new DeleteNodeContext(_localctx); - enterOuterAlt(_localctx, 1); - { - setState(295); - nodeType(); - } - break; - case OBLIGATION: - _localctx = new DeleteObligationContext(_localctx); - enterOuterAlt(_localctx, 2); - { - setState(296); - match(OBLIGATION); - } - break; - case PROHIBITION: - _localctx = new DeleteProhibitionContext(_localctx); - enterOuterAlt(_localctx, 3); - { - setState(297); - match(PROHIBITION); - } - break; - default: - throw new NoViableAltException(this); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class NodeTypeContext extends ParserRuleContext { - public TerminalNode POLICY_CLASS() { return getToken(PMLParser.POLICY_CLASS, 0); } - public TerminalNode OBJECT_ATTRIBUTE() { return getToken(PMLParser.OBJECT_ATTRIBUTE, 0); } - public TerminalNode USER_ATTRIBUTE() { return getToken(PMLParser.USER_ATTRIBUTE, 0); } - public TerminalNode OBJECT() { return getToken(PMLParser.OBJECT, 0); } - public TerminalNode USER() { return getToken(PMLParser.USER, 0); } - public NodeTypeContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_nodeType; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterNodeType(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitNodeType(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitNodeType(this); - else return visitor.visitChildren(this); - } - } - - public final NodeTypeContext nodeType() throws RecognitionException { - NodeTypeContext _localctx = new NodeTypeContext(_ctx, getState()); - enterRule(_localctx, 48, RULE_nodeType); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(300); - _la = _input.LA(1); - if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << POLICY_CLASS) | (1L << OBJECT_ATTRIBUTE) | (1L << USER_ATTRIBUTE) | (1L << OBJECT) | (1L << USER))) != 0)) ) { - _errHandler.recoverInline(this); - } - else { - if ( _input.LA(1)==Token.EOF ) matchedEOF = true; - _errHandler.reportMatch(this); - consume(); - } - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class DeleteRuleStatementContext extends ParserRuleContext { - public ExpressionContext ruleName; - public ExpressionContext obligationName; - public TerminalNode DELETE() { return getToken(PMLParser.DELETE, 0); } - public TerminalNode RULE() { return getToken(PMLParser.RULE, 0); } - public TerminalNode FROM() { return getToken(PMLParser.FROM, 0); } - public TerminalNode OBLIGATION() { return getToken(PMLParser.OBLIGATION, 0); } - public List expression() { - return getRuleContexts(ExpressionContext.class); - } - public ExpressionContext expression(int i) { - return getRuleContext(ExpressionContext.class,i); - } - public DeleteRuleStatementContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_deleteRuleStatement; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterDeleteRuleStatement(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitDeleteRuleStatement(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitDeleteRuleStatement(this); - else return visitor.visitChildren(this); - } - } - - public final DeleteRuleStatementContext deleteRuleStatement() throws RecognitionException { - DeleteRuleStatementContext _localctx = new DeleteRuleStatementContext(_ctx, getState()); - enterRule(_localctx, 50, RULE_deleteRuleStatement); - try { - enterOuterAlt(_localctx, 1); - { - setState(302); - match(DELETE); - setState(303); - match(RULE); - setState(304); - ((DeleteRuleStatementContext)_localctx).ruleName = expression(0); - setState(305); - match(FROM); - setState(306); - match(OBLIGATION); - setState(307); - ((DeleteRuleStatementContext)_localctx).obligationName = expression(0); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class VariableDeclarationStatementContext extends ParserRuleContext { - public TerminalNode ID() { return getToken(PMLParser.ID, 0); } - public TerminalNode EQUALS() { return getToken(PMLParser.EQUALS, 0); } - public ExpressionContext expression() { - return getRuleContext(ExpressionContext.class,0); - } - public TerminalNode LET() { return getToken(PMLParser.LET, 0); } - public TerminalNode CONST() { return getToken(PMLParser.CONST, 0); } - public VariableDeclarationStatementContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_variableDeclarationStatement; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterVariableDeclarationStatement(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitVariableDeclarationStatement(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitVariableDeclarationStatement(this); - else return visitor.visitChildren(this); - } - } - - public final VariableDeclarationStatementContext variableDeclarationStatement() throws RecognitionException { - VariableDeclarationStatementContext _localctx = new VariableDeclarationStatementContext(_ctx, getState()); - enterRule(_localctx, 52, RULE_variableDeclarationStatement); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(310); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==LET || _la==CONST) { - { - setState(309); - _la = _input.LA(1); - if ( !(_la==LET || _la==CONST) ) { - _errHandler.recoverInline(this); - } - else { - if ( _input.LA(1)==Token.EOF ) matchedEOF = true; - _errHandler.reportMatch(this); - consume(); - } - } - } - - setState(312); - match(ID); - setState(313); - match(EQUALS); - setState(314); - expression(0); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class FunctionDefinitionStatementContext extends ParserRuleContext { - public TerminalNode FUNCTION() { return getToken(PMLParser.FUNCTION, 0); } - public TerminalNode ID() { return getToken(PMLParser.ID, 0); } - public TerminalNode OPEN_PAREN() { return getToken(PMLParser.OPEN_PAREN, 0); } - public FormalArgListContext formalArgList() { - return getRuleContext(FormalArgListContext.class,0); - } - public TerminalNode CLOSE_PAREN() { return getToken(PMLParser.CLOSE_PAREN, 0); } - public FuncBodyContext funcBody() { - return getRuleContext(FuncBodyContext.class,0); - } - public FuncReturnTypeContext funcReturnType() { - return getRuleContext(FuncReturnTypeContext.class,0); - } - public FunctionDefinitionStatementContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_functionDefinitionStatement; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterFunctionDefinitionStatement(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitFunctionDefinitionStatement(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitFunctionDefinitionStatement(this); - else return visitor.visitChildren(this); - } - } - - public final FunctionDefinitionStatementContext functionDefinitionStatement() throws RecognitionException { - FunctionDefinitionStatementContext _localctx = new FunctionDefinitionStatementContext(_ctx, getState()); - enterRule(_localctx, 54, RULE_functionDefinitionStatement); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(316); - match(FUNCTION); - setState(317); - match(ID); - setState(318); - match(OPEN_PAREN); - setState(319); - formalArgList(); - setState(320); - match(CLOSE_PAREN); - setState(322); - _errHandler.sync(this); - _la = _input.LA(1); - if (((((_la - 39)) & ~0x3f) == 0 && ((1L << (_la - 39)) & ((1L << (ANY - 39)) | (1L << (STRING_TYPE - 39)) | (1L << (BOOLEAN_TYPE - 39)) | (1L << (VOID_TYPE - 39)) | (1L << (MAP_TYPE - 39)) | (1L << (OPEN_BRACKET - 39)))) != 0)) { - { - setState(321); - funcReturnType(); - } - } - - setState(324); - funcBody(); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class FormalArgListContext extends ParserRuleContext { - public List formalArg() { - return getRuleContexts(FormalArgContext.class); - } - public FormalArgContext formalArg(int i) { - return getRuleContext(FormalArgContext.class,i); - } - public List COMMA() { return getTokens(PMLParser.COMMA); } - public TerminalNode COMMA(int i) { - return getToken(PMLParser.COMMA, i); - } - public FormalArgListContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_formalArgList; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterFormalArgList(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitFormalArgList(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitFormalArgList(this); - else return visitor.visitChildren(this); - } - } - - public final FormalArgListContext formalArgList() throws RecognitionException { - FormalArgListContext _localctx = new FormalArgListContext(_ctx, getState()); - enterRule(_localctx, 56, RULE_formalArgList); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(334); - _errHandler.sync(this); - _la = _input.LA(1); - if (((((_la - 39)) & ~0x3f) == 0 && ((1L << (_la - 39)) & ((1L << (ANY - 39)) | (1L << (STRING_TYPE - 39)) | (1L << (BOOLEAN_TYPE - 39)) | (1L << (MAP_TYPE - 39)) | (1L << (OPEN_BRACKET - 39)))) != 0)) { - { - setState(326); - formalArg(); - setState(331); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==COMMA) { - { - { - setState(327); - match(COMMA); - setState(328); - formalArg(); - } - } - setState(333); - _errHandler.sync(this); - _la = _input.LA(1); - } - } - } - - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class FormalArgContext extends ParserRuleContext { - public FormalArgTypeContext formalArgType() { - return getRuleContext(FormalArgTypeContext.class,0); - } - public TerminalNode ID() { return getToken(PMLParser.ID, 0); } - public FormalArgContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_formalArg; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterFormalArg(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitFormalArg(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitFormalArg(this); - else return visitor.visitChildren(this); - } - } - - public final FormalArgContext formalArg() throws RecognitionException { - FormalArgContext _localctx = new FormalArgContext(_ctx, getState()); - enterRule(_localctx, 58, RULE_formalArg); - try { - enterOuterAlt(_localctx, 1); - { - setState(336); - formalArgType(); - setState(337); - match(ID); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class FormalArgTypeContext extends ParserRuleContext { - public VariableTypeContext variableType() { - return getRuleContext(VariableTypeContext.class,0); - } - public FormalArgTypeContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_formalArgType; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterFormalArgType(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitFormalArgType(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitFormalArgType(this); - else return visitor.visitChildren(this); - } - } - - public final FormalArgTypeContext formalArgType() throws RecognitionException { - FormalArgTypeContext _localctx = new FormalArgTypeContext(_ctx, getState()); - enterRule(_localctx, 60, RULE_formalArgType); - try { - enterOuterAlt(_localctx, 1); - { - setState(339); - variableType(); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class FunctionReturnStatementContext extends ParserRuleContext { - public TerminalNode RETURN() { return getToken(PMLParser.RETURN, 0); } - public ExpressionContext expression() { - return getRuleContext(ExpressionContext.class,0); - } - public FunctionReturnStatementContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_functionReturnStatement; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterFunctionReturnStatement(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitFunctionReturnStatement(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitFunctionReturnStatement(this); - else return visitor.visitChildren(this); - } - } - - public final FunctionReturnStatementContext functionReturnStatement() throws RecognitionException { - FunctionReturnStatementContext _localctx = new FunctionReturnStatementContext(_ctx, getState()); - enterRule(_localctx, 62, RULE_functionReturnStatement); - try { - enterOuterAlt(_localctx, 1); - { - setState(344); - _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,16,_ctx) ) { - case 1: - { - setState(341); - match(RETURN); - setState(342); - expression(0); - } - break; - case 2: - { - setState(343); - match(RETURN); - } - break; - } - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class FuncReturnTypeContext extends ParserRuleContext { - public FuncReturnTypeContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_funcReturnType; } - - public FuncReturnTypeContext() { } - public void copyFrom(FuncReturnTypeContext ctx) { - super.copyFrom(ctx); - } - } - public static class VariableReturnTypeContext extends FuncReturnTypeContext { - public VariableTypeContext variableType() { - return getRuleContext(VariableTypeContext.class,0); - } - public VariableReturnTypeContext(FuncReturnTypeContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterVariableReturnType(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitVariableReturnType(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitVariableReturnType(this); - else return visitor.visitChildren(this); - } - } - public static class VoidReturnTypeContext extends FuncReturnTypeContext { - public TerminalNode VOID_TYPE() { return getToken(PMLParser.VOID_TYPE, 0); } - public VoidReturnTypeContext(FuncReturnTypeContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterVoidReturnType(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitVoidReturnType(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitVoidReturnType(this); - else return visitor.visitChildren(this); - } - } - - public final FuncReturnTypeContext funcReturnType() throws RecognitionException { - FuncReturnTypeContext _localctx = new FuncReturnTypeContext(_ctx, getState()); - enterRule(_localctx, 64, RULE_funcReturnType); - try { - setState(348); - _errHandler.sync(this); - switch (_input.LA(1)) { - case ANY: - case STRING_TYPE: - case BOOLEAN_TYPE: - case MAP_TYPE: - case OPEN_BRACKET: - _localctx = new VariableReturnTypeContext(_localctx); - enterOuterAlt(_localctx, 1); - { - setState(346); - variableType(); - } - break; - case VOID_TYPE: - _localctx = new VoidReturnTypeContext(_localctx); - enterOuterAlt(_localctx, 2); - { - setState(347); - match(VOID_TYPE); - } - break; - default: - throw new NoViableAltException(this); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class FuncBodyContext extends ParserRuleContext { - public TerminalNode OPEN_CURLY() { return getToken(PMLParser.OPEN_CURLY, 0); } - public TerminalNode CLOSE_CURLY() { return getToken(PMLParser.CLOSE_CURLY, 0); } - public List statement() { - return getRuleContexts(StatementContext.class); - } - public StatementContext statement(int i) { - return getRuleContext(StatementContext.class,i); - } - public FuncBodyContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_funcBody; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterFuncBody(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitFuncBody(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitFuncBody(this); - else return visitor.visitChildren(this); - } - } - - public final FuncBodyContext funcBody() throws RecognitionException { - FuncBodyContext _localctx = new FuncBodyContext(_ctx, getState()); - enterRule(_localctx, 66, RULE_funcBody); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(350); - match(OPEN_CURLY); - setState(354); - _errHandler.sync(this); - _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CREATE) | (1L << DELETE) | (1L << BREAK) | (1L << CONTINUE) | (1L << SET_RESOURCE_ACCESS_RIGHTS) | (1L << ASSIGN) | (1L << DEASSIGN) | (1L << SET_PROPERTIES) | (1L << ASSOCIATE) | (1L << DISSOCIATE) | (1L << LET) | (1L << CONST) | (1L << FUNCTION) | (1L << RETURN) | (1L << FOREACH) | (1L << FOR) | (1L << IF) | (1L << ID))) != 0)) { - { - { - setState(351); - statement(); - } - } - setState(356); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(357); - match(CLOSE_CURLY); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class ForeachStatementContext extends ParserRuleContext { - public Token key; - public Token mapValue; - public TerminalNode FOREACH() { return getToken(PMLParser.FOREACH, 0); } - public TerminalNode IN() { return getToken(PMLParser.IN, 0); } - public ExpressionContext expression() { - return getRuleContext(ExpressionContext.class,0); - } - public StatementBlockContext statementBlock() { - return getRuleContext(StatementBlockContext.class,0); - } - public List ID() { return getTokens(PMLParser.ID); } - public TerminalNode ID(int i) { - return getToken(PMLParser.ID, i); - } - public TerminalNode COMMA() { return getToken(PMLParser.COMMA, 0); } - public ForeachStatementContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_foreachStatement; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterForeachStatement(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitForeachStatement(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitForeachStatement(this); - else return visitor.visitChildren(this); - } - } - - public final ForeachStatementContext foreachStatement() throws RecognitionException { - ForeachStatementContext _localctx = new ForeachStatementContext(_ctx, getState()); - enterRule(_localctx, 68, RULE_foreachStatement); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(359); - match(FOREACH); - setState(360); - ((ForeachStatementContext)_localctx).key = match(ID); - setState(363); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==COMMA) { - { - setState(361); - match(COMMA); - setState(362); - ((ForeachStatementContext)_localctx).mapValue = match(ID); - } - } - - setState(365); - match(IN); - setState(366); - expression(0); - setState(367); - statementBlock(); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class ForRangeStatementContext extends ParserRuleContext { - public Token lowerBound; - public ExpressionContext lower; - public ExpressionContext upper; - public Token upperBound; - public TerminalNode FOR() { return getToken(PMLParser.FOR, 0); } - public TerminalNode ID() { return getToken(PMLParser.ID, 0); } - public TerminalNode IN_RANGE() { return getToken(PMLParser.IN_RANGE, 0); } - public TerminalNode COMMA() { return getToken(PMLParser.COMMA, 0); } - public StatementBlockContext statementBlock() { - return getRuleContext(StatementBlockContext.class,0); - } - public List expression() { - return getRuleContexts(ExpressionContext.class); - } - public ExpressionContext expression(int i) { - return getRuleContext(ExpressionContext.class,i); - } - public TerminalNode OPEN_BRACKET() { return getToken(PMLParser.OPEN_BRACKET, 0); } - public TerminalNode OPEN_PAREN() { return getToken(PMLParser.OPEN_PAREN, 0); } - public TerminalNode CLOSE_BRACKET() { return getToken(PMLParser.CLOSE_BRACKET, 0); } - public TerminalNode CLOSE_PAREN() { return getToken(PMLParser.CLOSE_PAREN, 0); } - public ForRangeStatementContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_forRangeStatement; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterForRangeStatement(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitForRangeStatement(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitForRangeStatement(this); - else return visitor.visitChildren(this); - } - } - - public final ForRangeStatementContext forRangeStatement() throws RecognitionException { - ForRangeStatementContext _localctx = new ForRangeStatementContext(_ctx, getState()); - enterRule(_localctx, 70, RULE_forRangeStatement); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(369); - match(FOR); - setState(370); - match(ID); - setState(371); - match(IN_RANGE); - setState(372); - ((ForRangeStatementContext)_localctx).lowerBound = _input.LT(1); - _la = _input.LA(1); - if ( !(_la==OPEN_BRACKET || _la==OPEN_PAREN) ) { - ((ForRangeStatementContext)_localctx).lowerBound = (Token)_errHandler.recoverInline(this); - } - else { - if ( _input.LA(1)==Token.EOF ) matchedEOF = true; - _errHandler.reportMatch(this); - consume(); - } - setState(373); - ((ForRangeStatementContext)_localctx).lower = expression(0); - setState(374); - match(COMMA); - setState(375); - ((ForRangeStatementContext)_localctx).upper = expression(0); - setState(376); - ((ForRangeStatementContext)_localctx).upperBound = _input.LT(1); - _la = _input.LA(1); - if ( !(_la==CLOSE_BRACKET || _la==CLOSE_PAREN) ) { - ((ForRangeStatementContext)_localctx).upperBound = (Token)_errHandler.recoverInline(this); - } - else { - if ( _input.LA(1)==Token.EOF ) matchedEOF = true; - _errHandler.reportMatch(this); - consume(); - } - setState(377); - statementBlock(); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class BreakStatementContext extends ParserRuleContext { - public TerminalNode BREAK() { return getToken(PMLParser.BREAK, 0); } - public BreakStatementContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_breakStatement; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterBreakStatement(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitBreakStatement(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitBreakStatement(this); - else return visitor.visitChildren(this); - } - } - - public final BreakStatementContext breakStatement() throws RecognitionException { - BreakStatementContext _localctx = new BreakStatementContext(_ctx, getState()); - enterRule(_localctx, 72, RULE_breakStatement); - try { - enterOuterAlt(_localctx, 1); - { - setState(379); - match(BREAK); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class ContinueStatementContext extends ParserRuleContext { - public TerminalNode CONTINUE() { return getToken(PMLParser.CONTINUE, 0); } - public ContinueStatementContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_continueStatement; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterContinueStatement(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitContinueStatement(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitContinueStatement(this); - else return visitor.visitChildren(this); - } - } - - public final ContinueStatementContext continueStatement() throws RecognitionException { - ContinueStatementContext _localctx = new ContinueStatementContext(_ctx, getState()); - enterRule(_localctx, 74, RULE_continueStatement); - try { - enterOuterAlt(_localctx, 1); - { - setState(381); - match(CONTINUE); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class FunctionInvokeStatementContext extends ParserRuleContext { - public FunctionInvokeContext functionInvoke() { - return getRuleContext(FunctionInvokeContext.class,0); - } - public FunctionInvokeStatementContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_functionInvokeStatement; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterFunctionInvokeStatement(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitFunctionInvokeStatement(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitFunctionInvokeStatement(this); - else return visitor.visitChildren(this); - } - } - - public final FunctionInvokeStatementContext functionInvokeStatement() throws RecognitionException { - FunctionInvokeStatementContext _localctx = new FunctionInvokeStatementContext(_ctx, getState()); - enterRule(_localctx, 76, RULE_functionInvokeStatement); - try { - enterOuterAlt(_localctx, 1); - { - setState(383); - functionInvoke(); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class IfStatementContext extends ParserRuleContext { - public ExpressionContext condition; - public TerminalNode IF() { return getToken(PMLParser.IF, 0); } - public StatementBlockContext statementBlock() { - return getRuleContext(StatementBlockContext.class,0); - } - public ExpressionContext expression() { - return getRuleContext(ExpressionContext.class,0); - } - public TerminalNode IS_COMPLEMENT() { return getToken(PMLParser.IS_COMPLEMENT, 0); } - public List elseIfStatement() { - return getRuleContexts(ElseIfStatementContext.class); - } - public ElseIfStatementContext elseIfStatement(int i) { - return getRuleContext(ElseIfStatementContext.class,i); - } - public ElseStatementContext elseStatement() { - return getRuleContext(ElseStatementContext.class,0); - } - public IfStatementContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_ifStatement; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterIfStatement(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitIfStatement(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitIfStatement(this); - else return visitor.visitChildren(this); - } - } - - public final IfStatementContext ifStatement() throws RecognitionException { - IfStatementContext _localctx = new IfStatementContext(_ctx, getState()); - enterRule(_localctx, 78, RULE_ifStatement); - int _la; - try { - int _alt; - enterOuterAlt(_localctx, 1); - { - setState(385); - match(IF); - setState(387); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==IS_COMPLEMENT) { - { - setState(386); - match(IS_COMPLEMENT); - } - } - - setState(389); - ((IfStatementContext)_localctx).condition = expression(0); - setState(390); - statementBlock(); - setState(394); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,21,_ctx); - while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { - if ( _alt==1 ) { - { - { - setState(391); - elseIfStatement(); - } - } - } - setState(396); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,21,_ctx); - } - setState(398); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==ELSE) { - { - setState(397); - elseStatement(); - } - } - - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class ElseIfStatementContext extends ParserRuleContext { - public ExpressionContext condition; - public TerminalNode ELSE() { return getToken(PMLParser.ELSE, 0); } - public TerminalNode IF() { return getToken(PMLParser.IF, 0); } - public StatementBlockContext statementBlock() { - return getRuleContext(StatementBlockContext.class,0); - } - public ExpressionContext expression() { - return getRuleContext(ExpressionContext.class,0); - } - public TerminalNode IS_COMPLEMENT() { return getToken(PMLParser.IS_COMPLEMENT, 0); } - public ElseIfStatementContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_elseIfStatement; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterElseIfStatement(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitElseIfStatement(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitElseIfStatement(this); - else return visitor.visitChildren(this); - } - } - - public final ElseIfStatementContext elseIfStatement() throws RecognitionException { - ElseIfStatementContext _localctx = new ElseIfStatementContext(_ctx, getState()); - enterRule(_localctx, 80, RULE_elseIfStatement); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(400); - match(ELSE); - setState(401); - match(IF); - setState(403); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==IS_COMPLEMENT) { - { - setState(402); - match(IS_COMPLEMENT); - } - } - - setState(405); - ((ElseIfStatementContext)_localctx).condition = expression(0); - setState(406); - statementBlock(); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class ElseStatementContext extends ParserRuleContext { - public TerminalNode ELSE() { return getToken(PMLParser.ELSE, 0); } - public StatementBlockContext statementBlock() { - return getRuleContext(StatementBlockContext.class,0); - } - public ElseStatementContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_elseStatement; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterElseStatement(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitElseStatement(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitElseStatement(this); - else return visitor.visitChildren(this); - } - } - - public final ElseStatementContext elseStatement() throws RecognitionException { - ElseStatementContext _localctx = new ElseStatementContext(_ctx, getState()); - enterRule(_localctx, 82, RULE_elseStatement); - try { - enterOuterAlt(_localctx, 1); - { - setState(408); - match(ELSE); - setState(409); - statementBlock(); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class VariableTypeContext extends ParserRuleContext { - public VariableTypeContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_variableType; } - - public VariableTypeContext() { } - public void copyFrom(VariableTypeContext ctx) { - super.copyFrom(ctx); - } - } - public static class MapVarTypeContext extends VariableTypeContext { - public MapTypeContext mapType() { - return getRuleContext(MapTypeContext.class,0); - } - public MapVarTypeContext(VariableTypeContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterMapVarType(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitMapVarType(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitMapVarType(this); - else return visitor.visitChildren(this); - } - } - public static class StringTypeContext extends VariableTypeContext { - public TerminalNode STRING_TYPE() { return getToken(PMLParser.STRING_TYPE, 0); } - public StringTypeContext(VariableTypeContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterStringType(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitStringType(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitStringType(this); - else return visitor.visitChildren(this); - } - } - public static class ArrayVarTypeContext extends VariableTypeContext { - public ArrayTypeContext arrayType() { - return getRuleContext(ArrayTypeContext.class,0); - } - public ArrayVarTypeContext(VariableTypeContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterArrayVarType(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitArrayVarType(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitArrayVarType(this); - else return visitor.visitChildren(this); - } - } - public static class BooleanTypeContext extends VariableTypeContext { - public TerminalNode BOOLEAN_TYPE() { return getToken(PMLParser.BOOLEAN_TYPE, 0); } - public BooleanTypeContext(VariableTypeContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterBooleanType(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitBooleanType(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitBooleanType(this); - else return visitor.visitChildren(this); - } - } - public static class AnyTypeContext extends VariableTypeContext { - public TerminalNode ANY() { return getToken(PMLParser.ANY, 0); } - public AnyTypeContext(VariableTypeContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterAnyType(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitAnyType(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitAnyType(this); - else return visitor.visitChildren(this); - } - } - - public final VariableTypeContext variableType() throws RecognitionException { - VariableTypeContext _localctx = new VariableTypeContext(_ctx, getState()); - enterRule(_localctx, 84, RULE_variableType); - try { - setState(416); - _errHandler.sync(this); - switch (_input.LA(1)) { - case STRING_TYPE: - _localctx = new StringTypeContext(_localctx); - enterOuterAlt(_localctx, 1); - { - setState(411); - match(STRING_TYPE); - } - break; - case BOOLEAN_TYPE: - _localctx = new BooleanTypeContext(_localctx); - enterOuterAlt(_localctx, 2); - { - setState(412); - match(BOOLEAN_TYPE); - } - break; - case OPEN_BRACKET: - _localctx = new ArrayVarTypeContext(_localctx); - enterOuterAlt(_localctx, 3); - { - setState(413); - arrayType(); - } - break; - case MAP_TYPE: - _localctx = new MapVarTypeContext(_localctx); - enterOuterAlt(_localctx, 4); - { - setState(414); - mapType(); - } - break; - case ANY: - _localctx = new AnyTypeContext(_localctx); - enterOuterAlt(_localctx, 5); - { - setState(415); - match(ANY); - } - break; - default: - throw new NoViableAltException(this); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class MapTypeContext extends ParserRuleContext { - public VariableTypeContext keyType; - public VariableTypeContext valueType; - public TerminalNode MAP_TYPE() { return getToken(PMLParser.MAP_TYPE, 0); } - public TerminalNode OPEN_BRACKET() { return getToken(PMLParser.OPEN_BRACKET, 0); } - public TerminalNode CLOSE_BRACKET() { return getToken(PMLParser.CLOSE_BRACKET, 0); } - public List variableType() { - return getRuleContexts(VariableTypeContext.class); - } - public VariableTypeContext variableType(int i) { - return getRuleContext(VariableTypeContext.class,i); - } - public MapTypeContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_mapType; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterMapType(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitMapType(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitMapType(this); - else return visitor.visitChildren(this); - } - } - - public final MapTypeContext mapType() throws RecognitionException { - MapTypeContext _localctx = new MapTypeContext(_ctx, getState()); - enterRule(_localctx, 86, RULE_mapType); - try { - enterOuterAlt(_localctx, 1); - { - setState(418); - match(MAP_TYPE); - setState(419); - match(OPEN_BRACKET); - setState(420); - ((MapTypeContext)_localctx).keyType = variableType(); - setState(421); - match(CLOSE_BRACKET); - setState(422); - ((MapTypeContext)_localctx).valueType = variableType(); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class ArrayTypeContext extends ParserRuleContext { - public TerminalNode OPEN_BRACKET() { return getToken(PMLParser.OPEN_BRACKET, 0); } - public TerminalNode CLOSE_BRACKET() { return getToken(PMLParser.CLOSE_BRACKET, 0); } - public VariableTypeContext variableType() { - return getRuleContext(VariableTypeContext.class,0); - } - public ArrayTypeContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_arrayType; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterArrayType(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitArrayType(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitArrayType(this); - else return visitor.visitChildren(this); - } - } - - public final ArrayTypeContext arrayType() throws RecognitionException { - ArrayTypeContext _localctx = new ArrayTypeContext(_ctx, getState()); - enterRule(_localctx, 88, RULE_arrayType); - try { - enterOuterAlt(_localctx, 1); - { - setState(424); - match(OPEN_BRACKET); - setState(425); - match(CLOSE_BRACKET); - setState(426); - variableType(); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class StatementBlockContext extends ParserRuleContext { - public TerminalNode OPEN_CURLY() { return getToken(PMLParser.OPEN_CURLY, 0); } - public TerminalNode CLOSE_CURLY() { return getToken(PMLParser.CLOSE_CURLY, 0); } - public List statement() { - return getRuleContexts(StatementContext.class); - } - public StatementContext statement(int i) { - return getRuleContext(StatementContext.class,i); - } - public StatementBlockContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_statementBlock; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterStatementBlock(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitStatementBlock(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitStatementBlock(this); - else return visitor.visitChildren(this); - } - } - - public final StatementBlockContext statementBlock() throws RecognitionException { - StatementBlockContext _localctx = new StatementBlockContext(_ctx, getState()); - enterRule(_localctx, 90, RULE_statementBlock); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(428); - match(OPEN_CURLY); - setState(432); - _errHandler.sync(this); - _la = _input.LA(1); - while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CREATE) | (1L << DELETE) | (1L << BREAK) | (1L << CONTINUE) | (1L << SET_RESOURCE_ACCESS_RIGHTS) | (1L << ASSIGN) | (1L << DEASSIGN) | (1L << SET_PROPERTIES) | (1L << ASSOCIATE) | (1L << DISSOCIATE) | (1L << LET) | (1L << CONST) | (1L << FUNCTION) | (1L << RETURN) | (1L << FOREACH) | (1L << FOR) | (1L << IF) | (1L << ID))) != 0)) { - { - { - setState(429); - statement(); - } - } - setState(434); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(435); - match(CLOSE_CURLY); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class ExpressionContext extends ParserRuleContext { - public ExpressionContext left; - public ExpressionContext right; - public VariableReferenceContext variableReference() { - return getRuleContext(VariableReferenceContext.class,0); - } - public FunctionInvokeContext functionInvoke() { - return getRuleContext(FunctionInvokeContext.class,0); - } - public LiteralContext literal() { - return getRuleContext(LiteralContext.class,0); - } - public List expression() { - return getRuleContexts(ExpressionContext.class); - } - public ExpressionContext expression(int i) { - return getRuleContext(ExpressionContext.class,i); - } - public TerminalNode EQUALS_OP() { return getToken(PMLParser.EQUALS_OP, 0); } - public TerminalNode NOT_EQUALS_OP() { return getToken(PMLParser.NOT_EQUALS_OP, 0); } - public TerminalNode AND_OP() { return getToken(PMLParser.AND_OP, 0); } - public TerminalNode OR_OP() { return getToken(PMLParser.OR_OP, 0); } - public ExpressionContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_expression; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterExpression(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitExpression(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitExpression(this); - else return visitor.visitChildren(this); - } - } - - public final ExpressionContext expression() throws RecognitionException { - return expression(0); - } - - private ExpressionContext expression(int _p) throws RecognitionException { - ParserRuleContext _parentctx = _ctx; - int _parentState = getState(); - ExpressionContext _localctx = new ExpressionContext(_ctx, _parentState); - ExpressionContext _prevctx = _localctx; - int _startState = 92; - enterRecursionRule(_localctx, 92, RULE_expression, _p); - int _la; - try { - int _alt; - enterOuterAlt(_localctx, 1); - { - setState(441); - _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,26,_ctx) ) { - case 1: - { - setState(438); - variableReference(); - } - break; - case 2: - { - setState(439); - functionInvoke(); - } - break; - case 3: - { - setState(440); - literal(); - } - break; - } - _ctx.stop = _input.LT(-1); - setState(451); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,28,_ctx); - while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { - if ( _alt==1 ) { - if ( _parseListeners!=null ) triggerExitRuleEvent(); - _prevctx = _localctx; - { - setState(449); - _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,27,_ctx) ) { - case 1: - { - _localctx = new ExpressionContext(_parentctx, _parentState); - _localctx.left = _prevctx; - _localctx.left = _prevctx; - pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(443); - if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); - setState(444); - _la = _input.LA(1); - if ( !(_la==EQUALS_OP || _la==NOT_EQUALS_OP) ) { - _errHandler.recoverInline(this); - } - else { - if ( _input.LA(1)==Token.EOF ) matchedEOF = true; - _errHandler.reportMatch(this); - consume(); - } - setState(445); - ((ExpressionContext)_localctx).right = expression(3); - } - break; - case 2: - { - _localctx = new ExpressionContext(_parentctx, _parentState); - _localctx.left = _prevctx; - _localctx.left = _prevctx; - pushNewRecursionContext(_localctx, _startState, RULE_expression); - setState(446); - if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); - setState(447); - _la = _input.LA(1); - if ( !(_la==AND_OP || _la==OR_OP) ) { - _errHandler.recoverInline(this); - } - else { - if ( _input.LA(1)==Token.EOF ) matchedEOF = true; - _errHandler.reportMatch(this); - consume(); - } - setState(448); - ((ExpressionContext)_localctx).right = expression(2); - } - break; - } - } - } - setState(453); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,28,_ctx); - } - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - unrollRecursionContexts(_parentctx); - } - return _localctx; - } - - public static class ArrayContext extends ParserRuleContext { - public TerminalNode OPEN_BRACKET() { return getToken(PMLParser.OPEN_BRACKET, 0); } - public TerminalNode CLOSE_BRACKET() { return getToken(PMLParser.CLOSE_BRACKET, 0); } - public List expression() { - return getRuleContexts(ExpressionContext.class); - } - public ExpressionContext expression(int i) { - return getRuleContext(ExpressionContext.class,i); - } - public List COMMA() { return getTokens(PMLParser.COMMA); } - public TerminalNode COMMA(int i) { - return getToken(PMLParser.COMMA, i); - } - public ArrayContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_array; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterArray(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitArray(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitArray(this); - else return visitor.visitChildren(this); - } - } - - public final ArrayContext array() throws RecognitionException { - ArrayContext _localctx = new ArrayContext(_ctx, getState()); - enterRule(_localctx, 94, RULE_array); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(454); - match(OPEN_BRACKET); - setState(463); - _errHandler.sync(this); - _la = _input.LA(1); - if (((((_la - 44)) & ~0x3f) == 0 && ((1L << (_la - 44)) & ((1L << (BOOLEAN - 44)) | (1L << (NUMBER - 44)) | (1L << (ID - 44)) | (1L << (STRING - 44)) | (1L << (OPEN_CURLY - 44)) | (1L << (OPEN_BRACKET - 44)))) != 0)) { - { - setState(455); - expression(0); - setState(460); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==COMMA) { - { - { - setState(456); - match(COMMA); - setState(457); - expression(0); - } - } - setState(462); - _errHandler.sync(this); - _la = _input.LA(1); - } - } - } - - setState(465); - match(CLOSE_BRACKET); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class MapContext extends ParserRuleContext { - public TerminalNode OPEN_CURLY() { return getToken(PMLParser.OPEN_CURLY, 0); } - public TerminalNode CLOSE_CURLY() { return getToken(PMLParser.CLOSE_CURLY, 0); } - public List mapEntry() { - return getRuleContexts(MapEntryContext.class); - } - public MapEntryContext mapEntry(int i) { - return getRuleContext(MapEntryContext.class,i); - } - public List COMMA() { return getTokens(PMLParser.COMMA); } - public TerminalNode COMMA(int i) { - return getToken(PMLParser.COMMA, i); - } - public MapContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_map; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterMap(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitMap(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitMap(this); - else return visitor.visitChildren(this); - } - } - - public final MapContext map() throws RecognitionException { - MapContext _localctx = new MapContext(_ctx, getState()); - enterRule(_localctx, 96, RULE_map); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(467); - match(OPEN_CURLY); - setState(476); - _errHandler.sync(this); - _la = _input.LA(1); - if (((((_la - 44)) & ~0x3f) == 0 && ((1L << (_la - 44)) & ((1L << (BOOLEAN - 44)) | (1L << (NUMBER - 44)) | (1L << (ID - 44)) | (1L << (STRING - 44)) | (1L << (OPEN_CURLY - 44)) | (1L << (OPEN_BRACKET - 44)))) != 0)) { - { - setState(468); - mapEntry(); - setState(473); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==COMMA) { - { - { - setState(469); - match(COMMA); - setState(470); - mapEntry(); - } - } - setState(475); - _errHandler.sync(this); - _la = _input.LA(1); - } - } - } - - setState(478); - match(CLOSE_CURLY); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class MapEntryContext extends ParserRuleContext { - public ExpressionContext key; - public ExpressionContext value; - public TerminalNode COLON() { return getToken(PMLParser.COLON, 0); } - public List expression() { - return getRuleContexts(ExpressionContext.class); - } - public ExpressionContext expression(int i) { - return getRuleContext(ExpressionContext.class,i); - } - public MapEntryContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_mapEntry; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterMapEntry(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitMapEntry(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitMapEntry(this); - else return visitor.visitChildren(this); - } - } - - public final MapEntryContext mapEntry() throws RecognitionException { - MapEntryContext _localctx = new MapEntryContext(_ctx, getState()); - enterRule(_localctx, 98, RULE_mapEntry); - try { - enterOuterAlt(_localctx, 1); - { - setState(480); - ((MapEntryContext)_localctx).key = expression(0); - setState(481); - match(COLON); - setState(482); - ((MapEntryContext)_localctx).value = expression(0); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class EntryReferenceContext extends ParserRuleContext { - public ExpressionContext key; - public TerminalNode ID() { return getToken(PMLParser.ID, 0); } - public List OPEN_BRACKET() { return getTokens(PMLParser.OPEN_BRACKET); } - public TerminalNode OPEN_BRACKET(int i) { - return getToken(PMLParser.OPEN_BRACKET, i); - } - public List CLOSE_BRACKET() { return getTokens(PMLParser.CLOSE_BRACKET); } - public TerminalNode CLOSE_BRACKET(int i) { - return getToken(PMLParser.CLOSE_BRACKET, i); - } - public List expression() { - return getRuleContexts(ExpressionContext.class); - } - public ExpressionContext expression(int i) { - return getRuleContext(ExpressionContext.class,i); - } - public EntryReferenceContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_entryReference; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterEntryReference(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitEntryReference(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitEntryReference(this); - else return visitor.visitChildren(this); - } - } - - public final EntryReferenceContext entryReference() throws RecognitionException { - EntryReferenceContext _localctx = new EntryReferenceContext(_ctx, getState()); - enterRule(_localctx, 100, RULE_entryReference); - try { - int _alt; - enterOuterAlt(_localctx, 1); - { - setState(484); - match(ID); - setState(489); - _errHandler.sync(this); - _alt = 1; - do { - switch (_alt) { - case 1: - { - { - setState(485); - match(OPEN_BRACKET); - setState(486); - ((EntryReferenceContext)_localctx).key = expression(0); - setState(487); - match(CLOSE_BRACKET); - } - } - break; - default: - throw new NoViableAltException(this); - } - setState(491); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,33,_ctx); - } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class LiteralContext extends ParserRuleContext { - public LiteralContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_literal; } - - public LiteralContext() { } - public void copyFrom(LiteralContext ctx) { - super.copyFrom(ctx); - } - } - public static class MapLiteralContext extends LiteralContext { - public MapContext map() { - return getRuleContext(MapContext.class,0); - } - public MapLiteralContext(LiteralContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterMapLiteral(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitMapLiteral(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitMapLiteral(this); - else return visitor.visitChildren(this); - } - } - public static class StringLiteralContext extends LiteralContext { - public TerminalNode STRING() { return getToken(PMLParser.STRING, 0); } - public StringLiteralContext(LiteralContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterStringLiteral(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitStringLiteral(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitStringLiteral(this); - else return visitor.visitChildren(this); - } - } - public static class BooleanLiteralContext extends LiteralContext { - public TerminalNode BOOLEAN() { return getToken(PMLParser.BOOLEAN, 0); } - public BooleanLiteralContext(LiteralContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterBooleanLiteral(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitBooleanLiteral(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitBooleanLiteral(this); - else return visitor.visitChildren(this); - } - } - public static class ArrayLiteralContext extends LiteralContext { - public ArrayContext array() { - return getRuleContext(ArrayContext.class,0); - } - public ArrayLiteralContext(LiteralContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterArrayLiteral(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitArrayLiteral(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitArrayLiteral(this); - else return visitor.visitChildren(this); - } - } - public static class NumberLiteralContext extends LiteralContext { - public TerminalNode NUMBER() { return getToken(PMLParser.NUMBER, 0); } - public NumberLiteralContext(LiteralContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterNumberLiteral(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitNumberLiteral(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitNumberLiteral(this); - else return visitor.visitChildren(this); - } - } - - public final LiteralContext literal() throws RecognitionException { - LiteralContext _localctx = new LiteralContext(_ctx, getState()); - enterRule(_localctx, 102, RULE_literal); - try { - setState(498); - _errHandler.sync(this); - switch (_input.LA(1)) { - case STRING: - _localctx = new StringLiteralContext(_localctx); - enterOuterAlt(_localctx, 1); - { - setState(493); - match(STRING); - } - break; - case BOOLEAN: - _localctx = new BooleanLiteralContext(_localctx); - enterOuterAlt(_localctx, 2); - { - setState(494); - match(BOOLEAN); - } - break; - case NUMBER: - _localctx = new NumberLiteralContext(_localctx); - enterOuterAlt(_localctx, 3); - { - setState(495); - match(NUMBER); - } - break; - case OPEN_BRACKET: - _localctx = new ArrayLiteralContext(_localctx); - enterOuterAlt(_localctx, 4); - { - setState(496); - array(); - } - break; - case OPEN_CURLY: - _localctx = new MapLiteralContext(_localctx); - enterOuterAlt(_localctx, 5); - { - setState(497); - map(); - } - break; - default: - throw new NoViableAltException(this); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class VariableReferenceContext extends ParserRuleContext { - public VariableReferenceContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_variableReference; } - - public VariableReferenceContext() { } - public void copyFrom(VariableReferenceContext ctx) { - super.copyFrom(ctx); - } - } - public static class ReferenceByEntryContext extends VariableReferenceContext { - public EntryReferenceContext entryReference() { - return getRuleContext(EntryReferenceContext.class,0); - } - public ReferenceByEntryContext(VariableReferenceContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterReferenceByEntry(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitReferenceByEntry(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitReferenceByEntry(this); - else return visitor.visitChildren(this); - } - } - public static class ReferenceByIDContext extends VariableReferenceContext { - public TerminalNode ID() { return getToken(PMLParser.ID, 0); } - public ReferenceByIDContext(VariableReferenceContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterReferenceByID(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitReferenceByID(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitReferenceByID(this); - else return visitor.visitChildren(this); - } - } - - public final VariableReferenceContext variableReference() throws RecognitionException { - VariableReferenceContext _localctx = new VariableReferenceContext(_ctx, getState()); - enterRule(_localctx, 104, RULE_variableReference); - try { - setState(502); - _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,35,_ctx) ) { - case 1: - _localctx = new ReferenceByIDContext(_localctx); - enterOuterAlt(_localctx, 1); - { - setState(500); - match(ID); - } - break; - case 2: - _localctx = new ReferenceByEntryContext(_localctx); - enterOuterAlt(_localctx, 2); - { - setState(501); - entryReference(); - } - break; - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class FunctionInvokeContext extends ParserRuleContext { - public TerminalNode ID() { return getToken(PMLParser.ID, 0); } - public FunctionInvokeArgsContext functionInvokeArgs() { - return getRuleContext(FunctionInvokeArgsContext.class,0); - } - public FunctionInvokeContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_functionInvoke; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterFunctionInvoke(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitFunctionInvoke(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitFunctionInvoke(this); - else return visitor.visitChildren(this); - } - } - - public final FunctionInvokeContext functionInvoke() throws RecognitionException { - FunctionInvokeContext _localctx = new FunctionInvokeContext(_ctx, getState()); - enterRule(_localctx, 106, RULE_functionInvoke); - try { - enterOuterAlt(_localctx, 1); - { - setState(504); - match(ID); - setState(505); - functionInvokeArgs(); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public static class FunctionInvokeArgsContext extends ParserRuleContext { - public TerminalNode OPEN_PAREN() { return getToken(PMLParser.OPEN_PAREN, 0); } - public TerminalNode CLOSE_PAREN() { return getToken(PMLParser.CLOSE_PAREN, 0); } - public List expression() { - return getRuleContexts(ExpressionContext.class); - } - public ExpressionContext expression(int i) { - return getRuleContext(ExpressionContext.class,i); - } - public List COMMA() { return getTokens(PMLParser.COMMA); } - public TerminalNode COMMA(int i) { - return getToken(PMLParser.COMMA, i); - } - public FunctionInvokeArgsContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_functionInvokeArgs; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).enterFunctionInvokeArgs(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof PMLListener ) ((PMLListener)listener).exitFunctionInvokeArgs(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof PMLVisitor ) return ((PMLVisitor)visitor).visitFunctionInvokeArgs(this); - else return visitor.visitChildren(this); - } - } - - public final FunctionInvokeArgsContext functionInvokeArgs() throws RecognitionException { - FunctionInvokeArgsContext _localctx = new FunctionInvokeArgsContext(_ctx, getState()); - enterRule(_localctx, 108, RULE_functionInvokeArgs); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(507); - match(OPEN_PAREN); - setState(516); - _errHandler.sync(this); - _la = _input.LA(1); - if (((((_la - 44)) & ~0x3f) == 0 && ((1L << (_la - 44)) & ((1L << (BOOLEAN - 44)) | (1L << (NUMBER - 44)) | (1L << (ID - 44)) | (1L << (STRING - 44)) | (1L << (OPEN_CURLY - 44)) | (1L << (OPEN_BRACKET - 44)))) != 0)) { - { - setState(508); - expression(0); - setState(513); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==COMMA) { - { - { - setState(509); - match(COMMA); - setState(510); - expression(0); - } - } - setState(515); - _errHandler.sync(this); - _la = _input.LA(1); - } - } - } - - setState(518); - match(CLOSE_PAREN); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - - public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) { - switch (ruleIndex) { - case 46: - return expression_sempred((ExpressionContext)_localctx, predIndex); - } - return true; - } - private boolean expression_sempred(ExpressionContext _localctx, int predIndex) { - switch (predIndex) { - case 0: - return precpred(_ctx, 2); - case 1: - return precpred(_ctx, 1); - } - return true; - } - - public static final String _serializedATN = - "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3R\u020b\4\2\t\2\4"+ - "\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t"+ - "\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+ - "\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+ - "\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\4 \t \4!"+ - "\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4"+ - ",\t,\4-\t-\4.\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64\t"+ - "\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\3\2\7\2r\n\2\f\2\16\2u\13\2\3"+ - "\2\3\2\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3"+ - "\3\3\3\3\3\3\3\3\3\3\3\3\5\3\u008f\n\3\3\4\3\4\3\4\3\4\3\5\3\5\3\5\3\5"+ - "\3\5\3\5\3\6\3\6\3\6\3\6\3\6\3\6\3\7\3\7\3\7\3\7\3\7\7\7\u00a6\n\7\f\7"+ - "\16\7\u00a9\13\7\3\7\3\7\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\5\b\u00b6"+ - "\n\b\3\b\3\b\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\5\t\u00c3\n\t\3\n\3\n"+ - "\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\5\n\u00cf\n\n\3\13\3\13\3\13\3\f\3\f"+ - "\3\f\3\f\3\f\3\f\3\r\3\r\7\r\u00dc\n\r\f\r\16\r\u00df\13\r\3\r\3\r\3\16"+ - "\3\16\3\16\5\16\u00e6\n\16\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\17"+ - "\3\17\3\17\3\17\3\17\3\20\3\20\3\20\3\20\7\20\u00f9\n\20\f\20\16\20\u00fc"+ - "\13\20\5\20\u00fe\n\20\3\20\3\20\3\21\5\21\u0103\n\21\3\21\3\21\3\22\3"+ - "\22\3\22\3\22\3\22\3\22\3\23\3\23\3\23\3\23\3\23\3\24\3\24\3\24\3\24\3"+ - "\24\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\26\3\26\3\26\3\26\3\26\3\27\3"+ - "\27\3\27\3\30\3\30\3\30\3\30\3\31\3\31\3\31\5\31\u012d\n\31\3\32\3\32"+ - "\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\34\5\34\u0139\n\34\3\34\3\34\3\34"+ - "\3\34\3\35\3\35\3\35\3\35\3\35\3\35\5\35\u0145\n\35\3\35\3\35\3\36\3\36"+ - "\3\36\7\36\u014c\n\36\f\36\16\36\u014f\13\36\5\36\u0151\n\36\3\37\3\37"+ - "\3\37\3 \3 \3!\3!\3!\5!\u015b\n!\3\"\3\"\5\"\u015f\n\"\3#\3#\7#\u0163"+ - "\n#\f#\16#\u0166\13#\3#\3#\3$\3$\3$\3$\5$\u016e\n$\3$\3$\3$\3$\3%\3%\3"+ - "%\3%\3%\3%\3%\3%\3%\3%\3&\3&\3\'\3\'\3(\3(\3)\3)\5)\u0186\n)\3)\3)\3)"+ - "\7)\u018b\n)\f)\16)\u018e\13)\3)\5)\u0191\n)\3*\3*\3*\5*\u0196\n*\3*\3"+ - "*\3*\3+\3+\3+\3,\3,\3,\3,\3,\5,\u01a3\n,\3-\3-\3-\3-\3-\3-\3.\3.\3.\3"+ - ".\3/\3/\7/\u01b1\n/\f/\16/\u01b4\13/\3/\3/\3\60\3\60\3\60\3\60\5\60\u01bc"+ - "\n\60\3\60\3\60\3\60\3\60\3\60\3\60\7\60\u01c4\n\60\f\60\16\60\u01c7\13"+ - "\60\3\61\3\61\3\61\3\61\7\61\u01cd\n\61\f\61\16\61\u01d0\13\61\5\61\u01d2"+ - "\n\61\3\61\3\61\3\62\3\62\3\62\3\62\7\62\u01da\n\62\f\62\16\62\u01dd\13"+ - "\62\5\62\u01df\n\62\3\62\3\62\3\63\3\63\3\63\3\63\3\64\3\64\3\64\3\64"+ - "\3\64\6\64\u01ec\n\64\r\64\16\64\u01ed\3\65\3\65\3\65\3\65\3\65\5\65\u01f5"+ - "\n\65\3\66\3\66\5\66\u01f9\n\66\3\67\3\67\3\67\38\38\38\38\78\u0202\n"+ - "8\f8\168\u0205\138\58\u0207\n8\38\38\38\2\3^9\2\4\6\b\n\f\16\20\22\24"+ - "\26\30\32\34\36 \"$&(*,.\60\62\64\668:<>@BDFHJLNPRTVXZ\\^`bdfhjln\2\f"+ - "\3\2$%\3\2&\'\5\2\21\21%%\'\'\3\2\22\23\3\2#\'\3\2*+\4\2GGKK\4\2HHLL\3"+ - "\2QR\3\2OP\2\u021b\2s\3\2\2\2\4\u008e\3\2\2\2\6\u0090\3\2\2\2\b\u0094"+ - "\3\2\2\2\n\u009a\3\2\2\2\f\u00a0\3\2\2\2\16\u00ac\3\2\2\2\20\u00c2\3\2"+ - "\2\2\22\u00ce\3\2\2\2\24\u00d0\3\2\2\2\26\u00d3\3\2\2\2\30\u00d9\3\2\2"+ - "\2\32\u00e5\3\2\2\2\34\u00e7\3\2\2\2\36\u00f4\3\2\2\2 \u0102\3\2\2\2\""+ - "\u0106\3\2\2\2$\u010c\3\2\2\2&\u0111\3\2\2\2(\u0116\3\2\2\2*\u011d\3\2"+ - "\2\2,\u0122\3\2\2\2.\u0125\3\2\2\2\60\u012c\3\2\2\2\62\u012e\3\2\2\2\64"+ - "\u0130\3\2\2\2\66\u0138\3\2\2\28\u013e\3\2\2\2:\u0150\3\2\2\2<\u0152\3"+ - "\2\2\2>\u0155\3\2\2\2@\u015a\3\2\2\2B\u015e\3\2\2\2D\u0160\3\2\2\2F\u0169"+ - "\3\2\2\2H\u0173\3\2\2\2J\u017d\3\2\2\2L\u017f\3\2\2\2N\u0181\3\2\2\2P"+ - "\u0183\3\2\2\2R\u0192\3\2\2\2T\u019a\3\2\2\2V\u01a2\3\2\2\2X\u01a4\3\2"+ - "\2\2Z\u01aa\3\2\2\2\\\u01ae\3\2\2\2^\u01bb\3\2\2\2`\u01c8\3\2\2\2b\u01d5"+ - "\3\2\2\2d\u01e2\3\2\2\2f\u01e6\3\2\2\2h\u01f4\3\2\2\2j\u01f8\3\2\2\2l"+ - "\u01fa\3\2\2\2n\u01fd\3\2\2\2pr\5\4\3\2qp\3\2\2\2ru\3\2\2\2sq\3\2\2\2"+ - "st\3\2\2\2tv\3\2\2\2us\3\2\2\2vw\7\2\2\3w\3\3\2\2\2x\u008f\5\6\4\2y\u008f"+ - "\5\b\5\2z\u008f\5\n\6\2{\u008f\5\f\7\2|\u008f\5\34\17\2}\u008f\5\"\22"+ - "\2~\u008f\5$\23\2\177\u008f\5&\24\2\u0080\u008f\5(\25\2\u0081\u008f\5"+ - "*\26\2\u0082\u008f\5,\27\2\u0083\u008f\5.\30\2\u0084\u008f\5\64\33\2\u0085"+ - "\u008f\5\66\34\2\u0086\u008f\58\35\2\u0087\u008f\5@!\2\u0088\u008f\5F"+ - "$\2\u0089\u008f\5H%\2\u008a\u008f\5J&\2\u008b\u008f\5L\'\2\u008c\u008f"+ - "\5N(\2\u008d\u008f\5P)\2\u008ex\3\2\2\2\u008ey\3\2\2\2\u008ez\3\2\2\2"+ - "\u008e{\3\2\2\2\u008e|\3\2\2\2\u008e}\3\2\2\2\u008e~\3\2\2\2\u008e\177"+ - "\3\2\2\2\u008e\u0080\3\2\2\2\u008e\u0081\3\2\2\2\u008e\u0082\3\2\2\2\u008e"+ - "\u0083\3\2\2\2\u008e\u0084\3\2\2\2\u008e\u0085\3\2\2\2\u008e\u0086\3\2"+ - "\2\2\u008e\u0087\3\2\2\2\u008e\u0088\3\2\2\2\u008e\u0089\3\2\2\2\u008e"+ - "\u008a\3\2\2\2\u008e\u008b\3\2\2\2\u008e\u008c\3\2\2\2\u008e\u008d\3\2"+ - "\2\2\u008f\5\3\2\2\2\u0090\u0091\7\3\2\2\u0091\u0092\7#\2\2\u0092\u0093"+ - "\5^\60\2\u0093\7\3\2\2\2\u0094\u0095\7\3\2\2\u0095\u0096\t\2\2\2\u0096"+ - "\u0097\5^\60\2\u0097\u0098\78\2\2\u0098\u0099\5^\60\2\u0099\t\3\2\2\2"+ - "\u009a\u009b\7\3\2\2\u009b\u009c\t\3\2\2\u009c\u009d\5^\60\2\u009d\u009e"+ - "\78\2\2\u009e\u009f\5^\60\2\u009f\13\3\2\2\2\u00a0\u00a1\7\3\2\2\u00a1"+ - "\u00a2\7!\2\2\u00a2\u00a3\5^\60\2\u00a3\u00a7\7E\2\2\u00a4\u00a6\5\16"+ - "\b\2\u00a5\u00a4\3\2\2\2\u00a6\u00a9\3\2\2\2\u00a7\u00a5\3\2\2\2\u00a7"+ - "\u00a8\3\2\2\2\u00a8\u00aa\3\2\2\2\u00a9\u00a7\3\2\2\2\u00aa\u00ab\7F"+ - "\2\2\u00ab\r\3\2\2\2\u00ac\u00ad\7\3\2\2\u00ad\u00ae\7\b\2\2\u00ae\u00af"+ - "\5^\60\2\u00af\u00b0\7\t\2\2\u00b0\u00b1\5\20\t\2\u00b1\u00b2\7\n\2\2"+ - "\u00b2\u00b5\5^\60\2\u00b3\u00b4\7\f\2\2\u00b4\u00b6\5\22\n\2\u00b5\u00b3"+ - "\3\2\2\2\u00b5\u00b6\3\2\2\2\u00b6\u00b7\3\2\2\2\u00b7\u00b8\5\26\f\2"+ - "\u00b8\17\3\2\2\2\u00b9\u00c3\7\16\2\2\u00ba\u00bb\7\'\2\2\u00bb\u00c3"+ - "\5^\60\2\u00bc\u00bd\7\17\2\2\u00bd\u00c3\5^\60\2\u00be\u00bf\7\20\2\2"+ - "\u00bf\u00c3\5^\60\2\u00c0\u00c1\7\21\2\2\u00c1\u00c3\5^\60\2\u00c2\u00b9"+ - "\3\2\2\2\u00c2\u00ba\3\2\2\2\u00c2\u00bc\3\2\2\2\u00c2\u00be\3\2\2\2\u00c2"+ - "\u00c0\3\2\2\2\u00c3\21\3\2\2\2\u00c4\u00cf\5^\60\2\u00c5\u00cf\5\24\13"+ - "\2\u00c6\u00c7\5\24\13\2\u00c7\u00c8\78\2\2\u00c8\u00c9\5^\60\2\u00c9"+ - "\u00cf\3\2\2\2\u00ca\u00cb\5\24\13\2\u00cb\u00cc\7\31\2\2\u00cc\u00cd"+ - "\5^\60\2\u00cd\u00cf\3\2\2\2\u00ce\u00c4\3\2\2\2\u00ce\u00c5\3\2\2\2\u00ce"+ - "\u00c6\3\2\2\2\u00ce\u00ca\3\2\2\2\u00cf\23\3\2\2\2\u00d0\u00d1\7)\2\2"+ - "\u00d1\u00d2\7\7\2\2\u00d2\25\3\2\2\2\u00d3\u00d4\7\r\2\2\u00d4\u00d5"+ - "\7K\2\2\u00d5\u00d6\7=\2\2\u00d6\u00d7\7L\2\2\u00d7\u00d8\5\30\r\2\u00d8"+ - "\27\3\2\2\2\u00d9\u00dd\7E\2\2\u00da\u00dc\5\32\16\2\u00db\u00da\3\2\2"+ - "\2\u00dc\u00df\3\2\2\2\u00dd\u00db\3\2\2\2\u00dd\u00de\3\2\2\2\u00de\u00e0"+ - "\3\2\2\2\u00df\u00dd\3\2\2\2\u00e0\u00e1\7F\2\2\u00e1\31\3\2\2\2\u00e2"+ - "\u00e6\5\4\3\2\u00e3\u00e6\5\16\b\2\u00e4\u00e6\5\64\33\2\u00e5\u00e2"+ - "\3\2\2\2\u00e5\u00e3\3\2\2\2\u00e5\u00e4\3\2\2\2\u00e6\33\3\2\2\2\u00e7"+ - "\u00e8\7\3\2\2\u00e8\u00e9\7 \2\2\u00e9\u00ea\5^\60\2\u00ea\u00eb\7\37"+ - "\2\2\u00eb\u00ec\t\4\2\2\u00ec\u00ed\5^\60\2\u00ed\u00ee\7\"\2\2\u00ee"+ - "\u00ef\5^\60\2\u00ef\u00f0\7\f\2\2\u00f0\u00f1\t\5\2\2\u00f1\u00f2\7\31"+ - "\2\2\u00f2\u00f3\5\36\20\2\u00f3\35\3\2\2\2\u00f4\u00fd\7G\2\2\u00f5\u00fa"+ - "\5 \21\2\u00f6\u00f7\7C\2\2\u00f7\u00f9\5 \21\2\u00f8\u00f6\3\2\2\2\u00f9"+ - "\u00fc\3\2\2\2\u00fa\u00f8\3\2\2\2\u00fa\u00fb\3\2\2\2\u00fb\u00fe\3\2"+ - "\2\2\u00fc\u00fa\3\2\2\2\u00fd\u00f5\3\2\2\2\u00fd\u00fe\3\2\2\2\u00fe"+ - "\u00ff\3\2\2\2\u00ff\u0100\7H\2\2\u0100\37\3\2\2\2\u0101\u0103\7M\2\2"+ - "\u0102\u0101\3\2\2\2\u0102\u0103\3\2\2\2\u0103\u0104\3\2\2\2\u0104\u0105"+ - "\5^\60\2\u0105!\3\2\2\2\u0106\u0107\7\30\2\2\u0107\u0108\7\31\2\2\u0108"+ - "\u0109\5^\60\2\u0109\u010a\7\32\2\2\u010a\u010b\5^\60\2\u010b#\3\2\2\2"+ - "\u010c\u010d\7\25\2\2\u010d\u010e\5^\60\2\u010e\u010f\7\32\2\2\u010f\u0110"+ - "\5^\60\2\u0110%\3\2\2\2\u0111\u0112\7\26\2\2\u0112\u0113\5^\60\2\u0113"+ - "\u0114\7\27\2\2\u0114\u0115\5^\60\2\u0115\'\3\2\2\2\u0116\u0117\7\33\2"+ - "\2\u0117\u0118\5^\60\2\u0118\u0119\7\34\2\2\u0119\u011a\5^\60\2\u011a"+ - "\u011b\7\35\2\2\u011b\u011c\5^\60\2\u011c)\3\2\2\2\u011d\u011e\7\36\2"+ - "\2\u011e\u011f\5^\60\2\u011f\u0120\7\34\2\2\u0120\u0121\5^\60\2\u0121"+ - "+\3\2\2\2\u0122\u0123\7\24\2\2\u0123\u0124\5^\60\2\u0124-\3\2\2\2\u0125"+ - "\u0126\7\4\2\2\u0126\u0127\5\60\31\2\u0127\u0128\5^\60\2\u0128/\3\2\2"+ - "\2\u0129\u012d\5\62\32\2\u012a\u012d\7!\2\2\u012b\u012d\7 \2\2\u012c\u0129"+ - "\3\2\2\2\u012c\u012a\3\2\2\2\u012c\u012b\3\2\2\2\u012d\61\3\2\2\2\u012e"+ - "\u012f\t\6\2\2\u012f\63\3\2\2\2\u0130\u0131\7\4\2\2\u0131\u0132\7\b\2"+ - "\2\u0132\u0133\5^\60\2\u0133\u0134\7\27\2\2\u0134\u0135\7!\2\2\u0135\u0136"+ - "\5^\60\2\u0136\65\3\2\2\2\u0137\u0139\t\7\2\2\u0138\u0137\3\2\2\2\u0138"+ - "\u0139\3\2\2\2\u0139\u013a\3\2\2\2\u013a\u013b\7=\2\2\u013b\u013c\7N\2"+ - "\2\u013c\u013d\5^\60\2\u013d\67\3\2\2\2\u013e\u013f\7,\2\2\u013f\u0140"+ - "\7=\2\2\u0140\u0141\7K\2\2\u0141\u0142\5:\36\2\u0142\u0144\7L\2\2\u0143"+ - "\u0145\5B\"\2\u0144\u0143\3\2\2\2\u0144\u0145\3\2\2\2\u0145\u0146\3\2"+ - "\2\2\u0146\u0147\5D#\2\u01479\3\2\2\2\u0148\u014d\5<\37\2\u0149\u014a"+ - "\7C\2\2\u014a\u014c\5<\37\2\u014b\u0149\3\2\2\2\u014c\u014f\3\2\2\2\u014d"+ - "\u014b\3\2\2\2\u014d\u014e\3\2\2\2\u014e\u0151\3\2\2\2\u014f\u014d\3\2"+ - "\2\2\u0150\u0148\3\2\2\2\u0150\u0151\3\2\2\2\u0151;\3\2\2\2\u0152\u0153"+ - "\5> \2\u0153\u0154\7=\2\2\u0154=\3\2\2\2\u0155\u0156\5V,\2\u0156?\3\2"+ - "\2\2\u0157\u0158\7-\2\2\u0158\u015b\5^\60\2\u0159\u015b\7-\2\2\u015a\u0157"+ - "\3\2\2\2\u015a\u0159\3\2\2\2\u015bA\3\2\2\2\u015c\u015f\5V,\2\u015d\u015f"+ - "\7\63\2\2\u015e\u015c\3\2\2\2\u015e\u015d\3\2\2\2\u015fC\3\2\2\2\u0160"+ - "\u0164\7E\2\2\u0161\u0163\5\4\3\2\u0162\u0161\3\2\2\2\u0163\u0166\3\2"+ - "\2\2\u0164\u0162\3\2\2\2\u0164\u0165\3\2\2\2\u0165\u0167\3\2\2\2\u0166"+ - "\u0164\3\2\2\2\u0167\u0168\7F\2\2\u0168E\3\2\2\2\u0169\u016a\7\66\2\2"+ - "\u016a\u016d\7=\2\2\u016b\u016c\7C\2\2\u016c\u016e\7=\2\2\u016d\u016b"+ - "\3\2\2\2\u016d\u016e\3\2\2\2\u016e\u016f\3\2\2\2\u016f\u0170\78\2\2\u0170"+ - "\u0171\5^\60\2\u0171\u0172\5\\/\2\u0172G\3\2\2\2\u0173\u0174\7\67\2\2"+ - "\u0174\u0175\7=\2\2\u0175\u0176\7;\2\2\u0176\u0177\t\b\2\2\u0177\u0178"+ - "\5^\60\2\u0178\u0179\7C\2\2\u0179\u017a\5^\60\2\u017a\u017b\t\t\2\2\u017b"+ - "\u017c\5\\/\2\u017cI\3\2\2\2\u017d\u017e\7\5\2\2\u017eK\3\2\2\2\u017f"+ - "\u0180\7\6\2\2\u0180M\3\2\2\2\u0181\u0182\5l\67\2\u0182O\3\2\2\2\u0183"+ - "\u0185\79\2\2\u0184\u0186\7M\2\2\u0185\u0184\3\2\2\2\u0185\u0186\3\2\2"+ - "\2\u0186\u0187\3\2\2\2\u0187\u0188\5^\60\2\u0188\u018c\5\\/\2\u0189\u018b"+ - "\5R*\2\u018a\u0189\3\2\2\2\u018b\u018e\3\2\2\2\u018c\u018a\3\2\2\2\u018c"+ - "\u018d\3\2\2\2\u018d\u0190\3\2\2\2\u018e\u018c\3\2\2\2\u018f\u0191\5T"+ - "+\2\u0190\u018f\3\2\2\2\u0190\u0191\3\2\2\2\u0191Q\3\2\2\2\u0192\u0193"+ - "\7:\2\2\u0193\u0195\79\2\2\u0194\u0196\7M\2\2\u0195\u0194\3\2\2\2\u0195"+ - "\u0196\3\2\2\2\u0196\u0197\3\2\2\2\u0197\u0198\5^\60\2\u0198\u0199\5\\"+ - "/\2\u0199S\3\2\2\2\u019a\u019b\7:\2\2\u019b\u019c\5\\/\2\u019cU\3\2\2"+ - "\2\u019d\u01a3\7\61\2\2\u019e\u01a3\7\62\2\2\u019f\u01a3\5Z.\2\u01a0\u01a3"+ - "\5X-\2\u01a1\u01a3\7)\2\2\u01a2\u019d\3\2\2\2\u01a2\u019e\3\2\2\2\u01a2"+ - "\u019f\3\2\2\2\u01a2\u01a0\3\2\2\2\u01a2\u01a1\3\2\2\2\u01a3W\3\2\2\2"+ - "\u01a4\u01a5\7\65\2\2\u01a5\u01a6\7G\2\2\u01a6\u01a7\5V,\2\u01a7\u01a8"+ - "\7H\2\2\u01a8\u01a9\5V,\2\u01a9Y\3\2\2\2\u01aa\u01ab\7G\2\2\u01ab\u01ac"+ - "\7H\2\2\u01ac\u01ad\5V,\2\u01ad[\3\2\2\2\u01ae\u01b2\7E\2\2\u01af\u01b1"+ - "\5\4\3\2\u01b0\u01af\3\2\2\2\u01b1\u01b4\3\2\2\2\u01b2\u01b0\3\2\2\2\u01b2"+ - "\u01b3\3\2\2\2\u01b3\u01b5\3\2\2\2\u01b4\u01b2\3\2\2\2\u01b5\u01b6\7F"+ - "\2\2\u01b6]\3\2\2\2\u01b7\u01b8\b\60\1\2\u01b8\u01bc\5j\66\2\u01b9\u01bc"+ - "\5l\67\2\u01ba\u01bc\5h\65\2\u01bb\u01b7\3\2\2\2\u01bb\u01b9\3\2\2\2\u01bb"+ - "\u01ba\3\2\2\2\u01bc\u01c5\3\2\2\2\u01bd\u01be\f\4\2\2\u01be\u01bf\t\n"+ - "\2\2\u01bf\u01c4\5^\60\5\u01c0\u01c1\f\3\2\2\u01c1\u01c2\t\13\2\2\u01c2"+ - "\u01c4\5^\60\4\u01c3\u01bd\3\2\2\2\u01c3\u01c0\3\2\2\2\u01c4\u01c7\3\2"+ - "\2\2\u01c5\u01c3\3\2\2\2\u01c5\u01c6\3\2\2\2\u01c6_\3\2\2\2\u01c7\u01c5"+ - "\3\2\2\2\u01c8\u01d1\7G\2\2\u01c9\u01ce\5^\60\2\u01ca\u01cb\7C\2\2\u01cb"+ - "\u01cd\5^\60\2\u01cc\u01ca\3\2\2\2\u01cd\u01d0\3\2\2\2\u01ce\u01cc\3\2"+ - "\2\2\u01ce\u01cf\3\2\2\2\u01cf\u01d2\3\2\2\2\u01d0\u01ce\3\2\2\2\u01d1"+ - "\u01c9\3\2\2\2\u01d1\u01d2\3\2\2\2\u01d2\u01d3\3\2\2\2\u01d3\u01d4\7H"+ - "\2\2\u01d4a\3\2\2\2\u01d5\u01de\7E\2\2\u01d6\u01db\5d\63\2\u01d7\u01d8"+ - "\7C\2\2\u01d8\u01da\5d\63\2\u01d9\u01d7\3\2\2\2\u01da\u01dd\3\2\2\2\u01db"+ - "\u01d9\3\2\2\2\u01db\u01dc\3\2\2\2\u01dc\u01df\3\2\2\2\u01dd\u01db\3\2"+ - "\2\2\u01de\u01d6\3\2\2\2\u01de\u01df\3\2\2\2\u01df\u01e0\3\2\2\2\u01e0"+ - "\u01e1\7F\2\2\u01e1c\3\2\2\2\u01e2\u01e3\5^\60\2\u01e3\u01e4\7D\2\2\u01e4"+ - "\u01e5\5^\60\2\u01e5e\3\2\2\2\u01e6\u01eb\7=\2\2\u01e7\u01e8\7G\2\2\u01e8"+ - "\u01e9\5^\60\2\u01e9\u01ea\7H\2\2\u01ea\u01ec\3\2\2\2\u01eb\u01e7\3\2"+ - "\2\2\u01ec\u01ed\3\2\2\2\u01ed\u01eb\3\2\2\2\u01ed\u01ee\3\2\2\2\u01ee"+ - "g\3\2\2\2\u01ef\u01f5\7>\2\2\u01f0\u01f5\7.\2\2\u01f1\u01f5\7<\2\2\u01f2"+ - "\u01f5\5`\61\2\u01f3\u01f5\5b\62\2\u01f4\u01ef\3\2\2\2\u01f4\u01f0\3\2"+ - "\2\2\u01f4\u01f1\3\2\2\2\u01f4\u01f2\3\2\2\2\u01f4\u01f3\3\2\2\2\u01f5"+ - "i\3\2\2\2\u01f6\u01f9\7=\2\2\u01f7\u01f9\5f\64\2\u01f8\u01f6\3\2\2\2\u01f8"+ - "\u01f7\3\2\2\2\u01f9k\3\2\2\2\u01fa\u01fb\7=\2\2\u01fb\u01fc\5n8\2\u01fc"+ - "m\3\2\2\2\u01fd\u0206\7K\2\2\u01fe\u0203\5^\60\2\u01ff\u0200\7C\2\2\u0200"+ - "\u0202\5^\60\2\u0201\u01ff\3\2\2\2\u0202\u0205\3\2\2\2\u0203\u0201\3\2"+ - "\2\2\u0203\u0204\3\2\2\2\u0204\u0207\3\2\2\2\u0205\u0203\3\2\2\2\u0206"+ - "\u01fe\3\2\2\2\u0206\u0207\3\2\2\2\u0207\u0208\3\2\2\2\u0208\u0209\7L"+ - "\2\2\u0209o\3\2\2\2(s\u008e\u00a7\u00b5\u00c2\u00ce\u00dd\u00e5\u00fa"+ - "\u00fd\u0102\u012c\u0138\u0144\u014d\u0150\u015a\u015e\u0164\u016d\u0185"+ - "\u018c\u0190\u0195\u01a2\u01b2\u01bb\u01c3\u01c5\u01ce\u01d1\u01db\u01de"+ - "\u01ed\u01f4\u01f8\u0203\u0206"; - public static final ATN _ATN = - new ATNDeserializer().deserialize(_serializedATN.toCharArray()); - static { - _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()]; - for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) { - _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); - } - } -} \ No newline at end of file diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/AssignStmtVisitor.java b/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/AssignStmtVisitor.java deleted file mode 100644 index 49f0ca85d..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/AssignStmtVisitor.java +++ /dev/null @@ -1,25 +0,0 @@ -package gov.nist.csd.pm.policy.pml.compiler.visitor; - -import gov.nist.csd.pm.policy.pml.antlr.PMLBaseVisitor; -import gov.nist.csd.pm.policy.pml.antlr.PMLParser; -import gov.nist.csd.pm.policy.pml.model.context.VisitorContext; -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.statement.AssignStatement; -import gov.nist.csd.pm.policy.pml.statement.Expression; - -public class AssignStmtVisitor extends PMLBaseVisitor { - - private final VisitorContext visitorCtx; - - public AssignStmtVisitor(VisitorContext visitorCtx) { - this.visitorCtx = visitorCtx; - } - - @Override - public AssignStatement visitAssignStatement(PMLParser.AssignStatementContext ctx) { - Expression child = Expression.compile(visitorCtx, ctx.childNode, Type.string()); - Expression parents = Expression.compile(visitorCtx, ctx.parentNodes, Type.array(Type.string())); - - return new AssignStatement(child, parents); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/CreateAttrStmtVisitor.java b/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/CreateAttrStmtVisitor.java deleted file mode 100644 index eef0c5fbc..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/CreateAttrStmtVisitor.java +++ /dev/null @@ -1,28 +0,0 @@ -package gov.nist.csd.pm.policy.pml.compiler.visitor; - -import gov.nist.csd.pm.policy.pml.antlr.PMLBaseVisitor; -import gov.nist.csd.pm.policy.pml.antlr.PMLParser; -import gov.nist.csd.pm.policy.pml.model.context.VisitorContext; -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.statement.CreateAttrStatement; -import gov.nist.csd.pm.policy.pml.statement.Expression; -import gov.nist.csd.pm.policy.model.graph.nodes.NodeType; - -public class CreateAttrStmtVisitor extends PMLBaseVisitor { - - private final VisitorContext visitorCtx; - - public CreateAttrStmtVisitor(VisitorContext visitorCtx) { - this.visitorCtx = visitorCtx; - } - - @Override - public CreateAttrStatement visitCreateAttributeStatement(PMLParser.CreateAttributeStatementContext ctx) { - NodeType type = ctx.OBJECT_ATTRIBUTE() != null ? - NodeType.OA : NodeType.UA; - Expression name = Expression.compile(visitorCtx, ctx.name, Type.string()); - Expression assignTo = Expression.compile(visitorCtx, ctx.parents, Type.array(Type.string())); - - return new CreateAttrStatement(name, type, assignTo); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/CreatePolicyStmtVisitor.java b/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/CreatePolicyStmtVisitor.java deleted file mode 100644 index 19e2b699b..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/CreatePolicyStmtVisitor.java +++ /dev/null @@ -1,23 +0,0 @@ -package gov.nist.csd.pm.policy.pml.compiler.visitor; - -import gov.nist.csd.pm.policy.pml.antlr.PMLBaseVisitor; -import gov.nist.csd.pm.policy.pml.antlr.PMLParser; -import gov.nist.csd.pm.policy.pml.model.context.VisitorContext; -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.statement.CreatePolicyStatement; -import gov.nist.csd.pm.policy.pml.statement.Expression; - -public class CreatePolicyStmtVisitor extends PMLBaseVisitor { - - private final VisitorContext visitorCtx; - - public CreatePolicyStmtVisitor(VisitorContext visitorCtx) { - this.visitorCtx = visitorCtx; - } - - @Override - public CreatePolicyStatement visitCreatePolicyStatement(PMLParser.CreatePolicyStatementContext ctx) { - Expression name = Expression.compile(visitorCtx, ctx.expression(), Type.string()); - return new CreatePolicyStatement(name); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/CreateProhibitionStmtVisitor.java b/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/CreateProhibitionStmtVisitor.java deleted file mode 100644 index aa88a70c0..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/CreateProhibitionStmtVisitor.java +++ /dev/null @@ -1,49 +0,0 @@ -package gov.nist.csd.pm.policy.pml.compiler.visitor; - -import gov.nist.csd.pm.policy.pml.antlr.PMLBaseVisitor; -import gov.nist.csd.pm.policy.pml.antlr.PMLParser; -import gov.nist.csd.pm.policy.pml.model.context.VisitorContext; -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.statement.Expression; -import gov.nist.csd.pm.policy.model.prohibition.ProhibitionSubject; -import gov.nist.csd.pm.policy.pml.statement.CreateProhibitionStatement; - -import java.util.ArrayList; -import java.util.List; - -public class CreateProhibitionStmtVisitor extends PMLBaseVisitor { - - private final VisitorContext visitorCtx; - - public CreateProhibitionStmtVisitor(VisitorContext visitorCtx) { - this.visitorCtx = visitorCtx; - } - - @Override - public CreateProhibitionStatement visitCreateProhibitionStatement(PMLParser.CreateProhibitionStatementContext ctx) { - Expression label = Expression.compile(visitorCtx, ctx.name, Type.string()); - Expression subject = Expression.compile(visitorCtx, ctx.subject, Type.string()); - ProhibitionSubject.Type type; - if (ctx.USER() != null) { - type = ProhibitionSubject.Type.USER; - } else if (ctx.USER_ATTRIBUTE() != null) { - type = ProhibitionSubject.Type.USER_ATTRIBUTE; - } else { - type = ProhibitionSubject.Type.PROCESS; - } - - Expression accessRights = Expression.compile(visitorCtx, ctx.accessRights, Type.array(Type.string())); - - boolean isIntersection = ctx.INTERSECTION() != null; - - List containers = new ArrayList<>(); - for (PMLParser.ProhibitionContainerExpressionContext contExprCtx : ctx.containers.prohibitionContainerExpression()) { - boolean isComplement = - contExprCtx.IS_COMPLEMENT() != null && contExprCtx.IS_COMPLEMENT().getText().equals("!"); - Expression name = Expression.compile(visitorCtx, contExprCtx.container, Type.string()); - containers.add(new CreateProhibitionStatement.Container(isComplement, name)); - } - - return new CreateProhibitionStatement(label, subject, type, accessRights, isIntersection, containers); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/CreateRuleStmtVisitor.java b/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/CreateRuleStmtVisitor.java deleted file mode 100644 index 6f97448a4..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/CreateRuleStmtVisitor.java +++ /dev/null @@ -1,124 +0,0 @@ -package gov.nist.csd.pm.policy.pml.compiler.visitor; - -import gov.nist.csd.pm.policy.pml.antlr.PMLBaseVisitor; -import gov.nist.csd.pm.policy.pml.antlr.PMLParser; -import gov.nist.csd.pm.policy.pml.model.context.VisitorContext; -import gov.nist.csd.pm.policy.pml.model.scope.VariableAlreadyDefinedInScopeException; -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.statement.CreateRuleStatement; -import gov.nist.csd.pm.policy.pml.statement.Expression; -import gov.nist.csd.pm.policy.pml.statement.PMLStatement; - -import java.util.ArrayList; -import java.util.List; - -public class CreateRuleStmtVisitor extends PMLBaseVisitor { - - private final VisitorContext visitorCtx; - - public CreateRuleStmtVisitor(VisitorContext visitorCtx) { - this.visitorCtx = visitorCtx; - } - - @Override - public CreateRuleStatement visitCreateRuleStatement(PMLParser.CreateRuleStatementContext ctx) { - Expression name = Expression.compile(visitorCtx, ctx.ruleName, Type.string()); - - CreateRuleStatement.SubjectClause subjectClause = getSubjectClause(ctx.subjectClause()); - CreateRuleStatement.PerformsClause performsClause = getPerformsClause(ctx.performsClause); - CreateRuleStatement.OnClause onClause = getOnClause(ctx.onClause()); - CreateRuleStatement.ResponseBlock responseBlock = new CreateRuleStatement.ResponseBlock(); - try { - responseBlock = getResponse(ctx.response()); - } catch (VariableAlreadyDefinedInScopeException e) { - visitorCtx.errorLog().addError(ctx, e.getMessage()); - } - - return new CreateRuleStatement(name, subjectClause, performsClause, onClause, responseBlock); - } - - private CreateRuleStatement.ResponseBlock getResponse(PMLParser.ResponseContext ctx) throws VariableAlreadyDefinedInScopeException { - String evtVar = ctx.ID().getText(); - - // create a new local parser scope for the response block - // add the event name and event context map to the local parser scope - VisitorContext localVisitorCtx = visitorCtx.copy(); - localVisitorCtx.scope().addVariable(evtVar, Type.map(Type.string(), Type.any()), true); - - PMLParser.ResponseBlockContext responseBlockCtx = ctx.responseBlock(); - List responseStmtsCtx = responseBlockCtx.responseStatement(); - - List stmts = new ArrayList<>(); - for (PMLParser.ResponseStatementContext responseStmtCtx : responseStmtsCtx) { - PMLStatement stmt = null; - - if (responseStmtCtx.statement() != null) { - stmt = new StatementVisitor(localVisitorCtx) - .visitStatement(responseStmtCtx.statement()); - } else if (responseStmtCtx.createRuleStatement() != null) { - stmt = new CreateRuleStmtVisitor(localVisitorCtx) - .visitCreateRuleStatement(responseStmtCtx.createRuleStatement()); - } else if (responseStmtCtx.deleteRuleStatement() != null) { - stmt = new DeleteRuleStmtVisitor(localVisitorCtx) - .visitDeleteRuleStatement(responseStmtCtx.deleteRuleStatement()); - } - - stmts.add(stmt); - } - - return new CreateRuleStatement.ResponseBlock(evtVar, stmts); - } - - private CreateRuleStatement.OnClause getOnClause(PMLParser.OnClauseContext onClauseCtx) { - Expression name = null; - CreateRuleStatement.TargetType onClauseType = null; - if (onClauseCtx instanceof PMLParser.PolicyElementContext policyElementContext) { - name = Expression.compile(visitorCtx, policyElementContext.expression(), Type.string()); - onClauseType = CreateRuleStatement.TargetType.POLICY_ELEMENT; - } else if (onClauseCtx instanceof PMLParser.AnyPolicyElementContext) { - onClauseType = CreateRuleStatement.TargetType.ANY_POLICY_ELEMENT; - } else if (onClauseCtx instanceof PMLParser.AnyContainedInContext anyContainedInContext) { - name = Expression.compile(visitorCtx, anyContainedInContext.expression(), Type.string()); - onClauseType = CreateRuleStatement.TargetType.ANY_CONTAINED_IN; - } else if (onClauseCtx instanceof PMLParser.AnyOfSetContext anyOfSetContext) { - name = Expression.compile(visitorCtx, anyOfSetContext.expression(), Type.array(Type.string())); - onClauseType = CreateRuleStatement.TargetType.ANY_OF_SET; - } else { - onClauseType = CreateRuleStatement.TargetType.ANY_POLICY_ELEMENT; - } - - return new CreateRuleStatement.OnClause(name, onClauseType); - } - - private CreateRuleStatement.PerformsClause getPerformsClause(PMLParser.ExpressionContext performsClause) { - Expression expression = Expression.compile(visitorCtx, performsClause, Type.array(Type.string())); - return new CreateRuleStatement.PerformsClause(expression); - } - - private CreateRuleStatement.SubjectClause getSubjectClause(PMLParser.SubjectClauseContext ctx) { - CreateRuleStatement.SubjectType type; - Expression expr; - - if (ctx instanceof PMLParser.AnyUserSubjectContext) { - type = CreateRuleStatement.SubjectType.ANY_USER; - return new CreateRuleStatement.SubjectClause(type); - } else if (ctx instanceof PMLParser.UserSubjectContext userSubjectCtx) { - type = CreateRuleStatement.SubjectType.USER; - expr = Expression.compile(visitorCtx, userSubjectCtx.user, Type.string()); - - } else if (ctx instanceof PMLParser.UsersListSubjectContext usersListSubjectCtx) { - type = CreateRuleStatement.SubjectType.USERS; - expr = Expression.compile(visitorCtx, usersListSubjectCtx.users, Type.array(Type.string())); - - } else if (ctx instanceof PMLParser.UserAttrSubjectContext userAttrSubjectCtx) { - type = CreateRuleStatement.SubjectType.USER; - expr = Expression.compile(visitorCtx, userAttrSubjectCtx.attribute, Type.string()); - - } else { - type = CreateRuleStatement.SubjectType.USER; - expr = Expression.compile(visitorCtx, ((PMLParser.ProcessSubjectContext)ctx).process, Type.string()); - } - - return new CreateRuleStatement.SubjectClause(type, expr); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/CreateUserOrObjectStmtVisitor.java b/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/CreateUserOrObjectStmtVisitor.java deleted file mode 100644 index 66ea65be1..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/CreateUserOrObjectStmtVisitor.java +++ /dev/null @@ -1,28 +0,0 @@ -package gov.nist.csd.pm.policy.pml.compiler.visitor; - -import gov.nist.csd.pm.policy.pml.antlr.PMLBaseVisitor; -import gov.nist.csd.pm.policy.pml.antlr.PMLParser; -import gov.nist.csd.pm.policy.pml.model.context.VisitorContext; -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.statement.CreateUserOrObjectStatement; -import gov.nist.csd.pm.policy.pml.statement.Expression; -import gov.nist.csd.pm.policy.model.graph.nodes.NodeType; - -public class CreateUserOrObjectStmtVisitor extends PMLBaseVisitor { - - private final VisitorContext visitorCtx; - - public CreateUserOrObjectStmtVisitor(VisitorContext visitorCtx) { - this.visitorCtx = visitorCtx; - } - - @Override - public CreateUserOrObjectStatement visitCreateUserOrObjectStatement(PMLParser.CreateUserOrObjectStatementContext ctx) { - NodeType type = ctx.OBJECT() != null ? - NodeType.O : NodeType.U; - Expression name = Expression.compile(visitorCtx, ctx.name, Type.string()); - Expression assignTo = Expression.compile(visitorCtx, ctx.parents, Type.array(Type.string())); - - return new CreateUserOrObjectStatement(name, type, assignTo); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/DeassignStmtVisitor.java b/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/DeassignStmtVisitor.java deleted file mode 100644 index 54edcc9f2..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/DeassignStmtVisitor.java +++ /dev/null @@ -1,25 +0,0 @@ -package gov.nist.csd.pm.policy.pml.compiler.visitor; - -import gov.nist.csd.pm.policy.pml.antlr.PMLBaseVisitor; -import gov.nist.csd.pm.policy.pml.antlr.PMLParser; -import gov.nist.csd.pm.policy.pml.model.context.VisitorContext; -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.statement.DeassignStatement; -import gov.nist.csd.pm.policy.pml.statement.Expression; - -public class DeassignStmtVisitor extends PMLBaseVisitor { - - private final VisitorContext visitorCtx; - - public DeassignStmtVisitor(VisitorContext visitorCtx) { - this.visitorCtx = visitorCtx; - } - - @Override - public DeassignStatement visitDeassignStatement(PMLParser.DeassignStatementContext ctx) { - Expression name = Expression.compile(visitorCtx, ctx.childNode, Type.string()); - Expression parents = Expression.compile(visitorCtx, ctx.parentNodes, Type.array(Type.string())); - - return new DeassignStatement(name, parents); - } -} \ No newline at end of file diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/DeleteStmtVisitor.java b/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/DeleteStmtVisitor.java deleted file mode 100644 index 4fa448467..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/DeleteStmtVisitor.java +++ /dev/null @@ -1,45 +0,0 @@ -package gov.nist.csd.pm.policy.pml.compiler.visitor; - -import gov.nist.csd.pm.policy.pml.antlr.PMLBaseVisitor; -import gov.nist.csd.pm.policy.pml.antlr.PMLParser; -import gov.nist.csd.pm.policy.pml.model.context.VisitorContext; -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.statement.DeleteStatement; -import gov.nist.csd.pm.policy.pml.statement.Expression; - -public class DeleteStmtVisitor extends PMLBaseVisitor { - - private final VisitorContext visitorCtx; - - public DeleteStmtVisitor(VisitorContext visitorCtx) { - this.visitorCtx = visitorCtx; - } - - @Override - public DeleteStatement visitDeleteStatement(PMLParser.DeleteStatementContext ctx) { - Expression nameExpr = Expression.compile(visitorCtx, ctx.expression(), Type.string()); - - PMLParser.DeleteTypeContext deleteTypeCtx = ctx.deleteType(); - if (deleteTypeCtx instanceof PMLParser.DeleteNodeContext deleteNodeCtx) { - DeleteStatement.Type deleteNodeType; - PMLParser.NodeTypeContext nodeTypeCtx = deleteNodeCtx.nodeType(); - if (nodeTypeCtx.POLICY_CLASS() != null) { - deleteNodeType = DeleteStatement.Type.POLICY_CLASS; - } else if (nodeTypeCtx.OBJECT_ATTRIBUTE() != null) { - deleteNodeType = DeleteStatement.Type.OBJECT_ATTRIBUTE; - } else if (nodeTypeCtx.USER_ATTRIBUTE() != null) { - deleteNodeType = DeleteStatement.Type.USER_ATTRIBUTE; - } else if (nodeTypeCtx.OBJECT() != null) { - deleteNodeType = DeleteStatement.Type.OBJECT; - } else { - deleteNodeType = DeleteStatement.Type.USER; - } - - return new DeleteStatement(deleteNodeType, nameExpr); - } else if (deleteTypeCtx instanceof PMLParser.DeleteProhibitionContext) { - return new DeleteStatement(DeleteStatement.Type.PROHIBITION, nameExpr); - } else { - return new DeleteStatement(DeleteStatement.Type.OBLIGATION, nameExpr); - } - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/ForRangeStmtVisitor.java b/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/ForRangeStmtVisitor.java deleted file mode 100644 index c0a31938b..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/ForRangeStmtVisitor.java +++ /dev/null @@ -1,52 +0,0 @@ -package gov.nist.csd.pm.policy.pml.compiler.visitor; - -import gov.nist.csd.pm.policy.pml.antlr.PMLBaseVisitor; -import gov.nist.csd.pm.policy.pml.antlr.PMLParser; -import gov.nist.csd.pm.policy.pml.model.context.VisitorContext; -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.model.scope.PMLScopeException; -import gov.nist.csd.pm.policy.pml.statement.Expression; -import gov.nist.csd.pm.policy.pml.statement.ForRangeStatement; -import gov.nist.csd.pm.policy.pml.statement.PMLStatement; - -import java.util.ArrayList; -import java.util.List; - -public class ForRangeStmtVisitor extends PMLBaseVisitor { - private final VisitorContext visitorCtx; - - public ForRangeStmtVisitor(VisitorContext visitorCtx) { - this.visitorCtx = visitorCtx; - } - - @Override - public ForRangeStatement visitForRangeStatement(PMLParser.ForRangeStatementContext ctx) { - String varName = ctx.ID().getText(); - - boolean lowerBound = ctx.lowerBound.getText().equals("("); - boolean upperBound = ctx.upperBound.getText().equals(")"); - - Expression lower = Expression.compile(visitorCtx, ctx.lower, Type.number()); - Expression upper = Expression.compile(visitorCtx, ctx.upper, Type.number()); - - VisitorContext localVisitorCtx = visitorCtx.copy(); - List block = new ArrayList<>(); - - for (PMLParser.StatementContext stmtCtx : ctx.statementBlock().statement()) { - - try { - localVisitorCtx.scope().addVariable(varName, Type.number(), false); - }catch (PMLScopeException e) { - visitorCtx.errorLog().addError(ctx, e.getMessage()); - } - - PMLStatement statement = new StatementVisitor(localVisitorCtx) - .visitStatement(stmtCtx); - block.add(statement); - - visitorCtx.scope().overwriteVariables(localVisitorCtx.scope()); - } - - return new ForRangeStatement(varName, lower, lowerBound, upper, upperBound, block); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/ForeachStmtVisitor.java b/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/ForeachStmtVisitor.java deleted file mode 100644 index 8382df398..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/ForeachStmtVisitor.java +++ /dev/null @@ -1,79 +0,0 @@ -package gov.nist.csd.pm.policy.pml.compiler.visitor; - -import gov.nist.csd.pm.policy.pml.antlr.PMLBaseVisitor; -import gov.nist.csd.pm.policy.pml.antlr.PMLParser; -import gov.nist.csd.pm.policy.pml.model.scope.PMLScopeException; -import gov.nist.csd.pm.policy.pml.statement.Expression; -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.statement.ForeachStatement; -import gov.nist.csd.pm.policy.pml.model.context.VisitorContext; -import gov.nist.csd.pm.policy.pml.statement.PMLStatement; - -import java.util.ArrayList; -import java.util.List; - -public class ForeachStmtVisitor extends PMLBaseVisitor { - - private final VisitorContext visitorCtx; - - public ForeachStmtVisitor(VisitorContext visitorCtx) { - this.visitorCtx = visitorCtx; - } - - @Override - public ForeachStatement visitForeachStatement(PMLParser.ForeachStatementContext ctx) { - Type anyArrayType = Type.array(Type.any()); - Type anyMapType = Type.map(Type.any(), Type.any()); - - Expression iter = Expression.compile(visitorCtx, ctx.expression(), anyArrayType, anyMapType); - Type iterType = Type.any(); - try { - iterType = iter.getType(visitorCtx.scope()); - } catch (PMLScopeException e) { - visitorCtx.errorLog().addError(ctx, e.getMessage()); - } - - String varName = ctx.key.getText(); - String mapValueVarName = null; - if (ctx.mapValue != null) { - if (!iterType.equals(Type.map(Type.any(), Type.any()))) { - visitorCtx.errorLog().addError( - ctx, - "use of key, value in foreach only available for maps" - ); - } else { - mapValueVarName = ctx.mapValue.getText(); - } - } - - List block = new ArrayList<>(); - Type keyType; - Type valueType = null; - if (iterType.equals(anyArrayType)) { - keyType = iterType.getArrayType(); - } else { - keyType = iterType.getMapKeyType(); - valueType = iterType.getMapValueType(); - } - - VisitorContext localVisitorCtx = visitorCtx.copy(); - for (PMLParser.StatementContext stmtCtx : ctx.statementBlock().statement()) { - try { - localVisitorCtx.scope().addVariable(varName, keyType, false); - if (valueType != null) { - localVisitorCtx.scope().addVariable(mapValueVarName, valueType, false); - } - }catch (PMLScopeException e) { - visitorCtx.errorLog().addError(ctx, e.getMessage()); - } - - PMLStatement statement = new StatementVisitor(localVisitorCtx) - .visitStatement(stmtCtx); - block.add(statement); - - visitorCtx.scope().overwriteVariables(localVisitorCtx.scope()); - } - - return new ForeachStatement(varName, mapValueVarName, iter, block); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/FunctionDefinitionVisitor.java b/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/FunctionDefinitionVisitor.java deleted file mode 100644 index 771e8a0d4..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/FunctionDefinitionVisitor.java +++ /dev/null @@ -1,150 +0,0 @@ -package gov.nist.csd.pm.policy.pml.compiler.visitor; - -import gov.nist.csd.pm.policy.pml.antlr.PMLBaseVisitor; -import gov.nist.csd.pm.policy.pml.antlr.PMLParser; -import gov.nist.csd.pm.policy.pml.model.context.VisitorContext; -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; -import gov.nist.csd.pm.policy.pml.statement.PMLStatement; -import gov.nist.csd.pm.policy.pml.model.function.FormalArgument; -import gov.nist.csd.pm.policy.pml.statement.FunctionReturnStmt; -import gov.nist.csd.pm.policy.pml.model.scope.FunctionAlreadyDefinedInScopeException; -import gov.nist.csd.pm.policy.pml.model.scope.PMLScopeException; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -public class FunctionDefinitionVisitor extends PMLBaseVisitor { - - private final VisitorContext visitorCtx; - - public FunctionDefinitionVisitor(VisitorContext visitorCtx) { - this.visitorCtx = visitorCtx; - } - - @Override - public FunctionDefinitionStatement visitFunctionDefinitionStatement(PMLParser.FunctionDefinitionStatementContext ctx) { - String funcName = ctx.ID().getText(); - List args = parseFormalArgs(ctx.formalArgList()); - Type returnType = parseReturnType(ctx.funcReturnType()); - List body = parseBody(ctx, args); - - FunctionDefinitionStatement functionDefinition = new FunctionDefinitionStatement(funcName, returnType, args, body); - - // add function to scope - try { - visitorCtx.scope().addFunction(functionDefinition); - } catch (FunctionAlreadyDefinedInScopeException e) { - visitorCtx.errorLog().addError(ctx, e.getMessage()); - } - - // check that the body has a return statement IF the return type is NOT VOID - PMLStatement lastStmt = null; - if (body.size() > 0) { - lastStmt = body.get(body.size()-1); - } - - if (returnType.isVoid()) { - if (lastStmt instanceof FunctionReturnStmt returnStmt) { - if (!returnStmt.isVoid()) { - visitorCtx.errorLog().addError( - ctx, - "return statement should be empty for functions that return VOID" - ); - } - } - } else { - if (lastStmt instanceof FunctionReturnStmt returnStmt) { - Type retExprType = Type.any(); - try { - retExprType = returnStmt.getExpr().getType(visitorCtx.scope()); - } catch (PMLScopeException e) { - visitorCtx.errorLog().addError(ctx, e.getMessage()); - } - if (returnStmt.isVoid()) { - visitorCtx.errorLog().addError( - ctx, - "return statement missing expression" - ); - } else if (!retExprType.equals(returnType)) { - visitorCtx.errorLog().addError( - ctx, - "function expected to return type " + returnType + " not " + retExprType - ); - } - } else { - visitorCtx.errorLog().addError( - ctx, - "function missing return statement at end of function body" - ); - } - } - - return functionDefinition; - } - - private List parseBody(PMLParser.FunctionDefinitionStatementContext ctx, List args) { - PMLParser.FuncBodyContext funcBodyCtx = ctx.funcBody(); - - // create a new scope for the function body - VisitorContext localVisitorCtx = visitorCtx.copy(); - // add the args to the local scope - for (FormalArgument formalArgument : args) { - // string literal as a placeholder since the actual value is not determined yet - try { - localVisitorCtx.scope().addVariable(formalArgument.name(), formalArgument.type(), false); - } catch (PMLScopeException e) { - visitorCtx.errorLog().addError(ctx, e.getMessage()); - } - } - - StatementVisitor statementVisitor = new StatementVisitor(localVisitorCtx); - List stmts = new ArrayList<>(); - for (PMLParser.StatementContext stmtCtx : funcBodyCtx.statement()) { - stmts.add(statementVisitor.visitStatement(stmtCtx)); - } - - return stmts; - } - - private List parseFormalArgs(PMLParser.FormalArgListContext formalArgListCtx) { - List formalArguments = new ArrayList<>(); - Set argNames = new HashSet<>(); - for (PMLParser.FormalArgContext formalArgCtx : formalArgListCtx.formalArg()) { - String name = formalArgCtx.ID().getText(); - PMLParser.VariableTypeContext varTypeContext = formalArgCtx.formalArgType().variableType(); - - // check that a formalArg does not clash with an already defined variable - if (visitorCtx.scope().variableExists(name) || argNames.contains(name)) { - visitorCtx.errorLog().addError( - formalArgCtx, - String.format("formal arg '%s' already defined in scope", name) - ); - } - - Type type = Type.toType(varTypeContext); - - argNames.add(name); - formalArguments.add(new FormalArgument(name, type)); - } - - return formalArguments; - } - - private Type parseReturnType(PMLParser.FuncReturnTypeContext funcReturnTypeCtx) { - if (funcReturnTypeCtx == null) { - return Type.voidType(); - } - - if (funcReturnTypeCtx instanceof PMLParser.VariableReturnTypeContext varReturnTypeCtx) { - PMLParser.VariableTypeContext varTypeCtx = varReturnTypeCtx.variableType(); - return Type.toType(varTypeCtx); - } else if (funcReturnTypeCtx instanceof PMLParser.VoidReturnTypeContext) { - return Type.voidType(); - } - - return Type.any(); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/FunctionInvokeVisitor.java b/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/FunctionInvokeVisitor.java deleted file mode 100644 index 77e6b0340..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/FunctionInvokeVisitor.java +++ /dev/null @@ -1,91 +0,0 @@ -package gov.nist.csd.pm.policy.pml.compiler.visitor; - -import gov.nist.csd.pm.policy.pml.antlr.PMLBaseVisitor; -import gov.nist.csd.pm.policy.pml.antlr.PMLParser; -import gov.nist.csd.pm.policy.pml.model.context.VisitorContext; -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.model.scope.PMLScopeException; -import gov.nist.csd.pm.policy.pml.model.scope.UnknownFunctionInScopeException; -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; -import gov.nist.csd.pm.policy.pml.statement.Expression; -import gov.nist.csd.pm.policy.pml.statement.FunctionInvocationStatement; -import gov.nist.csd.pm.policy.pml.model.function.FormalArgument; - -import java.util.ArrayList; -import java.util.List; - -public class FunctionInvokeVisitor extends PMLBaseVisitor { - - private final VisitorContext visitorCtx; - - public FunctionInvokeVisitor(VisitorContext visitorCtx) { - this.visitorCtx = visitorCtx; - } - - @Override - public FunctionInvocationStatement visitFunctionInvoke(PMLParser.FunctionInvokeContext ctx) { - return parse(ctx); - } - - @Override - public FunctionInvocationStatement visitFunctionInvokeStatement(PMLParser.FunctionInvokeStatementContext ctx) { - return parse(ctx.functionInvoke()); - } - - private FunctionInvocationStatement parse(PMLParser.FunctionInvokeContext funcCallCtx) { - String funcName = funcCallCtx.ID().getText(); - - // get actual arg expressions - PMLParser.FunctionInvokeArgsContext funcCallArgsCtx = funcCallCtx.functionInvokeArgs(); - List actualArgs = new ArrayList<>(); - for (PMLParser.ExpressionContext exprCtx : funcCallArgsCtx.expression()) { - Expression expr = Expression.compile(visitorCtx, exprCtx); - - actualArgs.add(expr); - } - - // check the function is in scope and the args are correct - FunctionDefinitionStatement functionDefinitionStmt = null; - try { - functionDefinitionStmt = visitorCtx.scope().getFunction(funcName); - } catch (UnknownFunctionInScopeException e) { - visitorCtx.errorLog().addError(funcCallCtx, e.getMessage()); - } - - // if the stmt is null then there was a compilation error, just return the statement - if (functionDefinitionStmt == null) { - return new FunctionInvocationStatement(funcName, actualArgs); - } - - // check that the actual args are correct type - List formalArgs = functionDefinitionStmt.getArgs(); - - if (formalArgs.size() != actualArgs.size()) { - visitorCtx.errorLog().addError( - funcCallCtx, - "wrong number of args for function call " + funcName + ": " + - "expected " + formalArgs.size() + ", got " + actualArgs.size() - ); - } else { - for (int i = 0; i < actualArgs.size(); i++) { - try { - Expression actual = actualArgs.get(i); - Type actualType = actual.getType(visitorCtx.scope()); - FormalArgument formal = formalArgs.get(i); - - if (!actual.getType(visitorCtx.scope()).equals(formal.type())) { - visitorCtx.errorLog().addError( - funcCallCtx, - "invalid argument type: expected " + formal.type() + ", got " + - actualType + " at arg " + i - ); - } - } catch (PMLScopeException e) { - visitorCtx.errorLog().addError(funcCallCtx, e.getMessage()); - } - } - } - - return new FunctionInvocationStatement(funcName, actualArgs); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/FunctionReturnStmtVisitor.java b/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/FunctionReturnStmtVisitor.java deleted file mode 100644 index 6730f5c36..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/FunctionReturnStmtVisitor.java +++ /dev/null @@ -1,46 +0,0 @@ -package gov.nist.csd.pm.policy.pml.compiler.visitor; - -import gov.nist.csd.pm.policy.pml.antlr.PMLBaseVisitor; -import gov.nist.csd.pm.policy.pml.antlr.PMLParser; -import gov.nist.csd.pm.policy.pml.model.context.VisitorContext; -import gov.nist.csd.pm.policy.pml.statement.FunctionReturnStmt; -import gov.nist.csd.pm.policy.pml.statement.Expression; -import org.antlr.v4.runtime.ParserRuleContext; - -public class FunctionReturnStmtVisitor extends PMLBaseVisitor { - - private final VisitorContext visitorCtx; - - public FunctionReturnStmtVisitor(VisitorContext visitorCtx) { - this.visitorCtx = visitorCtx; - } - - @Override - public FunctionReturnStmt visitFunctionReturnStatement(PMLParser.FunctionReturnStatementContext ctx) { - // check that the return statement is inside a function - if (!inFunction(ctx)) { - visitorCtx.errorLog().addError( - ctx, - "return statement not in function definition" - ); - } - - if (ctx.expression() == null) { - return new FunctionReturnStmt(); - } else { - Expression expr = Expression.compile(visitorCtx, ctx.expression()); - - return new FunctionReturnStmt(expr); - } - } - - private boolean inFunction(ParserRuleContext ctx) { - if (ctx instanceof PMLParser.FunctionDefinitionStatementContext) { - return true; - } else if (ctx == null) { - return false; - } - - return inFunction(ctx.getParent()); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/LiteralExprVisitor.java b/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/LiteralExprVisitor.java deleted file mode 100644 index b9fa4552a..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/LiteralExprVisitor.java +++ /dev/null @@ -1,167 +0,0 @@ -package gov.nist.csd.pm.policy.pml.compiler.visitor; - -import gov.nist.csd.pm.policy.pml.antlr.PMLBaseVisitor; -import gov.nist.csd.pm.policy.pml.antlr.PMLParser; -import gov.nist.csd.pm.policy.pml.model.context.VisitorContext; -import gov.nist.csd.pm.policy.pml.model.expression.Literal; -import gov.nist.csd.pm.policy.pml.model.expression.MapLiteral; -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.model.expression.ArrayLiteral; -import gov.nist.csd.pm.policy.pml.model.scope.PMLScopeException; -import gov.nist.csd.pm.policy.pml.statement.Expression; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -public class LiteralExprVisitor extends PMLBaseVisitor { - - private final VisitorContext visitorCtx; - - public LiteralExprVisitor(VisitorContext visitorCtx) { - this.visitorCtx = visitorCtx; - } - - public Literal visitLiteral(PMLParser.LiteralContext literalCtx) { - if (literalCtx instanceof PMLParser.StringLiteralContext stringLiteralCtx) { - return parseStringLiteral(stringLiteralCtx); - } else if (literalCtx instanceof PMLParser.NumberLiteralContext numberLiteralCtx) { - return parseNumberLiteral(numberLiteralCtx); - } else if (literalCtx instanceof PMLParser.BooleanLiteralContext booleanLiteralCtx) { - return parseBooleanLiteral(booleanLiteralCtx); - } else if (literalCtx instanceof PMLParser.ArrayLiteralContext arrayLiteralCtx) { - return parseArrayLiteral(arrayLiteralCtx); - } else { - return parseMapLiteral((PMLParser.MapLiteralContext) literalCtx); - } - } - - @Override - public Literal visitNumberLiteral(PMLParser.NumberLiteralContext ctx) { - return visitLiteral(ctx); - } - - @Override - public Literal visitStringLiteral(PMLParser.StringLiteralContext ctx) { - return visitLiteral(ctx); - } - - @Override - public Literal visitBooleanLiteral(PMLParser.BooleanLiteralContext ctx) { - return visitLiteral(ctx); - } - - @Override - public Literal visitArrayLiteral(PMLParser.ArrayLiteralContext ctx) { - return visitLiteral(ctx); - } - - @Override - public Literal visitMapLiteral(PMLParser.MapLiteralContext ctx) { - return visitLiteral(ctx); - } - - private Literal parseNumberLiteral(PMLParser.NumberLiteralContext ctx) { - return new Literal(Integer.parseInt(ctx.NUMBER().getText())); - } - - private Literal parseStringLiteral(PMLParser.StringLiteralContext ctx) { - return new Literal(removeQuotes(ctx.STRING().getText())); - } - - private Literal parseBooleanLiteral(PMLParser.BooleanLiteralContext ctx) { - return new Literal(ctx.BOOLEAN().getText().equalsIgnoreCase("true")); - } - - private Literal parseArrayLiteral(PMLParser.ArrayLiteralContext ctx) { - PMLParser.ArrayContext arrayCtx = ctx.array(); - Type elementType = null; - if (arrayCtx.expression().isEmpty()) { - elementType = Type.any(); - } - - // determine the type of the array literal elements - // if all the elements are of the same type then that is the element type - // if the elements are of different types then the type is ANY - List exprs = new ArrayList<>(); - for (PMLParser.ExpressionContext expressionCtx : arrayCtx.expression()) { - Expression expr = Expression.compile(visitorCtx, expressionCtx); - Type type = Type.any(); - try { - type = expr.getType(visitorCtx.scope()); - } catch (PMLScopeException e) { - visitorCtx.errorLog().addError(expressionCtx, e.getMessage()); - } - - if (elementType == null) { - elementType = type; - } else if (!type.equals(elementType)) { - elementType = Type.any(); - } - - exprs.add(expr); - } - - return new Literal(new ArrayLiteral(exprs.toArray(new Expression[]{}), elementType)); - } - - private Literal parseMapLiteral(PMLParser.MapLiteralContext ctx) { - Map map = new HashMap<>(); - - Type keyType = null; - Type valueType = null; - - for(PMLParser.MapEntryContext mapEntryCtx : ctx.map().mapEntry()) { - Expression keyExpr = Expression.compile(visitorCtx, mapEntryCtx.key); - Expression valueExpr = Expression.compile(visitorCtx, mapEntryCtx.value); - - Type keyExprType = Type.any(); - Type valueExprType = Type.any(); - try { - keyExprType = keyExpr.getType(visitorCtx.scope()); - valueExprType = valueExpr.getType(visitorCtx.scope()); - } catch (PMLScopeException e) { - visitorCtx.errorLog().addError(mapEntryCtx, e.getMessage()); - } - - // check that all map keys are the same type - if (keyType == null) { - keyType = keyExprType; - } else if (!keyExprType.equals(keyType)) { - visitorCtx.errorLog().addError( - ctx, - "expected map keys to be of the same type but found: " - + keyExprType + " and " + keyType - ); - } - - // if map values are different types then the value type for this map is ANY - if (valueType == null) { - valueType = valueExprType; - } else if (!valueExprType.equals(valueType)) { - valueType = Type.any(); - } - - map.put(keyExpr, valueExpr); - } - - if (keyType == null) { - keyType = Type.any(); - } - - if (valueType == null) { - valueType = Type.any(); - } - - return new Literal(new MapLiteral(map, keyType, valueType)); - } - - private String removeQuotes(String s) { - if ((s.startsWith("'") && s.endsWith("'")) || (s.startsWith("\"") && s.endsWith("\""))) { - return s.substring(1, s.length() - 1); - } else { - return s; - } - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/PolicyVisitor.java b/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/PolicyVisitor.java deleted file mode 100644 index 92ad89e0f..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/PolicyVisitor.java +++ /dev/null @@ -1,30 +0,0 @@ -package gov.nist.csd.pm.policy.pml.compiler.visitor; - -import gov.nist.csd.pm.policy.pml.antlr.PMLBaseVisitor; -import gov.nist.csd.pm.policy.pml.antlr.PMLParser; -import gov.nist.csd.pm.policy.pml.model.context.VisitorContext; -import gov.nist.csd.pm.policy.pml.statement.PMLStatement; - -import java.util.ArrayList; -import java.util.List; - -public class PolicyVisitor extends PMLBaseVisitor> { - - private final VisitorContext visitorCtx; - - public PolicyVisitor(VisitorContext visitorCtx) { - this.visitorCtx = visitorCtx; - } - - @Override - public List visitPml(PMLParser.PmlContext ctx) { - List statements = new ArrayList<>(); - for (PMLParser.StatementContext stmtCtx : ctx.statement()) { - StatementVisitor statementVisitor = new StatementVisitor(visitorCtx); - PMLStatement statement = statementVisitor.visitStatement(stmtCtx); - statements.add(statement); - } - return statements; - } - -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/SetResourceAccessRightsStmtVisitor.java b/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/SetResourceAccessRightsStmtVisitor.java deleted file mode 100644 index a2bc4e79c..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/SetResourceAccessRightsStmtVisitor.java +++ /dev/null @@ -1,31 +0,0 @@ -package gov.nist.csd.pm.policy.pml.compiler.visitor; - -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.statement.Expression; -import gov.nist.csd.pm.policy.pml.antlr.PMLBaseVisitor; -import gov.nist.csd.pm.policy.pml.antlr.PMLParser; -import gov.nist.csd.pm.policy.pml.model.context.VisitorContext; -import gov.nist.csd.pm.policy.pml.statement.SetResourceAccessRightsStatement; - -public class SetResourceAccessRightsStmtVisitor extends PMLBaseVisitor { - - private final VisitorContext visitorCtx; - - public SetResourceAccessRightsStmtVisitor(VisitorContext visitorCtx) { - this.visitorCtx = visitorCtx; - } - - @Override - public SetResourceAccessRightsStatement visitSetResourceAccessRightsStatement(PMLParser.SetResourceAccessRightsStatementContext ctx) { - if (visitorCtx.scope().isResourceAccessRightsExpressionSet()) { - visitorCtx.errorLog().addError(ctx, "set resource access rights has already been called"); - return new SetResourceAccessRightsStatement(visitorCtx.scope().getResourceAccessRightsExpression()); - } - - Expression exprList = Expression.compile(visitorCtx, ctx.accessRights, Type.array(Type.string())); - - visitorCtx.scope().setResourceAccessRightsExpression(exprList); - - return new SetResourceAccessRightsStatement(exprList); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/StatementVisitor.java b/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/StatementVisitor.java deleted file mode 100644 index 35f67f070..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/StatementVisitor.java +++ /dev/null @@ -1,89 +0,0 @@ -package gov.nist.csd.pm.policy.pml.compiler.visitor; - -import gov.nist.csd.pm.policy.pml.antlr.PMLBaseVisitor; -import gov.nist.csd.pm.policy.pml.antlr.PMLParser; -import gov.nist.csd.pm.policy.pml.model.context.VisitorContext; -import gov.nist.csd.pm.policy.pml.statement.PMLStatement; - -public class StatementVisitor extends PMLBaseVisitor { - - private final VisitorContext visitorCtx; - - public StatementVisitor(VisitorContext visitorCtx) { - this.visitorCtx = visitorCtx; - } - - @Override - public PMLStatement visitStatement(PMLParser.StatementContext ctx) { - PMLStatement statement = null; - if (ctx.variableDeclarationStatement() != null) { - statement = new VarStmtVisitor(visitorCtx) - .visitVariableDeclarationStatement(ctx.variableDeclarationStatement()); - } else if (ctx.functionDefinitionStatement() != null) { - statement = new FunctionDefinitionVisitor(visitorCtx) - .visitFunctionDefinitionStatement(ctx.functionDefinitionStatement()); - } else if (ctx.foreachStatement() != null) { - statement = new ForeachStmtVisitor(visitorCtx) - .visitForeachStatement(ctx.foreachStatement()); - } else if (ctx.forRangeStatement() != null) { - statement = new ForRangeStmtVisitor(visitorCtx) - .visitForRangeStatement(ctx.forRangeStatement()); - } else if (ctx.functionInvokeStatement() != null) { - statement = new FunctionInvokeVisitor(visitorCtx) - .visitFunctionInvokeStatement(ctx.functionInvokeStatement()); - } else if (ctx.ifStatement() != null) { - statement = new IfStmtVisitor(visitorCtx) - .visitIfStatement(ctx.ifStatement()); - } else if (ctx.createAttributeStatement() != null) { - statement = new CreateAttrStmtVisitor(visitorCtx) - .visitCreateAttributeStatement(ctx.createAttributeStatement()); - } else if (ctx.createPolicyStatement() != null) { - statement = new CreatePolicyStmtVisitor(visitorCtx) - .visitCreatePolicyStatement(ctx.createPolicyStatement()); - } else if (ctx.createUserOrObjectStatement() != null) { - statement = new CreateUserOrObjectStmtVisitor(visitorCtx) - .visitCreateUserOrObjectStatement(ctx.createUserOrObjectStatement()); - } else if (ctx.createProhibitionStatement() != null) { - statement = new CreateProhibitionStmtVisitor(visitorCtx) - .visitCreateProhibitionStatement(ctx.createProhibitionStatement()); - } else if (ctx.createObligationStatement() != null) { - statement = new CreateObligationStmtVisitor(visitorCtx) - .visitCreateObligationStatement(ctx.createObligationStatement()); - } else if (ctx.setNodePropertiesStatement() != null) { - statement = new SetNodePropertiesStmtVisitor(visitorCtx) - .visitSetNodePropertiesStatement(ctx.setNodePropertiesStatement()); - } else if (ctx.assignStatement() != null) { - statement = new AssignStmtVisitor(visitorCtx) - .visitAssignStatement(ctx.assignStatement()); - } else if (ctx.deassignStatement() != null) { - statement = new DeassignStmtVisitor(visitorCtx) - .visitDeassignStatement(ctx.deassignStatement()); - } else if (ctx.deleteStatement() != null) { - statement = new DeleteStmtVisitor(visitorCtx) - .visitDeleteStatement(ctx.deleteStatement()); - } else if (ctx.associateStatement() != null) { - statement = new AssociateStmtVisitor(visitorCtx) - .visitAssociateStatement(ctx.associateStatement()); - } else if (ctx.dissociateStatement() != null) { - statement = new DissociateStmtVisitor(visitorCtx) - .visitDissociateStatement(ctx.dissociateStatement()); - } else if (ctx.functionReturnStatement() != null) { - statement = new FunctionReturnStmtVisitor(visitorCtx) - .visitFunctionReturnStatement(ctx.functionReturnStatement()); - } else if (ctx.breakStatement() != null) { - statement = new BreakStmtVisitor(visitorCtx) - .visitBreakStatement(ctx.breakStatement()); - } else if (ctx.continueStatement() != null) { - statement = new ContinueStmtVisitor(visitorCtx) - .visitContinueStatement(ctx.continueStatement()); - } else if (ctx.setResourceAccessRightsStatement() != null) { - statement = new SetResourceAccessRightsStmtVisitor(visitorCtx) - .visitSetResourceAccessRightsStatement(ctx.setResourceAccessRightsStatement()); - } else if (ctx.deleteRuleStatement() != null) { - statement = new DeleteRuleStmtVisitor(visitorCtx) - .visitDeleteRuleStatement(ctx.deleteRuleStatement()); - } - - return statement; - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/VarStmtVisitor.java b/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/VarStmtVisitor.java deleted file mode 100644 index cfde7011a..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/VarStmtVisitor.java +++ /dev/null @@ -1,44 +0,0 @@ -package gov.nist.csd.pm.policy.pml.compiler.visitor; - -import gov.nist.csd.pm.policy.pml.antlr.PMLBaseVisitor; -import gov.nist.csd.pm.policy.pml.antlr.PMLParser; -import gov.nist.csd.pm.policy.pml.model.context.VisitorContext; -import gov.nist.csd.pm.policy.pml.model.scope.PMLScopeException; -import gov.nist.csd.pm.policy.pml.statement.Expression; -import gov.nist.csd.pm.policy.pml.statement.VarStatement; - -public class VarStmtVisitor extends PMLBaseVisitor { - - private final VisitorContext visitorCtx; - - public VarStmtVisitor(VisitorContext visitorCtx) { - this.visitorCtx = visitorCtx; - } - - @Override - public VarStatement visitVariableDeclarationStatement(PMLParser.VariableDeclarationStatementContext ctx) { - String varName = ctx.ID().getText(); - PMLParser.ExpressionContext expressionCtx = ctx.expression(); - Expression expr = Expression.compile(visitorCtx, expressionCtx); - boolean isConst = ctx.CONST() != null; - - VarStatement varStatement = new VarStatement(varName, expr, isConst); - - try { - if (ctx.CONST() == null && ctx.LET() == null - && (visitorCtx.scope().variableExists(varName) && visitorCtx.scope().getVariable(varName).isConst())) { - visitorCtx.errorLog().addError( - ctx, - "cannot reassign const variable" - ); - return varStatement; - } - - visitorCtx.scope().addVariable(varName, expr.getType(visitorCtx.scope()), isConst); - } catch (PMLScopeException e) { - visitorCtx.errorLog().addError(ctx, e.getMessage()); - } - - return varStatement; - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/VariableReferenceVisitor.java b/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/VariableReferenceVisitor.java deleted file mode 100644 index 725d2fe01..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/compiler/visitor/VariableReferenceVisitor.java +++ /dev/null @@ -1,113 +0,0 @@ -package gov.nist.csd.pm.policy.pml.compiler.visitor; - -import gov.nist.csd.pm.policy.pml.antlr.PMLBaseVisitor; -import gov.nist.csd.pm.policy.pml.antlr.PMLParser; -import gov.nist.csd.pm.policy.pml.compiler.Variable; -import gov.nist.csd.pm.policy.pml.model.context.VisitorContext; -import gov.nist.csd.pm.policy.pml.model.expression.EntryReference; -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.model.expression.VariableReference; -import gov.nist.csd.pm.policy.pml.model.scope.UnknownVariableInScopeException; -import gov.nist.csd.pm.policy.pml.statement.Expression; - -import java.util.List; - -public class VariableReferenceVisitor extends PMLBaseVisitor { - - private final VisitorContext visitorCtx; - - public VariableReferenceVisitor(VisitorContext visitorCtx) { - this.visitorCtx = visitorCtx; - } - - public VariableReference visitVariableReference(PMLParser.VariableReferenceContext ctx) { - if (ctx instanceof PMLParser.ReferenceByIDContext referenceByIDContext) { - return visitReferenceByID(referenceByIDContext); - } else { - return visitReferenceByEntry((PMLParser.ReferenceByEntryContext) ctx); - } - } - - @Override - public VariableReference visitReferenceByID(PMLParser.ReferenceByIDContext ctx) { - String id = ctx.ID().getText(); - - // check variable id is in scope - Type type = Type.any(); - try { - Variable variable = visitorCtx.scope().getVariable(id); - type = variable.type(); - } catch (UnknownVariableInScopeException e) { - visitorCtx.errorLog().addError(ctx, e.getMessage()); - } - - return new VariableReference(id, type); - } - - @Override - public VariableReference visitReferenceByEntry(PMLParser.ReferenceByEntryContext ctx) { - String name = ctx.entryReference().ID().getText(); - Type type = Type.any(); - try { - Variable mapVar = visitorCtx.scope().getVariable(name); - type = mapVar.type(); - } catch (UnknownVariableInScopeException e) { - visitorCtx.errorLog().addError(ctx, e.getMessage()); - } - - VariableReference mapVarRef = new VariableReference(name, type); - List exprCtxs = ctx.entryReference().expression(); - boolean first = true; - for (PMLParser.ExpressionContext exprCtx : exprCtxs) { - // if the variable reference is not a map or array and this is not the first accessor processed, there is an error - // if it is the first accessor than check if the variable id is a map - if (first) { - Type t = Type.any(); - - try { - t = visitorCtx.scope().getVariable(name).type(); - } catch (UnknownVariableInScopeException e) { - visitorCtx.errorLog().addError(ctx, e.getMessage()); - } - if (!t.isMap() && !t.isArray()) { - visitorCtx.errorLog().addError( - exprCtx, - "expected map or array type" - ); - } - } else { - if (!mapVarRef.getType().isMap() && !mapVarRef.getType().isArray()) { - visitorCtx.errorLog().addError( - exprCtx, - "expected map or array type" - ); - } - } - - Type allowed; - Type valueType; - if (mapVarRef.getType().isAny()) { - allowed = Type.any(); - valueType = Type.any(); - } else if (mapVarRef.getType().isMap()) { - allowed = Type.string(); - valueType = mapVarRef.getType().getMapValueType(); - if (valueType == null) { - valueType = Type.any(); - } - } else if (mapVarRef.getType().isArray()) { - allowed = Type.number(); - valueType = mapVarRef.getType().getArrayType(); - } else { - allowed = Type.any(); - valueType = Type.any(); - } - - Expression expr = Expression.compile(visitorCtx, exprCtx, allowed); - mapVarRef = new VariableReference(new EntryReference(mapVarRef, expr), valueType); - first = false; - } - - return mapVarRef; - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/functions/Append.java b/src/main/java/gov/nist/csd/pm/policy/pml/functions/Append.java deleted file mode 100644 index 498058aee..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/functions/Append.java +++ /dev/null @@ -1,29 +0,0 @@ -package gov.nist.csd.pm.policy.pml.functions; - -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.pml.model.function.FormalArgument; -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; - -import java.util.List; - -public class Append extends FunctionDefinitionStatement { - public Append() { - super( - "append", - Type.array(Type.any()), - args( - new FormalArgument("dst", Type.array(Type.any())), - new FormalArgument("src", Type.any()) - ), - (ctx, policy) -> { - List valueArr = ctx.scope().getValue("dst").getArrayValue(); - Value srcValue = ctx.scope().getValue("src").getValue(); - - valueArr.add(srcValue); - - return new Value(valueArr); - } - ); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/functions/AppendAll.java b/src/main/java/gov/nist/csd/pm/policy/pml/functions/AppendAll.java deleted file mode 100644 index 032cb98ab..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/functions/AppendAll.java +++ /dev/null @@ -1,29 +0,0 @@ -package gov.nist.csd.pm.policy.pml.functions; - -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.pml.model.function.FormalArgument; -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; - -import java.util.List; - -public class AppendAll extends FunctionDefinitionStatement { - public AppendAll() { - super( - "appendAll", - Type.array(Type.any()), - args( - new FormalArgument("dst", Type.array(Type.any())), - new FormalArgument("src", Type.array(Type.any())) - ), - (ctx, policy) -> { - List dstValueArr = ctx.scope().getValue("dst").getArrayValue(); - List srcValueArr = ctx.scope().getValue("src").getArrayValue(); - - dstValueArr.addAll(srcValueArr); - - return new Value(dstValueArr); - } - ); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/functions/AssignAll.java b/src/main/java/gov/nist/csd/pm/policy/pml/functions/AssignAll.java deleted file mode 100644 index 2f2f7852f..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/functions/AssignAll.java +++ /dev/null @@ -1,34 +0,0 @@ -package gov.nist.csd.pm.policy.pml.functions; - -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.pml.model.function.FormalArgument; -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; - -import java.util.ArrayList; -import java.util.List; - -public class AssignAll extends FunctionDefinitionStatement { - public AssignAll() { - super( - "assignAll", - Type.voidType(), - args( - new FormalArgument("children", Type.array(Type.string())), - new FormalArgument("target", Type.string()) - ), - (ctx, policy) -> { - String target = ctx.scope().getValue("target").getStringValue(); - List childrenValues = ctx.scope().getValue("children").getArrayValue(); - List children = new ArrayList<>(); - for (Value value : childrenValues) { - children.add(value.getStringValue()); - } - - policy.graph().assignAll(children, target); - - return new Value(); - } - ); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/functions/Concat.java b/src/main/java/gov/nist/csd/pm/policy/pml/functions/Concat.java deleted file mode 100644 index ea48dcee9..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/functions/Concat.java +++ /dev/null @@ -1,31 +0,0 @@ -package gov.nist.csd.pm.policy.pml.functions; - -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.pml.model.function.FormalArgument; - -import java.util.List; - -public class Concat extends FunctionDefinitionStatement { - - private static final String ARR_ARG = "arr"; - - public Concat() { - super( - name("concat"), - returns(Type.string()), - args( - new FormalArgument(ARR_ARG, Type.array(Type.string())) - ), - (ctx, author) -> { - List arr = ctx.scope().getValue(ARR_ARG).getArrayValue(); - StringBuilder s = new StringBuilder(); - for (Value v : arr) { - s.append(v.getStringValue()); - } - return new Value(s.toString()); - } - ); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/functions/Contains.java b/src/main/java/gov/nist/csd/pm/policy/pml/functions/Contains.java deleted file mode 100644 index 4259af365..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/functions/Contains.java +++ /dev/null @@ -1,30 +0,0 @@ -package gov.nist.csd.pm.policy.pml.functions; - -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.pml.model.function.FormalArgument; - -import java.util.List; - -public class Contains extends FunctionDefinitionStatement { - - public Contains() { - super( - name("contains"), - returns(Type.bool()), - args( - new FormalArgument("arr", Type.array(Type.any())), - new FormalArgument("element", Type.any()) - ), - (ctx, author) -> { - List valueArr = ctx.scope().getValue("arr").getArrayValue(); - Value element = ctx.scope().getValue("element"); - boolean contains = valueArr.contains(element); - return new Value(contains); - } - ); - } - -} - diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/functions/ContainsKey.java b/src/main/java/gov/nist/csd/pm/policy/pml/functions/ContainsKey.java deleted file mode 100644 index e7f20cdaf..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/functions/ContainsKey.java +++ /dev/null @@ -1,29 +0,0 @@ -package gov.nist.csd.pm.policy.pml.functions; - -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.pml.model.function.FormalArgument; - -import java.util.Map; - -public class ContainsKey extends FunctionDefinitionStatement { - - public ContainsKey() { - super( - name("containsKey"), - returns(Type.bool()), - args( - new FormalArgument("map", Type.map(Type.any(), Type.any())), - new FormalArgument("key", Type.any()) - ), - (ctx, author) -> { - Map valueMap = ctx.scope().getValue("map").getMapValue(); - Value element = ctx.scope().getValue("key"); - boolean contains = valueMap.containsKey(element); - return new Value(contains); - } - ); - } - -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/functions/DeassignAll.java b/src/main/java/gov/nist/csd/pm/policy/pml/functions/DeassignAll.java deleted file mode 100644 index e6ce8d3d1..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/functions/DeassignAll.java +++ /dev/null @@ -1,34 +0,0 @@ -package gov.nist.csd.pm.policy.pml.functions; - -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.pml.model.function.FormalArgument; -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; - -import java.util.ArrayList; -import java.util.List; - -public class DeassignAll extends FunctionDefinitionStatement { - public DeassignAll() { - super( - "deassignAll", - Type.voidType(), - args( - new FormalArgument("children", Type.array(Type.string())), - new FormalArgument("target", Type.string()) - ), - (ctx, policy) -> { - String target = ctx.scope().getValue("target").getStringValue(); - List childrenValues = ctx.scope().getValue("children").getArrayValue(); - List children = new ArrayList<>(); - for (Value value : childrenValues) { - children.add(value.getStringValue()); - } - - policy.graph().deassignAll(children, target); - - return new Value(); - } - ); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/functions/DeassignAllFromAndDelete.java b/src/main/java/gov/nist/csd/pm/policy/pml/functions/DeassignAllFromAndDelete.java deleted file mode 100644 index 1932622d1..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/functions/DeassignAllFromAndDelete.java +++ /dev/null @@ -1,25 +0,0 @@ -package gov.nist.csd.pm.policy.pml.functions; - -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.pml.model.function.FormalArgument; -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; - -public class DeassignAllFromAndDelete extends FunctionDefinitionStatement { - public DeassignAllFromAndDelete() { - super( - "deassignAllFromAndDelete", - Type.voidType(), - args( - new FormalArgument("target", Type.string()) - ), - (ctx, policy) -> { - String target = ctx.scope().getValue("target").getStringValue(); - - policy.graph().deassignAllFromAndDelete(target); - - return new Value(); - } - ); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/functions/Equals.java b/src/main/java/gov/nist/csd/pm/policy/pml/functions/Equals.java deleted file mode 100644 index 5a64f9135..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/functions/Equals.java +++ /dev/null @@ -1,29 +0,0 @@ -package gov.nist.csd.pm.policy.pml.functions; - -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.pml.model.function.FormalArgument; - -public class Equals extends FunctionDefinitionStatement { - - private static final String VALUE1 = "value1"; - private static final String VALUE2 = "value2"; - - public Equals() { - super( - name("equals"), - returns(Type.bool()), - args( - new FormalArgument(VALUE1, Type.any()), - new FormalArgument(VALUE2, Type.any()) - ), - (ctx, author) -> { - Value v1 = ctx.scope().getValue(VALUE1); - Value v2 = ctx.scope().getValue(VALUE2); - - return new Value(v1.equals(v2)); - } - ); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/functions/GetAssociationsWithSource.java b/src/main/java/gov/nist/csd/pm/policy/pml/functions/GetAssociationsWithSource.java deleted file mode 100644 index a7d6f45da..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/functions/GetAssociationsWithSource.java +++ /dev/null @@ -1,34 +0,0 @@ -package gov.nist.csd.pm.policy.pml.functions; - -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.pml.model.function.FormalArgument; -import gov.nist.csd.pm.policy.model.graph.relationships.Association; - -import java.util.ArrayList; -import java.util.List; - -public class GetAssociationsWithSource extends FunctionDefinitionStatement { - - public GetAssociationsWithSource() { - super( - name("getAssociationsWithSource"), - returns(Type.array(Type.map(Type.string(), Type.any()))), - args( - new FormalArgument("source", Type.string()) - ), - (ctx, author) -> { - Value source = ctx.scope().getValue("source"); - List associations = author.graph().getAssociationsWithSource(source.getStringValue()); - List associationValues = new ArrayList<>(associations.size()); - for (int i = 0; i < associations.size(); i++) { - Association association = associations.get(i); - associationValues.add(Value.objectToValue(association)); - } - return new Value(associationValues); - } - ); - } - -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/functions/GetAssociationsWithTarget.java b/src/main/java/gov/nist/csd/pm/policy/pml/functions/GetAssociationsWithTarget.java deleted file mode 100644 index ac99c7d2f..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/functions/GetAssociationsWithTarget.java +++ /dev/null @@ -1,34 +0,0 @@ -package gov.nist.csd.pm.policy.pml.functions; - -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.pml.model.function.FormalArgument; -import gov.nist.csd.pm.policy.model.graph.relationships.Association; - -import java.util.ArrayList; -import java.util.List; - -public class GetAssociationsWithTarget extends FunctionDefinitionStatement { - - public GetAssociationsWithTarget() { - super( - name("getAssociationsWithTarget"), - returns(Type.array(Type.map(Type.string(), Type.any()))), - args( - new FormalArgument("target", Type.string()) - ), - (ctx, author) -> { - Value target = ctx.scope().getValue("target"); - List associations = author.graph().getAssociationsWithTarget(target.getStringValue()); - List associationValues = new ArrayList<>(associations.size()); - for (int i = 0; i < associations.size(); i++) { - Association association = associations.get(i); - associationValues.add(Value.objectToValue(association)); - } - return new Value(associationValues); - } - ); - } - -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/functions/GetChildren.java b/src/main/java/gov/nist/csd/pm/policy/pml/functions/GetChildren.java deleted file mode 100644 index d9aa9b070..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/functions/GetChildren.java +++ /dev/null @@ -1,32 +0,0 @@ -package gov.nist.csd.pm.policy.pml.functions; - -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.pml.model.function.FormalArgument; - -import java.util.ArrayList; -import java.util.List; - -public class GetChildren extends FunctionDefinitionStatement { - - public GetChildren() { - super( - name("getChildren"), - returns(Type.array(Type.string())), - args( - new FormalArgument("nodeName", Type.string()) - ), - (ctx, author) -> { - List children = author.graph().getChildren(ctx.scope().getValue("nodeName").getStringValue()); - List childValues = new ArrayList<>(children.size()); - for (int i = 0; i < children.size(); i++) { - childValues.add(new Value(children.get(i))); - } - - return new Value(childValues); - } - ); - } - -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/functions/GetNode.java b/src/main/java/gov/nist/csd/pm/policy/pml/functions/GetNode.java deleted file mode 100644 index fee9165de..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/functions/GetNode.java +++ /dev/null @@ -1,27 +0,0 @@ -package gov.nist.csd.pm.policy.pml.functions; - -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; - -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.pml.model.function.FormalArgument; -import gov.nist.csd.pm.policy.model.graph.nodes.Node; - -public class GetNode extends FunctionDefinitionStatement { - - private static final String NODE_ARG = "nodeName"; - - public GetNode() { - super( - name("getNode"), - returns(Type.map(Type.string(), Type.any())), - args( - new FormalArgument(NODE_ARG, Type.string()) - ), - (ctx, author) -> { - Node node = author.graph().getNode(ctx.scope().getValue(NODE_ARG).getStringValue()); - return Value.objectToValue(node); - } - ); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/functions/GetNodeProperties.java b/src/main/java/gov/nist/csd/pm/policy/pml/functions/GetNodeProperties.java deleted file mode 100644 index d6075dd26..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/functions/GetNodeProperties.java +++ /dev/null @@ -1,34 +0,0 @@ -package gov.nist.csd.pm.policy.pml.functions; - -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.pml.model.function.FormalArgument; -import gov.nist.csd.pm.policy.model.graph.nodes.Node; - -import java.util.HashMap; -import java.util.Map; - -public class GetNodeProperties extends FunctionDefinitionStatement { - - public GetNodeProperties() { - super( - name("getNodeProperties"), - returns(Type.map(Type.string(), Type.string())), - args( - new FormalArgument("nodeName", Type.string()) - ), - (ctx, author) -> { - Node node = author.graph().getNode(ctx.scope().getValue("nodeName").getStringValue()); - Map properties = node.getProperties(); - Map propertiesValues = new HashMap<>(); - for (Map.Entry prop : properties.entrySet()) { - propertiesValues.put(new Value(prop.getKey()), new Value(properties.get(prop.getValue()))); - } - - return new Value(propertiesValues); - } - ); - } - -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/functions/GetNodeType.java b/src/main/java/gov/nist/csd/pm/policy/pml/functions/GetNodeType.java deleted file mode 100644 index 19b429b5c..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/functions/GetNodeType.java +++ /dev/null @@ -1,26 +0,0 @@ -package gov.nist.csd.pm.policy.pml.functions; - -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.pml.model.function.FormalArgument; -import gov.nist.csd.pm.policy.model.graph.nodes.Node; - -public class GetNodeType extends FunctionDefinitionStatement { - - public GetNodeType() { - super( - name("getNodeType"), - returns(Type.string()), - args( - new FormalArgument("nodeName", Type.string()) - ), - (ctx, author) -> { - Node node = author.graph().getNode(ctx.scope().getValue("nodeName").getStringValue()); - return new Value(node.getType().toString()); - } - ); - } - -} - diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/functions/GetParents.java b/src/main/java/gov/nist/csd/pm/policy/pml/functions/GetParents.java deleted file mode 100644 index 9b4c02138..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/functions/GetParents.java +++ /dev/null @@ -1,32 +0,0 @@ -package gov.nist.csd.pm.policy.pml.functions; - -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.pml.model.function.FormalArgument; - -import java.util.ArrayList; -import java.util.List; - -public class GetParents extends FunctionDefinitionStatement { - - public GetParents() { - super( - name("getParents"), - returns(Type.array(Type.string())), - args( - new FormalArgument("nodeName", Type.string()) - ), - (ctx, author) -> { - List parents = author.graph().getParents(ctx.scope().getValue("nodeName").getStringValue()); - List parentValues = new ArrayList<>(parents.size()); - for (int i = 0; i < parents.size(); i++) { - parentValues.add(new Value(parents.get(i))); - } - - return new Value(parentValues); - } - ); - } - -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/functions/GetProhibitionsFor.java b/src/main/java/gov/nist/csd/pm/policy/pml/functions/GetProhibitionsFor.java deleted file mode 100644 index a39cff5ba..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/functions/GetProhibitionsFor.java +++ /dev/null @@ -1,34 +0,0 @@ -package gov.nist.csd.pm.policy.pml.functions; - -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.pml.model.function.FormalArgument; -import gov.nist.csd.pm.policy.model.prohibition.Prohibition; - -import java.util.ArrayList; -import java.util.List; - -public class GetProhibitionsFor extends FunctionDefinitionStatement { - - public GetProhibitionsFor() { - super( - name("getProhibitionsFor"), - returns(Type.array(Type.map(Type.string(), Type.any()))), - args( - new FormalArgument("subject", Type.string()) - ), - (ctx, author) -> { - String subject = ctx.scope().getValue("subject").getStringValue(); - List prohibitions = author.prohibitions().getWithSubject(subject); - List prohibitionValues = new ArrayList<>(prohibitions.size()); - for (Prohibition prohibition : prohibitions) { - prohibitionValues.add(new Value(Value.objectToValue(prohibition))); - } - - return new Value(prohibitionValues); - } - ); - } - -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/functions/HasPropertyKey.java b/src/main/java/gov/nist/csd/pm/policy/pml/functions/HasPropertyKey.java deleted file mode 100644 index 13a70aa13..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/functions/HasPropertyKey.java +++ /dev/null @@ -1,29 +0,0 @@ -package gov.nist.csd.pm.policy.pml.functions; - -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.pml.model.function.FormalArgument; -import gov.nist.csd.pm.policy.model.graph.nodes.Node; - -public class HasPropertyKey extends FunctionDefinitionStatement { - - public HasPropertyKey() { - super( - name("hasPropertyKey"), - returns(Type.bool()), - args( - new FormalArgument("nodeName", Type.string()), - new FormalArgument("key", Type.string()) - ), - (ctx, author) -> { - String nodeName = ctx.scope().getValue("nodeName").getStringValue(); - String key = ctx.scope().getValue("key").getStringValue(); - Node node = author.graph().getNode(nodeName); - boolean hasPropertyKey = node.getProperties().containsKey(key); - return new Value(hasPropertyKey); - } - ); - } - -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/functions/HasPropertyValue.java b/src/main/java/gov/nist/csd/pm/policy/pml/functions/HasPropertyValue.java deleted file mode 100644 index 4b028b825..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/functions/HasPropertyValue.java +++ /dev/null @@ -1,36 +0,0 @@ -package gov.nist.csd.pm.policy.pml.functions; - -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.pml.model.function.FormalArgument; -import gov.nist.csd.pm.policy.model.graph.nodes.Node; - -public class HasPropertyValue extends FunctionDefinitionStatement { - - public HasPropertyValue() { - super( - name("hasPropertyValue"), - returns(Type.bool()), - args( - new FormalArgument("nodeName", Type.string()), - new FormalArgument("key", Type.string()), - new FormalArgument("value", Type.string()) - ), - (ctx, author) -> { - String nodeName = ctx.scope().getValue("nodeName").getStringValue(); - String key = ctx.scope().getValue("key").getStringValue(); - String value = ctx.scope().getValue("value").getStringValue(); - Node node = author.graph().getNode(nodeName); - boolean has = node.getProperties().containsKey(key); - if (!has) { - return new Value(false); - } - - has = node.getProperties().get(key).equals(value); - return new Value(has); - } - ); - } - -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/functions/Length.java b/src/main/java/gov/nist/csd/pm/policy/pml/functions/Length.java deleted file mode 100644 index 37b8a82f0..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/functions/Length.java +++ /dev/null @@ -1,31 +0,0 @@ -package gov.nist.csd.pm.policy.pml.functions; - -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.pml.model.function.FormalArgument; -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; -import gov.nist.csd.pm.policy.exceptions.PMException; - -public class Length extends FunctionDefinitionStatement { - public Length() { - super( - "length", - returns(Type.number()), - args( - new FormalArgument("x", Type.any()) - ), - (ctx, policy) -> { - Value x = ctx.scope().getValue("x"); - if (x.isMap()) { - return new Value(x.getMapValue().size()); - } else if (x.isArray()) { - return new Value(x.getArrayValue().size()); - } else if (x.isString()) { - return new Value(x.getStringValue().length()); - } - - throw new PMException("cannot get length of type " + x.getType()); - } - ); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/functions/NodeExists.java b/src/main/java/gov/nist/csd/pm/policy/pml/functions/NodeExists.java deleted file mode 100644 index b51e6ccbd..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/functions/NodeExists.java +++ /dev/null @@ -1,22 +0,0 @@ -package gov.nist.csd.pm.policy.pml.functions; - -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.pml.model.function.FormalArgument; - -public class NodeExists extends FunctionDefinitionStatement { - - private static final String NODE_ARG = "nodeName"; - - public NodeExists() { - super( - name("nodeExists"), - returns(Type.bool()), - args( - new FormalArgument(NODE_ARG, Type.string()) - ), - (ctx, author) -> new Value(author.graph().nodeExists(ctx.scope().getValue(NODE_ARG).getStringValue())) - ); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/functions/NumToStr.java b/src/main/java/gov/nist/csd/pm/policy/pml/functions/NumToStr.java deleted file mode 100644 index ff4b1ad69..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/functions/NumToStr.java +++ /dev/null @@ -1,22 +0,0 @@ -package gov.nist.csd.pm.policy.pml.functions; - -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.pml.model.function.FormalArgument; -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; - -public class NumToStr extends FunctionDefinitionStatement { - - private static final String NUM_ARG = "num"; - - public NumToStr() { - super( - name("numToStr"), - returns(Type.string()), - args( - new FormalArgument(NUM_ARG, Type.number()) - ), - (ctx, author) -> new Value(String.valueOf(ctx.scope().getValue(NUM_ARG))) - ); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/functions/Search.java b/src/main/java/gov/nist/csd/pm/policy/pml/functions/Search.java deleted file mode 100644 index b3fa40ff2..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/functions/Search.java +++ /dev/null @@ -1,44 +0,0 @@ -package gov.nist.csd.pm.policy.pml.functions; - -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.pml.model.function.FormalArgument; -import gov.nist.csd.pm.policy.model.graph.nodes.NodeType; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -public class Search extends FunctionDefinitionStatement { - public Search() { - super( - name("search"), - returns(Type.array(Type.string())), - args( - new FormalArgument("type", Type.string()), - new FormalArgument("properties", Type.map(Type.string(), Type.string())) - ), - (ctx, author) -> { - NodeType nodeType = NodeType.toNodeType(ctx.scope().getValue("type").getStringValue()); - - Map propertiesValue = ctx.scope().getValue("properties").getMapValue(); - - Map properties = new HashMap<>(); - for (Map.Entry prop : propertiesValue.entrySet()) { - properties.put(prop.getKey().getStringValue(), prop.getValue().getStringValue()); - } - - List search = author.graph().search(nodeType, properties); - - List ret = new ArrayList<>(search.size()); - for (String s : search) { - ret.add(new Value(s)); - } - - return new Value(ret); - } - ); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/model/context/ExecutionContext.java b/src/main/java/gov/nist/csd/pm/policy/pml/model/context/ExecutionContext.java deleted file mode 100644 index a7d4ea757..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/model/context/ExecutionContext.java +++ /dev/null @@ -1,60 +0,0 @@ -package gov.nist.csd.pm.policy.pml.model.context; - -import gov.nist.csd.pm.policy.pml.compiler.Variable; -import gov.nist.csd.pm.policy.model.access.UserContext; -import gov.nist.csd.pm.policy.pml.model.scope.*; - -import java.io.Serializable; -import java.util.Objects; - -public class ExecutionContext implements Serializable { - - private UserContext author; - private Scope scope; - - public ExecutionContext(UserContext author) { - this.author = author; - this.scope = new Scope(Scope.Mode.EXECUTE); - } - - public UserContext author() { - return author; - } - - public Scope scope() { - return scope; - } - - public ExecutionContext copy() throws UnknownFunctionInScopeException, FunctionAlreadyDefinedInScopeException, - UnknownVariableInScopeException, VariableAlreadyDefinedInScopeException { - ExecutionContext copy = new ExecutionContext(this.author); - - for (String funcName : this.scope.functions().keySet()) { - copy.scope.addFunction(this.scope.getFunction(funcName)); - } - - for (String varName : this.scope.variables().keySet()) { - Variable variable = this.scope.getVariable(varName); - copy.scope.addVariable(varName, variable.type(), variable.isConst()); - } - - for (String varName : this.scope.values().keySet()) { - copy.scope.putValue(varName, this.scope.getValue(varName)); - } - - return copy; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - ExecutionContext that = (ExecutionContext) o; - return Objects.equals(author, that.author) && Objects.equals(scope, that.scope); - } - - @Override - public int hashCode() { - return Objects.hash(author, scope); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/model/context/VisitorContext.java b/src/main/java/gov/nist/csd/pm/policy/pml/model/context/VisitorContext.java deleted file mode 100644 index b7b703f02..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/model/context/VisitorContext.java +++ /dev/null @@ -1,27 +0,0 @@ -package gov.nist.csd.pm.policy.pml.model.context; - -import gov.nist.csd.pm.policy.pml.compiler.error.ErrorLog; -import gov.nist.csd.pm.policy.pml.model.scope.Scope; - -import java.util.Objects; - -public record VisitorContext(Scope scope, ErrorLog errorLog) { - - public VisitorContext copy() { - // want to persist the error tracker - return new VisitorContext(scope.copy(), this.errorLog); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - VisitorContext that = (VisitorContext) o; - return Objects.equals(scope, that.scope) && Objects.equals(errorLog, that.errorLog); - } - - @Override - public int hashCode() { - return Objects.hash(scope, errorLog); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/model/exception/PMLExecutionException.java b/src/main/java/gov/nist/csd/pm/policy/pml/model/exception/PMLExecutionException.java deleted file mode 100644 index bbb76bbf0..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/model/exception/PMLExecutionException.java +++ /dev/null @@ -1,9 +0,0 @@ -package gov.nist.csd.pm.policy.pml.model.exception; - -import gov.nist.csd.pm.policy.exceptions.PMException; - -public class PMLExecutionException extends PMException { - public PMLExecutionException(String msg) { - super(msg); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/model/expression/ArrayLiteral.java b/src/main/java/gov/nist/csd/pm/policy/pml/model/expression/ArrayLiteral.java deleted file mode 100644 index 52800546b..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/model/expression/ArrayLiteral.java +++ /dev/null @@ -1,64 +0,0 @@ -package gov.nist.csd.pm.policy.pml.model.expression; - -import gov.nist.csd.pm.policy.pml.statement.Expression; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Objects; - -public class ArrayLiteral implements Serializable { - - private final List array; - private final Type type; - - public ArrayLiteral(Type elementType) { - this.array = new ArrayList<>(); - this.type = Type.array(elementType); - } - - public ArrayLiteral(Expression[] array, Type elementType) { - this.array = Arrays.asList(array); - this.type = Type.array(elementType); - } - - public void add(Expression expression) { - this.array.add(expression); - } - - public Expression[] getArray() { - return this.array.toArray(new Expression[]{}); - } - - public Type getType() { - return type; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - ArrayLiteral that = (ArrayLiteral) o; - return Objects.equals(array, that.array) - && Objects.equals(type, that.type); - } - - @Override - public int hashCode() { - return Objects.hash(array, type); - } - - @Override - public String toString() { - StringBuilder s = new StringBuilder(); - for (Expression expression : array) { - if (s.length() > 0) { - s.append(", "); - } - - s.append(expression.toString()); - } - return String.format("[%s]", s); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/model/expression/CompareExpression.java b/src/main/java/gov/nist/csd/pm/policy/pml/model/expression/CompareExpression.java deleted file mode 100644 index 1252c260d..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/model/expression/CompareExpression.java +++ /dev/null @@ -1,48 +0,0 @@ -package gov.nist.csd.pm.policy.pml.model.expression; - -import gov.nist.csd.pm.policy.Policy; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.pml.model.context.ExecutionContext; -import gov.nist.csd.pm.policy.pml.statement.Expression; -import gov.nist.csd.pm.policy.pml.statement.PMLStatement; - -import java.io.Serializable; -import java.util.Objects; - -public class CompareExpression extends PMLStatement implements Serializable { - - private Expression left; - private Expression right; - private boolean isEquals; - - public CompareExpression(Expression left, Expression right, boolean isEquals) { - this.left = left; - this.right = right; - this.isEquals = isEquals; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - CompareExpression that = (CompareExpression) o; - return isEquals == that.isEquals && left.equals(that.left) && right.equals(that.right); - } - - @Override - public int hashCode() { - return Objects.hash(left, right, isEquals); - } - - @Override - public Value execute(ExecutionContext ctx, Policy policy) throws PMException { - return new Value( - isEquals == left.execute(ctx, policy).equals(right.execute(ctx, policy)) - ); - } - - @Override - public String toString() { - return left.toString() + (isEquals ? " == " : " != ") + right.toString(); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/model/expression/EntryReference.java b/src/main/java/gov/nist/csd/pm/policy/pml/model/expression/EntryReference.java deleted file mode 100644 index b2a3c67ea..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/model/expression/EntryReference.java +++ /dev/null @@ -1,44 +0,0 @@ -package gov.nist.csd.pm.policy.pml.model.expression; - -import gov.nist.csd.pm.policy.pml.statement.Expression; - -import java.io.Serializable; -import java.util.Objects; - -public class EntryReference implements Serializable { - - private final VariableReference varRef; - private final Expression key; - - public EntryReference(VariableReference varRef, Expression key) { - this.varRef = varRef; - this.key = key; - } - - public VariableReference getVarRef() { - return varRef; - } - - public Expression getKey() { - return key; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - EntryReference that = (EntryReference) o; - return Objects.equals(varRef, that.varRef) - && Objects.equals(key, that.key); - } - - @Override - public int hashCode() { - return Objects.hash(varRef, key); - } - - @Override - public String toString() { - return String.format("%s[%s]", varRef, key); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/model/expression/Literal.java b/src/main/java/gov/nist/csd/pm/policy/pml/model/expression/Literal.java deleted file mode 100644 index 260fab99c..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/model/expression/Literal.java +++ /dev/null @@ -1,179 +0,0 @@ -package gov.nist.csd.pm.policy.pml.model.expression; - -import gov.nist.csd.pm.policy.Policy; -import gov.nist.csd.pm.policy.pml.model.context.ExecutionContext; -import gov.nist.csd.pm.policy.pml.statement.Expression; -import gov.nist.csd.pm.policy.pml.statement.PMLStatement; -import gov.nist.csd.pm.policy.exceptions.PMException; - -import java.util.*; - -public class Literal extends PMLStatement { - - private boolean isStringLiteral; - private String stringLiteral; - - private boolean isBooleanLiteral; - private boolean booleanLiteral; - - private boolean isArrayLiteral; - private ArrayLiteral arrayLiteral; - - private boolean isMapLiteral; - private MapLiteral mapLiteral; - - private boolean isNumberLiteral; - private int numberLiteral; - - private final Type type; - - public Literal(String stringLiteral) { - this.isStringLiteral = true; - this.stringLiteral = stringLiteral; - this.type = Type.string(); - } - - public Literal(int numberLiteral) { - this.isNumberLiteral = true; - this.numberLiteral = numberLiteral; - this.type = Type.number(); - } - - public Literal(boolean booleanLiteral) { - this.isBooleanLiteral = true; - this.booleanLiteral = booleanLiteral; - this.type = Type.bool(); - } - - public Literal(ArrayLiteral arrayLiteral) { - this.isArrayLiteral = true; - this.arrayLiteral = arrayLiteral; - this.type = arrayLiteral.getType(); - } - - public Literal(MapLiteral mapLiteral) { - this.isMapLiteral = true; - this.mapLiteral = mapLiteral; - this.type = mapLiteral.getType(); - } - - public boolean isNumberLiteral() { - return isNumberLiteral; - } - - public boolean isStringLiteral() { - return isStringLiteral; - } - - public boolean isBooleanLiteral() { - return isBooleanLiteral; - } - - public boolean isArrayLiteral() { - return isArrayLiteral; - } - - public boolean isMapLiteral() { - return isMapLiteral; - } - - public String getStringLiteral() { - return stringLiteral; - } - - public int getNumberLiteral() { - return numberLiteral; - } - - public boolean getBooleanLiteral() { - return booleanLiteral; - } - - public ArrayLiteral getArrayLiteral() { - return arrayLiteral; - } - - public MapLiteral getMapLiteral() { - return mapLiteral; - } - - public Type getType() { - return type; - } - - @Override - public Value execute(ExecutionContext ctx, Policy policy) throws PMException { - if (isStringLiteral()) { - return new Value(getStringLiteral()); - } else if (isArrayLiteral()) { - ArrayLiteral arrayLiteral = getArrayLiteral(); - Expression[] exprArr = arrayLiteral.getArray(); - List values = new ArrayList<>(exprArr.length); - for (Expression expr : exprArr) { - values.add(expr.execute(ctx, policy)); - } - return new Value(values); - } else if (isBooleanLiteral()) { - return new Value(getBooleanLiteral()); - } else if (isMapLiteral()){ - MapLiteral mapLiteral = getMapLiteral(); - Map map = mapLiteral.getMap(); - Map values = new HashMap<>(); - for (Expression key : map.keySet()) { - Expression expr = map.get(key); - values.put(key.execute(ctx, policy), expr.execute(ctx, policy)); - } - return new Value(values); - } else { - return new Value(getNumberLiteral()); - } - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Literal literal = (Literal) o; - return isStringLiteral == literal.isStringLiteral - && isNumberLiteral == literal.isNumberLiteral - && isBooleanLiteral == literal.isBooleanLiteral - && booleanLiteral == literal.booleanLiteral - && isArrayLiteral == literal.isArrayLiteral - && isMapLiteral == literal.isMapLiteral - && Objects.equals(stringLiteral, literal.stringLiteral) - && numberLiteral == literal.numberLiteral - && Objects.equals(arrayLiteral, literal.arrayLiteral) - && Objects.equals(mapLiteral, literal.mapLiteral) - && Objects.equals(type, literal.type); - } - - @Override - public int hashCode() { - if (isStringLiteral) { - return stringLiteral.hashCode(); - } else if (isNumberLiteral) { - return Objects.hash(numberLiteral); - } else if (isBooleanLiteral) { - return Objects.hash(booleanLiteral); - } else if (isArrayLiteral) { - return arrayLiteral.hashCode(); - } else { - return mapLiteral.hashCode(); - } - } - - @Override - public String toString() { - if (isStringLiteral) { - return String.format("'%s'", getStringLiteral()); - } else if (isBooleanLiteral) { - return String.valueOf(getBooleanLiteral()); - } else if (isNumberLiteral) { - return String.valueOf(getNumberLiteral()); - } else if (isArrayLiteral) { - return getArrayLiteral().toString(); - } else { - return getMapLiteral().toString(); - } - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/model/expression/LogicalExpression.java b/src/main/java/gov/nist/csd/pm/policy/pml/model/expression/LogicalExpression.java deleted file mode 100644 index df523de84..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/model/expression/LogicalExpression.java +++ /dev/null @@ -1,51 +0,0 @@ -package gov.nist.csd.pm.policy.pml.model.expression; - -import com.mysql.cj.log.Log; -import gov.nist.csd.pm.policy.Policy; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.pml.model.context.ExecutionContext; -import gov.nist.csd.pm.policy.pml.statement.Expression; -import gov.nist.csd.pm.policy.pml.statement.PMLStatement; - -import java.io.Serializable; -import java.util.Objects; - -public class LogicalExpression extends PMLStatement implements Serializable { - - private Expression left; - private Expression right; - private boolean isAnd; - - public LogicalExpression(Expression left, Expression right, boolean isAnd) { - this.left = left; - this.right = right; - this.isAnd = isAnd; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - LogicalExpression that = (LogicalExpression) o; - return isAnd == that.isAnd && left.equals(that.left) && right.equals(that.right); - } - - @Override - public int hashCode() { - return Objects.hash(left, right, isAnd); - } - - @Override - public Value execute(ExecutionContext ctx, Policy policy) throws PMException { - boolean leftValue = left.execute(ctx, policy).getBooleanValue(); - boolean rightValue = right.execute(ctx, policy).getBooleanValue(); - - return new Value(isAnd ? leftValue && rightValue : leftValue || rightValue); - } - - @Override - public String toString() { - return left.toString() + (isAnd ? " && " : " || ") + right.toString(); - } - -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/model/expression/MapLiteral.java b/src/main/java/gov/nist/csd/pm/policy/pml/model/expression/MapLiteral.java deleted file mode 100644 index a9c1f6336..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/model/expression/MapLiteral.java +++ /dev/null @@ -1,64 +0,0 @@ -package gov.nist.csd.pm.policy.pml.model.expression; - -import gov.nist.csd.pm.policy.pml.statement.Expression; - -import java.io.Serializable; -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; - -public class MapLiteral implements Serializable { - - private final Map map; - private final Type type; - - public MapLiteral(Map map, Type keyType, Type valueType) { - this.map = map; - this.type = Type.map(keyType, valueType); - } - - public MapLiteral(Type type) { - this.map = new HashMap<>(); - this.type = type; - } - - public void put(Expression key, Expression value){ - this.map.put(key, value); - } - - public Map getMap() { - return map; - } - - public Type getType() { - return type; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - MapLiteral that = (MapLiteral) o; - return Objects.equals(this.map, that.map) - && Objects.equals(type, that.type); - } - - @Override - public int hashCode() { - return map.hashCode(); - } - - @Override - public String toString() { - StringBuilder s = new StringBuilder(); - for (Expression k : map.keySet()) { - if (s.length() > 0) { - s.append(", "); - } - - s.append(k.toString()).append(": ").append(map.get(k)); - } - - return String.format("{%s}", s); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/model/expression/Value.java b/src/main/java/gov/nist/csd/pm/policy/pml/model/expression/Value.java deleted file mode 100644 index cd51b140b..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/model/expression/Value.java +++ /dev/null @@ -1,436 +0,0 @@ -package gov.nist.csd.pm.policy.pml.model.expression; - -import com.fasterxml.jackson.databind.ObjectMapper; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.AccessRightSet; -import gov.nist.csd.pm.policy.model.obligation.Rule; - -import java.io.Serializable; -import java.util.*; - -public class Value implements Serializable { - - private String sValue; - private boolean isString; - - private boolean isNumber; - private int nValue; - - private boolean bValue; - private boolean isBoolean; - - private List aValue; - private boolean isArray; - - private Map mValue; - private boolean isMap; - - private boolean isVoid; - - private boolean isReturn; - private boolean isBreak; - private boolean isContinue; - private Value value; - private boolean isValue; - private boolean isNull; - private Type type; - private Rule rule; - private boolean isRule; - - public static Value returnValue(Value value) { - value.isReturn = true; - return value; - } - - public static Value breakValue() { - Value value = new Value(); - value.isBreak = true; - return value; - } - - public static Value continueValue() { - Value value = new Value(); - value.isContinue = true; - return value; - } - - public static Value nullValue() { - Value value = new Value(); - value.isNull = true; - return value; - } - - public Value() { - this.isVoid = true; - this.type = Type.voidType(); - } - - public Value(Value value) { - this.isValue = true; - this.value = value; - this.type = Type.any(); - } - - public Value(String value) { - this.isString = true; - this.sValue = value; - this.type = Type.string(); - } - - public Value(int value) { - this.isNumber = true; - this.nValue = value; - this.type = Type.number(); - } - - public Value(boolean value) { - this.isBoolean = true; - this.bValue = value; - this.type = Type.bool(); - } - - public Value(List value) { - this.isArray = true; - this.aValue = value; - if (value.isEmpty()) { - this.type = Type.any(); - } else { - this.type = Type.array(value.iterator().next().getType()); - } - } - - public Value(AccessRightSet accessRightSet) { - this.isArray = true; - this.type = Type.array(Type.string()); - - this.aValue = new ArrayList<>(); - Object[] objects = accessRightSet.toArray(); - for (Object o : objects) { - this.aValue.add(new Value(o.toString())); - } - } - - public Value(Map value) { - this.isMap = true; - this.mValue = value; - if (value.isEmpty()) { - this.type = Type.map(Type.any(), Type.any()); - } else { - Value key = value.keySet().iterator().next(); - this.type = Type.map(key.getType(), value.get(key).getType()); - } - } - - // these should only be used be the CreateObligationStmt - public Value(Rule rule) { - this.isRule = true; - this.rule = rule; - } - - public Rule getRule() { - return rule; - } - - public boolean isReturn() { - return isReturn; - } - - public boolean isBreak() { - return isBreak; - } - - public boolean isContinue() { - return isContinue; - } - - public boolean isString() { - return isString; - } - - public boolean isNumber() { - return isNumber; - } - - public boolean isBoolean() { - return isBoolean; - } - - public boolean isArray() { - return this.isArray; - } - - public boolean isMap() { - return isMap; - } - - public boolean isVoid() { - return isVoid; - } - - public boolean isNull() { - return isNull; - } - - public boolean isValue() { - return isValue; - } - - public boolean isRule() { - return isRule; - } - - public String getStringValue() { - if (!isString) { - throw new IllegalStateException("expected value to be string but was " + type); - } - - return sValue; - } - - public int getNumberValue() { - if (!isNumber) { - throw new IllegalStateException("expected value to be number but was " + type); - } - - return nValue; - } - - public boolean getBooleanValue() { - if (!isBoolean) { - throw new IllegalStateException("expected value to be boolean but was " + type); - } - - return bValue; - } - - public List getArrayValue() { - if (!isArray) { - throw new IllegalStateException("expected value to be array but was " + type); - } - - return aValue; - } - - public Map getMapValue() { - if (!isMap) { - throw new IllegalStateException("expected value to be map but was " + type); - } - - return mValue; - } - - public Value getValue() { - if (!isValue) { - throw new IllegalStateException("expected value to be Value but was " + type); - } - - return value; - } - - public Type getType() { - return type; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Value value1 = (Value) o; - return isString == value1.isString - && bValue == value1.bValue - && isBoolean == value1.isBoolean - && isArray == value1.isArray - && isMap == value1.isMap - && isVoid == value1.isVoid - && isReturn == value1.isReturn - && isBreak == value1.isBreak - && isContinue == value1.isContinue - && isNull == value1.isNull - && isValue == value1.isValue - && Objects.equals(sValue, value1.sValue) - && Objects.equals(aValue, value1.aValue) - && Objects.equals(mValue, value1.mValue) - && Objects.equals(value, value1.value) - && Objects.equals(type, value1.type) - && Objects.equals(rule, value1.rule); - } - - @Override - public int hashCode() { - if (isString) { - return sValue.hashCode(); - } else if (isBoolean) { - return Objects.hashCode(bValue); - } else if (isArray) { - return aValue.hashCode(); - } else if (isMap) { - return mValue.hashCode(); - } else if (isValue) { - return value.hashCode(); - } else if (isRule) { - return rule.hashCode(); - } else if (isVoid) { - return "void".hashCode(); - } else if (isReturn) { - return "return".hashCode(); - } else if (isBreak) { - return "break".hashCode(); - } else if (isContinue) { - return "continue".hashCode(); - } else if (isNull) { - return "null".hashCode(); - } - - return -1; - } - - public static Value objectToValue(Object o) { - if (o == null) { - return Value.nullValue(); - } - - if (o instanceof String s) { - return new Value(s); - } else if (o instanceof Integer i) { - return new Value(i); - } if (o instanceof List list) { - return toListValue(list); - } else if (o instanceof Boolean b) { - return new Value(b); - } else if (o instanceof Map m) { - return toMapValue(m); - } else { - return objToValue(o); - } - } - - private static Value toArrayValue(Object o) { - Object[] arr = (Object[])o; - List list = new ArrayList<>(); - for (int i = 0; i < arr.length; i++) { - Object arrObj = arr[i]; - list.add(objectToValue(arrObj)); - } - - return new Value(list); - } - - private static Value toListValue(List list) { - List valueList = new ArrayList<>(); - for (Object arrObj : list) { - valueList.add(objectToValue(arrObj)); - } - - return new Value(valueList); - } - - private static Value toMapValue(Map m) { - Map map = new HashMap<>(); - for (Object key : m.keySet()) { - map.put(objectToValue(key), objectToValue(m.get(key))); - } - - return new Value(map); - } - - private static Value objToValue(Object o) { - ObjectMapper objectMapper = new ObjectMapper(); - Map map = objectMapper.convertValue(o, Map.class); - - Map valueMap = new HashMap<>(); - for (Object key : map.keySet()) { - String field = key.toString(); - Object obj = map.get(field); - valueMap.put(new Value(field), objectToValue(obj)); - } - - return new Value(valueMap); - } - - @Override - public String toString() { - if (isString()) { - return String.format("'%s'", getStringValue()); - } else if (isNumber()) { - return String.valueOf(getNumberValue()); - } else if (isBoolean()) { - return String.valueOf(getBooleanValue()); - } else if (isMap()) { - return mapToString(getMapValue()); - } else if (isArray()) { - return getArrayValue().toString(); - } else if (isVoid()) { - return "void"; - } else if (isReturn()) { - return "return"; - } else if (isBreak()) { - return "break"; - } else if (isContinue()) { - return "continue"; - } else if (isValue()) { - return value.toString(); - } else if (isNull()) { - return "null"; - } else { - return getRule().toString(); - } - } - - private String mapToString(Map mapValue) { - StringBuilder entries = new StringBuilder(); - for (Map.Entry entry : mapValue.entrySet()) { - if (entries.length() > 0) { - entries.append(", "); - } - - entries.append(entry.getKey()).append(": ").append(entry.getValue()); - } - - return String.format("{%s}", entries); - } - - public static Object valueToObject(Value v) throws PMException { - if (v == null) { - return null; - } - - if (v.isString()) { - return v.getStringValue(); - } else if (v.isNumber()) { - return v.getNumberValue(); - } else if (v.isArray()) { - return toListObject(v); - } else if (v.isBoolean()) { - return v.getBooleanValue(); - } else if (v.isMap()) { - return toMapObject(v); - } - - throw new PMException("unable to convert value " + v + " to an object"); - } - - private static Object toMapObject(Value v) throws PMException { - Map mapValue = v.getMapValue(); - Map object = new HashMap<>(); - - for (Map.Entry e : mapValue.entrySet()) { - Object key = valueToObject(e.getKey()); - Object value = valueToObject(e.getValue()); - - object.put(key, value); - } - - return object; - } - - private static Object toListObject(Value v) throws PMException { - List list = v.getArrayValue(); - List object = new ArrayList<>(); - for (Value l : list) { - Object o = valueToObject(l); - object.add(o); - } - - return object; - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/model/expression/VariableReference.java b/src/main/java/gov/nist/csd/pm/policy/pml/model/expression/VariableReference.java deleted file mode 100644 index 967b4d428..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/model/expression/VariableReference.java +++ /dev/null @@ -1,129 +0,0 @@ -package gov.nist.csd.pm.policy.pml.model.expression; - -import gov.nist.csd.pm.policy.Policy; -import gov.nist.csd.pm.policy.pml.model.scope.UnknownVariableInScopeException; -import gov.nist.csd.pm.policy.pml.statement.PMLStatement; -import gov.nist.csd.pm.policy.pml.model.context.ExecutionContext; -import gov.nist.csd.pm.policy.exceptions.PMException; - -import java.util.*; - -public class VariableReference extends PMLStatement { - - private boolean isID; - private String id; - private boolean isEntryReference; - private EntryReference entryReference; - private final Type type; - - public VariableReference(String id, Type type) { - this.isID = true; - this.id = id; - this.type = type; - } - - public VariableReference(EntryReference entryReference, Type type) { - this.isEntryReference = true; - this.entryReference = entryReference; - this.type = type; - } - - public boolean isID() { - return isID; - } - - public String getID() { - return id; - } - - public boolean isEntryReference() { - return isEntryReference; - } - - public EntryReference getEntryReference() { - return entryReference; - } - - public Type getType() { - return type; - } - - @Override - public Value execute(ExecutionContext ctx, Policy policy) throws PMException { - if (isID) { - try { - return ctx.scope().getValue(id); - } catch (UnknownVariableInScopeException e) { - throw new PMException(e.getMessage()); - } - } - - List refChain = new ArrayList<>(); - EntryReference ref = entryReference; - refChain.add(ref); - while (!ref.getVarRef().isID) { - EntryReference next = ref.getVarRef().getEntryReference(); - refChain.add(0, next); - - ref = next; - } - - Value value = null; - for (EntryReference entRef : refChain) { - if (value == null) { - Value mapValue = entRef.getVarRef().execute(ctx, policy); - Value keyValue = entRef.getKey().execute(ctx, policy); - - if (mapValue.isMap()) { - value = mapValue.getMapValue().get(keyValue); - } else if (mapValue.isArray()) { - value = mapValue.getArrayValue().get(keyValue.getNumberValue()); - } - - continue; - } - - if (!value.isMap() && !value.isArray()) { - break; - } - - if (value.isMap()) { - Map mapValue = value.getMapValue(); - Value keyValue = entRef.getKey().execute(ctx, policy); - value = mapValue.get(keyValue); - } else { - List arrayValue = value.getArrayValue(); - Value keyValue = entRef.getKey().execute(ctx, policy); - value = arrayValue.get(keyValue.getNumberValue()); - } - } - - return value; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - VariableReference that = (VariableReference) o; - return isID == that.isID - && isEntryReference == that.isEntryReference - && Objects.equals(id, that.id) - && Objects.equals(entryReference, that.entryReference) - && Objects.equals(type, that.type); - } - - @Override - public int hashCode() { - return Objects.hash(isID, id, isEntryReference, entryReference, type); - } - - @Override - public String toString() { - if (isID) { - return id; - } else { - return entryReference.toString(); - } - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/model/function/FormalArgument.java b/src/main/java/gov/nist/csd/pm/policy/pml/model/function/FormalArgument.java deleted file mode 100644 index 6f672e51a..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/model/function/FormalArgument.java +++ /dev/null @@ -1,21 +0,0 @@ -package gov.nist.csd.pm.policy.pml.model.function; - -import gov.nist.csd.pm.policy.pml.model.expression.Type; - -import java.io.Serializable; -import java.util.Objects; - -public record FormalArgument(String name, Type type) implements Serializable { - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - FormalArgument that = (FormalArgument) o; - return Objects.equals(name, that.name) && Objects.equals(type, that.type); - } - - @Override - public int hashCode() { - return Objects.hash(name, type); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/model/function/FunctionExecutor.java b/src/main/java/gov/nist/csd/pm/policy/pml/model/function/FunctionExecutor.java deleted file mode 100644 index 5a8f846d9..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/model/function/FunctionExecutor.java +++ /dev/null @@ -1,13 +0,0 @@ -package gov.nist.csd.pm.policy.pml.model.function; - -import gov.nist.csd.pm.policy.Policy; -import gov.nist.csd.pm.policy.pml.model.context.ExecutionContext; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.pml.model.scope.PMLScopeException; -import gov.nist.csd.pm.policy.exceptions.PMException; - -public interface FunctionExecutor { - - Value exec(ExecutionContext ctx, Policy policy) throws PMException, PMLScopeException; - -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/model/scope/PMLScopeException.java b/src/main/java/gov/nist/csd/pm/policy/pml/model/scope/PMLScopeException.java deleted file mode 100644 index adfe5bba6..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/model/scope/PMLScopeException.java +++ /dev/null @@ -1,9 +0,0 @@ -package gov.nist.csd.pm.policy.pml.model.scope; - -import gov.nist.csd.pm.policy.exceptions.PMException; - -public class PMLScopeException extends Exception { - public PMLScopeException(String message) { - super(message); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/model/scope/Scope.java b/src/main/java/gov/nist/csd/pm/policy/pml/model/scope/Scope.java deleted file mode 100644 index 21470b236..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/model/scope/Scope.java +++ /dev/null @@ -1,225 +0,0 @@ -package gov.nist.csd.pm.policy.pml.model.scope; - -import gov.nist.csd.pm.policy.pml.PMLBuiltinConstants; -import gov.nist.csd.pm.policy.pml.PMLBuiltinFunctions; -import gov.nist.csd.pm.policy.pml.PMLContext; -import gov.nist.csd.pm.policy.pml.compiler.Variable; -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.pml.statement.Expression; -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; -import gov.nist.csd.pm.policy.model.access.AccessRightSet; - -import java.io.Serializable; -import java.util.*; - -public class Scope implements Serializable { - - /** - * Store a set of function definition statements. - * These will include any builtin functions such as concat(). - */ - private Map functions; - - /** - * The variables accessible in the scope. - * Only used if mode is COMPILE. - */ - private Map variables; - - /** - * The values accessible in the scope. - * Only used if mode is EXECUTE. - */ - private final Map values; - - /** - * The resources access rights expression for the policy. This is used during compilation. - */ - private Expression resourceAccessRightsExpression; - - /** - * The resources access rights for the policy. This is used during execution. - */ - private AccessRightSet resourceAccessRights; - - private final Mode mode; - - public Scope(Mode mode) { - this.mode = mode; - this.functions = new HashMap<>(); - this.variables = new HashMap<>(); - this.values = new HashMap<>(); - this.resourceAccessRightsExpression = null; - this.resourceAccessRights = new AccessRightSet(); - } - - public Map functions() { - return functions; - } - - public Map variables() { - return variables; - } - - public Map values() { - return values; - } - - public Expression getResourceAccessRightsExpression() { - return resourceAccessRightsExpression; - } - - public boolean isResourceAccessRightsExpressionSet() { - return resourceAccessRightsExpression != null; - } - - public Scope copy() { - Scope copy = new Scope(this.mode); - - copy.functions = new HashMap<>(this.functions); - copy.variables = new HashMap<>(this.variables); - - if (isResourceAccessRightsExpressionSet()) { - copy.resourceAccessRightsExpression = this.resourceAccessRightsExpression; - } - - copy.resourceAccessRights = this.resourceAccessRights; - - return copy; - } - - public void overwriteVariables(Scope overwrite) { - for (String varName : overwrite.variables.keySet()) { - if (!this.variables.containsKey(varName)) { - continue; - } - - this.variables.put(varName, overwrite.variables.get(varName)); - } - } - - public void overwriteValues(Scope overwrite) { - for (String varName : overwrite.values.keySet()) { - if (!this.values.containsKey(varName)) { - continue; - } - - this.values.put(varName, overwrite.values.get(varName)); - } - } - - public void loadFromPMLContext(PMLContext pmlCtx) { - functions.putAll(pmlCtx.getFunctions()); - values.putAll(pmlCtx.getConstants()); - } - - public void setResourceAccessRightsExpression(Expression expression) { - this.resourceAccessRightsExpression = expression; - } - - public void setResourceAccessRights(AccessRightSet accessRightSet) { - this.resourceAccessRights = accessRightSet; - } - - public void addFunction(FunctionDefinitionStatement functionDefinitionStatement) throws FunctionAlreadyDefinedInScopeException { - if (functions.containsKey(functionDefinitionStatement.getFunctionName()) - || isBuiltinFunction(functionDefinitionStatement.getFunctionName())) { - throw new FunctionAlreadyDefinedInScopeException(functionDefinitionStatement.getFunctionName()); - } - - this.functions.put(functionDefinitionStatement.getFunctionName(), functionDefinitionStatement); - } - - public FunctionDefinitionStatement getFunction(String name) throws UnknownFunctionInScopeException { - if (functions.containsKey(name)) { - return functions.get(name); - } else if (isBuiltinFunction(name)) { - return PMLBuiltinFunctions.builtinFunctions().get(name); - } - - throw new UnknownFunctionInScopeException(name); - } - - public void addVariable(String name, Type type, boolean isConst) throws VariableAlreadyDefinedInScopeException { - if (constantExists(name) - || isBuiltinVariable(name)) { - throw new VariableAlreadyDefinedInScopeException(name); - } - - this.variables.put(name, new Variable(name, type, isConst)); - } - - private boolean constantExists(String name) { - return variables.containsKey(name) && variables.get(name).isConst(); - } - - public Variable getVariable(String name) throws UnknownVariableInScopeException { - if (variables.containsKey(name)) { - return variables.get(name); - } else if (isBuiltinVariable(name)) { - return PMLBuiltinConstants.builtinVariables().get(name); - } - - throw new UnknownVariableInScopeException(name); - } - - public boolean variableExists(String name) { - try { - getVariable(name); - } catch (UnknownVariableInScopeException e) { - return false; - } - - return true; - } - - public void putValue(String name, Value value) { - this.values.put(name, value); - } - - public Value getValue(String name) throws UnknownVariableInScopeException { - if (values.containsKey(name)) { - return values.get(name); - } else if (isBuiltinValue(name)) { - return PMLBuiltinConstants.builtinValues().get(name); - } else if (resourceAccessRights.contains(name)) { - return new Value(name); - } - - throw new UnknownVariableInScopeException(name); - } - - private boolean isBuiltinVariable(String name) { - return PMLBuiltinConstants.builtinVariables().containsKey(name); - } - private boolean isBuiltinValue(String name) { - return PMLBuiltinConstants.builtinValues().containsKey(name); - } - - private boolean isBuiltinFunction(String name) { - return PMLBuiltinFunctions.builtinFunctions().containsKey(name); - } - - public enum Mode { - COMPILE, - EXECUTE - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Scope scope = (Scope) o; - return Objects.equals(functions, scope.functions) - && Objects.equals(variables, scope.variables) - && Objects.equals(values, scope.values) - && Objects.equals(resourceAccessRights, scope.resourceAccessRights) - && mode == scope.mode; - } - - @Override - public int hashCode() { - return Objects.hash(functions, variables, values, resourceAccessRights, mode); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/model/scope/UnknownVariableInScopeException.java b/src/main/java/gov/nist/csd/pm/policy/pml/model/scope/UnknownVariableInScopeException.java deleted file mode 100644 index f3a1b5847..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/model/scope/UnknownVariableInScopeException.java +++ /dev/null @@ -1,9 +0,0 @@ -package gov.nist.csd.pm.policy.pml.model.scope; - -public class UnknownVariableInScopeException extends PMLScopeException { - - public UnknownVariableInScopeException(String functionName) { - super(String.format("unknown variable '%s' in scope", functionName)); - } - -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/statement/AssignStatement.java b/src/main/java/gov/nist/csd/pm/policy/pml/statement/AssignStatement.java deleted file mode 100644 index 2699b0641..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/statement/AssignStatement.java +++ /dev/null @@ -1,67 +0,0 @@ -package gov.nist.csd.pm.policy.pml.statement; - -import gov.nist.csd.pm.policy.Policy; -import gov.nist.csd.pm.policy.pml.model.context.ExecutionContext; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.exceptions.PMException; - -import java.util.List; -import java.util.Objects; - -public class AssignStatement extends PMLStatement { - - private final Expression child; - private final Expression assignTo; - - public AssignStatement(Expression child, Expression assignTo) { - this.child = child; - this.assignTo = assignTo; - } - - public Expression getChild() { - return child; - } - - public Expression getAssignTo() { - return assignTo; - } - - @Override - public Value execute(ExecutionContext ctx, Policy policy) throws PMException { - Value childValue = this.child.execute(ctx, policy); - Value assignToValue = this.assignTo.execute(ctx, policy); - - String childStringValue = childValue.getStringValue(); - - if (assignToValue.isString()) { - String parent = assignToValue.getStringValue(); - policy.graph().assign(childStringValue, parent); - } else if (assignToValue.isArray()) { - List valueArr = assignToValue.getArrayValue(); - for (Value value : valueArr) { - String parent = value.getStringValue(); - policy.graph().assign(childStringValue, parent); - } - } - - return new Value(); - } - - @Override - public String toString() { - return String.format("assign %s to %s", child, assignTo); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - AssignStatement that = (AssignStatement) o; - return Objects.equals(child, that.child) && Objects.equals(assignTo, that.assignTo); - } - - @Override - public int hashCode() { - return Objects.hash(child, assignTo); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/statement/AssociateStatement.java b/src/main/java/gov/nist/csd/pm/policy/pml/statement/AssociateStatement.java deleted file mode 100644 index 740b3735b..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/statement/AssociateStatement.java +++ /dev/null @@ -1,73 +0,0 @@ -package gov.nist.csd.pm.policy.pml.statement; - -import gov.nist.csd.pm.policy.Policy; -import gov.nist.csd.pm.policy.pml.model.context.ExecutionContext; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.AccessRightSet; - -import java.util.Objects; - -public class AssociateStatement extends PMLStatement { - - private final Expression ua; - private final Expression target; - private final Expression accessRights; - - public AssociateStatement(Expression ua, Expression target, Expression accessRights) { - this.ua = ua; - this.target = target; - this.accessRights = accessRights; - } - - public Expression getUa() { - return ua; - } - - public Expression getTarget() { - return target; - } - - public Expression getAccessRights() { - return accessRights; - } - - @Override - public Value execute(ExecutionContext ctx, Policy policy) throws PMException { - Value uaValue = ua.execute(ctx, policy); - Value targetValue = target.execute(ctx, policy); - Value permissionsValue = accessRights.execute(ctx, policy); - - AccessRightSet accessRightSet = new AccessRightSet(); - for (Value v : permissionsValue.getArrayValue()) { - accessRightSet.add(v.getStringValue()); - } - - policy.graph().associate( - uaValue.getStringValue(), - targetValue.getStringValue(), - accessRightSet - ); - - return new Value(); - } - - @Override - public String toString() { - return String.format("associate %s and %s with %s", - ua, target, accessRights); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - AssociateStatement that = (AssociateStatement) o; - return Objects.equals(ua, that.ua) && Objects.equals(target, that.target) && Objects.equals(accessRights, that.accessRights); - } - - @Override - public int hashCode() { - return Objects.hash(ua, target, accessRights); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/statement/BreakStatement.java b/src/main/java/gov/nist/csd/pm/policy/pml/statement/BreakStatement.java deleted file mode 100644 index 8f10367fb..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/statement/BreakStatement.java +++ /dev/null @@ -1,18 +0,0 @@ -package gov.nist.csd.pm.policy.pml.statement; - -import gov.nist.csd.pm.policy.Policy; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.pml.model.context.ExecutionContext; -import gov.nist.csd.pm.policy.exceptions.PMException; - -public class BreakStatement extends PMLStatement { - @Override - public Value execute(ExecutionContext ctx, Policy policy) throws PMException { - return Value.breakValue(); - } - - @Override - public String toString() { - return "break"; - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/statement/ContinueStatement.java b/src/main/java/gov/nist/csd/pm/policy/pml/statement/ContinueStatement.java deleted file mode 100644 index 47f10931c..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/statement/ContinueStatement.java +++ /dev/null @@ -1,18 +0,0 @@ -package gov.nist.csd.pm.policy.pml.statement; - -import gov.nist.csd.pm.policy.Policy; -import gov.nist.csd.pm.policy.pml.model.context.ExecutionContext; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.exceptions.PMException; - -public class ContinueStatement extends PMLStatement { - @Override - public Value execute(ExecutionContext ctx, Policy policy) throws PMException { - return Value.continueValue(); - } - - @Override - public String toString() { - return "continue"; - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/statement/CreateAttrStatement.java b/src/main/java/gov/nist/csd/pm/policy/pml/statement/CreateAttrStatement.java deleted file mode 100644 index 62ee00ae7..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/statement/CreateAttrStatement.java +++ /dev/null @@ -1,102 +0,0 @@ -package gov.nist.csd.pm.policy.pml.statement; - -import gov.nist.csd.pm.policy.Policy; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.pml.model.context.ExecutionContext; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.graph.nodes.NodeType; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Objects; - -import static gov.nist.csd.pm.policy.model.graph.nodes.NodeType.OA; - -public class CreateAttrStatement extends PMLStatement { - - private final Expression name; - private final NodeType type; - private final Expression assignTo; - - public CreateAttrStatement(Expression name, NodeType type, Expression assignTo) { - this.name = name; - this.type = type; - this.assignTo = assignTo; - } - - public Expression getName() { - return name; - } - - public NodeType getType() { - return type; - } - - public Expression getAssignTo() { - return assignTo; - } - - @Override - public Value execute(ExecutionContext ctx, Policy policy) throws PMException { - Value nameValue = name.execute(ctx, policy); - Value assignToValue = assignTo.execute(ctx, policy); - - String initialParent = ""; - List parents = new ArrayList<>(); - if (assignToValue.isString()) { - initialParent = assignToValue.getStringValue(); - } else { - List arrayValue = assignToValue.getArrayValue(); - for (Value parentValue : arrayValue) { - if (initialParent.isEmpty()) { - initialParent = parentValue.getStringValue(); - } else { - parents.add(parentValue.getStringValue()); - } - } - } - - String[] parentsArr = parents.toArray(new String[]{}); - - if (type == OA) { - policy.graph().createObjectAttribute( - nameValue.getStringValue(), - new HashMap<>(), - initialParent, - parentsArr - ); - } else { - policy.graph().createUserAttribute( - nameValue.getStringValue(), - new HashMap<>(), - initialParent, - parentsArr - ); - } - - return new Value(); - } - - @Override - public String toString() { - return String.format("create %s %s in %s", - (type == OA ? "object attribute" : "user attribute"), - name, - assignTo - ); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - CreateAttrStatement that = (CreateAttrStatement) o; - return Objects.equals(name, that.name) && type == that.type && Objects.equals(assignTo, that.assignTo); - } - - @Override - public int hashCode() { - return Objects.hash(name, type, assignTo); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/statement/CreateObligationStatement.java b/src/main/java/gov/nist/csd/pm/policy/pml/statement/CreateObligationStatement.java deleted file mode 100644 index caa0ce11f..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/statement/CreateObligationStatement.java +++ /dev/null @@ -1,178 +0,0 @@ -package gov.nist.csd.pm.policy.pml.statement; - -import gov.nist.csd.pm.policy.Policy; -import gov.nist.csd.pm.policy.pml.model.context.ExecutionContext; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.UserContext; -import gov.nist.csd.pm.policy.model.obligation.Obligation; -import gov.nist.csd.pm.policy.model.obligation.Rule; -import gov.nist.csd.pm.policy.model.obligation.event.EventPattern; -import gov.nist.csd.pm.policy.model.obligation.event.EventSubject; -import gov.nist.csd.pm.policy.model.obligation.event.Target; -import gov.nist.csd.pm.policy.pml.PMLFormatter; -import gov.nist.csd.pm.policy.pml.model.expression.ArrayLiteral; -import gov.nist.csd.pm.policy.pml.model.expression.Literal; -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.model.expression.Value; - -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -public class CreateObligationStatement extends PMLStatement { - - private final Expression name; - private final List ruleStmts; - - public CreateObligationStatement(Expression name, List ruleStmts) { - this.name = name; - this.ruleStmts = ruleStmts; - } - - @Override - public Value execute(ExecutionContext ctx, Policy policy) throws PMException { - UserContext author = ctx.author(); - String nameStr = name.execute(ctx, policy).getStringValue(); - - // execute the create rule statements and add to obligation - List rules = new ArrayList<>(); - for (PMLStatement createRuleStmt : ruleStmts) { - Value createRuleValue = createRuleStmt.execute(ctx, policy); - Rule rule = createRuleValue.getRule(); - rules.add(rule); - } - - policy.obligations().create(author, nameStr, rules.toArray(rules.toArray(Rule[]::new))); - - return new Value(); - } - - @Override - public String toString() { - return String.format("create obligation %s {%s}", name, PMLFormatter.statementsToString(ruleStmts)); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - CreateObligationStatement that = (CreateObligationStatement) o; - return Objects.equals(name, that.name) && Objects.equals(ruleStmts, that.ruleStmts); - } - - @Override - public int hashCode() { - return Objects.hash(name, ruleStmts); - } - - public static CreateObligationStatement fromObligation(Obligation obligation) { - return new CreateObligationStatement( - new Expression(new Literal(obligation.getLabel())), - createRuleStatementsFromObligation(obligation.getRules()) - ); - } - - private static List createRuleStatementsFromObligation(List rules) { - List createRuleStatements = new ArrayList<>(); - - for (Rule rule : rules) { - EventPattern event = rule.getEventPattern(); - - CreateRuleStatement createRuleStatement = new CreateRuleStatement( - new Expression(new Literal(rule.getLabel())), - getSubjectClause(event.getSubject()), - getPerformsClause(event.getOperations()), - getOnClause(event), - new CreateRuleStatement.ResponseBlock( - rule.getResponse().getEventCtxVariable(), - rule.getResponse().getStatements() - ) - ); - - createRuleStatements.add(createRuleStatement); - } - - return createRuleStatements; - } - - private static CreateRuleStatement.OnClause getOnClause(EventPattern event) { - Target target = event.getTarget(); - Target.Type type = target.getType(); - Expression expression = null; - CreateRuleStatement.TargetType onClauseType = null; - switch (type) { - case ANY_CONTAINED_IN -> { - expression = new Expression(new Literal(target.anyContainedIn())); - onClauseType = CreateRuleStatement.TargetType.ANY_CONTAINED_IN; - } - case POLICY_ELEMENT -> { - expression = new Expression(new Literal(target.policyElement())); - onClauseType = CreateRuleStatement.TargetType.POLICY_ELEMENT; - } - case ANY_OF_SET -> { - List set = target.anyOfSet(); - ArrayLiteral arrayLiteral = new ArrayLiteral(Type.string()); - for (String s : set) { - arrayLiteral.add(new Expression(new Literal(s))); - } - - expression = new Expression(new Literal(arrayLiteral)); - onClauseType = CreateRuleStatement.TargetType.ANY_OF_SET; - } - case ANY_POLICY_ELEMENT -> onClauseType = CreateRuleStatement.TargetType.ANY_POLICY_ELEMENT; - } - - return new CreateRuleStatement.OnClause(expression, onClauseType); - } - - private static CreateRuleStatement.PerformsClause getPerformsClause(List operations) { - ArrayLiteral arrayLiteral = new ArrayLiteral(Type.string()); - for (String op : operations) { - arrayLiteral.add(new Expression(new Literal(op))); - } - return new CreateRuleStatement.PerformsClause( - new Expression(new Literal(arrayLiteral)) - ); - } - - private static CreateRuleStatement.SubjectClause getSubjectClause(EventSubject subject) { - EventSubject.Type eventSubjectType = subject.getType(); - CreateRuleStatement.SubjectType type = null; - Expression subjectExpr = null; - CreateRuleStatement.SubjectClause subjectClause = null; - switch (eventSubjectType) { - case USERS -> { - if (subject.users().size() > 1) { - type = CreateRuleStatement.SubjectType.USERS; - - ArrayLiteral arrayLiteral = new ArrayLiteral(Type.string()); - for (String user : subject.users()) { - arrayLiteral.add(new Expression(new Literal(user))); - } - - subjectExpr = new Expression(new Literal(arrayLiteral)); - } else { - type = CreateRuleStatement.SubjectType.USER; - subjectExpr = new Expression(new Literal(subject.users().get(0))); - } - } - case PROCESS -> { - type = CreateRuleStatement.SubjectType.PROCESS; - subjectExpr = new Expression(new Literal(subject.process())); - } - case ANY_USER_WITH_ATTRIBUTE -> { - type = CreateRuleStatement.SubjectType.USER_ATTR; - subjectExpr = new Expression(new Literal(subject.anyUserWithAttribute())); - } - case ANY_USER -> type = CreateRuleStatement.SubjectType.ANY_USER; - } - - if (subjectExpr == null) { - subjectClause = new CreateRuleStatement.SubjectClause(type); - } else { - subjectClause = new CreateRuleStatement.SubjectClause(type, subjectExpr); - } - - return subjectClause; - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/statement/CreatePolicyStatement.java b/src/main/java/gov/nist/csd/pm/policy/pml/statement/CreatePolicyStatement.java deleted file mode 100644 index 382acce52..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/statement/CreatePolicyStatement.java +++ /dev/null @@ -1,48 +0,0 @@ -package gov.nist.csd.pm.policy.pml.statement; - -import gov.nist.csd.pm.policy.Policy; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.pml.model.context.ExecutionContext; -import gov.nist.csd.pm.policy.exceptions.PMException; - -import java.util.Objects; - -import static gov.nist.csd.pm.policy.model.graph.nodes.Properties.NO_PROPERTIES; - -public class CreatePolicyStatement extends PMLStatement { - - private final Expression name; - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - CreatePolicyStatement that = (CreatePolicyStatement) o; - return Objects.equals(name, that.name); - } - - @Override - public int hashCode() { - return Objects.hash(name); - } - - public CreatePolicyStatement(Expression name) { - this.name = name; - } - - public Expression getName() { - return name; - } - - @Override - public Value execute(ExecutionContext ctx, Policy policy) throws PMException { - policy.graph().createPolicyClass(name.execute(ctx, policy).getStringValue(), NO_PROPERTIES); - - return new Value(); - } - - @Override - public String toString() { - return String.format("create policy class %s", name); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/statement/CreateProhibitionStatement.java b/src/main/java/gov/nist/csd/pm/policy/pml/statement/CreateProhibitionStatement.java deleted file mode 100644 index aa68fc8a0..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/statement/CreateProhibitionStatement.java +++ /dev/null @@ -1,167 +0,0 @@ -package gov.nist.csd.pm.policy.pml.statement; - -import gov.nist.csd.pm.policy.Policy; -import gov.nist.csd.pm.policy.model.prohibition.Prohibition; -import gov.nist.csd.pm.policy.model.prohibition.ProhibitionSubject; -import gov.nist.csd.pm.policy.pml.model.context.ExecutionContext; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.AccessRightSet; -import gov.nist.csd.pm.policy.model.prohibition.ContainerCondition; -import gov.nist.csd.pm.policy.pml.model.expression.*; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -import static gov.nist.csd.pm.policy.model.access.AdminAccessRights.isAdminAccessRight; - -public class CreateProhibitionStatement extends PMLStatement { - - private final Expression label; - private final Expression subject; - private final ProhibitionSubject.Type subjectType; - private final Expression accessRights; - private final boolean isIntersection; - private final List containers; - - public CreateProhibitionStatement(Expression label, Expression subject, ProhibitionSubject.Type subjectType, Expression accessRights, - boolean isIntersection, List containers) { - this.label = label; - this.subject = subject; - this.subjectType = subjectType; - this.accessRights = accessRights; - this.isIntersection = isIntersection; - this.containers = containers; - } - - public Expression getLabel() { - return label; - } - - public Expression getSubject() { - return subject; - } - - public ProhibitionSubject.Type getSubjectType() { - return subjectType; - } - - public Expression getAccessRights() { - return accessRights; - } - - public boolean isIntersection() { - return isIntersection; - } - - public List getContainers() { - return containers; - } - - @Override - public Value execute(ExecutionContext ctx, Policy policy) throws PMException { - Value labelValue = this.label .execute(ctx, policy); - Value subjectValue = this.subject.execute(ctx, policy); - Value permissionsValue = this.accessRights.execute(ctx, policy); - - List arrayValue = permissionsValue.getArrayValue(); - AccessRightSet ops = new AccessRightSet(); - for (Value v : arrayValue) { - ops.add(v.getStringValue()); - } - - List containerConditions = new ArrayList<>(); - for (Container container : containers) { - boolean isComplement = container.isComplement; - Value containerValue = container.name.execute(ctx, policy); - containerConditions.add(new ContainerCondition(containerValue.getStringValue(), isComplement)); - } - - - policy.prohibitions().create( - labelValue.getStringValue(), - new ProhibitionSubject(subjectValue.getStringValue(), subjectType), - ops, - isIntersection, - containerConditions.toArray(new ContainerCondition[]{}) - ); - - return new Value(); - } - - @Override - public String toString() { - String subjectStr = ""; - switch (subjectType) { - case USER_ATTRIBUTE -> subjectStr = "user attribute"; - case USER -> subjectStr = "user"; - case PROCESS -> subjectStr = "process"; - } - - StringBuilder containerStr = new StringBuilder((isIntersection ? "intersection" : "union") + " of ["); - int length = containerStr.length(); - for (Container c : containers) { - if (containerStr.length() != length) { - containerStr.append(", "); - } - containerStr.append(c); - } - containerStr.append("]"); - - return String.format("create prohibition %s deny %s %s access rights %s on %s", label, subjectStr, subject, accessRights, containerStr); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - CreateProhibitionStatement that = (CreateProhibitionStatement) o; - return isIntersection == that.isIntersection && Objects.equals(label, that.label) && Objects.equals(subject, that.subject) && Objects.equals(accessRights, that.accessRights) && Objects.equals(containers, that.containers); - } - - @Override - public int hashCode() { - return Objects.hash(label, subject, accessRights, isIntersection, containers); - } - - public static class Container implements Serializable { - private final boolean isComplement; - private final Expression name; - - public Container(boolean isComplement, Expression name) { - this.isComplement = isComplement; - this.name = name; - } - - @Override - public String toString() { - return (isComplement ? "!" : "") + name; - } - } - - public static CreateProhibitionStatement fromProhibition(Prohibition prohibition) { - ArrayLiteral arrayLiteral = new ArrayLiteral(Type.string()); - for (String ar : prohibition.getAccessRightSet()) { - if (isAdminAccessRight(ar)) { - arrayLiteral.add(new Expression(new VariableReference(ar, Type.string()))); - } else { - arrayLiteral.add(new Expression(new Literal(ar))); - } - } - - List containers = new ArrayList<>(); - for (ContainerCondition cc : prohibition.getContainers()) { - containers.add(new Container(cc.complement(), new Expression(new Literal(cc.name())))); - } - - return new CreateProhibitionStatement( - new Expression(new Literal(prohibition.getLabel())), - new Expression(new Literal(prohibition.getSubject().getName())), - prohibition.getSubject().getType(), - new Expression(new Literal(arrayLiteral)), - prohibition.isIntersection(), - containers - ); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/statement/CreateRuleStatement.java b/src/main/java/gov/nist/csd/pm/policy/pml/statement/CreateRuleStatement.java deleted file mode 100644 index 42ce2b575..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/statement/CreateRuleStatement.java +++ /dev/null @@ -1,329 +0,0 @@ -package gov.nist.csd.pm.policy.pml.statement; - -import gov.nist.csd.pm.policy.Policy; -import gov.nist.csd.pm.policy.pml.model.context.ExecutionContext; -import gov.nist.csd.pm.policy.pml.model.exception.PMLExecutionException; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.obligation.Response; -import gov.nist.csd.pm.policy.model.obligation.Rule; -import gov.nist.csd.pm.policy.model.obligation.event.EventPattern; -import gov.nist.csd.pm.policy.model.obligation.event.Performs; -import gov.nist.csd.pm.policy.model.obligation.event.EventSubject; -import gov.nist.csd.pm.policy.model.obligation.event.Target; -import gov.nist.csd.pm.policy.pml.PMLFormatter; -import gov.nist.csd.pm.policy.pml.model.scope.PMLScopeException; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -public class CreateRuleStatement extends PMLStatement { - - private final Expression name; - private final SubjectClause subjectClause; - private final PerformsClause performsClause; - private final OnClause onClause; - private final ResponseBlock responseBlock; - - public CreateRuleStatement(Expression name, SubjectClause subjectClause, - PerformsClause performsClause, OnClause onClause, ResponseBlock responseBlock) { - this.name = name; - this.subjectClause = subjectClause; - this.performsClause = performsClause; - this.onClause = onClause; - this.responseBlock = responseBlock; - } - - public Expression getName() { - return name; - } - - public SubjectClause getSubjectClause() { - return subjectClause; - } - - public PerformsClause getPerformsClause() { - return performsClause; - } - - public OnClause getOnClause() { - return onClause; - } - - public ResponseBlock getResponse() { - return responseBlock; - } - - @Override - public Value execute(ExecutionContext ctx, Policy policy) throws PMException { - Value nameValue = name.execute(ctx, policy); - - EventSubject subject = executeEventSubject(ctx, policy); - Performs performs = executePerforms(ctx, policy); - Target target = executeTarget(ctx, policy); - ExecutionContext ruleCtx; - try { - ruleCtx = ctx.copy(); - } catch (PMLScopeException e) { - throw new PMLExecutionException(e.getMessage()); - } - - Rule rule = new Rule( - nameValue.getStringValue(), - new EventPattern( - subject, - performs, - target - ), - new Response(responseBlock.evtVar, ruleCtx, responseBlock.getStatements()) - ); - - return new Value(rule); - } - - private EventSubject executeEventSubject(ExecutionContext ctx, Policy policy) throws PMException { - EventSubject subject; - if (subjectClause.type == SubjectType.USER || subjectClause.type == SubjectType.USERS) { - List subjectValues = new ArrayList<>(); - subjectValues.add(subjectClause.expr.execute(ctx, policy).getStringValue()); - subject = EventSubject.users(subjectValues.toArray(new String[]{})); - } else if (subjectClause.type == SubjectType.ANY_USER) { - subject = EventSubject.anyUser(); - } else if (subjectClause.type == SubjectType.USER_ATTR) { - subject = EventSubject.anyUserWithAttribute( - subjectClause.expr.execute(ctx, policy).getStringValue() - ); - } else { - // process - subject = EventSubject.process( - subjectClause.expr.execute(ctx, policy).getStringValue() - ); - } - - return subject; - } - - private Performs executePerforms(ExecutionContext ctx, Policy policy) throws PMException { - Performs performs; - Value performsValue = performsClause.events.execute(ctx, policy); - if (performsValue.isString()) { - performs = Performs.events(performsValue.getStringValue()); - } else { - List events = new ArrayList<>(); - List arrayValue = performsValue.getArrayValue(); - for (Value value : arrayValue) { - events.add(value.getStringValue()); - } - performs = Performs.events(events.toArray(new String[]{})); - } - - return performs; - } - - private Target executeTarget(ExecutionContext ctx, Policy policy) throws PMException { - Target target = Target.anyPolicyElement(); - Value onValue; - if (onClause.nameExpr != null) { - onValue = onClause.nameExpr.execute(ctx, policy); - } else { - onValue = new Value(); - } - - if (onValue.isString()) { - // with POLICY_ELEMENT or CONTAINED_IN - if (onClause.isPolicyElement()) { - target = Target.policyElement(onValue.getStringValue()); - } else { - target = Target.anyContainedIn(onValue.getStringValue()); - } - } else if (onValue.isArray()) { - // ANY_OF_SET - List values = onValue.getArrayValue(); - List policyElements = new ArrayList<>(); - for (Value value : values) { - policyElements.add(value.getStringValue()); - } - - target = Target.anyOfSet(policyElements.toArray(String[]::new)); - } - - return target; - } - - - @Override - public String toString() { - return String.format( - "create rule %s %s %s %s do (%s) {%s}", - name, subjectClause, performsClause, onClause, - responseBlock.evtVar, PMLFormatter.statementsToString(responseBlock.statements) - ); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - CreateRuleStatement that = (CreateRuleStatement) o; - return Objects.equals(name, that.name) && Objects.equals(subjectClause, that.subjectClause) && Objects.equals(performsClause, that.performsClause) && Objects.equals(onClause, that.onClause) && Objects.equals(responseBlock, that.responseBlock); - } - - @Override - public int hashCode() { - return Objects.hash(name, subjectClause, performsClause, onClause, responseBlock); - } - - public enum SubjectType implements Serializable { - ANY_USER, - USER, - USERS, - USER_ATTR, - PROCESS - } - - public static class SubjectClause implements Serializable { - private SubjectType type; - private Expression expr; - - public SubjectClause() { - } - - public SubjectClause(SubjectType type, Expression expr) { - this.type = type; - this.expr = expr; - } - - public SubjectClause(SubjectType type) { - this.type = type; - } - - public SubjectType getType() { - return type; - } - - @Override - public String toString() { - String s = "when "; - switch (type) { - case ANY_USER -> s += "any user"; - case USER_ATTR -> s += "any user with attribute " + expr; - case USERS -> s += "users " + expr; - case USER -> s += "user " + expr; - case PROCESS -> s += "process " + expr; - } - - return s; - } - } - - public static class PerformsClause implements Serializable { - private final Expression events; - - public PerformsClause(Expression events) { - this.events = events; - } - - public Expression getEvents() { - return events; - } - - @Override - public String toString() { - StringBuilder s = new StringBuilder("performs ["); - StringBuilder eventsStr = new StringBuilder(); - for (Expression event : events.getLiteral().getArrayLiteral().getArray()) { - if (!eventsStr.isEmpty()) { - eventsStr.append(", "); - } - eventsStr.append(event); - } - return s.append(eventsStr).append("]").toString(); - } - - public record Event(String eventName, String alias) { - @Override - public String toString() { - return String.format("%s%s", eventName, alias == null || alias.isEmpty() ? "" : "as " + alias); - } - } - } - - public enum TargetType { - ANY_POLICY_ELEMENT, ANY_CONTAINED_IN, ANY_OF_SET, POLICY_ELEMENT - - } - - public static class OnClause implements Serializable { - - private final Expression nameExpr; - private final TargetType onClauseType; - - public OnClause() { - nameExpr = null; - onClauseType = null; - } - - public OnClause(Expression nameExpr, TargetType onClauseType) { - this.nameExpr = nameExpr; - this.onClauseType = onClauseType; - } - - public boolean isPolicyElement() { - return onClauseType == TargetType.POLICY_ELEMENT; - } - - public boolean isAnyPolicyElement() { - return onClauseType == TargetType.ANY_POLICY_ELEMENT; - } - - public boolean isAnyContainedIn() { - return onClauseType == TargetType.ANY_CONTAINED_IN; - } - - public boolean isAnyOfSet() { - return onClauseType == TargetType.ANY_OF_SET; - } - - @Override - public String toString() { - if (onClauseType == null) { - return ""; - } - - String s = "on "; - switch (onClauseType) { - case POLICY_ELEMENT -> s += nameExpr; - case ANY_POLICY_ELEMENT -> s += "any policy element"; - case ANY_CONTAINED_IN -> s += "any policy element in " + nameExpr; - case ANY_OF_SET -> s += "any policy element of " + nameExpr; - } - - return s; - } - } - - public static class ResponseBlock implements Serializable { - private final String evtVar; - private final List statements; - - public ResponseBlock() { - this.evtVar = ""; - this.statements = new ArrayList<>(); - } - - public ResponseBlock(String evtVar, List statements) { - this.evtVar = evtVar; - this.statements = statements; - } - - public String getEvtVar() { - return evtVar; - } - - public List getStatements() { - return statements; - } - } -} \ No newline at end of file diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/statement/CreateUserOrObjectStatement.java b/src/main/java/gov/nist/csd/pm/policy/pml/statement/CreateUserOrObjectStatement.java deleted file mode 100644 index ae6588faf..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/statement/CreateUserOrObjectStatement.java +++ /dev/null @@ -1,100 +0,0 @@ -package gov.nist.csd.pm.policy.pml.statement; - -import gov.nist.csd.pm.policy.Policy; -import gov.nist.csd.pm.policy.pml.model.context.ExecutionContext; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.graph.nodes.NodeType; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Objects; - -import static gov.nist.csd.pm.policy.model.graph.nodes.NodeType.O; - -public class CreateUserOrObjectStatement extends PMLStatement { - - private final Expression name; - private final NodeType type; - private final Expression assignTo; - - public CreateUserOrObjectStatement(Expression name, NodeType type, Expression assignTo) { - this.name = name; - this.type = type; - this.assignTo = assignTo; - } - - public Expression getName() { - return name; - } - - public NodeType getType() { - return type; - } - - public Expression getAssignTo() { - return assignTo; - } - - @Override - public Value execute(ExecutionContext ctx, Policy policy) throws PMException { - Value nameValue = name.execute(ctx, policy); - Value assignToValue = assignTo.execute(ctx, policy); - - String initialParent = ""; - List parents = new ArrayList<>(); - - List arrayValue = assignToValue.getArrayValue(); - for (Value parentValue : arrayValue) { - if (initialParent.isEmpty()) { - initialParent = parentValue.getStringValue(); - } else { - parents.add(parentValue.getStringValue()); - } - } - - String[] parentsArr = parents.toArray(new String[]{}); - - if (type == O) { - policy.graph().createObject( - nameValue.getStringValue(), - new HashMap<>(), - initialParent, - parentsArr - ); - } else { - policy.graph().createUser( - nameValue.getStringValue(), - new HashMap<>(), - initialParent, - parentsArr - ); - } - - return new Value(); - } - - @Override - public String toString() { - return String.format( - "create %s %s in %s", - (type == O ? "object" : "user"), - name, - assignTo - ); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - CreateUserOrObjectStatement that = (CreateUserOrObjectStatement) o; - return Objects.equals(name, that.name) && type == that.type && Objects.equals(assignTo, that.assignTo); - } - - @Override - public int hashCode() { - return Objects.hash(name, type, assignTo); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/statement/DeassignStatement.java b/src/main/java/gov/nist/csd/pm/policy/pml/statement/DeassignStatement.java deleted file mode 100644 index 476fc2539..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/statement/DeassignStatement.java +++ /dev/null @@ -1,70 +0,0 @@ -package gov.nist.csd.pm.policy.pml.statement; - -import gov.nist.csd.pm.policy.Policy; -import gov.nist.csd.pm.policy.pml.model.context.ExecutionContext; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.exceptions.PMException; - -import java.util.List; -import java.util.Objects; - -public class DeassignStatement extends PMLStatement { - - private final Expression child; - private final Expression deassignFrom; - - public DeassignStatement(Expression child, Expression deassignFrom) { - this.child = child; - this.deassignFrom = deassignFrom; - } - - public Expression getChild() { - return child; - } - - public Expression getDeassignFrom() { - return deassignFrom; - } - - @Override - public Value execute(ExecutionContext ctx, Policy policy) throws PMException { - Value childValue = child.execute(ctx, policy); - Value deassignFromValue = deassignFrom.execute(ctx, policy); - - String childStringValue = childValue.getStringValue(); - - if (deassignFromValue.isString()) { - String parent = deassignFromValue.getStringValue(); - policy.graph().deassign(childStringValue, parent); - } else { - List valueArr = deassignFromValue.getArrayValue(); - for (Value value : valueArr) { - String parent = value.getStringValue(); - policy.graph().deassign(childStringValue, parent); - } - } - - return new Value(); - } - - @Override - public String toString() { - return String.format("deassign %s from %s", - child, - deassignFrom - ); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - DeassignStatement that = (DeassignStatement) o; - return Objects.equals(child, that.child) && Objects.equals(deassignFrom, that.deassignFrom); - } - - @Override - public int hashCode() { - return Objects.hash(child, deassignFrom); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/statement/DeleteRuleStatement.java b/src/main/java/gov/nist/csd/pm/policy/pml/statement/DeleteRuleStatement.java deleted file mode 100644 index 7340dcb20..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/statement/DeleteRuleStatement.java +++ /dev/null @@ -1,64 +0,0 @@ -package gov.nist.csd.pm.policy.pml.statement; - -import gov.nist.csd.pm.policy.Policy; -import gov.nist.csd.pm.policy.pml.model.context.ExecutionContext; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.obligation.Obligation; -import gov.nist.csd.pm.policy.model.obligation.Rule; - -import java.util.Objects; - -public class DeleteRuleStatement extends PMLStatement { - - private final Expression ruleExpr; - private final Expression oblExpr; - - public DeleteRuleStatement(Expression ruleExpr, Expression oblExpr) { - this.ruleExpr = ruleExpr; - this.oblExpr = oblExpr; - } - - public Expression getRuleExpr() { - return ruleExpr; - } - - public Expression getOblExpr() { - return oblExpr; - } - - @Override - public Value execute(ExecutionContext ctx, Policy policy) throws PMException { - String ruleLabel = ruleExpr.execute(ctx, policy).getStringValue(); - String oblLabel = oblExpr.execute(ctx, policy).getStringValue(); - - Obligation obligation = policy.obligations().get(oblLabel); - obligation.deleteRule(ruleLabel); - - policy.obligations().update( - obligation.getAuthor(), - obligation.getLabel(), - obligation.getRules().toArray(new Rule[]{}) - ); - - return new Value(); - } - - @Override - public String toString() { - return String.format("delete rule %s from obligation %s", ruleExpr, oblExpr); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - DeleteRuleStatement that = (DeleteRuleStatement) o; - return Objects.equals(ruleExpr, that.ruleExpr) && Objects.equals(oblExpr, that.oblExpr); - } - - @Override - public int hashCode() { - return Objects.hash(ruleExpr, oblExpr); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/statement/DeleteStatement.java b/src/main/java/gov/nist/csd/pm/policy/pml/statement/DeleteStatement.java deleted file mode 100644 index 619508f44..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/statement/DeleteStatement.java +++ /dev/null @@ -1,80 +0,0 @@ -package gov.nist.csd.pm.policy.pml.statement; - -import gov.nist.csd.pm.policy.Policy; -import gov.nist.csd.pm.policy.pml.model.context.ExecutionContext; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.exceptions.PMException; - -import java.util.Objects; - -public class DeleteStatement extends PMLStatement { - - private final Type type; - private final Expression expression; - - public DeleteStatement(Type type, Expression expression) { - this.type = type; - this.expression = expression; - } - - public Type getType() { - return type; - } - - public Expression getExpression() { - return expression; - } - - @Override - public Value execute(ExecutionContext ctx, Policy policy) throws PMException { - String name = expression.execute(ctx, policy).getStringValue(); - if (type == Type.PROHIBITION) { - policy.prohibitions().delete(name); - } else if (type == Type.OBLIGATION) { - policy.obligations().delete(name); - } else { - policy.graph().deleteNode(name); - } - - return new Value(); - } - - @Override - public String toString() { - String typeStr = ""; - switch (type) { - case PROHIBITION -> typeStr = "prohibition"; - case OBLIGATION -> typeStr = "obligation"; - case POLICY_CLASS -> typeStr = "policy class"; - case OBJECT_ATTRIBUTE -> typeStr = "object attribute"; - case USER_ATTRIBUTE -> typeStr = "user attribute"; - case OBJECT -> typeStr = "object"; - case USER -> typeStr = "user"; - } - - return String.format("delete %s %s", typeStr, expression); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - DeleteStatement that = (DeleteStatement) o; - return type == that.type && Objects.equals(expression, that.expression); - } - - @Override - public int hashCode() { - return Objects.hash(type, expression); - } - - public enum Type { - POLICY_CLASS, - OBJECT_ATTRIBUTE, - USER_ATTRIBUTE, - OBJECT, - USER, - PROHIBITION, - OBLIGATION - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/statement/DissociateStatement.java b/src/main/java/gov/nist/csd/pm/policy/pml/statement/DissociateStatement.java deleted file mode 100644 index 6d052b5fd..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/statement/DissociateStatement.java +++ /dev/null @@ -1,55 +0,0 @@ -package gov.nist.csd.pm.policy.pml.statement; - -import gov.nist.csd.pm.policy.Policy; -import gov.nist.csd.pm.policy.pml.model.context.ExecutionContext; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.exceptions.PMException; - -import java.util.Objects; - -public class DissociateStatement extends PMLStatement { - - private final Expression uaExpr; - private final Expression targetExpr; - - public DissociateStatement(Expression uaExpr, Expression targetExpr) { - this.uaExpr = uaExpr; - this.targetExpr = targetExpr; - } - - public Expression getUaExpr() { - return uaExpr; - } - - public Expression getTargetExpr() { - return targetExpr; - } - - @Override - public Value execute(ExecutionContext ctx, Policy policy) throws PMException { - String ua = uaExpr.execute(ctx, policy).getStringValue(); - String target = targetExpr.execute(ctx, policy).getStringValue(); - - policy.graph().dissociate(ua, target); - - return new Value(); - } - - @Override - public String toString() { - return String.format("dissociate %s and %s", uaExpr, targetExpr); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - DissociateStatement that = (DissociateStatement) o; - return Objects.equals(uaExpr, that.uaExpr) && Objects.equals(targetExpr, that.targetExpr); - } - - @Override - public int hashCode() { - return Objects.hash(uaExpr, targetExpr); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/statement/Expression.java b/src/main/java/gov/nist/csd/pm/policy/pml/statement/Expression.java deleted file mode 100644 index f60dc7414..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/statement/Expression.java +++ /dev/null @@ -1,242 +0,0 @@ -package gov.nist.csd.pm.policy.pml.statement; - -import com.mysql.cj.log.Log; -import gov.nist.csd.pm.policy.Policy; -import gov.nist.csd.pm.policy.pml.antlr.PMLParser; -import gov.nist.csd.pm.policy.pml.compiler.Variable; -import gov.nist.csd.pm.policy.pml.compiler.visitor.FunctionInvokeVisitor; -import gov.nist.csd.pm.policy.pml.compiler.visitor.LiteralExprVisitor; -import gov.nist.csd.pm.policy.pml.compiler.visitor.VariableReferenceVisitor; -import gov.nist.csd.pm.policy.pml.model.context.ExecutionContext; -import gov.nist.csd.pm.policy.pml.model.context.VisitorContext; -import gov.nist.csd.pm.policy.pml.model.expression.*; -import gov.nist.csd.pm.policy.pml.model.scope.Scope; -import gov.nist.csd.pm.policy.pml.model.scope.UnknownFunctionInScopeException; -import gov.nist.csd.pm.policy.pml.model.scope.UnknownVariableInScopeException; -import gov.nist.csd.pm.policy.exceptions.PMException; - -import java.util.Arrays; -import java.util.List; -import java.util.Objects; - -public class Expression extends PMLStatement { - - public static Expression compile(VisitorContext visitorCtx, - PMLParser.ExpressionContext expressionCtx, - Type... allowedTypes) { - Expression expression; - if (expressionCtx.literal() != null) { - PMLParser.LiteralContext litCtx = expressionCtx.literal(); - Literal literal = new LiteralExprVisitor(visitorCtx) - .visitLiteral(litCtx); - expression = new Expression(literal); - } else if (expressionCtx.functionInvoke() != null) { - FunctionInvocationStatement functionCall = new FunctionInvokeVisitor(visitorCtx) - .visitFunctionInvoke(expressionCtx.functionInvoke()); - expression = new Expression(functionCall); - } else if (expressionCtx.variableReference() != null){ - VariableReference varRef = new VariableReferenceVisitor(visitorCtx) - .visitVariableReference(expressionCtx.variableReference()); - expression = new Expression(varRef); - } else if (expressionCtx.AND_OP() != null || expressionCtx.OR_OP() != null) { - Expression left = compile(visitorCtx, expressionCtx.left, Type.bool()); - Expression right = compile(visitorCtx, expressionCtx.right, Type.bool()); - - expression = new Expression(new LogicalExpression(left, right, expressionCtx.AND_OP() != null)); - } else { - Expression left = compile(visitorCtx, expressionCtx.left); - Expression right = compile(visitorCtx, expressionCtx.right); - - expression = new Expression(new CompareExpression(left, right, expressionCtx.EQUALS_OP() != null)); - } - - Type type; - try { - type = expression.getType(visitorCtx.scope()); - } catch (UnknownFunctionInScopeException | UnknownVariableInScopeException e) { - visitorCtx.errorLog().addError(expressionCtx, e.getMessage()); - type = Type.any(); - } - - // check the expression type is part of the given allowed types - // if no types are given then any type is allowed - List allowedTypesList = Arrays.asList(allowedTypes); - if (!allowedTypesList.isEmpty() - && !allowedTypesList.contains(type)) { - visitorCtx.errorLog().addError( - expressionCtx, - "expression type " + type + " not allowed, only: " + allowedTypesList - ); - } - - return expression; - } - - private VariableReference variableReference; - private boolean isVariableReference; - private FunctionInvocationStatement functionCall; - private boolean isFunctionCall; - private Literal literal; - private boolean isLiteral; - private CompareExpression compareExpression; - private boolean isCompareExpression; - private LogicalExpression logicalExpression; - private boolean isLogicalExpression; - - public Expression(VariableReference variableReference) { - this.variableReference = variableReference; - this.isVariableReference = true; - } - - public Expression(FunctionInvocationStatement functionCall) { - this.functionCall = functionCall; - this.isFunctionCall = true; - } - - public Expression(Literal literal) { - this.literal = literal; - this.isLiteral = true; - } - - public Expression(CompareExpression compareExpression) { - this.compareExpression = compareExpression; - this.isCompareExpression = true; - } - - public Expression(LogicalExpression logicalExpression) { - this.logicalExpression = logicalExpression; - this.isLogicalExpression = true; - } - - public Expression() {} - - public VariableReference getVariableReference() { - return variableReference; - } - - public boolean isVariableReference() { - return isVariableReference; - } - - public FunctionInvocationStatement getFunctionCall() { - return functionCall; - } - - public boolean isFunctionCall() { - return isFunctionCall; - } - - public Literal getLiteral() { - return literal; - } - - public boolean isLiteral() { - return isLiteral; - } - - @Override - public String toString() { - if (isFunctionCall) { - return functionCall.toString(); - } else if (isLiteral) { - return literal.toString(); - } else { - return variableReference.toString(); - } - } - - public Type getType(Scope Scope) throws UnknownFunctionInScopeException, UnknownVariableInScopeException { - if (isFunctionCall) { - return getFunctionCallType(Scope); - } else if (isLiteral) { - return getLiteralType(); - } else if (isVariableReference){ - return getVarRefType(Scope); - } else {// (isLogicalExpression || isCompareExpression) { - return Type.bool(); - } - } - - private Type getVarRefType(Scope Scope) throws UnknownVariableInScopeException { - if (variableReference.isID()) { - return getIDType(Scope, variableReference); - } else { - return variableReference.getType(); - } - } - - private Type getIDType(Scope Scope, VariableReference variableReference) throws UnknownVariableInScopeException { - Variable variable = Scope.getVariable(variableReference.getID()); - if (variable == null) { - return null; - } - - return variable.type(); - } - - private Type getFunctionCallType(Scope Scope) throws UnknownFunctionInScopeException { - String functionName = functionCall.getFunctionName(); - FunctionDefinitionStatement function = Scope.getFunction(functionName); - if (function == null) { - return null; - } - - return function.getReturnType(); - } - - private Type getLiteralType() { - if (literal.isStringLiteral()) { - return Type.string(); - } else if (literal.isNumberLiteral()) { - return Type.number(); - } else if (literal.isBooleanLiteral()) { - return Type.bool(); - } else if (literal.isArrayLiteral()) { - return literal.getArrayLiteral().getType(); - }else if (literal.isMapLiteral()) { - return literal.getMapLiteral().getType(); - } else { - return Type.any(); - } - } - - @Override - public Value execute(ExecutionContext ctx, Policy policy) throws PMException { - if (isLiteral) { - return literal.execute(ctx, policy); - } else if (isFunctionCall) { - return functionCall.execute(ctx, policy); - } else if (isVariableReference){ - return variableReference.execute(ctx, policy); - } else if (isCompareExpression) { - return compareExpression.execute(ctx, policy); - } else { - return logicalExpression.execute(ctx, policy); - } - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Expression that = (Expression) o; - return isVariableReference == that.isVariableReference - && isFunctionCall == that.isFunctionCall - && isLiteral == that.isLiteral - && Objects.equals(variableReference, that.variableReference) - && Objects.equals(functionCall, that.functionCall) - && Objects.equals(literal, that.literal); - } - - @Override - public int hashCode() { - if (isVariableReference) { - return variableReference.hashCode(); - } else if (isFunctionCall) { - return functionCall.hashCode(); - } else { - return literal.hashCode(); - } - } -} - diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/statement/ForRangeStatement.java b/src/main/java/gov/nist/csd/pm/policy/pml/statement/ForRangeStatement.java deleted file mode 100644 index 1cab16432..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/statement/ForRangeStatement.java +++ /dev/null @@ -1,77 +0,0 @@ -package gov.nist.csd.pm.policy.pml.statement; - -import gov.nist.csd.pm.policy.Policy; -import gov.nist.csd.pm.policy.pml.model.context.ExecutionContext; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.pml.model.scope.PMLScopeException; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.pml.PMLExecutor; -import gov.nist.csd.pm.policy.pml.PMLFormatter; - -import java.util.List; - -public class ForRangeStatement extends PMLStatement{ - - private final String varName; - private final Expression lower; - private boolean lowerBound; - private final Expression upper; - private boolean upperBound; - private final List block; - - public ForRangeStatement(String varName, Expression lower, boolean lowerBound, Expression upper, boolean upperBound, List block) { - this.varName = varName; - this.lower = lower; - this.lowerBound = lowerBound; - this.upper = upper; - this.upperBound = upperBound; - this.block = block; - } - - @Override - public Value execute(ExecutionContext ctx, Policy policy) throws PMException { - if (block.isEmpty()) { - return new Value(); - } - - int lowerValue = lower.execute(ctx, policy).getNumberValue(); - if (lowerBound) { - lowerValue++; - } - - int upperValue = upper.execute(ctx, policy).getNumberValue(); - if (upperBound) { - upperValue--; - } - - for (int i = lowerValue; i <= upperValue; i++) { - ExecutionContext localExecutionCtx; - try { - localExecutionCtx = ctx.copy(); - } catch (PMLScopeException e) { - throw new RuntimeException(e); - } - - localExecutionCtx.scope().putValue(varName, new Value(i)); - - Value value = PMLExecutor.executeStatementBlock(localExecutionCtx, policy, block); - - if (value.isBreak()) { - break; - } else if (value.isReturn()) { - return value; - } - - ctx.scope().overwriteValues(localExecutionCtx.scope()); - } - - return new Value(); - } - - @Override - public String toString() { - return String.format("for %s in range [%s, %s] {%s}", - varName, lower, upper, PMLFormatter.statementsToString(block) - ); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/statement/ForeachStatement.java b/src/main/java/gov/nist/csd/pm/policy/pml/statement/ForeachStatement.java deleted file mode 100644 index 6d0932fcf..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/statement/ForeachStatement.java +++ /dev/null @@ -1,119 +0,0 @@ -package gov.nist.csd.pm.policy.pml.statement; - -import gov.nist.csd.pm.policy.Policy; -import gov.nist.csd.pm.policy.pml.model.context.ExecutionContext; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.pml.model.scope.PMLScopeException; - -import java.util.List; -import java.util.Objects; - -import static gov.nist.csd.pm.policy.pml.PMLExecutor.executeStatementBlock; -import static gov.nist.csd.pm.policy.pml.PMLFormatter.statementsToString; - -public class ForeachStatement extends PMLStatement { - - private final String varName; - private final String valueVarName; - private final Expression iter; - private final List statements; - - public ForeachStatement(String varName, String valueVarName, Expression iter, List statements) { - this.varName = varName; - this.valueVarName = valueVarName; - this.iter = iter; - this.statements = statements; - } - - @Override - public Value execute(ExecutionContext ctx, Policy policy) throws PMException { - if (statements.isEmpty()) { - return new Value(); - } - - Value iterValue = iter.execute(ctx, policy); - if (iterValue.isArray()) { - return executeArrayIterator(iterValue, ctx, policy); - } else if (iterValue.isMap()) { - return executeMapIterator(iterValue,ctx,policy); - } - - return new Value(); - } - - private Value executeArrayIterator(Value iterValue,ExecutionContext ctx, Policy policy ) throws PMException{ - for (Value v : iterValue.getArrayValue()) { - ExecutionContext localExecutionCtx; - try { - localExecutionCtx = ctx.copy(); - } catch (PMLScopeException e) { - throw new RuntimeException(e); - } - - localExecutionCtx.scope().putValue(varName, v); - - Value value = executeStatementBlock(localExecutionCtx, policy, statements); - - if (value.isBreak()) { - break; - } else if (value.isReturn()) { - return value; - } - - ctx.scope().overwriteValues(localExecutionCtx.scope()); - } - return new Value(); - } - - private Value executeMapIterator(Value iterValue, ExecutionContext ctx, Policy policy ) throws PMException{ - for (Value key : iterValue.getMapValue().keySet()) { - ExecutionContext localExecutionCtx; - try { - localExecutionCtx = ctx.copy(); - } catch (PMLScopeException e) { - throw new RuntimeException(e); - } - - Value mapValue = iterValue.getMapValue().get(key); - - localExecutionCtx.scope().putValue(varName, key); - if (valueVarName != null) { - localExecutionCtx.scope().putValue(valueVarName, mapValue); - } - - Value value = executeStatementBlock(localExecutionCtx, policy, statements); - - if (value.isBreak()) { - break; - } else if (value.isReturn()) { - return value; - } - - ctx.scope().overwriteValues(localExecutionCtx.scope()); - } - return new Value(); - } - @Override - public String toString() { - return String.format("foreach %s in %s {%s}", - (valueVarName != null ? String.format("%s, %s", varName, valueVarName) : varName), - iter, - statementsToString(statements) - ); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - ForeachStatement that = (ForeachStatement) o; - return Objects.equals(varName, that.varName) && Objects.equals(valueVarName, that.valueVarName) && Objects.equals(iter, that.iter) && Objects.equals(statements, that.statements); - } - - @Override - public int hashCode() { - return Objects.hash(varName, valueVarName, iter, statements); - } - -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/statement/FunctionDefinitionStatement.java b/src/main/java/gov/nist/csd/pm/policy/pml/statement/FunctionDefinitionStatement.java deleted file mode 100644 index 5d30aba87..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/statement/FunctionDefinitionStatement.java +++ /dev/null @@ -1,175 +0,0 @@ -package gov.nist.csd.pm.policy.pml.statement; - -import gov.nist.csd.pm.policy.Policy; -import gov.nist.csd.pm.policy.pml.model.context.ExecutionContext; -import gov.nist.csd.pm.policy.pml.model.exception.PMLExecutionException; -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.pml.model.function.FormalArgument; -import gov.nist.csd.pm.policy.pml.model.function.FunctionExecutor; -import gov.nist.csd.pm.policy.pml.model.scope.FunctionAlreadyDefinedInScopeException; -import gov.nist.csd.pm.policy.pml.PMLFormatter; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Objects; - -public class FunctionDefinitionStatement extends PMLStatement { - - public static String name(String name) { - return name; - } - - public static Type returns(Type type) { - return type; - } - - public static List args(FormalArgument ... formalArguments) { - return Arrays.stream(formalArguments).toList(); - } - - private final String functionName; - private final Type returnType; - private final List args; - private List statements; - private FunctionExecutor functionExecutor; - private boolean isFuncExec; - - public FunctionDefinitionStatement(FunctionDefinitionStatement functionDefinitionStatement) { - this.functionName = functionDefinitionStatement.functionName; - this.returnType = functionDefinitionStatement.returnType; - this.args = functionDefinitionStatement.args; - this.statements = functionDefinitionStatement.statements; - this.functionExecutor = functionDefinitionStatement.functionExecutor; - this.isFuncExec = functionDefinitionStatement.isFuncExec; - } - public FunctionDefinitionStatement(String functionName, Type returnType, List args, List stmts) { - this.functionName = functionName; - this.returnType = returnType; - this.args = args; - this.statements = stmts; - } - - public FunctionDefinitionStatement(String functionName, Type returnType, - List args, FunctionExecutor executor) { - this.functionName = functionName; - this.returnType = returnType; - this.args = args; - this.functionExecutor = executor; - this.isFuncExec = true; - } - - public boolean isFunctionExecutor() { - return isFuncExec; - } - - public FunctionExecutor getFunctionExecutor() { - return functionExecutor; - } - - public String getFunctionName() { - return functionName; - } - - public Type getReturnType() { - return returnType; - } - - public List getArgs() { - return args; - } - - public List getBody() { - return statements; - } - - @Override - public Value execute(ExecutionContext ctx, Policy policy) throws PMLExecutionException { - try { - ctx.scope().addFunction(this); - } catch (FunctionAlreadyDefinedInScopeException e) { - throw new PMLExecutionException(e.getMessage()); - } - - return new Value(); - } - - @Override - public String toString() { - String argsStr = serializeFormalArgs(); - - return String.format( - "function %s(%s) %s {%s}", - functionName, - argsStr, - returnType.toString(), - PMLFormatter.statementsToString(statements) - ); - } - - private String serializeFormalArgs() { - String pml = ""; - for (FormalArgument formalArgument : args) { - if (!pml.isEmpty()) { - pml += ", "; - } - - pml += formalArgument.type().toString() + " " + formalArgument.name(); - } - return pml; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - FunctionDefinitionStatement that = (FunctionDefinitionStatement) o; - return isFuncExec == that.isFuncExec && Objects.equals(functionName, that.functionName) && Objects.equals(returnType, that.returnType) && Objects.equals(args, that.args) && Objects.equals(statements, that.statements) && Objects.equals(functionExecutor, that.functionExecutor); - } - - @Override - public int hashCode() { - return Objects.hash(functionName, returnType, args, statements, functionExecutor, isFuncExec); - } - - public static class Builder { - private final String name; - private Type returnType; - private List args; - private FunctionExecutor functionExecutor; - private List body; - - public Builder(String name) { - this.name = name; - } - - public Builder returns(Type type) { - this.returnType = type; - return this; - } - - public Builder args(FormalArgument ... args) { - this.args = new ArrayList<>(List.of(args)); - return this; - } - - public Builder executor(FunctionExecutor executor) { - this.functionExecutor = executor; - return this; - } - - public Builder body(PMLStatement ... body) { - this.body = new ArrayList<>(List.of(body)); - return this; - } - - public FunctionDefinitionStatement build() { - if (functionExecutor != null) { - return new FunctionDefinitionStatement(name, returnType, args, functionExecutor); - } - - return new FunctionDefinitionStatement(name, returnType, args, body); - } - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/statement/FunctionInvocationStatement.java b/src/main/java/gov/nist/csd/pm/policy/pml/statement/FunctionInvocationStatement.java deleted file mode 100644 index 3035c9214..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/statement/FunctionInvocationStatement.java +++ /dev/null @@ -1,105 +0,0 @@ -package gov.nist.csd.pm.policy.pml.statement; - -import gov.nist.csd.pm.policy.Policy; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.pml.model.function.FunctionExecutor; -import gov.nist.csd.pm.policy.pml.model.context.ExecutionContext; -import gov.nist.csd.pm.policy.pml.model.function.FormalArgument; -import gov.nist.csd.pm.policy.pml.model.scope.PMLScopeException; -import gov.nist.csd.pm.policy.exceptions.PMException; - -import java.util.List; -import java.util.Objects; - -public class FunctionInvocationStatement extends PMLStatement { - - private final String functionName; - private final List actualArgs; - - public FunctionInvocationStatement(String functionName, List actualArgs) { - this.functionName = functionName; - this.actualArgs = actualArgs; - } - - public String getFunctionName() { - return functionName; - } - - public List getActualArgs() { - return actualArgs; - } - - @Override - public Value execute(ExecutionContext ctx, Policy policy) throws PMException { - try { - FunctionDefinitionStatement functionDef = ctx.scope().getFunction(functionName); - ExecutionContext localCtx = ctx.copy(); - - List formalArgs = functionDef.getArgs(); - - for (int i = 0; i < actualArgs.size(); i++) { - Expression argExpr = actualArgs.get(i); - Value argValue = argExpr.execute(localCtx, policy); - FormalArgument formalArg = formalArgs.get(i); - - if (!argValue.getType().equals(formalArg.type())) { - throw new PMException("actual arg value has type " + argValue.getType() + " expected " + formalArg.type()); - } - - localCtx.scope().putValue(formalArg.name(), argValue); - } - - Value value = new Value(); - if (functionDef.isFunctionExecutor()) { - FunctionExecutor functionExecutor = functionDef.getFunctionExecutor(); - value = functionExecutor.exec(localCtx, policy); - } else { - List statements = functionDef.getBody(); - for (PMLStatement stmt : statements) { - value = stmt.execute(localCtx, policy); - if (value.isReturn()) { - break; - } - } - } - - ctx.scope().overwriteValues(localCtx.scope()); - - return value; - } catch (PMLScopeException e) { - throw new PMException(e.getMessage()); - } - } - - @Override - public String toString() { - return String.format("%s(%s)", functionName, argsToString()); - } - - private String argsToString() { - StringBuilder s = new StringBuilder(); - for (Expression arg : actualArgs) { - if (s.length() > 0) { - s.append(", "); - } - s.append(arg); - } - - return s.toString(); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - FunctionInvocationStatement that = (FunctionInvocationStatement) o; - return Objects.equals(functionName, that.functionName) - && Objects.equals(actualArgs, that.actualArgs); - } - - @Override - public int hashCode() { - return Objects.hash(functionName, actualArgs); - } - -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/statement/FunctionReturnStmt.java b/src/main/java/gov/nist/csd/pm/policy/pml/statement/FunctionReturnStmt.java deleted file mode 100644 index fd736ca8e..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/statement/FunctionReturnStmt.java +++ /dev/null @@ -1,60 +0,0 @@ -package gov.nist.csd.pm.policy.pml.statement; - -import gov.nist.csd.pm.policy.Policy; -import gov.nist.csd.pm.policy.pml.model.context.ExecutionContext; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.exceptions.PMException; - -import java.util.Objects; - -public class FunctionReturnStmt extends PMLStatement { - - private boolean isVoid; - private Expression expr; - - public FunctionReturnStmt() { - this.isVoid = true; - } - - public FunctionReturnStmt(Expression expr) { - this.expr = expr; - } - - public boolean isVoid() { - return isVoid; - } - - public Expression getExpr() { - return expr; - } - - @Override - public Value execute(ExecutionContext ctx, Policy policy) throws PMException { - Value value; - if (isVoid) { - value = new Value(); - } else { - value = expr.execute(ctx, policy); - } - - return Value.returnValue(value); - } - - @Override - public String toString() { - return String.format("return%s", (isVoid ? "" : String.format(" %s", expr))); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - FunctionReturnStmt that = (FunctionReturnStmt) o; - return isVoid == that.isVoid && Objects.equals(expr, that.expr); - } - - @Override - public int hashCode() { - return Objects.hash(isVoid, expr); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/statement/IfStatement.java b/src/main/java/gov/nist/csd/pm/policy/pml/statement/IfStatement.java deleted file mode 100644 index 58185aeaa..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/statement/IfStatement.java +++ /dev/null @@ -1,116 +0,0 @@ -package gov.nist.csd.pm.policy.pml.statement; - -import gov.nist.csd.pm.policy.Policy; -import gov.nist.csd.pm.policy.pml.model.context.ExecutionContext; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.pml.PMLExecutor; -import gov.nist.csd.pm.policy.pml.PMLFormatter; -import gov.nist.csd.pm.policy.pml.model.scope.PMLScopeException; - -import java.io.Serializable; -import java.util.List; -import java.util.Objects; - -public class IfStatement extends PMLStatement { - - private final ConditionalBlock ifBlock; - private final List ifElseBlocks; - private final List elseBlockStatements; - - public IfStatement(ConditionalBlock ifBlock, List ifElseBlocks, List elseBlock) { - this.ifBlock = ifBlock; - this.ifElseBlocks = ifElseBlocks; - this.elseBlockStatements = elseBlock; - } - - public ConditionalBlock getIfBlock() { - return ifBlock; - } - - public List getIfElseBlocks() { - return ifElseBlocks; - } - - public List getElseBlockStatements() { - return elseBlockStatements; - } - - @Override - public Value execute(ExecutionContext ctx, Policy policy) throws PMException { - boolean not = ifBlock.not; - boolean condition = ifBlock.condition.execute(ctx, policy).getBooleanValue(); - if ((condition && !not) || (!condition && not)) { - return executeBlock(ctx, policy, ifBlock.block); - } - - // check else ifs - for (ConditionalBlock conditionalBlock : ifElseBlocks) { - condition = conditionalBlock.condition.execute(ctx, policy).getBooleanValue(); - if (condition) { - return executeBlock(ctx, policy, conditionalBlock.block); - } - } - - return executeBlock(ctx, policy, elseBlockStatements); - } - - @Override - public String toString() { - return String.format( - "%s%s%s", - ifBlockToString(), - elseIfBlockToString(), - elseBlockToString() - ); - } - - private String elseBlockToString() { - if (elseBlockStatements.isEmpty()) { - return ""; - } - return String.format("else {%s}", PMLFormatter.statementsToString(elseBlockStatements)); - } - - private String elseIfBlockToString() { - StringBuilder s = new StringBuilder(); - for (ConditionalBlock b : ifElseBlocks) { - s.append(String.format(" else if %s {%s} ", b.condition, PMLFormatter.statementsToString(b.block))); - } - - return s.toString(); - } - - private String ifBlockToString() { - return String.format("if %s {%s}", ifBlock.condition, PMLFormatter.statementsToString(ifBlock.block)); - } - - private Value executeBlock(ExecutionContext ctx, Policy policy, List block) throws PMException { - ExecutionContext copy = null; - try { - copy = ctx.copy(); - } catch (PMLScopeException e) { - throw new PMException(e.getMessage()); - } - Value value = PMLExecutor.executeStatementBlock(copy, policy, block); - - ctx.scope().overwriteValues(copy.scope()); - - return value; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - IfStatement ifStmt = (IfStatement) o; - return Objects.equals(ifBlock, ifStmt.ifBlock) && Objects.equals(ifElseBlocks, ifStmt.ifElseBlocks) && Objects.equals(elseBlockStatements, ifStmt.elseBlockStatements); - } - - @Override - public int hashCode() { - return Objects.hash(ifBlock, ifElseBlocks, elseBlockStatements); - } - - public record ConditionalBlock(boolean not, Expression condition, List block) implements Serializable { } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/statement/PMLStatement.java b/src/main/java/gov/nist/csd/pm/policy/pml/statement/PMLStatement.java deleted file mode 100644 index 4184fbc63..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/statement/PMLStatement.java +++ /dev/null @@ -1,18 +0,0 @@ -package gov.nist.csd.pm.policy.pml.statement; - -import gov.nist.csd.pm.policy.Policy; -import gov.nist.csd.pm.policy.pml.model.context.ExecutionContext; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.exceptions.PMException; - -import java.io.Serializable; - -public abstract class PMLStatement implements Serializable { - - public PMLStatement() {} - - public abstract Value execute(ExecutionContext ctx, Policy policy) throws PMException; - - @Override - public abstract String toString(); -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/statement/SetNodePropertiesStatement.java b/src/main/java/gov/nist/csd/pm/policy/pml/statement/SetNodePropertiesStatement.java deleted file mode 100644 index b20965eac..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/statement/SetNodePropertiesStatement.java +++ /dev/null @@ -1,62 +0,0 @@ -package gov.nist.csd.pm.policy.pml.statement; - -import gov.nist.csd.pm.policy.Policy; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.pml.model.context.ExecutionContext; -import gov.nist.csd.pm.policy.exceptions.PMException; - -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; - -public class SetNodePropertiesStatement extends PMLStatement { - - private final Expression nameExpr; - private final Expression propertiesExpr; - - public SetNodePropertiesStatement(Expression nameExpr, Expression propertiesExpr) { - this.nameExpr = nameExpr; - this.propertiesExpr = propertiesExpr; - } - - public Expression getNameExpr() { - return nameExpr; - } - - public Expression getPropertiesExpr() { - return propertiesExpr; - } - - @Override - public Value execute(ExecutionContext ctx, Policy policy) throws PMException { - String name = nameExpr.execute(ctx, policy).getStringValue(); - Map map = propertiesExpr.execute(ctx, policy).getMapValue(); - Map properties = new HashMap<>(); - for (Value key : map.keySet()) { - properties.put(key.getStringValue(), map.get(key).getStringValue()); - } - - policy.graph().setNodeProperties(name, properties); - - return new Value(); - } - - @Override - public String toString() { - return String.format("set properties of %s to %s", nameExpr, propertiesExpr); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - SetNodePropertiesStatement that = (SetNodePropertiesStatement) o; - return Objects.equals(nameExpr, that.nameExpr) - && Objects.equals(propertiesExpr, that.propertiesExpr); - } - - @Override - public int hashCode() { - return Objects.hash(nameExpr, propertiesExpr); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/statement/SetResourceAccessRightsStatement.java b/src/main/java/gov/nist/csd/pm/policy/pml/statement/SetResourceAccessRightsStatement.java deleted file mode 100644 index f25b75e14..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/statement/SetResourceAccessRightsStatement.java +++ /dev/null @@ -1,43 +0,0 @@ -package gov.nist.csd.pm.policy.pml.statement; - -import gov.nist.csd.pm.policy.Policy; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.AccessRightSet; -import gov.nist.csd.pm.policy.pml.model.context.ExecutionContext; -import gov.nist.csd.pm.policy.pml.model.expression.Value; - -public class SetResourceAccessRightsStatement extends PMLStatement{ - - private final Expression arExpr; - - public SetResourceAccessRightsStatement(Expression arExprList) { - this.arExpr = arExprList; - } - - @Override - public Value execute(ExecutionContext ctx, Policy policy) throws PMException { - Value arValue = arExpr.execute(ctx, policy); - AccessRightSet accessRightSet = new AccessRightSet(); - for (Value v : arValue.getArrayValue()) { - accessRightSet.add(v.getStringValue()); - } - - policy.graph().setResourceAccessRights(accessRightSet); - ctx.scope().setResourceAccessRights(accessRightSet); - return new Value(); - } - - @Override - public String toString() { - StringBuilder ars = new StringBuilder(); - for (Expression ar : arExpr.getLiteral().getArrayLiteral().getArray()) { - if (!ars.isEmpty()) { - ars.append(", "); - } - - ars.append(String.format("%s", ar)); - } - - return String.format("set resource access rights [%s]", ars); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/pml/statement/VarStatement.java b/src/main/java/gov/nist/csd/pm/policy/pml/statement/VarStatement.java deleted file mode 100644 index 737111406..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/pml/statement/VarStatement.java +++ /dev/null @@ -1,66 +0,0 @@ -package gov.nist.csd.pm.policy.pml.statement; - -import gov.nist.csd.pm.policy.Policy; -import gov.nist.csd.pm.policy.pml.model.context.ExecutionContext; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.exceptions.PMException; - -import java.util.Objects; - -public class VarStatement extends PMLStatement { - - private final String varName; - private final Expression expression; - - private final boolean isConst; - - public VarStatement(String varName, Expression expression, boolean isConst) { - this.varName = varName; - this.expression = expression; - this.isConst = isConst; - } - - public String getVarName() { - return varName; - } - - public Expression getExpression() { - return expression; - } - - public boolean isConst() { - return isConst; - } - - @Override - public Value execute(ExecutionContext ctx, Policy policy) throws PMException { - ctx.scope().putValue(varName, expression.execute(ctx, policy)); - - return new Value(); - } - - @Override - public String toString() { - String s = ""; - if (isConst) { - s = "const "; - } else { - s = "let "; - } - - return String.format("%s%s = %s", s, varName, expression); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - VarStatement letStmt = (VarStatement) o; - return Objects.equals(varName, letStmt.varName) && Objects.equals(expression, letStmt.expression); - } - - @Override - public int hashCode() { - return Objects.hash(varName, expression); - } -} diff --git a/src/main/java/gov/nist/csd/pm/policy/review/AccessReview.java b/src/main/java/gov/nist/csd/pm/policy/review/AccessReview.java deleted file mode 100644 index 65f8b6078..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/review/AccessReview.java +++ /dev/null @@ -1,27 +0,0 @@ -package gov.nist.csd.pm.policy.review; - -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.AccessRightSet; -import gov.nist.csd.pm.policy.model.access.UserContext; -import gov.nist.csd.pm.policy.model.audit.Explain; - -import java.util.List; -import java.util.Map; -import java.util.Set; - -public interface AccessReview { - - AccessRightSet getAccessRights(UserContext userCtx, String target) throws PMException; - AccessRightSet getDeniedAccessRights(UserContext userCtx, String target) throws PMException; - Map getPolicyClassAccessRights(UserContext userContext, String target) throws PMException; - Map buildCapabilityList(UserContext userCtx) throws PMException; - Map buildACL(String target) throws PMException; - Map getBorderAttributes(String user) throws PMException; - // does not include the root in results - Map getSubgraphAccessRights(UserContext userCtx, String root) throws PMException; - Explain explain(UserContext userCtx, String target) throws PMException; - Set buildPOS(UserContext userCtx) throws PMException; - List getAccessibleChildren(UserContext userCtx, String root) throws PMException; - List getAccessibleParents(UserContext userCtx, String root) throws PMException; - -} diff --git a/src/main/java/gov/nist/csd/pm/policy/review/GraphReview.java b/src/main/java/gov/nist/csd/pm/policy/review/GraphReview.java deleted file mode 100644 index 754de2188..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/review/GraphReview.java +++ /dev/null @@ -1,13 +0,0 @@ -package gov.nist.csd.pm.policy.review; - -import gov.nist.csd.pm.policy.exceptions.PMException; - -import java.util.List; - -public interface GraphReview { - - List getAttributeContainers(String node) throws PMException; - List getPolicyClassContainers(String node) throws PMException; - boolean isContained(String subject, String container) throws PMException; - -} diff --git a/src/main/java/gov/nist/csd/pm/policy/review/ObligationsReview.java b/src/main/java/gov/nist/csd/pm/policy/review/ObligationsReview.java deleted file mode 100644 index f7643bc06..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/review/ObligationsReview.java +++ /dev/null @@ -1,19 +0,0 @@ -package gov.nist.csd.pm.policy.review; - -import gov.nist.csd.pm.epp.EventContext; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.UserContext; -import gov.nist.csd.pm.policy.model.obligation.Obligation; -import gov.nist.csd.pm.policy.model.obligation.Response; - -import java.util.List; - -public interface ObligationsReview { - - List getObligationsWithAuthor(UserContext userCtx) throws PMException; - List getObligationsWithAttributeInEvent(String attribute) throws PMException; - List getObligationsWithAttributeInResponse(String attribute) throws PMException; - List getObligationsWithEvent(String event) throws PMException; - List getMatchingEventResponses(EventContext eventCtx) throws PMException; - -} diff --git a/src/main/java/gov/nist/csd/pm/policy/review/PolicyReview.java b/src/main/java/gov/nist/csd/pm/policy/review/PolicyReview.java deleted file mode 100644 index 39c51da29..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/review/PolicyReview.java +++ /dev/null @@ -1,5 +0,0 @@ -package gov.nist.csd.pm.policy.review; - -public interface PolicyReview extends AccessReview, GraphReview, ProhibitionsReview, ObligationsReview { - -} diff --git a/src/main/java/gov/nist/csd/pm/policy/review/ProhibitionsReview.java b/src/main/java/gov/nist/csd/pm/policy/review/ProhibitionsReview.java deleted file mode 100644 index 4716ae7cb..000000000 --- a/src/main/java/gov/nist/csd/pm/policy/review/ProhibitionsReview.java +++ /dev/null @@ -1,14 +0,0 @@ -package gov.nist.csd.pm.policy.review; - -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.prohibition.Prohibition; - -import java.util.List; - -public interface ProhibitionsReview { - - // TODO add function for getting prohibitions with given container - List getInheritedProhibitionsFor(String subject) throws PMException; - List getProhibitionsWithContainer(String container) throws PMException; - -} diff --git a/src/test/java/gov/nist/csd/pm/SamplePolicy.java b/src/test/java/gov/nist/csd/pm/SamplePolicy.java deleted file mode 100644 index b10bee6a7..000000000 --- a/src/test/java/gov/nist/csd/pm/SamplePolicy.java +++ /dev/null @@ -1,20 +0,0 @@ -package gov.nist.csd.pm; - -import gov.nist.csd.pm.policy.Policy; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.UserContext; -import gov.nist.csd.pm.policy.pml.PMLSerializer; -import org.testcontainers.shaded.org.apache.commons.io.IOUtils; - -import java.io.IOException; -import java.nio.charset.StandardCharsets; - -import static gov.nist.csd.pm.pap.SuperPolicy.SUPER_USER; - -public class SamplePolicy { - - public static void loadSamplePolicyFromPML(Policy policy) throws IOException, PMException { - String s = IOUtils.resourceToString("sample/sample.pml", StandardCharsets.UTF_8, SamplePolicy.class.getClassLoader()); - policy.deserialize().fromPML(new UserContext(SUPER_USER), s); - } -} diff --git a/src/test/java/gov/nist/csd/pm/common/obligation/EventPatternTest.java b/src/test/java/gov/nist/csd/pm/common/obligation/EventPatternTest.java new file mode 100644 index 000000000..cf89150a7 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/common/obligation/EventPatternTest.java @@ -0,0 +1,230 @@ +package gov.nist.csd.pm.common.obligation; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.obligation.EventContext; +import gov.nist.csd.pm.pap.obligation.EventPattern; +import gov.nist.csd.pm.pap.obligation.UnexpectedOperandTypeException; +import gov.nist.csd.pm.pap.op.graph.AssignOp; +import gov.nist.csd.pm.pap.pml.pattern.OperationPattern; +import gov.nist.csd.pm.pap.pml.pattern.operand.AnyOperandPattern; +import gov.nist.csd.pm.pap.pml.pattern.operand.NodeOperandPattern; +import gov.nist.csd.pm.pap.pml.pattern.subject.LogicalSubjectPatternExpression; +import gov.nist.csd.pm.pap.pml.pattern.subject.ProcessSubjectPattern; +import gov.nist.csd.pm.pap.pml.pattern.subject.SubjectPattern; +import gov.nist.csd.pm.pap.pml.pattern.subject.UsernamePattern; +import org.junit.jupiter.api.Test; + +import java.util.List; +import java.util.Map; + +import static gov.nist.csd.pm.pap.op.graph.GraphOp.ASCENDANT_OPERAND; + +import static gov.nist.csd.pm.pap.op.graph.GraphOp.DESCENDANTS_OPERAND; +import static org.junit.jupiter.api.Assertions.*; + +class EventPatternTest { + + @Test + void testOperationMatches() throws PMException { + EventPattern eventPattern = new EventPattern( + new SubjectPattern(), + new OperationPattern(), + Map.of() + ); + + EventContext eventContext = new EventContext( + "u1", + null, + new AssignOp(), + Map.of(ASCENDANT_OPERAND, "a", DESCENDANTS_OPERAND, List.of("b")) + ); + + MemoryPAP pap = new MemoryPAP(); + + assertTrue(eventPattern.matches(eventContext, pap)); + } + + @Test + void testOperationDoesNotMatch() throws PMException { + EventPattern eventPattern = new EventPattern( + new SubjectPattern(), + new OperationPattern("op1"), + Map.of() + ); + + EventContext eventContext = new EventContext( + "u1", + null, + new AssignOp(), + Map.of(ASCENDANT_OPERAND, "a", DESCENDANTS_OPERAND, List.of("b")) + ); + + MemoryPAP pap = new MemoryPAP(); + + assertFalse(eventPattern.matches(eventContext, pap)); + } + + @Test + void testUserDoesNotMatch() throws PMException { + EventPattern eventPattern = new EventPattern( + new SubjectPattern(new UsernamePattern("u2")), + new OperationPattern(), + Map.of() + ); + + EventContext eventContext = new EventContext( + "u1", + "", + new AssignOp(), + Map.of(ASCENDANT_OPERAND, "a", DESCENDANTS_OPERAND, List.of("b")) + ); + + MemoryPAP pap = new MemoryPAP(); + + assertFalse(eventPattern.matches(eventContext, pap)); + } + + @Test + void testUserAndProcessMatch() throws PMException { + EventPattern eventPattern = new EventPattern( + new SubjectPattern(new LogicalSubjectPatternExpression( + new UsernamePattern("u1"), + new ProcessSubjectPattern("p1"), + false + )), + new OperationPattern(), + Map.of() + ); + + EventContext eventContext = new EventContext( + "u1", + "p1", + new AssignOp(), + Map.of(ASCENDANT_OPERAND, "a", DESCENDANTS_OPERAND, List.of("b")) + ); + + MemoryPAP pap = new MemoryPAP(); + + assertTrue(eventPattern.matches(eventContext, pap)); + } + + @Test + void testUserMatchesProcessDoesNotMatch() throws PMException { + EventPattern eventPattern = new EventPattern( + new SubjectPattern(new LogicalSubjectPatternExpression( + new UsernamePattern("u1"), + new ProcessSubjectPattern("p1"), + false + )), + new OperationPattern(), + Map.of() + ); + + EventContext eventContext = new EventContext( + "u1", + "p2", + new AssignOp(), + Map.of(ASCENDANT_OPERAND, "a", DESCENDANTS_OPERAND, List.of("b")) + ); + + MemoryPAP pap = new MemoryPAP(); + + assertTrue(eventPattern.matches(eventContext, pap)); + } + + @Test + void testUserAndProcessDoNotMatch() throws PMException { + EventPattern eventPattern = new EventPattern( + new SubjectPattern(new LogicalSubjectPatternExpression( + new UsernamePattern("u2"), + new ProcessSubjectPattern("p1"), + false + )), + new OperationPattern(), + Map.of() + ); + + EventContext eventContext = new EventContext( + "u1", + "p2", + new AssignOp(), + Map.of(ASCENDANT_OPERAND, "a", DESCENDANTS_OPERAND, List.of("b")) + ); + + MemoryPAP pap = new MemoryPAP(); + + assertFalse(eventPattern.matches(eventContext, pap)); + } + + @Test + void testOperandsMatch() throws PMException { + EventPattern eventPattern = new EventPattern( + new SubjectPattern(new UsernamePattern("u1")), + new OperationPattern("assign"), + Map.of( + "ascendant", List.of(new NodeOperandPattern("a")), + "descendant", List.of(new AnyOperandPattern()) + ) + ); + + EventContext eventContext = new EventContext( + "u1", + "", + new AssignOp(), + Map.of(ASCENDANT_OPERAND, "a", DESCENDANTS_OPERAND, List.of("b")) + ); + + MemoryPAP pap = new MemoryPAP(); + + assertTrue(eventPattern.matches(eventContext, pap)); + } + + @Test + void testOperandsDoNotMatch() throws PMException { + EventPattern eventPattern = new EventPattern( + new SubjectPattern(new UsernamePattern("u1")), + new OperationPattern("assign"), + Map.of( + "ascendant", List.of(new NodeOperandPattern("b")), + "descendant", List.of(new AnyOperandPattern()) + ) + ); + + EventContext eventContext = new EventContext( + "u1", + "", + new AssignOp(), + Map.of(ASCENDANT_OPERAND, "a", DESCENDANTS_OPERAND, List.of("b")) + ); + + MemoryPAP pap = new MemoryPAP(); + + assertFalse(eventPattern.matches(eventContext, pap)); + } + + @Test + void testInvalidNodeOperandType() throws PMException { + EventPattern eventPattern = new EventPattern( + new SubjectPattern(new UsernamePattern("u1")), + new OperationPattern("assign"), + Map.of( + "ascendant", List.of(new AnyOperandPattern()), + "descendants", List.of(new AnyOperandPattern()) + ) + ); + + EventContext eventContext = new EventContext( + "u1", + "", + new AssignOp(), + Map.of(ASCENDANT_OPERAND, "a", DESCENDANTS_OPERAND, Map.of("b", "")) + ); + + MemoryPAP pap = new MemoryPAP(); + + assertThrows(UnexpectedOperandTypeException.class, + () -> eventPattern.matches(eventContext, pap)); + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/common/obligation/ObligationTest.java b/src/test/java/gov/nist/csd/pm/common/obligation/ObligationTest.java new file mode 100644 index 000000000..d55a079e3 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/common/obligation/ObligationTest.java @@ -0,0 +1,83 @@ +package gov.nist.csd.pm.common.obligation; + +import gov.nist.csd.pm.epp.EPP; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.obligation.EventContext; +import gov.nist.csd.pm.pap.op.graph.AssignOp; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.executable.operation.PMLOperation; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.pml.value.StringValue; +import gov.nist.csd.pm.pap.pml.value.Value; +import gov.nist.csd.pm.pap.pml.value.VoidValue; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pdp.PDP; +import gov.nist.csd.pm.pap.exception.PMException; +import org.junit.jupiter.api.Test; + +import java.util.List; +import java.util.Map; + +import static gov.nist.csd.pm.pap.op.graph.GraphOp.*; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class ObligationTest { + + @Test + void testResponseWithExistingFunction() throws PMException { + String pml = """ + create pc "pc1" + create oa "oa1" in ["pc1"] + create ua "ua1" in ["pc1"] + create u "u1" in ["ua1"] + + associate "ua1" and ADMIN_POLICY_OBJECT with ["create_policy_class"] + + create obligation "obl1" { + create rule "rule1" + when user "u1" + performs "assign" + on { + ascendant: any, + descendant: "oa1" + } + do(ctx) { + createX() + } + } + """; + + MemoryPAP pap = new MemoryPAP(); + + pap.setPMLConstants(Map.of("x", new StringValue("hello world"))); + pap.setPMLOperations(new PMLOperation("createX", Type.voidType()) { + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) { + + } + + @Override + public Value execute(PAP pap, Map operands) throws PMException { + ExecutionContext ctx = getCtx(); + pap.executePML(ctx.author(), "create pc x"); + + return new VoidValue(); + } + }); + + pap.executePML(new UserContext("u1"), pml); + + PDP pdp = new PDP(pap); + EPP epp = new EPP(pdp, pap); + epp.getEventProcessor().processEvent( + new EventContext( + "u1", + null, + new AssignOp(), + Map.of(ASCENDANT_OPERAND, "o1", DESCENDANTS_OPERAND, List.of("oa1")) + ) + ); + assertTrue(pap.query().graph().nodeExists("hello world")); + } +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/common/tx/TxHandlerRunnerTest.java b/src/test/java/gov/nist/csd/pm/common/tx/TxHandlerRunnerTest.java new file mode 100644 index 000000000..0bfccdbd3 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/common/tx/TxHandlerRunnerTest.java @@ -0,0 +1,34 @@ +package gov.nist.csd.pm.common.tx; + +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.exception.NodeNameExistsException; +import gov.nist.csd.pm.pap.exception.PMException; +import org.junit.jupiter.api.Test; + +import static gov.nist.csd.pm.pap.tx.TxRunner.runTx; +import static org.junit.jupiter.api.Assertions.*; + +class TxHandlerRunnerTest { + + @Test + void testRunTx() throws PMException { + MemoryPAP pap = new MemoryPAP(); + + runTx(pap, () -> { + pap.modify().graph().createPolicyClass("pc1"); + }); + + assertTrue(pap.query().graph().nodeExists("pc1")); + + assertThrows(NodeNameExistsException.class, () -> runTx(pap, () -> { + pap.modify().graph().deleteNode("pc1"); + pap.modify().graph().createPolicyClass("pc2"); + // expect error and rollback + pap.modify().graph().createPolicyClass("pc2"); + })); + + assertTrue(pap.query().graph().nodeExists("pc1")); + assertFalse(pap.query().graph().nodeExists("pc2")); + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/epp/EPPTest.java b/src/test/java/gov/nist/csd/pm/epp/EPPTest.java index f537c5ca3..e8dd15450 100644 --- a/src/test/java/gov/nist/csd/pm/epp/EPPTest.java +++ b/src/test/java/gov/nist/csd/pm/epp/EPPTest.java @@ -1,139 +1,451 @@ package gov.nist.csd.pm.epp; +import gov.nist.csd.pm.pap.graph.node.NodeType; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.obligation.EventContext; +import gov.nist.csd.pm.pap.obligation.EventPattern; +import gov.nist.csd.pm.pap.obligation.Response; +import gov.nist.csd.pm.pap.obligation.Rule; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; import gov.nist.csd.pm.pap.PAP; -import gov.nist.csd.pm.pap.memory.MemoryPolicyStore; -import gov.nist.csd.pm.pdp.memory.MemoryPDP; -import gov.nist.csd.pm.policy.pml.model.expression.ArrayLiteral; -import gov.nist.csd.pm.policy.pml.model.expression.Literal; -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.model.expression.VariableReference; -import gov.nist.csd.pm.policy.pml.statement.CreatePolicyStatement; -import gov.nist.csd.pm.policy.pml.statement.CreateUserOrObjectStatement; -import gov.nist.csd.pm.policy.pml.statement.Expression; -import gov.nist.csd.pm.policy.events.CreateObjectAttributeEvent; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.exceptions.PMRuntimeException; -import gov.nist.csd.pm.policy.model.access.AccessRightSet; -import gov.nist.csd.pm.policy.model.access.UserContext; -import gov.nist.csd.pm.pdp.PDP; -import gov.nist.csd.pm.policy.model.graph.nodes.NodeType; -import gov.nist.csd.pm.policy.model.obligation.Response; -import gov.nist.csd.pm.policy.model.obligation.Rule; -import gov.nist.csd.pm.policy.model.obligation.event.EventPattern; -import gov.nist.csd.pm.policy.model.obligation.event.EventSubject; +import gov.nist.csd.pm.pap.admin.AdminPolicyNode; +import gov.nist.csd.pm.pap.op.Operation; +import gov.nist.csd.pm.pap.pml.executable.operation.PMLOperation; +import gov.nist.csd.pm.pap.pml.pattern.OperationPattern; +import gov.nist.csd.pm.pap.pml.pattern.subject.SubjectPattern; +import gov.nist.csd.pm.pap.pml.statement.operation.CreateNonPCStatement; +import gov.nist.csd.pm.pap.pml.statement.operation.CreatePolicyStatement; +import gov.nist.csd.pm.pap.pml.value.Value; +import gov.nist.csd.pm.pap.serialization.pml.PMLDeserializer; +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.pml.expression.literal.ArrayLiteral; +import gov.nist.csd.pm.pap.pml.expression.literal.StringLiteral; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.pml.value.VoidValue; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pdp.*; +import gov.nist.csd.pm.pdp.exception.UnauthorizedException; import org.junit.jupiter.api.Test; import java.util.Arrays; -import java.util.HashMap; +import java.util.List; +import java.util.Map; -import static gov.nist.csd.pm.pap.SuperPolicy.*; -import static gov.nist.csd.pm.policy.model.access.AdminAccessRights.*; -import static gov.nist.csd.pm.policy.model.obligation.event.Performs.events; +import static gov.nist.csd.pm.pap.op.AdminAccessRights.*; +import static gov.nist.csd.pm.pap.op.Operation.NAME_OPERAND; +import static gov.nist.csd.pm.pap.op.graph.GraphOp.DESCENDANTS_OPERAND; +import static gov.nist.csd.pm.pdp.Decision.GRANT; import static org.junit.jupiter.api.Assertions.*; class EPPTest { + @Test + void testCustomOperationEvent() throws PMException { + MemoryPAP pap = new MemoryPAP(); + pap.executePML(new UserContext("u1"), """ + create pc "pc1" + create ua "ua1" in ["pc1"] + create u "u1" in ["ua1"] + + create oa "oa1" in ["pc1"] + create oa "oa2" in ["pc1"] + + operation op1(nodeop string a, nodeop []string b) { + + } + + create obligation "obl1" { + create rule "op1" + when any user + performs "op1" + on { + a: "oa1", + b: "oa1" + } + do(ctx) { + create pc ctx.operands.a + "pc1" + + foreach x in ctx.operands.b { + create pc x + "pc2" + } + } + + create rule "op2" + when any user + performs "op2" + on { + a: "oa2", + b: "oa2" + } + do(ctx) { + create pc ctx.operands.a + "pc1" + + foreach x in ctx.operands.b { + create pc x + "pc2" + } + } + } + """); + + pap.modify().operations().createAdminOperation(new Operation<>("op2", List.of("a", "b"), List.of("a", "b")) { + @Override + public Object execute(PAP pap, Map operands) throws PMException { + return null; + } + + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { + + } + }); + + PDP pdp = new PDP(pap); + EPP epp = new EPP(pdp, pap); + + AdminAdjudicationResponse response = pdp.adjudicateAdminOperations( + new UserContext("u1"), + List.of(new OperationRequest("op1", Map.of("a", "oa1", "b", List.of("oa1", "oa2")))) + ); + assertEquals(Decision.DENY, response.getDecision()); + + pap.modify().graph().associate("ua1", AdminPolicyNode.ADMIN_POLICY_OBJECT.nodeName(), new AccessRightSet("*a")); + + response = pdp.adjudicateAdminOperations( + new UserContext("u1"), + List.of(new OperationRequest("op1", Map.of("a", "oa1", "b", List.of("oa1", "oa2")))) + ); + assertEquals(GRANT, response.getDecision()); + + response = pdp.adjudicateAdminOperations( + new UserContext("u1"), + List.of(new OperationRequest("op2", Map.of("a", "oa2", "b", "oa2"))) + ); + assertEquals(GRANT, response.getDecision()); + + assertTrue(pap.query().graph().nodeExists("oa1pc1")); + assertTrue(pap.query().graph().nodeExists("oa1pc2")); + assertTrue(pap.query().graph().nodeExists("oa2pc2")); + assertTrue(pap.query().graph().nodeExists("oa2pc1")); + assertTrue(pap.query().graph().nodeExists("oa2pc2")); + } + + @Test + void testResourceOperationEvent() throws PMException { + MemoryPAP pap = new MemoryPAP(); + pap.executePML(new UserContext("u1"), """ + create pc "pc1" + create ua "ua1" in ["pc1"] + create u "u1" in ["ua1"] + + set resource operations ["read"] + + create oa "oa1" in ["pc1"] + create oa "oa2" in ["pc1"] + + associate "ua1" and "oa1" with ["read"] + associate "ua1" and ADMIN_POLICY_OBJECT with ["*a"] + + create obligation "obl1" { + create rule "op1" + when any user + performs "read" + on { + target: "oa1" + } + do(ctx) { + create pc ctx.operands.target + "pc1" + } + } + """); + PDP pdp = new PDP(pap); + EPP epp = new EPP(pdp, pap); + ResourceAdjudicationResponse response = pdp.adjudicateResourceOperation(new UserContext("u1"), "oa1", "read"); + assertEquals(GRANT, response.getDecision()); + + assertTrue(pap.query().graph().nodeExists("oa1pc1")); + } + @Test void test() throws PMException { - PAP pap = new PAP(new MemoryPolicyStore()); - PDP pdp = new MemoryPDP(pap, false); + MemoryPAP pap = new MemoryPAP(); + PDP pdp = new PDP(pap); EPP epp = new EPP(pdp, pap); String pml = """ - create pc 'pc1'; - create oa 'oa1' in ['pc1']; - create obligation 'test' { - create rule 'rule1' + create pc "pc1" + create oa "oa1" in ["pc1"] + create ua "ua1" in ["pc1"] + create u "u1" in ["ua1"] + associate "ua1" and "oa1" with ["*"] + associate "ua1" and ADMIN_POLICY_OBJECT with ["*"] + create obligation "test" { + create rule "rule1" when any user - performs ['create_object_attribute'] - on 'oa1' + performs "create_object_attribute" + on { + descendants: "oa1" + } do(evtCtx) { - create policy class 'pc2'; + create policy class "pc2" } } """; - pap.deserialize().fromPML(new UserContext(SUPER_USER), pml); + pap.deserialize(new UserContext("u1"), pml, new PMLDeserializer()); - assertTrue(pap.graph().nodeExists("pc1")); - assertTrue(pap.graph().nodeExists("oa1")); + assertTrue(pap.query().graph().nodeExists("pc1")); + assertTrue(pap.query().graph().nodeExists("oa1")); - pdp.runTx(new UserContext(SUPER_USER), (txPDP) -> txPDP.graph().createObjectAttribute("oa2", "oa1")); + pdp.runTx(new UserContext("u1"), (txPDP) -> txPDP.modify().graph().createObjectAttribute("oa2", List.of("oa1"))); - assertTrue(pap.graph().nodeExists("pc2")); + assertTrue(pap.query().graph().nodeExists("pc2")); } @Test void testAccessingEventContextInResponse() throws PMException { - PAP pap = new PAP(new MemoryPolicyStore()); - PDP pdp = new MemoryPDP(pap, false); + MemoryPAP pap = new MemoryPAP(); + PDP pdp = new PDP(pap); EPP epp = new EPP(pdp, pap); - String pml = """ - create pc 'pc1' - create oa 'oa1' in ['pc1'] - create obligation 'test' { - create rule 'rule1' + String pml = """ + create pc "pc1" + create ua "ua1" in ["pc1"] + create u "u1" in ["ua1"] + create oa "oa1" in ["pc1"] + + associate "ua1" and "oa1" with ["*a"] + associate "ua1" and ADMIN_POLICY_OBJECT with ["*a"] + + create obligation "test" { + create rule "rule1" when any user - performs ['create_object_attribute'] - on 'oa1' - do(evtCtx) { - create policy class evtCtx['eventName'] - let target = evtCtx['target'] - - create policy class concat([evtCtx['event']['name'], '_test']) - set properties of evtCtx['event']['name'] to {'key': target} - - let userCtx = evtCtx['userCtx'] - create policy class concat([userCtx['user'], '_test']) + performs "create_object_attribute" + on { + descendants: "oa1" + } + do(ctx) { + name := ctx.opName + create policy class name + + name = ctx.operands.name + create policy class name + "_test" + set properties of name + "_test" to {"key": name} + + userCtx := ctx["user"] + create policy class ctx["user"] + "_test" } } """; - pap.deserialize().fromPML(new UserContext(SUPER_USER), pml); + pap.deserialize(new UserContext("u1"), pml, new PMLDeserializer()); + + pdp.runTx(new UserContext("u1"), (txPDP) -> txPDP.modify().graph().createObjectAttribute("oa2", + List.of("oa1"))); - pdp.runTx(new UserContext(SUPER_USER), (txPDP) -> txPDP.graph().createObjectAttribute("oa2", "oa1")); - assertTrue(pap.graph().getPolicyClasses().containsAll(Arrays.asList( - SUPER_PC, "pc1", "create_object_attribute", "oa2_test", "super_test" + assertTrue(pap.query().graph().getPolicyClasses().containsAll(Arrays.asList( + "pc1", "create_object_attribute", "oa2_test", "u1_test" ))); } @Test void testErrorInEPPResponse() throws PMException { - PAP pap = new PAP(new MemoryPolicyStore()); - PDP pdp = new MemoryPDP(pap, false); + MemoryPAP pap = new MemoryPAP(); + PDP pdp = new PDP(pap); EPP epp = new EPP(pdp, pap); - pdp.runTx(new UserContext(SUPER_USER), (policy) -> { - policy.graph().createPolicyClass("pc1"); - policy.graph().createUserAttribute("ua1", "pc1"); - policy.graph().createObjectAttribute("oa1", "pc1"); - policy.graph().createUser("u1", "ua1"); - policy.graph().createObject("o1", "oa1"); - policy.graph().associate("ua1", SUPER_OA, new AccessRightSet(CREATE_OBLIGATION)); - policy.graph().associate("ua1", "oa1", new AccessRightSet(CREATE_OBJECT)); + pap.runTx((txPAP) -> { + txPAP.modify().graph().createPolicyClass("pc1"); + txPAP.modify().graph().createUserAttribute("ua1", List.of("pc1")); + txPAP.modify().graph().createUserAttribute("ua2", List.of("pc1")); + txPAP.modify().graph().associate("ua2", "ua1", new AccessRightSet("*")); + txPAP.modify().graph().associate("ua2", AdminPolicyNode.ADMIN_POLICY_OBJECT.nodeName(), new AccessRightSet("*")); + txPAP.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + txPAP.modify().graph().createUser("u1", List.of("ua1", "ua2")); + txPAP.modify().graph().createObject("o1", List.of("oa1")); + txPAP.modify().graph().associate("ua1", AdminPolicyNode.ADMIN_POLICY_OBJECT.nodeName(), + new AccessRightSet(CREATE_OBLIGATION)); + txPAP.modify().graph().associate("ua1", "oa1", new AccessRightSet(CREATE_OBJECT)); + txPAP.modify().graph().associate("ua1", AdminPolicyNode.ADMIN_POLICY_OBJECT.nodeName(), new AccessRightSet("*")); }); pdp.runTx(new UserContext("u1"), (policy) -> { - policy.obligations().create(new UserContext("u1"), "test", - new Rule("rule1", - new EventPattern(EventSubject.anyUser(), events(CREATE_OBJECT_ATTRIBUTE)), - new Response(new UserContext("u1"), - new CreateUserOrObjectStatement( - new Expression(new VariableReference("o2", Type.string())), + policy.modify().obligations().createObligation("u1", "test", + List.of(new Rule( + "rule1", + new EventPattern(new SubjectPattern(), new OperationPattern(CREATE_OBJECT_ATTRIBUTE)), + new Response("evtCtx", List.of( + new CreateNonPCStatement( + new StringLiteral("o2"), NodeType.O, - new Expression(new Literal(new ArrayLiteral(new Expression[]{new Expression(new VariableReference("oa1", Type.string()))}, Type.string()))) + new ArrayLiteral(new Expression[]{new StringLiteral("oa1")}, Type.string()) ), - new CreatePolicyStatement(new Expression(new VariableReference("pc2", Type.string())))) - ) + + // expect error for node already exists + new CreatePolicyStatement(new StringLiteral("pc1")) + )) + )) ); }); - EventContext eventCtx = new EventContext(new UserContext(SUPER_USER), new CreateObjectAttributeEvent("oa2", new HashMap<>(), "pc1")); - assertThrows(PMRuntimeException.class, () -> { - epp.handlePolicyEvent(eventCtx); + EventContext eventCtx = new EventContext( + "u1", + CREATE_OBJECT_ATTRIBUTE, + Map.of( + NAME_OPERAND, "oa2", + DESCENDANTS_OPERAND, List.of("pc1") + ) + ); + + assertThrows(PMException.class, () -> { + epp.getEventProcessor().processEvent(eventCtx); + }); + + assertFalse(pap.query().graph().nodeExists("o2")); + assertFalse(pap.query().graph().nodeExists("pc2")); + } + + @Test + void testCustomFunctionInResponse() throws PMException { + MemoryPAP pap = new MemoryPAP(); + + PMLOperation pmlOperation = new PMLOperation("testFunc", Type.voidType()) { + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { + + } + + @Override + public Value execute(PAP pap, Map operands) throws PMException { + pap.modify().graph().createPolicyClass("test"); + + return new VoidValue(); + } + }; + + pap.setPMLOperations(pmlOperation); + + PDP pdp = new PDP(pap); + EPP epp = new EPP(pdp, pap); + + String pml = """ + create pc "pc1" + create ua "ua1" in ["pc1"] + create u "u1" in ["ua1"] + create oa "oa1" in ["pc1"] + + associate "ua1" and "oa1" with ["*a"] + associate "ua1" and ADMIN_POLICY_OBJECT with ["create_policy_class"] + + create obligation "test" { + create rule "rule1" + when any user + performs "create_object_attribute" + on { + descendants: "oa1" + } + do(evtCtx) { + testFunc() + } + } + """; + pap.deserialize(new UserContext("u1"), pml, new PMLDeserializer()); + + pdp.runTx(new UserContext("u1"), (txPDP) -> { + txPDP.modify().graph().createObjectAttribute("oa2", List.of("oa1")); }); - assertFalse(pap.graph().nodeExists("o2")); - assertFalse(pap.graph().nodeExists("pc2")); + assertTrue(pap.query().graph().nodeExists("test")); + } + + @Test + void testReturnInResponse() throws PMException { + MemoryPAP pap = new MemoryPAP(); + + PDP pdp = new PDP(pap); + EPP epp = new EPP(pdp, pap); + + String pml = """ + create pc "pc1" + create ua "ua1" in ["pc1"] + create u "u1" in ["ua1"] + create oa "oa1" in ["pc1"] + + associate "ua1" and "oa1" with ["*a"] + associate "ua1" and ADMIN_POLICY_OBJECT with ["create_policy_class"] + + create obligation "test" { + create rule "rule1" + when any user + performs "create_object_attribute" + on { + descendants: "oa1" + } + do(evtCtx) { + if true { + return + } + + create policy class "test" + } + } + """; + pap.deserialize(new UserContext("u1"), pml, new PMLDeserializer()); + + pdp.runTx(new UserContext("u1"), (txPDP) -> txPDP.modify().graph().createObjectAttribute("oa2", List.of("oa1"))); + assertFalse(pap.query().graph().nodeExists("test")); + } + + @Test + void testErrorInResponseOperation() throws PMException { + String pml = """ + create pc "pc1" + create ua "ua1" in ["pc1"] + create ua "ua2" in ["pc1"] + create u "u1" in ["ua1"] + create u "u2" in ["ua2"] + create oa "oa1" in ["pc1"] + associate "ua1" and "oa1" with ["*a"] + associate "ua1" and ADMIN_POLICY_OBJECT with ["*a"] + associate "ua2" and ADMIN_POLICY_OBJECT with ["*a"] + + operation op1() { + check "assign" on "oa1" + } { + create pc "test_pc" + } + + routine routine1() { + create o "o1" in ["oa1"] + } + + create obligation "obl1" { + create rule "rule1" + when any user + performs "create_policy_class" + do(ctx) { + op1() + routine1() + } + } + """; + // as u1 - ok + MemoryPAP pap = new MemoryPAP(); + PDP pdp = new PDP(pap); + EPP epp = new EPP(pdp, pap); + pap.executePML(new UserContext("u1"), pml); + pdp.runTx(new UserContext("u1"), (txPDP) -> txPDP.modify().graph().createPolicyClass("u1_pc")); + assertTrue(pap.query().graph().nodeExists("test_pc")); + assertTrue(pap.query().graph().nodeExists("o1")); + assertTrue(pap.query().graph().nodeExists("u1_pc")); + + // as u2 fail + pap = new MemoryPAP(); + PDP pdp2 = new PDP(pap); + epp = new EPP(pdp2, pap); + pap.executePML(new UserContext("u2"), pml); + assertThrows(UnauthorizedException.class, () -> pdp2.runTx(new UserContext("u2"), (txPDP) -> txPDP.modify().graph().createPolicyClass("u2_pc"))); + assertFalse(pap.query().graph().nodeExists("test_pc")); + assertFalse(pap.query().graph().nodeExists("o1")); + assertFalse(pap.query().graph().nodeExists("u1_pc")); } } \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/integration/IntegrationTest.java b/src/test/java/gov/nist/csd/pm/integration/IntegrationTest.java new file mode 100644 index 000000000..c72959396 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/integration/IntegrationTest.java @@ -0,0 +1,89 @@ +package gov.nist.csd.pm.integration; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.epp.EPP; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pdp.PDP; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertTrue; + +class IntegrationTest { + + @Test + void testCallOperationInObligationResponse() throws PMException { + String pml = """ + create PC "pc1" + create UA "ua1" in ["pc1"] + create U "u1" in ["ua1"] + create OA "oa1" in ["pc1"] + associate "ua1" and "oa1" with ["*"] + associate "ua1" and ADMIN_POLICY_OBJECT with ["*"] + + operation op1(string name) { + check "assign" on "oa1" + } { + create pc name + } + + create obligation "ob1" { + create rule "r1" + when any user + performs any operation + do(ctx) { + op1("test") + } + } + """; + MemoryPAP pap = new MemoryPAP(); + pap.executePML(new UserContext("u1"), pml); + + PDP pdp = new PDP(pap); + EPP epp = new EPP(pdp, pap); + pdp.runTx(new UserContext("u1"), tx -> { + tx.modify().graph().createPolicyClass("test2"); + }); + + assertTrue(pap.query().graph().nodeExists("test")); + assertTrue(pap.query().graph().nodeExists("test2")); + } + + @Test + void testCallRoutineInObligationResponse() throws PMException { + String pml = """ + create PC "pc1" + create UA "ua1" in ["pc1"] + create U "u1" in ["ua1"] + create OA "oa1" in ["pc1"] + associate "ua1" and "oa1" with ["*"] + associate "ua1" and ADMIN_POLICY_OBJECT with ["*"] + + routine op1(string name) { + if !nodeExists(name) { + create pc name + } + } + + create obligation "ob1" { + create rule "r1" + when any user + performs any operation + do(ctx) { + op1("test") + } + } + """; + MemoryPAP pap = new MemoryPAP(); + pap.executePML(new UserContext("u1"), pml); + + PDP pdp = new PDP(pap); + EPP epp = new EPP(pdp, pap); + pdp.runTx(new UserContext("u1"), tx -> { + tx.modify().graph().createPolicyClass("test2"); + }); + + assertTrue(pap.query().graph().nodeExists("test")); + assertTrue(pap.query().graph().nodeExists("test2")); + } +} diff --git a/src/test/java/gov/nist/csd/pm/memory/pap/MemoryAccessQuerierTest.java b/src/test/java/gov/nist/csd/pm/memory/pap/MemoryAccessQuerierTest.java new file mode 100644 index 000000000..698479ede --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/memory/pap/MemoryAccessQuerierTest.java @@ -0,0 +1,14 @@ +package gov.nist.csd.pm.memory.pap; + +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.query.AccessQuerierTest; + +class MemoryAccessQuerierTest extends AccessQuerierTest { + + @Override + public PAP initializePAP() throws PMException { + return new MemoryPAP(); + } +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/memory/pap/MemoryGraphModifierTest.java b/src/test/java/gov/nist/csd/pm/memory/pap/MemoryGraphModifierTest.java new file mode 100644 index 000000000..92af814f6 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/memory/pap/MemoryGraphModifierTest.java @@ -0,0 +1,14 @@ +package gov.nist.csd.pm.memory.pap; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.modification.GraphModifierTest; + +class MemoryGraphModifierTest extends GraphModifierTest { + + @Override + public PAP initializePAP() throws PMException { + return new MemoryPAP(); + } +} diff --git a/src/test/java/gov/nist/csd/pm/memory/pap/MemoryGraphQuerierTest.java b/src/test/java/gov/nist/csd/pm/memory/pap/MemoryGraphQuerierTest.java new file mode 100644 index 000000000..064e33559 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/memory/pap/MemoryGraphQuerierTest.java @@ -0,0 +1,14 @@ +package gov.nist.csd.pm.memory.pap; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.query.GraphQuerierTest; + +class MemoryGraphQuerierTest extends GraphQuerierTest { + + @Override + public PAP initializePAP() throws PMException { + return new MemoryPAP(); + } +} diff --git a/src/test/java/gov/nist/csd/pm/memory/pap/MemoryObligationsModifierTest.java b/src/test/java/gov/nist/csd/pm/memory/pap/MemoryObligationsModifierTest.java new file mode 100644 index 000000000..de8e07e1c --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/memory/pap/MemoryObligationsModifierTest.java @@ -0,0 +1,14 @@ +package gov.nist.csd.pm.memory.pap; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.modification.ObligationsModifierTest; + +class MemoryObligationsModifierTest extends ObligationsModifierTest { + + @Override + public PAP initializePAP() throws PMException { + return new MemoryPAP(); + } +} diff --git a/src/test/java/gov/nist/csd/pm/memory/pap/MemoryObligationsQuerierTest.java b/src/test/java/gov/nist/csd/pm/memory/pap/MemoryObligationsQuerierTest.java new file mode 100644 index 000000000..a84d132c9 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/memory/pap/MemoryObligationsQuerierTest.java @@ -0,0 +1,15 @@ +package gov.nist.csd.pm.memory.pap; + +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.query.ObligationsQuerierTest; +import gov.nist.csd.pm.pap.exception.PMException; + +class MemoryObligationsQuerierTest extends ObligationsQuerierTest { + + @Override + public PAP initializePAP() throws PMException { + return new MemoryPAP(); + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/memory/pap/MemoryOperationsModifierTest.java b/src/test/java/gov/nist/csd/pm/memory/pap/MemoryOperationsModifierTest.java new file mode 100644 index 000000000..353b924d7 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/memory/pap/MemoryOperationsModifierTest.java @@ -0,0 +1,13 @@ +package gov.nist.csd.pm.memory.pap; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.modification.OperationsModifierTest; + +public class MemoryOperationsModifierTest extends OperationsModifierTest { + @Override + public PAP initializePAP() throws PMException { + return new MemoryPAP(); + } +} diff --git a/src/test/java/gov/nist/csd/pm/memory/pap/MemoryOperationsQueryTest.java b/src/test/java/gov/nist/csd/pm/memory/pap/MemoryOperationsQueryTest.java new file mode 100644 index 000000000..20ec98047 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/memory/pap/MemoryOperationsQueryTest.java @@ -0,0 +1,13 @@ +package gov.nist.csd.pm.memory.pap; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.query.OperationsQuerierTest; + +public class MemoryOperationsQueryTest extends OperationsQuerierTest { + @Override + public PAP initializePAP() throws PMException { + return new MemoryPAP(); + } +} diff --git a/src/test/java/gov/nist/csd/pm/memory/pap/MemoryPAPTest.java b/src/test/java/gov/nist/csd/pm/memory/pap/MemoryPAPTest.java new file mode 100644 index 000000000..1c99a5995 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/memory/pap/MemoryPAPTest.java @@ -0,0 +1,13 @@ +package gov.nist.csd.pm.memory.pap; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.PAPTest; + +public class MemoryPAPTest extends PAPTest { + @Override + public PAP initializePAP() throws PMException { + return new MemoryPAP(); + } +} diff --git a/src/test/java/gov/nist/csd/pm/memory/pap/MemoryProhibitionsModifierTest.java b/src/test/java/gov/nist/csd/pm/memory/pap/MemoryProhibitionsModifierTest.java new file mode 100644 index 000000000..3e388bfd4 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/memory/pap/MemoryProhibitionsModifierTest.java @@ -0,0 +1,14 @@ +package gov.nist.csd.pm.memory.pap; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.modification.ProhibitionsModifierTest; + +class MemoryProhibitionsModifierTest extends ProhibitionsModifierTest { + + @Override + public PAP initializePAP() throws PMException { + return new MemoryPAP(); + } +} diff --git a/src/test/java/gov/nist/csd/pm/memory/pap/MemoryProhibitionsQuerierTest.java b/src/test/java/gov/nist/csd/pm/memory/pap/MemoryProhibitionsQuerierTest.java new file mode 100644 index 000000000..d3f1180db --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/memory/pap/MemoryProhibitionsQuerierTest.java @@ -0,0 +1,14 @@ +package gov.nist.csd.pm.memory.pap; + +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.query.ProhibitionsQuerierTest; +import gov.nist.csd.pm.pap.exception.PMException; + +class MemoryProhibitionsQuerierTest extends ProhibitionsQuerierTest { + + @Override + public PAP initializePAP() throws PMException { + return new MemoryPAP(); + } +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/memory/pap/MemoryRoutinesModifierTest.java b/src/test/java/gov/nist/csd/pm/memory/pap/MemoryRoutinesModifierTest.java new file mode 100644 index 000000000..f62d593ab --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/memory/pap/MemoryRoutinesModifierTest.java @@ -0,0 +1,13 @@ +package gov.nist.csd.pm.memory.pap; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.modification.RoutinesModifierTest; + +public class MemoryRoutinesModifierTest extends RoutinesModifierTest { + @Override + public PAP initializePAP() throws PMException { + return new MemoryPAP(); + } +} diff --git a/src/test/java/gov/nist/csd/pm/memory/pap/MemoryRoutinesQuerierTest.java b/src/test/java/gov/nist/csd/pm/memory/pap/MemoryRoutinesQuerierTest.java new file mode 100644 index 000000000..cc7b9cf07 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/memory/pap/MemoryRoutinesQuerierTest.java @@ -0,0 +1,13 @@ +package gov.nist.csd.pm.memory.pap; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.query.RoutinesQuerierTest; + +public class MemoryRoutinesQuerierTest extends RoutinesQuerierTest { + @Override + public PAP initializePAP() throws PMException { + return new MemoryPAP(); + } +} diff --git a/src/test/java/gov/nist/csd/pm/memory/pap/dag/BreadthFirstGraphWalkerTest.java b/src/test/java/gov/nist/csd/pm/memory/pap/dag/BreadthFirstGraphWalkerTest.java new file mode 100644 index 000000000..bbbac824e --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/memory/pap/dag/BreadthFirstGraphWalkerTest.java @@ -0,0 +1,103 @@ +package gov.nist.csd.pm.memory.pap.dag; + +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.dag.Direction; +import gov.nist.csd.pm.pap.graph.dag.BreadthFirstGraphWalker; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +class BreadthFirstGraphWalkerTest { + + static PAP pap; + + @BeforeAll + static void setup() throws PMException { + pap = new MemoryPAP(); + + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + + pap.modify().graph().createObjectAttribute("oa1-1", List.of("oa1")); + pap.modify().graph().createObjectAttribute("oa1-1-1", List.of("oa1-1")); + pap.modify().graph().createObjectAttribute("oa1-1-2", List.of("oa1-1")); + pap.modify().graph().createObjectAttribute("oa1-1-3", List.of("oa1-1")); + + pap.modify().graph().createObjectAttribute("oa1-2", List.of("oa1")); + pap.modify().graph().createObjectAttribute("oa1-2-1", List.of("oa1-2")); + pap.modify().graph().createObjectAttribute("oa1-2-2", List.of("oa1-2")); + pap.modify().graph().createObjectAttribute("oa1-2-3", List.of("oa1-2")); + } + + @Test + void testWalk() throws PMException { + List visited = new ArrayList<>(); + BreadthFirstGraphWalker bfs = new BreadthFirstGraphWalker(pap.query().graph()) + .withDirection(Direction.ASCENDANTS) + .withVisitor(node -> { + visited.add(node); + }); + bfs.walk("pc1"); + List expected = List.of( + "pc1", + "oa1", + "oa1-1", + "oa1-2", + "oa1-1-1", + "oa1-1-2", + "oa1-1-3", + "oa1-2-1", + "oa1-2-2", + "oa1-2-3" + ); + + assertTrue(expected.containsAll(visited)); + assertTrue(visited.containsAll(expected)); + } + + @Test + void testAllPathsShortCircuit() throws PMException { + List visited = new ArrayList<>(); + BreadthFirstGraphWalker bfs = new BreadthFirstGraphWalker(pap.query().graph()) + .withDirection(Direction.ASCENDANTS) + .withVisitor(node -> { + visited.add(node); + }) + .withAllPathShortCircuit(node -> node.equals("oa1-2")); + + bfs.walk("pc1"); + + assertTrue(visited.containsAll(List.of("pc1", "oa1", "oa1-2"))); + + visited.clear(); + bfs = new BreadthFirstGraphWalker(pap.query().graph()) + .withDirection(Direction.ASCENDANTS) + .withVisitor(visited::add) + .withAllPathShortCircuit(node -> node.equals("oa1-1")); + + bfs.walk("pc1"); + + assertTrue(visited.containsAll(List.of("pc1", "oa1", "oa1-1"))); + assertFalse(visited.containsAll(List.of("oa1-1-1", "oa1-1-2", "oa1-1-3", "oa1-2-1", "oa1-2-2", "oa1-2-3"))); + } + + @Test + void testSinglePathShortCircuit() throws PMException { + List visited = new ArrayList<>(); + BreadthFirstGraphWalker bfs = new BreadthFirstGraphWalker(pap.query().graph()) + .withDirection(Direction.ASCENDANTS) + .withVisitor(visited::add) + .withSinglePathShortCircuit(node -> node.equals("oa1-1")); + + bfs.walk("pc1"); + + assertTrue(visited.containsAll(List.of("pc1", "oa1", "oa1-1", "oa1-2", "oa1-2-1", "oa1-2-2", "oa1-2-3"))); + assertFalse(visited.containsAll(List.of("oa1-1-1", "oa1-1-2", "oa1-1-3"))); + } +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/memory/dag/DepthFirstGraphWalkerTest.java b/src/test/java/gov/nist/csd/pm/memory/pap/dag/DepthFirstGraphModificationWalkerTest.java similarity index 50% rename from src/test/java/gov/nist/csd/pm/pap/memory/dag/DepthFirstGraphWalkerTest.java rename to src/test/java/gov/nist/csd/pm/memory/pap/dag/DepthFirstGraphModificationWalkerTest.java index 424f1347d..58241c10b 100644 --- a/src/test/java/gov/nist/csd/pm/pap/memory/dag/DepthFirstGraphWalkerTest.java +++ b/src/test/java/gov/nist/csd/pm/memory/pap/dag/DepthFirstGraphModificationWalkerTest.java @@ -1,9 +1,10 @@ -package gov.nist.csd.pm.pap.memory.dag; +package gov.nist.csd.pm.memory.pap.dag; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; import gov.nist.csd.pm.pap.PAP; -import gov.nist.csd.pm.pap.memory.MemoryPolicyStore; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.graph.dag.walker.Direction; +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.dag.Direction; +import gov.nist.csd.pm.pap.graph.dag.DepthFirstGraphWalker; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; @@ -18,26 +19,26 @@ class DepthFirstGraphWalkerTest { @BeforeAll static void setup() throws PMException { - pap = new PAP(new MemoryPolicyStore()); - pap.graph().createPolicyClass("pc1"); - pap.graph().createObjectAttribute("oa1", "pc1"); - - pap.graph().createObjectAttribute("oa1-1", "oa1"); - pap.graph().createObjectAttribute("oa1-1-1", "oa1-1"); - pap.graph().createObjectAttribute("oa1-1-2", "oa1-1"); - pap.graph().createObjectAttribute("oa1-1-3", "oa1-1"); - - pap.graph().createObjectAttribute("oa1-2", "oa1"); - pap.graph().createObjectAttribute("oa1-2-1", "oa1-2"); - pap.graph().createObjectAttribute("oa1-2-2", "oa1-2"); - pap.graph().createObjectAttribute("oa1-2-3", "oa1-2"); + pap = new MemoryPAP(); + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + + pap.modify().graph().createObjectAttribute("oa1-1", List.of("oa1")); + pap.modify().graph().createObjectAttribute("oa1-1-1", List.of("oa1-1")); + pap.modify().graph().createObjectAttribute("oa1-1-2", List.of("oa1-1")); + pap.modify().graph().createObjectAttribute("oa1-1-3", List.of("oa1-1")); + + pap.modify().graph().createObjectAttribute("oa1-2", List.of("oa1")); + pap.modify().graph().createObjectAttribute("oa1-2-1", List.of("oa1-2")); + pap.modify().graph().createObjectAttribute("oa1-2-2", List.of("oa1-2")); + pap.modify().graph().createObjectAttribute("oa1-2-3", List.of("oa1-2")); } @Test void testWalk() throws PMException { List visited = new ArrayList<>(); - DepthFirstGraphWalker bfs = new DepthFirstGraphWalker(pap.graph()) - .withDirection(Direction.CHILDREN) + DepthFirstGraphWalker bfs = new DepthFirstGraphWalker(pap.query().graph()) + .withDirection(Direction.ASCENDANTS) .withVisitor((node) -> { visited.add(node); }); @@ -46,14 +47,15 @@ void testWalk() throws PMException { "oa1-1-1", "oa1-1-2", "oa1-1-3", "oa1-1", "oa1-2-1", "oa1-2-2", "oa1-2-3", "oa1-2", "oa1", "pc1" ); - assertEquals(expected, visited); + assertTrue(expected.containsAll(visited)); + assertTrue(visited.containsAll(expected)); } @Test void testAllPathsShortCircuit() throws PMException { List visited = new ArrayList<>(); - DepthFirstGraphWalker dfs = new DepthFirstGraphWalker(pap.graph()) - .withDirection(Direction.CHILDREN) + DepthFirstGraphWalker dfs = new DepthFirstGraphWalker(pap.query().graph()) + .withDirection(Direction.ASCENDANTS) .withVisitor(node -> { visited.add(node); }) @@ -61,15 +63,16 @@ void testAllPathsShortCircuit() throws PMException { dfs.walk("pc1"); - List expected = List.of("oa1-1-1", "oa1-1-2", "oa1-1-3", "oa1-1", "oa1-2-1", "oa1-2", "oa1", "pc1"); - assertEquals(expected, visited); + List expected = List.of("oa1-2-1", "oa1-2", "oa1", "pc1"); + assertTrue(expected.containsAll(visited)); + assertTrue(visited.containsAll(expected)); } @Test void testSinglePathShortCircuit() throws PMException { List visited = new ArrayList<>(); - DepthFirstGraphWalker dfs = new DepthFirstGraphWalker(pap.graph()) - .withDirection(Direction.CHILDREN) + DepthFirstGraphWalker dfs = new DepthFirstGraphWalker(pap.query().graph()) + .withDirection(Direction.ASCENDANTS) .withVisitor(node -> { visited.add(node); }) @@ -78,6 +81,7 @@ void testSinglePathShortCircuit() throws PMException { dfs.walk("pc1"); List expected = List.of("oa1-1", "oa1-2-1", "oa1-2-2", "oa1-2-3", "oa1-2", "oa1", "pc1"); - assertEquals(expected, visited); + assertTrue(expected.containsAll(visited)); + assertTrue(visited.containsAll(expected)); } } \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/AccessRightTest.java b/src/test/java/gov/nist/csd/pm/pap/AccessRightTest.java deleted file mode 100644 index 312f0adb8..000000000 --- a/src/test/java/gov/nist/csd/pm/pap/AccessRightTest.java +++ /dev/null @@ -1,70 +0,0 @@ -package gov.nist.csd.pm.pap; - -import gov.nist.csd.pm.pap.memory.MemoryPolicyStore; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.exceptions.UnknownAccessRightException; -import gov.nist.csd.pm.policy.model.access.AccessRightSet; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; - -import static gov.nist.csd.pm.pap.PAPGraph.checkAccessRightsValid; -import static gov.nist.csd.pm.policy.model.access.AdminAccessRights.*; -import static org.junit.jupiter.api.Assertions.*; - -class AccessRightTest { - - @Nested - class CheckAccessRightsValid { - - PAP pap; - public CheckAccessRightsValid() throws PMException { - pap = new PAP(new MemoryPolicyStore()); - pap.graph().setResourceAccessRights(new AccessRightSet("r", "w")); - } - - @Test - void testInvalidWithSpecialAAR() throws PMException { - assertThrows(UnknownAccessRightException.class, - () -> checkAccessRightsValid(pap.graph(), new AccessRightSet(ALL_ACCESS_RIGHTS, "e"))); - } - - @Test - void testValidWithSpecialAAR() { - assertDoesNotThrow(() -> checkAccessRightsValid(pap.graph(), new AccessRightSet(ALL_ACCESS_RIGHTS, "w"))); - } - - @Test - void testInvalidWithSpecialAAAR() throws PMException { - assertThrows(UnknownAccessRightException.class, - () -> checkAccessRightsValid(pap.graph(), new AccessRightSet(ALL_ADMIN_ACCESS_RIGHTS, "e"))); - } - - @Test - void testValidWithSpecialAAAR() { - assertDoesNotThrow(() -> checkAccessRightsValid(pap.graph(), new AccessRightSet(ALL_ADMIN_ACCESS_RIGHTS, "w"))); - } - - @Test - void testInvalidWithSpecialARAR() throws PMException { - assertThrows(UnknownAccessRightException.class, - () -> checkAccessRightsValid(pap.graph(), new AccessRightSet(ALL_RESOURCE_ACCESS_RIGHTS, "e"))); - } - - @Test - void testValidWithSpecialARAR() { - assertDoesNotThrow(() -> checkAccessRightsValid(pap.graph(), new AccessRightSet(ALL_RESOURCE_ACCESS_RIGHTS, "w"))); - } - - @Test - void testInvalidWithAdminAccessRight() throws PMException { - assertThrows(UnknownAccessRightException.class, - () -> checkAccessRightsValid(pap.graph(), new AccessRightSet(CREATE_POLICY_CLASS, "e"))); - } - - @Test - void testValidWithAdminAccessRight() { - assertDoesNotThrow(() -> checkAccessRightsValid(pap.graph(), new AccessRightSet(CREATE_POLICY_CLASS, "w"))); - } - - } -} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/PAPTest.java b/src/test/java/gov/nist/csd/pm/pap/PAPTest.java index d625e8cf5..f96388a06 100644 --- a/src/test/java/gov/nist/csd/pm/pap/PAPTest.java +++ b/src/test/java/gov/nist/csd/pm/pap/PAPTest.java @@ -1,1906 +1,141 @@ package gov.nist.csd.pm.pap; -import gov.nist.csd.pm.SamplePolicy; -import gov.nist.csd.pm.pap.memory.MemoryPolicyStore; -import gov.nist.csd.pm.pap.mysql.MysqlPolicyStore; -import gov.nist.csd.pm.pap.mysql.MysqlTestEnv; -import gov.nist.csd.pm.policy.PolicyEquals; -import gov.nist.csd.pm.policy.pml.model.expression.*; -import gov.nist.csd.pm.policy.pml.model.function.FormalArgument; -import gov.nist.csd.pm.policy.exceptions.*; -import gov.nist.csd.pm.policy.model.obligation.event.Target; -import gov.nist.csd.pm.policy.model.prohibition.ProhibitionSubject; -import gov.nist.csd.pm.policy.model.access.AccessRightSet; -import gov.nist.csd.pm.policy.model.access.UserContext; -import gov.nist.csd.pm.policy.model.graph.nodes.Node; -import gov.nist.csd.pm.policy.model.graph.nodes.Properties; -import gov.nist.csd.pm.policy.model.graph.relationships.Association; -import gov.nist.csd.pm.policy.model.graph.relationships.InvalidAssignmentException; -import gov.nist.csd.pm.policy.model.graph.relationships.InvalidAssociationException; -import gov.nist.csd.pm.policy.model.obligation.Obligation; -import gov.nist.csd.pm.policy.model.obligation.Response; -import gov.nist.csd.pm.policy.model.obligation.Rule; -import gov.nist.csd.pm.policy.model.obligation.event.EventPattern; -import gov.nist.csd.pm.policy.model.obligation.event.Performs; -import gov.nist.csd.pm.policy.model.obligation.event.EventSubject; -import gov.nist.csd.pm.policy.model.prohibition.ContainerCondition; -import gov.nist.csd.pm.policy.model.prohibition.Prohibition; -import gov.nist.csd.pm.policy.pml.statement.CreateAttrStatement; -import gov.nist.csd.pm.policy.pml.statement.CreatePolicyStatement; -import gov.nist.csd.pm.policy.pml.statement.Expression; -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; -import org.junit.jupiter.api.*; +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.admin.AdminPolicyNode; +import gov.nist.csd.pm.pap.exception.NodeDoesNotExistException; +import gov.nist.csd.pm.pap.op.Operation; +import gov.nist.csd.pm.pap.pml.value.Value; +import gov.nist.csd.pm.pap.pml.value.VoidValue; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.graph.relationship.Association; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.util.SamplePolicy; +import org.junit.jupiter.api.Test; import java.io.IOException; -import java.sql.*; import java.util.*; -import static gov.nist.csd.pm.policy.model.access.AdminAccessRights.*; -import static gov.nist.csd.pm.policy.model.graph.nodes.NodeType.*; -import static gov.nist.csd.pm.policy.model.graph.nodes.Properties.NO_PROPERTIES; -import static gov.nist.csd.pm.policy.model.graph.nodes.Properties.toProperties; -import static gov.nist.csd.pm.pap.SuperPolicy.*; import static org.junit.jupiter.api.Assertions.*; -class PAPTest { - - private static MysqlTestEnv testEnv; - - public void runTest(TestRunner testRunner) throws PMException { - testRunner.run(new PAP(new MemoryPolicyStore())); - - try (Connection connection = testEnv.getConnection()) { - PAP mysqlPAP = new PAP(new MysqlPolicyStore(connection)); - testRunner.run(mysqlPAP); - } catch (SQLException e) { - throw new RuntimeException(e); - } - } - - public interface TestRunner { - void run(PAP pap) throws PMException; - } - - @BeforeAll - public static void start() throws IOException, PMException { - testEnv = new MysqlTestEnv(); - testEnv.start(); - } - - @AfterAll - public static void stop() { - testEnv.stop(); - } - - @AfterEach - void reset() throws SQLException { - testEnv.reset(); - } - - @Test - void testSetResourceAccessRights() throws PMException { - runTest(pap -> { - AccessRightSet arset = new AccessRightSet("read", "write"); - pap.graph().setResourceAccessRights(arset); - assertEquals(arset, pap.graph().getResourceAccessRights()); - - assertThrows(AdminAccessRightExistsException.class, () -> pap.graph().setResourceAccessRights(new AccessRightSet(CREATE_POLICY_CLASS))); - }); - } - - @Nested - class CreatePolicyClassTest { - @Test - void NameAlreadyExists() throws PMException { - runTest(pap -> { - pap.graph().createPolicyClass("pc1"); - assertDoesNotThrow(() -> pap.graph().createPolicyClass(SUPER_PC)); - assertThrows(NodeNameExistsException.class, () -> pap.graph().createPolicyClass("pc1")); - }); - } - - @Test - void Success() throws PMException { - runTest(pap -> { - pap.graph().createPolicyClass("pc1"); - String rep = SuperPolicy.pcRepObjectAttribute("pc1"); - assertTrue(pap.graph().nodeExists("pc1")); - assertTrue(pap.graph().nodeExists(rep)); - }); - } - } - - @Nested - class CreateObjectAttribute { - - @Test - void NameAlreadyExists() throws PMException { - runTest(pap -> { - pap.graph().createPolicyClass("pc1"); - pap.graph().createObjectAttribute("oa1", "pc1"); - assertThrows(NodeNameExistsException.class, - () -> pap.graph().createObjectAttribute("oa1", "pc1")); - }); - } - - @Test - void ParentDoesNotExist() throws PMException { - runTest(pap -> { - assertThrows(NodeDoesNotExistException.class, - () -> pap.graph().createObjectAttribute("oa1", "pc1")); - - pap.graph().createPolicyClass("pc1"); - - assertThrows(NodeDoesNotExistException.class, - () -> pap.graph().createObjectAttribute("oa1", "pc1", "pc2")); - }); - } - - @Test - void Success() throws PMException { - runTest(pap -> { - pap.graph().createObjectAttribute("oa1", SUPER_OA); - pap.graph().createObjectAttribute("oa2", toProperties("k", "v"), SUPER_OA, "oa1"); - - assertTrue(pap.graph().nodeExists("oa1")); - assertTrue(pap.graph().nodeExists("oa2")); - assertEquals("v", pap.graph().getNode("oa2").getProperties().get("k")); - - assertTrue(pap.graph().getChildren(SUPER_OA).containsAll(List.of("oa1", "oa2"))); - assertTrue(pap.graph().getParents("oa1").contains(SUPER_OA)); - assertTrue(pap.graph().getChildren("oa1").contains("oa2")); - assertTrue(pap.graph().getParents("oa2").containsAll(List.of(SUPER_OA, "oa1"))); - }); - } - } - - @Nested - class CreateUserAttributeTest { - - @Test - void NameAlreadyExists() throws PMException { - runTest(pap -> { - assertDoesNotThrow(() -> pap.graph().createUserAttribute("ua1", SUPER_UA)); - assertThrows(NodeNameExistsException.class, () -> pap.graph().createUserAttribute("ua1", "pc1")); - }); - } - - @Test - void ParentDoesNotExist() throws PMException { - runTest(pap -> { - assertThrows(NodeDoesNotExistException.class, () -> pap.graph().createUserAttribute("ua1", "pc1")); - assertThrows(NodeDoesNotExistException.class, () -> pap.graph().createUserAttribute("ua1", SUPER_UA, "pc1")); - }); - } - - @Test - void Success() throws PMException { - runTest(pap -> { - pap.graph().createUserAttribute("ua1", SUPER_UA); - pap.graph().createUserAttribute("ua2", toProperties("k", "v"), SUPER_UA, "ua1"); - - assertTrue(pap.graph().nodeExists("ua1")); - assertTrue(pap.graph().nodeExists("ua2")); - assertEquals("v", pap.graph().getNode("ua2").getProperties().get("k")); - - assertTrue(pap.graph().getChildren(SUPER_UA).containsAll(List.of("ua1", "ua2"))); - assertTrue(pap.graph().getParents("ua1").contains(SUPER_UA)); - assertTrue(pap.graph().getChildren("ua1").contains("ua2")); - assertTrue(pap.graph().getParents("ua2").containsAll(List.of(SUPER_UA, "ua1"))); - }); - } - } - - @Nested - class CreateObjectTest { - - @Test - void NameAlreadyExists() throws PMException { - runTest(pap -> { - pap.graph().createPolicyClass("pc1"); - pap.graph().createObjectAttribute("oa1", "pc1"); - pap.graph().createObject("o1", "oa1"); - - assertThrows(NodeNameExistsException.class, - () -> pap.graph().createObject("o1", "oa1")); - }); - } - - @Test - void ParentDoesNotExist() throws PMException { - runTest(pap -> { - assertThrows(NodeDoesNotExistException.class, - () -> pap.graph().createObject("o1", "oa1")); - - pap.graph().createPolicyClass("pc1"); - pap.graph().createObjectAttribute("oa1", "pc1"); - - assertThrows(NodeDoesNotExistException.class, - () -> pap.graph().createObject("o1", "oa1", "oa2")); - }); - } - - @Test - void Success() throws PMException { - runTest(pap -> { - pap.graph().createObject("o1", toProperties("k", "v"), SUPER_OA); - - assertTrue(pap.graph().nodeExists("o1")); - assertEquals("v", pap.graph().getNode("o1").getProperties().get("k")); - - assertTrue(pap.graph().getChildren(SUPER_OA).contains("o1")); - assertEquals( List.of(SUPER_OA), pap.graph().getParents("o1")); - assertTrue(pap.graph().getChildren(SUPER_OA).contains("o1")); - }); - } - } - - @Nested - class CreateUserTest { - - @Test - void NameAlreadyExists() throws PMException { - runTest(pap -> { - pap.graph().createUserAttribute("ua1", SUPER_UA); - pap.graph().createUser("u1", SUPER_UA); - assertDoesNotThrow(() -> pap.graph().createUser(SUPER_USER, "ua1")); - assertThrows(NodeNameExistsException.class, () -> pap.graph().createUser("u1", "ua1")); - }); - } - - @Test - void ParentDoesNotExist() throws PMException { - runTest(pap -> { - assertThrows(NodeDoesNotExistException.class, () -> pap.graph().createUser("u1", "ua1")); - assertThrows(NodeDoesNotExistException.class, () -> pap.graph().createUser("u1", SUPER_UA, "ua1")); - }); - } - - @Test - void Success() throws PMException { - runTest(pap -> { - pap.graph().createUser("u1", toProperties("k", "v"), SUPER_UA, SUPER_UA1); - - assertTrue(pap.graph().nodeExists("u1")); - assertEquals("v", pap.graph().getNode("u1").getProperties().get("k")); - - assertTrue(pap.graph().getChildren(SUPER_UA).contains("u1")); - assertTrue(pap.graph().getParents("u1").containsAll(List.of(SUPER_UA, SUPER_UA1))); - assertTrue(pap.graph().getChildren(SUPER_UA).contains("u1")); - assertTrue(pap.graph().getChildren(SUPER_UA1).contains("u1")); - }); - } - } - - @Nested - class SetNodePropertiesTest { - - @Test - void NodeDoesNotExist() throws PMException { - runTest(pap -> assertThrows(NodeDoesNotExistException.class, - () -> pap.graph().setNodeProperties("oa1", NO_PROPERTIES))); - } - - @Test - void EmptyProperties() throws PMException { - runTest(pap -> { - pap.graph().createPolicyClass("pc1"); - pap.graph().setNodeProperties("pc1", NO_PROPERTIES); - - assertTrue(pap.graph().getNode("pc1").getProperties().isEmpty()); - }); - } - - @Test - void Success() throws PMException { - runTest(pap -> { - pap.graph().createPolicyClass("pc1"); - pap.graph().setNodeProperties("pc1", toProperties("k", "v")); - - assertEquals("v", pap.graph().getNode("pc1").getProperties().get("k")); - }); - } - } - - @Nested - class DeleteNodeTest { - - @Test - void NullNameOrNodeDoesNotExist() throws PMException { - runTest(pap -> { - assertDoesNotThrow(() -> pap.graph().deleteNode(null)); - assertDoesNotThrow(() -> pap.graph().deleteNode("pc1")); - }); - } - - @Test - void DeletePolicyClassHasChildren() throws PMException { - runTest(pap -> { - pap.graph().createPolicyClass("pc1"); - pap.graph().createObjectAttribute("oa1", "pc1"); - - assertThrows(NodeHasChildrenException.class, - () -> pap.graph().deleteNode("pc1")); - }); - } - - @Test - void DeletePolicyClass() throws PMException { - runTest(pap -> { - pap.graph().createPolicyClass("pc1"); - pap.graph().deleteNode("pc1"); - assertFalse(pap.graph().nodeExists("pc1")); - assertFalse(pap.graph().nodeExists(SuperPolicy.pcRepObjectAttribute("pc1"))); - }); - } - - @Test - void DeleteNodeHasChildren() throws PMException { - runTest(pap -> { - pap.graph().createPolicyClass("pc1"); - pap.graph().createObjectAttribute("oa1", "pc1"); - pap.graph().createObjectAttribute("oa2", "oa1"); - - assertThrows(NodeHasChildrenException.class, - () -> pap.graph().deleteNode("oa1")); - }); - } - - @Test - void DeleteNodeWithProhibitionsAndObligations() throws PMException { - runTest(pap -> { - pap.graph().createPolicyClass("pc1"); - pap.graph().createUserAttribute("ua1", "pc1"); - pap.graph().createUserAttribute("oa1", "pc1"); - pap.prohibitions().create("label", ProhibitionSubject.userAttribute("ua1"), new AccessRightSet(), true, new ContainerCondition("oa1", true)); - pap.obligations().create(new UserContext(SUPER_USER), "oblLabel", - new Rule( - "rule1", - new EventPattern( - EventSubject.anyUserWithAttribute("ua1"), - new Performs("event1") - ), - new Response(new UserContext("")) - ), - new Rule( - "rule1", - new EventPattern( - EventSubject.users("ua1"), - new Performs("event1") - ), - new Response(new UserContext("")) - ) - ); - - assertThrows(NodeReferencedInProhibitionException.class, - () -> pap.graph().deleteNode("ua1")); - assertThrows(NodeReferencedInProhibitionException.class, - () -> pap.graph().deleteNode("oa1")); - }); - } - - @Test - void Success() throws PMException { - runTest(pap -> { - pap.graph().createPolicyClass("pc1"); - pap.graph().createObjectAttribute("oa1", "pc1"); - - pap.graph().deleteNode("oa1"); - - assertFalse(pap.graph().nodeExists("oa1")); - }); - } - } - - @Nested - class GetNodeTest { - - @Test - void DoesNotExist() throws PMException { - runTest(pap -> assertThrows(NodeDoesNotExistException.class, () -> pap.graph().getNode("pc1"))); - } - - @Test - void GetPolicyClass() throws PMException { - runTest(pap -> { - pap.graph().createPolicyClass("pc1", Properties.toProperties("k", "v")); - - Node pc1 = pap.graph().getNode("pc1"); - - assertEquals("pc1", pc1.getName()); - assertEquals(PC, pc1.getType()); - assertEquals("v", pc1.getProperties().get("k")); - }); - } - - @Test - void Success() throws PMException { - runTest(pap -> { - pap.graph().createPolicyClass("pc1"); - pap.graph().createObjectAttribute("oa1", Properties.toProperties("k", "v"), "pc1"); - - Node oa1 = pap.graph().getNode("oa1"); - - assertEquals("oa1", oa1.getName()); - assertEquals(OA, oa1.getType()); - assertEquals("v", oa1.getProperties().get("k")); - }); - } - } +public abstract class PAPTest extends PAPTestInitializer { @Test - void testSearch() throws PMException { - runTest(pap -> { - pap.graph().createPolicyClass("pc1"); - pap.graph().createObjectAttribute("oa1", toProperties("namespace", "test"), "pc1"); - pap.graph().createObjectAttribute("oa2", toProperties("key1", "value1"), "pc1"); - pap.graph().createObjectAttribute("oa3", toProperties("key1", "value1", "key2", "value2"), "pc1"); - - List nodes = pap.graph().search(OA, NO_PROPERTIES); - assertEquals(6, nodes.size()); - - nodes = pap.graph().search(ANY, toProperties("key1", "value1")); - assertEquals(2, nodes.size()); - - nodes = pap.graph().search(ANY, toProperties("namespace", "test")); - assertEquals(1, nodes.size()); - - nodes = pap.graph().search(OA, toProperties("namespace", "test")); - assertEquals(1, nodes.size()); - nodes = pap.graph().search(OA, toProperties("key1", "value1")); - assertEquals(2, nodes.size()); - nodes = pap.graph().search(OA, toProperties("key1", "*")); - assertEquals(2, nodes.size()); - nodes = pap.graph().search(OA, toProperties("key1", "value1", "key2", "value2")); - assertEquals(1, nodes.size()); - nodes = pap.graph().search(OA, toProperties("key1", "value1", "key2", "*")); - assertEquals(1, nodes.size()); - nodes = pap.graph().search(OA, toProperties("key1", "value1", "key2", "no_value")); - assertEquals(0, nodes.size()); - nodes = pap.graph().search(ANY, NO_PROPERTIES); - assertEquals(11, nodes.size()); - }); - } + void testTx() throws PMException { + pap.beginTx(); + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.modify().graph().associate("ua1", "oa1", new AccessRightSet()); + pap.commit(); - @Test - void testGetPolicyClasses() throws PMException { - runTest(pap -> { - pap.graph().createPolicyClass("pc1"); - pap.graph().createPolicyClass("pc2"); - pap.graph().createPolicyClass("pc3"); + assertTrue(pap.query().graph().nodeExists("pc1")); + assertTrue(pap.query().graph().nodeExists("oa1")); + assertTrue(pap.query().graph().nodeExists("ua1")); + assertTrue(pap.query().graph().getAssociationsWithSource("ua1").iterator().next() + .equals(new Association("ua1", "oa1", new AccessRightSet()))); - assertTrue(pap.graph().getPolicyClasses().containsAll(Arrays.asList(SUPER_PC, "pc1", "pc2", "pc3"))); - }); + pap.beginTx(); + pap.modify().graph().deleteNode("ua1"); + pap.rollback(); + assertTrue(pap.query().graph().nodeExists("ua1")); } @Test - void testNodeExists() throws PMException { - runTest(pap -> { - assertTrue(pap.graph().nodeExists(SUPER_PC)); - assertTrue(pap.graph().nodeExists(SUPER_UA)); - assertTrue(pap.graph().nodeExists(SUPER_PC_REP)); - assertTrue(pap.graph().nodeExists(SUPER_USER)); - assertFalse(pap.graph().nodeExists("pc1")); - }); - } - - @Nested - class AssignTest { - - @Test - void ChildNodeDoesNotExist() throws PMException { - runTest(pap -> assertThrows(NodeDoesNotExistException.class, - () -> pap.graph().assign("oa1", "pc1"))); - } - - @Test - void ParentNodeDoesNotExist() throws PMException { - runTest(pap -> { - pap.graph().createPolicyClass("pc1"); - pap.graph().createObjectAttribute("oa1", "pc1"); - assertThrows(NodeDoesNotExistException.class, - () -> pap.graph().assign("oa1", "oa2")); - }); - } - - @Test - void AssignmentExistsDoesNothing() throws PMException { - runTest(pap -> { - pap.graph().createPolicyClass("pc1"); - pap.graph().createObjectAttribute("oa1", "pc1"); - pap.graph().assign("oa1", "pc1"); - }); - } - - @Test - void InvalidAssignment() throws PMException { - runTest(pap -> { - pap.graph().createPolicyClass("pc1"); - pap.graph().createObjectAttribute("oa1", "pc1"); - pap.graph().createUserAttribute("ua1", "pc1"); - - assertThrows(InvalidAssignmentException.class, - () -> pap.graph().assign("ua1", "oa1")); - }); - } - - @Test - void Success() throws PMException { - runTest(pap -> { - pap.graph().createPolicyClass("pc1"); - pap.graph().createObjectAttribute("oa1", "pc1"); - pap.graph().createObjectAttribute("oa2", "pc1"); - pap.graph().assign("oa2", "oa1"); - assertTrue(pap.graph().getParents("oa2").contains("oa1")); - assertTrue(pap.graph().getChildren("oa1").contains("oa2")); - }); - } - } - - @Nested - class GetChildrenTest { - - @Test - void NodeDoesNotExist() throws PMException { - runTest(pap -> assertThrows(NodeDoesNotExistException.class, - () -> pap.graph().getChildren("oa1"))); - } - - @Test - void Success() throws PMException { - runTest(pap -> { - pap.graph().createPolicyClass("pc1"); - pap.graph().createObjectAttribute("oa1", "pc1"); - pap.graph().createObjectAttribute("oa2", "pc1"); - pap.graph().createObjectAttribute("oa3", "pc1"); - - - assertTrue(pap.graph().getChildren("pc1").containsAll(List.of("oa1", "oa2", "oa3"))); - }); - } - } - - @Nested - class GetParentsTest { - - @Test - void NodeDoesNotExist() throws PMException { - runTest(pap -> assertThrows(NodeDoesNotExistException.class, - () -> pap.graph().getParents("oa1"))); - } - - @Test - void Success() throws PMException { - runTest(pap -> { - pap.graph().createPolicyClass("pc1"); - pap.graph().createObjectAttribute("oa1", "pc1"); - pap.graph().createObjectAttribute("oa2", "pc1"); - pap.graph().createObjectAttribute("oa3", "pc1"); - pap.graph().createObject("o1", "oa1"); - pap.graph().assign("o1", "oa2"); - pap.graph().assign("o1", "oa3"); - - assertTrue(pap.graph().getParents("o1").containsAll(List.of("oa1", "oa2", "oa3"))); - }); - } - } - - @Nested - class DeassignTest { - - @Test - void ChildNodeDoesNotExistDoesNothing() throws PMException { - runTest(pap -> pap.graph().deassign("oa1", "pc1")); - } - - @Test - void ParentNodeDoesNotExistDoesNothing() throws PMException { - runTest(pap -> { - pap.graph().createPolicyClass("pc1"); - pap.graph().createObjectAttribute("oa1", "pc1"); - pap.graph().deassign("oa1", "oa2"); - }); - } - - @Test - void AssignmentDoesNotExistDoesNothing() throws PMException { - runTest(pap -> { - pap.graph().createPolicyClass("pc1"); - pap.graph().createObjectAttribute("oa1", "pc1"); - pap.graph().createObjectAttribute("oa2", "pc1"); - pap.graph().deassign("oa1", "oa2"); - }); - } - - @Test - void DisconnectedNode() throws PMException { - runTest(pap -> { - pap.graph().createPolicyClass("pc1"); - pap.graph().createObjectAttribute("oa1", "pc1"); - - assertThrows(DisconnectedNodeException.class, - () -> pap.graph().deassign("oa1", "pc1")); - }); - } - - @Test - void Success() throws PMException { - runTest(pap -> { - pap.graph().createPolicyClass("pc1"); - pap.graph().createPolicyClass("pc2"); - pap.graph().createObjectAttribute("oa1", "pc1", "pc2"); - pap.graph().deassign("oa1", "pc1"); - assertEquals(List.of("pc2"), pap.graph().getParents("oa1")); - assertFalse(pap.graph().getParents("oa1").contains("pc1")); - assertFalse(pap.graph().getChildren("pc1").contains("oa1")); - }); - } - - } - - @Nested - class AssociateTest { - - @Test - void NodeDoesNotExist() throws PMException { - runTest(pap -> { - assertThrows(NodeDoesNotExistException.class, - () -> pap.graph().associate("ua1", "oa1", new AccessRightSet())); - - pap.graph().createPolicyClass("pc1"); - pap.graph().createUserAttribute("ua1", "pc1"); - - assertThrows(NodeDoesNotExistException.class, - () -> pap.graph().associate("ua1", "oa1", new AccessRightSet())); - }); - } - - @Test - void NodesAlreadyAssigned() throws PMException { - runTest(pap -> { - pap.graph().createPolicyClass("pc1"); - pap.graph().createUserAttribute("ua1", "pc1"); - pap.graph().createUserAttribute("ua2", "ua1"); - assertDoesNotThrow(() -> pap.graph().associate("ua2", "ua1", new AccessRightSet())); - }); - } - - @Test - void UnknownResourceAccessRight() throws PMException { - runTest(pap -> { - pap.graph().createPolicyClass("pc1"); - pap.graph().createUserAttribute("ua1", "pc1"); - pap.graph().createObjectAttribute("oa1", "pc1"); - assertThrows(UnknownAccessRightException.class, - () -> pap.graph().associate("ua1", "oa1", new AccessRightSet("read"))); - pap.graph().setResourceAccessRights(new AccessRightSet("read")); - assertThrows(UnknownAccessRightException.class, - () -> pap.graph().associate("ua1", "oa1", new AccessRightSet("write"))); - assertDoesNotThrow(() -> pap.graph().associate("ua1", "oa1", new AccessRightSet("read"))); - assertDoesNotThrow(() -> pap.graph().associate("ua1", "oa1", new AccessRightSet(ALL_ACCESS_RIGHTS))); - assertDoesNotThrow(() -> pap.graph().associate("ua1", "oa1", new AccessRightSet(ALL_RESOURCE_ACCESS_RIGHTS))); - assertDoesNotThrow(() -> pap.graph().associate("ua1", "oa1", new AccessRightSet(ALL_ADMIN_ACCESS_RIGHTS))); - }); - } - - @Test - void InvalidAssociation() throws PMException { - runTest(pap -> { - pap.graph().createPolicyClass("pc1"); - pap.graph().createUserAttribute("ua1", "pc1"); - pap.graph().createUserAttribute("ua2", "ua1"); - pap.graph().createObjectAttribute("oa1", "pc1"); - pap.graph().createObjectAttribute("oa2", "pc1"); - - assertThrows(InvalidAssociationException.class, - () -> pap.graph().associate("ua2", "pc1", new AccessRightSet())); - assertThrows(InvalidAssociationException.class, - () -> pap.graph().associate("oa1", "oa2", new AccessRightSet())); - }); - } - - @Test - void Success() throws PMException { - runTest(pap -> { - pap.graph().createPolicyClass("pc1"); - pap.graph().createUserAttribute("ua1", "pc1"); - pap.graph().createObjectAttribute("oa1", "pc1"); - - pap.graph().setResourceAccessRights(new AccessRightSet("read", "write")); - pap.graph().associate("ua1", "oa1", new AccessRightSet("read")); - - assertTrue( - pap.graph().getAssociationsWithSource("ua1") - .contains(new Association("ua1", "oa1")) - ); - assertTrue( - pap.graph().getAssociationsWithTarget("oa1") - .contains(new Association("ua1", "oa1")) - ); - }); - } - - @Test - void OverwriteSuccess() throws PMException { - runTest(pap -> { - pap.graph().createPolicyClass("pc1"); - pap.graph().createUserAttribute("ua1", "pc1"); - pap.graph().createObjectAttribute("oa1", "pc1"); - - pap.graph().setResourceAccessRights(new AccessRightSet("read", "write")); - pap.graph().associate("ua1", "oa1", new AccessRightSet("read")); - - List assocs = pap.graph().getAssociationsWithSource("ua1"); - Association assoc = assocs.get(0); - assertEquals("ua1", assoc.getSource()); - assertEquals("oa1", assoc.getTarget()); - assertEquals(new AccessRightSet("read"), assoc.getAccessRightSet()); - - pap.graph().associate("ua1", "oa1", new AccessRightSet("read", "write")); - - assocs = pap.graph().getAssociationsWithSource("ua1"); - assoc = assocs.get(0); - assertEquals("ua1", assoc.getSource()); - assertEquals("oa1", assoc.getTarget()); - assertEquals(new AccessRightSet("read", "write"), assoc.getAccessRightSet()); - }); - } - } - - @Nested - class DissociateTest { - - @Test - void NodeDoesNotExistDoesNothing() throws PMException { - runTest(pap -> { - assertDoesNotThrow(() -> pap.graph().dissociate("ua1", "oa1")); - - pap.graph().createPolicyClass("pc1"); - pap.graph().createObjectAttribute("oa1", "pc1"); - pap.graph().createUserAttribute("ua1", "pc1"); - - assertDoesNotThrow(() -> pap.graph().dissociate("ua1", "oa2")); - }); - } - - @Test - void AssociationDoesNotExistDoesNothing() throws PMException { - runTest(pap -> { - pap.graph().createPolicyClass("pc1"); - pap.graph().createObjectAttribute("oa1", "pc1"); - pap.graph().createUserAttribute("ua1", "pc1"); - - assertDoesNotThrow(() -> pap.graph().dissociate("ua1", "oa1")); - }); - } - - @Test - void Success() throws PMException { - runTest(pap -> { - pap.graph().createPolicyClass("pc1"); - pap.graph().createObjectAttribute("oa1", "pc1"); - pap.graph().createUserAttribute("ua1", "pc1"); - pap.graph().associate("ua1", "oa1", new AccessRightSet()); - - pap.graph().dissociate("ua1", "oa1"); - - assertFalse(pap.graph().getAssociationsWithSource("ua1") - .contains(new Association("ua1", "oa1"))); - assertFalse(pap.graph().getAssociationsWithTarget("oa1") - .contains(new Association("ua1", "oa1"))); - }); - } - } - - @Nested - class GetAssociationsWithSourceTest { - - @Test - void NodeDoesNotExist() throws PMException { - runTest(pap -> assertThrows(NodeDoesNotExistException.class, - () -> pap.graph().getAssociationsWithSource("ua1"))); - } - - @Test - void Success() throws PMException { - runTest(pap -> { - pap.graph().setResourceAccessRights(new AccessRightSet("read", "write")); - pap.graph().createPolicyClass("pc1"); - pap.graph().createObjectAttribute("oa1", "pc1"); - pap.graph().createObjectAttribute("oa2", "pc1"); - pap.graph().createUserAttribute("ua1", "pc1"); - pap.graph().associate("ua1", "oa1", new AccessRightSet("read")); - pap.graph().associate("ua1", "oa2", new AccessRightSet("read", "write")); - - List assocs = pap.graph().getAssociationsWithSource("ua1"); - - assertEquals(2, assocs.size()); - - for (Association assoc : assocs) { - checkAssociation(assoc); - } - }); - } - - private void checkAssociation(Association association) { - if (association.getTarget().equals("oa1")) { - assertEquals(new AccessRightSet("read"), association.getAccessRightSet()); - } else if (association.getTarget().equals("oa2")) { - assertEquals(new AccessRightSet("read", "write"), association.getAccessRightSet()); - } - } - } - - @Nested - class GetAssociationsWithTargetTest { - - @Test - void NodeDoesNotExist() throws PMException { - runTest(pap -> assertThrows(NodeDoesNotExistException.class, - () -> pap.graph().getAssociationsWithTarget("oa1"))); - } - - @Test - void Success() throws PMException { - runTest(pap -> { - pap.graph().setResourceAccessRights(new AccessRightSet("read", "write")); - pap.graph().createPolicyClass("pc1"); - pap.graph().createObjectAttribute("oa1", "pc1"); - pap.graph().createUserAttribute("ua1", "pc1"); - pap.graph().createUserAttribute("ua2", "pc1"); - pap.graph().associate("ua1", "oa1", new AccessRightSet("read")); - pap.graph().associate("ua2", "oa1", new AccessRightSet("read", "write")); - - List assocs = pap.graph().getAssociationsWithTarget("oa1"); - - assertEquals(3, assocs.size()); - - for (Association assoc : assocs) { - checkAssociation(assoc); - } - }); - } - - private void checkAssociation(Association association) { - if (association.getSource().equals("ua1")) { - assertEquals(new AccessRightSet("read"), association.getAccessRightSet()); - } else if (association.getSource().equals("ua2")) { - assertEquals(new AccessRightSet("read", "write"), association.getAccessRightSet()); - } else if (association.getSource().equals(SUPER_UA)) { - assertEquals(allAccessRights(), association.getAccessRightSet()); - } - } - } - - @Nested - class CreateProhibitionTest { - - @Test - void ProhibitionExists() throws PMException { - runTest(pap -> { - pap.graph().createPolicyClass("pc1"); - pap.graph().createUserAttribute("subject", "pc1"); - - pap.prohibitions().create("label", ProhibitionSubject.userAttribute("subject"), new AccessRightSet(), false); - - assertThrows(ProhibitionExistsException.class, - () -> pap.prohibitions().create("label", ProhibitionSubject.userAttribute("subject"), new AccessRightSet(), false)); - }); - } - - @Test - void InvalidAccessRights() throws PMException { - runTest(pap -> { - pap.graph().createPolicyClass("pc1"); - pap.graph().createUserAttribute("subject", "pc1"); - - assertThrows(UnknownAccessRightException.class, - () -> pap.prohibitions().create("label", ProhibitionSubject.userAttribute("subject"), new AccessRightSet("read"), false)); - }); - } - - @Test - void ContainerDoesNotExist() throws PMException { - runTest(pap -> { - pap.graph().createPolicyClass("pc1"); - pap.graph().createUserAttribute("subject", "pc1"); - pap.graph().setResourceAccessRights(new AccessRightSet("read")); - assertThrows(ProhibitionContainerDoesNotExistException.class, - () -> pap.prohibitions().create("label", ProhibitionSubject.userAttribute("subject"), new AccessRightSet("read"), false, new ContainerCondition("oa1", true))); - }); - } - - @Test - void Success() throws PMException { - runTest(pap -> { - pap.graph().createPolicyClass("pc1"); - pap.graph().createUserAttribute("subject", "pc1"); - pap.graph().createObjectAttribute("oa1", "pc1"); - pap.graph().createObjectAttribute("oa2", "pc1"); - pap.graph().setResourceAccessRights(new AccessRightSet("read", "write")); - - pap.prohibitions().create("label", ProhibitionSubject.userAttribute("subject"), new AccessRightSet("read"), true, - new ContainerCondition("oa1", true), - new ContainerCondition("oa2", false)); - - Prohibition p = pap.prohibitions().get("label"); - assertEquals("label", p.getLabel()); - assertEquals("subject", p.getSubject().getName()); - assertEquals(new AccessRightSet("read"), p.getAccessRightSet()); - assertTrue(p.isIntersection()); - assertEquals(2, p.getContainers().size()); - assertEquals(List.of( - new ContainerCondition("oa1", true), - new ContainerCondition("oa2", false) - ), p.getContainers()); - }); - } - } - - @Nested - class UpdateProhibitionTest { - - @Test - void InvalidAccessRights() throws PMException { - runTest(pap -> { - pap.graph().createPolicyClass("pc1"); - pap.graph().createUserAttribute("subject", "pc1"); - pap.graph().createObjectAttribute("oa1", "pc1"); - pap.graph().setResourceAccessRights(new AccessRightSet("read", "write")); - - pap.prohibitions().create("label", ProhibitionSubject.userAttribute("subject"), new AccessRightSet("read"), true, - new ContainerCondition("oa1", true)); - - assertThrows(UnknownAccessRightException.class, - () -> pap.prohibitions().update("label", ProhibitionSubject.userAttribute("subject"), new AccessRightSet("test"), false)); - }); - } - - @Test - void SubjectDoesNotExist() throws PMException { - runTest(pap -> { - pap.graph().createPolicyClass("pc1"); - pap.graph().createUserAttribute("subject", "pc1"); - pap.graph().createObjectAttribute("oa1", "pc1"); - pap.graph().setResourceAccessRights(new AccessRightSet("read", "write")); - - pap.prohibitions().create("label", ProhibitionSubject.userAttribute("subject"), new AccessRightSet("read"), true, - new ContainerCondition("oa1", true)); - - assertThrows(ProhibitionSubjectDoesNotExistException.class, - () -> pap.prohibitions().update("label", ProhibitionSubject.userAttribute("test"), new AccessRightSet("read"), false)); - assertDoesNotThrow(() -> pap.prohibitions().update("label", ProhibitionSubject.process("subject"), new AccessRightSet("read"), false)); - }); - } - - @Test - void ContainerDoesNotExist() throws PMException { - runTest(pap -> { - pap.graph().createPolicyClass("pc1"); - pap.graph().createUserAttribute("subject", "pc1"); - pap.graph().createObjectAttribute("oa1", "pc1"); - pap.graph().setResourceAccessRights(new AccessRightSet("read", "write")); - - pap.prohibitions().create("label", ProhibitionSubject.userAttribute("subject"), new AccessRightSet("read"), true, - new ContainerCondition("oa1", true)); - - assertThrows(ProhibitionContainerDoesNotExistException.class, - () -> pap.prohibitions().update("label", ProhibitionSubject.userAttribute("subject"), new AccessRightSet("read"), false, new ContainerCondition("oa3", true))); - }); - } - - @Test - void Success() throws PMException { - runTest(pap -> { - pap.graph().createPolicyClass("pc1"); - pap.graph().createUserAttribute("subject", "pc1"); - pap.graph().createUserAttribute("subject2", "pc1"); - pap.graph().createObjectAttribute("oa1", "pc1"); - pap.graph().createObjectAttribute("oa2", "pc1"); - pap.graph().setResourceAccessRights(new AccessRightSet("read", "write")); - - pap.prohibitions().create("label", ProhibitionSubject.userAttribute("subject"), new AccessRightSet("read"), true, - new ContainerCondition("oa1", true), - new ContainerCondition("oa2", false)); - pap.prohibitions().update("label", ProhibitionSubject.userAttribute("subject2"), new AccessRightSet("read", "write"), true, - new ContainerCondition("oa1", false), - new ContainerCondition("oa2", true)); - - Prohibition p = pap.prohibitions().get("label"); - assertEquals("label", p.getLabel()); - assertEquals("subject2", p.getSubject().getName()); - assertEquals(new AccessRightSet("read", "write"), p.getAccessRightSet()); - assertTrue(p.isIntersection()); - assertEquals(2, p.getContainers().size()); - assertEquals(List.of( - new ContainerCondition("oa1", false), - new ContainerCondition("oa2", true) - ), p.getContainers()); - }); - } - - @Nested - class DeleteProhibitionTest { - - @Test - void Success() throws PMException { - runTest(pap -> { - pap.graph().createPolicyClass("pc1"); - pap.graph().createUserAttribute("subject", "pc1"); - pap.graph().createObjectAttribute("oa1", "pc1"); - pap.graph().createObjectAttribute("oa2", "pc1"); - pap.graph().setResourceAccessRights(new AccessRightSet("read", "write")); - - pap.prohibitions().create("label", ProhibitionSubject.userAttribute("subject"), new AccessRightSet("read"), true, - new ContainerCondition("oa1", true), - new ContainerCondition("oa2", false)); - - pap.prohibitions().delete("label"); - - assertThrows(ProhibitionDoesNotExistException.class, - () -> pap.prohibitions().get("label")); - }); - } - } - } - - @Nested - class GetProhibitionsTest { - - @Test - void GetProhibitions() throws PMException { - runTest(pap -> { - pap.graph().createPolicyClass("pc1"); - pap.graph().createUserAttribute("subject", "pc1"); - pap.graph().createObjectAttribute("oa1", "pc1"); - pap.graph().createObjectAttribute("oa2", "pc1"); - pap.graph().createObjectAttribute("oa3", "pc1"); - pap.graph().createObjectAttribute("oa4", "pc1"); - - pap.graph().setResourceAccessRights(new AccessRightSet("read", "write")); - - pap.prohibitions().create("label1", ProhibitionSubject.userAttribute("subject"), new AccessRightSet("read"), true, - new ContainerCondition("oa1", true), - new ContainerCondition("oa2", false)); - pap.prohibitions().create("label2", ProhibitionSubject.userAttribute("subject"), new AccessRightSet("read"), true, - new ContainerCondition("oa3", true), - new ContainerCondition("oa4", false)); + void testExecutePML() throws PMException { + try { + SamplePolicy.loadSamplePolicyFromPML(pap); - Map> prohibitions = pap.prohibitions().getAll(); - assertEquals(1, prohibitions.size()); - assertEquals(2, prohibitions.get("subject").size()); - checkProhibitions(prohibitions.get("subject")); - }); - } + pap.modify().operations().createAdminOperation(new Operation("testFunc") { + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { - private void checkProhibitions(List prohibitions) { - for (Prohibition p : prohibitions) { - if (p.getLabel().equals("label1")) { - assertEquals("label1", p.getLabel()); - assertEquals("subject", p.getSubject().getName()); - assertEquals(new AccessRightSet("read"), p.getAccessRightSet()); - assertTrue(p.isIntersection()); - assertEquals(2, p.getContainers().size()); - assertEquals(List.of( - new ContainerCondition("oa1", true), - new ContainerCondition("oa2", false) - ), p.getContainers()); - } else if (p.getLabel().equals("label2")) { - assertEquals("label2", p.getLabel()); - assertEquals("subject", p.getSubject().getName()); - assertEquals(new AccessRightSet("read"), p.getAccessRightSet()); - assertTrue(p.isIntersection()); - assertEquals(2, p.getContainers().size()); - assertEquals(List.of( - new ContainerCondition("oa3", true), - new ContainerCondition("oa4", false) - ), p.getContainers()); - } else { - fail("unexpected prohibition label " + p.getLabel()); } - } - } - - @Test - void GetProhibitionsFor() throws PMException { - runTest(pap -> { - pap.graph().createPolicyClass("pc1"); - pap.graph().createUserAttribute("subject", "pc1"); - pap.graph().createObjectAttribute("oa1", "pc1"); - pap.graph().createObjectAttribute("oa2", "pc1"); - pap.graph().createObjectAttribute("oa3", "pc1"); - pap.graph().createObjectAttribute("oa4", "pc1"); - pap.graph().setResourceAccessRights(new AccessRightSet("read", "write")); - - pap.prohibitions().create("label1", ProhibitionSubject.userAttribute("subject"), new AccessRightSet("read"), true, - new ContainerCondition("oa1", true), - new ContainerCondition("oa2", false)); - pap.prohibitions().create("label2", ProhibitionSubject.userAttribute("subject"), new AccessRightSet("read"), true, - new ContainerCondition("oa3", true), - new ContainerCondition("oa4", false)); - - List prohibitions = pap.prohibitions().getWithSubject("subject"); - assertEquals(2, prohibitions.size()); - checkProhibitions(prohibitions); - }); - } - - @Test - void GetProhibition() throws PMException { - runTest(pap -> { - assertThrows(ProhibitionDoesNotExistException.class, - () -> pap.prohibitions().get("label")); - - pap.graph().createPolicyClass("pc1"); - pap.graph().createUserAttribute("subject", "pc1"); - pap.graph().createObjectAttribute("oa1", "pc1"); - pap.graph().createObjectAttribute("oa2", "pc1"); - pap.graph().createObjectAttribute("oa3", "pc1"); - pap.graph().createObjectAttribute("oa4", "pc1"); - pap.graph().setResourceAccessRights(new AccessRightSet("read", "write")); - - pap.prohibitions().create("label1", ProhibitionSubject.userAttribute("subject"), new AccessRightSet("read"), true, - new ContainerCondition("oa1", true), - new ContainerCondition("oa2", false)); - pap.prohibitions().create("label2", ProhibitionSubject.userAttribute("subject"), new AccessRightSet("read"), true, - new ContainerCondition("oa3", true), - new ContainerCondition("oa4", false)); - - Prohibition p = pap.prohibitions().get("label1"); - assertEquals("label1", p.getLabel()); - assertEquals("subject", p.getSubject().getName()); - assertEquals(new AccessRightSet("read"), p.getAccessRightSet()); - assertTrue(p.isIntersection()); - assertEquals(2, p.getContainers().size()); - assertEquals(List.of( - new ContainerCondition("oa1", true), - new ContainerCondition("oa2", false) - ), p.getContainers()); - }); - } - } - - @Nested - class ObligationTest { - - Obligation obligation1 = new Obligation( - new UserContext(SUPER_USER), - "label", - List.of( - new Rule( - "rule1", - new EventPattern( - EventSubject.anyUser(), - new Performs("test_event") - ), - new Response( - new UserContext(SUPER_USER), - new CreatePolicyStatement(new Expression(new VariableReference("test_pc", Type.string()))) - ) - ) - ) - ); - - Obligation obligation2 = new Obligation( - new UserContext(SUPER_USER), - "label2") - .addRule( - new Rule( - "rule1", - new EventPattern( - EventSubject.anyUser(), - new Performs("test_event") - ), - new Response( - new UserContext(SUPER_USER), - new CreatePolicyStatement(new Expression(new VariableReference("test_pc", Type.string()))) - ) - ) - ).addRule( - new Rule( - "rule2", - new EventPattern( - EventSubject.anyUser(), - new Performs("test_event") - ), - new Response( - new UserContext(SUPER_USER), - new CreatePolicyStatement(new Expression(new VariableReference("test_pc", Type.string()))) - ) - ) - ); - - - @Nested - class CreateObligation { - - @Test - void AuthorDoesNotExist() throws PMException { - runTest(pap -> { - assertThrows(NodeDoesNotExistException.class, - () -> pap.obligations().create(new UserContext("u1"), obligation1.getLabel(), - obligation1.getRules().toArray(Rule[]::new))); - }); - } - - @Test - void EventSubjectDoesNotExist() throws PMException { - runTest(pap -> { - assertThrows(NodeDoesNotExistException.class, - () -> pap.obligations().create( - new UserContext(SUPER_USER), - "label", - new Rule( - "rule1", - new EventPattern( - EventSubject.users("u1"), - Performs.events("test_event"), - Target.anyPolicyElement() - ), - new Response(new UserContext(SUPER_USER)) - ) - )); - assertThrows(NodeDoesNotExistException.class, - () -> pap.obligations().create( - new UserContext(SUPER_USER), - "label", - new Rule( - "rule1", - new EventPattern( - EventSubject.anyUserWithAttribute("ua1"), - Performs.events("test_event"), - Target.anyPolicyElement() - ), - new Response(new UserContext(SUPER_USER)) - ) - )); - }); - } - - @Test - void EventTargetDoesNotExist() throws PMException { - runTest(pap -> { - assertThrows(NodeDoesNotExistException.class, - () -> pap.obligations().create( - new UserContext(SUPER_USER), - "label", - new Rule( - "rule1", - new EventPattern( - EventSubject.users(SUPER_USER), - Performs.events("test_event"), - Target.anyOfSet("oa1") - ), - new Response(new UserContext(SUPER_USER)) - ) - )); - assertThrows(NodeDoesNotExistException.class, - () -> pap.obligations().create( - new UserContext(SUPER_USER), - "label", - new Rule( - "rule1", - new EventPattern( - EventSubject.users(SUPER_USER), - Performs.events("test_event"), - Target.policyElement("oa1") - ), - new Response(new UserContext(SUPER_USER)) - ) - )); - assertThrows(NodeDoesNotExistException.class, - () -> pap.obligations().create( - new UserContext(SUPER_USER), - "label", - new Rule( - "rule1", - new EventPattern( - EventSubject.users(SUPER_USER), - Performs.events("test_event"), - Target.anyContainedIn("oa1") - ), - new Response(new UserContext(SUPER_USER)) - ) - )); - }); - } - - @Test - void Success() throws PMException { - runTest(pap -> { - pap.obligations().create(obligation1.getAuthor(), obligation1.getLabel(), obligation1.getRules().toArray(Rule[]::new)); - - assertThrows(ObligationExistsException.class, - () -> pap.obligations().create(obligation1.getAuthor(), obligation1.getLabel())); - - Obligation actual = pap.obligations().get(obligation1.getLabel()); - assertEquals(obligation1, actual); - }); - } - } - - @Nested - class UpdateObligation { - - @Test - void AuthorDoesNotExist() throws PMException { - runTest(pap -> { - pap.obligations().create(obligation1.getAuthor(), obligation1.getLabel(), obligation1.getRules().toArray(Rule[]::new)); - - assertThrows(NodeDoesNotExistException.class, - () -> pap.obligations().update(new UserContext("u1"), obligation1.getLabel(), - obligation1.getRules().toArray(Rule[]::new))); - }); - } - - @Test - void EventSubjectDoesNotExist() throws PMException { - runTest(pap -> { - pap.obligations().create(obligation1.getAuthor(), obligation1.getLabel(), obligation1.getRules().toArray(Rule[]::new)); - - assertThrows(NodeDoesNotExistException.class, - () -> pap.obligations().update( - new UserContext(SUPER_USER), - obligation1.getLabel(), - new Rule( - "rule1", - new EventPattern( - EventSubject.users("u1"), - Performs.events("test_event"), - Target.anyPolicyElement() - ), - new Response(new UserContext(SUPER_USER)) - ) - )); - assertThrows(NodeDoesNotExistException.class, - () -> pap.obligations().update( - new UserContext(SUPER_USER), - obligation1.getLabel(), - new Rule( - "rule1", - new EventPattern( - EventSubject.anyUserWithAttribute("ua1"), - Performs.events("test_event"), - Target.anyPolicyElement() - ), - new Response(new UserContext(SUPER_USER)) - ) - )); - }); - } - - @Test - void EventTargetDoesNotExist() throws PMException { - runTest(pap -> { - pap.obligations().create(obligation1.getAuthor(), obligation1.getLabel(), obligation1.getRules().toArray(Rule[]::new)); - - assertThrows(NodeDoesNotExistException.class, - () -> pap.obligations().update( - new UserContext(SUPER_USER), - obligation1.getLabel(), - new Rule( - "rule1", - new EventPattern( - EventSubject.users(SUPER_USER), - Performs.events("test_event"), - Target.anyOfSet("oa1") - ), - new Response(new UserContext(SUPER_USER)) - ) - )); - assertThrows(NodeDoesNotExistException.class, - () -> pap.obligations().update( - new UserContext(SUPER_USER), - obligation1.getLabel(), - new Rule( - "rule1", - new EventPattern( - EventSubject.users(SUPER_USER), - Performs.events("test_event"), - Target.policyElement("oa1") - ), - new Response(new UserContext(SUPER_USER)) - ) - )); - assertThrows(NodeDoesNotExistException.class, - () -> pap.obligations().update( - new UserContext(SUPER_USER), - obligation1.getLabel(), - new Rule( - "rule1", - new EventPattern( - EventSubject.users(SUPER_USER), - Performs.events("test_event"), - Target.anyContainedIn("oa1") - ), - new Response(new UserContext(SUPER_USER)) - ) - )); - }); - } - - @Test - void Success() throws PMException { - runTest(pap -> { - assertThrows(ObligationDoesNotExistException.class, - () -> pap.obligations().update(new UserContext(SUPER_USER), obligation1.getLabel())); - - pap.obligations().create(obligation1.getAuthor(), obligation1.getLabel(), obligation1.getRules().toArray(Rule[]::new)); - - pap.obligations().update(new UserContext(SUPER_USER), obligation1.getLabel(), - obligation2.getRules().toArray(Rule[]::new)); - - Obligation expected = new Obligation(obligation1); - expected.setRules(obligation2.getRules()); - Obligation actual = pap.obligations().get(obligation1.getLabel()); - assertEquals(expected, actual); - }); - } - - } - - @Test - void DeleteObligation() throws PMException { - runTest(pap -> { - assertDoesNotThrow(() -> pap.obligations().delete(obligation1.getLabel())); - - pap.obligations().create(obligation1.getAuthor(), obligation1.getLabel(), obligation1.getRules().toArray(Rule[]::new)); - pap.obligations().create(obligation2.getAuthor(), obligation2.getLabel(), obligation2.getRules().toArray(Rule[]::new)); - - pap.obligations().delete(obligation1.getLabel()); - - assertThrows(ObligationDoesNotExistException.class, - () -> pap.obligations().get(obligation1.getLabel())); - }); - } - - @Test - void GetObligations() throws PMException { - runTest(pap -> { - pap.obligations().create(obligation1.getAuthor(), obligation1.getLabel(), obligation1.getRules().toArray(Rule[]::new)); - pap.obligations().create(obligation2.getAuthor(), obligation2.getLabel(), obligation2.getRules().toArray(Rule[]::new)); - - List obligations = pap.obligations().getAll(); - assertEquals(2, obligations.size()); - for (Obligation obligation : obligations) { - if (obligation.getLabel().equals(obligation1.getLabel())) { - assertEquals(obligation1, obligation); - } else { - assertEquals(obligation2, obligation); - } + @Override + public Value execute(PAP pap, Map operands) throws PMException { + pap.modify().graph().createPolicyClass("pc3"); + return new VoidValue(); } }); - } - - @Test - void GetObligation() throws PMException { - runTest(pap -> { - assertThrows(ObligationDoesNotExistException.class, - () -> pap.obligations().get(obligation1.getLabel())); - - pap.obligations().create(obligation1.getAuthor(), obligation1.getLabel(), obligation1.getRules().toArray(Rule[]::new)); - pap.obligations().create(obligation2.getAuthor(), obligation2.getLabel(), obligation2.getRules().toArray(Rule[]::new)); - - Obligation obligation = pap.obligations().get(obligation1.getLabel()); - assertEquals(obligation1, obligation); - }); - } - - } - - @Test - void testTx() throws PMException { - runTest(pap -> { - pap.beginTx(); - pap.graph().createPolicyClass("pc1"); - pap.graph().createObjectAttribute("oa1", "pc1"); - pap.graph().createUserAttribute("ua1", "pc1"); - pap.graph().associate("ua1", "oa1", new AccessRightSet()); - pap.commit(); - - assertTrue(pap.graph().nodeExists("pc1")); - assertTrue(pap.graph().nodeExists("oa1")); - assertTrue(pap.graph().nodeExists("ua1")); - assertTrue(pap.graph().getAssociationsWithSource("ua1").contains(new Association("ua1", "oa1"))); - - pap.beginTx(); - pap.graph().deleteNode("ua1"); - pap.rollback(); - assertTrue(pap.graph().nodeExists("ua1")); - }); - } - - @Nested - class addFunction { - - FunctionDefinitionStatement testFunc = new FunctionDefinitionStatement( - "testFunc", - Type.string(), - Arrays.asList( - new FormalArgument("arg1", Type.string()), - new FormalArgument("arg2", Type.array(Type.string())) - ), - Arrays.asList( - new CreatePolicyStatement(new Expression(new VariableReference("pc1", Type.string()))), - new CreateAttrStatement( - new Expression(new VariableReference("ua1", Type.string())), - UA, - new Expression(new Literal(new ArrayLiteral(new Expression[]{new Expression(new VariableReference("pc1", Type.string()))}, Type.string()))) - ), - new CreateAttrStatement( - new Expression(new VariableReference("oa1", Type.string())), - OA, - new Expression(new Literal(new ArrayLiteral(new Expression[]{new Expression(new VariableReference("pc1", Type.string()))}, Type.string()))) - ) - ) - ); - - @Test - void functionAlreadyDefined() throws PMException { - runTest(pap -> { - pap.userDefinedPML().createFunction(testFunc); - assertThrows(FunctionAlreadyDefinedException.class, () -> pap.userDefinedPML().createFunction(testFunc)); - }); - } - - @Test - void success() throws PMException { - runTest(pap -> { - pap.userDefinedPML().createFunction(testFunc); - assertTrue(pap.userDefinedPML().getFunctions().containsKey(testFunc.getFunctionName())); - FunctionDefinitionStatement actual = pap.userDefinedPML().getFunctions().get(testFunc.getFunctionName()); - assertEquals(testFunc, actual); - }); - } - } - - @Nested - class RemoveFunction { - - @Test - void functionDoesNotExistNoException() throws PMException { - runTest(pap -> { - assertDoesNotThrow(() -> pap.userDefinedPML().deleteFunction("func")); - }); - } - - @Test - void success() throws PMException { - runTest(pap -> { - pap.userDefinedPML().createFunction(new FunctionDefinitionStatement("testFunc", Type.voidType(), List.of(), List.of())); - assertTrue(pap.userDefinedPML().getFunctions().containsKey("testFunc")); - pap.userDefinedPML().deleteFunction("testFunc"); - assertFalse(pap.userDefinedPML().getFunctions().containsKey("testFunc")); - }); - } - } - - @Nested - class GetFunctions { - - @Test - void success() throws PMException { - FunctionDefinitionStatement testFunc1 = new FunctionDefinitionStatement("testFunc1", Type.voidType(), List.of(), List.of()); - FunctionDefinitionStatement testFunc2 = new FunctionDefinitionStatement("testFunc2", Type.voidType(), List.of(), List.of()); - - runTest(pap -> { - pap.userDefinedPML().createFunction(testFunc1); - pap.userDefinedPML().createFunction(testFunc2); - - Map functions = pap.userDefinedPML().getFunctions(); - assertTrue(functions.containsKey("testFunc1")); - FunctionDefinitionStatement actual = functions.get("testFunc1"); - assertEquals(testFunc1, actual); - - assertTrue(functions.containsKey("testFunc2")); - actual = functions.get("testFunc2"); - assertEquals(testFunc2, actual); - }); - } - - } - - @Nested - class AddConstant { - - @Test - void constantAlreadyDefined() throws PMException { - runTest(pap -> { - pap.userDefinedPML().createConstant("const1", new Value("test")); - assertThrows(ConstantAlreadyDefinedException.class, () -> pap.userDefinedPML().createConstant("const1", new Value("test"))); - }); - } - - @Test - void success() throws PMException { - Value expected = new Value("test"); - - runTest(pap -> { - pap.userDefinedPML().createConstant("const1", expected); - assertTrue(pap.userDefinedPML().getConstants().containsKey("const1")); - Value actual = pap.userDefinedPML().getConstants().get("const1"); - assertEquals(expected, actual); - }); - } - } - - @Nested - class RemoveConstant { - - @Test - void constantDoesNotExistNoException() throws PMException { - runTest(pap -> { - assertDoesNotThrow(() -> pap.userDefinedPML().deleteConstant("const1")); - }); - } - @Test - void success() throws PMException { - runTest(pap -> { - pap.userDefinedPML().createConstant("const1", new Value("test")); - assertTrue(pap.userDefinedPML().getConstants().containsKey("const1")); - pap.userDefinedPML().deleteConstant("const1"); - assertFalse(pap.userDefinedPML().getConstants().containsKey("const1")); - }); - } - } - - @Nested - class GetConstants { - - @Test - void success() throws PMException { - Value const1 = new Value("test1"); - Value const2 = new Value("test2"); - - runTest(pap -> { - pap.userDefinedPML().createConstant("const1", const1); - pap.userDefinedPML().createConstant("const2", const2); - - Map constants = pap.userDefinedPML().getConstants(); - assertTrue(constants.containsKey("const1")); - Value actual = constants.get("const1"); - assertEquals(const1, actual); - - assertTrue(constants.containsKey("const2")); - actual = constants.get("const2"); - assertEquals(const2, actual); - }); + pap.executePML(new UserContext("u1"), "create ua \"ua4\" in [\"Location\"]\ntestFunc()"); + assertTrue(pap.query().graph().nodeExists("ua4")); + assertTrue(pap.query().graph().nodeExists("pc3")); + } catch (IOException e) { + throw new RuntimeException(e); } } - private static final String input = """ - set resource access rights ['read', 'write', 'execute'] - create policy class 'pc1' - set properties of 'pc1' to {'k':'v'} - create oa 'oa1' in ['pc1'] - set properties of 'oa1' to {'k1':'v1'} - create ua 'ua1' in ['pc1'] - associate 'ua1' and 'oa1' with ['read', 'write'] - create prohibition 'p1' deny user attribute 'ua1' access rights ['read'] on union of [!'oa1'] - create obligation 'obl1' { - create rule 'rule1' - when any user - performs ['event1', 'event2'] - do(evtCtx) { - let event = evtCtx['event'] - if equals(event, 'event1') { - create policy class 'e1' - } else if equals(event, 'event2') { - create policy class 'e2' - } - } - } - const testConst = "hello world" - function testFunc() void { - create pc "pc1" - } - """; - private static final String expected = """ - const testConst = 'hello world' - function testFunc() void {create policy class 'pc1'} - set resource access rights ['read', 'write', 'execute'] - create policy class 'super_policy' - create user attribute 'super_ua' in ['super_policy'] - create user attribute 'super_ua1' in ['super_policy'] - associate 'super_ua1' and 'super_ua' with ['*'] - create object attribute 'super_oa' in ['super_policy'] - associate 'super_ua' and 'super_oa' with ['*'] - create user 'super' in ['super_ua'] - assign 'super' to ['super_ua1'] - create object attribute 'super_policy_pc_rep' in ['super_oa'] - create object attribute 'pc1_pc_rep' in ['super_oa'] - create policy class 'pc1' - set properties of 'pc1' to {'k': 'v'} - create object attribute 'oa1' in ['pc1'] - set properties of 'oa1' to {'k1': 'v1'} - associate 'super_ua' and 'oa1' with ['*'] - create user attribute 'ua1' in ['pc1'] - associate 'super_ua' and 'ua1' with ['*'] - associate 'ua1' and 'oa1' with ['read', 'write'] - create prohibition 'p1' deny user attribute 'ua1' access rights ['read'] on union of [!'oa1'] - create obligation 'obl1' {create rule 'rule1' when any user performs ['event1', 'event2'] on any policy element do (evtCtx) {let event = evtCtx['event']if equals(event, 'event1') {create policy class 'e1'} else if equals(event, 'event2') {create policy class 'e2'} }} - """.trim(); @Test - void testSerialize() throws PMException { - runTest(pap -> { - pap.deserialize().fromPML(new UserContext(SUPER_USER), input); - String actual = pap.serialize().toPML(); - assertEquals(new ArrayList<>(), pmlEqual(expected, actual)); - - pap.deserialize().fromPML(new UserContext(SUPER_USER), actual); - actual = pap.serialize().toPML(); - assertEquals(new ArrayList<>(), pmlEqual(expected, actual)); - - String json = pap.serialize().toJSON(); - MemoryPolicyStore memoryPolicyStore = new MemoryPolicyStore(); - memoryPolicyStore.deserialize().fromJSON(json); - pap.deserialize().fromJSON(json); - PolicyEquals.check(pap, memoryPolicyStore); - }); - } - - private List pmlEqual(String expected, String actual) { - List expectedLines = sortLines(expected); - List actualLines = sortLines(actual); - expectedLines.removeIf(line -> actualLines.contains(line)); - return expectedLines; - } - - private List sortLines(String pml) { - List lines = new ArrayList<>(); - Scanner sc = new Scanner(pml); - while (sc.hasNextLine()) { - lines.add(sc.nextLine()); - } - - Collections.sort(lines); - return lines; + void testAdminPolicyCreatedInConstructor() throws PMException { + testAdminPolicy(pap, 1); } @Test - void testExecutePML() throws PMException { - runTest(pap -> { - try { - SamplePolicy.loadSamplePolicyFromPML(pap); + void testResetInitializesAdminPolicy() throws PMException { + pap.reset(); - FunctionDefinitionStatement functionDefinitionStatement = new FunctionDefinitionStatement( - "testfunc", - Type.voidType(), - List.of(), - (ctx, policy) -> { - policy.graph().createPolicyClass("pc3"); - return new Value(); - } - ); - - pap.executePML(new UserContext(SUPER_USER), "create ua 'ua3' in ['pc2']\ntestfunc()", functionDefinitionStatement); - assertTrue(pap.graph().nodeExists("ua3")); - assertTrue(pap.graph().nodeExists("pc3")); - } catch (IOException e) { - throw new RuntimeException(e); - } - }); + testAdminPolicy(pap, 1); } - @Test - void testAssignAll() throws PMException { - runTest(pap -> { - String pml = """ - create pc 'pc1' - create oa 'oa1' in ['pc1'] - create oa 'oa2' in ['pc1'] - create ua 'ua1' in ['pc1'] - - for i in range [1, 10] { - let name = concat(["o", numToStr(i)]) - create object name in ['oa1'] - } - """; - pap.deserialize().fromPML(new UserContext(SUPER_USER), pml); - - List children = pap.graph().getChildren("oa1"); - pap.graph().assignAll(children, "oa2"); - - assertEquals(10, pap.graph().getChildren("oa2").size()); - - assertDoesNotThrow(() -> { - pap.graph().assignAll(children, "oa2"); - }); - - // reset policy - pap.deserialize().fromPML(new UserContext(SUPER_USER), pml); - - // test with illegal assignment - children.add("ua1"); - assertThrows(PMException.class, () -> { - pap.graph().assignAll(children, "oa2"); - }); - assertTrue(pap.graph().getChildren("oa2").isEmpty()); + public static void testAdminPolicy(PAP pap, int numExpectedPolicyClasses) throws PMException { + assertTrue(pap.query().graph().nodeExists(AdminPolicyNode.ADMIN_POLICY.nodeName())); + Collection ascendants = pap.query().graph().getAdjacentAscendants(AdminPolicyNode.ADMIN_POLICY.nodeName()); + assertEquals(1, ascendants.size()); + assertTrue(ascendants.contains(AdminPolicyNode.ADMIN_POLICY_OBJECT.nodeName())); - // test non existing target - assertThrows(PMException.class, () -> { - pap.graph().assignAll(children, "oa3"); - }); - - // test non existing child - assertThrows(PMException.class, () -> { - children.remove("ua1"); - children.add("oDNE"); - pap.graph().assignAll(children, "oa2"); - }); - }); + assertTrue(pap.query().graph().nodeExists(AdminPolicyNode.ADMIN_POLICY_OBJECT.nodeName())); + Collection descendants = pap.query().graph().getAdjacentDescendants(AdminPolicyNode.ADMIN_POLICY_OBJECT.nodeName()); + assertEquals(1, descendants.size()); + assertTrue(descendants.contains(AdminPolicyNode.ADMIN_POLICY.nodeName())); } @Test - void testDeassignAll() throws PMException { - runTest(pap -> { - String pml = """ - create pc 'pc1' - create oa 'oa1' in ['pc1'] - create oa 'oa2' in ['pc1'] - create ua 'ua1' in ['pc1'] - - for i in range [1, 10] { - let name = concat(["o", numToStr(i)]) - create object name in ['oa1'] + void testRecursiveOperation() throws PMException { + String pml = """ + create pc "pc1" + create ua "ua1" in ["pc1"] + create ua "ua2" in ["pc1"] + create u "u1" in ["ua1"] + + associate "ua1" and ADMIN_POLICY_OBJECT with ["assign"] + associate "ua1" and "ua2" with ["assign"] + + operation op1(nodeop string a) { + check "assign" on a + } { + if a == ADMIN_POLICY_OBJECT { + op1("ua2") } - for i in range [1, 5] { - let name = concat(["o", numToStr(i)]) - assign name to ['oa2'] - } - """; - pap.deserialize().fromPML(new UserContext(SUPER_USER), pml); - - List toDelete = new ArrayList<>(List.of("o1", "o2", "o3", "o4", "o5")); - pap.graph().deassignAll(toDelete, "oa1"); - assertEquals(5, pap.graph().getChildren("oa1").size()); - - toDelete.clear(); - toDelete.add("oDNE"); - assertThrows(PMException.class, () -> { - pap.graph().deassignAll(toDelete, "oa2"); - }); + create pc a + "_PC" + } + """; + MemoryPAP pap = new MemoryPAP(); + pap.executePML(new UserContext("u1"), pml); - toDelete.clear(); - toDelete.add("o9"); - assertDoesNotThrow(() -> { - pap.graph().deassignAll(toDelete, "oa2"); - }); - }); + pap.executePML(new UserContext("u1"), "op1(ADMIN_POLICY_OBJECT)"); + assertTrue(pap.query().graph().nodeExists("ua2_PC")); + assertTrue(pap.query().graph().nodeExists("PM_ADMIN:object_PC")); } @Test - void testDeassignAllAndDelete() throws PMException { - runTest(pap -> { - String pml = """ - create pc 'pc1' - create oa 'oa1' in ['pc1'] - create oa 'oa2' in ['pc1'] - create ua 'ua1' in ['pc1'] - - for i in range [1, 10] { - let name = concat(["o", numToStr(i)]) - create object name in ['oa1'] - } - - for i in range [1, 5] { - let name = concat(["o", numToStr(i)]) - assign name to ['oa2'] - } - """; - pap.deserialize().fromPML(new UserContext(SUPER_USER), pml); - - assertThrows(PMException.class, () -> { - pap.graph().deassignAllFromAndDelete("oa1"); - }); - - pap.graph().assignAll(pap.graph().getChildren("oa1"), "oa2"); - - pap.graph().deassignAllFromAndDelete("oa1"); - assertFalse(pap.graph().nodeExists("oa1")); - }); + void testExecutePMLCreatesObligationBeforeAuthorUserThrowsException() { + String pml = """ + create pc "pc1" + create ua "ua1" in ["pc1"] + create ua "ua2" in ["pc1"] + + create obligation "o1" { + create rule "r1" + when any user + performs any operation + do(ctx) {} + } + + create u "u1" in ["ua1"] + """; + assertThrows(NodeDoesNotExistException.class, () -> pap.executePML(new UserContext("u1"), pml)); } } \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/PAPTestInitializer.java b/src/test/java/gov/nist/csd/pm/pap/PAPTestInitializer.java new file mode 100644 index 000000000..89d6605de --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/PAPTestInitializer.java @@ -0,0 +1,16 @@ +package gov.nist.csd.pm.pap; + +import gov.nist.csd.pm.pap.exception.PMException; +import org.junit.jupiter.api.BeforeEach; + +public abstract class PAPTestInitializer { + + protected PAP pap; + + public abstract PAP initializePAP() throws PMException; + + @BeforeEach + void setup() throws PMException { + pap = initializePAP(); + } +} diff --git a/src/test/java/gov/nist/csd/pm/pap/PolicyEventTest.java b/src/test/java/gov/nist/csd/pm/pap/PolicyEventTest.java deleted file mode 100644 index dd64b1660..000000000 --- a/src/test/java/gov/nist/csd/pm/pap/PolicyEventTest.java +++ /dev/null @@ -1,124 +0,0 @@ -package gov.nist.csd.pm.pap; - -import gov.nist.csd.pm.pap.memory.MemoryPolicyStore; -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.model.expression.VariableReference; -import gov.nist.csd.pm.policy.pml.statement.Expression; -import gov.nist.csd.pm.policy.model.access.AccessRightSet; -import gov.nist.csd.pm.policy.model.access.UserContext; -import gov.nist.csd.pm.policy.events.PolicyEvent; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.obligation.Response; -import gov.nist.csd.pm.policy.model.obligation.Rule; -import gov.nist.csd.pm.policy.model.obligation.event.EventPattern; -import gov.nist.csd.pm.policy.model.obligation.event.EventSubject; -import gov.nist.csd.pm.policy.model.obligation.event.Performs; -import gov.nist.csd.pm.policy.model.prohibition.ContainerCondition; -import gov.nist.csd.pm.policy.model.prohibition.ProhibitionSubject; -import gov.nist.csd.pm.policy.pml.statement.CreatePolicyStatement; -import org.junit.jupiter.api.Test; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import static gov.nist.csd.pm.pap.SuperPolicy.SUPER_USER; -import static org.junit.jupiter.api.Assertions.assertEquals; - -public class PolicyEventTest { - - @Test - void testEvents() throws PMException { - PAP pap = new PAP(new MemoryPolicyStore()); - - List events = new ArrayList<>(); - pap.addEventListener(events::add, false); - - pap.graph().setResourceAccessRights(new AccessRightSet("read")); - assertEquals(1, events.size()); - - pap.graph().createPolicyClass("pc1"); - assertEquals(3, events.size()); - - pap.graph().createObjectAttribute("oa1", "pc1"); - assertEquals(5, events.size()); - - pap.graph().createUserAttribute("ua1", "pc1"); - assertEquals(7, events.size()); - - pap.graph().createUserAttribute("ua2", "pc1"); - assertEquals(9, events.size()); - - pap.graph().createObject("o1", "oa1"); - assertEquals(10, events.size()); - - pap.graph().createUser("u1", "ua1"); - assertEquals(11, events.size()); - - pap.graph().createUser("u2", "ua1"); - assertEquals(12, events.size()); - - pap.graph().setNodeProperties("u1", Map.of("k", "v")); - assertEquals(13, events.size()); - - pap.graph().deleteNode("u1"); - assertEquals(14, events.size()); - - pap.graph().assign("u2", "ua2"); - assertEquals(15, events.size()); - - pap.graph().deassign("u2", "ua2"); - assertEquals(16, events.size()); - - pap.graph().associate("ua1", "oa1", new AccessRightSet()); - assertEquals(17, events.size()); - - pap.graph().dissociate("ua1", "oa1"); - assertEquals(18, events.size()); - - pap.prohibitions().create("label", ProhibitionSubject.user("ua1"), new AccessRightSet("read"), false, new ContainerCondition("oa1", false)); - assertEquals(19, events.size()); - - pap.prohibitions().update("label", ProhibitionSubject.user("ua2"), new AccessRightSet("read"), false, new ContainerCondition("oa1", false)); - assertEquals(20, events.size()); - - pap.prohibitions().delete("label"); - assertEquals(21, events.size()); - - pap.obligations().create( - new UserContext(SUPER_USER), - "label", - new Rule( - "rule1", - new EventPattern( - EventSubject.anyUser(), - new Performs("test_event") - ), - new Response( - new UserContext(SUPER_USER), - new CreatePolicyStatement(new Expression(new VariableReference("test_pc", Type.string()))) - ) - ) - ); - assertEquals(22, events.size()); - - pap.obligations().update(new UserContext(SUPER_USER), - "label", - new Rule( - "rule1", - new EventPattern( - EventSubject.anyUser(), - new Performs("test_event") - ), - new Response( - new UserContext(SUPER_USER), - new CreatePolicyStatement(new Expression(new VariableReference("test_pc2", Type.string()))) - ) - )); - assertEquals(23, events.size()); - - pap.obligations().delete("label"); - assertEquals(24, events.size()); - } - -} diff --git a/src/test/java/gov/nist/csd/pm/pap/SuperPolicyTest.java b/src/test/java/gov/nist/csd/pm/pap/SuperPolicyTest.java deleted file mode 100644 index ec72452a8..000000000 --- a/src/test/java/gov/nist/csd/pm/pap/SuperPolicyTest.java +++ /dev/null @@ -1,227 +0,0 @@ -package gov.nist.csd.pm.pap; - -import gov.nist.csd.pm.pap.memory.MemoryPolicyStore; -import gov.nist.csd.pm.pdp.memory.MemoryPolicyReviewer; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.AccessRightSet; -import gov.nist.csd.pm.policy.model.access.UserContext; -import gov.nist.csd.pm.policy.model.graph.relationships.Association; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static gov.nist.csd.pm.pap.SuperPolicy.*; -import static gov.nist.csd.pm.policy.model.access.AdminAccessRights.allAccessRights; -import static gov.nist.csd.pm.policy.model.access.AdminAccessRights.allAdminAccessRights; -import static org.junit.jupiter.api.Assertions.*; - -class SuperPolicyTest { - - static PAP pap; - @BeforeAll - static void init() throws PMException { - pap = new PAP(new MemoryPolicyStore()); - SuperPolicy.verifySuperPolicy(pap.policyStore); - } - - @Test - void verifySuperPC() throws PMException { - assertTrue(pap.graph().nodeExists(SUPER_PC)); - - List expected = List.of(SUPER_UA, SUPER_UA1, SUPER_OA); - List actual = pap.graph().getChildren(SUPER_PC); - assertTrue(expected.containsAll(actual)); - assertTrue(actual.containsAll(expected)); - - assertTrue(pap.graph().nodeExists(SUPER_PC_REP)); - - expected = List.of(SUPER_OA); - assertEquals(expected, pap.graph().getParents(SUPER_PC_REP)); - } - - @Test - void verifySuperUA() throws PMException { - assertTrue(pap.graph().nodeExists(SUPER_UA)); - - List actual = pap.graph().getParents(SUPER_UA); - List expected = List.of(SUPER_PC); - assertEquals(expected, actual); - - actual = pap.graph().getChildren(SUPER_UA); - expected = List.of(SUPER_USER); - assertEquals(expected, actual); - - List expectedAssocs = List.of( - new Association(SUPER_UA, SUPER_OA, allAccessRights()) - ); - List actualAssocs = pap.graph().getAssociationsWithSource(SUPER_UA); - assertEquals(expectedAssocs, actualAssocs); - - expectedAssocs = List.of(new Association(SUPER_UA, SUPER_OA, allAccessRights())); - actualAssocs = pap.graph().getAssociationsWithTarget(SUPER_OA); - assertEquals(expectedAssocs, actualAssocs); - } - - @Test - void verifySuperUA1() throws PMException { - assertTrue(pap.graph().nodeExists(SUPER_UA1)); - - List actual = pap.graph().getParents(SUPER_UA1); - List expected = List.of(SUPER_PC); - assertEquals(expected, actual); - - actual = pap.graph().getChildren(SUPER_UA1); - expected = List.of(SUPER_USER); - assertEquals(expected, actual); - - List expectedAssocs = List.of(new Association(SUPER_UA1, SUPER_UA, allAccessRights())); - List actualAssocs = pap.graph().getAssociationsWithSource(SUPER_UA1); - assertEquals(expectedAssocs, actualAssocs); - - expectedAssocs = List.of(new Association(SUPER_UA1, SUPER_UA, allAccessRights())); - actualAssocs = pap.graph().getAssociationsWithTarget(SUPER_UA); - assertEquals(expectedAssocs, actualAssocs); - } - - @Test - void verifySuperOA() throws PMException { - assertTrue(pap.graph().nodeExists(SUPER_OA)); - - List actual = pap.graph().getParents(SUPER_OA); - List expected = List.of(SUPER_PC); - assertEquals(expected, actual); - - actual = pap.graph().getChildren(SUPER_OA); - expected = List.of(SUPER_PC_REP); - assertEquals(expected, actual); - - List expectedAssocs = List.of(new Association(SUPER_UA, SUPER_OA, allAccessRights())); - List actualAssocs = pap.graph().getAssociationsWithTarget(SUPER_OA); - assertEquals(expectedAssocs, actualAssocs); - } - - @Test - void verifySuperUser() throws PMException { - assertTrue(pap.graph().nodeExists(SUPER_USER)); - - List actual = pap.graph().getParents(SUPER_USER); - List expected = List.of(SUPER_UA, SUPER_UA1); - assertEquals(expected, actual); - } - - @Nested - class FixSuperPolicy { - - @Test - void testNodes() throws PMException { - MemoryPolicyStore policy = new MemoryPolicyStore(); - PAP pap = new PAP(policy); - verifySuperPolicy(pap.policyStore); - assertTrue(pap.graph().nodeExists(SUPER_PC)); - assertTrue(pap.graph().nodeExists(SUPER_UA)); - assertTrue(pap.graph().nodeExists(SUPER_UA1)); - assertTrue(pap.graph().nodeExists(SUPER_OA)); - assertTrue(pap.graph().nodeExists(SUPER_PC_REP)); - assertTrue(pap.graph().nodeExists(SUPER_USER)); - } - - @Test - void testSuperUARelations() throws PMException { - PolicyStore policy = new MemoryPolicyStore(); - policy.graph().createPolicyClass(SUPER_PC); - policy.graph().createUserAttribute("test", SUPER_PC); - policy.graph().createUserAttribute(SUPER_UA, "test"); - - PAP pap = new PAP(policy); - verifySuperPolicy(pap.policyStore); - - assertTrue(pap.graph().getParents(SUPER_UA).contains(SUPER_PC)); - assertTrue(pap.graph().getAssociationsWithTarget(SUPER_UA).contains(new Association(SUPER_UA1, SUPER_UA))); - } - - @Test - void testSuperUA1Relations() throws PMException { - PolicyStore policy = new MemoryPolicyStore(); - policy.graph().createPolicyClass(SUPER_PC); - policy.graph().createUserAttribute("test", SUPER_PC); - policy.graph().createUserAttribute(SUPER_UA1, "test"); - - PAP pap = new PAP(policy); - verifySuperPolicy(pap.policyStore); - - assertTrue(pap.graph().getParents(SUPER_UA1).contains(SUPER_PC)); - } - - @Test - void testSuperOARelations() throws PMException { - PolicyStore policy = new MemoryPolicyStore(); - policy.graph().createPolicyClass(SUPER_PC); - policy.graph().createObjectAttribute("test", SUPER_PC); - policy.graph().createObjectAttribute(SUPER_OA, "test"); - - PAP pap = new PAP(policy); - verifySuperPolicy(pap.policyStore); - - assertTrue(pap.graph().getParents(SUPER_OA).contains(SUPER_PC)); - assertTrue(pap.graph().getAssociationsWithTarget(SUPER_OA).contains(new Association(SUPER_UA, SUPER_OA, allAccessRights()))); - } - - @Test - void testSuperUserAssignments() throws PMException { - MemoryPolicyStore policy = new MemoryPolicyStore(); - - PAP pap = new PAP(policy); - verifySuperPolicy(pap.policyStore); - - assertTrue(pap.graph().getParents(SUPER_USER).containsAll(List.of(SUPER_UA, SUPER_UA1))); - } - - @Test - void testSuperPCRepAssignments() throws PMException { - MemoryPolicyStore policy = new MemoryPolicyStore(); - - PAP pap = new PAP(policy); - verifySuperPolicy(pap.policyStore); - - assertTrue(pap.graph().getParents(SUPER_PC_REP).contains(SUPER_OA)); - } - - } - - @Test - void testExistingPCs() throws PMException { - PolicyStore store = new MemoryPolicyStore(); - store.graph().createPolicyClass("pc1"); - store.graph().createUserAttribute("ua1", "pc1"); - store.graph().createObjectAttribute("oa1", "pc1"); - - PAP pap = new PAP(store); - SuperPolicy.verifySuperPolicy(pap.policyStore); - - assertTrue(pap.graph().getAssociationsWithSource(SUPER_UA).containsAll(List.of( - new Association(SUPER_UA, "ua1", allAccessRights()), - new Association(SUPER_UA, "oa1", allAccessRights()) - ))); - } - - @Test - void testApplySuperPolicy() throws PMException { - PAP pap = new PAP(new MemoryPolicyStore()); - MemoryPolicyReviewer reviewer = new MemoryPolicyReviewer(pap); - UserContext userContext = new UserContext(SUPER_USER); - AccessRightSet accessRights = reviewer.getAccessRights(userContext, SUPER_USER); - assertTrue(accessRights.containsAll(allAdminAccessRights())); - accessRights = reviewer.getAccessRights(userContext, SUPER_UA); - assertTrue(accessRights.containsAll(allAdminAccessRights())); - accessRights = reviewer.getAccessRights(userContext, SUPER_PC); - assertFalse(accessRights.containsAll(allAdminAccessRights())); - accessRights = reviewer.getAccessRights(userContext, SUPER_PC_REP); - assertTrue(accessRights.containsAll(allAdminAccessRights())); - - pap.graph().createPolicyClass("pc1"); - accessRights = reviewer.getAccessRights(userContext, SuperPolicy.pcRepObjectAttribute("pc1")); - assertTrue(accessRights.containsAll(allAdminAccessRights())); - } -} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/memory/MemoryPAPTest.java b/src/test/java/gov/nist/csd/pm/pap/memory/MemoryPAPTest.java deleted file mode 100644 index d72a199f0..000000000 --- a/src/test/java/gov/nist/csd/pm/pap/memory/MemoryPAPTest.java +++ /dev/null @@ -1,25 +0,0 @@ -package gov.nist.csd.pm.pap.memory; - -import gov.nist.csd.pm.pap.PAP; -import gov.nist.csd.pm.policy.exceptions.PMException; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; - -class MemoryPAPTest { - - @Test - void testTx() throws PMException { - PAP pap = new PAP(new MemoryPolicyStore()); - pap.beginTx(); - pap.graph().createPolicyClass("pc1"); - pap.rollback(); - assertFalse(pap.graph().nodeExists("pc1")); - - pap.beginTx(); - pap.graph().createPolicyClass("pc1"); - pap.commit(); - assertTrue(pap.graph().nodeExists("pc1")); - } -} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/memory/MemoryPolicyDeserializerTest.java b/src/test/java/gov/nist/csd/pm/pap/memory/MemoryPolicyDeserializerTest.java deleted file mode 100644 index c68670759..000000000 --- a/src/test/java/gov/nist/csd/pm/pap/memory/MemoryPolicyDeserializerTest.java +++ /dev/null @@ -1,28 +0,0 @@ -package gov.nist.csd.pm.pap.memory; - -import gov.nist.csd.pm.SamplePolicy; -import gov.nist.csd.pm.policy.Policy; -import gov.nist.csd.pm.policy.PolicyEquals; -import gov.nist.csd.pm.policy.exceptions.PMException; -import org.junit.jupiter.api.Test; - -import java.io.IOException; - -import static org.junit.jupiter.api.Assertions.*; - -class MemoryPolicyDeserializerTest { - - @Test - void testDeserialize() throws PMException, IOException { - MemoryPolicyStore memoryPolicyStore = new MemoryPolicyStore(); - SamplePolicy.loadSamplePolicyFromPML(memoryPolicyStore); - - String json = memoryPolicyStore.serialize().toJSON(); - - MemoryPolicyStore actual = new MemoryPolicyStore(); - new MemoryPolicyDeserializer(actual).fromJSON(json); - - PolicyEquals.check(memoryPolicyStore, actual); - } - -} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/memory/MemoryPolicyStoreTest.java b/src/test/java/gov/nist/csd/pm/pap/memory/MemoryPolicyStoreTest.java deleted file mode 100644 index 04e744e39..000000000 --- a/src/test/java/gov/nist/csd/pm/pap/memory/MemoryPolicyStoreTest.java +++ /dev/null @@ -1,243 +0,0 @@ -package gov.nist.csd.pm.pap.memory; - -import gov.nist.csd.pm.policy.model.access.AccessRightSet; -import gov.nist.csd.pm.policy.model.access.UserContext; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.graph.nodes.Node; -import gov.nist.csd.pm.policy.model.graph.relationships.Association; -import gov.nist.csd.pm.policy.model.obligation.Obligation; -import gov.nist.csd.pm.policy.model.obligation.Response; -import gov.nist.csd.pm.policy.model.obligation.Rule; -import gov.nist.csd.pm.policy.model.obligation.event.EventPattern; -import gov.nist.csd.pm.policy.model.obligation.event.EventSubject; -import gov.nist.csd.pm.policy.model.obligation.event.Performs; -import gov.nist.csd.pm.policy.model.prohibition.ContainerCondition; -import gov.nist.csd.pm.policy.model.prohibition.Prohibition; -import gov.nist.csd.pm.policy.model.prohibition.ProhibitionSubject; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import java.util.Collections; -import java.util.List; -import java.util.Map; - -import static gov.nist.csd.pm.policy.model.graph.nodes.Properties.NO_PROPERTIES; -import static gov.nist.csd.pm.policy.tx.TxRunner.runTx; -import static org.junit.jupiter.api.Assertions.*; - -class MemoryPolicyStoreTest { - - MemoryPolicyStore memoryPolicyStore; - - @BeforeEach - void setUp() { - memoryPolicyStore = new MemoryPolicyStore(); - } - - @Test - void getResourceAccessRights() throws PMException { - memoryPolicyStore.graph().setResourceAccessRights(new AccessRightSet("read", "write")); - AccessRightSet resourceAccessRights = memoryPolicyStore.graph().getResourceAccessRights(); - resourceAccessRights.add("test"); - - assertFalse(memoryPolicyStore.graph().getResourceAccessRights().contains("test")); - } - - @Test - void getNode() throws PMException { - memoryPolicyStore.graph().createPolicyClass("pc1", NO_PROPERTIES); - Node pc1 = memoryPolicyStore.graph().getNode("pc1"); - pc1.getProperties().put("test", "test"); - - assertFalse(memoryPolicyStore.graph().getNode("pc1").getProperties().containsKey("test")); - } - - @Test - void getPolicyClasses() throws PMException { - memoryPolicyStore.graph().createPolicyClass("pc1", null); - memoryPolicyStore.graph().createPolicyClass("pc2", null); - List policyClasses = memoryPolicyStore.graph().getPolicyClasses(); - policyClasses.add("test"); - assertFalse(memoryPolicyStore.graph().getPolicyClasses().contains("test")); - } - - @Test - void getChildren() throws PMException { - memoryPolicyStore.graph().createPolicyClass("pc1", null); - memoryPolicyStore.graph().createObjectAttribute("oa1", "pc1"); - memoryPolicyStore.graph().createObjectAttribute("oa2", "pc1"); - memoryPolicyStore.graph().createObjectAttribute("oa3", "pc1"); - List children = memoryPolicyStore.graph().getChildren("pc1"); - children.add("test"); - assertFalse(memoryPolicyStore.graph().getChildren("pc1").contains("test")); - } - - @Test - void getParents() throws PMException { - memoryPolicyStore.graph().createPolicyClass("pc1", null); - memoryPolicyStore.graph().createObjectAttribute("oa1", "pc1"); - memoryPolicyStore.graph().createObjectAttribute("oa2", "pc1"); - memoryPolicyStore.graph().createObjectAttribute("oa3", "pc1"); - memoryPolicyStore.graph().createObject("o1", "oa1", "oa2", "oa3"); - List parents = memoryPolicyStore.graph().getParents("o1"); - parents.add("test"); - assertFalse(memoryPolicyStore.graph().getParents("o1").contains("test")); - } - - @Test - void getAssociationsWithSource() throws PMException { - memoryPolicyStore.graph().createPolicyClass("pc1", null); - memoryPolicyStore.graph().createUserAttribute("ua1", "pc1"); - memoryPolicyStore.graph().createObjectAttribute("oa1", "pc1"); - memoryPolicyStore.graph().associate("ua1", "oa1", new AccessRightSet()); - List assocs = memoryPolicyStore.graph().getAssociationsWithSource("ua1"); - assocs.clear(); - assertFalse(memoryPolicyStore.graph().getAssociationsWithSource("ua1").isEmpty()); - } - - @Test - void getAssociationsWithTarget() throws PMException { - memoryPolicyStore.graph().createPolicyClass("pc1", null); - memoryPolicyStore.graph().createUserAttribute("ua1", "pc1"); - memoryPolicyStore.graph().createObjectAttribute("oa1", "pc1"); - memoryPolicyStore.graph().associate("ua1", "oa1", new AccessRightSet()); - List assocs = memoryPolicyStore.graph().getAssociationsWithTarget("oa1"); - assocs.clear(); - assertFalse(memoryPolicyStore.graph().getAssociationsWithTarget("oa1").isEmpty()); - } - - @Test - void getProhibitions() throws PMException { - memoryPolicyStore.graph().createPolicyClass("pc1", null); - memoryPolicyStore.graph().createUserAttribute("ua1", "pc1"); - memoryPolicyStore.graph().createObjectAttribute("oa1", "pc1"); - memoryPolicyStore.prohibitions().create("label", ProhibitionSubject.userAttribute("ua1"), new AccessRightSet(), true, new ContainerCondition("oa1", false)); - Map> prohibitions = memoryPolicyStore.prohibitions().getAll(); - prohibitions.clear(); - assertEquals(1, memoryPolicyStore.prohibitions().getAll().size()); - prohibitions = memoryPolicyStore.prohibitions().getAll(); - Prohibition p = prohibitions.get("ua1").get(0); - p = new Prohibition("test", ProhibitionSubject.userAttribute("ua2"), new AccessRightSet("read"), false, Collections.singletonList(new ContainerCondition("oa2", true))); - Prohibition actual = memoryPolicyStore.prohibitions().getWithSubject("ua1").get(0); - assertEquals("label", actual.getLabel()); - assertEquals("ua1", actual.getSubject().getName()); - assertEquals(ProhibitionSubject.Type.USER_ATTRIBUTE, actual.getSubject().getType()); - assertEquals(new AccessRightSet(), actual.getAccessRightSet()); - assertTrue(actual.isIntersection()); - assertEquals(1, actual.getContainers().size()); - assertEquals(new ContainerCondition("oa1", false), actual.getContainers().get(0)); - } - - @Test - void getProhibitionsFor() throws PMException { - memoryPolicyStore.graph().createPolicyClass("pc1", null); - memoryPolicyStore.graph().createUserAttribute("ua1", "pc1"); - memoryPolicyStore.graph().createObjectAttribute("oa1", "pc1"); - memoryPolicyStore.prohibitions().create("label", ProhibitionSubject.userAttribute("ua1"), new AccessRightSet(), true, new ContainerCondition("oa1", false)); - List prohibitions = memoryPolicyStore.prohibitions().getWithSubject("ua1"); - prohibitions.clear(); - assertEquals(1, memoryPolicyStore.prohibitions().getAll().size()); - prohibitions = memoryPolicyStore.prohibitions().getWithSubject("ua1"); - Prohibition p = prohibitions.get(0); - p = new Prohibition("test", ProhibitionSubject.userAttribute("ua2"), new AccessRightSet("read"), false, Collections.singletonList(new ContainerCondition("oa2", true))); - Prohibition actual = memoryPolicyStore.prohibitions().getWithSubject("ua1").get(0); - assertEquals("label", actual.getLabel()); - assertEquals("ua1", actual.getSubject().getName()); - assertEquals(ProhibitionSubject.Type.USER_ATTRIBUTE, actual.getSubject().getType()); - assertEquals(new AccessRightSet(), actual.getAccessRightSet()); - assertTrue(actual.isIntersection()); - assertEquals(1, actual.getContainers().size()); - assertEquals(new ContainerCondition("oa1", false), actual.getContainers().get(0)); - } - - @Test - void getProhibition() throws PMException { - memoryPolicyStore.graph().createPolicyClass("pc1", null); - memoryPolicyStore.graph().createUserAttribute("ua1", "pc1"); - memoryPolicyStore.graph().createObjectAttribute("oa1", "pc1"); - memoryPolicyStore.prohibitions().create("label", ProhibitionSubject.userAttribute("ua1"), new AccessRightSet(), true, new ContainerCondition("oa1", false)); - Prohibition p = memoryPolicyStore.prohibitions().get("label"); - p = new Prohibition("test", ProhibitionSubject.userAttribute("ua2"), new AccessRightSet("read"), false, Collections.singletonList(new ContainerCondition("oa2", true))); - Prohibition actual = memoryPolicyStore.prohibitions().get("label"); - assertEquals("label", actual.getLabel()); - assertEquals("ua1", actual.getSubject().getName()); - assertEquals(ProhibitionSubject.Type.USER_ATTRIBUTE, actual.getSubject().getType()); - assertEquals(new AccessRightSet(), actual.getAccessRightSet()); - assertTrue(actual.isIntersection()); - assertEquals(1, actual.getContainers().size()); - assertEquals(new ContainerCondition("oa1", false), actual.getContainers().get(0)); - } - - @Test - void getObligations() throws PMException { - memoryPolicyStore.obligations().create( - new UserContext("test"), - "label", - new Rule( - "rule1", - new EventPattern( - EventSubject.anyUser(), - Performs.events("test_event") - ), - new Response( - new UserContext("test") - ) - ) - ); - List obligations = memoryPolicyStore.obligations().getAll(); - obligations.clear(); - assertEquals(1, memoryPolicyStore.obligations().getAll().size()); - } - - @Test - void getObligation() throws PMException { - Rule rule1 = new Rule( - "rule1", - new EventPattern( - EventSubject.anyUser(), - Performs.events("test_event") - ), - new Response( - new UserContext("test") - ) - ); - - memoryPolicyStore.obligations().create( - new UserContext("test"), - "label", - rule1 - ); - - Obligation obligation = memoryPolicyStore.obligations().get("label"); - assertEquals("label", obligation.getLabel()); - assertEquals(new UserContext("test"), obligation.getAuthor()); - assertEquals(1, obligation.getRules().size()); - assertEquals(rule1, obligation.getRules().get(0)); - } - - @Test - void testTx() throws PMException { - MemoryPolicyStore store = new MemoryPolicyStore(); - store.graph().createPolicyClass("pc1"); - try { - runTx(store, () -> { - store.graph().createObjectAttribute("oa1", "pc1"); - throw new PMException("test"); - }); - } catch (PMException e) { } - assertFalse(store.graph().nodeExists("oa1")); - } - - @Test - void testTx2() throws PMException { - MemoryPolicyStore store = new MemoryPolicyStore(); - store.graph().createPolicyClass("pc1"); - store.beginTx(); - store.graph().createObjectAttribute("oa1", "pc1"); - assertTrue(store.graph().nodeExists("oa1")); - store.rollback(); - assertFalse(store.graph().nodeExists("oa1")); - store.commit(); - assertFalse(store.graph().nodeExists("oa1")); - } -} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/memory/dag/BreadthFirstGraphWalkerTest.java b/src/test/java/gov/nist/csd/pm/pap/memory/dag/BreadthFirstGraphWalkerTest.java deleted file mode 100644 index 79775e243..000000000 --- a/src/test/java/gov/nist/csd/pm/pap/memory/dag/BreadthFirstGraphWalkerTest.java +++ /dev/null @@ -1,99 +0,0 @@ -package gov.nist.csd.pm.pap.memory.dag; - -import gov.nist.csd.pm.pap.PAP; -import gov.nist.csd.pm.pap.memory.MemoryPolicyStore; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.graph.dag.walker.Direction; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; - -import java.util.ArrayList; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.*; - -class BreadthFirstGraphWalkerTest { - - static PAP pap; - - @BeforeAll - static void setup() throws PMException { - pap = new PAP(new MemoryPolicyStore()); - pap.graph().createPolicyClass("pc1"); - pap.graph().createObjectAttribute("oa1", "pc1"); - - pap.graph().createObjectAttribute("oa1-1", "oa1"); - pap.graph().createObjectAttribute("oa1-1-1", "oa1-1"); - pap.graph().createObjectAttribute("oa1-1-2", "oa1-1"); - pap.graph().createObjectAttribute("oa1-1-3", "oa1-1"); - - pap.graph().createObjectAttribute("oa1-2", "oa1"); - pap.graph().createObjectAttribute("oa1-2-1", "oa1-2"); - pap.graph().createObjectAttribute("oa1-2-2", "oa1-2"); - pap.graph().createObjectAttribute("oa1-2-3", "oa1-2"); - } - - @Test - void testWalk() throws PMException { - List visited = new ArrayList<>(); - BreadthFirstGraphWalker bfs = new BreadthFirstGraphWalker(pap.graph()) - .withDirection(Direction.CHILDREN) - .withVisitor(node -> { - visited.add(node); - }); - bfs.walk("pc1"); - List expected = List.of( - "pc1", - "oa1", - "oa1-1", - "oa1-2", - "oa1-1-1", - "oa1-1-2", - "oa1-1-3", - "oa1-2-1", - "oa1-2-2", - "oa1-2-3" - ); - - assertEquals(expected, visited); - } - - @Test - void testAllPathsShortCircuit() throws PMException { - List visited = new ArrayList<>(); - BreadthFirstGraphWalker bfs = new BreadthFirstGraphWalker(pap.graph()) - .withDirection(Direction.CHILDREN) - .withVisitor(node -> { - visited.add(node); - }) - .withAllPathShortCircuit(node -> node.equals("oa1-2")); - - bfs.walk("pc1"); - List expected = List.of("pc1", "oa1", "oa1-1", "oa1-2"); - assertEquals(expected, visited); - - visited.clear(); - bfs = new BreadthFirstGraphWalker(pap.graph()) - .withDirection(Direction.CHILDREN) - .withVisitor(visited::add) - .withAllPathShortCircuit(node -> node.equals("oa1-1-1")); - - bfs.walk("pc1"); - expected = List.of("pc1", "oa1", "oa1-1", "oa1-2", "oa1-1-1"); - assertEquals(expected, visited); - } - - @Test - void testSinglePathShortCircuit() throws PMException { - List visited = new ArrayList<>(); - BreadthFirstGraphWalker bfs = new BreadthFirstGraphWalker(pap.graph()) - .withDirection(Direction.CHILDREN) - .withVisitor(visited::add) - .withSinglePathShortCircuit(node -> node.equals("oa1-1-1")); - - bfs.walk("pc1"); - List expected = List.of("pc1", "oa1", "oa1-1", "oa1-2", "oa1-1-1", - "oa1-2-1", "oa1-2-2", "oa1-2-3"); - assertEquals(expected, visited); - } -} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/modification/GraphModifierTest.java b/src/test/java/gov/nist/csd/pm/pap/modification/GraphModifierTest.java new file mode 100644 index 000000000..b9e8282c2 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/modification/GraphModifierTest.java @@ -0,0 +1,882 @@ +package gov.nist.csd.pm.pap.modification; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.graph.relationship.Association; +import gov.nist.csd.pm.pap.graph.relationship.InvalidAssignmentException; +import gov.nist.csd.pm.pap.graph.relationship.InvalidAssociationException; +import gov.nist.csd.pm.pap.obligation.EventPattern; +import gov.nist.csd.pm.pap.obligation.Response; +import gov.nist.csd.pm.pap.obligation.Rule; +import gov.nist.csd.pm.pap.prohibition.ContainerCondition; +import gov.nist.csd.pm.pap.prohibition.ProhibitionSubject; +import gov.nist.csd.pm.pap.PAPTestInitializer; +import gov.nist.csd.pm.pap.exception.*; +import gov.nist.csd.pm.pap.pml.pattern.OperationPattern; +import gov.nist.csd.pm.pap.pml.pattern.subject.InSubjectPattern; +import gov.nist.csd.pm.pap.pml.pattern.subject.SubjectPattern; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +import java.util.*; + +import static gov.nist.csd.pm.pap.graph.node.Properties.NO_PROPERTIES; +import static gov.nist.csd.pm.pap.graph.node.Properties.toProperties; +import static gov.nist.csd.pm.pap.op.AdminAccessRights.*; +import static gov.nist.csd.pm.pap.op.AdminAccessRights.ALL_ADMIN_ACCESS_RIGHTS; +import static org.junit.jupiter.api.Assertions.*; + +public abstract class GraphModifierTest extends PAPTestInitializer { + + @Nested + class CreatePolicyClassTest { + @Test + void testNodeNameExistsException() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + assertDoesNotThrow(() -> pap.modify().graph().createPolicyClass("pc2")); + assertThrows(NodeNameExistsException.class, () -> pap.modify().graph().createPolicyClass("pc1")); + } + + @Test + void testSuccess() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + assertTrue(pap.query().graph().nodeExists("pc1")); + } + + @Test + void testTx() throws PMException { + pap.runTx(tx -> { + PolicyModifier modify = pap.modify(); + modify.graph().createPolicyClass("pc1"); + }); + assertThrows(PMException.class, () -> pap.runTx(tx -> { + PolicyModifier modify = pap.modify(); + modify.graph().createPolicyClass("pc2"); + modify.graph().createPolicyClass("pc3"); + throw new PMException(""); + })); + assertTrue(pap.query().graph().nodeExists("pc1")); + assertFalse(pap.query().graph().nodeExists("pc2")); + assertFalse(pap.query().graph().nodeExists("pc3")); + } + } + + @Nested + class CreateObjectAttribute { + + @Test + void testNodeNameExistsException() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + assertThrows(NodeNameExistsException.class, + () -> pap.modify().graph().createObjectAttribute("oa1", List.of("pc1"))); + } + + @Test + void testNodeDoesNotExistException() throws PMException { + assertThrows( + NodeDoesNotExistException.class, + () -> pap.modify().graph().createObjectAttribute("oa1", List.of("pc1"))); + + pap.modify().graph().createPolicyClass("pc1"); + + assertThrows(NodeDoesNotExistException.class, + () -> pap.modify().graph().createObjectAttribute("oa1", List.of("pc1", "pc2"))); + } + + @Test + void testInvalidAssignmentException() + throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + + assertThrows( + InvalidAssignmentException.class, + () -> pap.modify().graph().createObjectAttribute("oa1", List.of("ua1"))); + } + + @Test + void testAssignmentCausesLoopException() + throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + pap.modify().graph().createObjectAttribute("oa2", List.of("oa1")); + + assertThrows( + AssignmentCausesLoopException.class, + () -> pap.modify().graph().createObjectAttribute("oa3", List.of("oa3"))); + assertThrows(AssignmentCausesLoopException.class, + () -> pap.modify().graph().createObjectAttribute("oa3", List.of("oa2", "oa3"))); + } + + @Test + void Success() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + pap.modify().graph().createObjectAttribute("oa2", List.of("oa1")); + pap.modify().graph().setNodeProperties("oa2", toProperties("k", "v")); + + assertTrue(pap.query().graph().nodeExists("oa1")); + assertTrue(pap.query().graph().nodeExists("oa2")); + assertEquals("v", pap.query().graph().getNode("oa2").getProperties().get("k")); + + assertTrue(pap.query().graph().getAdjacentAscendants("pc1").contains("oa1")); + assertTrue(pap.query().graph().getAdjacentAscendants("oa1").contains("oa2")); + + assertTrue(pap.query().graph().getAdjacentDescendants("oa1").contains("pc1")); + assertTrue(pap.query().graph().getAdjacentDescendants("oa2").contains("oa1")); + } + + @Test + void testNoAssignments() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + assertThrows(DisconnectedNodeException.class, () -> pap.modify().graph().createObjectAttribute("oa1", List.of())); + } + + @Test + void testTx() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.runTx(tx -> { + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + }); + assertThrows(PMException.class, () -> pap.runTx(tx -> { + PolicyModifier modify = pap.modify(); + pap.modify().graph().createObjectAttribute("oa2", List.of("pc1")); + pap.modify().graph().createObjectAttribute("oa3", List.of("pc1")); + throw new PMException(""); + })); + assertTrue(pap.query().graph().nodeExists("oa1")); + assertFalse(pap.query().graph().nodeExists("oa2")); + assertFalse(pap.query().graph().nodeExists("oa3")); + } + } + + @Nested + class CreateUserAttributeTest { + + @Test + void testNodeNameExistsException() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + assertThrows(NodeNameExistsException.class, + () -> pap.modify().graph().createObjectAttribute("ua1", List.of("pc1"))); + } + + @Test + void testNodeDoesNotExistException() throws PMException { + assertThrows(NodeDoesNotExistException.class, + () -> pap.modify().graph().createUserAttribute("ua1", List.of("pc1"))); + + pap.modify().graph().createPolicyClass("pc1"); + + assertThrows(NodeDoesNotExistException.class, + () -> pap.modify().graph().createUserAttribute("ua1", List.of("pc1", "pc2"))); + } + + @Test + void testInvalidAssignmentException() + throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + + assertThrows(InvalidAssignmentException.class, + () -> pap.modify().graph().createUserAttribute("ua1", List.of("oa1"))); + } + + @Test + void testAssignmentCausesLoopException() + throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.modify().graph().createUserAttribute("ua2", List.of("ua1")); + + assertThrows(AssignmentCausesLoopException.class, + () -> pap.modify().graph().createUserAttribute("ua3", List.of("ua3"))); + assertThrows(AssignmentCausesLoopException.class, + () -> pap.modify().graph().createUserAttribute("ua3", List.of("ua2", "ua3"))); + } + + @Test + void Success() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.modify().graph().createUserAttribute("ua2", List.of("ua1")); + pap.modify().graph().setNodeProperties("ua2", toProperties("k", "v")); + + assertTrue(pap.query().graph().nodeExists("ua1")); + assertTrue(pap.query().graph().nodeExists("ua2")); + assertEquals("v", pap.query().graph().getNode("ua2").getProperties().get("k")); + + assertTrue(pap.query().graph().getAdjacentAscendants("pc1").contains("ua1")); + assertTrue(pap.query().graph().getAdjacentDescendants("ua1").contains("pc1")); + + assertTrue(pap.query().graph().getAdjacentAscendants("ua1").contains("ua2")); + assertTrue(pap.query().graph().getAdjacentDescendants("ua2").contains("ua1")); + } + + @Test + void testTx() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.runTx(tx -> { + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + }); + assertThrows(PMException.class, () -> pap.runTx(tx -> { + pap.modify().graph().createUserAttribute("ua2", List.of("pc1")); + pap.modify().graph().createUserAttribute("ua3", List.of("pc1")); + throw new PMException(""); + })); + assertTrue(pap.query().graph().nodeExists("ua1")); + assertFalse(pap.query().graph().nodeExists("ua2")); + assertFalse(pap.query().graph().nodeExists("ua3")); + } + } + + @Nested + class CreateObjectTest { + + @Test + void testNodeNameExistsException() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + pap.modify().graph().createObject("o1", List.of("oa1")); + assertThrows(NodeNameExistsException.class, + () -> pap.modify().graph().createObject("o1", List.of("oa1"))); + } + + @Test + void testNodeDoesNotExistException() throws PMException { + assertThrows(NodeDoesNotExistException.class, + () -> pap.modify().graph().createObject("o1", List.of("oa1"))); + + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + + assertThrows(NodeDoesNotExistException.class, + () -> pap.modify().graph().createObjectAttribute("o1", List.of("oa1", "oa2"))); + } + + @Test + void testInvalidAssignmentException() + throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + + assertThrows(InvalidAssignmentException.class, + () -> pap.modify().graph().createObjectAttribute("o1", List.of("ua1"))); + } + + @Test + void testAssignmentCausesLoopException() + throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + + assertThrows(AssignmentCausesLoopException.class, + () -> pap.modify().graph().createObject("o1", List.of("o1"))); + assertThrows(AssignmentCausesLoopException.class, + () -> pap.modify().graph().createObject("o1", List.of("oa1", "o1"))); + } + + @Test + void Success() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + + pap.modify().graph().createObject("o1", List.of("oa1")); + pap.modify().graph().setNodeProperties("o1", toProperties("k", "v")); + + assertTrue(pap.query().graph().nodeExists("o1")); + assertEquals("v", pap.query().graph().getNode("o1").getProperties().get("k")); + + assertTrue(pap.query().graph().getAdjacentAscendants("oa1").contains("o1")); + assertTrue(pap.query().graph().getAdjacentDescendants("o1").contains("oa1")); + assertTrue(pap.query().graph().getAdjacentAscendants("oa1").contains("o1")); + } + + @Test + void testTx() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + pap.runTx(tx -> { + pap.modify().graph().createObject("o1", List.of("oa1")); + }); + assertThrows(PMException.class, () -> pap.runTx(tx -> { + pap.modify().graph().createUserAttribute("o2", List.of("oa1")); + pap.modify().graph().createUserAttribute("o3", List.of("oa1")); + throw new PMException(""); + })); + assertTrue(pap.query().graph().nodeExists("o1")); + assertFalse(pap.query().graph().nodeExists("o2")); + assertFalse(pap.query().graph().nodeExists("o3")); + } + } + + @Nested + class CreateUserTest { + + @Test + void testNodeNameExistsException() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.modify().graph().createUser("u1", List.of("ua1")); + assertThrows(NodeNameExistsException.class, + () -> pap.modify().graph().createUser("u1", List.of("ua1"))); + } + + @Test + void testNodeDoesNotExistException() throws PMException { + assertThrows(NodeDoesNotExistException.class, + () -> pap.modify().graph().createUser("u1", List.of("ua1"))); + + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + + assertThrows(NodeDoesNotExistException.class, + () -> pap.modify().graph().createUser("u1", List.of("ua1", "ua2"))); + } + + @Test + void testInvalidAssignmentException() + throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + + assertThrows(InvalidAssignmentException.class, + () -> pap.modify().graph().createUser("u1", List.of("oa1"))); + } + + @Test + void testAssignmentCausesLoopException() + throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + + assertThrows(AssignmentCausesLoopException.class, + () -> pap.modify().graph().createUser("u1", List.of("u1"))); + assertThrows(AssignmentCausesLoopException.class, + () -> pap.modify().graph().createUser("u1", List.of("ua1", "u1"))); + } + + @Test + void Success() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + + pap.modify().graph().createUser("u1", List.of("ua1")); + pap.modify().graph().setNodeProperties("u1", toProperties("k", "v")); + + assertTrue(pap.query().graph().nodeExists("u1")); + assertEquals("v", pap.query().graph().getNode("u1").getProperties().get("k")); + + assertTrue(pap.query().graph().getAdjacentAscendants("ua1").contains("u1")); + assertTrue(pap.query().graph().getAdjacentDescendants("u1").contains("ua1")); + assertTrue(pap.query().graph().getAdjacentAscendants("ua1").contains("u1")); + } + + @Test + void testTx() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.runTx(tx -> { + pap.modify().graph().createUser("u1", List.of("ua1")); + }); + assertThrows(PMException.class, () -> pap.runTx(tx -> { + pap.modify().graph().createUser("u2", List.of("ua1")); + pap.modify().graph().createUser("u3", List.of("ua1")); + throw new PMException(""); + })); + assertTrue(pap.query().graph().nodeExists("u1")); + assertFalse(pap.query().graph().nodeExists("u2")); + assertFalse(pap.query().graph().nodeExists("u3")); + } + } + + @Nested + class SetNodePropertiesTest { + + @Test + void testNodeDoesNotExistException() { + assertThrows(NodeDoesNotExistException.class, + () -> pap.modify().graph().setNodeProperties("oa1", NO_PROPERTIES)); + } + + @Test + void testSuccessEmptyProperties() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().setNodeProperties("pc1", NO_PROPERTIES); + + assertTrue(pap.query().graph().getNode("pc1").getProperties().isEmpty()); + } + + @Test + void testSuccess() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().setNodeProperties("pc1", toProperties("k", "v")); + + assertEquals("v", pap.query().graph().getNode("pc1").getProperties().get("k")); + } + + @Test + void testTx() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.runTx(tx -> { + pap.modify().graph().createUser("u1", List.of("ua1")); + }); + assertThrows(PMException.class, () -> pap.runTx(tx -> { + pap.modify().graph().createUser("u2", List.of("ua1")); + pap.modify().graph().createUser("u3", List.of("ua1")); + throw new PMException(""); + })); + assertTrue(pap.query().graph().nodeExists("u1")); + assertFalse(pap.query().graph().nodeExists("u2")); + assertFalse(pap.query().graph().nodeExists("u3")); + } + } + + @Nested + class DeleteNodeTest { + + @Test + void testNodeDoesNotExistDoesNotThrowException() { + assertDoesNotThrow(() -> pap.modify().graph().deleteNode("pc1")); + } + + @Test + void testNodeHasAscendantsException() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + + assertThrows( + NodeHasAscendantsException.class, + () -> pap.modify().graph().deleteNode("pc1")); + } + + @Test + void DeleteNodeWithProhibitionsAndObligations() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.modify().graph().createUserAttribute("ua2", List.of("pc1")); + pap.modify().graph().createUser("u1", List.of("ua2")); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + pap.modify().prohibitions().createProhibition("pro1", ProhibitionSubject.userAttribute("ua1"), + new AccessRightSet(), true, Collections.singleton(new ContainerCondition("oa1", true)) + ); + + assertThrows(NodeReferencedInProhibitionException.class, + () -> pap.modify().graph().deleteNode("ua1")); + assertThrows(NodeReferencedInProhibitionException.class, + () -> pap.modify().graph().deleteNode("oa1")); + + pap.modify().prohibitions().deleteProhibition("pro1"); + pap.modify().obligations().createObligation("u1", "oblLabel", + List.of(new Rule( + "rule1", + new EventPattern( + new SubjectPattern(new InSubjectPattern("ua1")), + new OperationPattern("event1") + ), + new Response("evtCtx", List.of()) + ), + new Rule( + "rule1", + new EventPattern( + new SubjectPattern(new InSubjectPattern("ua1")), + new OperationPattern("event1") + ), + new Response("evtCtx", List.of()) + )) + ); + + assertThrows(NodeReferencedInObligationException.class, + () -> pap.modify().graph().deleteNode("ua1")); + } + + @Test + void testSuccessPolicyClass() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().deleteNode("pc1"); + assertFalse(pap.query().graph().nodeExists("pc1")); + } + + @Test + void testSuccessObjectAttribute() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + + pap.modify().graph().deleteNode("oa1"); + + assertFalse(pap.query().graph().nodeExists("oa1")); + } + + @Test + void testTx() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.modify().graph().createUserAttribute("ua2", List.of("pc1")); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + pap.modify().graph().associate("ua2", "oa1", new AccessRightSet("*")); + + pap.runTx(tx -> { + pap.modify().graph().deleteNode("ua1"); + }); + assertThrows(PMException.class, () -> pap.runTx(tx -> { + pap.modify().graph().deleteNode("ua2"); + throw new PMException(""); + })); + assertTrue(pap.query().graph().nodeExists("ua2")); + assertTrue(pap.query().graph().isAscendant("ua2", "pc1")); + assertTrue(pap.query().graph().getAssociationsWithSource("ua2").contains(new Association("ua2", "oa1", new AccessRightSet("*")))); + assertFalse(pap.query().graph().nodeExists("ua1")); + } + } + + @Nested + class AssignTest { + + @Test + void testAscNodeDoesNotExistException() { + assertThrows(NodeDoesNotExistException.class, + () -> pap.modify().graph().assign("oa1", List.of("pc1"))); + } + + @Test + void testDescNodeDoesNotExistException() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + assertThrows(NodeDoesNotExistException.class, + () -> pap.modify().graph().assign("oa1", List.of("oa2"))); + } + + @Test + void testAssignmentExistsDoesNothing() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + assertDoesNotThrow(() -> pap.modify().graph().assign("oa1", List.of("pc1"))); + } + + @Test + void testInvalidAssignmentException() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + + assertThrows(InvalidAssignmentException.class, + () -> pap.modify().graph().assign("ua1", List.of("oa1"))); + } + + @Test + void testAssignmentCausesLoopException() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + pap.modify().graph().createObjectAttribute("oa2", List.of("oa1")); + pap.modify().graph().createObjectAttribute("oa3", List.of("oa2")); + + assertThrows(AssignmentCausesLoopException.class, () -> + pap.modify().graph().assign("oa1", List.of("oa2"))); + assertThrows(AssignmentCausesLoopException.class, () -> + pap.modify().graph().assign("oa1", List.of("oa1"))); + assertThrows(AssignmentCausesLoopException.class, () -> + pap.modify().graph().assign("oa1", List.of("oa3"))); + } + + @Test + void testSuccess() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + pap.modify().graph().createObjectAttribute("oa2", List.of("pc1")); + pap.modify().graph().assign("oa2", List.of("oa1")); + assertTrue(pap.query().graph().getAdjacentDescendants("oa2").contains("oa1")); + assertTrue(pap.query().graph().getAdjacentAscendants("oa1").contains("oa2")); + } + + @Test + void testTx() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.modify().graph().createUserAttribute("ua2", List.of("pc1")); + pap.modify().graph().createUserAttribute("ua3", List.of("pc1")); + pap.modify().graph().createUserAttribute("ua4", List.of("pc1")); + + pap.runTx(tx -> { + pap.modify().graph().assign("ua4", Collections.singleton("ua1")); + pap.modify().graph().assign("ua4", Collections.singleton("ua2")); + }); + assertThrows(PMException.class, () -> pap.runTx(tx -> { + pap.modify().graph().assign("ua4", Collections.singleton("ua3")); + throw new PMException(""); + })); + + assertTrue(pap.query().graph().isAscendant("ua4", "ua1")); + assertTrue(pap.query().graph().isAscendant("ua4", "ua2")); + assertFalse(pap.query().graph().isAscendant("ua4", "ua3")); + } + } + + @Nested + class DeassignTest { + + @Test + void testAscNodeDoesNotExistException() { + assertThrows(NodeDoesNotExistException.class, () -> + pap.modify().graph().deassign("oa1", List.of("pc1"))); + } + + @Test + void testDescNodeDoesNotExistException() throws PMException{ + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + + assertThrows(NodeDoesNotExistException.class, () -> + pap.modify().graph().deassign("oa1", List.of("oa2"))); + } + + @Test + void AssignmentDoesNotExistDoesNothing() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + pap.modify().graph().createObjectAttribute("oa2", List.of("pc1")); + pap.modify().graph().deassign("oa1", List.of("oa2")); + } + + @Test + void testDisconnectedNode() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + + assertThrows(DisconnectedNodeException.class, + () -> pap.modify().graph().deassign("oa1", List.of("pc1"))); + } + + @Test + void Success() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createPolicyClass("pc2"); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1", "pc2")); + pap.modify().graph().deassign("oa1", List.of("pc1")); + assertTrue(pap.query().graph().getAdjacentDescendants("oa1").contains("pc2")); + assertFalse(pap.query().graph().getAdjacentDescendants("oa1").contains("pc1")); + assertFalse(pap.query().graph().getAdjacentAscendants("pc1").contains("oa1")); + } + + @Test + void testTx() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.modify().graph().createUserAttribute("ua2", List.of("pc1")); + pap.modify().graph().createUserAttribute("ua3", List.of("pc1")); + pap.modify().graph().createUserAttribute("ua4", List.of("ua1", "ua2", "ua3")); + + pap.runTx(tx -> { + pap.modify().graph().deassign("ua4", Collections.singleton("ua1")); + pap.modify().graph().deassign("ua4", Collections.singleton("ua2")); + }); + assertThrows(PMException.class, () -> pap.runTx(tx -> { + pap.modify().graph().deassign("ua4", Collections.singleton("ua3")); + throw new PMException(""); + })); + + assertFalse(pap.query().graph().isAscendant("ua4", "ua1")); + assertFalse(pap.query().graph().isAscendant("ua4", "ua2")); + assertTrue(pap.query().graph().isAscendant("ua4", "ua3")); + } + + } + + @Nested + class AssociateTest { + + @Test + void testUANodeDoesNotExistException() { + assertThrows(NodeDoesNotExistException.class, + () -> pap.modify().graph().associate("ua1", "oa1", new AccessRightSet())); + } + + @Test + void testTargetNodeDoesNotExistException() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + + assertThrows(NodeDoesNotExistException.class, + () -> pap.modify().graph().associate("ua1", "oa1", new AccessRightSet())); + } + + @Test + void testAssignmentExistsDoesNotThrowException() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.modify().graph().createUserAttribute("ua2", List.of("ua1")); + assertDoesNotThrow(() -> pap.modify().graph().associate("ua2", "ua1", new AccessRightSet())); + } + + @Test + void testUnknownAccessRightException() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + assertThrows(UnknownAccessRightException.class, + () -> pap.modify().graph().associate("ua1", "oa1", new AccessRightSet("read"))); + pap.modify().operations().setResourceOperations(new AccessRightSet("read")); + assertThrows(UnknownAccessRightException.class, + () -> pap.modify().graph().associate("ua1", "oa1", new AccessRightSet("write"))); + assertDoesNotThrow(() -> pap.modify().graph().associate("ua1", "oa1", new AccessRightSet("read"))); + assertDoesNotThrow(() -> pap.modify().graph().associate("ua1", "oa1", new AccessRightSet(ALL_ACCESS_RIGHTS))); + assertDoesNotThrow(() -> pap.modify().graph().associate("ua1", "oa1", new AccessRightSet(ALL_RESOURCE_ACCESS_RIGHTS))); + assertDoesNotThrow(() -> pap.modify().graph().associate("ua1", "oa1", new AccessRightSet(ALL_ADMIN_ACCESS_RIGHTS))); + } + + @Test + void testInvalidAssociationException() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.modify().graph().createUserAttribute("ua2", List.of("ua1")); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + pap.modify().graph().createObjectAttribute("oa2", List.of("pc1")); + + assertThrows( + InvalidAssociationException.class, + () -> pap.modify().graph().associate("ua2", "pc1", new AccessRightSet())); + assertThrows(InvalidAssociationException.class, + () -> pap.modify().graph().associate("oa1", "oa2", new AccessRightSet())); + } + + @Test + void testSuccess() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + + pap.modify().operations().setResourceOperations(new AccessRightSet("read", "write")); + pap.modify().graph().associate("ua1", "oa1", new AccessRightSet("read")); + + assertEquals( + new Association("ua1", "oa1", new AccessRightSet("read")), + pap.query().graph().getAssociationsWithSource("ua1").iterator().next() + ); + assertEquals( + new Association("ua1", "oa1", new AccessRightSet("read")), + pap.query().graph().getAssociationsWithTarget("oa1").iterator().next() + ); + } + + @Test + void testOverwriteSuccess() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + + pap.modify().operations().setResourceOperations(new AccessRightSet("read", "write")); + pap.modify().graph().associate("ua1", "oa1", new AccessRightSet("read")); + + Collection assocs = pap.query().graph().getAssociationsWithSource("ua1"); + Association assoc = assocs.iterator().next(); + assertEquals("ua1", assoc.getSource()); + assertEquals("oa1", assoc.getTarget()); + assertEquals(new AccessRightSet("read"), assoc.getAccessRightSet()); + + pap.modify().graph().associate("ua1", "oa1", new AccessRightSet("read", "write")); + + assocs = pap.query().graph().getAssociationsWithSource("ua1"); + assoc = assocs.iterator().next(); + assertEquals("ua1", assoc.getSource()); + assertEquals("oa1", assoc.getTarget()); + assertEquals(new AccessRightSet("read", "write"), assoc.getAccessRightSet()); + } + + @Test + void testTx() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.modify().graph().createUserAttribute("ua2", List.of("pc1")); + pap.modify().graph().createUserAttribute("ua3", List.of("pc1")); + pap.modify().graph().createUserAttribute("ua4", List.of("ua1", "ua2", "ua3")); + + pap.runTx(tx -> { + pap.modify().graph().associate("ua4", "ua1", new AccessRightSet("*")); + pap.modify().graph().associate("ua4", "ua2", new AccessRightSet("*")); + }); + assertThrows(PMException.class, () -> pap.runTx(tx -> { + pap.modify().graph().associate("ua4", "ua3", new AccessRightSet("*")); + throw new PMException(""); + })); + + assertTrue(pap.query().graph().getAssociationsWithSource("ua4").containsAll(List.of( + new Association("ua4", "ua1", new AccessRightSet("*")), + new Association("ua4", "ua2", new AccessRightSet("*")) + ))); + assertFalse(pap.query().graph().getAssociationsWithSource("ua4").contains( + new Association("ua4", "ua3", new AccessRightSet("*")) + )); + } + } + + @Nested + class DissociateTest { + + @Test + void testUANodeDoesNotExistException() { + assertThrows(NodeDoesNotExistException.class, () -> pap.modify().graph().dissociate("ua1", "oa1")); + } + + @Test + void testTargetNodeDoesNotExistException() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + + assertThrows(NodeDoesNotExistException.class, () -> pap.modify().graph().dissociate("ua1", "oa2")); + } + + @Test + void testAssociationDoesNotExistDoesNotThrowException() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + + assertDoesNotThrow(() -> pap.modify().graph().dissociate("ua1", "oa1")); + } + + @Test + void testSuccess() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.modify().graph().associate("ua1", "oa1", new AccessRightSet()); + + pap.modify().graph().dissociate("ua1", "oa1"); + + assertTrue(pap.query().graph().getAssociationsWithSource("ua1").isEmpty()); + assertTrue(pap.query().graph().getAssociationsWithTarget("oa1").isEmpty()); + } + + @Test + void testTx() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.modify().graph().createUserAttribute("ua2", List.of("pc1")); + pap.modify().graph().createUserAttribute("ua3", List.of("pc1")); + pap.modify().graph().createUserAttribute("ua4", List.of("ua1", "ua2", "ua3")); + + pap.modify().graph().associate("ua4", "ua1", new AccessRightSet("*")); + pap.modify().graph().associate("ua4", "ua2", new AccessRightSet("*")); + pap.modify().graph().associate("ua4", "ua3", new AccessRightSet("*")); + + pap.runTx(tx -> { + pap.modify().graph().dissociate("ua4", "ua1"); + pap.modify().graph().dissociate("ua4", "ua2"); + }); + assertThrows(PMException.class, () -> pap.runTx(tx -> { + pap.modify().graph().dissociate("ua4", "ua3"); + throw new PMException(""); + })); + + assertFalse(pap.query().graph().getAssociationsWithSource("ua4").containsAll(List.of( + new Association("ua4", "ua1", new AccessRightSet("*")), + new Association("ua4", "ua2", new AccessRightSet("*")) + ))); + assertTrue(pap.query().graph().getAssociationsWithSource("ua4").contains( + new Association("ua4", "ua3", new AccessRightSet("*")) + )); + } + } +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/modification/ObligationsModifierTest.java b/src/test/java/gov/nist/csd/pm/pap/modification/ObligationsModifierTest.java new file mode 100644 index 000000000..1be2ee510 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/modification/ObligationsModifierTest.java @@ -0,0 +1,323 @@ +package gov.nist.csd.pm.pap.modification; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.obligation.EventPattern; +import gov.nist.csd.pm.pap.obligation.Obligation; +import gov.nist.csd.pm.pap.obligation.Response; +import gov.nist.csd.pm.pap.obligation.Rule; +import gov.nist.csd.pm.pap.PAPTestInitializer; +import gov.nist.csd.pm.pap.exception.NodeDoesNotExistException; +import gov.nist.csd.pm.pap.exception.ObligationDoesNotExistException; +import gov.nist.csd.pm.pap.exception.ObligationNameExistsException; +import gov.nist.csd.pm.pap.pml.expression.literal.StringLiteral; +import gov.nist.csd.pm.pap.pml.pattern.OperationPattern; +import gov.nist.csd.pm.pap.pml.pattern.operand.InOperandPattern; +import gov.nist.csd.pm.pap.pml.pattern.operand.NodeOperandPattern; +import gov.nist.csd.pm.pap.pml.pattern.subject.InSubjectPattern; +import gov.nist.csd.pm.pap.pml.pattern.subject.SubjectPattern; +import gov.nist.csd.pm.pap.pml.pattern.subject.UsernamePattern; +import gov.nist.csd.pm.pap.pml.statement.operation.CreatePolicyStatement; +import gov.nist.csd.pm.pap.query.UserContext; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +import java.io.IOException; +import java.util.List; +import java.util.Map; + +import static gov.nist.csd.pm.util.SamplePolicy.loadSamplePolicyFromPML; +import static org.junit.jupiter.api.Assertions.*; + +public abstract class ObligationsModifierTest extends PAPTestInitializer { + + public static Obligation obligation1 = new Obligation( + "u1", + "obl1", + List.of( + new Rule( + "rule1", + new EventPattern( + new SubjectPattern(), + new OperationPattern("test_event") + ), + new Response("evtCtx", List.of( + new CreatePolicyStatement(new StringLiteral("test_pc")) + )) + ) + ) + ); + + public static Obligation obligation2 = new Obligation( + "u1", + "label2") + .addRule( + new Rule( + "rule1", + new EventPattern( + new SubjectPattern(), + new OperationPattern("test_event") + ), + new Response("evtCtx", List.of( + new CreatePolicyStatement(new StringLiteral("test_pc")) + )) + ) + ).addRule( + new Rule( + "rule2", + new EventPattern( + new SubjectPattern(), + new OperationPattern("test_event") + ), + new Response("evtCtx", List.of( + new CreatePolicyStatement(new StringLiteral("test_pc")) + )) + ) + ); + + + @Nested + class CreateObligation { + + @Test + void testObligationNameExistsException() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.modify().graph().createUser("u1", List.of("ua1")); + + pap.modify().obligations().createObligation(obligation1.getAuthor(), obligation1.getName(), obligation1.getRules()); + + assertThrows(ObligationNameExistsException.class, () -> pap.modify().obligations().createObligation(obligation1.getAuthor(), obligation1.getName(), obligation1.getRules())); + } + + @Test + void testAuthorNodeDoestNotExistException() { + assertThrows(NodeDoesNotExistException.class, + () -> pap.modify().obligations().createObligation("u1", obligation1.getName(), + obligation1.getRules())); + } + + @Test + void testEventSubjectNodeDoesNotExistException() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.modify().graph().createUser("u1", List.of("ua1")); + + assertThrows(NodeDoesNotExistException.class, + () -> pap.modify().obligations().createObligation( + "u1", + "obl1", + List.of(new Rule( + "rule1", + new EventPattern( + new SubjectPattern(new InSubjectPattern("ua2")), + new OperationPattern("test_event") + ), + new Response("evtCtx", List.of()) + )) + )); + assertThrows(NodeDoesNotExistException.class, + () -> pap.modify().obligations().createObligation( + "u1", + "obl1", + List.of(new Rule( + "rule1", + new EventPattern( + new SubjectPattern(new InSubjectPattern("ua3")), + new OperationPattern("test_event") + ), + new Response("evtCtx", List.of()) + )) + )); + } + + @Test + void testEventTargetNodeDoesNotExistException() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.modify().graph().createUser("u1", List.of("ua1")); + + assertThrows(NodeDoesNotExistException.class, + () -> pap.modify().obligations().createObligation( + "u1", + "obl1", + List.of(new Rule( + "rule1", + new EventPattern( + new SubjectPattern(new UsernamePattern("u1")), + new OperationPattern("test_event"), + Map.of("", List.of(new NodeOperandPattern("oa1"))) + ), + new Response("evtCtx", List.of()) + )) + )); + assertThrows(NodeDoesNotExistException.class, + () -> pap.modify().obligations().createObligation( + "u1", + "obl1", + List.of(new Rule( + "rule1", + new EventPattern( + new SubjectPattern(new UsernamePattern("u1")), + new OperationPattern("test_event"), + Map.of("", List.of(new NodeOperandPattern("oa1"))) + ), + new Response("evtCtx", List.of()) + )) + )); + assertThrows(NodeDoesNotExistException.class, + () -> pap.modify().obligations().createObligation( + "u1", + "obl1", + List.of(new Rule( + "rule1", + new EventPattern( + new SubjectPattern(new UsernamePattern("u1")), + new OperationPattern("test_event"), + Map.of("", List.of(new InOperandPattern("oa1"))) + ), + new Response("evtCtx", List.of()) + )) + )); + } + + @Test + void testSuccess() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.modify().graph().createUser("u1", List.of("ua1")); + + pap.modify().obligations().createObligation(obligation1.getAuthor(), obligation1.getName(), obligation1.getRules()); + + assertThrows(ObligationNameExistsException.class, + () -> pap.modify().obligations().createObligation(obligation1.getAuthor(), obligation1.getName(), List.of())); + + Obligation actual = pap.query().obligations().getObligation(obligation1.getName()); + assertEquals(obligation1, actual); + } + + @Test + void testTx() throws PMException, IOException { + loadSamplePolicyFromPML(pap); + + pap.runTx(tx -> { + pap.executePML(new UserContext("u1"), """ + create obligation "ob1" { + create rule "r1" + when any user + performs any operation + do(ctx) { } + } + + create obligation "ob2" { + create rule "r1" + when any user + performs any operation + do(ctx) { } + } + """); + }); + assertThrows(PMException.class, () -> pap.runTx(tx -> { + pap.executePML(new UserContext("u1"), """ + create obligation "ob3" { + create rule "r1" + when any user + performs any operation + do(ctx) { } + } + + create obligation "ob4" { + create rule "r1" + when any user + performs any operation + do(ctx) { } + } + """); + throw new PMException(""); + })); + + assertDoesNotThrow(() -> pap.query().obligations().getObligation("ob1")); + assertDoesNotThrow(() -> pap.query().obligations().getObligation("ob2")); + assertThrows(ObligationDoesNotExistException.class, () -> pap.query().obligations().getObligation("ob3")); + assertThrows(ObligationDoesNotExistException.class, () -> pap.query().obligations().getObligation("ob4")); + } + } + + @Nested + class DeleteObligation { + @Test + public void testSuccess() throws PMException, IOException { + loadSamplePolicyFromPML(pap); + + pap.executePML(new UserContext("u1"), """ + create obligation "ob1" { + create rule "r1" + when any user + performs any operation + do(ctx) { } + } + """); + + pap.modify().obligations().deleteObligation("ob1"); + + assertThrows(ObligationDoesNotExistException.class, () -> pap.query().obligations().getObligation("ob1")); + } + + @Test + void testTx() throws PMException, IOException { + loadSamplePolicyFromPML(pap); + + pap.runTx(tx -> { + pap.executePML(new UserContext("u1"), """ + create obligation "ob1" { + create rule "r1" + when any user + performs any operation + do(ctx) { } + } + + create obligation "ob2" { + create rule "r1" + when any user + performs any operation + do(ctx) { } + } + """); + }); + assertThrows(PMException.class, () -> pap.runTx(tx -> { + pap.modify().obligations().deleteObligation("ob1"); + pap.modify().obligations().deleteObligation("ob2"); + throw new PMException(""); + })); + + assertDoesNotThrow(() -> pap.query().obligations().getObligation("ob1")); + assertDoesNotThrow(() -> pap.query().obligations().getObligation("ob2")); + } + } + + @Nested + class DeleteNode { + + @Test + void testDeleteNonExistingObligationDoesNOtThrowExcpetion() { + assertDoesNotThrow(() -> pap.modify().obligations().deleteObligation(obligation1.getName())); + } + + @Test + void testDeleteObligation() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.modify().graph().createUser("u1", List.of("ua1")); + + pap.modify().obligations().createObligation(obligation1.getAuthor(), obligation1.getName(), obligation1.getRules()); + pap.modify().obligations().createObligation(obligation2.getAuthor(), obligation2.getName(), obligation2.getRules()); + + pap.modify().obligations().deleteObligation(obligation1.getName()); + + assertThrows(ObligationDoesNotExistException.class, + () -> pap.query().obligations().getObligation(obligation1.getName())); + } + } + + + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/modification/OperationsModifierTest.java b/src/test/java/gov/nist/csd/pm/pap/modification/OperationsModifierTest.java new file mode 100644 index 000000000..7c3ac92bc --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/modification/OperationsModifierTest.java @@ -0,0 +1,91 @@ +package gov.nist.csd.pm.pap.modification; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.PAPTestInitializer; +import gov.nist.csd.pm.pap.exception.AdminAccessRightExistsException; +import gov.nist.csd.pm.pap.exception.OperationExistsException; +import gov.nist.csd.pm.pap.op.Operation; +import gov.nist.csd.pm.pap.op.graph.AssignOp; +import gov.nist.csd.pm.pap.query.UserContext; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +import java.util.List; +import java.util.Map; + +import static gov.nist.csd.pm.pap.op.AdminAccessRights.CREATE_POLICY_CLASS; +import static org.junit.jupiter.api.Assertions.*; + +public abstract class OperationsModifierTest extends PAPTestInitializer { + + Operation testOp = new Operation<>("test", List.of()) { + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { + + } + + @Override + public Object execute(PAP pap, Map operands) throws PMException { + return null; + } + }; + + @Nested + class SetResourceOperations { + @Test + void testAdminAccessRightExistsException() { + assertThrows(AdminAccessRightExistsException.class, () -> + pap.modify().operations().setResourceOperations(new AccessRightSet(CREATE_POLICY_CLASS))); + } + + @Test + void testSuccess() throws PMException { + AccessRightSet arset = new AccessRightSet("read", "write"); + pap.modify().operations().setResourceOperations(arset); + assertEquals(arset, pap.query().operations().getResourceOperations()); + } + } + + @Nested + class CreateAdminOperation { + + @Test + void testSuccess() throws PMException { + pap.modify().operations().createAdminOperation(testOp); + + assertDoesNotThrow(() -> pap.query().operations().getAdminOperation("assign")); + } + + @Test + void testOperationExists() throws PMException { + pap.modify().operations().createAdminOperation(testOp); + + assertThrows(OperationExistsException.class, + () -> pap.modify().operations().createAdminOperation(new AssignOp())); + assertThrows(OperationExistsException.class, + () -> pap.modify().operations().createAdminOperation(testOp)); + + } + + } + + @Nested + class DeleteAdminOperation { + + @Test + void testSuccess() throws PMException { + pap.modify().operations().createAdminOperation(testOp); + pap.modify().operations().deleteAdminOperation("test"); + assertDoesNotThrow(() -> pap.modify().operations().deleteAdminOperation("assign")); + } + + @Test + void testCannotDeleteBuiltinOperation() { + assertDoesNotThrow(() -> pap.modify().operations().deleteAdminOperation("assign")); + assertDoesNotThrow(() -> pap.query().operations().getAdminOperation("assign")); + } + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/modification/ProhibitionsModifierTest.java b/src/test/java/gov/nist/csd/pm/pap/modification/ProhibitionsModifierTest.java new file mode 100644 index 000000000..f03f9d927 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/modification/ProhibitionsModifierTest.java @@ -0,0 +1,198 @@ +package gov.nist.csd.pm.pap.modification; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.prohibition.ContainerCondition; +import gov.nist.csd.pm.pap.prohibition.Prohibition; +import gov.nist.csd.pm.pap.prohibition.ProhibitionSubject; +import gov.nist.csd.pm.pap.PAPTestInitializer; +import gov.nist.csd.pm.pap.exception.*; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.util.SamplePolicy; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +import java.io.IOException; +import java.util.*; + +import static gov.nist.csd.pm.pap.op.AdminAccessRights.ALL_ADMIN_ACCESS_RIGHTS; +import static org.junit.jupiter.api.Assertions.*; + +public abstract class ProhibitionsModifierTest extends PAPTestInitializer { + + @Nested + class CreateProhibitionTest { + + @Test + void testProhibitionExistsException() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("subject", List.of("pc1")); + + pap.modify().prohibitions().createProhibition("pro1", ProhibitionSubject.userAttribute("subject"), new AccessRightSet(), false, List.of()); + + assertThrows( + ProhibitionExistsException.class, + () -> pap.modify().prohibitions().createProhibition("pro1", ProhibitionSubject.userAttribute("subject"), new AccessRightSet(), false, List.of())); + } + + @Test + void testProhibitionSubjectDoesNotExistException() { + assertThrows( + ProhibitionSubjectDoesNotExistException.class, + () -> pap.modify().prohibitions().createProhibition("pro1", ProhibitionSubject.userAttribute("subject"), new AccessRightSet(ALL_ADMIN_ACCESS_RIGHTS), false, List.of())); + } + + + @Test + void testUnknownAccessRightException() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("subject", List.of("pc1")); + + assertThrows( + UnknownAccessRightException.class, + () -> pap.modify().prohibitions().createProhibition("pro1", ProhibitionSubject.userAttribute("subject"), new AccessRightSet("read"), false, List.of())); + } + + @Test + void testProhibitionContainerDoesNotExistException() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("subject", List.of("pc1")); + pap.modify().operations().setResourceOperations(new AccessRightSet("read")); + assertThrows( + ProhibitionContainerDoesNotExistException.class, + () -> pap.modify().prohibitions().createProhibition("pro1", ProhibitionSubject.userAttribute("subject"), new AccessRightSet("read"), false, + Collections.singleton(new ContainerCondition("oa1", true)) + )); + } + + @Test + void testSuccess() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("subject", List.of("pc1")); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + pap.modify().graph().createObjectAttribute("oa2", List.of("pc1")); + pap.modify().operations().setResourceOperations(new AccessRightSet("read", "write")); + + pap.modify().prohibitions().createProhibition("pro1", ProhibitionSubject.userAttribute("subject"), new AccessRightSet("read"), true, + List.of( + new ContainerCondition("oa1", true), + new ContainerCondition("oa2", false) + ) + ); + + Prohibition p = pap.query().prohibitions().getProhibition("pro1"); + assertEquals("pro1", p.getName()); + assertEquals("subject", p.getSubject().getName()); + assertEquals(new AccessRightSet("read"), p.getAccessRightSet()); + assertTrue(p.isIntersection()); + assertEquals(2, p.getContainers().size()); + List expected = List.of( + new ContainerCondition("oa1", true), + new ContainerCondition("oa2", false) + ); + assertTrue(expected.containsAll(p.getContainers()) && p.getContainers().containsAll(expected)); + } + + @Test + void testTx() throws PMException, IOException { + SamplePolicy.loadSamplePolicyFromPML(pap); + + pap.runTx(tx -> { + tx.executePML(new UserContext("u1"), """ + create prohibition "p1" + deny user attribute "ua1" + access rights ["read"] + on union of ["US project"] + + create prohibition "p2" + deny user attribute "ua1" + access rights ["read"] + on union of ["US project"] + """); + }); + + assertThrows(PMException.class, () -> pap.runTx(tx -> { + tx.executePML(new UserContext("u1"), """ + create prohibition "p3" + deny user attribute "ua1" + access rights ["read"] + on union of ["US project"] + + create prohibition "p4" + deny user attribute "ua1" + access rights ["read"] + on union of ["US project"] + """); + throw new PMException(""); + })); + + assertDoesNotThrow(() -> pap.query().prohibitions().getProhibition("p1")); + assertDoesNotThrow(() -> pap.query().prohibitions().getProhibition("p2")); + assertThrows(ProhibitionDoesNotExistException.class, + () -> pap.query().prohibitions().getProhibition("p3")); + assertThrows(ProhibitionDoesNotExistException.class, + () -> pap.query().prohibitions().getProhibition("p4")); + + } + } + + @Nested + class DeleteProhibitionTest { + + @Test + void testNonExistingProhibitionDoesNotThrowException() { + assertDoesNotThrow(() -> pap.modify().prohibitions().deleteProhibition("pro1")); + } + + @Test + void testSuccess() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("subject", List.of("pc1")); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + pap.modify().graph().createObjectAttribute("oa2", List.of("pc1")); + pap.modify().operations().setResourceOperations(new AccessRightSet("read", "write")); + + pap.modify().prohibitions().createProhibition("pro1", ProhibitionSubject.userAttribute("subject"), new AccessRightSet("read"), true, + List.of( + new ContainerCondition("oa1", true), + new ContainerCondition("oa2", false))); + + assertDoesNotThrow(() -> pap.query().prohibitions().getProhibition("pro1")); + + pap.modify().prohibitions().deleteProhibition("pro1"); + + assertThrows(ProhibitionDoesNotExistException.class, + () -> pap.query().prohibitions().getProhibition("pro1")); + } + + @Test + void testTx() throws PMException, IOException { + SamplePolicy.loadSamplePolicyFromPML(pap); + + pap.runTx(tx -> { + tx.executePML(new UserContext("u1"), """ + create prohibition "p1" + deny user attribute "ua1" + access rights ["read"] + on union of ["US project"] + + create prohibition "p2" + deny user attribute "ua1" + access rights ["read"] + on union of ["US project"] + """); + }); + + assertThrows(PMException.class, () -> pap.runTx(tx -> { + tx.executePML(new UserContext("u1"), """ + delete prohibition "p1" + delete prohibition "p2" + """); + throw new PMException(""); + })); + + assertDoesNotThrow(() -> pap.query().prohibitions().getProhibition("p1")); + assertDoesNotThrow(() -> pap.query().prohibitions().getProhibition("p2")); + } + } +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/modification/RoutinesModifierTest.java b/src/test/java/gov/nist/csd/pm/pap/modification/RoutinesModifierTest.java new file mode 100644 index 000000000..4f3489711 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/modification/RoutinesModifierTest.java @@ -0,0 +1,177 @@ +package gov.nist.csd.pm.pap.modification; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.PAPTestInitializer; +import gov.nist.csd.pm.pap.exception.RoutineExistsException; +import gov.nist.csd.pm.pap.routine.Routine; +import gov.nist.csd.pm.util.SamplePolicy; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +import java.io.IOException; +import java.util.List; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.*; + +public abstract class RoutinesModifierTest extends PAPTestInitializer { + + @Nested + class CreateAdminRoutine { + + @Test + void testSuccess() throws PMException, IOException { + SamplePolicy.loadSamplePolicyFromPML(pap); + + pap.modify().routines().createAdminRoutine(new Routine( + "routine1", + List.of("a", "b") + ) { + @Override + public Void execute(PAP pap, Map operands) throws PMException { + return null; + } + }); + + assertTrue(pap.query().routines().getAdminRoutineNames().contains("routine1")); + } + + @Test + void testRoutineExists() throws PMException, IOException { + SamplePolicy.loadSamplePolicyFromPML(pap); + + pap.modify().routines().createAdminRoutine(new Routine( + "routine1", + List.of("a", "b") + ) { + @Override + public Void execute(PAP pap, Map operands) throws PMException { + return null; + } + }); + + assertThrows(RoutineExistsException.class, () -> { + pap.modify().routines().createAdminRoutine(new Routine( + "routine1", + List.of("a", "b") + ) { + @Override + public Void execute(PAP pap, Map operands) throws PMException { + return null; + } + }); + }); + } + + @Test + void testTx() throws PMException, IOException { + SamplePolicy.loadSamplePolicyFromPML(pap); + + pap.runTx(tx -> { + tx.modify().routines().createAdminRoutine(new Routine( + "routine1", + List.of("a", "b") + ) { + @Override + public Void execute(PAP pap, Map operands) throws PMException { + return null; + } + }); + tx.modify().routines().createAdminRoutine(new Routine( + "routine2", + List.of("a", "b") + ) { + @Override + public Void execute(PAP pap, Map operands) throws PMException { + return null; + } + }); + }); + + assertThrows(PMException.class, () -> pap.runTx(tx -> { + tx.modify().routines().createAdminRoutine(new Routine( + "routine3", + List.of("a", "b") + ) { + @Override + public Void execute(PAP pap, Map operands) throws PMException { + return null; + } + }); + tx.modify().routines().createAdminRoutine(new Routine( + "routine4", + List.of("a", "b") + ) { + @Override + public Void execute(PAP pap, Map operands) throws PMException { + return null; + } + }); + + throw new PMException(""); + })); + + assertTrue(pap.query().routines().getAdminRoutineNames().containsAll(List.of("routine1", "routine2"))); + assertFalse(pap.query().routines().getAdminRoutineNames().containsAll(List.of("routine3", "routine4"))); + } + } + + @Nested + class DeleteAdminRoutine { + + @Test + void testSuccess() throws PMException, IOException { + SamplePolicy.loadSamplePolicyFromPML(pap); + pap.modify().routines().createAdminRoutine(new Routine( + "routine1", + List.of("a", "b") + ) { + @Override + public Void execute(PAP pap, Map operands) throws PMException { + return null; + } + }); + + pap.modify().routines().deleteAdminRoutine("routine1"); + pap.modify().routines().deleteAdminRoutine("routine1"); + assertFalse(pap.query().routines().getAdminRoutineNames().contains("routine1")); + } + + @Test + void testTx() throws PMException, IOException { + SamplePolicy.loadSamplePolicyFromPML(pap); + + pap.runTx(tx -> { + tx.modify().routines().createAdminRoutine(new Routine( + "routine1", + List.of("a", "b") + ) { + @Override + public Void execute(PAP pap, Map operands) throws PMException { + return null; + } + }); + tx.modify().routines().createAdminRoutine(new Routine( + "routine2", + List.of("a", "b") + ) { + @Override + public Void execute(PAP pap, Map operands) throws PMException { + return null; + } + }); + }); + + assertThrows(PMException.class, () -> pap.runTx(tx -> { + tx.modify().routines().deleteAdminRoutine("routine1"); + tx.modify().routines().deleteAdminRoutine("routine2"); + + throw new PMException(""); + })); + + assertTrue(pap.query().routines().getAdminRoutineNames().containsAll(List.of("routine1", "routine2"))); + } + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/mysql/MysqlPAPTest.java b/src/test/java/gov/nist/csd/pm/pap/mysql/MysqlPAPTest.java deleted file mode 100644 index b2e946c96..000000000 --- a/src/test/java/gov/nist/csd/pm/pap/mysql/MysqlPAPTest.java +++ /dev/null @@ -1,80 +0,0 @@ -package gov.nist.csd.pm.pap.mysql; - -import gov.nist.csd.pm.pap.PAP; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.exceptions.ProhibitionDoesNotExistException; -import gov.nist.csd.pm.policy.model.access.AccessRightSet; -import gov.nist.csd.pm.policy.model.prohibition.ContainerCondition; -import gov.nist.csd.pm.policy.model.prohibition.ProhibitionSubject; -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; - -import java.io.IOException; -import java.sql.*; - -import static org.junit.jupiter.api.Assertions.*; - -class MysqlPAPTest { - - static MysqlTestEnv testEnv; - - @BeforeAll - static void start() throws PMException, IOException { - testEnv = new MysqlTestEnv(); - testEnv.start(); - } - - @AfterAll - static void stop() { - testEnv.stop(); - } - - @AfterEach - void reset() throws SQLException { - testEnv.reset(); - } - - @Test - void testTx() throws SQLException, PMException { - try (Connection connection = DriverManager.getConnection(testEnv.getConnectionUrl(), testEnv.getUser(), testEnv.getPassword()); - Connection connection2 = DriverManager.getConnection(testEnv.getConnectionUrl(), testEnv.getUser(), testEnv.getPassword())) { - - PAP pap = new PAP(new MysqlPolicyStore(connection)); - pap.beginTx(); - pap.graph().createPolicyClass("pc1"); - pap.graph().createObjectAttribute("oa1", "pc1"); - pap.commit(); - - - PAP pap2 = new PAP(new MysqlPolicyStore(connection2)); - assertTrue(pap2.graph().nodeExists("pc1")); - assertTrue(pap2.graph().nodeExists("oa1")); - } - } - - @Test - void testRollbackProhibitionTx() throws PMException, IOException, SQLException { - Connection connection - = DriverManager.getConnection(testEnv.getConnectionUrl(), testEnv.getUser(), testEnv.getPassword()); - MysqlPolicyStore mysqlPolicyStore = new MysqlPolicyStore(connection); - - PAP pap = new PAP(mysqlPolicyStore); - pap.graph().createPolicyClass("pc1"); - pap.graph().createUserAttribute("ua1", "pc1"); - pap.graph().createObjectAttribute("oa1", "pc1"); - - try(Statement stmt = connection.createStatement()) { - stmt.executeUpdate("SET FOREIGN_KEY_CHECKS=0"); - stmt.executeUpdate("insert into prohibition_container values (1, (select id from node where name = 'oa1'), 1)"); - stmt.executeUpdate("SET FOREIGN_KEY_CHECKS=1"); - } - - assertThrows(MysqlPolicyException.class, () -> - pap.prohibitions().create("label", ProhibitionSubject.userAttribute("ua1"), - new AccessRightSet(), false, new ContainerCondition("oa1", true))); - assertThrows(ProhibitionDoesNotExistException.class, () -> pap.prohibitions().get("label")); - } - -} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/mysql/MysqlPolicyDeserializerTest.java b/src/test/java/gov/nist/csd/pm/pap/mysql/MysqlPolicyDeserializerTest.java deleted file mode 100644 index eda1ba103..000000000 --- a/src/test/java/gov/nist/csd/pm/pap/mysql/MysqlPolicyDeserializerTest.java +++ /dev/null @@ -1,55 +0,0 @@ -package gov.nist.csd.pm.pap.mysql; - -import gov.nist.csd.pm.SamplePolicy; -import gov.nist.csd.pm.pap.memory.MemoryPolicyDeserializer; -import gov.nist.csd.pm.pap.memory.MemoryPolicyStore; -import gov.nist.csd.pm.policy.PolicyEquals; -import gov.nist.csd.pm.policy.exceptions.PMException; -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; - -import java.io.IOException; -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.SQLException; - -import static org.junit.jupiter.api.Assertions.*; - -class MysqlPolicyDeserializerTest { - - static MysqlTestEnv testEnv; - - @BeforeAll - static void start() throws PMException, IOException { - testEnv = new MysqlTestEnv(); - testEnv.start(); - } - - @AfterAll - static void stop() { - testEnv.stop(); - } - - @AfterEach - void reset() throws SQLException { - testEnv.reset(); - } - - @Test - void testDeserialize() throws PMException, IOException, SQLException { - try (Connection connection = DriverManager.getConnection(testEnv.getConnectionUrl(), testEnv.getUser(), testEnv.getPassword())) { - MysqlPolicyStore mysqlPolicyStore = new MysqlPolicyStore(connection); - SamplePolicy.loadSamplePolicyFromPML(mysqlPolicyStore); - - String json = mysqlPolicyStore.serialize().toJSON(); - - MemoryPolicyStore actual = new MemoryPolicyStore(); - new MemoryPolicyDeserializer(actual).fromJSON(json); - - PolicyEquals.check(mysqlPolicyStore, actual); - } - } - -} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/mysql/MysqlTestEnv.java b/src/test/java/gov/nist/csd/pm/pap/mysql/MysqlTestEnv.java deleted file mode 100644 index 0366d9ec7..000000000 --- a/src/test/java/gov/nist/csd/pm/pap/mysql/MysqlTestEnv.java +++ /dev/null @@ -1,127 +0,0 @@ -package gov.nist.csd.pm.pap.mysql; - -import gov.nist.csd.pm.policy.exceptions.PMException; -import org.testcontainers.containers.MySQLContainer; -import org.testcontainers.junit.jupiter.Container; -import org.testcontainers.utility.DockerImageName; - -import java.io.IOException; -import java.io.InputStream; -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.SQLException; -import java.sql.Statement; -import java.util.List; -import java.util.Properties; - -public class MysqlTestEnv { - - public static final String EXECUTION_PROPERTY = "execution"; - public static final String CONNECTION_PROPERTY = "connectionUrl"; - public static final String USER_PROPERTY = "user"; - public static final String PASSWORD_PROPERTY = "password"; - public static final String EXTERNAL_EXECUTION = "external"; - public static final String CONTAINER_EXECUTION = "container"; - public static final DockerImageName MYSQL_8_IMAGE = DockerImageName.parse("mysql:8.0.24"); - - @Container - private MySQLContainer container; - - private String connectionUrl; - private String user; - private String password; - - public MysqlTestEnv() throws IOException, PMException { - Properties properties = new Properties(); - try(InputStream is = getClass().getResourceAsStream("/sql/db.properties")) { - properties.load(is); - } - - if (!properties.containsKey(EXECUTION_PROPERTY) - || !(properties.get(EXECUTION_PROPERTY).equals(EXTERNAL_EXECUTION) - || properties.get(EXECUTION_PROPERTY).equals(CONTAINER_EXECUTION))) { - throw new PMException("mysql tests expect the 'execution' property to be set " + - "in /resources/sql/db/properties to 'external' or 'container'"); - } - - if (properties.get(EXECUTION_PROPERTY).equals(EXTERNAL_EXECUTION)) { - if (!(properties.containsKey(CONNECTION_PROPERTY) - && properties.containsKey(USER_PROPERTY) - && properties.containsKey(PASSWORD_PROPERTY))) { - throw new PMException("using an external database for mysql tests expects " + - "the 'connectionUrl', 'user', and 'password' properties to be set in " + - "/resources/sql/db/properties"); - } - - this.connectionUrl = properties.getProperty(CONNECTION_PROPERTY); - this.user = properties.getProperty(USER_PROPERTY); - this.password = properties.getProperty(PASSWORD_PROPERTY); - } else { - this.container = new MySQLContainer<>(MYSQL_8_IMAGE) - .withDatabaseName("pm_core") - .withUsername("test") - .withPassword("test") - .withEnv("MYSQL_ROOT_PASSWORD", "test"); - } - } - - public synchronized Connection getConnection() throws SQLException { - if (container == null) { - return DriverManager.getConnection(connectionUrl, user, password); - } else { - return DriverManager.getConnection(container.getJdbcUrl(), container.getUsername(), container.getPassword()); - } - } - - public synchronized void start() { - if (container != null) { - container.start(); - } - - try(InputStream is = getClass().getResourceAsStream("/sql/pm_core.sql")) { - String sql = new String(is.readAllBytes()); - String[] split = sql.split(";"); - Connection conn = getConnection(); - Statement stmt = conn.createStatement(); - for (String s : split) { - stmt.execute(s); - } - - conn.close(); - } catch (SQLException | IOException e) { - throw new RuntimeException(e); - } - } - - public synchronized void stop() { - if (container == null) { - return; - } - - container.stop(); - } - - public synchronized void reset() throws SQLException { - Connection connection = getConnection(); - List sequence = PolicyResetSequence.getSequence(); - try (Statement stmt = connection.createStatement()) { - for (String s : sequence) { - stmt.executeUpdate(s); - } - } - connection.close(); - } - - public String getConnectionUrl() { - return container == null ? connectionUrl : container.getJdbcUrl(); - } - - public String getUser() { - return container == null ? user : container.getUsername(); - } - - public String getPassword() { - return container == null ? password : container.getPassword(); - } - -} diff --git a/src/test/java/gov/nist/csd/pm/pap/op/OperationTest.java b/src/test/java/gov/nist/csd/pm/pap/op/OperationTest.java new file mode 100644 index 000000000..a16749fbd --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/op/OperationTest.java @@ -0,0 +1,35 @@ +package gov.nist.csd.pm.pap.op; + +import gov.nist.csd.pm.pap.exception.OperandsDoNotMatchException; +import gov.nist.csd.pm.pap.op.graph.AssignOp; +import org.junit.jupiter.api.Test; + +import java.util.List; +import java.util.Map; + +import static gov.nist.csd.pm.pap.op.graph.GraphOp.ASCENDANT_OPERAND; + +import static gov.nist.csd.pm.pap.op.graph.GraphOp.DESCENDANTS_OPERAND; +import static org.junit.jupiter.api.Assertions.*; + +class OperationTest { + + @Test + void testValidateOperands() { + AssignOp assignOp = new AssignOp(); + assertThrows(OperandsDoNotMatchException.class, + () -> assignOp.validateOperands(Map.of("a", "a", "b", "b", "c", "c"))); + assertThrows(OperandsDoNotMatchException.class, + () -> assignOp.validateOperands(Map.of(ASCENDANT_OPERAND, "a", + DESCENDANTS_OPERAND, List.of("b"), "c", "c"))); + + } + + @Test + void testIllegalOperandValueException() throws OperandsDoNotMatchException { + AssignOp assignOp = new AssignOp(); + assertDoesNotThrow(() -> assignOp.withOperands(Map.of(ASCENDANT_OPERAND, "a", DESCENDANTS_OPERAND, List.of("b")))); + + assertThrows(IllegalArgumentException.class, () -> assignOp.withOperands(Map.of(ASCENDANT_OPERAND, "a", DESCENDANTS_OPERAND, Map.of("a", "b")))); + } +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/op/PreparedOperationTest.java b/src/test/java/gov/nist/csd/pm/pap/op/PreparedOperationTest.java new file mode 100644 index 000000000..4793507f7 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/op/PreparedOperationTest.java @@ -0,0 +1,47 @@ +package gov.nist.csd.pm.pap.op; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.obligation.EventContext; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.query.UserContext; +import org.junit.jupiter.api.Test; + +import java.util.List; +import java.util.Map; + +import static gov.nist.csd.pm.pap.op.graph.GraphOp.ASCENDANT_OPERAND; +import static gov.nist.csd.pm.pap.op.graph.GraphOp.DESCENDANTS_OPERAND; +import static org.junit.jupiter.api.Assertions.*; + +class PreparedOperationTest { + + @Test + void testExecute() throws PMException { + Operation op1 = new Operation<>("op1", List.of("a", "b", "c", "d"), List.of("c", "d")) { + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { + + } + + @Override + public Void execute(PAP pap, Map operands) throws PMException { + pap.modify().graph().createPolicyClass("ok"); + + return null; + } + }; + + PreparedOperation preparedOperation = new PreparedOperation<>( + op1, Map.of( + ASCENDANT_OPERAND, "c", + DESCENDANTS_OPERAND, List.of("a", "b") + ) + ); + + EventContext execute = preparedOperation.execute(new MemoryPAP(), new UserContext("u1")); + assertEquals(execute, new EventContext("u1", "", op1, + Map.of(ASCENDANT_OPERAND, "c", DESCENDANTS_OPERAND, List.of("a", "b")))); + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/op/obligation/ObligationOpTest.java b/src/test/java/gov/nist/csd/pm/pap/op/obligation/ObligationOpTest.java new file mode 100644 index 000000000..6288c44c8 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/op/obligation/ObligationOpTest.java @@ -0,0 +1,51 @@ +package gov.nist.csd.pm.pap.op.obligation; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.pml.pattern.operand.InOperandPattern; +import gov.nist.csd.pm.pap.pml.pattern.operand.NodeOperandPattern; +import gov.nist.csd.pm.pap.pml.pattern.subject.LogicalSubjectPatternExpression; +import gov.nist.csd.pm.pap.pml.pattern.subject.SubjectPattern; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pdp.exception.UnauthorizedException; +import org.junit.jupiter.api.Test; + +import static gov.nist.csd.pm.pap.op.AdminAccessRights.CREATE_OBLIGATION; +import static gov.nist.csd.pm.pap.op.obligation.ObligationOp.checkPatternPrivileges; +import static org.junit.jupiter.api.Assertions.*; + +class ObligationOpTest { + + @Test + void testCheckPatternPrivileges() throws PMException { + MemoryPAP pap = new MemoryPAP(); + + pap.executePML(new UserContext("u1"), """ + create pc "pc1" + create ua "ua1" in ["pc1"] + create ua "ua2" in ["pc1"] + create oa "oa1" in ["pc1"] + create oa "oa2" in ["pc1"] + + associate "ua1" and "oa1" with ["*a"] + associate "ua1" and "oa2" with ["*a"] + associate "ua1" and ADMIN_POLICY_OBJECT with ["*a"] + + create u "u1" in ["ua1"] + create u "u2" in ["ua2"] + create o "o1" in ["oa1"] + """); + + checkPatternPrivileges(pap, new UserContext("u1"), new SubjectPattern(), CREATE_OBLIGATION); + assertThrows(UnauthorizedException.class, + () -> checkPatternPrivileges(pap, new UserContext("u2"), new SubjectPattern(), CREATE_OBLIGATION)); + + checkPatternPrivileges(pap, new UserContext("u1"), new LogicalSubjectPatternExpression( + new NodeOperandPattern("oa1"), + new InOperandPattern("oa2"), + true + ), CREATE_OBLIGATION); + + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/ExecutionTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/ExecutionTest.java new file mode 100644 index 000000000..56e14353d --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/ExecutionTest.java @@ -0,0 +1,479 @@ +package gov.nist.csd.pm.pap.pml; + +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.graph.relationship.Association; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.pml.exception.PMLCompilationException; +import gov.nist.csd.pm.pap.serialization.pml.PMLDeserializer; +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.query.UserContext; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.Collection; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +public class ExecutionTest { + + static UserContext superUser = new UserContext("u1"); + + @Test + void testGraphPML() throws PMException { + PAP pap = new MemoryPAP(); + + String input = + """ + set resource operations ["read", "write"] + + create policy class "pc1" + + set properties of "pc1" to {"k": "v"} + + create object attribute "oa1" in ["pc1"] + create object attribute "oa2" in ["pc1"] + create object attribute "oa3" in ["pc1"] + + var descendants = ["oa1", "oa2", "oa3"] + create object "o1" in descendants + + create user attribute "ua1" in ["pc1"] + create user attribute "ua2" in ["pc1"] + create user attribute "ua3" in ["pc1"] + + var username = "u1" + create user username in ["ua1"] + assign username to ["ua2", "ua3"] + + associate "ua1" and "oa1" with ["read", "write"] + associate "ua2" and "oa2" with ["read", "write"] + associate "ua3" and "oa3" with ["read", "write"] + """; + pap.executePML(superUser, input); + + assertTrue(pap.query().graph().nodeExists("pc1")); + assertTrue(pap.query().graph().nodeExists("oa1")); + assertTrue(pap.query().graph().nodeExists("oa2")); + assertTrue(pap.query().graph().nodeExists("oa3")); + assertTrue(pap.query().graph().nodeExists("ua1")); + assertTrue(pap.query().graph().nodeExists("ua2")); + assertTrue(pap.query().graph().nodeExists("ua3")); + assertTrue(pap.query().graph().nodeExists("o1")); + assertTrue(pap.query().graph().nodeExists("u1")); + + assertEquals("v", pap.query().graph().getNode("pc1").getProperties().get("k")); + + Collection ascendants = pap.query().graph().getAdjacentAscendants("pc1"); + assertTrue(ascendants.containsAll(Arrays.asList("ua1", "ua2", "ua3"))); + ascendants = pap.query().graph().getAdjacentAscendants("pc1"); + assertTrue(ascendants.containsAll(Arrays.asList("oa1", "oa2", "oa3"))); + + assertTrue(pap.query().graph().getAdjacentDescendants("ua1").contains("pc1")); + assertTrue(pap.query().graph().getAdjacentDescendants("ua2").contains("pc1")); + assertTrue(pap.query().graph().getAdjacentDescendants("ua3").contains("pc1")); + assertTrue(pap.query().graph().getAdjacentDescendants("oa1").contains("pc1")); + assertTrue(pap.query().graph().getAdjacentDescendants("oa2").contains("pc1")); + assertTrue(pap.query().graph().getAdjacentDescendants("oa3").contains("pc1")); + assertTrue(pap.query().graph().getAdjacentDescendants("u1").containsAll(Arrays.asList("ua1", "ua2", "ua3"))); + assertTrue(pap.query().graph().getAdjacentDescendants("o1").containsAll(Arrays.asList("oa1", "oa2", "oa3"))); + + assertEquals(new Association("ua1", "oa1", new AccessRightSet("read", "write")), + pap.query().graph().getAssociationsWithSource("ua1").iterator().next()); + assertEquals(new Association("ua2", "oa2", new AccessRightSet("read", "write")), + pap.query().graph().getAssociationsWithSource("ua2").iterator().next()); + assertEquals(new Association("ua3", "oa3", new AccessRightSet("read", "write")), + pap.query().graph().getAssociationsWithSource("ua3").iterator().next()); + + input = """ + dissociate "ua1" and "oa1" + """; + pap.executePML(superUser, input); + assertTrue(pap.query().graph().getAssociationsWithSource("ua1").isEmpty()); + + input = + """ + deassign "u1" from ["ua1", "ua2"] + """; + pap.executePML(superUser, input); + assertFalse(pap.query().graph().getAdjacentDescendants("u1").containsAll(Arrays.asList("ua1", "ua2"))); + assertFalse(pap.query().graph().getAdjacentAscendants("ua1").contains("u1")); + assertFalse(pap.query().graph().getAdjacentAscendants("ua2").contains("u1")); + + input = + """ + delete user "u1" + """; + pap.executePML(superUser, input); + assertFalse(pap.query().graph().nodeExists("u1")); + + input = + """ + deassign "o1" from ["oa1"] + """; + pap.executePML(superUser, input); + assertFalse(pap.query().graph().getAdjacentDescendants("oa1").contains("oa1")); + assertFalse(pap.query().graph().getAdjacentAscendants("oa1").contains("o1")); + + input = + """ + delete object "o1" + """; + pap.executePML(superUser, input); + assertFalse(pap.query().graph().nodeExists("o1")); + + input = + """ + delete user attribute "ua1" + delete user attribute "ua2" + delete user attribute "ua3" + """; + pap.executePML(superUser, input); + assertFalse(pap.query().graph().nodeExists("ua1")); + assertFalse(pap.query().graph().nodeExists("ua2")); + assertFalse(pap.query().graph().nodeExists("ua3")); + + + input = + """ + delete object attribute "oa1" + delete object attribute "oa2" + delete object attribute "oa3" + """; + pap.executePML(superUser, input); + assertFalse(pap.query().graph().nodeExists("oa1")); + assertFalse(pap.query().graph().nodeExists("oa2")); + assertFalse(pap.query().graph().nodeExists("oa3")); + + input = + """ + delete policy class "pc1" + """; + pap.executePML(superUser, input); + assertFalse(pap.query().graph().nodeExists("pc1")); + } + + @Test + void testIf() throws PMException { + PAP pap = new MemoryPAP(); + String input = """ + var x = "test" + var y = "test" + if equals(x, y) { + create policy class "pc1" + } + """; + pap.executePML(superUser, input); + assertTrue(pap.query().graph().nodeExists("pc1")); + + input = """ + var x = "test" + var y = "test" + var z = "test1" + if equals(x, z) { + create policy class "pc1" + } else if equals(x, y) { + create policy class "pc2" + } + """; + pap = new MemoryPAP(); + pap.executePML(superUser, input); + + assertFalse(pap.query().graph().nodeExists("pc1")); + assertTrue(pap.query().graph().nodeExists("pc2")); + + input = """ + var x = "test" + var y = "test1" + var z = "test2" + if equals(x, z) { + create policy class "pc1" + } else if equals(x, y) { + create policy class "pc2" + } else { + create policy class "pc3" + } + """; + pap = new MemoryPAP(); + + pap.executePML(superUser, input); + + assertFalse(pap.query().graph().nodeExists("pc1")); + assertFalse(pap.query().graph().nodeExists("pc2")); + assertTrue(pap.query().graph().nodeExists("pc3")); + + input = """ + var x = "test" + var y = "test1" + var z = "test2" + if equals(x, y) { + create policy class "pc1" + } else { + create policy class "pc2" + } + """; + pap = new MemoryPAP(); + + pap.executePML(superUser, input); + + assertFalse(pap.query().graph().nodeExists("pc1")); + assertTrue(pap.query().graph().nodeExists("pc2")); + + input = """ + var x = "test" + var y = "test1" + var z = "test2" + if !equals(x, y) { + create policy class "pc1" + } else { + create policy class "pc2" + } + """; + pap = new MemoryPAP(); + + pap.executePML(superUser, input); + + assertTrue(pap.query().graph().nodeExists("pc1")); + assertFalse(pap.query().graph().nodeExists("pc2")); + } + + @Test + void testForeach() throws PMException { + PAP pap = new MemoryPAP(); + + String input = """ + foreach x in ["pc1", "pc2", "pc3"] { + create policy class x + } + """; + pap.executePML(superUser, input); + + assertTrue(pap.query().graph().nodeExists("pc1")); + assertTrue(pap.query().graph().nodeExists("pc2")); + assertTrue(pap.query().graph().nodeExists("pc3")); + + input = """ + var m = {"k1": "pc1", "k2": "pc2", "k3": "pc3"} + foreach x, y in m { + create policy class y + } + """; + pap = new MemoryPAP(); + + pap.executePML(superUser, input); + + assertTrue(pap.query().graph().nodeExists("pc1")); + assertTrue(pap.query().graph().nodeExists("pc2")); + assertTrue(pap.query().graph().nodeExists("pc3")); + + input = """ + foreach x, y in {"k1": ["pc1", "pc2"], "k2": ["pc3"]} { + foreach z in y { + create policy class z + } + } + """; + pap = new MemoryPAP(); + + pap.executePML(superUser, input); + + assertTrue(pap.query().graph().nodeExists("pc1")); + assertTrue(pap.query().graph().nodeExists("pc2")); + assertTrue(pap.query().graph().nodeExists("pc3")); + + input = """ + foreach x, y in {"k1": ["pc1", "pc2"], "k2": ["pc3"]} { + foreach z in y { + create policy class z + break + } + } + """; + pap = new MemoryPAP(); + + pap.executePML(superUser, input); + + assertTrue(pap.query().graph().nodeExists("pc1")); + assertFalse(pap.query().graph().nodeExists("pc2")); + assertTrue(pap.query().graph().nodeExists("pc3")); + + input = """ + foreach x, y in {"k1": ["pc1", "pc2"], "k2": ["pc3"]} { + foreach z in y { + continue + create policy class z + } + } + """; + pap = new MemoryPAP(); + + pap.executePML(superUser, input); + + assertFalse(pap.query().graph().nodeExists("pc1")); + assertFalse(pap.query().graph().nodeExists("pc2")); + assertFalse(pap.query().graph().nodeExists("pc3")); + + input = """ + var a = "test" + var b = "test" + foreach x in ["pc1", "pc2", "pc3"] { + if equals(a, b) { + a = "test2" + continue + } + + create policy class x + } + """; + pap = new MemoryPAP(); + + pap.executePML(superUser, input); + + assertFalse(pap.query().graph().nodeExists("pc1")); + assertTrue(pap.query().graph().nodeExists("pc2")); + assertTrue(pap.query().graph().nodeExists("pc3")); + } + + @Test + void testFunction() throws PMException { + String input = """ + operation testFunc(any x) { + create policy class x + } + + testFunc("pc1") + """; + PAP pap = new MemoryPAP(); + + pap.executePML(superUser, input); + + assertTrue(pap.query().graph().nodeExists("pc1")); + + String input1 = """ + operation testFunc(any x) { + create policy class x + } + + testFunc(["pc1"]) + """; + + + PAP pap1 = new MemoryPAP(); + assertThrows(ClassCastException.class, () -> pap1.executePML(superUser, input1)); + + PAP pap2 = new MemoryPAP(); + String input2 = """ + x := "hello" + operation testFunc() { + create policy class x + " world" + } + + testFunc() + """; + + PMLCompilationException e = assertThrows( + PMLCompilationException.class, + () -> pap2.executePML(superUser, input2) + ); + assertEquals(1, e.getErrors().size()); + assertEquals("unknown variable 'x' in scope", e.getErrors().get(0).errorMessage()); + } + + @Test + void testMaps() throws PMException { + String input = """ + var m = {"k1": {"k1-1": {"k1-1-1": "v1"}}} + var x = m["k1"]["k1-1"]["k1-1-1"] + create policy class x + """; + PAP pap = new MemoryPAP(); + + pap.executePML(superUser, input); + assertTrue(pap.query().graph().getPolicyClasses().contains("v1")); + } + + @Test + void testArrayWithLiteral() throws PMException { + String input = """ + set resource operations ["read", "write"] + """; + PAP pap = new MemoryPAP(); + + pap.executePML(superUser, input); + assertTrue(pap.query().operations().getResourceOperations().contains("read")); + + String input1 = """ + set resource operations [["read", "write"], ["exec"]] + """; + assertThrows(PMException.class, () -> pap.executePML(superUser, input1)); + } + + @Test + void testDeleteNonExistentNode() throws PMException { + String input = """ + delete pc "pc1" + """; + PAP pap = new MemoryPAP(); + + assertDoesNotThrow(() -> pap.executePML(superUser, input)); + } + + @Test + void testDeleteProhibition() throws PMException { + PAP pap = new MemoryPAP(); + + pap.modify().operations().setResourceOperations(new AccessRightSet("read")); + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + + String input = """ + create prohibition "p1" + deny user attribute "ua1" + access rights ["read"] + on union of ["oa1"] + """; + pap.executePML(superUser, input); + + input = """ + delete prohibition "p1" + """; + pap.executePML(superUser, input); + assertFalse(pap.query().prohibitions().getProhibitions().containsKey("p1")); + } + + @Test + void testReturnValue() throws PMException { + String pml = """ + operation testFunc(string s) string { + return s + } + + create policy class testFunc("test") + """; + + PAP pap = new MemoryPAP(); + pap.deserialize(new UserContext("u1"), pml, new PMLDeserializer()); + + assertTrue(pap.query().graph().nodeExists("test")); + } + + @Test + void testOverwriteFunctionArg() throws PMException { + String pml = """ + operation testFunc(string s) string { + s = "test2" + return s + } + + create policy class testFunc("test") + """; + + PAP pap = new MemoryPAP(); + pap.deserialize(new UserContext("u1"), pml, new PMLDeserializer()); + + assertFalse(pap.query().graph().nodeExists("test")); + assertTrue(pap.query().graph().nodeExists("test2")); + } +} diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/FunctionTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/FunctionTest.java new file mode 100644 index 000000000..3dcefef2e --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/FunctionTest.java @@ -0,0 +1,70 @@ +package gov.nist.csd.pm.pap.pml; + +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.exception.PMLCompilationException; +import gov.nist.csd.pm.pap.query.UserContext; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +public class FunctionTest { + + @Test + void testElseIfNotAllPathsReturn() { + String pml = """ + operation fun(string a) string { + if equals(a, "a") { + return "a" + } else if equals(a, "b") { + return "b" + } + } + """; + + PMLCompilationException e = assertThrows(PMLCompilationException.class, () -> { + PAP pap = new MemoryPAP(); + pap.executePML(new UserContext("u1"), pml); + }); + assertEquals("not all conditional paths return", e.getErrors().get(0).errorMessage()); + } + + @Test + void testElseAllPathsReturn() { + String pml2 = """ + operation fun(string a) string { + if equals(a, "a") { + return "a" + } else if equals(a, "b") { + return "b" + } else { + return "c" + } + } + """; + + assertDoesNotThrow(() -> { + PAP pap = new MemoryPAP(); + pap.executePML(new UserContext("u1"), pml2); + }); + } + + @Test + void testElseWithNoElseIfAllPathsReturn() { + String pml2 = """ + operation fun(string a) string { + if equals(a, "a") { + return "a" + } else { + return "b" + } + } + """; + + assertDoesNotThrow(() -> { + PAP pap = new MemoryPAP(); + pap.executePML(new UserContext("u1"), pml2); + }); + } + +} diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/PMLContextVisitor.java b/src/test/java/gov/nist/csd/pm/pap/pml/PMLContextVisitor.java new file mode 100644 index 000000000..c6058aec5 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/PMLContextVisitor.java @@ -0,0 +1,228 @@ +package gov.nist.csd.pm.pap.pml; + +import gov.nist.csd.pm.pap.pml.antlr.PMLLexer; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.antlr.PMLParserBaseVisitor; +import org.antlr.v4.runtime.CharStreams; +import org.antlr.v4.runtime.CommonTokenStream; +import org.antlr.v4.runtime.RuleContext; + +public class PMLContextVisitor extends PMLParserBaseVisitor { + + public static T toCtx(String input, Class t) { + PMLErrorHandler pmlErrorHandler = new PMLErrorHandler(); + + PMLLexer lexer = new PMLLexer(CharStreams.fromString(input)); + lexer.removeErrorListeners(); + lexer.addErrorListener(pmlErrorHandler); + + CommonTokenStream tokens = new CommonTokenStream(lexer); + PMLParser parser = new PMLParser(tokens); + parser.removeErrorListeners(); + parser.addErrorListener(pmlErrorHandler); + + RuleContext ruleContext = new PMLContextVisitor().visitPml(parser.pml()); + + return t.cast(ruleContext); + } + + public static PMLParser.StatementBlockContext toStatementBlockCtx(String input) { + PMLErrorHandler pmlErrorHandler = new PMLErrorHandler(); + + PMLLexer lexer = new PMLLexer(CharStreams.fromString(input)); + lexer.removeErrorListeners(); + lexer.addErrorListener(pmlErrorHandler); + + CommonTokenStream tokens = new CommonTokenStream(lexer); + PMLParser parser = new PMLParser(tokens); + parser.removeErrorListeners(); + parser.addErrorListener(pmlErrorHandler); + + return parser.statementBlock(); + } + + public static T toExpressionCtx(String input, Class t) { + PMLErrorHandler pmlErrorHandler = new PMLErrorHandler(); + + PMLLexer lexer = new PMLLexer(CharStreams.fromString(input)); + lexer.removeErrorListeners(); + lexer.addErrorListener(pmlErrorHandler); + + CommonTokenStream tokens = new CommonTokenStream(lexer); + PMLParser parser = new PMLParser(tokens); + parser.removeErrorListeners(); + parser.addErrorListener(pmlErrorHandler); + + PMLParser.ExpressionContext expr = parser.expression(); + + return t.cast(expr); + } + + public static T toLiteralCtx(String input, Class t) { + PMLErrorHandler pmlErrorHandler = new PMLErrorHandler(); + + PMLLexer lexer = new PMLLexer(CharStreams.fromString(input)); + lexer.removeErrorListeners(); + lexer.addErrorListener(pmlErrorHandler); + + CommonTokenStream tokens = new CommonTokenStream(lexer); + PMLParser parser = new PMLParser(tokens); + parser.removeErrorListeners(); + parser.addErrorListener(pmlErrorHandler); + + PMLParser.LiteralContext expr = parser.literal(); + + return t.cast(expr); + } + + @Override + public RuleContext visitPml(PMLParser.PmlContext ctx) { + PMLParser.StatementContext statement = ctx.statement(0); + return visitStatement(statement); + } + + @Override + public RuleContext visitCreatePolicyStatement(PMLParser.CreatePolicyStatementContext ctx) { + return ctx; + } + + @Override + public RuleContext visitCreateNonPCStatement(PMLParser.CreateNonPCStatementContext ctx) { + return ctx; + } + + @Override + public RuleContext visitCreateObligationStatement(PMLParser.CreateObligationStatementContext ctx) { + return ctx; + } + + @Override + public RuleContext visitCreateProhibitionStatement(PMLParser.CreateProhibitionStatementContext ctx) { + return ctx; + } + + @Override + public RuleContext visitSetNodePropertiesStatement(PMLParser.SetNodePropertiesStatementContext ctx) { + return ctx; + } + + @Override + public RuleContext visitAssignStatement(PMLParser.AssignStatementContext ctx) { + return ctx; + } + + @Override + public RuleContext visitDeassignStatement(PMLParser.DeassignStatementContext ctx) { + return ctx; + } + + @Override + public RuleContext visitAssociateStatement(PMLParser.AssociateStatementContext ctx) { + return ctx; + } + + @Override + public RuleContext visitDissociateStatement(PMLParser.DissociateStatementContext ctx) { + return ctx; + } + + @Override + public RuleContext visitSetResourceOperationsStatement(PMLParser.SetResourceOperationsStatementContext ctx) { + return ctx; + } + + @Override + public RuleContext visitDeleteStatement(PMLParser.DeleteStatementContext ctx) { + return ctx; + } + + @Override + public RuleContext visitDeleteRuleStatement(PMLParser.DeleteRuleStatementContext ctx) { + return ctx; + } + + @Override + public RuleContext visitVarDeclaration(PMLParser.VarDeclarationContext ctx) { + return ctx; + } + + @Override + public RuleContext visitShortDeclaration(PMLParser.ShortDeclarationContext ctx) { + return ctx; + } + + @Override + public RuleContext visitVariableAssignmentStatement(PMLParser.VariableAssignmentStatementContext ctx) { + return ctx; + } + + @Override + public RuleContext visitFunctionDefinitionStatement(PMLParser.FunctionDefinitionStatementContext ctx) { + return ctx; + } + + @Override + public RuleContext visitReturnStatement(PMLParser.ReturnStatementContext ctx) { + return ctx; + } + + @Override + public RuleContext visitFunctionInvokeStatement(PMLParser.FunctionInvokeStatementContext ctx) { + return ctx; + } + + @Override + public RuleContext visitForeachStatement(PMLParser.ForeachStatementContext ctx) { + return ctx; + } + + @Override + public RuleContext visitBreakStatement(PMLParser.BreakStatementContext ctx) { + return ctx; + } + + @Override + public RuleContext visitContinueStatement(PMLParser.ContinueStatementContext ctx) { + return ctx; + } + + @Override + public RuleContext visitIfStatement(PMLParser.IfStatementContext ctx) { + return ctx; + } + + @Override + public RuleContext visitNegateExpression(PMLParser.NegateExpressionContext ctx) { + return ctx; + } + + @Override + public RuleContext visitLogicalExpression(PMLParser.LogicalExpressionContext ctx) { + return ctx; + } + + @Override + public RuleContext visitPlusExpression(PMLParser.PlusExpressionContext ctx) { + return ctx; + } + + @Override + public RuleContext visitFunctionInvokeExpression(PMLParser.FunctionInvokeExpressionContext ctx) { + return ctx; + } + + @Override + public RuleContext visitVariableReferenceExpression(PMLParser.VariableReferenceExpressionContext ctx) { + return ctx; + } + + @Override + public RuleContext visitLiteralExpression(PMLParser.LiteralExpressionContext ctx) { + return ctx; + } + + @Override + public RuleContext visitEqualsExpression(PMLParser.EqualsExpressionContext ctx) { + return ctx; + } +} diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/PMLTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/PMLTest.java new file mode 100644 index 000000000..5f52d4ba5 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/PMLTest.java @@ -0,0 +1,179 @@ +package gov.nist.csd.pm.pap.pml; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.admin.AdminPolicyNode; +import gov.nist.csd.pm.pap.op.Operation; +import gov.nist.csd.pm.pap.op.PrivilegeChecker; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.routine.Routine; +import gov.nist.csd.pm.pdp.AdminAdjudicationResponse; +import gov.nist.csd.pm.pdp.OperationRequest; +import gov.nist.csd.pm.pdp.PDP; +import gov.nist.csd.pm.pdp.exception.UnauthorizedException; +import org.junit.jupiter.api.Test; + +import java.util.List; +import java.util.Map; + +import static gov.nist.csd.pm.pdp.Decision.DENY; +import static gov.nist.csd.pm.pdp.Decision.GRANT; +import static org.junit.jupiter.api.Assertions.*; + +public class PMLTest { + + @Test + void testCallingNonPMLOperationAndRoutineFromPMLWithOperandsAndReturnValue() throws PMException { + MemoryPAP pap = new MemoryPAP(); + pap.executePML(new UserContext("u1"), """ + create pc "pc1" + create ua "ua1" in ["pc1"] + create u "u1" in ["ua1"] + create u "u2" in ["ua1"] + associate "ua1" and ADMIN_POLICY_OBJECT with ["assign"] + + create prohibition "pro1" + deny user "u2" + access rights ["assign"] + on union of [ADMIN_POLICY_OBJECT] + """); + + Operation op1 = new Operation<>("op1", List.of("a", "b", "c")) { + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { + PrivilegeChecker.check(pap, userCtx, AdminPolicyNode.ADMIN_POLICY_OBJECT.nodeName(), "assign"); + } + + @Override + public Object execute(PAP pap, Map operands) throws PMException { + String a = (String) operands.get("a"); + List b = (List) operands.get("b"); + Map c = (Map) operands.get("c"); + + pap.modify().graph().createPolicyClass("1" + a); + + for (String b1 : b) { + pap.modify().graph().createPolicyClass("1" + b1); + } + + for (Map.Entry c1 : c.entrySet()) { + pap.modify().graph().createPolicyClass("1" + c1.getKey()); + pap.modify().graph().createPolicyClass("1" + c1.getValue()); + } + + return null; + } + }; + pap.modify().operations().createAdminOperation(op1); + + pap.modify().routines().createAdminRoutine(new Routine<>("routine1", List.of("a", "b", "c")) { + @Override + public Object execute(PAP pap, Map operands) throws PMException { + pap.executeAdminExecutable(op1, operands); + + return null; + } + }); + + PDP pdp = new PDP(pap); + pdp.executePML(new UserContext("u1"), """ + op1("a", ["b", "c"], {"d": "e", "f": "g"}) + """); + assertTrue(pap.query().graph().nodeExists("1a")); + assertTrue(pap.query().graph().nodeExists("1b")); + assertTrue(pap.query().graph().nodeExists("1c")); + assertTrue(pap.query().graph().nodeExists("1d")); + assertTrue(pap.query().graph().nodeExists("1e")); + assertTrue(pap.query().graph().nodeExists("1f")); + assertTrue(pap.query().graph().nodeExists("1g")); + + assertThrows(UnauthorizedException.class, () -> pdp.executePML(new UserContext("u2"), """ + op1("a", ["b", "c"], {"d": "e", "f": "g"}) + """)); + + pdp.executePML(new UserContext("u1"), """ + routine1("1", ["2", "3"], {"4": "5", "6": "7"}) + """); + assertTrue(pap.query().graph().nodeExists("11")); + assertTrue(pap.query().graph().nodeExists("12")); + assertTrue(pap.query().graph().nodeExists("13")); + assertTrue(pap.query().graph().nodeExists("14")); + assertTrue(pap.query().graph().nodeExists("15")); + assertTrue(pap.query().graph().nodeExists("16")); + assertTrue(pap.query().graph().nodeExists("17")); + + assertThrows(UnauthorizedException.class, () -> pdp.executePML(new UserContext("u2"), """ + routine1("1", ["2", "3"], {"4": "5", "6": "7"}) + """)); + } + + @Test + void testCallPMLOperationAndRoutineFromNonPML() throws PMException { + MemoryPAP pap = new MemoryPAP(); + pap.executePML(new UserContext("u1"), """ + create pc "pc1" + create ua "ua1" in ["pc1"] + create u "u1" in ["ua1"] + create u "u2" in ["ua1"] + associate "ua1" and ADMIN_POLICY_OBJECT with ["assign"] + + create prohibition "pro1" + deny user "u2" + access rights ["assign"] + on union of [ADMIN_POLICY_OBJECT] + + operation op1(string a, []string b, map[string]string c) { + check "assign" on ADMIN_POLICY_OBJECT + } { + create pc "1" + a + + foreach x in b { + create pc "1" + x + } + + foreach x, y in c { + create pc "1" + x + create pc "1" + y + } + } + + routine routine1(string a, []string b, map[string]string c) { + op1(a, b, c) + } + """); + + PDP pdp = new PDP(pap); + AdminAdjudicationResponse response = pdp.adjudicateAdminOperations(new UserContext("u1"), List.of(new OperationRequest("op1", + Map.of("a", "a", "b", List.of("b", "c"), "c", Map.of("d", "e", "f", "g"))))); + assertEquals(GRANT, response.getDecision()); + assertTrue(pap.query().graph().nodeExists("1a")); + assertTrue(pap.query().graph().nodeExists("1b")); + assertTrue(pap.query().graph().nodeExists("1c")); + assertTrue(pap.query().graph().nodeExists("1d")); + assertTrue(pap.query().graph().nodeExists("1e")); + assertTrue(pap.query().graph().nodeExists("1f")); + assertTrue(pap.query().graph().nodeExists("1g")); + + + response = pdp.adjudicateAdminOperations(new UserContext("u2"), List.of(new OperationRequest("op1", + Map.of("a", "a", "b", List.of("b", "c"), "c", Map.of("d", "e", "f", "g"))))); + assertEquals(DENY, response.getDecision()); + + response = pdp.adjudicateAdminOperations(new UserContext("u1"), List.of(new OperationRequest("op1", + Map.of("a", "1", "b", List.of("2", "3"), "c", Map.of("4", "5", "6", "7"))))); + assertEquals(GRANT, response.getDecision()); + assertTrue(pap.query().graph().nodeExists("11")); + assertTrue(pap.query().graph().nodeExists("12")); + assertTrue(pap.query().graph().nodeExists("13")); + assertTrue(pap.query().graph().nodeExists("14")); + assertTrue(pap.query().graph().nodeExists("15")); + assertTrue(pap.query().graph().nodeExists("16")); + assertTrue(pap.query().graph().nodeExists("17")); + + response = pdp.adjudicateAdminOperations(new UserContext("u2"), List.of(new OperationRequest("op1", + Map.of("a", "1", "b", List.of("2", "3"), "c", Map.of("4", "5", "6", "7"))))); + assertEquals(DENY, response.getDecision()); + } + +} diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/PMLUtil.java b/src/test/java/gov/nist/csd/pm/pap/pml/PMLUtil.java new file mode 100644 index 000000000..47055b90c --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/PMLUtil.java @@ -0,0 +1,32 @@ +package gov.nist.csd.pm.pap.pml; + +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.pml.expression.literal.ArrayLiteral; +import gov.nist.csd.pm.pap.pml.expression.literal.MapLiteral; +import gov.nist.csd.pm.pap.pml.expression.literal.StringLiteral; +import gov.nist.csd.pm.pap.pml.type.Type; + +import java.util.*; + +public class PMLUtil { + + public static ArrayLiteral buildArrayLiteral(String ... arr) { + List l = new ArrayList<>(); + for (String s : arr) { + l.add(new StringLiteral(s)); + } + + return new ArrayLiteral(l, Type.string()); + } + + public static MapLiteral buildMapLiteral(String ... arr) { + Map mapExpr = new HashMap<>(); + + for (int i = 0; i < arr.length; i+=2) { + Expression expression = new StringLiteral(arr[i]); + mapExpr.put(expression, new StringLiteral(arr[i+1])); + } + + return new MapLiteral(mapExpr, Type.string(), Type.string()); + } +} diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/AssignStmtVisitorTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/AssignStmtVisitorTest.java new file mode 100644 index 000000000..1a0e6ac92 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/AssignStmtVisitorTest.java @@ -0,0 +1,54 @@ +package gov.nist.csd.pm.pap.pml.compiler.visitor; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.pml.PMLContextVisitor; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.expression.literal.StringLiteral; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.scope.CompileGlobalScope; +import gov.nist.csd.pm.pap.pml.statement.PMLStatement; +import gov.nist.csd.pm.pap.pml.statement.operation.AssignStatement; +import org.junit.jupiter.api.Test; + +import static gov.nist.csd.pm.pap.pml.PMLUtil.buildArrayLiteral; +import static gov.nist.csd.pm.pap.pml.compiler.visitor.CompilerTestUtil.testCompilationError; +import static org.junit.jupiter.api.Assertions.assertEquals; + +class AssignStmtVisitorTest { + + @Test + void testSuccess() throws PMException { + PMLParser.AssignStatementContext ctx = PMLContextVisitor.toCtx( + """ + assign "a" to ["b", "c"] + """, + PMLParser.AssignStatementContext.class); + VisitorContext visitorCtx = new VisitorContext(new CompileGlobalScope()); + PMLStatement stmt = new AssignStmtVisitor(visitorCtx).visitAssignStatement(ctx); + assertEquals(0, visitorCtx.errorLog().getErrors().size()); + assertEquals( + new AssignStatement(new StringLiteral("a"), buildArrayLiteral("b", "c")), + stmt + ); + } + + @Test + void testInvalidExpressions() throws PMException { + VisitorContext visitorCtx = new VisitorContext(new CompileGlobalScope()); + + testCompilationError( + """ + assign "a" to "b" + """, visitorCtx, 1, + "expected expression type(s) [[]string], got string" + ); + + testCompilationError( + """ + assign ["a"] to "b" + """, visitorCtx, 1, + "expected expression type(s) [string], got []string" + ); + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/AssociateStmtVisitorTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/AssociateStmtVisitorTest.java new file mode 100644 index 000000000..1eab3149b --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/AssociateStmtVisitorTest.java @@ -0,0 +1,63 @@ +package gov.nist.csd.pm.pap.pml.compiler.visitor; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.pml.PMLContextVisitor; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.expression.literal.StringLiteral; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.scope.CompileGlobalScope; +import gov.nist.csd.pm.pap.pml.statement.operation.AssociateStatement; +import gov.nist.csd.pm.pap.pml.statement.PMLStatement; +import org.junit.jupiter.api.Test; + +import static gov.nist.csd.pm.pap.pml.PMLUtil.buildArrayLiteral; +import static gov.nist.csd.pm.pap.pml.compiler.visitor.CompilerTestUtil.testCompilationError; +import static org.junit.jupiter.api.Assertions.assertEquals; + +class AssociateStmtVisitorTest { + + VisitorContext visitorCtx = new VisitorContext(new CompileGlobalScope()); + + AssociateStmtVisitorTest() throws PMException { + } + + @Test + void testSuccess() throws PMException { + PMLParser.AssociateStatementContext ctx = PMLContextVisitor.toCtx( + """ + associate "a" and "b" with ["c", "d"] + """, + PMLParser.AssociateStatementContext.class); + PMLStatement stmt = new AssociateStmtVisitor(visitorCtx).visitAssociateStatement(ctx); + assertEquals(0, visitorCtx.errorLog().getErrors().size()); + assertEquals( + new AssociateStatement(new StringLiteral("a"), new StringLiteral("b"), buildArrayLiteral("c", "d")), + stmt + ); + } + + @Test + void testInvalidExpressions() throws PMException { + testCompilationError( + """ + associate ["a"] and "b" with ["c", "d"] + """, visitorCtx, 1, + "expected expression type(s) [string], got []string" + ); + + testCompilationError( + """ + associate "a" and ["b"] with ["c", "d"] + """, visitorCtx, 1, + "expected expression type(s) [string], got []string" + ); + + testCompilationError( + """ + associate "a" and "b" with "c" + """, visitorCtx, 1, + "expected expression type(s) [[]string], got string" + ); + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/BreakStmtVisitorTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/BreakStmtVisitorTest.java new file mode 100644 index 000000000..87c929bd8 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/BreakStmtVisitorTest.java @@ -0,0 +1,53 @@ +package gov.nist.csd.pm.pap.pml.compiler.visitor; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.pml.PMLContextVisitor; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.scope.CompileGlobalScope; +import gov.nist.csd.pm.pap.pml.statement.BreakStatement; +import gov.nist.csd.pm.pap.pml.statement.ForeachStatement; +import gov.nist.csd.pm.pap.pml.statement.PMLStatement; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static gov.nist.csd.pm.pap.pml.PMLUtil.buildArrayLiteral; +import static gov.nist.csd.pm.pap.pml.compiler.visitor.CompilerTestUtil.testCompilationError; +import static org.junit.jupiter.api.Assertions.assertEquals; + +class BreakStmtVisitorTest { + + @Test + void testSuccess() throws PMException { + PMLParser.ForeachStatementContext ctx = PMLContextVisitor.toCtx( + """ + foreach x in ["a"] { + break + } + """, + PMLParser.ForeachStatementContext.class); + VisitorContext visitorCtx = new VisitorContext(new CompileGlobalScope()); + PMLStatement stmt = new ForeachStmtVisitor(visitorCtx).visitForeachStatement(ctx); + assertEquals(0, visitorCtx.errorLog().getErrors().size()); + assertEquals( + new ForeachStatement("x", null, buildArrayLiteral("a"), List.of( + new BreakStatement() + )), + stmt + ); + } + + @Test + void testNotInForLoop() throws PMException { + VisitorContext visitorCtx = new VisitorContext(new CompileGlobalScope()); + + testCompilationError( + """ + break + """, visitorCtx, 1, + "break statement not in foreach" + ); + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CompilerTestUtil.java b/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CompilerTestUtil.java new file mode 100644 index 000000000..140cfad88 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CompilerTestUtil.java @@ -0,0 +1,30 @@ +package gov.nist.csd.pm.pap.pml.compiler.visitor; + +import gov.nist.csd.pm.pap.pml.PMLContextVisitor; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.exception.PMLCompilationRuntimeException; +import org.antlr.v4.runtime.ParserRuleContext; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +public class CompilerTestUtil { + + public static void testCompilationError(String input, VisitorContext visitorContext, + int numExpectedErrors, String ... expectedError) { + ParserRuleContext ctx = PMLContextVisitor.toCtx(input, ParserRuleContext.class); + StatementVisitor statementVisitor = new StatementVisitor(visitorContext); + + PMLCompilationRuntimeException e = assertThrows( + PMLCompilationRuntimeException.class, + () -> statementVisitor.visit(ctx) + ); + + assertEquals(numExpectedErrors, e.getErrors().size()); + + for (int i = 0; i < expectedError.length; i++) { + assertEquals(expectedError[i], e.getErrors().get(i).errorMessage()); + } + } + +} diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/ContinueStmtVisitorTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/ContinueStmtVisitorTest.java new file mode 100644 index 000000000..a92cd0494 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/ContinueStmtVisitorTest.java @@ -0,0 +1,53 @@ +package gov.nist.csd.pm.pap.pml.compiler.visitor; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.pml.PMLContextVisitor; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.scope.CompileGlobalScope; +import gov.nist.csd.pm.pap.pml.statement.ContinueStatement; +import gov.nist.csd.pm.pap.pml.statement.ForeachStatement; +import gov.nist.csd.pm.pap.pml.statement.PMLStatement; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static gov.nist.csd.pm.pap.pml.PMLUtil.buildArrayLiteral; +import static gov.nist.csd.pm.pap.pml.compiler.visitor.CompilerTestUtil.testCompilationError; +import static org.junit.jupiter.api.Assertions.assertEquals; + +class ContinueStmtVisitorTest { + + @Test + void testSuccess() throws PMException { + PMLParser.ForeachStatementContext ctx = PMLContextVisitor.toCtx( + """ + foreach x in ["a"] { + continue + } + """, + PMLParser.ForeachStatementContext.class); + VisitorContext visitorCtx = new VisitorContext(new CompileGlobalScope()); + PMLStatement stmt = new ForeachStmtVisitor(visitorCtx).visitForeachStatement(ctx); + assertEquals(0, visitorCtx.errorLog().getErrors().size()); + assertEquals( + new ForeachStatement("x", null, buildArrayLiteral("a"), List.of( + new ContinueStatement() + )), + stmt + ); + } + + @Test + void testNotInForLoop() throws PMException { + VisitorContext visitorCtx = new VisitorContext(new CompileGlobalScope()); + + testCompilationError( + """ + continue + """, visitorCtx, 1, + "continue statement not in foreach" + ); + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CreateNonPCStmtVisitorTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CreateNonPCStmtVisitorTest.java new file mode 100644 index 000000000..67a569168 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CreateNonPCStmtVisitorTest.java @@ -0,0 +1,66 @@ +package gov.nist.csd.pm.pap.pml.compiler.visitor; + +import gov.nist.csd.pm.pap.graph.node.NodeType; +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.pml.PMLContextVisitor; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.expression.literal.StringLiteral; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.executable.operation.builtin.Equals; +import gov.nist.csd.pm.pap.pml.scope.CompileGlobalScope; +import gov.nist.csd.pm.pap.pml.statement.operation.CreateNonPCStatement; +import gov.nist.csd.pm.pap.pml.statement.PMLStatement; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +import java.util.Map; + +import static gov.nist.csd.pm.pap.pml.PMLUtil.buildArrayLiteral; +import static gov.nist.csd.pm.pap.pml.compiler.visitor.CompilerTestUtil.testCompilationError; +import static org.junit.jupiter.api.Assertions.assertEquals; + +class CreateNonPCStmtVisitorTest { + + private static CompileGlobalScope testGlobalScope; + + @BeforeAll + static void setup() throws PMException { + testGlobalScope = new CompileGlobalScope(); + testGlobalScope.addExecutables(Map.of("equals", new Equals().getSignature())); + } + + @Test + void testSuccess() { + PMLParser.CreateNonPCStatementContext ctx = PMLContextVisitor.toCtx( + """ + create user attribute "ua1" in ["a"] + """, + PMLParser.CreateNonPCStatementContext.class); + VisitorContext visitorCtx = new VisitorContext(testGlobalScope); + PMLStatement stmt = new CreateNonPCStmtVisitor(visitorCtx).visitCreateNonPCStatement(ctx); + assertEquals(0, visitorCtx.errorLog().getErrors().size()); + assertEquals( + new CreateNonPCStatement(new StringLiteral("ua1"), NodeType.UA, buildArrayLiteral("a")), + stmt + ); + } + + @Test + void testInvalidExpressions() { + VisitorContext visitorCtx = new VisitorContext(testGlobalScope); + testCompilationError( + """ + create user attribute ["ua1"] in ["a"] + """, visitorCtx, 1, + "expected expression type(s) [string], got []string" + ); + + testCompilationError( + """ + create user attribute "ua1" in "a" + """, visitorCtx, 1, + "expected expression type(s) [[]string], got string" + ); + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CreateObligationStmtVisitorTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CreateObligationStmtVisitorTest.java new file mode 100644 index 000000000..aba3fd2ea --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CreateObligationStmtVisitorTest.java @@ -0,0 +1,49 @@ +package gov.nist.csd.pm.pap.pml.compiler.visitor; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.pml.PMLContextVisitor; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.expression.literal.StringLiteral; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.scope.CompileGlobalScope; +import gov.nist.csd.pm.pap.pml.statement.operation.CreateObligationStatement; +import gov.nist.csd.pm.pap.pml.statement.PMLStatement; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static gov.nist.csd.pm.pap.pml.compiler.visitor.CompilerTestUtil.testCompilationError; +import static org.junit.jupiter.api.Assertions.assertEquals; + +class CreateObligationStmtVisitorTest { + + @Test + void testSuccess() throws PMException { + PMLParser.CreateObligationStatementContext ctx = PMLContextVisitor.toCtx( + """ + create obligation "test" {} + """, + PMLParser.CreateObligationStatementContext.class); + VisitorContext visitorCtx = new VisitorContext(new CompileGlobalScope()); + PMLStatement stmt = new CreateObligationStmtVisitor(visitorCtx).visitCreateObligationStatement(ctx); + assertEquals(0, visitorCtx.errorLog().getErrors().size()); + assertEquals( + new CreateObligationStatement(new StringLiteral("test"), List.of()), + stmt + ); + } + + @Test + void testInvalidNameExpression() throws PMException { + VisitorContext visitorCtx = new VisitorContext(new CompileGlobalScope()); + + testCompilationError( + """ + create obligation ["test"] {} + """, visitorCtx, 1, + "expected expression type(s) [string], got []string" + ); + } + + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CreatePolicyStmtVisitorTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CreatePolicyStmtVisitorTest.java new file mode 100644 index 000000000..f31a5d7f4 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CreatePolicyStmtVisitorTest.java @@ -0,0 +1,62 @@ +package gov.nist.csd.pm.pap.pml.compiler.visitor; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.pml.PMLContextVisitor; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.expression.literal.StringLiteral; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.scope.CompileGlobalScope; +import gov.nist.csd.pm.pap.pml.statement.operation.CreatePolicyStatement; +import gov.nist.csd.pm.pap.pml.statement.PMLStatement; +import org.junit.jupiter.api.Test; + +import static gov.nist.csd.pm.pap.pml.compiler.visitor.CompilerTestUtil.testCompilationError; +import static org.junit.jupiter.api.Assertions.*; + +class CreatePolicyStmtVisitorTest { + + @Test + void testSuccess() throws PMException { + PMLParser.CreatePolicyStatementContext ctx = PMLContextVisitor.toCtx( + """ + create policy class "test" + """, + PMLParser.CreatePolicyStatementContext.class); + VisitorContext visitorCtx = new VisitorContext(new CompileGlobalScope()); + PMLStatement stmt = new CreatePolicyStmtVisitor(visitorCtx).visitCreatePolicyStatement(ctx); + assertEquals(0, visitorCtx.errorLog().getErrors().size()); + assertEquals( + new CreatePolicyStatement(new StringLiteral("test")), + stmt + ); + } + + + @Test + void testSuccessWithProperties() throws PMException { + PMLParser.CreatePolicyStatementContext ctx = PMLContextVisitor.toCtx( + """ + create policy class "test" + """, + PMLParser.CreatePolicyStatementContext.class); + VisitorContext visitorCtx = new VisitorContext(new CompileGlobalScope()); + PMLStatement stmt = new CreatePolicyStmtVisitor(visitorCtx).visitCreatePolicyStatement(ctx); + assertEquals(0, visitorCtx.errorLog().getErrors().size()); + assertEquals( + new CreatePolicyStatement(new StringLiteral("test")), + stmt + ); + } + + @Test + void testInvalidNameExpression() throws PMException { + VisitorContext visitorCtx = new VisitorContext(new CompileGlobalScope()); + + testCompilationError( + """ + create policy class ["test"] + """, visitorCtx, 1, + "expected expression type(s) [string], got []string" + ); + } +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CreateProhibitionStmtVisitorTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CreateProhibitionStmtVisitorTest.java new file mode 100644 index 000000000..4440d39fd --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CreateProhibitionStmtVisitorTest.java @@ -0,0 +1,97 @@ +package gov.nist.csd.pm.pap.pml.compiler.visitor; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.prohibition.ProhibitionSubject; +import gov.nist.csd.pm.pap.pml.PMLContextVisitor; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.expression.NegatedExpression; +import gov.nist.csd.pm.pap.pml.expression.literal.ArrayLiteral; +import gov.nist.csd.pm.pap.pml.expression.literal.StringLiteral; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.scope.CompileGlobalScope; +import gov.nist.csd.pm.pap.pml.statement.operation.CreateProhibitionStatement; +import gov.nist.csd.pm.pap.pml.statement.PMLStatement; +import gov.nist.csd.pm.pap.pml.type.Type; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static gov.nist.csd.pm.pap.pml.PMLUtil.buildArrayLiteral; +import static gov.nist.csd.pm.pap.pml.compiler.visitor.CompilerTestUtil.testCompilationError; +import static org.junit.jupiter.api.Assertions.assertEquals; + +class CreateProhibitionStmtVisitorTest { + + @Test + void testSuccess() throws PMException { + PMLParser.CreateProhibitionStatementContext ctx = PMLContextVisitor.toCtx( + """ + create prohibition "test" + deny user "u1" + ["read"] + on union of [!"oa1"] + """, + PMLParser.CreateProhibitionStatementContext.class); + VisitorContext visitorCtx = new VisitorContext(new CompileGlobalScope()); + PMLStatement stmt = new CreateProhibitionStmtVisitor(visitorCtx).visitCreateProhibitionStatement(ctx); + assertEquals(0, visitorCtx.errorLog().getErrors().size()); + assertEquals( + new CreateProhibitionStatement( + new StringLiteral("test"), + new StringLiteral("u1"), + ProhibitionSubject.Type.USER, + buildArrayLiteral("read"), + false, + new ArrayLiteral(List.of(new NegatedExpression(new StringLiteral("oa1"))), Type.string()) + ), + stmt + ); + } + + @Test + void testInvalidExpressions() throws PMException { + VisitorContext visitorCtx = new VisitorContext(new CompileGlobalScope()); + + testCompilationError( + """ + create prohibition ["test"] + deny user "u1" + ["read"] + on union of [!"oa1"] + """, visitorCtx, 1, + "expected expression type(s) [string], got []string" + ); + + testCompilationError( + """ + create prohibition "test" + deny user ["u1"] + ["read"] + on union of [!"oa1"] + """, visitorCtx, 1, + "expected expression type(s) [string], got []string" + ); + + testCompilationError( + """ + create prohibition "test" + deny user "u1" + "read" + on union of [!"oa1"] + """, visitorCtx, 1, + "expected expression type(s) [[]string], got string" + ); + + testCompilationError( + """ + create prohibition "test" + deny user "u1" + ["read"] + on union of !"oa1" + """, visitorCtx, 1, + "expected expression type(s) [[]string], got string" + ); + + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CreateRuleStmtVisitorTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CreateRuleStmtVisitorTest.java new file mode 100644 index 000000000..061e62882 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/CreateRuleStmtVisitorTest.java @@ -0,0 +1,257 @@ +package gov.nist.csd.pm.pap.pml.compiler.visitor; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.pml.PMLCompiler; +import gov.nist.csd.pm.pap.pml.exception.PMLCompilationException; +import gov.nist.csd.pm.pap.pml.expression.literal.StringLiteral; +import gov.nist.csd.pm.pap.pml.pattern.OperationPattern; +import gov.nist.csd.pm.pap.pml.pattern.operand.AnyOperandPattern; +import gov.nist.csd.pm.pap.pml.pattern.subject.LogicalSubjectPatternExpression; +import gov.nist.csd.pm.pap.pml.pattern.subject.SubjectPattern; +import gov.nist.csd.pm.pap.pml.pattern.subject.UsernamePattern; +import gov.nist.csd.pm.pap.pml.statement.PMLStatement; +import gov.nist.csd.pm.pap.pml.statement.operation.CreateObligationStatement; +import gov.nist.csd.pm.pap.pml.statement.operation.CreatePolicyStatement; +import gov.nist.csd.pm.pap.pml.statement.operation.CreateRuleStatement; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.*; + +class CreateRuleStmtVisitorTest { + + PMLCompiler pmlCompiler = new PMLCompiler(); + + @Test + void testSubjectClause() throws PMException { + String pml = """ + create obligation "obligation1" { + create rule "any user" + when any user + performs "test_event" + do(ctx) {} + + create rule "users" + when user "u1" + performs "test_event" + do(ctx) {} + + create rule "users list" + when user "u1" || "u2" + performs "test_event" + do(ctx) {} + } + """; + List stmts = pmlCompiler.compilePML(pml); + assertEquals(1, stmts.size()); + + CreateObligationStatement stmt = (CreateObligationStatement)stmts.get(0); + assertEquals( + new CreateObligationStatement( + new StringLiteral("obligation1"), + List.of( + new CreateRuleStatement( + new StringLiteral("any user"), + new SubjectPattern(), + new OperationPattern("test_event"), + Map.of(), + new CreateRuleStatement.ResponseBlock("ctx", new ArrayList<>()) + ), + new CreateRuleStatement( + new StringLiteral("users"), + new SubjectPattern(new UsernamePattern("u1")), + new OperationPattern("test_event"), + Map.of(), + new CreateRuleStatement.ResponseBlock("ctx", new ArrayList<>()) + ), + new CreateRuleStatement( + new StringLiteral("users list"), + new SubjectPattern(new LogicalSubjectPatternExpression(new UsernamePattern("u1"), new UsernamePattern("u2"), false)), + new OperationPattern("test_event"), + Map.of(), + new CreateRuleStatement.ResponseBlock("ctx", new ArrayList<>()) + ) + ) + ), + stmt + ); + } + + @Test + void testPerformsClause() throws PMException { + String pml = """ + create obligation "obligation1" { + create rule "r1" + when any user + performs any operation + do(ctx) {} + } + """; + List stmts = pmlCompiler.compilePML(pml); + assertEquals(1, stmts.size()); + + CreateObligationStatement stmt = (CreateObligationStatement)stmts.get(0); + CreateObligationStatement expected = new CreateObligationStatement( + new StringLiteral("obligation1"), + List.of( + new CreateRuleStatement( + new StringLiteral("r1"), + new SubjectPattern(), + new OperationPattern(), + Map.of(), + new CreateRuleStatement.ResponseBlock("ctx", new ArrayList<>()) + ) + ) + ); + assertEquals(expected, stmt); + + String pml2 = """ + create obligation "obligation1" { + create rule "r1" + when any user + do(ctx) {} + } + """; + PMLCompilationException e = assertThrows( + PMLCompilationException.class, + () -> pmlCompiler.compilePML(pml2) + ); + assertEquals(1, e.getErrors().size()); + assertEquals("mismatched input 'do' expecting 'performs'", e.getErrors().getFirst().errorMessage()); + } + + @Test + void testOnClause() throws PMException { + String pml = """ + create obligation "obligation1" { + create rule "any operand" + when any user + performs any operation + do(ctx) {} + + create rule "any operand with on" + when any user + performs any operation + on {} + do(ctx) {} + + create rule "an operand" + when any user + performs "assign" + on { + ascendant: any + } + do(ctx) {} + } + """; + List stmts = pmlCompiler.compilePML(pml); + assertEquals(1, stmts.size()); + + CreateObligationStatement stmt = (CreateObligationStatement)stmts.get(0); + CreateObligationStatement expected = new CreateObligationStatement( + new StringLiteral("obligation1"), + List.of( + new CreateRuleStatement( + new StringLiteral("any operand"), + new SubjectPattern(), + new OperationPattern(), + Map.of(), + new CreateRuleStatement.ResponseBlock("ctx", new ArrayList<>()) + ), + new CreateRuleStatement( + new StringLiteral("any operand with on"), + new SubjectPattern(), + new OperationPattern(), + Map.of(), + new CreateRuleStatement.ResponseBlock("ctx", new ArrayList<>()) + ), + new CreateRuleStatement( + new StringLiteral("an operand"), + new SubjectPattern(), + new OperationPattern("assign"), + Map.of( + "ascendant", List.of(new AnyOperandPattern()) + ), + new CreateRuleStatement.ResponseBlock("ctx", new ArrayList<>()) + ) + ) + ); + + assertEquals(expected, stmt); + } + + @Test + void testResponse() throws PMException { + String pml = """ + create obligation "obligation1" { + create rule "r1" + when any user + performs any operation + do(ctx) { + create policy class "pc1" + create policy class "pc2" + } + } + """; + List stmts = pmlCompiler.compilePML(pml); + assertEquals(1, stmts.size()); + + CreateObligationStatement stmt = (CreateObligationStatement)stmts.getFirst(); + CreateObligationStatement expected = new CreateObligationStatement( + new StringLiteral("obligation1"), + List.of( + new CreateRuleStatement( + new StringLiteral("r1"), + new SubjectPattern(), + new OperationPattern(), + Map.of(), + new CreateRuleStatement.ResponseBlock("ctx", List.of( + new CreatePolicyStatement(new StringLiteral("pc1")), + new CreatePolicyStatement(new StringLiteral("pc2")) + )) + ) + ) + ); + assertEquals(expected, stmt); + } + + @Test + void testFunctionInResponseReturnsError() throws PMException { + String pml = """ + create obligation "obligation1" { + create rule "e1 and e2" + when any user + performs any operation + do(ctx) { + operation f1() {} + } + } + """; + PMLCompilationException e = assertThrows( + PMLCompilationException.class, + () -> pmlCompiler.compilePML(pml) + ); + assertEquals( + "operations/routines are not allowed inside response blocks", + e.getErrors().getFirst().errorMessage() + ); + } + + @Test + void testReturnValueInResponseThrowsException() { + String pml = """ + create obligation "obligation1" { + create rule "any user" + when subject => pAny() + performs op => pEquals(op, "test_event") + do(ctx) { + return "test" + } + } + """; + assertThrows(PMLCompilationException.class, () -> pmlCompiler.compilePML(pml)); + } +} diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/DeassignStmtVisitorTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/DeassignStmtVisitorTest.java new file mode 100644 index 000000000..0127f166e --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/DeassignStmtVisitorTest.java @@ -0,0 +1,54 @@ +package gov.nist.csd.pm.pap.pml.compiler.visitor; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.pml.PMLContextVisitor; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.expression.literal.StringLiteral; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.scope.CompileGlobalScope; +import gov.nist.csd.pm.pap.pml.statement.operation.DeassignStatement; +import gov.nist.csd.pm.pap.pml.statement.PMLStatement; +import org.junit.jupiter.api.Test; + +import static gov.nist.csd.pm.pap.pml.PMLUtil.buildArrayLiteral; +import static gov.nist.csd.pm.pap.pml.compiler.visitor.CompilerTestUtil.testCompilationError; +import static org.junit.jupiter.api.Assertions.assertEquals; + +class DeassignStmtVisitorTest { + + @Test + void testSuccess() throws PMException { + PMLParser.DeassignStatementContext ctx = PMLContextVisitor.toCtx( + """ + deassign "a" from ["b", "c"] + """, + PMLParser.DeassignStatementContext.class); + VisitorContext visitorCtx = new VisitorContext(new CompileGlobalScope()); + PMLStatement stmt = new DeassignStmtVisitor(visitorCtx).visitDeassignStatement(ctx); + assertEquals(0, visitorCtx.errorLog().getErrors().size()); + assertEquals( + new DeassignStatement(new StringLiteral("a"), buildArrayLiteral("b", "c")), + stmt + ); + } + + @Test + void testInvalidExpressions() throws PMException { + VisitorContext visitorCtx = new VisitorContext(new CompileGlobalScope()); + + testCompilationError( + """ + deassign "a" from "c" + """, visitorCtx, 1, + "expected expression type(s) [[]string], got string" + ); + + testCompilationError( + """ + deassign ["a"] from ["b", "c"] + """, visitorCtx, 1, + "expected expression type(s) [string], got []string" + ); + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/DeleteRuleStmtVisitorTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/DeleteRuleStmtVisitorTest.java new file mode 100644 index 000000000..e0b301c04 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/DeleteRuleStmtVisitorTest.java @@ -0,0 +1,53 @@ +package gov.nist.csd.pm.pap.pml.compiler.visitor; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.pml.PMLContextVisitor; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.expression.literal.StringLiteral; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.scope.CompileGlobalScope; +import gov.nist.csd.pm.pap.pml.statement.operation.DeleteRuleStatement; +import gov.nist.csd.pm.pap.pml.statement.PMLStatement; +import org.junit.jupiter.api.Test; + +import static gov.nist.csd.pm.pap.pml.compiler.visitor.CompilerTestUtil.testCompilationError; +import static org.junit.jupiter.api.Assertions.assertEquals; + +class DeleteRuleStmtVisitorTest { + + @Test + void testSuccess() throws PMException { + PMLParser.DeleteRuleStatementContext ctx = PMLContextVisitor.toCtx( + """ + delete rule "rule1" from obligation "obl1" + """, + PMLParser.DeleteRuleStatementContext.class); + VisitorContext visitorCtx = new VisitorContext(new CompileGlobalScope()); + PMLStatement stmt = new DeleteRuleStmtVisitor(visitorCtx).visitDeleteRuleStatement(ctx); + assertEquals(0, visitorCtx.errorLog().getErrors().size()); + assertEquals( + new DeleteRuleStatement(new StringLiteral("rule1"), new StringLiteral("obl1")), + stmt + ); + } + + @Test + void testInvalidExpressions() throws PMException { + VisitorContext visitorCtx = new VisitorContext(new CompileGlobalScope()); + + testCompilationError( + """ + delete rule ["rule1"] from obligation "obl1" + """, visitorCtx, 1, + "expected expression type(s) [string], got []string" + ); + + testCompilationError( + """ + delete rule "rule1" from obligation ["obl1"] + """, visitorCtx, 1, + "expected expression type(s) [string], got []string" + ); + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/DeleteStmtVisitorTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/DeleteStmtVisitorTest.java new file mode 100644 index 000000000..1c30ab86a --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/DeleteStmtVisitorTest.java @@ -0,0 +1,77 @@ +package gov.nist.csd.pm.pap.pml.compiler.visitor; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.pml.PMLContextVisitor; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.expression.literal.StringLiteral; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.scope.CompileGlobalScope; +import gov.nist.csd.pm.pap.pml.statement.operation.DeleteStatement; +import gov.nist.csd.pm.pap.pml.statement.PMLStatement; +import org.junit.jupiter.api.Test; + +import static gov.nist.csd.pm.pap.pml.compiler.visitor.CompilerTestUtil.testCompilationError; +import static org.junit.jupiter.api.Assertions.assertEquals; + +class DeleteStmtVisitorTest { + + @Test + void testDeleteNode() throws PMException { + PMLParser.DeleteStatementContext ctx = PMLContextVisitor.toCtx( + """ + delete object attribute "oa1" + """, + PMLParser.DeleteStatementContext.class); + VisitorContext visitorCtx = new VisitorContext(new CompileGlobalScope()); + PMLStatement stmt = new DeleteStmtVisitor(visitorCtx).visitDeleteStatement(ctx); + assertEquals(0, visitorCtx.errorLog().getErrors().size()); + assertEquals( + new DeleteStatement(DeleteStatement.Type.OBJECT_ATTRIBUTE, new StringLiteral("oa1")), + stmt + ); + } + + @Test + void testInvalidExpressions() throws PMException { + VisitorContext visitorCtx = new VisitorContext(new CompileGlobalScope()); + + testCompilationError( + """ + delete object attribute ["oa1"] + """, visitorCtx, 1, + "expected expression type(s) [string], got []string" + ); + } + + @Test + void testDeleteObligation() throws PMException { + PMLParser.DeleteStatementContext ctx = PMLContextVisitor.toCtx( + """ + delete obligation "test" + """, + PMLParser.DeleteStatementContext.class); + VisitorContext visitorCtx = new VisitorContext(new CompileGlobalScope()); + PMLStatement stmt = new DeleteStmtVisitor(visitorCtx).visitDeleteStatement(ctx); + assertEquals(0, visitorCtx.errorLog().getErrors().size()); + assertEquals( + new DeleteStatement(DeleteStatement.Type.OBLIGATION, new StringLiteral("test")), + stmt + ); + } + + @Test + void testDeleteProhibition() throws PMException { + PMLParser.DeleteStatementContext ctx = PMLContextVisitor.toCtx( + """ + delete prohibition "test" + """, + PMLParser.DeleteStatementContext.class); + VisitorContext visitorCtx = new VisitorContext(new CompileGlobalScope()); + PMLStatement stmt = new DeleteStmtVisitor(visitorCtx).visitDeleteStatement(ctx); + assertEquals(0, visitorCtx.errorLog().getErrors().size()); + assertEquals( + new DeleteStatement(DeleteStatement.Type.PROHIBITION, new StringLiteral("test")), + stmt + ); + } +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/DissociateStmtVisitorTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/DissociateStmtVisitorTest.java new file mode 100644 index 000000000..53055f108 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/DissociateStmtVisitorTest.java @@ -0,0 +1,53 @@ +package gov.nist.csd.pm.pap.pml.compiler.visitor; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.pml.PMLContextVisitor; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.expression.literal.StringLiteral; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.scope.CompileGlobalScope; +import gov.nist.csd.pm.pap.pml.statement.operation.DissociateStatement; +import gov.nist.csd.pm.pap.pml.statement.PMLStatement; +import org.junit.jupiter.api.Test; + +import static gov.nist.csd.pm.pap.pml.compiler.visitor.CompilerTestUtil.testCompilationError; +import static org.junit.jupiter.api.Assertions.assertEquals; + +class DissociateStmtVisitorTest { + + @Test + void testSuccess() throws PMException { + PMLParser.DissociateStatementContext ctx = PMLContextVisitor.toCtx( + """ + dissociate "a" and "b" + """, + PMLParser.DissociateStatementContext.class); + VisitorContext visitorCtx = new VisitorContext(new CompileGlobalScope()); + PMLStatement stmt = new DissociateStmtVisitor(visitorCtx).visitDissociateStatement(ctx); + assertEquals(0, visitorCtx.errorLog().getErrors().size()); + assertEquals( + new DissociateStatement(new StringLiteral("a"), new StringLiteral("b")), + stmt + ); + } + + @Test + void testInvalidExpressions() throws PMException { + VisitorContext visitorCtx = new VisitorContext(new CompileGlobalScope()); + + testCompilationError( + """ + dissociate ["a"] and "b" + """, visitorCtx, 1, + "expected expression type(s) [string], got []string" + ); + + testCompilationError( + """ + dissociate "a" and ["b"] + """, visitorCtx, 1, + "expected expression type(s) [string], got []string" + ); + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/ForeachStmtVisitorTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/ForeachStmtVisitorTest.java new file mode 100644 index 000000000..80cd3f0e5 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/ForeachStmtVisitorTest.java @@ -0,0 +1,164 @@ +package gov.nist.csd.pm.pap.pml.compiler.visitor; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.pml.PMLContextVisitor; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.compiler.Variable; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.executable.PMLExecutableSignature; +import gov.nist.csd.pm.pap.pml.executable.operation.builtin.Equals; +import gov.nist.csd.pm.pap.pml.scope.CompileGlobalScope; +import gov.nist.csd.pm.pap.pml.scope.GlobalScope; +import gov.nist.csd.pm.pap.pml.scope.VariableAlreadyDefinedInScopeException; +import gov.nist.csd.pm.pap.pml.statement.ForeachStatement; +import gov.nist.csd.pm.pap.pml.statement.PMLStatement; +import gov.nist.csd.pm.pap.pml.type.Type; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +import java.util.List; +import java.util.Map; + +import static gov.nist.csd.pm.pap.pml.PMLUtil.buildArrayLiteral; +import static gov.nist.csd.pm.pap.pml.PMLUtil.buildMapLiteral; +import static gov.nist.csd.pm.pap.pml.compiler.visitor.CompilerTestUtil.testCompilationError; +import static org.junit.jupiter.api.Assertions.assertEquals; + +class ForeachStmtVisitorTest { + + private static GlobalScope testGlobalScope; + + @BeforeAll + static void setup() throws PMException { + testGlobalScope = new CompileGlobalScope(); + testGlobalScope.addExecutables(Map.of("equals", new Equals().getSignature())); + } + + @Test + void testSuccess() { + PMLParser.ForeachStatementContext ctx = PMLContextVisitor.toCtx( + """ + foreach x in ["a", "b"] {} + """, + PMLParser.ForeachStatementContext.class); + VisitorContext visitorCtx = new VisitorContext(testGlobalScope); + PMLStatement stmt = new ForeachStmtVisitor(visitorCtx).visitForeachStatement(ctx); + assertEquals(0, visitorCtx.errorLog().getErrors().size()); + assertEquals( + new ForeachStatement("x", null, buildArrayLiteral("a", "b"), List.of()), + stmt + ); + + ctx = PMLContextVisitor.toCtx( + """ + foreach x, y in {"a": "b"} {} + """, + PMLParser.ForeachStatementContext.class); + visitorCtx = new VisitorContext(testGlobalScope); + stmt = new ForeachStmtVisitor(visitorCtx).visitForeachStatement(ctx); + assertEquals(0, visitorCtx.errorLog().getErrors().size()); + assertEquals( + new ForeachStatement("x", "y", buildMapLiteral("a", "b"), List.of()), + stmt + ); + } + + @Test + void testInvalidExpressions() { + VisitorContext visitorCtx = new VisitorContext(testGlobalScope); + + testCompilationError( + """ + foreach x in "a" {} + """, visitorCtx, 1, + "expected expression type(s) [[]any], got string" + + ); + + testCompilationError( + """ + foreach x in {"a": "b"} {} + """, visitorCtx, 1, + "expected expression type(s) [[]any], got map[string]string" + + ); + } + + @Test + void testKeyValueOnArray() { + VisitorContext visitorCtx = new VisitorContext(testGlobalScope); + + testCompilationError( + """ + foreach x, y in ["a"] {} + """, visitorCtx, 1, + "expected expression type(s) [map[any]any], got []string" + + ); + } + + @Test + void testIterVarDoesNotExists() throws VariableAlreadyDefinedInScopeException { + VisitorContext visitorCtx = new VisitorContext(testGlobalScope); + + testCompilationError( + """ + foreach x in arr {} + """, visitorCtx, 1, + "unknown variable 'arr' in scope" + + ); + } + + @Test + void testKeyValueVarsAlreadyExist() throws VariableAlreadyDefinedInScopeException { + VisitorContext visitorCtx = new VisitorContext(testGlobalScope); + visitorCtx.scope().addVariable("x", new Variable("x", Type.string(), false)); + + testCompilationError( + """ + foreach x in ["a"] {} + """, visitorCtx, 1, + "variable 'x' already defined in scope" + + ); + + visitorCtx = new VisitorContext(testGlobalScope); + visitorCtx.scope().addVariable("y", new Variable("y", Type.string(), false)); + + testCompilationError( + """ + foreach x, y in {"a": "b"} {} + """, visitorCtx, 1, + "variable 'y' already defined in scope" + + ); + } + + @Test + void testKeyOnlyOnMapReturnsError() throws VariableAlreadyDefinedInScopeException { + VisitorContext visitorCtx = new VisitorContext(testGlobalScope); + + testCompilationError( + """ + foreach x in {"a": "b"} {} + """, visitorCtx, 1, + "expected expression type(s) [[]any], got map[string]string" + + ); + } + + @Test + void testKeyValueOnArrayReturnsError() throws VariableAlreadyDefinedInScopeException { + VisitorContext visitorCtx = new VisitorContext(testGlobalScope); + + testCompilationError( + """ + foreach x, y in ["a": "b"] {} + """, visitorCtx, 1, + "expected expression type(s) [map[any]any], got []string" + + ); + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/FunctionInvokeStmtVisitorTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/FunctionInvokeStmtVisitorTest.java new file mode 100644 index 000000000..c208548da --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/FunctionInvokeStmtVisitorTest.java @@ -0,0 +1,138 @@ +package gov.nist.csd.pm.pap.pml.compiler.visitor; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.pml.PMLContextVisitor; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.executable.PMLExecutableSignature; +import gov.nist.csd.pm.pap.pml.expression.FunctionInvokeExpression; +import gov.nist.csd.pm.pap.pml.expression.literal.StringLiteral; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.scope.CompileGlobalScope; +import gov.nist.csd.pm.pap.pml.statement.PMLStatement; +import gov.nist.csd.pm.pap.pml.type.Type; +import org.junit.jupiter.api.Test; + +import java.util.List; +import java.util.Map; + +import static gov.nist.csd.pm.pap.pml.PMLUtil.buildArrayLiteral; +import static gov.nist.csd.pm.pap.pml.compiler.visitor.CompilerTestUtil.testCompilationError; +import static org.junit.jupiter.api.Assertions.assertEquals; + +class FunctionInvokeStmtVisitorTest { + + PMLExecutableSignature signature = new PMLExecutableSignature( + "func1", + Type.string(), + List.of("a", "b", "c"), + Map.of( + "a", Type.string(), + "b", Type.string(), + "c", Type.array(Type.string()) + ) + ); + + FunctionInvokeExpression expected = new FunctionInvokeExpression( + signature, + Map.of( + "a", new StringLiteral("a"), + "b", new StringLiteral("b"), + "c", buildArrayLiteral("c", "d") + ) + ); + + @Test + void testSuccess() throws PMException { + PMLParser.FunctionInvokeStatementContext ctx = PMLContextVisitor.toCtx( + """ + func1("a", "b", ["c", "d"]) + """, + PMLParser.FunctionInvokeStatementContext.class); + + + + CompileGlobalScope compileGlobalScope = new CompileGlobalScope(); + compileGlobalScope.addExecutable("func1", signature); + + VisitorContext visitorCtx = new VisitorContext(compileGlobalScope); + + PMLStatement stmt = new FunctionInvokeStmtVisitor(visitorCtx) + .visitFunctionInvokeStatement(ctx); + assertEquals(0, visitorCtx.errorLog().getErrors().size()); + + assertEquals(expected, stmt); + } + + @Test + void testFunctionDoesNotExist() throws PMException { + VisitorContext visitorCtx = new VisitorContext(new CompileGlobalScope()); + + testCompilationError( + """ + func1("a", "b", ["c", "d"]) + """, visitorCtx, 1, + "unknown function 'func1' in scope" + ); + } + + @Test + void testWrongNumberOfArgs() throws PMException { + CompileGlobalScope compileGlobalScope = new CompileGlobalScope(); + compileGlobalScope.addExecutable("func1", signature); + + VisitorContext visitorCtx = new VisitorContext(compileGlobalScope); + + testCompilationError( + """ + func1("a", "b") + """, visitorCtx, 1, + "wrong number of args for function call func1: expected 3, got 2" + ); + } + + @Test + void testWrongArgType() throws PMException { + CompileGlobalScope compileGlobalScope = new CompileGlobalScope(); + compileGlobalScope.addExecutable("func1", signature); + VisitorContext visitorCtx = new VisitorContext(compileGlobalScope); + + testCompilationError( + """ + func1("a", "b", true) + """, visitorCtx, 1, + "invalid argument type: expected []string, got bool at arg 2" + ); + } + + @Test + void testNoArgs() throws PMException { + PMLParser.FunctionInvokeStatementContext ctx = PMLContextVisitor.toCtx( + """ + func1() + """, + PMLParser.FunctionInvokeStatementContext.class); + + PMLExecutableSignature signature = new PMLExecutableSignature( + "func1", + Type.string(), + List.of(), + Map.of() + ); + + CompileGlobalScope compileGlobalScope = new CompileGlobalScope(); + compileGlobalScope.addExecutable("func1", signature); + + VisitorContext visitorCtx = new VisitorContext(compileGlobalScope); + PMLStatement stmt = new FunctionInvokeStmtVisitor(visitorCtx) + .visitFunctionInvokeStatement(ctx); + assertEquals(0, visitorCtx.errorLog().getErrors().size()); + + FunctionInvokeExpression expected = new FunctionInvokeExpression( + signature, + Map.of() + ); + + assertEquals(expected, stmt); + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/IfStmtVisitorTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/IfStmtVisitorTest.java new file mode 100644 index 000000000..6a6fafa8b --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/IfStmtVisitorTest.java @@ -0,0 +1,89 @@ +package gov.nist.csd.pm.pap.pml.compiler.visitor; + +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.scope.CompileGlobalScope; +import gov.nist.csd.pm.pap.pml.statement.IfStatement; +import gov.nist.csd.pm.pap.pml.statement.PMLStatementBlock; +import gov.nist.csd.pm.pap.pml.statement.ShortDeclarationStatement; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.pml.PMLContextVisitor; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.expression.literal.BoolLiteral; +import gov.nist.csd.pm.pap.pml.expression.literal.StringLiteral; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.statement.PMLStatement; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static gov.nist.csd.pm.pap.pml.compiler.visitor.CompilerTestUtil.testCompilationError; +import static org.junit.jupiter.api.Assertions.*; + +class IfStmtVisitorTest { + + @Test + void testSuccess() throws PMException { + PMLParser.IfStatementContext ctx = PMLContextVisitor.toCtx( + """ + if true { + x := "a" + } else if false { + x := "b" + } else { + x := "c" + } + """, + PMLParser.IfStatementContext.class); + VisitorContext visitorCtx = new VisitorContext(new CompileGlobalScope()); + PMLStatement stmt = new IfStmtVisitor(visitorCtx) + .visitIfStatement(ctx); + assertEquals(0, visitorCtx.errorLog().getErrors().size()); + assertEquals( + new IfStatement( + new IfStatement.ConditionalBlock(new BoolLiteral(true), new PMLStatementBlock(List.of(new ShortDeclarationStatement("x", new StringLiteral("a"))))), + List.of(new IfStatement.ConditionalBlock(new BoolLiteral(false), new PMLStatementBlock(List.of(new ShortDeclarationStatement("x", new StringLiteral("b")))))), + new PMLStatementBlock(List.of(new ShortDeclarationStatement("x", new StringLiteral("c")))) + ), + stmt + ); + } + + @Test + void testConditionExpressionsNotBool() throws PMException { + VisitorContext visitorCtx = new VisitorContext(new CompileGlobalScope()); + + testCompilationError( + """ + if "a" { + x := "a" + } else if "b" { + x := "b" + } else { + x := "c" + } + """, visitorCtx, 1, + "expected expression type(s) [bool], got string" + ); + } + + @Test + void testReturnVoidInIf() throws PMException { + String pml = """ + operation f1() { + if true { + return + } + + create policy class "pc1" + } + + f1() + """; + PAP pap = new MemoryPAP(); + pap.executePML(new UserContext(), pml); + assertFalse(pap.query().graph().nodeExists("pc1")); + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/SetNodePropertiesStmtVisitorTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/SetNodePropertiesStmtVisitorTest.java new file mode 100644 index 000000000..cb7107cef --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/SetNodePropertiesStmtVisitorTest.java @@ -0,0 +1,55 @@ +package gov.nist.csd.pm.pap.pml.compiler.visitor; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.pml.PMLContextVisitor; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.expression.literal.StringLiteral; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.scope.CompileGlobalScope; +import gov.nist.csd.pm.pap.pml.statement.PMLStatement; +import gov.nist.csd.pm.pap.pml.statement.operation.SetNodePropertiesStatement; +import org.junit.jupiter.api.Test; + +import static gov.nist.csd.pm.pap.pml.PMLUtil.buildMapLiteral; +import static gov.nist.csd.pm.pap.pml.compiler.visitor.CompilerTestUtil.testCompilationError; +import static org.junit.jupiter.api.Assertions.assertEquals; + +class SetNodePropertiesStmtVisitorTest { + + @Test + void testSuccess() throws PMException { + PMLParser.SetNodePropertiesStatementContext ctx = PMLContextVisitor.toCtx( + """ + set properties of "o1" to {"a": "b"} + """, + PMLParser.SetNodePropertiesStatementContext.class); + VisitorContext visitorCtx = new VisitorContext(new CompileGlobalScope()); + PMLStatement stmt = new SetNodePropertiesStmtVisitor(visitorCtx) + .visitSetNodePropertiesStatement(ctx); + assertEquals(0, visitorCtx.errorLog().getErrors().size()); + assertEquals( + new SetNodePropertiesStatement(new StringLiteral("o1"), buildMapLiteral("a", "b")), + stmt + ); + } + + @Test + void testInvalidExpressions() throws PMException { + VisitorContext visitorCtx = new VisitorContext(new CompileGlobalScope()); + + testCompilationError( + """ + set properties of ["o1"] to {"a": "b"} + """, visitorCtx, 1, + "expected expression type(s) [string], got []string" + ); + + testCompilationError( + """ + set properties of "o1" to ["a", "b"] + """, visitorCtx, 1, + "expected expression type(s) [map[string]string], got []string" + ); + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/SetResourceOperationsStmtVisitorTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/SetResourceOperationsStmtVisitorTest.java new file mode 100644 index 000000000..9ddcd1b0c --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/SetResourceOperationsStmtVisitorTest.java @@ -0,0 +1,47 @@ +package gov.nist.csd.pm.pap.pml.compiler.visitor; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.pml.PMLContextVisitor; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.scope.CompileGlobalScope; +import gov.nist.csd.pm.pap.pml.statement.PMLStatement; +import gov.nist.csd.pm.pap.pml.statement.operation.SetResourceOperationsStatement; +import org.junit.jupiter.api.Test; + +import static gov.nist.csd.pm.pap.pml.PMLUtil.buildArrayLiteral; +import static gov.nist.csd.pm.pap.pml.compiler.visitor.CompilerTestUtil.testCompilationError; +import static org.junit.jupiter.api.Assertions.assertEquals; + +class SetResourceOperationsStmtVisitorTest { + + @Test + void testSuccess() throws PMException { + PMLParser.SetResourceOperationsStatementContext ctx = PMLContextVisitor.toCtx( + """ + set resource operations ["a", "b"] + """, + PMLParser.SetResourceOperationsStatementContext.class); + VisitorContext visitorCtx = new VisitorContext(new CompileGlobalScope()); + PMLStatement stmt = new SetResourceOperationsStmtVisitor(visitorCtx) + .visitSetResourceOperationsStatement(ctx); + assertEquals(0, visitorCtx.errorLog().getErrors().size()); + assertEquals( + new SetResourceOperationsStatement(buildArrayLiteral("a", "b")), + stmt + ); + } + + @Test + void testInvalidExpressions() throws PMException { + VisitorContext visitorCtx = new VisitorContext(new CompileGlobalScope()); + + testCompilationError( + """ + set resource operations "a" + """, visitorCtx, 1, + "expected expression type(s) [[]string], got string" + ); + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/StatementBlockVisitorTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/StatementBlockVisitorTest.java new file mode 100644 index 000000000..7eaf97671 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/StatementBlockVisitorTest.java @@ -0,0 +1,50 @@ +package gov.nist.csd.pm.pap.pml.compiler.visitor; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.compiler.Variable; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.exception.PMLCompilationRuntimeException; +import gov.nist.csd.pm.pap.pml.executable.PMLExecutableSignature; +import gov.nist.csd.pm.pap.pml.executable.operation.builtin.Equals; +import gov.nist.csd.pm.pap.pml.scope.CompileGlobalScope; +import gov.nist.csd.pm.pap.pml.scope.GlobalScope; +import gov.nist.csd.pm.pap.pml.type.Type; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +import static gov.nist.csd.pm.pap.pml.PMLContextVisitor.toStatementBlockCtx; +import static org.junit.jupiter.api.Assertions.*; + +class StatementBlockVisitorTest { + + private static GlobalScope testGlobalScope; + + @BeforeAll + static void setup() throws PMException { + testGlobalScope = new CompileGlobalScope(); + testGlobalScope.addExecutable("equals", new Equals().getSignature()); + } + + @Test + void testFunctionInBlock() { + PMLParser.StatementBlockContext ctx = toStatementBlockCtx( + """ + { + operation f1() {} + } + """ + ); + VisitorContext visitorContext = new VisitorContext(testGlobalScope); + PMLCompilationRuntimeException e = assertThrows( + PMLCompilationRuntimeException.class, + () -> new StatementBlockVisitor(visitorContext, Type.string()) + .visitStatementBlock(ctx) + ); + assertEquals(1, e.getErrors().size(), visitorContext.errorLog().toString()); + assertEquals("operations are not allowed inside statement blocks", + e.getErrors().get(0).errorMessage()); + } + + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/VarStmtVisitorTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/VarStmtVisitorTest.java new file mode 100644 index 000000000..623e4ea0c --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/compiler/visitor/VarStmtVisitorTest.java @@ -0,0 +1,183 @@ +package gov.nist.csd.pm.pap.pml.compiler.visitor; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.pml.PMLContextVisitor; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.compiler.Variable; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.executable.PMLExecutableSignature; +import gov.nist.csd.pm.pap.pml.executable.operation.builtin.Equals; +import gov.nist.csd.pm.pap.pml.scope.CompileGlobalScope; +import gov.nist.csd.pm.pap.pml.scope.GlobalScope; +import gov.nist.csd.pm.pap.pml.scope.UnknownVariableInScopeException; +import gov.nist.csd.pm.pap.pml.scope.VariableAlreadyDefinedInScopeException; +import gov.nist.csd.pm.pap.pml.statement.VariableAssignmentStatement; +import gov.nist.csd.pm.pap.pml.type.Type; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +import static gov.nist.csd.pm.pap.pml.compiler.visitor.CompilerTestUtil.testCompilationError; +import static org.junit.jupiter.api.Assertions.*; + +class VarStmtVisitorTest { + + private static GlobalScope testGlobalScope; + + @BeforeAll + static void setup() throws PMException { + testGlobalScope = new CompileGlobalScope(); + testGlobalScope.addExecutable("equals", new Equals().getSignature()); + } + + @Nested + class VarDeclarationTest { + + @Test + void testSuccess() throws UnknownVariableInScopeException { + PMLParser.VarDeclarationContext ctx = PMLContextVisitor.toCtx( + """ + var x = "a" + """, PMLParser.VarDeclarationContext.class); + VisitorContext visitorCtx = new VisitorContext(testGlobalScope); + new VarStmtVisitor(visitorCtx) + .visitVarDeclaration(ctx); + assertEquals(0, visitorCtx.errorLog().getErrors().size()); + assertTrue(visitorCtx.scope().variableExists("x")); + assertFalse(visitorCtx.scope().getVariable("x").isConst()); + } + + @Test + void testReassign() throws VariableAlreadyDefinedInScopeException { + VisitorContext visitorCtx = new VisitorContext(testGlobalScope); + visitorCtx.scope().addVariable("x", new Variable("x", Type.string(), false)); + testCompilationError( + """ + var x = "a" + """, visitorCtx, 1, + "variable 'x' already defined in scope" + ); + } + + @Test + void testReassignConstant() throws VariableAlreadyDefinedInScopeException { + PMLParser.VarDeclarationContext ctx = PMLContextVisitor.toCtx( + """ + var x = "a" + """, PMLParser.VarDeclarationContext.class); + VisitorContext visitorCtx = new VisitorContext(testGlobalScope); + visitorCtx.scope().addVariable("x", new Variable("x", Type.string(), true)); + + testCompilationError( + """ + var x = "a" + """, visitorCtx, 1, + "variable 'x' already defined in scope" + ); + } + + @Test + void testReassignInBlock() throws VariableAlreadyDefinedInScopeException { + VisitorContext visitorCtx = new VisitorContext(testGlobalScope); + visitorCtx.scope().addVariable("x", new Variable("x", Type.string(), true)); + + testCompilationError( + """ + var ( + x = "a" + x = "b" + ) + """, visitorCtx, 1, + "variable 'x' already defined in scope" + ); + } + + } + + @Nested + class ShortDeclarationTest { + @Test + void testSuccess() throws UnknownVariableInScopeException { + PMLParser.ShortDeclarationContext ctx = PMLContextVisitor.toCtx( + """ + x := "a" + """, PMLParser.ShortDeclarationContext.class); + VisitorContext visitorCtx = new VisitorContext(testGlobalScope); + new VarStmtVisitor(visitorCtx) + .visitShortDeclaration(ctx); + assertEquals(0, visitorCtx.errorLog().getErrors().size()); + assertTrue(visitorCtx.scope().variableExists("x")); + assertFalse(visitorCtx.scope().getVariable("x").isConst()); + } + + @Test + void testReassign() throws VariableAlreadyDefinedInScopeException { + VisitorContext visitorCtx = new VisitorContext(testGlobalScope); + visitorCtx.scope().addVariable("x", new Variable("x", Type.string(), true)); + testCompilationError( + """ + x := "a" + """, visitorCtx, 1, + "variable x already exists" + ); + } + } + + @Nested + class VariableAssignmentTest { + @Test + void testSuccess() throws UnknownVariableInScopeException, VariableAlreadyDefinedInScopeException { + PMLParser.VariableAssignmentStatementContext ctx = PMLContextVisitor.toCtx( + """ + x = "a" + """, PMLParser.VariableAssignmentStatementContext.class); + VisitorContext visitorCtx = new VisitorContext(testGlobalScope); + visitorCtx.scope().addVariable("x", new Variable("x", Type.string(), false)); + VariableAssignmentStatement stmt = + (VariableAssignmentStatement) new VarStmtVisitor(visitorCtx) + .visitVariableAssignmentStatement(ctx); + assertEquals(0, visitorCtx.errorLog().getErrors().size()); + assertTrue(visitorCtx.scope().variableExists("x")); + assertFalse(visitorCtx.scope().getVariable("x").isConst()); + assertFalse(stmt.isPlus()); + + ctx = PMLContextVisitor.toCtx( + """ + x += "a" + """, PMLParser.VariableAssignmentStatementContext.class); + visitorCtx = new VisitorContext(testGlobalScope); + visitorCtx.scope().addVariable("x", new Variable("x", Type.string(), false)); + stmt = (VariableAssignmentStatement) new VarStmtVisitor(visitorCtx) + .visitVariableAssignmentStatement(ctx); + assertEquals(0, visitorCtx.errorLog().getErrors().size()); + assertTrue(visitorCtx.scope().variableExists("x")); + assertFalse(visitorCtx.scope().getVariable("x").isConst()); + assertTrue(stmt.isPlus()); + } + + @Test + void testVariableDoesNotExist() { + VisitorContext visitorCtx = new VisitorContext(testGlobalScope); + + testCompilationError( + """ + x = "a" + """, visitorCtx, 1, + "unknown variable 'x' in scope" + ); + } + + @Test + void testVariableIsConstant() throws VariableAlreadyDefinedInScopeException { + VisitorContext visitorCtx = new VisitorContext(testGlobalScope); + visitorCtx.scope().addVariable("x", new Variable("x", Type.string(), true)); + + testCompilationError( + """ + x = "a" + """, visitorCtx, 1, + "cannot reassign const variable" + ); + } + } +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/executable/operation/PMLOperationSignatureTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/executable/operation/PMLOperationSignatureTest.java new file mode 100644 index 000000000..9c90a1e35 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/executable/operation/PMLOperationSignatureTest.java @@ -0,0 +1,30 @@ +package gov.nist.csd.pm.pap.pml.executable.operation; + +import gov.nist.csd.pm.pap.pml.type.Type; +import org.junit.jupiter.api.Test; + +import java.util.List; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.*; + +class PMLOperationSignatureTest { + + @Test + void testToFormattedString() { + PMLOperationSignature signature = new PMLOperationSignature( + "op1", + Type.array(Type.string()), + List.of("a", "b", "c"), + List.of("a"), + Map.of("a", Type.string(), "b", Type.string(), "c", Type.string()) + ); + + String actual = signature.toFormattedString(0); + assertEquals( + "operation op1(nodeop string a, string b, string c) []string ", + actual + ); + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/executable/operation/PMLOperationWrapperTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/executable/operation/PMLOperationWrapperTest.java new file mode 100644 index 000000000..592ee00aa --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/executable/operation/PMLOperationWrapperTest.java @@ -0,0 +1,108 @@ +package gov.nist.csd.pm.pap.pml.executable.operation; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.op.Operation; +import gov.nist.csd.pm.pap.op.PrivilegeChecker; +import gov.nist.csd.pm.pap.pml.executable.PMLExecutableSignature; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pdp.OperationRequest; +import gov.nist.csd.pm.pdp.PDP; +import org.junit.jupiter.api.Test; + +import java.util.List; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.*; + +class PMLOperationWrapperTest { + + @Test + void testConstructor() { + Operation op = new Operation<>("op1", List.of("a", "b", "c"), List.of("a")) { + + @Override + public Object execute(PAP pap, Map operands) throws PMException { + return null; + } + + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { + + } + }; + + PMLOperationWrapper pmlOperationWrapper = new PMLOperationWrapper(op); + assertEquals( + pmlOperationWrapper.getSignature(), + new PMLExecutableSignature("op1", Type.any(), List.of("a", "b", "c"), + Map.of("a", Type.any(), "b", Type.any(), "c", Type.any())) + ); + } + + @Test + void testExecuteWithPDP() throws PMException { + Operation op = new Operation<>("op1", List.of("a", "b", "c"), List.of("a")) { + + @Override + public Object execute(PAP pap, Map operands) throws PMException { + pap.modify().graph().createPolicyClass((String) operands.get("b")); + return null; + } + + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { + PrivilegeChecker.check(pap, userCtx, (String) operands.get("a"), "assign"); + } + }; + + String pml = """ + create pc "pc1" + create ua "ua1" in ["pc1"] + create ua "oa1" in ["pc1"] + associate "ua1" and "oa1" with ["assign"] + create u "u1" in ["ua1"] + """; + MemoryPAP pap = new MemoryPAP(); + pap.executePML(new UserContext("u1"), pml); + + pap.modify().operations().createAdminOperation(new PMLOperationWrapper(op)); + + PDP pdp = new PDP(pap); + pdp.adjudicateAdminOperations(new UserContext("u1"), List.of(new OperationRequest("op1", + Map.of("a", "oa1", "b", "b", "c", "c")))); + assertTrue(pap.query().graph().nodeExists("b")); + + // try again using pml + pap = new MemoryPAP(); + pdp = new PDP(pap); + pap.executePML(new UserContext("u1"), pml); + pap.modify().operations().createAdminOperation(new PMLOperationWrapper(op)); + pdp.runTx(new UserContext("u1"), tx -> tx.executePML(new UserContext("u1"), "op1(\"oa1\", \"b\", \"c\")")); + assertTrue(pap.query().graph().nodeExists("b")); + } + + @Test + void testPMLOperationWrapperWithReturnValue() throws PMException { + Operation op = new Operation<>("op1", List.of(), List.of()) { + + @Override + public Object execute(PAP pap, Map operands) throws PMException { + return "test"; + } + + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { + PrivilegeChecker.check(pap, userCtx, (String) operands.get("a"), "assign"); + } + }; + + MemoryPAP pap = new MemoryPAP(); + + pap.modify().operations().createAdminOperation(new PMLOperationWrapper(op)); + pap.executePML(new UserContext("u1"), "create policy class op1()"); + assertTrue(pap.query().graph().nodeExists("test")); + } +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/executable/operation/PMLStmtsOperationSignatureTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/executable/operation/PMLStmtsOperationSignatureTest.java new file mode 100644 index 000000000..507db14a0 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/executable/operation/PMLStmtsOperationSignatureTest.java @@ -0,0 +1,33 @@ +package gov.nist.csd.pm.pap.pml.executable.operation; + +import gov.nist.csd.pm.pap.pml.statement.ForeachStatement; +import gov.nist.csd.pm.pap.pml.statement.PMLStatementBlock; +import gov.nist.csd.pm.pap.pml.statement.operation.CheckStatement; +import gov.nist.csd.pm.pap.pml.type.Type; +import org.junit.jupiter.api.Test; + +import java.util.List; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.*; + +class PMLStmtsOperationSignatureTest { + + @Test + void testToFormattedString() { + PMLStmtsOperationSignature pmlStmtsOperationSignature = new PMLStmtsOperationSignature( + "op1", + Type.string(), + List.of("a", "b", "c"), + List.of("a"), + Map.of("a", Type.array(Type.string()), "b", Type.string(), "c", Type.string()), + new PMLStatementBlock() + ); + + assertEquals( + "operation op1(nodeop []string a, string b, string c) string ", + pmlStmtsOperationSignature.toFormattedString(0) + ); + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/executable/routine/PMLRoutineWrapperTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/executable/routine/PMLRoutineWrapperTest.java new file mode 100644 index 000000000..25ac6a6e1 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/executable/routine/PMLRoutineWrapperTest.java @@ -0,0 +1,100 @@ +package gov.nist.csd.pm.pap.pml.executable.routine; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.executable.PMLExecutableSignature; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.routine.Routine; +import gov.nist.csd.pm.pdp.RoutineRequest; +import gov.nist.csd.pm.pdp.PDP; +import org.junit.jupiter.api.Test; + +import java.util.List; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.*; + +class PMLRoutineWrapperTest { + + @Test + void testConstructor() { + Routine op = new Routine<>("routine1", List.of("a", "b", "c")) { + + @Override + public Object execute(PAP pap, Map operands) throws PMException { + return null; + } + }; + + PMLRoutine pmlRoutineWrapper = new PMLRoutineWrapper(op); + assertEquals( + pmlRoutineWrapper.getSignature(), + new PMLExecutableSignature("routine1", Type.any(), List.of("a", "b", "c"), + Map.of("a", Type.any(), "b", Type.any(), "c", Type.any())) + ); + } + + @Test + void testExecuteWithPDP() throws PMException { + Routine op = new Routine("routine1", List.of("a", "b", "c")) { + + @Override + public Object execute(PAP pap, Map operands) throws PMException { + pap.modify().graph().createObjectAttribute((String) operands.get("a"), List.of("pc1")); + pap.modify().graph().createObjectAttribute((String) operands.get("b"), List.of("pc1")); + pap.modify().graph().createObjectAttribute((String) operands.get("c"), List.of("pc1")); + return null; + } + }; + + String pml = """ + create pc "pc1" + create ua "ua1" in ["pc1"] + create ua "oa1" in ["pc1"] + associate "ua1" and "oa1" with ["assign"] + associate "ua1" and ADMIN_POLICY_OBJECT with ["*a"] + create u "u1" in ["ua1"] + """; + MemoryPAP pap = new MemoryPAP(); + pap.executePML(new UserContext("u1"), pml); + + pap.modify().routines().createAdminRoutine(new PMLRoutineWrapper(op)); + + PDP pdp = new PDP(pap); + pdp.adjudicateAdminRoutine(new UserContext("u1"), new RoutineRequest("routine1", + Map.of("a", "a", "b", "b", "c", "c"))); + assertTrue(pap.query().graph().nodeExists("a")); + assertTrue(pap.query().graph().nodeExists("b")); + assertTrue(pap.query().graph().nodeExists("c")); + + // try again using pml + pap = new MemoryPAP(); + pdp = new PDP(pap); + pap.executePML(new UserContext("u1"), pml); + pap.modify().routines().createAdminRoutine(new PMLRoutineWrapper(op)); + pdp.runTx(new UserContext("u1"), tx -> tx.executePML(new UserContext("u1"), "routine1(\"a\", \"b\", \"c\")")); + assertTrue(pap.query().graph().nodeExists("a")); + assertTrue(pap.query().graph().nodeExists("b")); + assertTrue(pap.query().graph().nodeExists("c")); + } + + @Test + void testPMLRoutineWrapperWithReturnValue() throws PMException { + Routine op = new Routine<>("routine1", List.of()) { + + @Override + public String execute(PAP pap, Map operands) throws PMException { + return "test"; + } + }; + + MemoryPAP pap = new MemoryPAP(); + + pap.modify().routines().createAdminRoutine(new PMLRoutineWrapper(op)); + pap.executePML(new UserContext("u1"), "create policy class routine1()"); + assertTrue(pap.query().graph().nodeExists("test")); + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/expression/EqualsExpressionTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/expression/EqualsExpressionTest.java new file mode 100644 index 000000000..7856efa09 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/expression/EqualsExpressionTest.java @@ -0,0 +1,374 @@ +package gov.nist.csd.pm.pap.pml.expression; + +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.pml.PMLContextVisitor; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.expression.literal.BoolLiteral; +import gov.nist.csd.pm.pap.pml.expression.literal.StringLiteral; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.scope.CompileGlobalScope; +import gov.nist.csd.pm.pap.pml.value.Value; +import gov.nist.csd.pm.pap.pml.value.BoolValue; +import gov.nist.csd.pm.pap.query.UserContext; +import org.junit.jupiter.api.Test; + +import static gov.nist.csd.pm.pap.pml.PMLUtil.buildArrayLiteral; +import static gov.nist.csd.pm.pap.pml.PMLUtil.buildMapLiteral; +import static org.junit.jupiter.api.Assertions.assertEquals; + +class EqualsExpressionTest { + + @Test + void testEqualsString() throws PMException { + PMLParser.EqualsExpressionContext ctx = PMLContextVisitor.toExpressionCtx( + """ + "a" == "a" + """, + PMLParser.EqualsExpressionContext.class); + VisitorContext visitorContext = new VisitorContext(new CompileGlobalScope()); + Expression expression = EqualsExpression.compileEqualsExpression(visitorContext, ctx); + assertEquals(0, visitorContext.errorLog().getErrors().size()); + + EqualsExpression equalsExpression = (EqualsExpression) expression; + assertEquals( + new EqualsExpression(new StringLiteral("a"), new StringLiteral("a"), true), + equalsExpression + ); + + MemoryPAP pap = new MemoryPAP(); + + Value value = equalsExpression.execute(new ExecutionContext(new UserContext(""), pap), pap); + assertEquals( + new BoolValue(true), + value + ); + } + + @Test + void testNotEqualsString() throws PMException { + PMLParser.EqualsExpressionContext ctx = PMLContextVisitor.toExpressionCtx( + """ + "a" != "a" + """, + PMLParser.EqualsExpressionContext.class); + VisitorContext visitorContext = new VisitorContext(new CompileGlobalScope()); + Expression expression = EqualsExpression.compileEqualsExpression(visitorContext, ctx); + assertEquals(0, visitorContext.errorLog().getErrors().size()); + + EqualsExpression equalsExpression = (EqualsExpression) expression; + assertEquals( + new EqualsExpression(new StringLiteral("a"), new StringLiteral("a"), false), + equalsExpression + ); + + Value value = equalsExpression.execute(new ExecutionContext(new UserContext(""), new MemoryPAP()), new MemoryPAP()); + assertEquals( + new BoolValue(false), + value + ); + } + + @Test + void testEqualsArray() throws PMException { + PMLParser.EqualsExpressionContext ctx = PMLContextVisitor.toExpressionCtx( + """ + ["a", "b"] == ["a", "b"] + """, + PMLParser.EqualsExpressionContext.class); + VisitorContext visitorContext = new VisitorContext(new CompileGlobalScope()); + Expression expression = EqualsExpression.compileEqualsExpression(visitorContext, ctx); + assertEquals(0, visitorContext.errorLog().getErrors().size()); + + EqualsExpression equalsExpression = (EqualsExpression) expression; + assertEquals( + new EqualsExpression(buildArrayLiteral("a", "b"), buildArrayLiteral("a", "b"), true), + equalsExpression + ); + + Value value = equalsExpression.execute(new ExecutionContext(new UserContext(""), new MemoryPAP()), new MemoryPAP()); + assertEquals( + new BoolValue(true), + value + ); + + ctx = PMLContextVisitor.toExpressionCtx( + """ + ["a", "b"] == ["b", "a"] + """, + PMLParser.EqualsExpressionContext.class); + visitorContext = new VisitorContext(new CompileGlobalScope()); + expression = EqualsExpression.compileEqualsExpression(visitorContext, ctx); + assertEquals(0, visitorContext.errorLog().getErrors().size()); + + equalsExpression = (EqualsExpression) expression; + assertEquals( + new EqualsExpression(buildArrayLiteral("a", "b"), buildArrayLiteral("b", "a"), true), + equalsExpression + ); + + value = equalsExpression.execute(new ExecutionContext(new UserContext(""), new MemoryPAP()), new MemoryPAP()); + assertEquals( + new BoolValue(false), + value + ); + } + + @Test + void testNotEqualsArray() throws PMException { + PMLParser.EqualsExpressionContext ctx = PMLContextVisitor.toExpressionCtx( + """ + ["a", "b"] != ["a", "b"] + """, + PMLParser.EqualsExpressionContext.class); + VisitorContext visitorContext = new VisitorContext(new CompileGlobalScope()); + Expression expression = EqualsExpression.compileEqualsExpression(visitorContext, ctx); + assertEquals(0, visitorContext.errorLog().getErrors().size()); + + EqualsExpression equalsExpression = (EqualsExpression) expression; + assertEquals( + new EqualsExpression(buildArrayLiteral("a", "b"), buildArrayLiteral("a", "b"), false), + equalsExpression + ); + + Value value = equalsExpression.execute(new ExecutionContext(new UserContext(""), new MemoryPAP()), new MemoryPAP()); + assertEquals( + new BoolValue(false), + value + ); + } + + @Test + void testEqualsBool() throws PMException { + PMLParser.EqualsExpressionContext ctx = PMLContextVisitor.toExpressionCtx( + """ + true == true + """, + PMLParser.EqualsExpressionContext.class); + VisitorContext visitorContext = new VisitorContext(new CompileGlobalScope()); + Expression expression = EqualsExpression.compileEqualsExpression(visitorContext, ctx); + assertEquals(0, visitorContext.errorLog().getErrors().size()); + + EqualsExpression equalsExpression = (EqualsExpression) expression; + assertEquals( + new EqualsExpression(new BoolLiteral(true), new BoolLiteral(true), true), + equalsExpression + ); + + Value value = equalsExpression.execute(new ExecutionContext(new UserContext(""), new MemoryPAP()), new MemoryPAP()); + assertEquals( + new BoolValue(true), + value + ); + + ctx = PMLContextVisitor.toExpressionCtx( + """ + true == false + """, + PMLParser.EqualsExpressionContext.class); + visitorContext = new VisitorContext(new CompileGlobalScope()); + expression = EqualsExpression.compileEqualsExpression(visitorContext, ctx); + assertEquals(0, visitorContext.errorLog().getErrors().size()); + + equalsExpression = (EqualsExpression) expression; + assertEquals( + new EqualsExpression(new BoolLiteral(true), new BoolLiteral(false), true), + equalsExpression + ); + + value = equalsExpression.execute(new ExecutionContext(new UserContext(""), new MemoryPAP()), new MemoryPAP()); + assertEquals( + new BoolValue(false), + value + ); + } + + @Test + void testNotEqualsBool() throws PMException { + PMLParser.EqualsExpressionContext ctx = PMLContextVisitor.toExpressionCtx( + """ + true != true + """, + PMLParser.EqualsExpressionContext.class); + VisitorContext visitorContext = new VisitorContext(new CompileGlobalScope()); + Expression expression = EqualsExpression.compileEqualsExpression(visitorContext, ctx); + assertEquals(0, visitorContext.errorLog().getErrors().size()); + + EqualsExpression equalsExpression = (EqualsExpression) expression; + assertEquals( + new EqualsExpression(new BoolLiteral(true), new BoolLiteral(true), false), + equalsExpression + ); + + Value value = equalsExpression.execute(new ExecutionContext(new UserContext(""), new MemoryPAP()), new MemoryPAP()); + assertEquals( + new BoolValue(false), + value + ); + } + + @Test + void testEqualsMap() throws PMException { + PMLParser.EqualsExpressionContext ctx = PMLContextVisitor.toExpressionCtx( + """ + {"a": "a", "b": "b"} == {"a": "a", "b": "b"} + """, + PMLParser.EqualsExpressionContext.class); + VisitorContext visitorContext = new VisitorContext(new CompileGlobalScope()); + Expression expression = EqualsExpression.compileEqualsExpression(visitorContext, ctx); + assertEquals(0, visitorContext.errorLog().getErrors().size()); + + EqualsExpression equalsExpression = (EqualsExpression) expression; + assertEquals( + new EqualsExpression(buildMapLiteral("a", "a", "b", "b"), buildMapLiteral("a", "a", "b", "b"), true), + equalsExpression + ); + + Value value = equalsExpression.execute(new ExecutionContext(new UserContext(""), new MemoryPAP()), new MemoryPAP()); + assertEquals( + new BoolValue(true), + value + ); + + ctx = PMLContextVisitor.toExpressionCtx( + """ + {"a": "a", "b": "b"} == {"a": "a", "b": "c"} + """, + PMLParser.EqualsExpressionContext.class); + visitorContext = new VisitorContext(new CompileGlobalScope()); + expression = EqualsExpression.compileEqualsExpression(visitorContext, ctx); + assertEquals(0, visitorContext.errorLog().getErrors().size()); + + equalsExpression = (EqualsExpression) expression; + assertEquals( + new EqualsExpression(buildMapLiteral("a", "a", "b", "b"), buildMapLiteral("a", "a", "b", "c"), true), + equalsExpression + ); + + value = equalsExpression.execute(new ExecutionContext(new UserContext(""), new MemoryPAP()), new MemoryPAP()); + assertEquals( + new BoolValue(false), + value + ); + } + + @Test + void testNotEqualsMap() throws PMException { + PMLParser.EqualsExpressionContext ctx = PMLContextVisitor.toExpressionCtx( + """ + {"a": "a", "b": "b"} != {"a": "a", "b": "b"} + """, + PMLParser.EqualsExpressionContext.class); + VisitorContext visitorContext = new VisitorContext(new CompileGlobalScope()); + Expression expression = EqualsExpression.compileEqualsExpression(visitorContext, ctx); + assertEquals(0, visitorContext.errorLog().getErrors().size()); + + EqualsExpression equalsExpression = (EqualsExpression) expression; + assertEquals( + new EqualsExpression(buildMapLiteral("a", "a", "b", "b"), buildMapLiteral("a", "a", "b", "b"), false), + equalsExpression + ); + + Value value = equalsExpression.execute(new ExecutionContext(new UserContext(""), new MemoryPAP()), new MemoryPAP()); + assertEquals( + new BoolValue(false), + value + ); + } + + @Test + void testEqualsWithParens() throws PMException { + PMLParser.EqualsExpressionContext ctx = PMLContextVisitor.toExpressionCtx( + """ + ("a" + "b") == ("a" + "b") + """, + PMLParser.EqualsExpressionContext.class); + VisitorContext visitorContext = new VisitorContext(new CompileGlobalScope()); + Expression expression = EqualsExpression.compileEqualsExpression(visitorContext, ctx); + assertEquals(0, visitorContext.errorLog().getErrors().size()); + + EqualsExpression equalsExpression = (EqualsExpression) expression; + assertEquals( + new EqualsExpression( + new ParenExpression( + new PlusExpression(new StringLiteral("a"), new StringLiteral("b")) + ), + new ParenExpression( + new PlusExpression(new StringLiteral("a"), new StringLiteral("b")) + ), + true + ), + equalsExpression + ); + + Value value = equalsExpression.execute(new ExecutionContext(new UserContext(""), new MemoryPAP()), new MemoryPAP()); + assertEquals( + new BoolValue(true), + value + ); + + ctx = PMLContextVisitor.toExpressionCtx( + """ + ("a" + "b") == ("a" + "c") + """, + PMLParser.EqualsExpressionContext.class); + visitorContext = new VisitorContext(new CompileGlobalScope()); + expression = EqualsExpression.compileEqualsExpression(visitorContext, ctx); + assertEquals(0, visitorContext.errorLog().getErrors().size()); + + equalsExpression = (EqualsExpression) expression; + assertEquals( + new EqualsExpression( + new ParenExpression( + new PlusExpression(new StringLiteral("a"), new StringLiteral("b")) + ), + new ParenExpression( + new PlusExpression(new StringLiteral("a"), new StringLiteral("c")) + ), + true + ), + equalsExpression + ); + + value = equalsExpression.execute(new ExecutionContext(new UserContext(""), new MemoryPAP()), new MemoryPAP()); + assertEquals( + new BoolValue(false), + value + ); + } + + @Test + void testNotEqualsDifferentTypes() throws PMException { + PMLParser.EqualsExpressionContext ctx = PMLContextVisitor.toExpressionCtx( + """ + ("a" + "b") == (true) + """, + PMLParser.EqualsExpressionContext.class); + VisitorContext visitorContext = new VisitorContext(new CompileGlobalScope()); + Expression expression = EqualsExpression.compileEqualsExpression(visitorContext, ctx); + assertEquals(0, visitorContext.errorLog().getErrors().size()); + + EqualsExpression equalsExpression = (EqualsExpression) expression; + assertEquals( + new EqualsExpression( + new ParenExpression( + new PlusExpression(new StringLiteral("a"), new StringLiteral("b")) + ), + new ParenExpression( + new BoolLiteral(true) + ), + true + ), + equalsExpression + ); + + Value value = equalsExpression.execute(new ExecutionContext(new UserContext(""), new MemoryPAP()), new MemoryPAP()); + assertEquals( + new BoolValue(false), + value + ); + + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/expression/ExpressionTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/expression/ExpressionTest.java new file mode 100644 index 000000000..8418d908d --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/expression/ExpressionTest.java @@ -0,0 +1,125 @@ +package gov.nist.csd.pm.pap.pml.expression; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.pml.PMLContextVisitor; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.compiler.Variable; +import gov.nist.csd.pm.pap.pml.exception.PMLCompilationRuntimeException; +import gov.nist.csd.pm.pap.pml.executable.PMLExecutableSignature; +import gov.nist.csd.pm.pap.pml.expression.literal.StringLiteral; +import gov.nist.csd.pm.pap.pml.expression.reference.ReferenceByID; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.scope.CompileGlobalScope; +import gov.nist.csd.pm.pap.pml.type.Type; +import org.junit.jupiter.api.Test; + +import java.util.List; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.*; + +class ExpressionTest { + + @Test + void testAllowedTypes() throws PMException { + PMLParser.VariableReferenceExpressionContext ctx = PMLContextVisitor.toExpressionCtx( + """ + a + """, PMLParser.VariableReferenceExpressionContext.class); + VisitorContext visitorContext = new VisitorContext(new CompileGlobalScope()); + visitorContext.scope().addVariable("a", new Variable("a", Type.string(), false)); + Expression actual = Expression.compile(visitorContext, ctx, Type.string()); + assertEquals( + new ReferenceByID("a"), + actual + ); + + ctx = PMLContextVisitor.toExpressionCtx( + """ + a + """, PMLParser.VariableReferenceExpressionContext.class); + visitorContext = new VisitorContext(new CompileGlobalScope()); + visitorContext.scope().addVariable("a", new Variable("a", Type.array(Type.string()), false)); + actual = Expression.compile(visitorContext, ctx, Type.array(Type.string())); + assertEquals( + new ReferenceByID("a"), + actual + ); + } + + @Test + void testDisallowedTypes() throws PMException { + PMLParser.VariableReferenceExpressionContext ctx = PMLContextVisitor.toExpressionCtx( + """ + a + """, PMLParser.VariableReferenceExpressionContext.class); + VisitorContext visitorContext = new VisitorContext(new CompileGlobalScope()); + visitorContext.scope().addVariable("a", new Variable("a", Type.string(), false)); + PMLCompilationRuntimeException e = assertThrows( + PMLCompilationRuntimeException.class, + () -> Expression.compile(visitorContext, ctx, Type.array(Type.string())) + ); + assertEquals(1, e.getErrors().size()); + assertEquals( + "expected expression type(s) [[]string], got string", + e.getErrors().get(0).errorMessage() + ); + } + + + @Test + void testCompileStringExpression_Literal() throws PMException { + VisitorContext visitorContext = new VisitorContext(new CompileGlobalScope()); + Expression expression = Expression.fromString(visitorContext, "\"test\"", Type.string()); + assertEquals(0, visitorContext.errorLog().getErrors().size()); + assertEquals(new StringLiteral("test"), expression); + } + + @Test + void testCompileStringExpression_VarRef() throws PMException { + VisitorContext visitorContext = new VisitorContext(new CompileGlobalScope()); + visitorContext.scope().addVariable("test", new Variable("test", Type.string(), true)); + Expression expression = Expression.fromString(visitorContext, "test", Type.string()); + assertEquals(0, visitorContext.errorLog().getErrors().size()); + assertEquals(new ReferenceByID("test"), expression); + } + + @Test + void testCompileStringExpression_FuncInvoke() throws PMException { + CompileGlobalScope compileGlobalScope = new CompileGlobalScope(); + PMLExecutableSignature signature = new PMLExecutableSignature( + "test", + Type.string(), + List.of(), + Map.of() + ); + compileGlobalScope.addExecutable("test", signature); + VisitorContext visitorContext = new VisitorContext(compileGlobalScope); + + Expression expression = Expression.fromString(visitorContext, "test()", Type.string()); + assertEquals(0, visitorContext.errorLog().getErrors().size()); + assertEquals(new FunctionInvokeExpression(signature, Map.of()), expression); + } + + @Test + void testCompileStringExpression_NonString_Error() throws PMException { + PMLCompilationRuntimeException e = assertThrows( + PMLCompilationRuntimeException.class, + () -> Expression.fromString(new VisitorContext(new CompileGlobalScope()), + "\"test\" == \"test\"", + Type.string() + ) + ); + assertEquals(1, e.getErrors().size()); + + e = assertThrows( + PMLCompilationRuntimeException.class, + () -> Expression.fromString(new VisitorContext(new CompileGlobalScope()), + "[\"a\", \"b\"]", + Type.string() + ) + ); + assertEquals(1, e.getErrors().size()); + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/expression/FunctionInvokeExpressionTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/expression/FunctionInvokeExpressionTest.java new file mode 100644 index 000000000..b50296458 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/expression/FunctionInvokeExpressionTest.java @@ -0,0 +1,240 @@ +package gov.nist.csd.pm.pap.pml.expression; + +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.executable.operation.PMLStmtsOperation; +import gov.nist.csd.pm.pap.pml.scope.CompileGlobalScope; +import gov.nist.csd.pm.pap.pml.statement.PMLStatementBlock; +import gov.nist.csd.pm.pap.pml.statement.operation.CreatePolicyStatement; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.pml.PMLContextVisitor; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.expression.literal.StringLiteral; +import gov.nist.csd.pm.pap.pml.expression.reference.ReferenceByID; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.statement.FunctionReturnStatement; +import gov.nist.csd.pm.pap.pml.statement.VariableAssignmentStatement; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.pml.value.Value; +import gov.nist.csd.pm.pap.pml.value.StringValue; +import gov.nist.csd.pm.pap.pml.value.VoidValue; +import org.junit.jupiter.api.Test; + +import java.util.List; +import java.util.Map; + +import static gov.nist.csd.pm.pap.pml.compiler.visitor.CompilerTestUtil.testCompilationError; +import static org.junit.jupiter.api.Assertions.*; + +class FunctionInvokeExpressionTest { + + static CompileGlobalScope scope = new CompileGlobalScope(); + + static PMLStmtsOperation voidFunc = new PMLStmtsOperation("voidFunc", Type.voidType(), + List.of("a", "b"), + List.of(), + Map.of("a", Type.string(), "b", Type.string()), + new PMLStatementBlock(), + new PMLStatementBlock(List.of( + new CreatePolicyStatement(new ReferenceByID("a")), + new CreatePolicyStatement(new ReferenceByID("b")) + ))); + static PMLStmtsOperation stringFunc = new PMLStmtsOperation("stringFunc", + Type.string(), + List.of("a", "b"), + List.of(), + Map.of( + "a", Type.string(), + "b", Type.string() + ), + new PMLStatementBlock(), + new PMLStatementBlock(List.of( + new VariableAssignmentStatement("x", false, new StringLiteral("test")), + new FunctionReturnStatement(new StringLiteral("test_ret")) + ))); + + static { + scope.addExecutable(voidFunc.getName(), voidFunc.getSignature()); + scope.addExecutable(stringFunc.getName(), stringFunc.getSignature()); + } + + @Test + void testVoidReturnType() throws PMException { + PMLParser.FunctionInvokeExpressionContext ctx = PMLContextVisitor.toExpressionCtx( + """ + voidFunc("a", "b") + """, PMLParser.FunctionInvokeExpressionContext.class); + VisitorContext visitorContext = new VisitorContext(scope); + + Expression e = FunctionInvokeExpression.compileFunctionInvokeExpression(visitorContext, ctx); + assertEquals(0, visitorContext.errorLog().getErrors().size(), visitorContext.errorLog().getErrors().toString()); + assertEquals( + new FunctionInvokeExpression(voidFunc.getSignature(), Map.of( + "a", new StringLiteral("a"), + "b", new StringLiteral("b") + )), + e + ); + assertEquals( + Type.voidType(), + e.getType(visitorContext.scope()) + ); + + PAP pap = new MemoryPAP(); + pap.modify().operations().createAdminOperation(voidFunc); + ExecutionContext executionContext = new ExecutionContext(new UserContext(""), pap); + Value value = e.execute(executionContext, new MemoryPAP()); + assertEquals( + new VoidValue(), + value + ); + + assertEquals( + Type.voidType(), + value.getType() + ); + } + + @Test + void testFunctionNotInScope() { + VisitorContext visitorCtx = new VisitorContext(new CompileGlobalScope()); + + testCompilationError( + """ + voidFunc("a", "b") + """, visitorCtx, 1, + "unknown function 'voidFunc' in scope" + ); + } + + @Test + void testWrongNumberOfArgs() throws PMException { + VisitorContext visitorCtx = new VisitorContext(scope); + + testCompilationError( + """ + voidFunc("a") + """, visitorCtx, 1, + "wrong number of args for function call voidFunc: expected 2, got 1" + ); + } + + @Test + void testWrongArgType() throws PMException { + VisitorContext visitorCtx = new VisitorContext(scope); + + testCompilationError( + """ + voidFunc("a", ["b", "c"]) + """, visitorCtx, 1, + "invalid argument type: expected string, got []string at arg 1" + ); + } + + @Test + void testExecuteReturnValue() throws PMException { + PMLParser.FunctionInvokeExpressionContext ctx = PMLContextVisitor.toExpressionCtx( + """ + stringFunc("a", "b") + """, PMLParser.FunctionInvokeExpressionContext.class); + VisitorContext visitorContext = new VisitorContext(scope); + + Expression e = FunctionInvokeExpression.compileFunctionInvokeExpression(visitorContext, ctx); + assertEquals(0, visitorContext.errorLog().getErrors().size(), visitorContext.errorLog().getErrors().toString()); + assertEquals( + Type.string(), + e.getType(visitorContext.scope()) + ); + } + + @Test + void testExecuteWithFunctionExecutor() throws PMException { + PMLParser.FunctionInvokeExpressionContext ctx = PMLContextVisitor.toExpressionCtx( + """ + stringFunc("a", "b") + """, PMLParser.FunctionInvokeExpressionContext.class); + VisitorContext visitorContext = new VisitorContext(scope); + Expression e = FunctionInvokeExpression.compileFunctionInvokeExpression(visitorContext, ctx); + assertEquals(0, visitorContext.errorLog().getErrors().size(), visitorContext.errorLog().getErrors().toString()); + + PAP pap = new MemoryPAP(); + pap.modify().operations().createAdminOperation(stringFunc); + ExecutionContext executionContext = + new ExecutionContext( + new UserContext(""), + pap + ); + Value value = e.execute(executionContext, pap); + assertEquals( + new StringValue("test_ret"), + value + ); + assertEquals( + Type.string(), + value.getType() + ); + } + + @Test + void testChainMethodCall() throws PMException { + String pml = """ + a("123") + + operation c(string x) string { + return "c" + x + } + + operation b(string x, string y) { + create policy class c(x) + create policy class c(y) + } + + operation a(string x) { + x = "x" + y := "y" + + b(x, y) + } + """; + PAP pap = new MemoryPAP(); + pap.executePML(new UserContext(), pml); + assertTrue(pap.query().graph().nodeExists("cx")); + assertTrue(pap.query().graph().nodeExists("cy")); + } + + @Test + void testReassignArgValueInFunctionDoesNotUpdateVariableOutsideOfScope() throws PMException { + String pml = """ + x := "test" + a(x) + create pc x + operation a(string x) { + x = "x" + } + """; + PAP pap = new MemoryPAP(); + pap.executePML(new UserContext(), pml); + assertFalse(pap.query().graph().nodeExists("x")); + assertTrue(pap.query().graph().nodeExists("test")); + } + + @Test + void testReturnInIf() throws PMException { + String pml = """ + operation a() { + if true { + return + } + + create pc "pc1" + } + + a() + """; + PAP pap = new MemoryPAP(); + pap.executePML(new UserContext(), pml); + assertFalse(pap.query().graph().nodeExists("pc1")); + } +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/expression/LogicalExpressionTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/expression/LogicalExpressionTest.java new file mode 100644 index 000000000..df13628fc --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/expression/LogicalExpressionTest.java @@ -0,0 +1,77 @@ +package gov.nist.csd.pm.pap.pml.expression; + +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.scope.CompileGlobalScope; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.pml.PMLContextVisitor; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.expression.literal.BoolLiteral; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.value.Value; +import gov.nist.csd.pm.pap.pml.value.BoolValue; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class LogicalExpressionTest { + + @Test + void testCompile() throws PMException { + PMLParser.LogicalExpressionContext ctx = PMLContextVisitor.toExpressionCtx( + """ + true && false + """, + PMLParser.LogicalExpressionContext.class); + VisitorContext visitorContext = new VisitorContext(new CompileGlobalScope()); + Expression expression = LogicalExpression.compileLogicalExpression(visitorContext, ctx); + assertEquals(0, visitorContext.errorLog().getErrors().size()); + + LogicalExpression logicalExpression = (LogicalExpression) expression; + assertEquals( + new LogicalExpression(new BoolLiteral(true), new BoolLiteral(false), true), + logicalExpression + ); + } + + @Test + void testExecute() throws PMException { + PMLParser.LogicalExpressionContext ctx = PMLContextVisitor.toExpressionCtx( + """ + true && false + """, + PMLParser.LogicalExpressionContext.class); + PAP pap = new MemoryPAP(); + + VisitorContext visitorContext = new VisitorContext(new CompileGlobalScope()); + Expression expression = LogicalExpression.compileLogicalExpression(visitorContext, ctx); + assertEquals(0, visitorContext.errorLog().getErrors().size()); + + ExecutionContext executionContext = new ExecutionContext(new UserContext(""), pap); + Value actual = expression.execute(executionContext, pap); + assertEquals( + new BoolValue(false), + actual + ); + + ctx = PMLContextVisitor.toExpressionCtx( + """ + false || true + """, + PMLParser.LogicalExpressionContext.class); + visitorContext = new VisitorContext(new CompileGlobalScope()); + expression = LogicalExpression.compileLogicalExpression(visitorContext, ctx); + assertEquals(0, visitorContext.errorLog().getErrors().size()); + + pap = new MemoryPAP(); + executionContext = new ExecutionContext(new UserContext(""), pap); + actual = expression.execute(executionContext, pap); + assertEquals( + new BoolValue(true), + actual + ); + } +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/expression/ParenExpressionTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/expression/ParenExpressionTest.java new file mode 100644 index 000000000..09f69c8e4 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/expression/ParenExpressionTest.java @@ -0,0 +1,131 @@ +package gov.nist.csd.pm.pap.pml.expression; + + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.scope.CompileGlobalScope; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.pml.PMLContextVisitor; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.pml.value.Value; +import gov.nist.csd.pm.pap.pml.value.BoolValue; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class ParenExpressionTest { + + private static CompileGlobalScope compileGlobalScope; + + @BeforeAll + static void setup() throws PMException { + compileGlobalScope = new CompileGlobalScope(); + } + + @Test + void testParenExpression() throws PMException { + PMLParser.ExpressionContext ctx = PMLContextVisitor.toExpressionCtx( + """ + true && (true || false) + """, PMLParser.ExpressionContext.class); + VisitorContext visitorContext = new VisitorContext(compileGlobalScope); + Expression e = Expression.compile(visitorContext, ctx, Type.bool()); + assertEquals(0, visitorContext.errorLog().getErrors().size()); + Value actual = e.execute(new ExecutionContext(new UserContext(""), new MemoryPAP()), new MemoryPAP()); + assertEquals( + new BoolValue(true), + actual + ); + + ctx = PMLContextVisitor.toExpressionCtx( + """ + (false || false) && (true || false) + """, PMLParser.ExpressionContext.class); + visitorContext = new VisitorContext(compileGlobalScope); + e = Expression.compile(visitorContext, ctx, Type.bool()); + assertEquals(0, visitorContext.errorLog().getErrors().size()); + actual = e.execute(new ExecutionContext(new UserContext(""), new MemoryPAP()), new MemoryPAP()); + assertEquals( + new BoolValue(false), + actual + ); + + ctx = PMLContextVisitor.toExpressionCtx( + """ + (false || false) || (true || false) + """, PMLParser.ExpressionContext.class); + visitorContext = new VisitorContext(compileGlobalScope); + e = Expression.compile(visitorContext, ctx, Type.bool()); + assertEquals(0, visitorContext.errorLog().getErrors().size()); + actual = e.execute(new ExecutionContext(new UserContext(""), new MemoryPAP()), new MemoryPAP()); + assertEquals( + new BoolValue(true), + actual + ); + + ctx = PMLContextVisitor.toExpressionCtx( + """ + !(false || false) && (true || false) + """, PMLParser.ExpressionContext.class); + visitorContext = new VisitorContext(compileGlobalScope); + e = Expression.compile(visitorContext, ctx, Type.bool()); + assertEquals(0, visitorContext.errorLog().getErrors().size()); + actual = e.execute(new ExecutionContext(new UserContext(""), new MemoryPAP()), new MemoryPAP()); + assertEquals( + new BoolValue(true), + actual + ); + + ctx = PMLContextVisitor.toExpressionCtx( + """ + !(false || false) && (false || false || true) + """, PMLParser.ExpressionContext.class); + visitorContext = new VisitorContext(compileGlobalScope); + e = Expression.compile(visitorContext, ctx, Type.bool()); + assertEquals(0, visitorContext.errorLog().getErrors().size()); + actual = e.execute(new ExecutionContext(new UserContext(""), new MemoryPAP()), new MemoryPAP()); + assertEquals( + new BoolValue(true), + actual + ); + + ctx = PMLContextVisitor.toExpressionCtx( + """ + !(false || false) && (false || false || true) && false + """, PMLParser.ExpressionContext.class); + visitorContext = new VisitorContext(compileGlobalScope); + e = Expression.compile(visitorContext, ctx, Type.bool()); + assertEquals(0, visitorContext.errorLog().getErrors().size()); + actual = e.execute(new ExecutionContext(new UserContext(""), new MemoryPAP()), new MemoryPAP()); + assertEquals( + new BoolValue(false), + actual + ); + } + + @Test + void testComplexParen() throws PMException { + PMLParser.ParenExpressionContext ctx = PMLContextVisitor.toExpressionCtx( + """ + ((true || (true && false)) && (false || (false && true))) + """, + PMLParser.ParenExpressionContext.class); + VisitorContext visitorContext = new VisitorContext(compileGlobalScope); + Expression expression = ParenExpression.compileParenExpression(visitorContext, ctx); + assertEquals(0, visitorContext.errorLog().getErrors().size()); + + PAP pap = new MemoryPAP(); + ExecutionContext executionContext = new ExecutionContext(new UserContext(""), new MemoryPAP()); + Value actual = expression.execute(executionContext, pap); + assertEquals( + new BoolValue(false), + actual + ); + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/expression/PlusExpressionTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/expression/PlusExpressionTest.java new file mode 100644 index 000000000..1ad0b28ee --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/expression/PlusExpressionTest.java @@ -0,0 +1,90 @@ +package gov.nist.csd.pm.pap.pml.expression; + + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.pml.exception.PMLCompilationRuntimeException; +import gov.nist.csd.pm.pap.pml.scope.CompileGlobalScope; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.pml.PMLContextVisitor; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.expression.literal.StringLiteral; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.value.Value; +import gov.nist.csd.pm.pap.pml.value.StringValue; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +class PlusExpressionTest { + + @Test + void testPlus() throws PMException { + PMLParser.PlusExpressionContext ctx = PMLContextVisitor.toExpressionCtx( + """ + "a" + "b" + """, + PMLParser.PlusExpressionContext.class); + VisitorContext visitorContext = new VisitorContext(new CompileGlobalScope()); + Expression expression = PlusExpression.compilePlusExpression(visitorContext, ctx); + assertEquals(0, visitorContext.errorLog().getErrors().size()); + + PlusExpression plusExpression = (PlusExpression) expression; + assertEquals( + new PlusExpression(new StringLiteral("a"), new StringLiteral("b")), + plusExpression + ); + + Value value = plusExpression.execute(new ExecutionContext(new UserContext(""), new MemoryPAP()), new MemoryPAP()); + assertEquals( + new StringValue("ab"), + value + ); + } + + @Test + void testPlus3Expressions() throws PMException { + PMLParser.PlusExpressionContext ctx = PMLContextVisitor.toExpressionCtx( + """ + "a" + "b" + "c" + """, + PMLParser.PlusExpressionContext.class); + VisitorContext visitorContext = new VisitorContext(new CompileGlobalScope()); + Expression expression = PlusExpression.compilePlusExpression(visitorContext, ctx); + assertEquals(0, visitorContext.errorLog().getErrors().size()); + + PlusExpression plusExpression = (PlusExpression) expression; + assertEquals( + new PlusExpression(new PlusExpression(new StringLiteral("a"), new StringLiteral("b")), new StringLiteral("c")), + plusExpression + ); + + Value value = plusExpression.execute(new ExecutionContext(new UserContext(""), new MemoryPAP()), new MemoryPAP()); + assertEquals( + new StringValue("abc"), + value + ); + } + + @Test + void testNonStringType() throws PMException { + PMLParser.PlusExpressionContext ctx = PMLContextVisitor.toExpressionCtx( + """ + "a" + "b" + ["c"] + """, + PMLParser.PlusExpressionContext.class); + VisitorContext visitorContext = new VisitorContext(new CompileGlobalScope()); + PMLCompilationRuntimeException e = assertThrows( + PMLCompilationRuntimeException.class, + () -> PlusExpression.compilePlusExpression(visitorContext, ctx) + ); + assertEquals(1, e.getErrors().size()); + assertEquals( + "expected expression type(s) [string], got []string", + e.getErrors().get(0).errorMessage() + ); + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/expression/ValueTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/expression/ValueTest.java new file mode 100644 index 000000000..b5837ce2f --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/expression/ValueTest.java @@ -0,0 +1,87 @@ +package gov.nist.csd.pm.pap.pml.expression; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.obligation.EventContext; +import gov.nist.csd.pm.pap.op.graph.CreateObjectAttributeOp; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.pml.value.ArrayValue; +import gov.nist.csd.pm.pap.pml.value.MapValue; +import gov.nist.csd.pm.pap.pml.value.StringValue; +import gov.nist.csd.pm.pap.pml.value.Value; +import org.junit.jupiter.api.Test; + +import java.util.*; + +import static gov.nist.csd.pm.pap.op.AdminAccessRights.CREATE_OBJECT_ATTRIBUTE; +import static gov.nist.csd.pm.pap.graph.node.Properties.NO_PROPERTIES; +import static gov.nist.csd.pm.pap.op.Operation.NAME_OPERAND; +import static gov.nist.csd.pm.pap.op.graph.GraphOp.DESCENDANTS_OPERAND; +import static gov.nist.csd.pm.pap.op.graph.GraphOp.PROPERTIES_OPERAND; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class ValueTest { + + @Test + void testStringToValue() throws PMException { + Value value = Value.fromObject("test"); + assertTrue(value.getType().isString()); + assertEquals("test", value.getStringValue()); + } + + @Test + void testArrayToValue() throws PMException { + Value value = Value.fromObject(List.of("hello", "world")); + assertTrue(value.getType().isArray()); + assertEquals(new StringValue("hello"), value.getArrayValue().get(0)); + assertEquals(new StringValue("world"), value.getArrayValue().get(1)); + } + + @Test + void testBooleanToValue() throws PMException { + Value value = Value.fromObject(true); + assertTrue(value.getType().isBoolean()); + assertTrue(value.getBooleanValue()); + } + + @Test + void testListToValue() throws PMException { + Value value = Value.fromObject(Arrays.asList("hello", "world")); + assertTrue(value.getType().isArray()); + assertEquals(new StringValue("hello"), value.getArrayValue().get(0)); + assertEquals(new StringValue("world"), value.getArrayValue().get(1)); + } + + @Test + void testObjectToValue() throws PMException { + EventContext testEventCtx = new EventContext( + "testUser", + "", + new CreateObjectAttributeOp(), + Map.of(NAME_OPERAND, "testOA", PROPERTIES_OPERAND, NO_PROPERTIES, DESCENDANTS_OPERAND, List.of("pc1")) + ); + + Value objectToValue = Value.fromObject(testEventCtx); + assertTrue(objectToValue.getType().isMap()); + + Value key = new StringValue("user"); + Value value = objectToValue.getMapValue().get(key); + assertEquals(new StringValue("testUser"), value); + + key = new StringValue("opName"); + value = objectToValue.getMapValue().get(key); + assertTrue(value.getType().isString()); + assertEquals(CREATE_OBJECT_ATTRIBUTE, value.getStringValue()); + + key = new StringValue("operands"); + value = objectToValue.getMapValue().get(key); + assertTrue(value.getType().isMap()); + assertEquals( + Map.of(new StringValue("name"), new StringValue("testOA"), + new StringValue("properties"), new MapValue(new HashMap<>(), Type.string(), Type.string()), + new StringValue("descendants"), new ArrayValue(List.of(new StringValue("pc1")), Type.string()) + ), + value.getMapValue() + ); + } +} diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/expression/literal/ArrayLiteralTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/expression/literal/ArrayLiteralTest.java new file mode 100644 index 000000000..c8988e23a --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/expression/literal/ArrayLiteralTest.java @@ -0,0 +1,41 @@ +package gov.nist.csd.pm.pap.pml.expression.literal; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.pml.PMLContextVisitor; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.scope.CompileGlobalScope; +import gov.nist.csd.pm.pap.pml.type.Type; +import org.junit.jupiter.api.Test; + +import static gov.nist.csd.pm.pap.pml.PMLUtil.buildArrayLiteral; +import static org.junit.jupiter.api.Assertions.*; + +class ArrayLiteralTest { + + @Test + void testSuccess() throws PMException { + PMLParser.LiteralExpressionContext ctx = PMLContextVisitor.toExpressionCtx( + """ + ["a", "b", "c"] + """, + PMLParser.LiteralExpressionContext.class); + + VisitorContext visitorContext = new VisitorContext(new CompileGlobalScope()); + Expression expression = Literal.compileLiteral(visitorContext, ctx); + assertTrue(expression instanceof ArrayLiteral); + + ArrayLiteral a = (ArrayLiteral) expression; + assertEquals( + buildArrayLiteral("a", "b", "c"), + a + ); + assertEquals( + Type.array(Type.string()), + a.getType() + ); + + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/expression/literal/BoolLiteralTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/expression/literal/BoolLiteralTest.java new file mode 100644 index 000000000..d9c95d755 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/expression/literal/BoolLiteralTest.java @@ -0,0 +1,46 @@ +package gov.nist.csd.pm.pap.pml.expression.literal; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.pml.PMLContextVisitor; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.compiler.Variable; +import gov.nist.csd.pm.pap.pml.executable.PMLExecutableSignature; +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.scope.CompileGlobalScope; +import gov.nist.csd.pm.pap.pml.scope.GlobalScope; +import gov.nist.csd.pm.pap.pml.scope.Scope; +import gov.nist.csd.pm.pap.pml.type.Type; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class BoolLiteralTest { + + @Test + void testSuccess() throws PMException { + PMLParser.LiteralExpressionContext ctx = PMLContextVisitor.toExpressionCtx( + """ + true + """, + PMLParser.LiteralExpressionContext.class); + + GlobalScope globalScope = new CompileGlobalScope(); + + VisitorContext visitorContext = new VisitorContext(globalScope); + Expression expression = Literal.compileLiteral(visitorContext, ctx); + assertTrue(expression instanceof BoolLiteral); + + BoolLiteral a = (BoolLiteral) expression; + assertEquals( + new BoolLiteral(true), + a + ); + assertEquals( + Type.bool(), + a.getType(new Scope<>(globalScope)) + ); + + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/expression/literal/LiteralVisitorTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/expression/literal/LiteralVisitorTest.java new file mode 100644 index 000000000..c3f15faaa --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/expression/literal/LiteralVisitorTest.java @@ -0,0 +1,261 @@ +package gov.nist.csd.pm.pap.pml.expression.literal; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.pml.PMLContextVisitor; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.exception.PMLCompilationRuntimeException; +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.pml.scope.CompileGlobalScope; +import gov.nist.csd.pm.pap.pml.type.Type; +import org.junit.jupiter.api.Test; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static gov.nist.csd.pm.pap.pml.PMLUtil.buildArrayLiteral; +import static gov.nist.csd.pm.pap.pml.PMLUtil.buildMapLiteral; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +class LiteralVisitorTest { + + @Test + void testVisitStringLiteral() throws PMException { + PMLParser.StringLiteralContext ctx = PMLContextVisitor.toLiteralCtx( + """ + "test" + """, + PMLParser.StringLiteralContext.class); + VisitorContext visitorContext = new VisitorContext(new CompileGlobalScope()); + StringLiteral literal = new LiteralVisitor(visitorContext) + .visitStringLiteral(ctx); + + assertEquals(0, visitorContext.errorLog().getErrors().size()); + + assertEquals( + new StringLiteral("test"), + literal + ); + assertEquals( + Type.string(), + literal.getType(visitorContext.scope()) + ); + } + + @Test + void testVisitBoolLiteral() throws PMException { + PMLParser.BoolLiteralContext ctx = PMLContextVisitor.toLiteralCtx( + """ + true + """, + PMLParser.BoolLiteralContext.class); + VisitorContext visitorContext = new VisitorContext(new CompileGlobalScope()); + BoolLiteral literal = new LiteralVisitor(visitorContext) + .visitBoolLiteral(ctx); + + assertEquals(0, visitorContext.errorLog().getErrors().size()); + + assertEquals( + new BoolLiteral(true), + literal + ); + assertEquals( + Type.bool(), + literal.getType(visitorContext.scope()) + ); + } + + @Test + void testVisitArrayLiteral() throws PMException { + PMLParser.ArrayLiteralContext ctx = PMLContextVisitor.toLiteralCtx( + """ + ["a", ["b"]] + """, + PMLParser.ArrayLiteralContext.class); + VisitorContext visitorContext = new VisitorContext(new CompileGlobalScope()); + Expression literal = new LiteralVisitor(visitorContext) + .visitArrayLiteral(ctx); + + assertEquals(0, visitorContext.errorLog().getErrors().size()); + + ArrayLiteral arrayLiteral = (ArrayLiteral)literal; + assertEquals( + new ArrayLiteral(List.of(new StringLiteral("a"), new ArrayLiteral(List.of(new StringLiteral("b")), Type.string())), Type.any()), + arrayLiteral + ); + assertEquals( + Type.array(Type.any()), + literal.getType(visitorContext.scope()) + ); + + ctx = PMLContextVisitor.toLiteralCtx( + """ + ["a", "b"] + """, + PMLParser.ArrayLiteralContext.class); + visitorContext = new VisitorContext(new CompileGlobalScope()); + literal = new LiteralVisitor(visitorContext) + .visitArrayLiteral(ctx); + + assertEquals(0, visitorContext.errorLog().getErrors().size()); + + arrayLiteral = (ArrayLiteral)literal; + assertEquals( + buildArrayLiteral("a", "b"), + arrayLiteral + ); + assertEquals( + Type.array(Type.string()), + literal.getType(visitorContext.scope()) + ); + } + + @Test + void testVisitArrayLiteralScopeException() throws PMException { + PMLParser.ArrayLiteralContext ctx = PMLContextVisitor.toLiteralCtx( + """ + ["a", b] + """, + PMLParser.ArrayLiteralContext.class); + VisitorContext visitorContext = new VisitorContext(new CompileGlobalScope()); + + PMLCompilationRuntimeException e = assertThrows( + PMLCompilationRuntimeException.class, + () -> new LiteralVisitor(visitorContext) + .visitArrayLiteral(ctx) + ); + + assertEquals(1, e.getErrors().size()); + assertEquals( + "unknown variable 'b' in scope", + e.getErrors().get(0).errorMessage() + ); + } + + @Test + void testVisitMapLiteral() throws PMException { + PMLParser.MapLiteralContext ctx = PMLContextVisitor.toLiteralCtx( + """ + { + "a": "a1", + "b": "b1" + } + """, + PMLParser.MapLiteralContext.class); + VisitorContext visitorContext = new VisitorContext(new CompileGlobalScope()); + Expression literal = new LiteralVisitor(visitorContext) + .visitMapLiteral(ctx); + + assertEquals(0, visitorContext.errorLog().getErrors().size()); + + MapLiteral mapLiteral = (MapLiteral)literal; + assertEquals( + buildMapLiteral("a", "a1", "b", "b1"), + mapLiteral + ); + assertEquals( + Type.map(Type.string(), Type.string()), + literal.getType(visitorContext.scope()) + ); + } + + @Test + void testVisitMapLiteralDifferentValueTypes() throws PMException { + PMLParser.MapLiteralContext ctx = PMLContextVisitor.toLiteralCtx( + """ + { + "a": "a1", + "b": ["b1"] + } + """, + PMLParser.MapLiteralContext.class); + VisitorContext visitorContext = new VisitorContext(new CompileGlobalScope()); + Expression literal = new LiteralVisitor(visitorContext) + .visitMapLiteral(ctx); + + assertEquals(0, visitorContext.errorLog().getErrors().size()); + + MapLiteral mapLiteral = (MapLiteral)literal; + assertEquals( + new MapLiteral(Map.of( + new StringLiteral("a"), new StringLiteral("a1"), + new StringLiteral("b"), new ArrayLiteral(List.of(new StringLiteral("b1")), Type.string()) + ), Type.string(), Type.any()), + mapLiteral + ); + assertEquals( + Type.map(Type.string(), Type.any()), + literal.getType(visitorContext.scope()) + ); + } + + @Test + void testVisitMapLiteralDifferentKeyTypes() throws PMException { + PMLParser.MapLiteralContext ctx = PMLContextVisitor.toLiteralCtx( + """ + { + "a": "a1", + ["b"]: "b1" + } + """, + PMLParser.MapLiteralContext.class); + VisitorContext visitorContext = new VisitorContext(new CompileGlobalScope()); + Expression literal = new LiteralVisitor(visitorContext) + .visitMapLiteral(ctx); + + assertEquals(0, visitorContext.errorLog().getErrors().size()); + + MapLiteral mapLiteral = (MapLiteral)literal; + MapLiteral expected = new MapLiteral(new HashMap<>(Map.of( + new StringLiteral("a"), new StringLiteral("a1"), + new ArrayLiteral(List.of(new StringLiteral("b")), Type.string()), new StringLiteral("b1") + )), Type.any(), Type.string()); + + assertEquals(expected, mapLiteral); + assertEquals( + Type.map(Type.any(), Type.string()), + literal.getType(visitorContext.scope()) + ); + } + + @Test + void testEmptyLiterals() throws PMException { + PMLParser.StringLiteralContext stringCtx = PMLContextVisitor.toLiteralCtx( + "\"\"", + PMLParser.StringLiteralContext.class); + VisitorContext visitorContext = new VisitorContext(new CompileGlobalScope()); + StringLiteral literal = new LiteralVisitor(visitorContext) + .visitStringLiteral(stringCtx); + assertEquals(0, visitorContext.errorLog().getErrors().size()); + assertEquals( + new StringLiteral(""), + literal + ); + + PMLParser.ArrayLiteralContext arrayCtx = PMLContextVisitor.toLiteralCtx( + "[]", + PMLParser.ArrayLiteralContext.class); + visitorContext = new VisitorContext(new CompileGlobalScope()); + Expression arrayLiteral = new LiteralVisitor(visitorContext) + .visitArrayLiteral(arrayCtx); + assertEquals(0, visitorContext.errorLog().getErrors().size()); + assertEquals( + new ArrayLiteral(List.of(), Type.any()), + arrayLiteral + ); + + PMLParser.MapLiteralContext mapCtx = PMLContextVisitor.toLiteralCtx( + "{}", + PMLParser.MapLiteralContext.class); + visitorContext = new VisitorContext(new CompileGlobalScope()); + Expression mapLiteral = new LiteralVisitor(visitorContext) + .visitMapLiteral(mapCtx); + assertEquals(0, visitorContext.errorLog().getErrors().size()); + assertEquals( + new MapLiteral(Map.of(), Type.any(), Type.any()), + mapLiteral + ); + } +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/expression/literal/MapLiteralTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/expression/literal/MapLiteralTest.java new file mode 100644 index 000000000..96d92834b --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/expression/literal/MapLiteralTest.java @@ -0,0 +1,49 @@ +package gov.nist.csd.pm.pap.pml.expression.literal; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.pml.PMLContextVisitor; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.scope.CompileGlobalScope; +import gov.nist.csd.pm.pap.pml.type.Type; +import org.junit.jupiter.api.Test; + +import java.util.Map; + +import static gov.nist.csd.pm.pap.pml.PMLUtil.buildArrayLiteral; +import static org.junit.jupiter.api.Assertions.*; + +class MapLiteralTest { + + @Test + void testSuccess() throws PMException { + PMLParser.LiteralExpressionContext ctx = PMLContextVisitor.toExpressionCtx( + """ + { + "a": ["1", "2"], + "b": "c" + } + """, + PMLParser.LiteralExpressionContext.class); + + VisitorContext visitorContext = new VisitorContext(new CompileGlobalScope()); + Expression expression = Literal.compileLiteral(visitorContext, ctx); + assertTrue(expression instanceof MapLiteral); + + MapLiteral a = (MapLiteral) expression; + assertEquals( + new MapLiteral(Map.of( + new StringLiteral("a"), buildArrayLiteral("1", "2"), + new StringLiteral("b"), new StringLiteral("c") + ), Type.string(), Type.any()), + a + ); + assertEquals( + Type.map(Type.string(), Type.any()), + a.getType() + ); + + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/expression/literal/StringLiteralTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/expression/literal/StringLiteralTest.java new file mode 100644 index 000000000..3ba122a59 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/expression/literal/StringLiteralTest.java @@ -0,0 +1,41 @@ +package gov.nist.csd.pm.pap.pml.expression.literal; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.pml.PMLContextVisitor; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.scope.CompileGlobalScope; +import gov.nist.csd.pm.pap.pml.scope.Scope; +import gov.nist.csd.pm.pap.pml.type.Type; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class StringLiteralTest { + + @Test + void testSuccess() throws PMException { + PMLParser.LiteralExpressionContext ctx = PMLContextVisitor.toExpressionCtx( + """ + "test" + """, + PMLParser.LiteralExpressionContext.class); + + VisitorContext visitorContext = new VisitorContext(new CompileGlobalScope()); + Expression expression = Literal.compileLiteral(visitorContext, ctx); + assertTrue(expression instanceof StringLiteral); + + StringLiteral a = (StringLiteral) expression; + assertEquals( + new StringLiteral("test"), + a + ); + assertEquals( + Type.string(), + a.getType(new Scope<>(new CompileGlobalScope())) + ); + + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/expression/reference/ReferenceByBracketIndexTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/expression/reference/ReferenceByBracketIndexTest.java new file mode 100644 index 000000000..a1a6f2833 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/expression/reference/ReferenceByBracketIndexTest.java @@ -0,0 +1,125 @@ +package gov.nist.csd.pm.pap.pml.expression.reference; + + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.scope.CompileGlobalScope; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.pml.compiler.Variable; +import gov.nist.csd.pm.pap.pml.expression.literal.StringLiteral; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.exception.PMLCompilationException; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.pml.value.*; +import org.junit.jupiter.api.Test; + +import java.util.List; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.*; + +class ReferenceByBracketIndexTest { + + @Test + void testGetType() throws PMException { + ReferenceByBracketIndex a = new ReferenceByBracketIndex(new ReferenceByID("a"), new StringLiteral("b")); + VisitorContext visitorContext = new VisitorContext(new CompileGlobalScope()); + Type expected = Type.array(Type.string()); + visitorContext.scope().addVariable("a", new Variable("a", Type.map(Type.string(), expected), false)); + + assertEquals( + expected, + a.getType(visitorContext.scope()) + ); + } + + @Test + void testExecute() throws PMException { + ReferenceByBracketIndex a = new ReferenceByBracketIndex(new ReferenceByID("a"), new StringLiteral("b")); + ExecutionContext executionContext = new ExecutionContext(new UserContext(""), new MemoryPAP()); + ArrayValue expected = new ArrayValue(List.of(new StringValue("1"), new StringValue("2")), Type.string()); + MapValue mapValue = new MapValue(Map.of(new StringValue("b"), expected), Type.string(), Type.array(Type.string())); + executionContext.scope().addVariable("a", mapValue); + + PAP pap = new MemoryPAP(); + Value actual = a.execute(executionContext, pap); + assertEquals(expected, actual); + } + + @Test + void testIndexChain() throws PMException { + String pml = """ + a := { + "b": { + "c": { + "d": "e" + } + } + } + + create policy class a["b"]["c"]["d"] + """; + PAP pap = new MemoryPAP(); + pap.executePML(new UserContext("u1"), pml); + + assertTrue(pap.query().graph().nodeExists("e")); + } + + @Test + void testWrongKeyType() throws PMException { + String pml = """ + a := { + "b": { + "c": { + "d": "e" + } + } + } + + create policy class a[true]["c"]["d"] + """; + PAP pap = new MemoryPAP(); + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.modify().graph().createUserAttribute("u1", List.of("ua1")); + PMLCompilationException e = assertThrows(PMLCompilationException.class, + () -> pap.executePML(new UserContext("u1"), pml)); + assertEquals("expected expression type(s) [string], got bool", e.getErrors().get(0).errorMessage()); + } + + @Test + void testKeyDoesNotExist() throws PMException { + String pml = """ + a := { + "b": { + "c": { + "d": "e" + } + } + } + + create policy class a["z"]["c"]["d"] + """; + PAP pap = new MemoryPAP(); + assertThrows(NullPointerException.class, + () -> pap.executePML(new UserContext("u1"), pml)); + } + + @Test + void testArrayKey() throws PMException { + String pml = """ + a := { + ["a"]: "test" + } + + create policy class a[["a"]] + """; + PAP pap = new MemoryPAP(); + pap.executePML(new UserContext("u1"), pml); + + assertTrue(pap.query().graph().nodeExists("test")); + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/expression/reference/ReferenceByDotIndexTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/expression/reference/ReferenceByDotIndexTest.java new file mode 100644 index 000000000..d118c31b9 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/expression/reference/ReferenceByDotIndexTest.java @@ -0,0 +1,76 @@ +package gov.nist.csd.pm.pap.pml.expression.reference; + + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.scope.CompileGlobalScope; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.pml.compiler.Variable; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.pml.value.Value; +import gov.nist.csd.pm.pap.pml.value.ArrayValue; +import gov.nist.csd.pm.pap.pml.value.MapValue; +import gov.nist.csd.pm.pap.pml.value.StringValue; +import org.junit.jupiter.api.Test; + +import java.util.List; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.*; + +class ReferenceByDotIndexTest { + + @Test + void testGetType() throws PMException { + ReferenceByDotIndex a = new ReferenceByDotIndex(new ReferenceByID("a"), "b"); + VisitorContext visitorContext = new VisitorContext(new CompileGlobalScope()); + Type expected = Type.array(Type.string()); + visitorContext.scope().addVariable("a", new Variable("a", Type.map(Type.string(), expected), false)); + + assertEquals( + expected, + a.getType(visitorContext.scope()) + ); + } + + @Test + void testExecute() throws PMException { + ReferenceByDotIndex a = new ReferenceByDotIndex(new ReferenceByID("a"), "b"); + PAP pap = new MemoryPAP(); + ExecutionContext executionContext = new ExecutionContext(new UserContext(""), pap); + ArrayValue expected = new ArrayValue(List.of(new StringValue("1"), new StringValue("2")), Type.string()); + MapValue mapValue = new MapValue( + Map.of(new StringValue("b"), expected), Type.string(), Type.array(Type.string())); + executionContext.scope().addVariable("a", mapValue); + + Value actual = a.execute(executionContext, pap); + assertEquals(expected, actual); + } + + @Test + void testIndexChain() throws PMException { + String pml = """ + a := { + "b": { + "c": { + "d": "e" + } + } + } + + create policy class a.b.c.d + """; + PAP pap = new MemoryPAP(); + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.modify().graph().createUserAttribute("u1", List.of("ua1")); + pap.executePML(new UserContext("u1"), pml); + + assertTrue(pap.query().graph().nodeExists("e")); + } + + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/expression/reference/ReferenceByIDTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/expression/reference/ReferenceByIDTest.java new file mode 100644 index 000000000..f916c0965 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/expression/reference/ReferenceByIDTest.java @@ -0,0 +1,43 @@ +package gov.nist.csd.pm.pap.pml.expression.reference; + + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.pml.scope.CompileGlobalScope; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.pml.compiler.Variable; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.pml.value.Value; +import gov.nist.csd.pm.pap.pml.value.StringValue; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class ReferenceByIDTest { + + @Test + void testGetType() throws PMException { + ReferenceByID a = new ReferenceByID("a"); + VisitorContext visitorContext = new VisitorContext(new CompileGlobalScope()); + visitorContext.scope().addVariable("a", new Variable("a", Type.string(), false)); + + assertEquals( + Type.string(), + a.getType(visitorContext.scope()) + ); + } + + @Test + void testExecute() throws PMException { + ReferenceByID a = new ReferenceByID("a"); + ExecutionContext executionContext = new ExecutionContext(new UserContext(""), new MemoryPAP()); + Value expected = new StringValue("test"); + executionContext.scope().addVariable("a", expected); + + Value actual = a.execute(executionContext, new MemoryPAP()); + assertEquals(expected, actual); + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/expression/reference/VariableReferenceTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/expression/reference/VariableReferenceTest.java new file mode 100644 index 000000000..51e52a65b --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/expression/reference/VariableReferenceTest.java @@ -0,0 +1,129 @@ +package gov.nist.csd.pm.pap.pml.expression.reference; + + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.pml.PMLContextVisitor; +import gov.nist.csd.pm.pap.pml.antlr.PMLParser; +import gov.nist.csd.pm.pap.pml.compiler.Variable; +import gov.nist.csd.pm.pap.pml.exception.PMLCompilationRuntimeException; +import gov.nist.csd.pm.pap.pml.expression.Expression; +import gov.nist.csd.pm.pap.pml.expression.literal.StringLiteral; +import gov.nist.csd.pm.pap.pml.context.VisitorContext; +import gov.nist.csd.pm.pap.pml.scope.CompileGlobalScope; +import gov.nist.csd.pm.pap.pml.type.Type; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +import static gov.nist.csd.pm.pap.pml.expression.reference.VariableReference.compileVariableReference; +import static org.junit.jupiter.api.Assertions.*; + +class VariableReferenceTest { + + @Nested + class ReferenceByIDTest { + @Test + void testReferenceById() throws PMException { + PMLParser.VariableReferenceExpressionContext ctx = PMLContextVisitor.toExpressionCtx( + """ + a + """, PMLParser.VariableReferenceExpressionContext.class); + VisitorContext visitorContext = new VisitorContext(new CompileGlobalScope()); + visitorContext.scope().addVariable("a", new Variable("a", Type.string(), false)); + Expression actual = compileVariableReference(visitorContext, ctx.variableReference()); + assertEquals(0, visitorContext.errorLog().getErrors().size(), visitorContext.errorLog().toString()); + assertEquals( + new ReferenceByID("a"), + actual + ); + } + + @Test + void testUnknownVariable() throws PMException { + PMLParser.VariableReferenceExpressionContext ctx = PMLContextVisitor.toExpressionCtx( + """ + a + """, PMLParser.VariableReferenceExpressionContext.class); + VisitorContext visitorContext = new VisitorContext(new CompileGlobalScope()); + PMLCompilationRuntimeException e = assertThrows( + PMLCompilationRuntimeException.class, + () -> compileVariableReference(visitorContext, ctx.variableReference()) + ); + assertEquals(1, e.getErrors().size()); + assertEquals( + "unknown variable 'a' in scope", + e.getErrors().get(0).errorMessage() + ); + } + } + + @Nested + class ReferenceByIndexTest { + @Test + void testSuccess() throws PMException { + PMLParser.VariableReferenceExpressionContext ctx = PMLContextVisitor.toExpressionCtx( + """ + a.b.c + """, PMLParser.VariableReferenceExpressionContext.class); + VisitorContext visitorContext = new VisitorContext(new CompileGlobalScope()); + visitorContext.scope().addVariable("a", new Variable("a", Type.map(Type.string(), Type.map(Type.string(), Type.string())), false)); + Expression actual = compileVariableReference(visitorContext, ctx.variableReference()); + assertEquals(0, visitorContext.errorLog().getErrors().size(), visitorContext.errorLog().toString()); + assertEquals( + new ReferenceByDotIndex(new ReferenceByDotIndex(new ReferenceByID("a"), "b"), "c"), + actual + ); + + ctx = PMLContextVisitor.toExpressionCtx( + """ + a["b"]["c"] + """, PMLParser.VariableReferenceExpressionContext.class); + visitorContext = new VisitorContext(new CompileGlobalScope()); + visitorContext.scope().addVariable("a", new Variable("a", Type.map(Type.string(), Type.map(Type.string(), Type.string())), false)); + actual = compileVariableReference(visitorContext, ctx.variableReference()); + assertEquals(0, visitorContext.errorLog().getErrors().size(), visitorContext.errorLog().toString()); + assertEquals( + new ReferenceByBracketIndex(new ReferenceByBracketIndex(new ReferenceByID("a"), new StringLiteral("b")), new StringLiteral("c")), + actual + ); + } + + @Test + void testUnknownVariable() throws PMException { + PMLParser.VariableReferenceExpressionContext ctx = PMLContextVisitor.toExpressionCtx( + """ + a.b.c + """, PMLParser.VariableReferenceExpressionContext.class); + VisitorContext visitorContext = new VisitorContext(new CompileGlobalScope()); + PMLCompilationRuntimeException e = assertThrows( + PMLCompilationRuntimeException.class, + () -> compileVariableReference(visitorContext, ctx.variableReference()) + ); + assertEquals(1, e.getErrors().size()); + assertEquals( + "unknown variable 'a' in scope", + e.getErrors().get(0).errorMessage() + ); + } + + @Test + void testVarRefNotAMap() throws PMException { + PMLParser.VariableReferenceExpressionContext ctx = PMLContextVisitor.toExpressionCtx( + """ + a.b.c + """, PMLParser.VariableReferenceExpressionContext.class); + VisitorContext visitorContext = new VisitorContext(new CompileGlobalScope()); + visitorContext.scope().addVariable("a", new Variable("a", Type.map(Type.string(), Type.string()), false)); + PMLCompilationRuntimeException e = assertThrows( + PMLCompilationRuntimeException.class, + () -> compileVariableReference(visitorContext, ctx.variableReference()) + ); + assertEquals(1, e.getErrors().size(), visitorContext.errorLog().toString()); + assertEquals( + "expected type map but got string", + e.getErrors().get(0).errorMessage() + ); + } + } + + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/pattern/OperationPatternTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/pattern/OperationPatternTest.java new file mode 100644 index 000000000..857e158ed --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/pattern/OperationPatternTest.java @@ -0,0 +1,48 @@ +package gov.nist.csd.pm.pap.pml.pattern; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.pml.statement.operation.CreateRuleStatement; +import org.junit.jupiter.api.Test; + +import static gov.nist.csd.pm.pap.pml.pattern.PatternTestUtil.compileTestCreateRuleStatement; +import static org.junit.jupiter.api.Assertions.*; + +class OperationPatternTest { + + @Test + void testOperationPattern() throws PMException { + OperationPattern pattern = new OperationPattern(); + assertTrue(pattern.matches("test", new MemoryPAP())); + + pattern = new OperationPattern("test"); + assertTrue(pattern.matches("test", new MemoryPAP())); + assertFalse(pattern.matches("test1", new MemoryPAP())); + } + + @Test + void testPML() throws PMException { + String pml = """ + create obligation "ob1" { + create rule "r1" + when any user + performs any operation + do(ctx) { } + } + """; + CreateRuleStatement stmt = compileTestCreateRuleStatement(pml); + assertEquals(new OperationPattern(), stmt.getOperationPattern()); + + pml = """ + create obligation "ob1" { + create rule "r1" + when any user + performs "op1" + do(ctx) { } + } + """; + stmt = compileTestCreateRuleStatement(pml); + assertEquals(new OperationPattern("op1"), stmt.getOperationPattern()); + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/pattern/PatternTestUtil.java b/src/test/java/gov/nist/csd/pm/pap/pml/pattern/PatternTestUtil.java new file mode 100644 index 000000000..0d0035561 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/pattern/PatternTestUtil.java @@ -0,0 +1,20 @@ +package gov.nist.csd.pm.pap.pml.pattern; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.pml.PMLCompiler; +import gov.nist.csd.pm.pap.pml.statement.PMLStatement; +import gov.nist.csd.pm.pap.pml.statement.operation.CreateObligationStatement; +import gov.nist.csd.pm.pap.pml.statement.operation.CreateRuleStatement; + +import java.util.List; + +public class PatternTestUtil { + + public static CreateRuleStatement compileTestCreateRuleStatement(String pml) throws PMException { + PMLCompiler pmlCompiler = new PMLCompiler(); + List pmlStatements = pmlCompiler.compilePML(pml); + CreateObligationStatement stmt = (CreateObligationStatement)pmlStatements.getFirst(); + return stmt.getRuleStmts().getFirst(); + } + +} diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/pattern/operand/OperandPatternTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/pattern/operand/OperandPatternTest.java new file mode 100644 index 000000000..e13d734f7 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/pattern/operand/OperandPatternTest.java @@ -0,0 +1,165 @@ +package gov.nist.csd.pm.pap.pml.pattern.operand; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.exception.NodeDoesNotExistException; +import gov.nist.csd.pm.pap.pml.statement.operation.CreateRuleStatement; +import gov.nist.csd.pm.pap.query.UserContext; +import org.junit.jupiter.api.Test; + +import java.util.List; +import java.util.Map; + +import static gov.nist.csd.pm.pap.pml.pattern.PatternTestUtil.compileTestCreateRuleStatement; +import static org.junit.jupiter.api.Assertions.*; + +public class OperandPatternTest { + + @Test + void testOperandPattern() throws PMException { + MemoryPAP pap = new MemoryPAP(); + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.modify().graph().createUserAttribute("ua2", List.of("pc1")); + pap.modify().graph().createUser("u1", List.of("ua1", "ua2")); + pap.modify().graph().createUser("u2", List.of("ua2")); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + pap.modify().graph().createObjectAttribute("oa2", List.of("pc1")); + pap.modify().graph().createObject("o1", List.of("oa1")); + pap.modify().graph().createObject("o2", List.of("oa2")); + + String pml = """ + create obligation "ob1" { + create rule "r1" + when user "u1" + performs "assign" + on { + ascendant: "o1", + descendants: "oa1" + } + do(ctx) { } + } + """; + CreateRuleStatement stmt = compileTestCreateRuleStatement(pml); + assertEquals( + Map.of( + "ascendant", List.of(new NodeOperandPattern("o1")), + "descendants", List.of(new NodeOperandPattern("oa1")) + ), + stmt.getOperandPattern() + ); + assertTrue(stmt.getOperandPattern().get("ascendant").getFirst().matches("o1", pap)); + assertTrue(stmt.getOperandPattern().get("descendants").getFirst().matches("oa1", pap)); + + pml = """ + create obligation "ob1" { + create rule "r1" + when user "u1" + performs "assign" + on { + ascendant: ["o1"], + descendants: ["oa1"] + } + do(ctx) { } + } + """; + stmt = compileTestCreateRuleStatement(pml); + assertEquals( + Map.of( + "ascendant", List.of(new NodeOperandPattern("o1")), + "descendants", List.of(new NodeOperandPattern("oa1")) + ), + stmt.getOperandPattern() + ); + assertTrue(stmt.getOperandPattern().get("ascendant").getFirst().matches("o1", pap)); + assertTrue(stmt.getOperandPattern().get("descendants").getFirst().matches("oa1", pap)); + + pml = """ + create obligation "ob1" { + create rule "r1" + when user "u1" + performs "assign" + on { + ascendant: ["o1", "o2"], + descendants: [!"oa1"] + } + do(ctx) { } + } + """; + stmt = compileTestCreateRuleStatement(pml); + assertEquals( + Map.of( + "ascendant", List.of(new NodeOperandPattern("o1"), new NodeOperandPattern("o2")), + "descendants", List.of(new NegateOperandPatternExpression(new NodeOperandPattern("oa1"))) + ), + stmt.getOperandPattern() + ); + assertTrue(stmt.getOperandPattern().get("ascendant").getFirst().matches("o1", pap)); + assertFalse(stmt.getOperandPattern().get("ascendant").getFirst().matches("o2", pap)); + assertTrue(stmt.getOperandPattern().get("ascendant").get(1).matches("o2", pap)); + assertFalse(stmt.getOperandPattern().get("ascendant").get(1).matches("o3", pap)); + assertFalse(stmt.getOperandPattern().get("descendants").getFirst().matches("oa1", pap)); + assertTrue(stmt.getOperandPattern().get("descendants").getFirst().matches("oa2", pap)); + + pml = """ + create obligation "ob1" { + create rule "r1" + when user "u1" + performs "assign" + on { + ascendant: ["o1", any], + descendants: [!"oa1", ("oa1" || "oa2")] + } + do(ctx) { } + } + """; + stmt = compileTestCreateRuleStatement(pml); + assertEquals( + Map.of( + "ascendant", List.of(new NodeOperandPattern("o1"), new AnyOperandPattern()), + "descendants", List.of( + new NegateOperandPatternExpression(new NodeOperandPattern("oa1")), + new ParenOperandPatternExpression( + new LogicalOperandPatternExpression( + new NodeOperandPattern("oa1"), + new NodeOperandPattern("oa2"), + false + ) + ) + ) + ), + stmt.getOperandPattern() + ); + assertTrue(stmt.getOperandPattern().get("ascendant").getFirst().matches("o1", pap)); + assertFalse(stmt.getOperandPattern().get("ascendant").getFirst().matches("o2", pap)); + assertTrue(stmt.getOperandPattern().get("ascendant").get(1).matches("o2", pap)); + assertTrue(stmt.getOperandPattern().get("ascendant").get(1).matches("o3", pap)); + assertFalse(stmt.getOperandPattern().get("descendants").getFirst().matches("oa1", pap)); + assertTrue(stmt.getOperandPattern().get("descendants").get(1).matches("oa1", pap)); + assertTrue(stmt.getOperandPattern().get("descendants").get(1).matches("oa2", pap)); + } + + @Test + void testOnlyNodeOpsInEventContext() throws PMException { + MemoryPAP pap = new MemoryPAP(); + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.modify().graph().createUser("u1", List.of("ua1")); + assertThrows(NodeDoesNotExistException.class, () -> pap.executePML(new UserContext("u1"), """ + associate "ua1" and ADMIN_POLICY_OBJECT with ["*a"] + create obligation "ob1" { + create rule "r1" + when user "u1" + performs "create_object_attribute" + on { + name: "oa2", + descendants: any + } + do(ctx) { + create oa "oa2" in ["oa1"] + } + } + """)); + } + +} diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/pattern/subject/SubjectPatternTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/pattern/subject/SubjectPatternTest.java new file mode 100644 index 000000000..08017bcac --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/pattern/subject/SubjectPatternTest.java @@ -0,0 +1,143 @@ +package gov.nist.csd.pm.pap.pml.pattern.subject; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.pml.statement.operation.CreateRuleStatement; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static gov.nist.csd.pm.pap.pml.pattern.PatternTestUtil.compileTestCreateRuleStatement; +import static org.junit.jupiter.api.Assertions.*; + +class SubjectPatternTest { + + @Test + void testSubjectPattern() throws PMException { + MemoryPAP pap = new MemoryPAP(); + SubjectPattern pattern = new SubjectPattern(); + assertTrue(pattern.matches("test", pap)); + + pattern = new SubjectPattern(new UsernamePattern("test")); + assertTrue(pattern.matches("test", pap)); + assertFalse(pattern.matches("test1", pap)); + } + + @Test + void testPML() throws PMException { + MemoryPAP pap = new MemoryPAP(); + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.modify().graph().createUserAttribute("ua2", List.of("pc1")); + pap.modify().graph().createUser("u1", List.of("ua1", "ua2")); + pap.modify().graph().createUser("u2", List.of("ua2")); + + String pml = """ + create obligation "ob1" { + create rule "r1" + when any user + performs any operation + do(ctx) { } + } + """; + CreateRuleStatement stmt = compileTestCreateRuleStatement(pml); + assertEquals(new SubjectPattern(), stmt.getSubjectPattern()); + assertTrue(stmt.getSubjectPattern().matches("u1", pap)); + + pml = """ + create obligation "ob1" { + create rule "r1" + when user "u1" + performs any operation + do(ctx) { } + } + """; + stmt = compileTestCreateRuleStatement(pml); + assertEquals(new SubjectPattern(new UsernamePattern("u1")), stmt.getSubjectPattern()); + assertTrue(stmt.getSubjectPattern().matches("u1", pap)); + + pml = """ + create obligation "ob1" { + create rule "r1" + when user "u1" || "u2" + performs any operation + do(ctx) { } + } + """; + stmt = compileTestCreateRuleStatement(pml); + assertEquals(new SubjectPattern(new LogicalSubjectPatternExpression( + new UsernamePattern("u1"), + new UsernamePattern("u2"), + false + )), stmt.getSubjectPattern()); + assertTrue(stmt.getSubjectPattern().matches("u1", pap)); + + pml = """ + create obligation "ob1" { + create rule "r1" + when user "u1" && in "ua2" + performs any operation + do(ctx) { } + } + """; + stmt = compileTestCreateRuleStatement(pml); + assertEquals(new SubjectPattern(new LogicalSubjectPatternExpression( + new UsernamePattern("u1"), + new InSubjectPattern("ua2"), + true + )), stmt.getSubjectPattern()); + assertTrue(stmt.getSubjectPattern().matches("u1", pap)); + assertFalse(stmt.getSubjectPattern().matches("u2", pap)); + + pml = """ + create obligation "ob1" { + create rule "r1" + when user !in "ua1" + performs any operation + do(ctx) { } + } + """; + stmt = compileTestCreateRuleStatement(pml); + assertEquals(new SubjectPattern(new NegateSubjectPatternExpression( + new InSubjectPattern("ua1") + )), stmt.getSubjectPattern()); + assertFalse(stmt.getSubjectPattern().matches("u1", pap)); + assertTrue(stmt.getSubjectPattern().matches("u2", pap)); + + pml = """ + create obligation "ob1" { + create rule "r1" + when user ("u1" && in "ua2") || "u2" + performs any operation + do(ctx) { } + } + """; + stmt = compileTestCreateRuleStatement(pml); + assertEquals(new SubjectPattern(new LogicalSubjectPatternExpression( + new ParenSubjectPatternExpression( + new LogicalSubjectPatternExpression( + new UsernamePattern("u1"), + new InSubjectPattern("ua2"), + true + ) + ), + new UsernamePattern("u2"), + false + )), stmt.getSubjectPattern()); + assertTrue(stmt.getSubjectPattern().matches("u1", pap)); + assertTrue(stmt.getSubjectPattern().matches("u2", pap)); + + pml = """ + create obligation "ob1" { + create rule "r1" + when user process "p1" + performs any operation + do(ctx) { } + } + """; + stmt = compileTestCreateRuleStatement(pml); + assertEquals(new SubjectPattern(new ProcessSubjectPattern("p1")), stmt.getSubjectPattern()); + assertTrue(stmt.getSubjectPattern().matches("p1", pap)); + assertFalse(stmt.getSubjectPattern().matches("p2", pap)); + } +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/statement/BreakStatementTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/statement/BreakStatementTest.java new file mode 100644 index 000000000..151660937 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/statement/BreakStatementTest.java @@ -0,0 +1,68 @@ +package gov.nist.csd.pm.pap.pml.statement; + + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.query.UserContext; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class BreakStatementTest { + + @Test + void testSuccess() throws PMException { + String pml = """ + foreach x in ["a", "b", "c"] { + create policy class x + + if x == "b" { + break + } + } + """; + PAP pap = new MemoryPAP(); + pap.executePML(new UserContext(""), pml); + + assertTrue(pap.query().graph().nodeExists("a")); + assertTrue(pap.query().graph().nodeExists("b")); + assertFalse(pap.query().graph().nodeExists("c")); + } + + @Test + void testMultipleLevels() throws PMException { + String pml = """ + foreach x in ["a", "b", "c"] { + create policy class x + + if x == "b" { + if x == "b" { + break + } + } + } + """; + PAP pap = new MemoryPAP(); + pap.executePML(new UserContext(""), pml); + + assertTrue(pap.query().graph().nodeExists("a")); + assertTrue(pap.query().graph().nodeExists("b")); + assertFalse(pap.query().graph().nodeExists("c")); + } + + @Test + void testToFormattedString() { + BreakStatement stmt = new BreakStatement(); + + assertEquals( + "break", + stmt.toFormattedString(0) + ); + assertEquals( + " break", + stmt.toFormattedString(1) + ); + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/statement/ContinueStatementTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/statement/ContinueStatementTest.java new file mode 100644 index 000000000..d3ef9c6ca --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/statement/ContinueStatementTest.java @@ -0,0 +1,68 @@ +package gov.nist.csd.pm.pap.pml.statement; + + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.query.UserContext; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class ContinueStatementTest { + + @Test + void testSuccess() throws PMException { + String pml = """ + foreach x in ["a", "b", "c"] { + if x == "b" { + continue + } + + create policy class x + } + """; + PAP pap = new MemoryPAP(); + pap.executePML(new UserContext(""), pml); + + assertTrue(pap.query().graph().nodeExists("a")); + assertFalse(pap.query().graph().nodeExists("b")); + assertTrue(pap.query().graph().nodeExists("c")); + } + + @Test + void testMultipleLevels() throws PMException { + String pml = """ + foreach x in ["a", "b", "c"] { + if x == "b" { + if x == "b" { + continue + } + } + + create policy class x + } + """; + PAP pap = new MemoryPAP(); + pap.executePML(new UserContext(""), pml); + + assertTrue(pap.query().graph().nodeExists("a")); + assertFalse(pap.query().graph().nodeExists("b")); + assertTrue(pap.query().graph().nodeExists("c")); + } + + @Test + void testToFormattedString() { + ContinueStatement stmt = new ContinueStatement(); + + assertEquals( + "continue", + stmt.toFormattedString(0) + ); + assertEquals( + " continue", + stmt.toFormattedString(1) + ); + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/statement/ForeachStatementTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/statement/ForeachStatementTest.java new file mode 100644 index 000000000..16fc62969 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/statement/ForeachStatementTest.java @@ -0,0 +1,179 @@ +package gov.nist.csd.pm.pap.pml.statement; + + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.statement.operation.CreatePolicyStatement; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.pml.expression.reference.ReferenceByID; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.scope.UnknownVariableInScopeException; +import gov.nist.csd.pm.pap.pml.value.StringValue; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static gov.nist.csd.pm.pap.pml.PMLUtil.buildArrayLiteral; +import static gov.nist.csd.pm.pap.pml.PMLUtil.buildMapLiteral; +import static org.junit.jupiter.api.Assertions.*; + +class ForeachStatementTest { + + @Test + void testSuccess() throws PMException { + // array + ForeachStatement stmt = new ForeachStatement("x", null, buildArrayLiteral("a", "b", "c"), + List.of(new CreatePolicyStatement(new ReferenceByID("x"))) + ); + + PAP pap = new MemoryPAP(); + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.modify().graph().createUser("u1", List.of("ua1")); + UserContext userContext = new UserContext("u1"); + + stmt.execute(new ExecutionContext(userContext, pap), pap); + + assertEquals(5, pap.query().graph().getPolicyClasses().size()); + assertTrue(pap.query().graph().getPolicyClasses().containsAll(List.of("a", "b", "c"))); + + // map with key and value vars + stmt = new ForeachStatement("x", "y", buildMapLiteral("a", "b", "c", "d"), List.of( + new CreatePolicyStatement(new ReferenceByID("x")), + new CreatePolicyStatement(new ReferenceByID("y")) + )); + + pap = new MemoryPAP(); + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.modify().graph().createUser("u1", List.of("ua1")); + + stmt.execute(new ExecutionContext(userContext, pap), pap); + + assertEquals(6, pap.query().graph().getPolicyClasses().size()); + assertTrue(pap.query().graph().getPolicyClasses().containsAll(List.of("a", "b", "c", "d"))); + + // map with key only + stmt = new ForeachStatement("x", null, buildMapLiteral("a", "b", "c", "d"), List.of( + new CreatePolicyStatement(new ReferenceByID("x")) + )); + + pap = new MemoryPAP(); + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.modify().graph().createUser("u1", List.of("ua1")); + + stmt.execute(new ExecutionContext(userContext, pap), pap); + + assertEquals(4, pap.query().graph().getPolicyClasses().size()); + assertTrue(pap.query().graph().getPolicyClasses().containsAll(List.of("a", "c"))); + } + + @Test + void testOverwriteValues() throws PMException, UnknownVariableInScopeException { + ForeachStatement stmt = new ForeachStatement("x", null, buildArrayLiteral("a", "b", "c"), List.of( + new VariableAssignmentStatement("test", false, new ReferenceByID("x")) + )); + + PAP pap = new MemoryPAP(); + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.modify().graph().createUser("u1", List.of("ua1")); + UserContext userContext = new UserContext("u1"); + + ExecutionContext executionContext = new ExecutionContext(userContext, pap); + executionContext.scope().addVariable("test", new StringValue("test")); + stmt.execute(executionContext, pap); + + assertEquals( + "c", + executionContext.scope().getVariable("test").getStringValue() + ); + } + + @Test + void testArrayToFormattedString() { + ForeachStatement stmt = new ForeachStatement("x", null, buildArrayLiteral("a", "b", "c"), + List.of( + new CreatePolicyStatement(new ReferenceByID("x")) + ) + ); + + assertEquals(""" + foreach x in ["a", "b", "c"] { + create PC x + }""", + stmt.toFormattedString(0)); + + assertEquals(""" + foreach x in ["a", "b", "c"] { + create PC x + } + """, + stmt.toFormattedString(1) + "\n"); + } + + @Test + void testMapToFormattedString() { + ForeachStatement stmt = new ForeachStatement("x", "y", buildMapLiteral("a", "b", "c", "d"), + List.of( + new CreatePolicyStatement(new ReferenceByID("x")) + ) + ); + + assertEquals(""" + foreach x, y in {"a": "b", "c": "d"} { + create PC x + }""", + stmt.toFormattedString(0)); + + assertEquals(""" + foreach x, y in {"a": "b", "c": "d"} { + create PC x + } + """, + stmt.toFormattedString(1) + "\n"); + } + + @Test + void testReturnEndsExecution() throws PMException { + String pml = """ + f1() + + operation f1() { + foreach x in ["1", "2", "3"] { + if x == "2" { + return + } + + create PC x + } + } + """; + PAP pap = new MemoryPAP(); + pap.executePML(new UserContext(), pml); + + assertTrue(pap.query().graph().nodeExists("1")); + assertFalse(pap.query().graph().nodeExists("2")); + + pml = """ + f1() + + operation f1() { + foreach x, y in {"1": "1", "2": "2"} { + if x == "2" { + return + } + + create PC x + } + } + """; + pap = new MemoryPAP(); + pap.executePML(new UserContext(), pml); + + assertTrue(pap.query().graph().nodeExists("1")); + assertFalse(pap.query().graph().nodeExists("2")); + } +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/statement/FunctionDefinitionStatementTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/statement/FunctionDefinitionStatementTest.java new file mode 100644 index 000000000..2723b2a3f --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/statement/FunctionDefinitionStatementTest.java @@ -0,0 +1,171 @@ +package gov.nist.csd.pm.pap.pml.statement; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.exception.PMLCompilationException; +import gov.nist.csd.pm.pap.pml.executable.operation.PMLStmtsOperation; +import gov.nist.csd.pm.pap.pml.executable.routine.PMLStmtsRoutine; +import gov.nist.csd.pm.pap.pml.expression.reference.ReferenceByID; +import gov.nist.csd.pm.pap.pml.statement.operation.*; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.pml.expression.literal.StringLiteral; +import gov.nist.csd.pm.pap.pml.type.Type; +import org.junit.jupiter.api.Test; + +import java.util.List; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.*; + +class FunctionDefinitionStatementTest { + + @Test + void testOperationFormattedString() { + CreateFunctionStatement stmt = new CreateOperationStatement(new PMLStmtsOperation( + "op1", + Type.string(), + List.of("a", "b", "c"), + List.of("a"), + Map.of("a", Type.string(), "b", Type.bool(), "c", Type.array(Type.string())), + new PMLStatementBlock( + new CheckStatement(new StringLiteral("ar1"), new ReferenceByID("a")), + new CheckStatement(new StringLiteral("ar2"), new StringLiteral("node")) + ), + new PMLStatementBlock( + List.of( + new FunctionReturnStatement(new StringLiteral("test")) + ) + ) + )); + + assertEquals(""" + operation op1(nodeop string a, bool b, []string c) string { + check "ar1" on a + check "ar2" on "node" + } { + return "test" + }""", + stmt.toFormattedString(0)); + + assertEquals(""" + operation op1(nodeop string a, bool b, []string c) string { + check "ar1" on a + check "ar2" on "node" + } { + return "test" + } + """, + stmt.toFormattedString(1) + "\n"); + } + + @Test + void testRoutineFormattedString() { + CreateFunctionStatement stmt = new CreateRoutineStatement(new PMLStmtsRoutine( + "rou1", + Type.voidType(), + List.of("a", "b", "c"), + Map.of("a", Type.string(), "b", Type.bool(), "c", Type.array(Type.string())), + new PMLStatementBlock( + List.of( + new CreatePolicyStatement(new StringLiteral("test")) + ) + ) + )); + + assertEquals(""" + routine rou1(string a, bool b, []string c) { + create PC "test" + }""", + stmt.toFormattedString(0)); + + assertEquals(""" + routine rou1(string a, bool b, []string c) { + create PC "test" + } + """, + stmt.toFormattedString(1) + "\n"); + } + + @Test + void testToFormattedStringVoidReturn() { + CreateFunctionStatement stmt = new CreateOperationStatement(new PMLStmtsOperation( + "func1", + Type.voidType(), + List.of("a", "b", "c"), + List.of("a"), + Map.of("a", Type.string(), "b", Type.bool(), "c", Type.array(Type.string())), + new PMLStatementBlock( + new CheckStatement(new StringLiteral("ar1"), new ReferenceByID("a")), + new CheckStatement(new StringLiteral("ar2"), new StringLiteral("node")) + ), + new PMLStatementBlock( + List.of( + new FunctionReturnStatement() + ) + ) + )); + + assertEquals(""" + operation func1(nodeop string a, bool b, []string c) { + check "ar1" on a + check "ar2" on "node" + } { + return + }""", + stmt.toFormattedString(0)); + } + + @Test + void testFormalArgOverwritesVariable() + throws PMException { + String pml = """ + var a = "test" + var b = "test2" + func1(a, b) + + operation func1(string a, string b) { + create policy class a + create policy class b + } + """; + PAP pap = new MemoryPAP(); + pap.executePML(new UserContext(""), pml); + + assertTrue(pap.query().graph().nodeExists("test")); + assertTrue(pap.query().graph().nodeExists("test2")); + } + + @Test + void testInvokeFromDefinition() throws PMException { + String pml = """ + operation f1(string a) { + create policy class a + } + + operation f2() { + a := "test" + f1(a) + } + + f2() + """; + PAP pap = new MemoryPAP(); + pap.executePML(new UserContext(""), pml); + + assertTrue(pap.query().graph().nodeExists("test")); + } + + @Test + void testUsingVarInOperationThrowsException() throws PMException { + String pml = """ + x := "x" + + operation func2() { + create policy class x + } + """; + PAP pap = new MemoryPAP(); + assertThrows(PMLCompilationException.class, () -> pap.executePML(new UserContext(""), pml)); + } +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/statement/FunctionReturnStatementTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/statement/FunctionReturnStatementTest.java new file mode 100644 index 000000000..e3a542a59 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/statement/FunctionReturnStatementTest.java @@ -0,0 +1,29 @@ +package gov.nist.csd.pm.pap.pml.statement; + + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.query.UserContext; +import org.junit.jupiter.api.Test; + +class FunctionReturnStatementTest { + + @Test + void testReturnValueIsUnwrapped() throws PMException { + String pml = """ + operation f1() string { + return f2() + } + + operation f2() string { + return "test" + } + + create policy class f1() + """; + PAP pap = new MemoryPAP(); + pap.executePML(new UserContext(), pml); + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/statement/IfStatementTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/statement/IfStatementTest.java new file mode 100644 index 000000000..a268f123b --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/statement/IfStatementTest.java @@ -0,0 +1,105 @@ +package gov.nist.csd.pm.pap.pml.statement; + + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.statement.operation.CreatePolicyStatement; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.pml.expression.literal.BoolLiteral; +import gov.nist.csd.pm.pap.pml.expression.literal.StringLiteral; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +class IfStatementTest { + + @Test + void testSuccess() throws PMException { + String pml = """ + operation func1(string s) { + if s == "a" { + create policy class s + + } else if s == "b" { + create policy class s + + } else if s == "c" { + create policy class s + + } else { + create policy class s + + } + } + + func1("a") + func1("b") + func1("c") + func1("d") + """; + PAP pap = new MemoryPAP(); + pap.executePML(new UserContext("u1"), pml); + + assertTrue(pap.query().graph().nodeExists("a")); + assertTrue(pap.query().graph().nodeExists("b")); + assertTrue(pap.query().graph().nodeExists("c")); + assertTrue(pap.query().graph().nodeExists("d")); + } + + @Test + void testToFormattedStringVoidReturn() { + IfStatement stmt = new IfStatement( + new IfStatement.ConditionalBlock( + new BoolLiteral(true), + new PMLStatementBlock( + new CreatePolicyStatement(new StringLiteral("a")) + ) + ), + List.of( + new IfStatement.ConditionalBlock( + new BoolLiteral(true), + new PMLStatementBlock( + new CreatePolicyStatement(new StringLiteral("b")) + ) + ), + new IfStatement.ConditionalBlock( + new BoolLiteral(true), + new PMLStatementBlock( + new CreatePolicyStatement(new StringLiteral("c")) + ) + ) + ), + new PMLStatementBlock( + new CreatePolicyStatement(new StringLiteral("d")) + ) + ); + + assertEquals(""" + if true { + create PC "a" + } else if true { + create PC "b" + } else if true { + create PC "c" + } else { + create PC "d" + }""", + stmt.toFormattedString(0)); + + assertEquals(""" + if true { + create PC "a" + } else if true { + create PC "b" + } else if true { + create PC "c" + } else { + create PC "d" + } + """, + stmt.toFormattedString(1) + "\n"); + } +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/statement/ShortDeclarationStatementTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/statement/ShortDeclarationStatementTest.java new file mode 100644 index 000000000..933ea6ac0 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/statement/ShortDeclarationStatementTest.java @@ -0,0 +1,41 @@ +package gov.nist.csd.pm.pap.pml.statement; + + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.pml.expression.literal.StringLiteral; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.value.StringValue; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class ShortDeclarationStatementTest { + + @Test + void testSuccess() throws PMException { + ShortDeclarationStatement stmt = new ShortDeclarationStatement( + "a", new StringLiteral("test")); + + ExecutionContext ctx = new ExecutionContext(new UserContext("u1"), new MemoryPAP()); + stmt.execute(ctx, new MemoryPAP()); + + assertEquals(new StringValue("test"), ctx.scope().getVariable("a")); + } + + @Test + void testToFormattedString() { + ShortDeclarationStatement stmt = new ShortDeclarationStatement( + "a", new StringLiteral("test")); + + assertEquals( + "a := \"test\"", + stmt.toFormattedString(0) + ); + assertEquals( + " a := \"test\"", + stmt.toFormattedString(1) + ); + } +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/statement/VariableAssignmentStatementTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/statement/VariableAssignmentStatementTest.java new file mode 100644 index 000000000..4fd5f226f --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/statement/VariableAssignmentStatementTest.java @@ -0,0 +1,66 @@ +package gov.nist.csd.pm.pap.pml.statement; + + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.pml.expression.literal.StringLiteral; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.value.StringValue; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class VariableAssignmentStatementTest { + + @Test + void testSuccess() throws PMException { + VariableAssignmentStatement stmt = new VariableAssignmentStatement( + "a", false, new StringLiteral("test") + ); + + ExecutionContext ctx = new ExecutionContext(new UserContext("u1"), new MemoryPAP()); + ctx.scope().addVariable("a", new StringValue("a")); + stmt.execute(ctx, new MemoryPAP()); + + assertEquals(new StringValue("test"), ctx.scope().getVariable("a")); + + stmt = new VariableAssignmentStatement( + "a", true, new StringLiteral("test") + ); + + stmt.execute(ctx, new MemoryPAP()); + + assertEquals(new StringValue("testtest"), ctx.scope().getVariable("a")); + } + + @Test + void testToFormattedString() { + VariableAssignmentStatement stmt = new VariableAssignmentStatement( + "a", true, new StringLiteral("test") + ); + + assertEquals( + "a += \"test\"", + stmt.toFormattedString(0) + ); + assertEquals( + " a += \"test\"", + stmt.toFormattedString(1) + ); + + stmt = new VariableAssignmentStatement( + "a", false, new StringLiteral("test") + ); + + assertEquals( + "a = \"test\"", + stmt.toFormattedString(0) + ); + assertEquals( + " a = \"test\"", + stmt.toFormattedString(1) + ); + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/statement/VariableDeclarationStatementTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/statement/VariableDeclarationStatementTest.java new file mode 100644 index 000000000..b1cace863 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/statement/VariableDeclarationStatementTest.java @@ -0,0 +1,71 @@ +package gov.nist.csd.pm.pap.pml.statement; + + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.pml.expression.literal.StringLiteral; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.value.StringValue; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +class VariableDeclarationStatementTest { + + @Test + void testSuccess() throws PMException { + VariableDeclarationStatement stmt1 = new VariableDeclarationStatement( + List.of( + new VariableDeclarationStatement.Declaration("a", new StringLiteral("a")), + new VariableDeclarationStatement.Declaration("b", new StringLiteral("b")) + ) + ); + + VariableDeclarationStatement stmt2 = new VariableDeclarationStatement( + List.of( + new VariableDeclarationStatement.Declaration("c", new StringLiteral("c")), + new VariableDeclarationStatement.Declaration("d", new StringLiteral("d")) + ) + ); + + ExecutionContext ctx = new ExecutionContext(new UserContext("u1"), new MemoryPAP()); + ctx.scope().addVariable("c", new StringValue("123")); + stmt1.execute(ctx, new MemoryPAP()); + stmt2.execute(ctx, new MemoryPAP()); + + assertEquals(new StringValue("a"), ctx.scope().getVariable("a")); + assertEquals(new StringValue("b"), ctx.scope().getVariable("b")); + assertEquals(new StringValue("c"), ctx.scope().getVariable("c")); + assertEquals(new StringValue("d"), ctx.scope().getVariable("d")); + } + + @Test + void testToFormattedString() { + VariableDeclarationStatement stmt = new VariableDeclarationStatement( + List.of( + new VariableDeclarationStatement.Declaration("c", new StringLiteral("c")), + new VariableDeclarationStatement.Declaration("d", new StringLiteral("d")) + ) + ); + + String expected = """ + var ( + c = "c" + d = "d" + ) + """; + assertEquals(expected, stmt.toFormattedString(0) + "\n"); + + expected = """ + var ( + c = "c" + d = "d" + ) + """; + assertEquals(expected, stmt.toFormattedString(1) + "\n"); + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/AssignStatementTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/AssignStatementTest.java new file mode 100644 index 000000000..fe8a8a607 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/AssignStatementTest.java @@ -0,0 +1,48 @@ +package gov.nist.csd.pm.pap.pml.statement.operation; + + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.pml.expression.literal.StringLiteral; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static gov.nist.csd.pm.pap.pml.PMLUtil.buildArrayLiteral; +import static org.junit.jupiter.api.Assertions.*; + +class AssignStatementTest { + + @Test + void testSuccess() throws PMException { + AssignStatement stmt = new AssignStatement(new StringLiteral("u1"), buildArrayLiteral("ua2", "ua3")); + + PAP pap = new MemoryPAP(); + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.modify().graph().createUserAttribute("ua2", List.of("pc1")); + pap.modify().graph().createUserAttribute("ua3", List.of("pc1")); + pap.modify().graph().createUser("u1", List.of("ua1")); + ExecutionContext execCtx = new ExecutionContext(new UserContext("u1"), pap); + stmt.execute(execCtx, pap); + + assertTrue(pap.query().graph().getAdjacentDescendants("u1").containsAll(List.of("ua1", "ua2", "ua3"))); + } + + @Test + void testToFormattedString() { + AssignStatement stmt = new AssignStatement(new StringLiteral("u1"), buildArrayLiteral("ua2", "ua3")); + assertEquals( + "assign \"u1\" to [\"ua2\", \"ua3\"]", + stmt.toFormattedString(0) + ); + assertEquals( + " assign \"u1\" to [\"ua2\", \"ua3\"]", + stmt.toFormattedString(1) + ); + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/AssociateStatementTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/AssociateStatementTest.java new file mode 100644 index 000000000..063288647 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/AssociateStatementTest.java @@ -0,0 +1,59 @@ +package gov.nist.csd.pm.pap.pml.statement.operation; + + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.graph.relationship.Association; +import gov.nist.csd.pm.pap.pml.expression.literal.StringLiteral; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static gov.nist.csd.pm.pap.pml.PMLUtil.buildArrayLiteral; +import static org.junit.jupiter.api.Assertions.*; + +class AssociateStatementTest { + + @Test + void testSuccess() throws PMException { + AssociateStatement stmt = new AssociateStatement( + new StringLiteral("ua1"), + new StringLiteral("oa1"), + buildArrayLiteral("read") + ); + + PAP pap = new MemoryPAP(); + pap.modify().operations().setResourceOperations(new AccessRightSet("read")); + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.modify().graph().createUserAttribute("u1", List.of("pc1")); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + ExecutionContext execCtx = new ExecutionContext(new UserContext("u1"), pap); + stmt.execute(execCtx, pap); + + assertTrue(pap.query().graph().getAssociationsWithSource("ua1").iterator().next().equals(new Association("ua1", "oa1", new AccessRightSet("read")))); + assertTrue(pap.query().graph().getAssociationsWithTarget("oa1").iterator().next().equals(new Association("ua1", "oa1", new AccessRightSet("read")))); + } + + @Test + void testToFormattedString() { + AssociateStatement stmt = new AssociateStatement( + new StringLiteral("ua1"), + new StringLiteral("oa1"), + buildArrayLiteral("read") + ); + assertEquals( + "associate \"ua1\" and \"oa1\" with [\"read\"]", + stmt.toFormattedString(0) + ); + assertEquals( + " associate \"ua1\" and \"oa1\" with [\"read\"]", + stmt.toFormattedString(1) + ); + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/CheckStatementTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/CheckStatementTest.java new file mode 100644 index 000000000..67ae4a3fd --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/CheckStatementTest.java @@ -0,0 +1,92 @@ +package gov.nist.csd.pm.pap.pml.statement.operation; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.expression.literal.ArrayLiteral; +import gov.nist.csd.pm.pap.pml.expression.literal.StringLiteral; +import gov.nist.csd.pm.pap.pml.type.Type; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pdp.exception.UnauthorizedException; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +class CheckStatementTest { + + @Test + void test() throws PMException { + MemoryPAP pap = new MemoryPAP(); + pap.executePML(new UserContext("u1"), """ + create pc "pc1" + create ua "ua1" in ["pc1"] + create ua "ua2" in ["pc1"] + + create oa "oa1" in ["pc1"] + + associate "ua1" and "oa1" with ["assign", "assign_to"] + + create o "o1" in ["oa1"] + create o "o2" in ["oa1"] + create o "o3" in ["oa1"] + + create u "u1" in ["ua1"] + create u "u2" in ["ua2"] + """); + + ExecutionContext ctx = new ExecutionContext(new UserContext("u1"), pap); + + testCheck(ctx, pap, new CheckStatement( + new StringLiteral("assign"), + new StringLiteral("o1") + ), false); + + testCheck(ctx, pap, new CheckStatement( + new ArrayLiteral(List.of(new StringLiteral("assign"), new StringLiteral("assign_to")), Type.string()), + new StringLiteral("o1") + ), false); + + testCheck(ctx, pap, new CheckStatement( + new ArrayLiteral(List.of(new StringLiteral("assign"), new StringLiteral("assign_to")), Type.string()), + new ArrayLiteral(List.of(new StringLiteral("o1"), new StringLiteral("o2")), Type.string()) + ), false); + + testCheck(ctx, pap, new CheckStatement( + new StringLiteral("assign"), + new ArrayLiteral(List.of(new StringLiteral("o1"), new StringLiteral("o2")), Type.string()) + ), false); + + ctx = new ExecutionContext(new UserContext("u2"), pap); + testCheck(ctx, pap, new CheckStatement( + new StringLiteral("assign"), + new StringLiteral("o1") + ), true); + + testCheck(ctx, pap, new CheckStatement( + new ArrayLiteral(List.of(new StringLiteral("assign"), new StringLiteral("assign_to")), Type.string()), + new StringLiteral("o1") + ), true); + + testCheck(ctx, pap, new CheckStatement( + new ArrayLiteral(List.of(new StringLiteral("assign"), new StringLiteral("assign_to")), Type.string()), + new ArrayLiteral(List.of(new StringLiteral("o1"), new StringLiteral("o2")), Type.string()) + ), true); + + testCheck(ctx, pap, new CheckStatement( + new StringLiteral("assign"), + new ArrayLiteral(List.of(new StringLiteral("o1"), new StringLiteral("o2")), Type.string()) + ), true); + } + + private void testCheck(ExecutionContext ctx, PAP pap, CheckStatement checkStatement, boolean err) { + if (err) { + assertThrows(UnauthorizedException.class, () -> checkStatement.execute(ctx, pap)); + } else { + assertDoesNotThrow(() -> checkStatement.execute(ctx, pap)); + } + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateNonPCStatementTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateNonPCStatementTest.java new file mode 100644 index 000000000..27ec3d566 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateNonPCStatementTest.java @@ -0,0 +1,66 @@ +package gov.nist.csd.pm.pap.pml.statement.operation; + + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.graph.node.NodeType; +import gov.nist.csd.pm.pap.pml.expression.literal.StringLiteral; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static gov.nist.csd.pm.pap.pml.PMLUtil.buildArrayLiteral; +import static org.junit.jupiter.api.Assertions.*; + +class CreateNonPCStatementTest { + + @Test + void testSuccess() throws PMException { + CreateNonPCStatement stmt1 = new CreateNonPCStatement(new StringLiteral("ua1"), NodeType.UA, buildArrayLiteral("pc1")); + CreateNonPCStatement stmt2 = new CreateNonPCStatement(new StringLiteral("oa1"), NodeType.OA, buildArrayLiteral("pc1")); + CreateNonPCStatement stmt3 = new CreateNonPCStatement(new StringLiteral("u1"), NodeType.U, buildArrayLiteral("ua1")); + CreateNonPCStatement stmt4 = new CreateNonPCStatement(new StringLiteral("o1"), NodeType.O, buildArrayLiteral("oa1")); + + PAP pap = new MemoryPAP(); + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua2", List.of("pc1")); + pap.modify().graph().createUser("u2", List.of("ua2")); + ExecutionContext execCtx = new ExecutionContext(new UserContext("u2"), pap); + + stmt1.execute(execCtx, pap); + stmt2.execute(execCtx, pap); + stmt3.execute(execCtx, pap); + stmt4.execute(execCtx, pap); + + assertTrue(pap.query().graph().nodeExists("ua1")); + assertTrue(pap.query().graph().nodeExists("oa1")); + assertTrue(pap.query().graph().nodeExists("u1")); + assertTrue(pap.query().graph().nodeExists("o1")); + + assertTrue(pap.query().graph().getAdjacentDescendants("ua1").contains("pc1")); + assertTrue(pap.query().graph().getAdjacentDescendants("oa1").contains("pc1")); + assertTrue(pap.query().graph().getAdjacentDescendants("u1").contains("ua1")); + assertTrue(pap.query().graph().getAdjacentDescendants("o1").contains("oa1")); + } + + @Test + void testToFormattedString() { + CreateNonPCStatement stmt = new CreateNonPCStatement( + new StringLiteral("ua1"), + NodeType.UA, + buildArrayLiteral("ua2") + ); + assertEquals( + "create UA \"ua1\" in [\"ua2\"]", + stmt.toFormattedString(0) + ); + assertEquals( + " create UA \"ua1\" in [\"ua2\"]", + stmt.toFormattedString(1) + ); + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateObligationStatementTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateObligationStatementTest.java new file mode 100644 index 000000000..c149606ec --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateObligationStatementTest.java @@ -0,0 +1,142 @@ +package gov.nist.csd.pm.pap.pml.statement.operation; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.obligation.EventPattern; +import gov.nist.csd.pm.pap.obligation.Obligation; +import gov.nist.csd.pm.pap.obligation.Rule; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.expression.literal.StringLiteral; +import gov.nist.csd.pm.pap.pml.pattern.OperationPattern; +import gov.nist.csd.pm.pap.pml.pattern.operand.LogicalOperandPatternExpression; +import gov.nist.csd.pm.pap.pml.pattern.operand.NodeOperandPattern; +import gov.nist.csd.pm.pap.pml.pattern.subject.SubjectPattern; +import gov.nist.csd.pm.pap.pml.pattern.subject.UsernamePattern; +import gov.nist.csd.pm.pap.query.UserContext; +import org.junit.jupiter.api.Test; + +import java.util.List; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class CreateObligationStatementTest { + + @Test + void testSuccess() throws PMException, PMException { + CreateObligationStatement stmt = new CreateObligationStatement(new StringLiteral("o1"), List.of( + new CreateRuleStatement( + new StringLiteral("rule1"), + new SubjectPattern(), + new OperationPattern("e1"), + Map.of( + "opnd1", List.of(new LogicalOperandPatternExpression( + new NodeOperandPattern("oa1"), + new NodeOperandPattern("oa2"), + false + )) + ), + new CreateRuleStatement.ResponseBlock("evtCtx", List.of( + new CreatePolicyStatement(new StringLiteral("pc2")) + )) + ) + )); + + MemoryPAP pap = new MemoryPAP(); + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua2", List.of("pc1")); + pap.modify().graph().createUser("u2", List.of("ua2")); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + pap.modify().graph().createObjectAttribute("oa2", List.of("pc1")); + ExecutionContext execCtx = new ExecutionContext(new UserContext("u2"), pap); + + stmt.execute(execCtx, pap); + + assertTrue(pap.query().obligations().obligationExists("o1")); + + Obligation actual = pap.query().obligations().getObligation("o1"); + assertEquals(1, actual.getRules().size()); + assertEquals("u2", actual.getAuthor()); + Rule rule = actual.getRules().get(0); + assertEquals("rule1", rule.getName()); + assertEquals(new EventPattern( + new SubjectPattern(), + new OperationPattern("e1"), + Map.of( + "opnd1", List.of(new LogicalOperandPatternExpression( + new NodeOperandPattern("oa1"), + new NodeOperandPattern("oa2"), + false + )) + ) + ), rule.getEventPattern()); + } + + @Test + void testToFormattedString() { + CreateObligationStatement stmt = new CreateObligationStatement( + new StringLiteral("obl1"), + List.of( + new CreateRuleStatement( + new StringLiteral("rule1"), + new SubjectPattern(), + new OperationPattern("e1"), + Map.of( + "opnd1", List.of(new LogicalOperandPatternExpression( + new NodeOperandPattern("oa1"), + new NodeOperandPattern("oa2"), + false + )) + ), + new CreateRuleStatement.ResponseBlock("evtCtx", List.of( + new CreatePolicyStatement(new StringLiteral("pc2")) + )) + ), + new CreateRuleStatement( + new StringLiteral("rule2"), + new SubjectPattern(new UsernamePattern("u1")), + new OperationPattern("e3"), + Map.of( + "opnd1", List.of(new LogicalOperandPatternExpression( + new NodeOperandPattern("oa1"), + new NodeOperandPattern("oa2"), + false + )) + ), + new CreateRuleStatement.ResponseBlock("evtCtx", List.of( + new CreatePolicyStatement(new StringLiteral("pc3")) + )) + ) + ) + + ); + assertEquals( + """ + create obligation "obl1" { + create rule "rule1" + when any user + performs "e1" + on { + opnd1: "oa1" || "oa2" + } + do (evtCtx) { + create PC "pc2" + } + + create rule "rule2" + when user "u1" + performs "e3" + on { + opnd1: "oa1" || "oa2" + } + do (evtCtx) { + create PC "pc3" + } + + }""", + stmt.toFormattedString(0) + ); + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateOperationStatementTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateOperationStatementTest.java new file mode 100644 index 000000000..281d7048f --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateOperationStatementTest.java @@ -0,0 +1,93 @@ +package gov.nist.csd.pm.pap.pml.statement.operation; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pdp.PDP; +import gov.nist.csd.pm.pdp.exception.UnauthorizedException; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class CreateOperationStatementTest { + + @Test + void testWithChecks() throws PMException { + String pml = """ + create pc "pc1" + create ua "ua1" in ["pc1"] + create u "u1" in ["ua1"] + create ua "ua2" in ["pc1"] + create u "u2" in ["ua2"] + create oa "oa1" in ["pc1"] + associate "ua1" and "oa1" with ["assign"] + + create o "o1" in ["oa1"] + create o "o2" in ["oa1"] + create o "o3" in ["oa1"] + + operation op1(string a, []string b) { + check "assign" on a + check "assign" on b + check "assign" on "oa1" + } { + create policy class "test" + } + """; + MemoryPAP pap = new MemoryPAP(); + pap.executePML(new UserContext("u1"), pml); + + PDP pdp = new PDP(pap); + pdp.runTx(new UserContext("u1"), tx -> { + tx.executePML(new UserContext("u1"), """ + op1("o1", ["o2", "o3"]) + """); + }); + assertTrue(pap.query().graph().nodeExists("test")); + + assertThrows(UnauthorizedException.class, () -> pdp.runTx(new UserContext("u2"), tx -> { + tx.executePML(new UserContext("u2"), """ + op1("o1", ["o2", "o3"]) + """); + })); + } + + @Test + void testWithNoChecks() throws PMException { + String pml = """ + create pc "pc1" + create ua "ua1" in ["pc1"] + create u "u1" in ["ua1"] + create ua "ua2" in ["pc1"] + create u "u2" in ["ua2"] + create oa "oa1" in ["pc1"] + associate "ua1" and "oa1" with ["assign"] + + create o "o1" in ["oa1"] + create o "o2" in ["oa1"] + create o "o3" in ["oa1"] + + operation op1(string a, []string b) { + create policy class a + } + """; + MemoryPAP pap = new MemoryPAP(); + pap.executePML(new UserContext("u1"), pml); + + PDP pdp = new PDP(pap); + pdp.runTx(new UserContext("u1"), tx -> { + tx.executePML(new UserContext("u1"), """ + op1("test1", ["o2", "o3"]) + """); + }); + assertTrue(pap.query().graph().nodeExists("test1")); + + pdp.runTx(new UserContext("u2"), tx -> { + tx.executePML(new UserContext("u2"), """ + op1("test2", ["o2", "o3"]) + """); + }); + assertTrue(pap.query().graph().nodeExists("test2")); + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/CreatePolicyStatementTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/CreatePolicyStatementTest.java new file mode 100644 index 000000000..64541eb36 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/CreatePolicyStatementTest.java @@ -0,0 +1,57 @@ +package gov.nist.csd.pm.pap.pml.statement.operation; + +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.pml.expression.literal.StringLiteral; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.query.UserContext; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +class CreatePolicyStatementTest { + + @Test + void testSuccess() throws PMException { + CreatePolicyStatement stmt = new CreatePolicyStatement(new StringLiteral("pc1")); + MemoryPAP pap = new MemoryPAP(); + pap.modify().graph().createPolicyClass("pc2"); + pap.modify().graph().createUserAttribute("ua2", List.of("pc2")); + pap.modify().graph().createUser("u2", List.of("ua2")); + ExecutionContext execCtx = new ExecutionContext(new UserContext("u2"), pap); + + stmt.execute(execCtx, pap); + + assertTrue(pap.query().graph().nodeExists("pc1")); + } + + @Test + void testToFormattedString() { + CreatePolicyStatement s = new CreatePolicyStatement( + new StringLiteral("pc1") + ); + assertEquals( + "create PC \"pc1\"", + s.toFormattedString(0) + ); + assertEquals( + " create PC \"pc1\"", + s.toFormattedString(1) + ); + + s = new CreatePolicyStatement(new StringLiteral("a")); + assertEquals("create PC \"a\"", s.toFormattedString(0)); + + s = new CreatePolicyStatement(new StringLiteral("a")); + assertEquals("create PC \"a\"", s.toFormattedString(0)); + + s = new CreatePolicyStatement(new StringLiteral("a")); + assertEquals(" create PC \"a\"", s.toFormattedString(1)); + + s = new CreatePolicyStatement(new StringLiteral("a")); + assertEquals(" create PC \"a\"", s.toFormattedString(1)); + } +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateProhibitionStatementTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateProhibitionStatementTest.java new file mode 100644 index 000000000..2bc88afde --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateProhibitionStatementTest.java @@ -0,0 +1,98 @@ +package gov.nist.csd.pm.pap.pml.statement.operation; + + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.prohibition.ContainerCondition; +import gov.nist.csd.pm.pap.prohibition.Prohibition; +import gov.nist.csd.pm.pap.prohibition.ProhibitionSubject; +import gov.nist.csd.pm.pap.pml.expression.NegatedExpression; +import gov.nist.csd.pm.pap.pml.expression.literal.ArrayLiteral; +import gov.nist.csd.pm.pap.pml.expression.literal.StringLiteral; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import gov.nist.csd.pm.pap.pml.type.Type; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static gov.nist.csd.pm.pap.pml.PMLUtil.buildArrayLiteral; +import static org.junit.jupiter.api.Assertions.*; + +class CreateProhibitionStatementTest { + + @Test + void testSuccess() throws PMException { + CreateProhibitionStatement stmt = new CreateProhibitionStatement( + new StringLiteral("pro1"), + new StringLiteral("ua2"), + ProhibitionSubject.Type.USER_ATTRIBUTE, + buildArrayLiteral("read"), + true, + new ArrayLiteral( + List.of(new StringLiteral("oa1"), new NegatedExpression(new StringLiteral("oa2"))), Type.string() + ) + ); + + PAP pap = new MemoryPAP(); + pap.modify().operations().setResourceOperations(new AccessRightSet("read")); + pap.modify().graph().createPolicyClass("pc2"); + pap.modify().graph().createUserAttribute("ua2", List.of("pc2")); + pap.modify().graph().createUser("u2", List.of("ua2")); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc2")); + pap.modify().graph().createObjectAttribute("oa2", List.of("pc2")); + + ExecutionContext execCtx = new ExecutionContext(new UserContext("u2"), pap); + + stmt.execute(execCtx, pap); + + assertDoesNotThrow(() -> pap.query().prohibitions().getProhibition("pro1")); + + Prohibition prohibition = pap.query().prohibitions().getProhibition("pro1"); + assertEquals( + new ProhibitionSubject("ua2", ProhibitionSubject.Type.USER_ATTRIBUTE), + prohibition.getSubject() + ); + assertTrue(prohibition.isIntersection()); + assertEquals( + new AccessRightSet("read"), + prohibition.getAccessRightSet() + ); + assertEquals( + List.of(new ContainerCondition("oa1", false), new ContainerCondition("oa2", true)), + prohibition.getContainers() + ); + } + + @Test + void testToFormattedString() { + CreateProhibitionStatement stmt = new CreateProhibitionStatement( + new StringLiteral("pro1"), + new StringLiteral("ua2"), + ProhibitionSubject.Type.USER_ATTRIBUTE, + buildArrayLiteral("read"), + true, + new ArrayLiteral( + List.of(new StringLiteral("oa1"), new NegatedExpression(new StringLiteral("oa2"))), Type.string() + ) + ); + assertEquals( + """ + create prohibition "pro1" + deny UA "ua2" + access rights ["read"] + on intersection of ["oa1", !"oa2"]""", + stmt.toFormattedString(0) + ); + assertEquals( + """ + create prohibition "pro1" + deny UA "ua2" + access rights ["read"] + on intersection of ["oa1", !"oa2"]""", + stmt.toFormattedString(0) + ); + } +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateRoutineStatementTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateRoutineStatementTest.java new file mode 100644 index 000000000..edc6a23f8 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateRoutineStatementTest.java @@ -0,0 +1,39 @@ +package gov.nist.csd.pm.pap.pml.statement.operation; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.routine.Routine; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class CreateRoutineStatementTest { + + @Test + void testOperationSignatureDoesNotThrowExceptionButIsIgnored() throws PMException { + String pml = """ + routine routine1(nodeop string a) { + check "assign" on a + } { + + } + """; + MemoryPAP pap = new MemoryPAP(); + assertDoesNotThrow(() -> pap.executePML(new UserContext("u1"), pml)); + } + + @Test + void testSuccess() throws PMException { + String pml = """ + routine routine1(string a) { + create PC a + create OA "oa1" in [a] + }"""; + MemoryPAP pap = new MemoryPAP(); + pap.executePML(new UserContext("u1"), pml); + Routine routine1 = pap.query().routines().getAdminRoutine("routine1"); + assertEquals(pml, routine1.toString()); + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateRuleStatementTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateRuleStatementTest.java new file mode 100644 index 000000000..515dfe7d1 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/CreateRuleStatementTest.java @@ -0,0 +1,53 @@ +package gov.nist.csd.pm.pap.pml.statement.operation; + +import gov.nist.csd.pm.pap.pml.expression.literal.StringLiteral; +import gov.nist.csd.pm.pap.pml.pattern.OperationPattern; +import gov.nist.csd.pm.pap.pml.pattern.operand.AnyOperandPattern; +import gov.nist.csd.pm.pap.pml.pattern.operand.InOperandPattern; +import gov.nist.csd.pm.pap.pml.pattern.operand.NodeOperandPattern; +import gov.nist.csd.pm.pap.pml.pattern.subject.SubjectPattern; +import org.junit.jupiter.api.Test; + +import java.util.List; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.*; + +class CreateRuleStatementTest { + + @Test + void testFormattedString() { + CreateRuleStatement createRuleStatement = new CreateRuleStatement( + new StringLiteral("rule1"), + new SubjectPattern(), + new OperationPattern(), + Map.of( + "a", List.of(new AnyOperandPattern()), + "b", List.of(new InOperandPattern("test"), new NodeOperandPattern("test")) + ), + new CreateRuleStatement.ResponseBlock("", List.of()) + ); + + String actual = createRuleStatement.toFormattedString(0); + assertTrue(actual.equals(""" + create rule "rule1" + when any user + performs any operation + on { + a: any, + b: [in "test", "test"] + } + do () { + }""".trim()) || actual.equals(""" + create rule "rule1" + when any user + performs any operation + on { + b: [in "test", "test"], + a: any + } + do () { + }""")); + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/DeassignStatementTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/DeassignStatementTest.java new file mode 100644 index 000000000..f874c7883 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/DeassignStatementTest.java @@ -0,0 +1,59 @@ +package gov.nist.csd.pm.pap.pml.statement.operation; + + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.pml.expression.literal.StringLiteral; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static gov.nist.csd.pm.pap.pml.PMLUtil.buildArrayLiteral; +import static org.junit.jupiter.api.Assertions.*; + +class DeassignStatementTest { + + @Test + void testSuccess() throws PMException { + DeassignStatement stmt = new DeassignStatement( + new StringLiteral("ua3"), + buildArrayLiteral("ua1", "ua2") + ); + + PAP pap = new MemoryPAP(); + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.modify().graph().createUserAttribute("ua2", List.of("pc1")); + pap.modify().graph().createUserAttribute("ua3", List.of("ua1", "ua2", "pc1")); + pap.modify().graph().createUser("u1", List.of("ua1")); + + ExecutionContext execCtx = new ExecutionContext(new UserContext("u1"), pap); + stmt.execute(execCtx, pap); + + assertTrue(pap.query().graph().getAdjacentDescendants("ua3").contains("pc1")); + } + + @Test + void testToFormattedString() { + DeassignStatement stmt = new DeassignStatement( + new StringLiteral("ua3"), + buildArrayLiteral("ua1", "ua2") + ); + + assertEquals( + """ + deassign "ua3" from ["ua1", "ua2"]""", + stmt.toFormattedString(0) + ); + assertEquals( + """ + deassign "ua3" from ["ua1", "ua2"] + """, + stmt.toFormattedString(1) + "\n" + ); + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/DeleteRuleStatementTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/DeleteRuleStatementTest.java new file mode 100644 index 000000000..4954e647c --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/DeleteRuleStatementTest.java @@ -0,0 +1,64 @@ +package gov.nist.csd.pm.pap.pml.statement.operation; + + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.obligation.EventPattern; +import gov.nist.csd.pm.pap.obligation.Response; +import gov.nist.csd.pm.pap.obligation.Rule; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.pattern.OperationPattern; +import gov.nist.csd.pm.pap.pml.pattern.subject.SubjectPattern; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.pml.expression.literal.StringLiteral; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import org.junit.jupiter.api.Test; + +import java.util.*; + +import static org.junit.jupiter.api.Assertions.*; + +class DeleteRuleStatementTest { + + @Test + void testSuccess() throws PMException { + DeleteRuleStatement stmt = new DeleteRuleStatement( + new StringLiteral("rule1"), new StringLiteral("obl1")); + + PAP pap = new MemoryPAP(); + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.modify().graph().createUser("u1", List.of("ua1")); + UserContext userContext = new UserContext("u1"); + pap.modify().obligations().createObligation(userContext.getUser(), "obl1", List.of(new Rule( + "rule1", + new EventPattern(new SubjectPattern(), new OperationPattern()), + new Response("e", List.of())) + )); + + ExecutionContext execCtx = new ExecutionContext(userContext, pap); + stmt.execute(execCtx, pap); + + assertTrue(pap.query().obligations().getObligation("obl1").getRules().isEmpty()); + } + + @Test + void testToFormattedString() { + DeleteRuleStatement stmt = new DeleteRuleStatement( + new StringLiteral("rule1"), new StringLiteral("obl1")); + + assertEquals( + """ + delete rule "rule1" from obligation "obl1" + """, + stmt.toFormattedString(0) + "\n" + ); + assertEquals( + """ + delete rule "rule1" from obligation "obl1" + """, + stmt.toFormattedString(1) + "\n" + ); + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/DeleteStatementTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/DeleteStatementTest.java new file mode 100644 index 000000000..9abd16dc2 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/DeleteStatementTest.java @@ -0,0 +1,88 @@ +package gov.nist.csd.pm.pap.pml.statement.operation; + + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.obligation.EventPattern; +import gov.nist.csd.pm.pap.obligation.Response; +import gov.nist.csd.pm.pap.obligation.Rule; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.exception.ProhibitionDoesNotExistException; +import gov.nist.csd.pm.pap.pml.pattern.OperationPattern; +import gov.nist.csd.pm.pap.pml.pattern.subject.SubjectPattern; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.prohibition.ContainerCondition; +import gov.nist.csd.pm.pap.prohibition.ProhibitionSubject; +import gov.nist.csd.pm.pap.pml.expression.literal.StringLiteral; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import org.junit.jupiter.api.Test; + +import java.util.Collections; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +class DeleteStatementTest { + + @Test + void testSuccess() throws PMException { + DeleteStatement stmt1 = new DeleteStatement(DeleteStatement.Type.OBJECT_ATTRIBUTE, new StringLiteral("oa1")); + DeleteStatement stmt2 = new DeleteStatement(DeleteStatement.Type.PROHIBITION, new StringLiteral("p1")); + DeleteStatement stmt3 = new DeleteStatement(DeleteStatement.Type.OBLIGATION, new StringLiteral("o1")); + + PAP pap = new MemoryPAP(); + pap.modify().operations().setResourceOperations(new AccessRightSet("read")); + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.modify().graph().createUser("u1", List.of("ua1")); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + pap.modify().graph().createObjectAttribute("oa2", List.of("pc1")); + UserContext userContext = new UserContext("u1"); + pap.modify().obligations().createObligation(userContext.getUser(), "o1", List.of(new Rule( + "rule1", + new EventPattern(new SubjectPattern(), new OperationPattern("e1")), + new Response("e", List.of()) + ))); + pap.modify().prohibitions().createProhibition("p1", + new ProhibitionSubject("ua1", ProhibitionSubject.Type.USER_ATTRIBUTE), + new AccessRightSet("read"), + true, + Collections.singleton(new ContainerCondition("oa1", true)) + ); + + stmt2.execute(new ExecutionContext(userContext, pap), pap); + stmt3.execute(new ExecutionContext(userContext, pap), pap); + stmt1.execute(new ExecutionContext(userContext, pap), pap); + + assertFalse(pap.query().graph().nodeExists("oa1")); + assertThrows(ProhibitionDoesNotExistException.class, () -> pap.query().prohibitions().getProhibition("p1")); + assertFalse(pap.query().obligations().obligationExists("o1")); + } + + @Test + void testToFormattedString() { + DeleteStatement stmt = new DeleteStatement(DeleteStatement.Type.OBJECT_ATTRIBUTE, new StringLiteral("test")); + DeleteStatement stmt1 = new DeleteStatement(DeleteStatement.Type.OBLIGATION, new StringLiteral("test")); + DeleteStatement stmt2 = new DeleteStatement(DeleteStatement.Type.PROHIBITION, new StringLiteral("test")); + DeleteStatement stmt3 = new DeleteStatement(DeleteStatement.Type.OBJECT, new StringLiteral("test")); + DeleteStatement stmt4 = new DeleteStatement(DeleteStatement.Type.POLICY_CLASS, new StringLiteral("test")); + DeleteStatement stmt5 = new DeleteStatement(DeleteStatement.Type.USER, new StringLiteral("test")); + DeleteStatement stmt6 = new DeleteStatement(DeleteStatement.Type.USER_ATTRIBUTE, new StringLiteral("test")); + + assertEquals("delete OA \"test\"", stmt.toFormattedString(0)); + assertEquals("delete obligation \"test\"", stmt1.toFormattedString(0)); + assertEquals("delete prohibition \"test\"", stmt2.toFormattedString(0)); + assertEquals("delete O \"test\"", stmt3.toFormattedString(0)); + assertEquals("delete PC \"test\"", stmt4.toFormattedString(0)); + assertEquals("delete U \"test\"", stmt5.toFormattedString(0)); + assertEquals("delete UA \"test\"", stmt6.toFormattedString(0)); + assertEquals( + """ + delete OA "test" + """, + stmt.toFormattedString(1) + "\n" + ); + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/DissociateStatementTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/DissociateStatementTest.java new file mode 100644 index 000000000..d1ebae065 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/DissociateStatementTest.java @@ -0,0 +1,50 @@ +package gov.nist.csd.pm.pap.pml.statement.operation; + + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.pml.expression.literal.StringLiteral; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static gov.nist.csd.pm.pap.pml.PMLUtil.buildArrayLiteral; +import static org.junit.jupiter.api.Assertions.*; + +class DissociateStatementTest { + + @Test + void testSuccess() throws PMException { + DissociateStatement stmt = new DissociateStatement(new StringLiteral("ua1"), new StringLiteral("oa1")); + + PAP pap = new MemoryPAP(); + pap.modify().operations().setResourceOperations(new AccessRightSet("read")); + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.modify().graph().createUser("u1", List.of("ua1")); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + pap.modify().graph().associate("ua1", "oa1", new AccessRightSet("read")); + UserContext userContext = new UserContext("u1"); + + stmt.execute(new ExecutionContext(userContext, pap), pap); + + assertTrue(pap.query().graph().getAssociationsWithSource("ua1").isEmpty()); + assertTrue(pap.query().graph().getAssociationsWithTarget("oa1").isEmpty()); + } + + @Test + void testToFormattedString() { + DissociateStatement stmt = new DissociateStatement(new StringLiteral("ua1"), buildArrayLiteral("oa1")); + + assertEquals("dissociate \"ua1\" and [\"oa1\"]", stmt.toFormattedString(0)); + assertEquals( + " dissociate \"ua1\" and [\"oa1\"]", + stmt.toFormattedString(1) + ); + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/SetNodePropertiesStatementTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/SetNodePropertiesStatementTest.java new file mode 100644 index 000000000..f7e5df2de --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/SetNodePropertiesStatementTest.java @@ -0,0 +1,58 @@ +package gov.nist.csd.pm.pap.pml.statement.operation; + + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.pml.expression.literal.StringLiteral; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import org.junit.jupiter.api.Test; + +import java.util.List; +import java.util.Map; + +import static gov.nist.csd.pm.pap.pml.PMLUtil.buildMapLiteral; +import static org.junit.jupiter.api.Assertions.*; + +class SetNodePropertiesStatementTest { + + @Test + void testSuccess() throws PMException { + SetNodePropertiesStatement stmt = new SetNodePropertiesStatement( + new StringLiteral("ua1"), + buildMapLiteral("a", "b", "c", "d") + ); + + PAP pap = new MemoryPAP(); + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.modify().graph().createUser("u1", List.of("ua1")); + UserContext userContext = new UserContext("u1"); + + stmt.execute(new ExecutionContext(userContext, pap), pap); + + assertEquals( + Map.of("a", "b", "c", "d"), + pap.query().graph().getNode("ua1").getProperties() + ); + } + + @Test + void testToFormattedString() { + SetNodePropertiesStatement stmt = new SetNodePropertiesStatement( + new StringLiteral("ua1"), + buildMapLiteral("a", "b", "c", "d") + ); + + assertEquals( + "set properties of \"ua1\" to {\"a\": \"b\", \"c\": \"d\"}", + stmt.toFormattedString(0) + ); + assertEquals( + " set properties of \"ua1\" to {\"a\": \"b\", \"c\": \"d\"}", + stmt.toFormattedString(1) + ); + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/SetResourceOperationsStatementTest.java b/src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/SetResourceOperationsStatementTest.java new file mode 100644 index 000000000..6e29fa830 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/pml/statement/operation/SetResourceOperationsStatementTest.java @@ -0,0 +1,49 @@ +package gov.nist.csd.pm.pap.pml.statement.operation; + + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.pml.context.ExecutionContext; +import org.junit.jupiter.api.Test; + +import static gov.nist.csd.pm.pap.pml.PMLUtil.buildArrayLiteral; +import static org.junit.jupiter.api.Assertions.*; + +class SetResourceOperationsStatementTest { + + @Test + void testSuccess() throws PMException { + SetResourceOperationsStatement stmt = new SetResourceOperationsStatement( + buildArrayLiteral("a", "b", "c", "d") + ); + + PAP pap = new MemoryPAP(); + + stmt.execute(new ExecutionContext(new UserContext(""), pap), pap); + + assertEquals( + new AccessRightSet("a", "b", "c", "d"), + pap.query().operations().getResourceOperations() + ); + } + + @Test + void testToFormattedString() { + SetResourceOperationsStatement stmt = new SetResourceOperationsStatement( + buildArrayLiteral("a", "b", "c", "d") + ); + + assertEquals( + "set resource operations [\"a\", \"b\", \"c\", \"d\"]", + stmt.toFormattedString(0) + ); + assertEquals( + " set resource operations [\"a\", \"b\", \"c\", \"d\"]", + stmt.toFormattedString(1) + ); + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/query/AccessQuerierTest.java b/src/test/java/gov/nist/csd/pm/pap/query/AccessQuerierTest.java new file mode 100644 index 000000000..bfade02a6 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/query/AccessQuerierTest.java @@ -0,0 +1,1146 @@ +package gov.nist.csd.pm.pap.query; + +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAPTestInitializer; +import gov.nist.csd.pm.pap.query.explain.Explain; +import gov.nist.csd.pm.pap.query.explain.Path; +import gov.nist.csd.pm.pap.query.explain.PolicyClassExplain; +import gov.nist.csd.pm.pap.graph.relationship.Association; +import gov.nist.csd.pm.pap.prohibition.ContainerCondition; +import gov.nist.csd.pm.pap.prohibition.Prohibition; +import gov.nist.csd.pm.pap.prohibition.ProhibitionSubject; +import gov.nist.csd.pm.pap.serialization.pml.PMLDeserializer; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +import java.util.*; + +import static gov.nist.csd.pm.pap.op.AdminAccessRights.*; +import static org.junit.jupiter.api.Assertions.*; + +public abstract class AccessQuerierTest extends PAPTestInitializer { + + private static final AccessRightSet RWE = new AccessRightSet("read", "write", "execute"); + + @Test + void testComputeAccessibleAscendants() throws PMException { + String pml = """ + set resource operations ["read", "write"] + create pc "pc1" + create ua "ua1" in ["pc1"] + create oa "oa1" in ["pc1"] + create oa "oa2" in ["oa1"] + associate "ua1" and "oa1" with ["read", "write"] + + create u "u1" in ["ua1"] + create o "o1" in ["oa1"] + create o "o2" in ["oa1"] + """; + pap.deserialize(new UserContext("u1"), pml, new PMLDeserializer()); + + Collection actual = pap.query().access().computeAccessibleAscendants(new UserContext("u1"), "oa1"); + assertEquals( + Set.of("oa2", "o1", "o2"), + new HashSet<>(actual) + ); + } + + @Test + void testComputeAccessibleDescendants() throws PMException { + String pml = """ + set resource operations ["read", "write"] + create pc "pc1" + create ua "ua1" in ["pc1"] + create oa "oa1" in ["pc1"] + create oa "oa2" in ["pc1"] + create oa "oa3" in ["pc1"] + associate "ua1" and "oa1" with ["read", "write"] + associate "ua1" and "oa2" with ["read", "write"] + + create u "u1" in ["ua1"] + create o "o1" in ["oa1", "oa2"] + """; + pap.deserialize(new UserContext("u1"), pml, new PMLDeserializer()); + + Collection actual = pap.query().access().computeAccessibleDescendants(new UserContext("u1"), "o1"); + assertEquals( + Set.of("oa1", "oa2"), + new HashSet<>(actual) + ); + } + + @Test + void testBuildPOS() throws PMException { + String pml = """ + set resource operations ["read", "write"] + create pc "pc1" + create ua "ua1" in ["pc1"] + create oa "oa1" in ["pc1"] + associate "ua1" and "oa1" with ["read", "write"] + create pc "pc2" + create ua "ua2" in ["pc2"] + create oa "oa2" in ["pc2"] + create oa "oa3" in ["oa2"] + create oa "oa4" in ["pc2"] + + associate "ua2" and "oa2" with ["read", "write"] + associate "ua2" and "oa4" with ["read"] + + create u "u1" in ["ua1", "ua2"] + create o "o1" in ["oa1", "oa3"] + create o "o2" in ["oa4"] + + create prohibition "p1" + deny user "u1" + access rights ["write"] + on union of ["oa1"] + """; + pap.deserialize(new UserContext("u1"), pml, new PMLDeserializer()); + + Set u1 = pap.query().access().computePersonalObjectSystem(new UserContext("u1")); + assertEquals( + Set.of("oa1", "oa2", "oa4"), + u1 + ); + } + + @Test + void testExplain() throws PMException { + String pml = """ + set resource operations ["read", "write"] + create pc "pc1" + create ua "ua1" in ["pc1"] + create oa "oa1" in ["pc1"] + associate "ua1" and "oa1" with ["read", "write"] + + create pc "pc2" + create ua "ua2" in ["pc2"] + create oa "oa2" in ["pc2"] + create oa "oa3" in ["oa2"] + associate "ua2" and "oa2" with ["read", "write"] + + create u "u1" in ["ua1", "ua2"] + create o "o1" in ["oa1", "oa3"] + + create prohibition "p1" + deny user "u1" + access rights ["write"] + on union of ["oa1"] + + create prohibition "p2" + deny user "u1" + access rights ["write"] + on union of [!"oa1"] + """; + pap.deserialize(new UserContext("u1"), pml, new PMLDeserializer()); + + Explain explain = pap.query().access().explain(new UserContext("u1"), "o1"); + Explain expected = new Explain( + new AccessRightSet("read"), + Map.of( + "pc1", new PolicyClassExplain( + new AccessRightSet("read", "write"), + Set.of(new Path( + List.of("u1", "ua1", "oa1"), + List.of("o1", "oa1", "pc1"), + new Association("ua1", "oa1", new AccessRightSet("read", "write")) + ))), + "pc2", new PolicyClassExplain( + new AccessRightSet("read", "write"), + Set.of(new Path( + List.of("u1", "ua2", "oa2"), + List.of("o1", "oa3", "oa2", "pc2"), + new Association("ua2", "oa2", new AccessRightSet("read", "write")) + ))) + ), + new AccessRightSet("write"), + List.of( + new Prohibition("p1", new ProhibitionSubject("u1", ProhibitionSubject.Type.USER), new AccessRightSet("write"), false, List.of(new ContainerCondition("oa1", false))) + ) + ); + assertEquals(expected, explain); + } + + @Test + void testExplainOnObjAttrWithAssociation() throws PMException { + String pml = """ + set resource operations ["read", "write"] + create pc "pc1" + create UA "ua1" in ["pc1"] + create oa "oa1" in ["pc1"] + create oa "oa2" in ["oa1"] + + associate "ua1" and "oa1" with ["write"] + associate "ua1" and "oa2" with ["read"] + + + create user "u1" in ["ua1"] + """; + pap.deserialize(new UserContext("u1"), pml, new PMLDeserializer()); + Explain actual = pap.query().access().explain(new UserContext("u1"), "oa2"); + assertEquals( + new Explain( + new AccessRightSet("read", "write"), + Map.of( + "pc1", new PolicyClassExplain( + new AccessRightSet("read", "write"), + Set.of( + new Path( + List.of("u1", "ua1", "oa1"), + List.of("oa2", "oa1", "pc1"), + new Association("ua1", "oa1", new AccessRightSet("write")) + ), + new Path( + List.of("u1", "ua1", "oa2"), + List.of("oa2", "oa1", "pc1"), + new Association("ua1", "oa2", new AccessRightSet("read")) + ) + ) + ) + ), + new AccessRightSet(), + List.of() + ), + actual + ); + } + + @Test + void testComputeSubgraphPrivileges() throws PMException { + String pml = """ + set resource operations ["read", "write"] + create pc "pc1" + create ua "ua1" in ["pc1"] + create oa "oa1" in ["pc1"] + create oa "oa2" in ["oa1"] + + associate "ua1" and "oa1" with ["read", "write"] + + create u "u1" in ["ua1"] + create o "o1" in ["oa2"] + """; + pap.deserialize(new UserContext("u1"), pml, new PMLDeserializer()); + Map u1 = + pap.query().access().computeAscendantPrivileges(new UserContext("u1"), "oa1"); + assertEquals( + Map.of( + "oa2", new AccessRightSet("read", "write"), + "o1", new AccessRightSet("read", "write") + ), + u1 + ); + } + + @Test + void testFindBorderAttributes() throws PMException { + String pml = """ + set resource operations ["read", "write"] + create pc "pc1" + create ua "ua1" in ["pc1"] + create ua "ua2" in ["pc1"] + + create oa "oa1" in ["pc1"] + create oa "oa2" in ["oa1"] + associate "ua1" and "oa1" with ["read", "write"] + associate "ua2" and "oa2" with ["read"] + + create u "u1" in ["ua1", "ua2"] + """; + pap.deserialize(new UserContext("u1"), pml, new PMLDeserializer()); + Map u1 = pap.query().access().computeDestinationAttributes("u1"); + assertEquals( + Map.of( + "oa1", new AccessRightSet("read", "write"), + "oa2", new AccessRightSet("read") + ), + u1 + ); + } + + @Test + void testBuildACL() throws PMException { + String pml = """ + set resource operations ["read", "write"] + create pc "pc1" + create ua "ua1" in ["pc1"] + create ua "ua2" in ["pc1"] + create oa "oa1" in ["pc1"] + associate "ua1" and "oa1" with ["read", "write"] + associate "ua2" and "oa1" with ["read"] + + create u "u1" in ["ua1"] + create u "u2" in ["ua2"] + create o "o1" in ["oa1"] + """; + pap.deserialize(new UserContext("u1"), pml, new PMLDeserializer()); + Map o1 = pap.query().access().computeACL("o1"); + assertEquals( + Map.of( + "u1", new AccessRightSet("read", "write"), + "u2", new AccessRightSet("read") + ), + o1 + ); + } + + @Test + void testBuildCapabilityList() throws PMException { + String pml = """ + set resource operations ["read", "write"] + create pc "pc1" + create ua "ua1" in ["pc1"] + create oa "oa1" in ["pc1"] + create oa "oa2" in ["pc1"] + associate "ua1" and "oa1" with ["read", "write"] + associate "ua1" and "oa2" with ["read"] + + create u "u1" in ["ua1"] + create o "o1" in ["oa1"] + create o "o2" in ["oa2"] + + create prohibition "p1" + deny user "u1" + access rights ["write"] + on union of ["oa1"] + """; + pap.deserialize(new UserContext("u1"), pml, new PMLDeserializer()); + Map u1 = pap.query().access().computeCapabilityList(new UserContext("u1")); + assertEquals( + Map.of( + "o1", new AccessRightSet("read"), + "o2", new AccessRightSet("read"), + "oa1", new AccessRightSet("read"), + "oa2", new AccessRightSet("read") + ), + u1 + ); + } + + @Test + void testComputeDeniedPrivileges() throws PMException { + String pml = """ + set resource operations ["read", "write"] + create pc "pc1" + create ua "ua1" in ["pc1"] + create oa "oa1" in ["pc1"] + associate "ua1" and "oa1" with ["read", "write"] + + create u "u1" in ["ua1"] + create o "o1" in ["oa1"] + + create prohibition "p1" + deny user "u1" + access rights ["write"] + on union of ["oa1"] + """; + pap.deserialize(new UserContext("u1"), pml, new PMLDeserializer()); + AccessRightSet deniedPrivileges = pap.query().access().computeDeniedPrivileges(new UserContext("u1"), "o1"); + assertEquals(new AccessRightSet("write"), deniedPrivileges); + } + + @Test + void testComputePolicyClassAccessRights() throws PMException { + String pml = """ + set resource operations ["read", "write"] + create pc "pc1" + create UA "ua1" in ["pc1"] + create OA "oa1" in ["pc1"] + associate "ua1" and "oa1" with ["read", "write"] + + create pc "pc2" + create UA "ua2" in ["pc2"] + create OA "oa2" in ["pc2"] + associate "ua2" and "oa2" with ["read"] + + create u "u1" in ["ua1", "ua2"] + create o "o1" in ["oa1", "oa2"] + """; + pap.deserialize(new UserContext("u1"), pml, new PMLDeserializer()); + Map policyClassAccessRights = + pap.query().access().computePolicyClassAccessRights(new UserContext("u1"), "o1"); + assertEquals( + Map.of( + "pc1", new AccessRightSet("read", "write"), + "pc2", new AccessRightSet("read") + ), + policyClassAccessRights + ); + } + + @Test + void testGetAscendants() throws PMException { + + pap.modify().operations().setResourceOperations(RWE); + + String pc1 = pap.modify().graph().createPolicyClass("pc1"); + String ua1 = pap.modify().graph().createUserAttribute("ua1", List.of(pc1)); + String oa1 = pap.modify().graph().createObjectAttribute("oa1", List.of(pc1)); + String u1 = pap.modify().graph().createUser("u1", List.of(ua1)); + String o1 = pap.modify().graph().createObject("o1", List.of(oa1)); + String o2 = pap.modify().graph().createObject("o2", List.of(oa1)); + String o3 = pap.modify().graph().createObject("o3", List.of(oa1)); + + AccessRightSet arset = new AccessRightSet("read", "write"); + pap.modify().graph().associate(ua1, oa1, arset); + Map subgraph = pap.query().access().computeAscendantPrivileges(new UserContext(u1), oa1); + assertEquals( + Map.of("o1", arset, "o2", arset, "o3", arset), + subgraph + ); + } + + @Test + void testGetAccessibleNodes() throws PMException { + pap.modify().operations().setResourceOperations(RWE); + + String pc1 = pap.modify().graph().createPolicyClass("pc1"); + String ua1 = pap.modify().graph().createUserAttribute("ua1", List.of(pc1)); + String oa1 = pap.modify().graph().createObjectAttribute("oa1", List.of(pc1)); + String u1 = pap.modify().graph().createUser("u1", List.of(ua1)); + String o1 = pap.modify().graph().createObject("o1", List.of(oa1)); + String o2 = pap.modify().graph().createObject("o2", List.of(oa1)); + String o3 = pap.modify().graph().createObject("o3", List.of(oa1)); + + AccessRightSet arset = new AccessRightSet("read", "write"); + pap.modify().graph().associate(ua1, oa1, arset); + Map accessibleNodes = pap.query().access().computeCapabilityList(new UserContext(u1)); + + assertTrue(accessibleNodes.containsKey(oa1)); + assertTrue(accessibleNodes.containsKey(o1)); + assertTrue(accessibleNodes.containsKey(o2)); + assertTrue(accessibleNodes.containsKey(o3)); + + assertEquals(arset, accessibleNodes.get(oa1)); + assertEquals(arset, accessibleNodes.get(o1)); + assertEquals(arset, accessibleNodes.get(o2)); + assertEquals(arset, accessibleNodes.get(o3)); + } + + @Nested + class GetPrivilegesTests { + + @Test + void testGraph1() throws PMException { + pap.modify().operations().setResourceOperations(RWE); + + String pc1 = pap.modify().graph().createPolicyClass("pc1"); + String ua1 = pap.modify().graph().createUserAttribute("ua1", List.of(pc1)); + String u1 = pap.modify().graph().createUser("u1", List.of(ua1)); + String oa1 = pap.modify().graph().createObjectAttribute("oa1", List.of(pc1)); + String o1 = pap.modify().graph().createObject("o1", List.of(oa1)); + + pap.modify().graph().associate(ua1, oa1, new AccessRightSet("read", "write")); + assertTrue( + pap.query().access().computePrivileges(new UserContext(u1), o1).containsAll(Arrays.asList("read", "write"))); + } + + @Test + void testGraph2() throws PMException { + pap.modify().operations().setResourceOperations(RWE); + + String pc1 = pap.modify().graph().createPolicyClass("pc1"); + String pc2 = pap.modify().graph().createPolicyClass("pc2"); + String ua1 = pap.modify().graph().createUserAttribute("ua1", List.of(pc1, pc2)); + String ua2 = pap.modify().graph().createUserAttribute("ua2", List.of(pc1)); + String u1 = pap.modify().graph().createUser("u1", List.of(ua1, ua2)); + + String oa1 = pap.modify().graph().createObjectAttribute("oa1", List.of(pc1)); + String oa2 = pap.modify().graph().createObjectAttribute("oa2", List.of(pc2)); + String o1 = pap.modify().graph().createObject("o1", List.of(oa1, oa2)); + + pap.modify().graph().associate(ua1, oa1, new AccessRightSet("read")); + + + assertTrue(pap.query().access().computePrivileges(new UserContext(u1), o1).isEmpty()); + } + + @Test + void testGraph3() throws PMException { + pap.modify().operations().setResourceOperations(RWE); + String pc1 = pap.modify().graph().createPolicyClass("pc1"); + String ua1 = pap.modify().graph().createUserAttribute("ua1", List.of(pc1)); + String u1 = pap.modify().graph().createUser("u1", List.of(ua1)); + String oa1 = pap.modify().graph().createObjectAttribute("oa1", List.of(pc1)); + String o1 = pap.modify().graph().createObject("o1", List.of(oa1)); + + pap.modify().graph().associate(ua1, oa1, new AccessRightSet("read", "write")); + + + assertTrue( + pap.query().access().computePrivileges(new UserContext(u1), o1).containsAll(Arrays.asList("read", "write"))); + } + + @Test + void testGraph4() throws PMException { + pap.modify().operations().setResourceOperations(RWE); + String pc1 = pap.modify().graph().createPolicyClass("pc1"); + String ua1 = pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + String ua2 = pap.modify().graph().createUserAttribute("ua2", List.of("pc1")); + String u1 = pap.modify().graph().createUser("u1", List.of(ua1, ua2)); + String oa1 = pap.modify().graph().createObjectAttribute("oa1", List.of(pc1)); + String o1 = pap.modify().graph().createObject("o1", List.of(oa1)); + + pap.modify().graph().associate(ua1, oa1, new AccessRightSet("read")); + pap.modify().graph().associate(ua2, oa1, new AccessRightSet("write")); + + + assertEquals( + new AccessRightSet("read", "write"), + pap.query().access().computePrivileges(new UserContext(u1), o1) + ); + } + + @Test + void testGraph5() throws PMException { pap.modify().operations().setResourceOperations(RWE); + + String pc1 = pap.modify().graph().createPolicyClass("pc1"); + String pc2 = pap.modify().graph().createPolicyClass("pc2"); + String ua1 = pap.modify().graph().createUserAttribute("ua1", List.of(pc1)); + String ua2 = pap.modify().graph().createUserAttribute("ua2", List.of(pc2)); + String u1 = pap.modify().graph().createUser("u1", List.of(ua1, ua2)); + String oa1 = pap.modify().graph().createObjectAttribute("oa1", List.of(pc1)); + String oa2 = pap.modify().graph().createObjectAttribute("oa2", List.of(pc2)); + String o1 = pap.modify().graph().createObject("o1", List.of(oa1, oa2)); + + pap.modify().graph().associate(ua1, oa1, new AccessRightSet("read")); + pap.modify().graph().associate(ua2, oa2, new AccessRightSet("read", "write")); + + + + assertTrue(pap.query().access().computePrivileges(new UserContext(u1), o1).containsAll(Arrays.asList("read"))); + } + + @Test + void testGraph6() throws PMException { + pap.modify().operations().setResourceOperations(RWE); + String pc1 = pap.modify().graph().createPolicyClass("pc1"); + String pc2 = pap.modify().graph().createPolicyClass("pc2"); + String ua1 = pap.modify().graph().createUserAttribute("ua1", List.of(pc1)); + String ua2 = pap.modify().graph().createUserAttribute("ua2", List.of(pc2)); + String u1 = pap.modify().graph().createUser("u1", List.of(ua1, ua2)); + String oa1 = pap.modify().graph().createObjectAttribute("oa1", List.of(pc1)); + String oa2 = pap.modify().graph().createObjectAttribute("oa2", List.of(pc2)); + String o1 = pap.modify().graph().createObject("o1", List.of(oa1, oa2)); + + pap.modify().graph().associate(ua1, oa1, new AccessRightSet("read", "write")); + pap.modify().graph().associate(ua2, oa2, new AccessRightSet("read")); + + + + assertTrue(pap.query().access().computePrivileges(new UserContext(u1), o1).containsAll(Arrays.asList("read"))); + } + + @Test + void testGraph7() throws PMException { + pap.modify().operations().setResourceOperations(RWE); + + String pc1 = pap.modify().graph().createPolicyClass("pc1"); + String pc2 = pap.modify().graph().createPolicyClass("pc2"); + String ua1 = pap.modify().graph().createUserAttribute("ua1", List.of(pc1)); + String u1 = pap.modify().graph().createUser("u1", List.of(ua1)); + String oa1 = pap.modify().graph().createObjectAttribute("oa1", List.of(pc1)); + String oa2 = pap.modify().graph().createObjectAttribute("oa2", List.of(pc2)); + String o1 = pap.modify().graph().createObject("o1", List.of(oa1, oa2)); + + pap.modify().graph().associate(ua1, oa1, new AccessRightSet("read", "write")); + + + + assertTrue(pap.query().access().computePrivileges(new UserContext(u1), o1).isEmpty()); + } + + @Test + void testGraph8() throws PMException { + pap.modify().operations().setResourceOperations(RWE); + String pc1 = pap.modify().graph().createPolicyClass("pc1"); + String ua1 = pap.modify().graph().createUserAttribute("ua1", List.of(pc1)); + String u1 = pap.modify().graph().createUser("u1", List.of(ua1)); + String oa1 = pap.modify().graph().createObjectAttribute("oa1", List.of(pc1)); + String o1 = pap.modify().graph().createObject("o1", List.of(oa1)); + + pap.modify().graph().associate(ua1, oa1, new AccessRightSet("*")); + + + + Set list = pap.query().access().computePrivileges(new UserContext(u1), o1); + assertTrue(list.containsAll(allAdminAccessRights())); + assertTrue(list.containsAll(RWE)); + } + + @Test + void testGraph9() throws PMException { + pap.modify().operations().setResourceOperations(RWE); + String pc1 = pap.modify().graph().createPolicyClass("pc1"); + String ua1 = pap.modify().graph().createUserAttribute("ua1", List.of(pc1)); + String ua2 = pap.modify().graph().createUserAttribute("ua2", List.of(pc1)); + String u1 = pap.modify().graph().createUser("u1", List.of(ua1)); + String oa1 = pap.modify().graph().createObjectAttribute("oa1", List.of(pc1)); + String o1 = pap.modify().graph().createObject("o1", List.of(oa1)); + + pap.modify().graph().associate(ua1, oa1, new AccessRightSet("*")); + pap.modify().graph().associate(ua2, oa1, new AccessRightSet("read", "write")); + + + + Set list = pap.query().access().computePrivileges(new UserContext(u1), o1); + assertTrue(list.containsAll(allAdminAccessRights())); + assertTrue(list.containsAll(RWE)); + } + + @Test + void testGraph10() throws PMException { + pap.modify().operations().setResourceOperations(RWE); + String pc1 = pap.modify().graph().createPolicyClass("pc1"); + String pc2 = pap.modify().graph().createPolicyClass("pc2"); + String ua1 = pap.modify().graph().createUserAttribute("ua1", List.of(pc1)); + String ua2 = pap.modify().graph().createUserAttribute("ua2", List.of(pc2)); + String u1 = pap.modify().graph().createUser("u1", List.of(ua1, ua2)); + String oa1 = pap.modify().graph().createObjectAttribute("oa1", List.of(pc1)); + String oa2 = pap.modify().graph().createObjectAttribute("oa2", List.of(pc2)); + String o1 = pap.modify().graph().createObject("o1", List.of(oa1, oa2)); + + pap.modify().graph().associate(ua1, oa1, new AccessRightSet("*")); + pap.modify().graph().associate(ua2, oa2, new AccessRightSet("read", "write")); + + + + assertTrue( + pap.query().access().computePrivileges(new UserContext(u1), o1).containsAll(Arrays.asList("read", "write"))); + } + + @Test + void testGraph11() throws PMException { + pap.modify().operations().setResourceOperations(RWE); + String pc1 = pap.modify().graph().createPolicyClass("pc1"); + String pc2 = pap.modify().graph().createPolicyClass("pc2"); + String ua1 = pap.modify().graph().createUserAttribute("ua1", List.of(pc1)); + String u1 = pap.modify().graph().createUser("u1", List.of(ua1)); + String oa1 = pap.modify().graph().createObjectAttribute("oa1", List.of(pc1)); + String oa2 = pap.modify().graph().createObjectAttribute("oa2", List.of(pc2)); + String o1 = pap.modify().graph().createObject("o1", List.of(oa1, oa2)); + + pap.modify().graph().associate(ua1, oa1, new AccessRightSet("*")); + + + + assertEquals(new AccessRightSet(), pap.query().access().computePrivileges(new UserContext(u1), o1)); + } + + @Test + void testGraph12() throws PMException { + pap.modify().operations().setResourceOperations(RWE); + String pc1 = pap.modify().graph().createPolicyClass("pc1"); + String ua1 = pap.modify().graph().createUserAttribute("ua1", List.of(pc1)); + String ua2 = pap.modify().graph().createUserAttribute("ua2", List.of(pc1)); + String u1 = pap.modify().graph().createUser("u1", List.of(ua1, ua2)); + String oa1 = pap.modify().graph().createObjectAttribute("oa1", List.of(pc1)); + String o1 = pap.modify().graph().createObject("o1", List.of(oa1)); + + pap.modify().graph().associate(ua1, oa1, new AccessRightSet("read")); + pap.modify().graph().associate(ua2, oa1, new AccessRightSet("write")); + + + + assertTrue( + pap.query().access().computePrivileges(new UserContext(u1), o1).containsAll(Arrays.asList("read", "write"))); + } + + @Test + void testGraph13() throws PMException { + pap.modify().operations().setResourceOperations(RWE); + String pc1 = pap.modify().graph().createPolicyClass("pc1"); + String ua2 = pap.modify().graph().createUserAttribute("ua2", List.of(pc1)); + String ua1 = pap.modify().graph().createUserAttribute("ua1", List.of(ua2)); + String u1 = pap.modify().graph().createUser("u1", List.of(ua1)); + String oa2 = pap.modify().graph().createObjectAttribute("oa2", List.of(pc1)); + String oa1 = pap.modify().graph().createObjectAttribute("oa1", List.of(oa2)); + String o1 = pap.modify().graph().createObject("o1", List.of(oa1)); + + pap.modify().graph().associate(ua1, oa1, new AccessRightSet("*")); + pap.modify().graph().associate(ua2, oa2, new AccessRightSet("read")); + + + + Set list = pap.query().access().computePrivileges(new UserContext(u1), o1); + assertTrue(list.containsAll(allAdminAccessRights())); + assertTrue(list.contains("read")); + } + + @Test + void testGraph14() throws PMException { + pap.modify().operations().setResourceOperations(RWE); + String pc1 = pap.modify().graph().createPolicyClass("pc1"); + String pc2 = pap.modify().graph().createPolicyClass("pc2"); + String ua1 = pap.modify().graph().createUserAttribute("ua1", List.of(pc1)); + String ua2 = pap.modify().graph().createUserAttribute("ua2", List.of(pc1)); + String u1 = pap.modify().graph().createUser("u1", List.of(ua1, ua2)); + String oa1 = pap.modify().graph().createObjectAttribute("oa1", List.of(pc1, pc2)); + String o1 = pap.modify().graph().createObject("o1", List.of(oa1)); + + pap.modify().graph().associate(ua1, oa1, new AccessRightSet("*")); + pap.modify().graph().associate(ua2, oa1, new AccessRightSet("*")); + + + + Set list = pap.query().access().computePrivileges(new UserContext(u1), o1); + assertTrue(list.containsAll(allAdminAccessRights())); + assertTrue(list.containsAll(RWE)); + } + + @Test + void testGraph15() throws PMException { + pap.modify().operations().setResourceOperations(RWE); + String pc1 = pap.modify().graph().createPolicyClass("pc1"); + String ua2 = pap.modify().graph().createUserAttribute("ua2", List.of(pc1)); + String ua1 = pap.modify().graph().createUserAttribute("ua1", List.of(ua2)); + String u1 = pap.modify().graph().createUser("u1", List.of(ua1)); + String oa2 = pap.modify().graph().createObjectAttribute("oa2", List.of(pc1)); + String oa1 = pap.modify().graph().createObjectAttribute("oa1", List.of(oa2)); + String o1 = pap.modify().graph().createObject("o1", List.of(oa1)); + + pap.modify().graph().associate(ua1, oa1, new AccessRightSet("*")); + pap.modify().graph().associate(ua2, oa2, new AccessRightSet("read")); + + + + Set list = pap.query().access().computePrivileges(new UserContext(u1), o1); + assertTrue(list.containsAll(allAdminAccessRights())); + assertTrue(list.containsAll(RWE)); + } + + @Test + void testGraph16() throws PMException { + pap.modify().operations().setResourceOperations(RWE); + String pc1 = pap.modify().graph().createPolicyClass("pc1"); + String ua2 = pap.modify().graph().createUserAttribute("ua2", List.of(pc1)); + String ua1 = pap.modify().graph().createUserAttribute("ua1", List.of(ua2)); + String u1 = pap.modify().graph().createUser("u1", List.of(ua1)); + String oa1 = pap.modify().graph().createObjectAttribute("oa1", List.of(pc1)); + String o1 = pap.modify().graph().createObject("o1", List.of(oa1)); + + pap.modify().graph().associate(ua1, oa1, new AccessRightSet("read")); + pap.modify().graph().associate(ua2, oa1, new AccessRightSet("write")); + + + + assertTrue( + pap.query().access().computePrivileges(new UserContext(u1), o1).containsAll(Arrays.asList("read", "write"))); + } + + // removed graph7 due to adding the descendant IDs to the createNode, need to always connect to the testCtx.policy().graph(). + + @Test + void testGraph18() throws PMException { + pap.modify().operations().setResourceOperations(RWE); + String pc1 = pap.modify().graph().createPolicyClass("pc1"); + String ua1 = pap.modify().graph().createUserAttribute("ua1", List.of(pc1)); + String u1 = pap.modify().graph().createUser("u1", List.of(ua1)); + String oa1 = pap.modify().graph().createObjectAttribute("oa1", List.of(pc1)); + String oa2 = pap.modify().graph().createObjectAttribute("oa2", List.of(pc1)); + String o1 = pap.modify().graph().createObject("o1", List.of(oa2)); + + pap.modify().graph().associate(ua1, oa1, new AccessRightSet("read", "write")); + + + + assertTrue(pap.query().access().computePrivileges(new UserContext(u1), o1).isEmpty()); + } + + @Test + void testGraph19() throws PMException { + pap.modify().operations().setResourceOperations(RWE); + String pc1 = pap.modify().graph().createPolicyClass("pc1"); + String ua1 = pap.modify().graph().createUserAttribute("ua1", List.of(pc1)); + String ua2 = pap.modify().graph().createUserAttribute("ua2", List.of(pc1)); + String u1 = pap.modify().graph().createUser("u1", List.of(ua2)); + String oa1 = pap.modify().graph().createObjectAttribute("oa1", List.of(pc1)); + String o1 = pap.modify().graph().createObject("o1", List.of(oa1)); + + pap.modify().graph().associate(ua1, oa1, new AccessRightSet("read")); + + + + assertTrue(pap.query().access().computePrivileges(new UserContext(u1), o1).isEmpty()); + } + + @Test + void testGraph20() throws PMException { + pap.modify().operations().setResourceOperations(RWE); + String pc1 = pap.modify().graph().createPolicyClass("pc1"); + String pc2 = pap.modify().graph().createPolicyClass("pc2"); + String ua1 = pap.modify().graph().createUserAttribute("ua1", List.of(pc1)); + String ua2 = pap.modify().graph().createUserAttribute("ua2", List.of(pc1)); + String u1 = pap.modify().graph().createUser("u1", List.of(ua1, ua2)); + String oa1 = pap.modify().graph().createObjectAttribute("oa1", List.of(pc1)); + String oa2 = pap.modify().graph().createObjectAttribute("oa2", List.of(pc2)); + String o1 = pap.modify().graph().createObject("o1", List.of(oa1, oa2)); + + pap.modify().graph().associate(ua1, oa1, new AccessRightSet("read")); + pap.modify().graph().associate(ua2, oa2, new AccessRightSet("read", "write")); + + + + assertTrue(pap.query().access().computePrivileges(new UserContext(u1), o1).containsAll(Arrays.asList("read"))); + } + + @Test + void testGraph21() throws PMException { + pap.modify().operations().setResourceOperations(RWE); + String pc1 = pap.modify().graph().createPolicyClass("pc1"); + String pc2 = pap.modify().graph().createPolicyClass("pc2"); + String ua1 = pap.modify().graph().createUserAttribute("ua1", List.of(pc1)); + String ua2 = pap.modify().graph().createUserAttribute("ua2", List.of(pc1)); + String u1 = pap.modify().graph().createUser("u1", List.of(ua1, ua2)); + String oa1 = pap.modify().graph().createObjectAttribute("oa1", List.of(pc1)); + String oa2 = pap.modify().graph().createObjectAttribute("oa2", List.of(pc2)); + String o1 = pap.modify().graph().createObject("o1", List.of(oa1, oa2)); + + pap.modify().graph().associate(ua1, oa1, new AccessRightSet("read")); + pap.modify().graph().associate(ua2, oa2, new AccessRightSet("write")); + + + + assertTrue(pap.query().access().computePrivileges(new UserContext(u1), o1).isEmpty()); + } + + @Test + void testGraph22() throws PMException { + pap.modify().operations().setResourceOperations(RWE); + String pc1 = pap.modify().graph().createPolicyClass("pc1"); + String pc2 = pap.modify().graph().createPolicyClass("pc2"); + String ua1 = pap.modify().graph().createUserAttribute("ua1", List.of(pc1)); + String u1 = pap.modify().graph().createUser("u1", List.of(ua1)); + String oa1 = pap.modify().graph().createObjectAttribute("oa1", List.of(pc1)); + String o1 = pap.modify().graph().createObject("o1", List.of(oa1)); + + pap.modify().graph().associate(ua1, oa1, new AccessRightSet("read", "write")); + + + + assertTrue( + pap.query().access().computePrivileges(new UserContext(u1), o1).containsAll(Arrays.asList("read", "write"))); + } + + @Test + void testGraph23WithProhibitions() throws PMException { + pap.modify().operations().setResourceOperations(RWE); + + String pc1 = pap.modify().graph().createPolicyClass("pc1"); + String ua1 = pap.modify().graph().createUserAttribute("ua1", List.of(pc1)); + String u1 = pap.modify().graph().createUser("u1", List.of(ua1)); + String oa3 = pap.modify().graph().createObjectAttribute("oa3", List.of(pc1)); + String oa4 = pap.modify().graph().createObjectAttribute("oa4", List.of(pc1)); + String oa2 = pap.modify().graph().createObjectAttribute("oa2", List.of(oa3)); + String oa1 = pap.modify().graph().createObjectAttribute("oa1", List.of(oa4)); + String o1 = pap.modify().graph().createObject("o1", List.of(oa1, oa2)); + + pap.modify().graph().associate(ua1, oa3, new AccessRightSet("read", "write", "execute")); + pap.modify().prohibitions().createProhibition("deny", ProhibitionSubject.userAttribute("ua1"), new AccessRightSet("read"), true, + List.of(new ContainerCondition(oa1, false), + new ContainerCondition(oa2, false)) + ); + + pap.modify().prohibitions().createProhibition("deny2", ProhibitionSubject.user(u1), new AccessRightSet("write"), + true, + Collections.singleton(new ContainerCondition(oa3, false)) + ); + + + Set list = pap.query().access().computePrivileges(new UserContext(u1), o1); + assertEquals(1, list.size()); + assertTrue(list.contains("execute")); + } + + @Test + void testGraph24WithProhibitions() throws PMException { pap.modify().operations().setResourceOperations(RWE); + + String pc1 = pap.modify().graph().createPolicyClass("pc1"); + String ua1 = pap.modify().graph().createUserAttribute("ua1", List.of(pc1)); + String u1 = pap.modify().graph().createUser("u1", List.of(ua1)); + String oa1 = pap.modify().graph().createObjectAttribute("oa1", List.of(pc1)); + String oa2 = pap.modify().graph().createObjectAttribute("oa2", List.of(pc1)); + String o1 = pap.modify().graph().createObject("o1", List.of(oa1, oa2)); + String o2 = pap.modify().graph().createObject("o2", List.of(oa2)); + + pap.modify().graph().associate(ua1, oa1, new AccessRightSet("read")); + + pap.modify().prohibitions().createProhibition("deny", ProhibitionSubject.userAttribute(ua1), + new AccessRightSet("read"), + true, + List.of( + new ContainerCondition(oa1, false), + new ContainerCondition(oa2, true) + ) + ); + + + assertTrue(pap.query().access().computePrivileges(new UserContext(u1), o1).contains("read")); + assertTrue(pap.query().access().computePrivileges(new UserContext(u1), o2).isEmpty()); + + pap.modify().graph().associate(ua1, oa2, new AccessRightSet("read")); + + pap.modify().prohibitions().createProhibition("deny-process", ProhibitionSubject.process("1234"), + new AccessRightSet("read"), + false, + Collections.singleton(new ContainerCondition(oa1, false)) + ); + + assertEquals( + new AccessRightSet(), + pap.query().access().computePrivileges(new UserContext(u1, "1234"), o1) + ); + } + + @Test + void testGraph25WithProhibitions() throws PMException { + pap.modify().operations().setResourceOperations(RWE); + + String pc1 = pap.modify().graph().createPolicyClass("pc1"); + String ua1 = pap.modify().graph().createUserAttribute("ua1", List.of(pc1)); + String u1 = pap.modify().graph().createUser("u1", List.of(ua1)); + String oa1 = pap.modify().graph().createObjectAttribute("oa1", List.of(pc1)); + String oa2 = pap.modify().graph().createObjectAttribute("oa2", List.of(oa1)); + String oa3 = pap.modify().graph().createObjectAttribute("oa3", List.of(oa1)); + String oa4 = pap.modify().graph().createObjectAttribute("oa4", List.of(oa3)); + String oa5 = pap.modify().graph().createObjectAttribute("oa5", List.of(oa2)); + String o1 = pap.modify().graph().createObject("o1", List.of(oa4)); + + pap.modify().graph().associate(ua1, oa1, new AccessRightSet("read", "write")); + + pap.modify().prohibitions().createProhibition("deny", ProhibitionSubject.user(u1), new AccessRightSet("read", "write"), + true, + List.of(new ContainerCondition(oa4, true), + new ContainerCondition(oa1, false)) + ); + + + assertTrue(pap.query().access().computePrivileges(new UserContext(u1), oa5).isEmpty()); + assertTrue( + pap.query().access().computePrivileges(new UserContext(u1), o1).containsAll(Arrays.asList("read", "write"))); + } + + @Test + void testGraph25WithProhibitions2() throws PMException { + pap.modify().operations().setResourceOperations(RWE); + + String pc1 = pap.modify().graph().createPolicyClass("pc1"); + String ua1 = pap.modify().graph().createUserAttribute("ua1", List.of(pc1)); + String u1 = pap.modify().graph().createUser("u1", List.of(ua1)); + String oa1 = pap.modify().graph().createObjectAttribute("oa1", List.of(pc1)); + String oa2 = pap.modify().graph().createObjectAttribute("oa2", List.of(pc1)); + String o1 = pap.modify().graph().createObject("o1", List.of(oa1, oa2)); + + pap.modify().graph().associate(ua1, oa1, new AccessRightSet("read", "write")); + + + pap.modify().prohibitions().createProhibition("deny", ProhibitionSubject.user(u1), new AccessRightSet("read", "write"), + true, + List.of(new ContainerCondition(oa1, false), + new ContainerCondition(oa2, false)) + ); + + + assertTrue(pap.query().access().computePrivileges(new UserContext(u1), o1).isEmpty()); + } + + @Test + void testDeciderWithUA() throws PMException { + pap.modify().operations().setResourceOperations(RWE); + + String pc1 = pap.modify().graph().createPolicyClass("pc1"); + String ua2 = pap.modify().graph().createUserAttribute("ua2", List.of(pc1)); + String ua1 = pap.modify().graph().createUserAttribute("ua1", List.of(ua2)); + String u1 = pap.modify().graph().createUser("u1", List.of(ua1)); + String oa1 = pap.modify().graph().createObjectAttribute("oa1", List.of(pc1)); + String oa2 = pap.modify().graph().createObjectAttribute("oa2", List.of(pc1)); + String o1 = pap.modify().graph().createObject("o1", List.of(oa1, oa2)); + String o2 = pap.modify().graph().createObject("o2", List.of(oa2)); + + pap.modify().graph().associate(ua1, oa1, new AccessRightSet("read")); + pap.modify().graph().associate(ua2, oa1, new AccessRightSet("write")); + + + assertTrue(pap.query().access().computePrivileges(new UserContext(ua1), oa1) + .containsAll(Arrays.asList("read", "write"))); + } + + @Test + void testProhibitionsAllCombinations() throws PMException { + pap.modify().operations().setResourceOperations(RWE); + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + pap.modify().graph().createObjectAttribute("oa2", List.of("pc1")); + pap.modify().graph().createObjectAttribute("oa3", List.of("pc1")); + pap.modify().graph().createObjectAttribute("oa4", List.of("pc1")); + pap.modify().graph().createObject("o1", List.of("oa1", "oa2", "oa3")); + pap.modify().graph().createObject("o2", List.of("oa1", "oa4")); + + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.modify().graph().createUser("u1", List.of("ua1")); + pap.modify().graph().createUser("u2", List.of("ua1")); + pap.modify().graph().createUser("u3", List.of("ua1")); + pap.modify().graph().createUser("u4", List.of("ua1")); + + pap.modify().graph().associate("ua1", "oa1", new AccessRightSet("read", "write")); + + + pap.modify().prohibitions().createProhibition( + "p1", + ProhibitionSubject.user("u1"), + new AccessRightSet("write"), + true, + List.of( + new ContainerCondition("oa1", false), + new ContainerCondition("oa2", false), + new ContainerCondition("oa3", false) + ) + ); + + pap.modify().prohibitions().createProhibition( + "p2", + ProhibitionSubject.user("u2"), + new AccessRightSet("write"), + false, + List.of( + new ContainerCondition("oa1", false), + new ContainerCondition("oa2", false), + new ContainerCondition("oa3", false) + ) + ); + + pap.modify().prohibitions().createProhibition( + "p3", + ProhibitionSubject.user("u3"), + new AccessRightSet("write"), + true, + List.of( + new ContainerCondition("oa1", false), + new ContainerCondition("oa2", true) + ) + ); + + pap.modify().prohibitions().createProhibition( + "p4", + ProhibitionSubject.user("u4"), + new AccessRightSet("write"), + false, + List.of( + new ContainerCondition("oa1", false), + new ContainerCondition("oa2", true) + ) + ); + + pap.modify().prohibitions().createProhibition( + "p5", + ProhibitionSubject.user("u4"), + new AccessRightSet("write"), + false, + Collections.singleton(new ContainerCondition("oa2", true)) + ); + + + Set list = pap.query().access().computePrivileges(new UserContext("u1"), "o1"); + assertTrue(list.contains("read") && !list.contains("write")); + + list = pap.query().access().computePrivileges(new UserContext("u1"), "o2"); + assertTrue(list.contains("read") && list.contains("write")); + + list = pap.query().access().computePrivileges(new UserContext("u2"), "o2"); + assertTrue(list.contains("read") && !list.contains("write")); + + list = pap.query().access().computePrivileges(new UserContext("u3"), "o2"); + assertTrue(list.contains("read") && !list.contains("write")); + + list = pap.query().access().computePrivileges(new UserContext("u4"), "o1"); + assertTrue(list.contains("read") && !list.contains("write")); + + list = pap.query().access().computePrivileges(new UserContext("u4"), "o2"); + assertTrue(list.contains("read") && !list.contains("write")); + } + + @Test + void testPermissions() throws PMException { pap.modify().operations().setResourceOperations(RWE); + + String pc1 = pap.modify().graph().createPolicyClass("pc1"); + String ua1 = pap.modify().graph().createUserAttribute("ua1", List.of(pc1)); + String u1 = pap.modify().graph().createUser("u1", List.of(ua1)); + String oa1 = pap.modify().graph().createObjectAttribute("oa1", List.of(pc1)); + String o1 = pap.modify().graph().createObject("o1", List.of(oa1)); + + pap.modify().graph().associate(ua1, oa1, allAccessRights()); + + + Set list = pap.query().access().computePrivileges(new UserContext("u1"), "o1"); + assertTrue(list.containsAll(allAdminAccessRights())); + assertTrue(list.containsAll(RWE)); + + pap.modify().graph().associate(ua1, oa1, allAdminAccessRights()); + list = pap.query().access().computePrivileges(new UserContext("u1"), "o1"); + assertTrue(list.containsAll(allAdminAccessRights())); + assertFalse(list.containsAll(RWE)); + + pap.modify().graph().associate(ua1, oa1, new AccessRightSet(ALL_RESOURCE_ACCESS_RIGHTS)); + list = pap.query().access().computePrivileges(new UserContext("u1"), "o1"); + assertFalse(list.containsAll(allAdminAccessRights())); + assertTrue(list.containsAll(RWE)); + } + + @Test + void testPermissionsInOnlyOnePC() throws PMException { + pap.modify().operations().setResourceOperations(RWE); + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createPolicyClass("pc2"); + pap.modify().graph().createUserAttribute("ua3", List.of("pc1")); + pap.modify().graph().createUserAttribute("ua2", List.of("ua3")); + pap.modify().graph().createUserAttribute("u1", List.of("ua2")); + + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + pap.modify().graph().createObjectAttribute("oa3", List.of("pc2")); + pap.modify().graph().assign("oa3", List.of("oa1")); + pap.modify().graph().createObject("o1", List.of("oa3")); + + pap.modify().graph().associate("ua3", "oa1", new AccessRightSet("read")); + + + assertTrue(pap.query().access().computePrivileges(new UserContext("u1"), "o1").isEmpty()); + } + + @Test + void testProhibitionsWithContainerAsTarget() throws PMException { + pap.modify().operations().setResourceOperations(new AccessRightSet("read")); + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + pap.modify().graph().createUser("u1", List.of("ua1")); + pap.modify().graph().associate("ua1", "oa1", new AccessRightSet("read")); + + pap.modify().prohibitions().createProhibition("deny1", ProhibitionSubject.user("u1"), new AccessRightSet("read"), false, + Collections.singleton(new ContainerCondition("oa1", false)) + ); + + + AccessRightSet deniedAccessRights = pap.query().access().computeDeniedPrivileges(new UserContext("u1"), "oa1"); + assertTrue(deniedAccessRights.contains("read")); + } + + @Test + void testProhibitionWithContainerAsTargetComplement() throws PMException { + pap.modify().operations().setResourceOperations(new AccessRightSet("read")); + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + pap.modify().graph().createUser("u1", List.of("ua1")); + pap.modify().graph().associate("ua1", "oa1", new AccessRightSet("read")); + + pap.modify().prohibitions().createProhibition("deny1", ProhibitionSubject.user("u1"), new AccessRightSet("read"), false, + Collections.singleton(new ContainerCondition("oa1", true)) + ); + + + AccessRightSet deniedAccessRights = pap.query().access().computeDeniedPrivileges(new UserContext("u1"), "oa1"); + assertFalse(deniedAccessRights.contains("read")); + } + } + +} diff --git a/src/test/java/gov/nist/csd/pm/pap/query/GraphQuerierTest.java b/src/test/java/gov/nist/csd/pm/pap/query/GraphQuerierTest.java new file mode 100644 index 000000000..9f05a9e1c --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/query/GraphQuerierTest.java @@ -0,0 +1,407 @@ +package gov.nist.csd.pm.pap.query; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.node.Node; +import gov.nist.csd.pm.pap.graph.node.Properties; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.graph.relationship.Association; +import gov.nist.csd.pm.pap.PAPTestInitializer; +import gov.nist.csd.pm.pap.exception.NodeDoesNotExistException; +import gov.nist.csd.pm.pap.serialization.pml.PMLDeserializer; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +import java.util.*; + +import static gov.nist.csd.pm.pap.graph.node.NodeType.*; +import static gov.nist.csd.pm.pap.graph.node.Properties.NO_PROPERTIES; +import static gov.nist.csd.pm.pap.graph.node.Properties.toProperties; +import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; + +public abstract class GraphQuerierTest extends PAPTestInitializer { + + @Nested + class NodeExists { + @Test + void testSuccess() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + assertTrue(pap.query().graph().nodeExists("pc1")); + assertTrue(pap.query().graph().nodeExists("ua1")); + assertFalse(pap.query().graph().nodeExists("pc2")); + } + } + + @Nested + class GetNodeTest { + + @Test + void testNodeDoesNotExistException() { + assertThrows(NodeDoesNotExistException.class, () -> pap.query().graph().getNode("pc1")); + } + + @Test + void testSuccessPolicyClass() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().setNodeProperties("pc1", toProperties("k", "v")); + + Node pc1 = pap.query().graph().getNode("pc1"); + + assertEquals("pc1", pc1.getName()); + assertEquals(PC, pc1.getType()); + assertEquals("v", pc1.getProperties().get("k")); + } + + @Test + void testSuccessObjectAttribute() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + pap.modify().graph().setNodeProperties("oa1", Properties.toProperties("k", "v")); + + Node oa1 = pap.query().graph().getNode("oa1"); + + assertEquals("oa1", oa1.getName()); + assertEquals(OA, oa1.getType()); + assertEquals("v", oa1.getProperties().get("k")); + } + } + + @Nested + class Search { + @Test + void testSearch() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + pap.modify().graph().setNodeProperties("oa1", toProperties("namespace", "test")); + pap.modify().graph().createObjectAttribute("oa2", List.of("pc1")); + pap.modify().graph().setNodeProperties("oa2", toProperties("key1", "value1")); + pap.modify().graph().createObjectAttribute("oa3", List.of("pc1")); + pap.modify().graph().setNodeProperties("oa3", toProperties("key1", "value1", "key2", "value2")); + + Collection nodes = pap.query().graph().search(OA, NO_PROPERTIES); + assertEquals(4, nodes.size()); + + nodes = pap.query().graph().search(ANY, toProperties("key1", "value1")); + assertEquals(2, nodes.size()); + + nodes = pap.query().graph().search(ANY, toProperties("namespace", "test")); + assertEquals(1, nodes.size()); + + nodes = pap.query().graph().search(OA, toProperties("namespace", "test")); + assertEquals(1, nodes.size()); + nodes = pap.query().graph().search(OA, toProperties("key1", "value1")); + assertEquals(2, nodes.size()); + nodes = pap.query().graph().search(OA, toProperties("key1", "*")); + assertEquals(2, nodes.size()); + nodes = pap.query().graph().search(OA, toProperties("key1", "value1", "key2", "value2")); + assertEquals(1, nodes.size()); + nodes = pap.query().graph().search(OA, toProperties("key1", "value1", "key2", "*")); + assertEquals(1, nodes.size()); + nodes = pap.query().graph().search(OA, toProperties("key1", "value1", "key2", "no_value")); + assertEquals(0, nodes.size()); + nodes = pap.query().graph().search(ANY, NO_PROPERTIES); + assertEquals(6, nodes.size()); + } + } + + + @Nested + class GetPolicyClasses { + @Test + void testSuccess() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createPolicyClass("pc2"); + pap.modify().graph().createPolicyClass("pc3"); + + assertTrue(pap.query().graph().getPolicyClasses().containsAll(Arrays.asList("pc1", "pc2", "pc3"))); + } + } + + @Nested + class GetAdjacentAscendantsTest { + + @Test + void NodeDoesNotExist() { + assertThrows(NodeDoesNotExistException.class, + () -> pap.query().graph().getAdjacentAscendants("oa1")); + } + + @Test + void Success() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + pap.modify().graph().createObjectAttribute("oa2", List.of("pc1")); + pap.modify().graph().createObjectAttribute("oa3", List.of("pc1")); + + + assertTrue(pap.query().graph().getAdjacentAscendants("pc1").containsAll(List.of("oa1", "oa2", "oa3"))); + } + } + + @Nested + class GetAdjacentDescendantsTest { + + @Test + void NodeDoesNotExist() { + assertThrows(NodeDoesNotExistException.class, + () -> pap.query().graph().getAdjacentDescendants("oa1")); + } + + @Test + void Success() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + pap.modify().graph().createObjectAttribute("oa2", List.of("pc1")); + pap.modify().graph().createObjectAttribute("oa3", List.of("pc1")); + pap.modify().graph().createObject("o1", List.of("oa1")); + pap.modify().graph().assign("o1", List.of("oa2")); + pap.modify().graph().assign("o1", List.of("oa3")); + + assertTrue(pap.query().graph().getAdjacentDescendants("o1").containsAll(List.of("oa1", "oa2", "oa3"))); + } + } + + @Nested + class GetAssociationsWithSourceTest { + + @Test + void testNodeDoesNotExistException() { + assertThrows(NodeDoesNotExistException.class, + () -> pap.query().graph().getAssociationsWithSource("ua1")); + } + + @Test + void testSuccess() throws PMException { + pap.modify().operations().setResourceOperations(new AccessRightSet("read", "write")); + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + pap.modify().graph().createObjectAttribute("oa2", List.of("pc1")); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.modify().graph().associate("ua1", "oa1", new AccessRightSet("read")); + pap.modify().graph().associate("ua1", "oa2", new AccessRightSet("read", "write")); + + Collection assocs = pap.query().graph().getAssociationsWithSource("ua1"); + + assertEquals(2, assocs.size()); + + for (Association assoc : assocs) { + checkAssociation(assoc); + } + } + + private void checkAssociation(Association association) { + if (association.getTarget().equals("oa1")) { + assertEquals(new AccessRightSet("read"), association.getAccessRightSet()); + } else if (association.getTarget().equals("oa2")) { + assertEquals(new AccessRightSet("read", "write"), association.getAccessRightSet()); + } + } + } + + @Nested + class GetAssociationsWithTargetTest { + + @Test + void testNodeDoesNotExistException() { + assertThrows(NodeDoesNotExistException.class, + () -> pap.query().graph().getAssociationsWithTarget("oa1")); + } + + @Test + void Success() throws PMException { + pap.modify().operations().setResourceOperations(new AccessRightSet("read", "write")); + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.modify().graph().createUserAttribute("ua2", List.of("pc1")); + pap.modify().graph().associate("ua1", "oa1", new AccessRightSet("read")); + pap.modify().graph().associate("ua2", "oa1", new AccessRightSet("read", "write")); + + Collection assocs = pap.query().graph().getAssociationsWithTarget("oa1"); + + assertEquals(2, assocs.size()); + + for (Association assoc : assocs) { + checkAssociation(assoc); + } + } + + private void checkAssociation(Association association) { + if (association.getSource().equals("ua1")) { + assertEquals(new AccessRightSet("read"), association.getAccessRightSet()); + } else if (association.getSource().equals("ua2")) { + assertEquals(new AccessRightSet("read", "write"), association.getAccessRightSet()); + } + } + } + + @Test + void testGetAttributeDescendants() throws PMException { + String pml = + """ + set resource operations ["read", "write"] + create pc "pc1" + create oa "oa1" in ["pc1"] + create oa "oa2" in ["oa1"] + create oa "oa3" in ["oa2"] + create oa "oa4" in ["pc1"] + + create pc "pc2" + create oa "oa5" in ["pc2"] + create oa "oa6" in ["oa5"] + + create pc "pc3" + + create o "o1" in ["oa3", "oa6"] + """; + pap.deserialize(new UserContext("u1"), pml, new PMLDeserializer()); + + Collection conts = pap.query().graph().getAttributeDescendants("o1"); + List expected = List.of("oa3", "oa2", "oa1", "oa6", "oa5"); + assertTrue(conts.containsAll(expected)); + assertTrue(expected.containsAll(conts)); + } + + @Test + void testGetPolicyClassDescendants() throws PMException { + String pml = """ + set resource operations ["read", "write"] + create pc "pc1" + create oa "oa1" in ["pc1"] + create oa "oa2" in ["oa1"] + create oa "oa3" in ["oa2"] + create oa "oa4" in ["pc1"] + + create pc "pc2" + create oa "oa5" in ["pc2"] + create oa "oa6" in ["oa5"] + + create pc "pc3" + + create o "o1" in ["oa3", "oa6"] + """; + pap.deserialize(new UserContext("u1"), pml, new PMLDeserializer()); + + Collection pcs = pap.query().graph().getPolicyClassDescendants("o1"); + List expected = List.of("pc1", "pc2"); + assertTrue(pcs.containsAll(expected)); + assertTrue(expected.containsAll(pcs)); + } + + @Test + void testIsAscendant() throws PMException { + String pml = """ + set resource operations ["read", "write"] + create pc "pc1" + create oa "oa1" in ["pc1"] + create oa "oa2" in ["oa1"] + create oa "oa3" in ["oa2"] + create oa "oa4" in ["pc1"] + + create pc "pc2" + create oa "oa5" in ["pc2"] + create oa "oa6" in ["oa5"] + + create pc "pc3" + + create o "o1" in ["oa3", "oa6"] + """; + pap.deserialize(new UserContext("u1"), pml, new PMLDeserializer()); + + assertTrue(pap.query().graph().isAscendant("o1", "oa1")); + assertTrue(pap.query().graph().isAscendant("o1", "oa2")); + assertTrue(pap.query().graph().isAscendant("o1", "oa3")); + assertTrue(pap.query().graph().isAscendant("o1", "pc1")); + assertTrue(pap.query().graph().isAscendant("o1", "pc2")); + assertFalse(pap.query().graph().isAscendant("o1", "pc3")); + } + + @Test + void testIsDescendant() throws PMException { + String pml = """ + set resource operations ["read", "write"] + create pc "pc1" + create oa "oa1" in ["pc1"] + create oa "oa2" in ["oa1"] + create oa "oa3" in ["oa2"] + create oa "oa4" in ["pc1"] + + create pc "pc2" + create oa "oa5" in ["pc2"] + create oa "oa6" in ["oa5"] + + create pc "pc3" + + create o "o1" in ["oa3", "oa6"] + """; + pap.deserialize(new UserContext("u1"), pml, new PMLDeserializer()); + + assertTrue(pap.query().graph().isDescendant("o1", "oa1")); + assertTrue(pap.query().graph().isDescendant("o1", "oa2")); + assertTrue(pap.query().graph().isDescendant("o1", "oa3")); + assertTrue(pap.query().graph().isDescendant("o1", "pc1")); + assertTrue(pap.query().graph().isDescendant("o1", "pc2")); + assertFalse(pap.query().graph().isDescendant("o1", "pc3")); + } + + @Test + void testGetAscendants() throws PMException { + String pml = + """ + set resource operations ["read", "write"] + create pc "pc1" + create oa "oa1" in ["pc1"] + create oa "oa2" in ["oa1"] + create oa "oa3" in ["oa2"] + create oa "oa4" in ["pc1"] + + create pc "pc2" + create oa "oa5" in ["pc2"] + create oa "oa6" in ["oa5"] + + create pc "pc3" + + create o "o1" in ["oa3", "oa6"] + """; + pap.deserialize(new UserContext("u1"), pml, new PMLDeserializer()); + + Collection conts = pap.query().graph().getAscendants("pc1"); + List expected = List.of("oa1", "oa2", "oa3", "oa4", "o1"); + assertEquals(new HashSet<>(expected), new HashSet<>(conts)); + + conts = pap.query().graph().getAscendants("oa1"); + expected = List.of("oa3", "oa2", "o1"); + assertEquals(new HashSet<>(expected), new HashSet<>(conts)); + } + + @Test + void testGetDescendants() throws PMException { + String pml = + """ + set resource operations ["read", "write"] + create pc "pc1" + create oa "oa1" in ["pc1"] + create oa "oa2" in ["oa1"] + create oa "oa3" in ["oa2"] + create oa "oa4" in ["pc1"] + + create pc "pc2" + create oa "oa5" in ["pc2"] + create oa "oa6" in ["oa5"] + + create pc "pc3" + + create o "o1" in ["oa3", "oa6"] + """; + pap.deserialize(new UserContext("u1"), pml, new PMLDeserializer()); + + Collection conts = pap.query().graph().getDescendants("o1"); + List expected = List.of("oa3", "oa2", "oa5", "oa6", "pc2", "oa1", "pc1"); + assertEquals(new HashSet<>(expected), new HashSet<>(conts)); + + conts = pap.query().graph().getDescendants("pc1"); + expected = List.of(); + assertEquals(new HashSet<>(expected), new HashSet<>(conts)); + } +} diff --git a/src/test/java/gov/nist/csd/pm/pap/query/ObligationsQuerierTest.java b/src/test/java/gov/nist/csd/pm/pap/query/ObligationsQuerierTest.java new file mode 100644 index 000000000..9be5b1d84 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/query/ObligationsQuerierTest.java @@ -0,0 +1,66 @@ +package gov.nist.csd.pm.pap.query; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.obligation.Obligation; +import gov.nist.csd.pm.pap.PAPTestInitializer; +import gov.nist.csd.pm.pap.exception.ObligationDoesNotExistException; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +import java.util.Collection; +import java.util.List; + +import static gov.nist.csd.pm.pap.modification.ObligationsModifierTest.obligation1; +import static gov.nist.csd.pm.pap.modification.ObligationsModifierTest.obligation2; +import static org.junit.jupiter.api.Assertions.*; + +public abstract class ObligationsQuerierTest extends PAPTestInitializer { + + @Nested + class GetAll { + @Test + void testGetObligations() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.modify().graph().createUser("u1", List.of("ua1")); + + pap.modify().obligations().createObligation(obligation1.getAuthor(), obligation1.getName(), obligation1.getRules()); + pap.modify().obligations().createObligation(obligation2.getAuthor(), obligation2.getName(), obligation2.getRules()); + + Collection obligations = pap.query().obligations().getObligations(); + assertEquals(2, obligations.size()); + for (Obligation obligation : obligations) { + if (obligation.getName().equals(obligation1.getName())) { + assertEquals(obligation1, obligation); + } else { + assertEquals(obligation2, obligation); + } + } + } + } + + @Nested + class Get { + + @Test + void testObligationDoesNotExistException() { + assertThrows( + ObligationDoesNotExistException.class, + () -> pap.query().obligations().getObligation(obligation1.getName())); + } + + @Test + void testGetObligation() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.modify().graph().createUser("u1", List.of("ua1")); + + pap.modify().obligations().createObligation(obligation1.getAuthor(), obligation1.getName(), obligation1.getRules()); + pap.modify().obligations().createObligation(obligation2.getAuthor(), obligation2.getName(), obligation2.getRules()); + + Obligation obligation = pap.query().obligations().getObligation(obligation1.getName()); + assertEquals(obligation1, obligation); + } + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/query/OperationsQuerierTest.java b/src/test/java/gov/nist/csd/pm/pap/query/OperationsQuerierTest.java new file mode 100644 index 000000000..1ec54b11a --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/query/OperationsQuerierTest.java @@ -0,0 +1,95 @@ +package gov.nist.csd.pm.pap.query; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.PAPTestInitializer; +import gov.nist.csd.pm.pap.exception.OperationDoesNotExistException; +import gov.nist.csd.pm.pap.op.Operation; +import gov.nist.csd.pm.util.SamplePolicy; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +import java.io.IOException; +import java.util.*; + +import static org.junit.jupiter.api.Assertions.*; + +public abstract class OperationsQuerierTest extends PAPTestInitializer { + + @Nested + class GetResourceAccessRights { + @Test + void testGetResourceAccessRights() throws PMException { + AccessRightSet arset = new AccessRightSet("read", "write"); + pap.modify().operations().setResourceOperations(arset); + assertEquals(arset, pap.query().operations().getResourceOperations()); + } + } + + @Test + void testGetAdminOperationNames() throws PMException, IOException { + SamplePolicy.loadSamplePolicyFromPML(pap); + + pap.modify().operations().createAdminOperation(new Operation("op1", List.of()) { + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { + + } + + @Override + public Object execute(PAP pap, Map operands) throws PMException { + return null; + } + }); + + pap.modify().operations().createAdminOperation(new Operation("op2", List.of()) { + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { + + } + + @Override + public Object execute(PAP pap, Map operands) throws PMException { + return null; + } + }); + + Collection adminOperationNames = pap.query().operations().getAdminOperationNames(); + assertTrue(adminOperationNames.containsAll(Set.of("op1", "op2"))); + } + + @Nested + class GetAdminOperation { + + @Test + void testSuccess() throws PMException, IOException { + SamplePolicy.loadSamplePolicyFromPML(pap); + + Operation operation = new Operation("op1", List.of()) { + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { + + } + + @Override + public Object execute(PAP pap, Map operands) throws PMException { + return null; + } + }; + + pap.modify().operations().createAdminOperation(operation); + + Operation actual = pap.query().operations().getAdminOperation(operation.getName()); + assertEquals(operation, actual); + } + + @Test + void testOperationDoesNotExist() throws PMException, IOException { + SamplePolicy.loadSamplePolicyFromPML(pap); + + assertThrows(OperationDoesNotExistException.class, () -> pap.query().operations().getAdminOperation("op1")); + } + + } +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/query/ProhibitionsQuerierTest.java b/src/test/java/gov/nist/csd/pm/pap/query/ProhibitionsQuerierTest.java new file mode 100644 index 000000000..d61d7a931 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/query/ProhibitionsQuerierTest.java @@ -0,0 +1,192 @@ +package gov.nist.csd.pm.pap.query; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.prohibition.ContainerCondition; +import gov.nist.csd.pm.pap.prohibition.Prohibition; +import gov.nist.csd.pm.pap.prohibition.ProhibitionSubject; +import gov.nist.csd.pm.pap.PAPTestInitializer; +import gov.nist.csd.pm.pap.exception.ProhibitionDoesNotExistException; +import gov.nist.csd.pm.util.SamplePolicy; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +import java.io.IOException; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.*; + +public abstract class ProhibitionsQuerierTest extends PAPTestInitializer { + + + @Nested + class GetAll { + + @Test + void testSuccess() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("subject", List.of("pc1")); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + pap.modify().graph().createObjectAttribute("oa2", List.of("pc1")); + pap.modify().graph().createObjectAttribute("oa3", List.of("pc1")); + pap.modify().graph().createObjectAttribute("oa4", List.of("pc1")); + + pap.modify().operations().setResourceOperations(new AccessRightSet("read", "write")); + + pap.modify().prohibitions().createProhibition("label1", ProhibitionSubject.userAttribute("subject"), new AccessRightSet("read"), true, + List.of( + new ContainerCondition("oa1", true), + new ContainerCondition("oa2", false))); + pap.modify().prohibitions().createProhibition("label2", ProhibitionSubject.userAttribute("subject"), new AccessRightSet("read"), true, + List.of( + new ContainerCondition("oa3", true), + new ContainerCondition("oa4", false))); + + Map> prohibitions = pap.query().prohibitions().getProhibitions(); + assertEquals(1, prohibitions.size()); + assertEquals(2, prohibitions.get("subject").size()); + checkProhibitions(prohibitions.get("subject")); + } + + private void checkProhibitions(Collection prohibitions) { + for (Prohibition p : prohibitions) { + if (p.getName().equals("label1")) { + assertEquals("label1", p.getName()); + assertEquals("subject", p.getSubject().getName()); + assertEquals(new AccessRightSet("read"), p.getAccessRightSet()); + assertTrue(p.isIntersection()); + assertEquals(2, p.getContainers().size()); + List expected = List.of( + new ContainerCondition("oa1", true), + new ContainerCondition("oa2", false) + ); + assertTrue(expected.containsAll(p.getContainers()) && p.getContainers().containsAll(expected)); + } else if (p.getName().equals("label2")) { + assertEquals("label2", p.getName()); + assertEquals("subject", p.getSubject().getName()); + assertEquals(new AccessRightSet("read"), p.getAccessRightSet()); + assertTrue(p.isIntersection()); + assertEquals(2, p.getContainers().size()); + List expected = List.of( + new ContainerCondition("oa3", true), + new ContainerCondition("oa4", false) + ); + assertTrue(expected.containsAll(p.getContainers()) && p.getContainers().containsAll(expected)); + } else { + fail("unexpected prohibition label " + p.getName()); + } + } + } + } + + @Nested + class GetProhibitionsWithSubject { + + @Test + void testSuccess() throws PMException { + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("subject1", List.of("pc1")); + pap.modify().graph().createUserAttribute("subject2", List.of("pc1")); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + pap.modify().graph().createObjectAttribute("oa2", List.of("pc1")); + pap.modify().graph().createObjectAttribute("oa3", List.of("pc1")); + pap.modify().graph().createObjectAttribute("oa4", List.of("pc1")); + pap.modify().operations().setResourceOperations(new AccessRightSet("read", "write")); + + pap.modify().prohibitions().createProhibition("label1", ProhibitionSubject.userAttribute("subject1"), new AccessRightSet("read"), true, + List.of(new ContainerCondition("oa1", true), + new ContainerCondition("oa2", false))); + pap.modify().prohibitions().createProhibition("label2", ProhibitionSubject.userAttribute("subject2"), new AccessRightSet("read"), true, + List.of(new ContainerCondition("oa3", true), + new ContainerCondition("oa4", false))); + + Collection pros = pap.query().prohibitions().getProhibitionsWithSubject("subject1"); + assertEquals(1, pros.size()); + + Prohibition p = pros.iterator().next(); + + assertEquals("label1", p.getName()); + assertEquals("subject1", p.getSubject().getName()); + assertEquals(new AccessRightSet("read"), p.getAccessRightSet()); + assertTrue(p.isIntersection()); + assertEquals(2, p.getContainers().size()); + List expected = List.of( + new ContainerCondition("oa1", true), + new ContainerCondition("oa2", false) + ); + assertTrue(expected.containsAll(p.getContainers()) && p.getContainers().containsAll(expected)); + } + } + + @Nested + class GetProhibition { + + @Test + void testSuccess() throws PMException { + assertThrows(ProhibitionDoesNotExistException.class, + () -> pap.query().prohibitions().getProhibition("pro1")); + + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("subject", List.of("pc1")); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + pap.modify().graph().createObjectAttribute("oa2", List.of("pc1")); + pap.modify().graph().createObjectAttribute("oa3", List.of("pc1")); + pap.modify().graph().createObjectAttribute("oa4", List.of("pc1")); + pap.modify().operations().setResourceOperations(new AccessRightSet("read", "write")); + + pap.modify().prohibitions().createProhibition("label1", ProhibitionSubject.userAttribute("subject"), new AccessRightSet("read"), true, + List.of(new ContainerCondition("oa1", true), + new ContainerCondition("oa2", false))); + pap.modify().prohibitions().createProhibition("label2", ProhibitionSubject.userAttribute("subject"), new AccessRightSet("read"), true, + List.of(new ContainerCondition("oa3", true), + new ContainerCondition("oa4", false))); + + Prohibition p = pap.query().prohibitions().getProhibition("label1"); + assertEquals("label1", p.getName()); + assertEquals("subject", p.getSubject().getName()); + assertEquals(new AccessRightSet("read"), p.getAccessRightSet()); + assertTrue(p.isIntersection()); + assertEquals(2, p.getContainers().size()); + List expected = List.of( + new ContainerCondition("oa1", true), + new ContainerCondition("oa2", false) + ); + assertTrue(expected.containsAll(p.getContainers()) && p.getContainers().containsAll(expected)); + } + } + + @Test + void testGetInheritedProhibitionsFor() throws PMException, IOException { + SamplePolicy.loadSamplePolicyFromPML(pap); + + pap.modify().graph().createUserAttribute("ua2", List.of("ua1")); + pap.modify().graph().createUserAttribute("ua3", List.of("ua2")); + pap.modify().graph().assign("u1", Collections.singleton("ua3")); + + pap.modify().prohibitions().createProhibition("label1", ProhibitionSubject.userAttribute("ua2"), new AccessRightSet("read"), true, + List.of(new ContainerCondition("US project", true))); + pap.modify().prohibitions().createProhibition("label2", ProhibitionSubject.userAttribute("ua3"), new AccessRightSet("read"), true, + List.of(new ContainerCondition("US project", true))); + + Collection prohibitions = pap.query().prohibitions().getInheritedProhibitionsFor("u1"); + assertEquals(2, prohibitions.size()); + } + + @Test + void testGetProhibitionsForContainer() throws PMException, IOException { + SamplePolicy.loadSamplePolicyFromPML(pap); + + pap.modify().prohibitions().createProhibition("label1", ProhibitionSubject.userAttribute("ua1"), new AccessRightSet("read"), true, + List.of(new ContainerCondition("US project", true))); + pap.modify().prohibitions().createProhibition("label2", ProhibitionSubject.userAttribute("ua1"), new AccessRightSet("read"), true, + List.of(new ContainerCondition("US project", true))); + + + Collection prohibitions = pap.query().prohibitions().getProhibitionsWithContainer("US project"); + assertEquals(2, prohibitions.size()); + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/query/RoutinesQuerierTest.java b/src/test/java/gov/nist/csd/pm/pap/query/RoutinesQuerierTest.java new file mode 100644 index 000000000..69324188b --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/query/RoutinesQuerierTest.java @@ -0,0 +1,70 @@ +package gov.nist.csd.pm.pap.query; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.PAPTestInitializer; +import gov.nist.csd.pm.pap.exception.RoutineDoesNotExistException; +import gov.nist.csd.pm.pap.routine.Routine; +import gov.nist.csd.pm.util.SamplePolicy; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +import java.io.IOException; +import java.util.*; + +import static org.junit.jupiter.api.Assertions.*; + +public abstract class RoutinesQuerierTest extends PAPTestInitializer { + + @Test + void testGetAdminRoutineNames() throws PMException, IOException { + SamplePolicy.loadSamplePolicyFromPML(pap); + + pap.modify().routines().createAdminRoutine(new Routine("r1", List.of()) { + @Override + public Object execute(PAP pap, Map operands) throws PMException { + return null; + } + }); + + pap.modify().routines().createAdminRoutine(new Routine("r2", List.of()) { + @Override + public Object execute(PAP pap, Map operands) throws PMException { + return null; + } + }); + + Collection adminRoutineNames = pap.query().routines().getAdminRoutineNames(); + assertEquals(new HashSet<>(adminRoutineNames), Set.of("r1", "r2", "deleteAllProjects")); + } + + @Nested + class GetAdminRoutine { + + @Test + void testSuccess() throws PMException, IOException { + SamplePolicy.loadSamplePolicyFromPML(pap); + + Routine routine = new Routine<>("r1", List.of()) { + @Override + public Object execute(PAP pap, Map operands) throws PMException { + return null; + } + }; + + pap.modify().routines().createAdminRoutine(routine); + + Routine actual = pap.query().routines().getAdminRoutine(routine.getName()); + assertEquals(routine, actual); + } + + @Test + void testRoutineDoesNotExist() throws PMException, IOException { + SamplePolicy.loadSamplePolicyFromPML(pap); + + assertThrows(RoutineDoesNotExistException.class, () -> pap.query().routines().getAdminRoutine("r1")); + } + + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/serialization/PMLTest.java b/src/test/java/gov/nist/csd/pm/pap/serialization/PMLTest.java new file mode 100644 index 000000000..6acfeb21a --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/serialization/PMLTest.java @@ -0,0 +1,74 @@ +package gov.nist.csd.pm.pap.serialization; + +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.op.Operation; +import gov.nist.csd.pm.pap.pml.executable.operation.PMLOperationWrapper; +import gov.nist.csd.pm.pap.serialization.pml.PMLDeserializer; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.serialization.pml.PMLSerializer; +import gov.nist.csd.pm.util.PolicyEquals; +import gov.nist.csd.pm.util.SamplePolicy; +import org.junit.jupiter.api.Test; + +import java.io.IOException; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class PMLTest { + + @Test + void testDeserialization() throws IOException, PMException { + String pml = SamplePolicy.loadSamplePolicyPML(); + + PMLDeserializer pmlDeserializer = new PMLDeserializer(); + + MemoryPAP pap = new MemoryPAP(); + pap.modify().graph().createPolicyClass("test_pc"); + pap.modify().graph().createUserAttribute("ua1", Collections.singleton("test_pc")); + pap.modify().graph().createUser("u1", Collections.singleton("ua1")); + + pap.deserialize(new UserContext("u1"), pml, pmlDeserializer); + + String serialize = pap.serialize(new PMLSerializer()); + MemoryPAP pap2 = new MemoryPAP(); + pap2.deserialize(new UserContext("u1"), serialize, pmlDeserializer); + + PolicyEquals.assertPolicyEquals(pap.query(), pap2.query()); + } + + @Test + void testDeserializationWithCustomFunctions() throws PMException { + String pml = """ + testFunc("hello world") + """; + + PMLDeserializer pmlDeserializer = new PMLDeserializer(); + + MemoryPAP pap = new MemoryPAP(); + assertThrows(PMException.class, () -> pap.deserialize(new UserContext("u1"), pml, pmlDeserializer)); + + pap.setPMLOperations(new PMLOperationWrapper(new Operation<>("testFunc", List.of("name")) { + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { + + } + + @Override + public Object execute(PAP pap, Map operands) throws PMException { + pap.modify().graph().createPolicyClass((String) operands.get("name")); + return null; + } + })); + + PMLDeserializer pmlDeserializer2 = new PMLDeserializer(); + pap.deserialize(new UserContext("u1"), pml, pmlDeserializer2); + assertTrue(pap.query().graph().nodeExists("hello world")); + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pap/serialization/SerializationTest.java b/src/test/java/gov/nist/csd/pm/pap/serialization/SerializationTest.java new file mode 100644 index 000000000..1c37e13dd --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pap/serialization/SerializationTest.java @@ -0,0 +1,105 @@ +package gov.nist.csd.pm.pap.serialization; + +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.serialization.json.JSONDeserializer; +import gov.nist.csd.pm.pap.serialization.json.JSONSerializer; +import gov.nist.csd.pm.pap.serialization.pml.PMLDeserializer; +import gov.nist.csd.pm.pap.serialization.pml.PMLSerializer; +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.util.PolicyEquals; +import gov.nist.csd.pm.util.SamplePolicy; +import org.junit.jupiter.api.Test; + +import java.io.IOException; + +import static gov.nist.csd.pm.util.PolicyEquals.assertPolicyEquals; + +public class SerializationTest { + + @Test + void testJSONAndPML() throws PMException, IOException { + MemoryPAP pap = new MemoryPAP(); + SamplePolicy.loadSamplePolicyFromPML(pap); + + String json = pap.serialize(new JSONSerializer()); + String pml = pap.serialize(new PMLSerializer()); + + MemoryPAP jsonPAP = new MemoryPAP(); + jsonPAP.deserialize(new UserContext("u1"), json, new JSONDeserializer()); + + PAP pmlPAP = new MemoryPAP(); + pmlPAP.deserialize(new UserContext("u1"), pml, new PMLDeserializer()); + + assertPolicyEquals(jsonPAP.query(), pmlPAP.query()); + assertPolicyEquals(pap.query(), pmlPAP.query()); + assertPolicyEquals(pap.query(), jsonPAP.query()); + } + + @Test + void testPMLAndJson() throws PMException, IOException { + MemoryPAP pml = new MemoryPAP(); + MemoryPAP json = new MemoryPAP(); + + SamplePolicy.loadSamplePolicyFromPML(pml); + SamplePolicy.loadSamplePolicyFromJSON(json); + + PolicyEquals.assertPolicyEquals(pml.query(), json.query()); + + String pmlStr = pml.serialize(new PMLSerializer()); + String jsonStr = json.serialize(new JSONSerializer()); + + pml.reset(); + pml.deserialize(new UserContext("u1"), pmlStr, new PMLDeserializer()); + json.reset(); + json.deserialize(new UserContext("u1"), pmlStr, new PMLDeserializer()); + PolicyEquals.assertPolicyEquals(pml.query(), json.query()); + + pml.reset(); + pml.deserialize(new UserContext("u1"), jsonStr, new JSONDeserializer()); + json.reset(); + json.deserialize(new UserContext("u1"), jsonStr, new JSONDeserializer()); + PolicyEquals.assertPolicyEquals(pml.query(), json.query()); + } + + @Test + void testSerializationWithAdminNodes() throws PMException { + MemoryPAP pap = new MemoryPAP(); + pap.executePML(new UserContext("u1"), """ + create pc "pc1" + create ua "ua1" in ["pc1"] + associate "ua1" and ADMIN_POLICY_OBJECT with ["*a"] + """); + String pml = pap.serialize(new PMLSerializer()); + String json = pap.serialize(new JSONSerializer()); + + MemoryPAP pmlPAP = new MemoryPAP(); + pmlPAP.deserialize(new UserContext("u1"), pml, new PMLDeserializer()); + MemoryPAP jsonPAP = new MemoryPAP(); + jsonPAP.deserialize(new UserContext("u1"), json, new JSONDeserializer()); + + assertPolicyEquals(pmlPAP.query(), jsonPAP.query()); + assertPolicyEquals(pap.query(), pmlPAP.query()); + assertPolicyEquals(pap.query(), jsonPAP.query()); + } + + @Test + void testSerializationNodeProperties() throws PMException { + MemoryPAP pap = new MemoryPAP(); + pap.executePML(new UserContext("u1"), """ + create pc "pc1" + create ua "ua1" in ["pc1"] + set properties of "ua1" to {"a": "b"} + """); + String pml = pap.serialize(new PMLSerializer()); + String json = pap.serialize(new JSONSerializer()); + + MemoryPAP pmlPAP = new MemoryPAP(); + pmlPAP.deserialize(new UserContext("u1"), pml, new PMLDeserializer()); + MemoryPAP jsonPAP = new MemoryPAP(); + jsonPAP.deserialize(new UserContext("u1"), json, new JSONDeserializer()); + + assertPolicyEquals(pmlPAP.query(), jsonPAP.query()); + } +} diff --git a/src/test/java/gov/nist/csd/pm/pdp/PDPTest.java b/src/test/java/gov/nist/csd/pm/pdp/PDPTest.java index 126e297d7..22c29baf8 100644 --- a/src/test/java/gov/nist/csd/pm/pdp/PDPTest.java +++ b/src/test/java/gov/nist/csd/pm/pdp/PDPTest.java @@ -1,38 +1,332 @@ package gov.nist.csd.pm.pdp; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.epp.EPP; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.admin.AdminPolicyNode; import gov.nist.csd.pm.pap.PAP; -import gov.nist.csd.pm.pap.memory.MemoryPolicyStore; -import gov.nist.csd.pm.pdp.memory.MemoryPDP; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.AccessRightSet; -import gov.nist.csd.pm.policy.model.access.UserContext; +import gov.nist.csd.pm.pap.exception.*; +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.prohibition.ContainerCondition; +import gov.nist.csd.pm.pap.prohibition.ProhibitionSubject; +import gov.nist.csd.pm.pap.routine.Routine; +import gov.nist.csd.pm.pdp.exception.UnauthorizedException; import org.junit.jupiter.api.Test; -import static gov.nist.csd.pm.pap.SuperPolicy.SUPER_USER; -import static gov.nist.csd.pm.policy.model.access.AdminAccessRights.CREATE_OBJECT_ATTRIBUTE; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +import static gov.nist.csd.pm.pap.PAPTest.testAdminPolicy; +import static gov.nist.csd.pm.pap.op.AdminAccessRights.CREATE_OBJECT_ATTRIBUTE; +import static gov.nist.csd.pm.pap.op.graph.GraphOp.ASCENDANT_OPERAND; +import static gov.nist.csd.pm.pap.op.graph.GraphOp.DESCENDANTS_OPERAND; import static org.junit.jupiter.api.Assertions.*; class PDPTest { @Test void testRunTx() throws PMException { - PAP pap = new PAP(new MemoryPolicyStore()); - PDP pdp = new MemoryPDP(pap, false); - - UserContext superUser = new UserContext(SUPER_USER); - pdp.runTx(superUser, (policy) -> { - policy.graph().createPolicyClass("pc1"); - policy.graph().createUserAttribute("ua1", "pc1"); - policy.graph().createObjectAttribute("oa1", "pc1"); - policy.graph().createObjectAttribute("oa2", "pc1"); - policy.graph().createUser("u1", "ua1"); - policy.graph().createObject("o1", "oa1"); + PAP pap = new MemoryPAP(); + PDP pdp = new PDP(pap); + + pap.runTx(txPAP -> { + txPAP.modify().graph().createPolicyClass("pc1"); + txPAP.modify().graph().createUserAttribute("ua1", List.of("pc1")); + txPAP.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + txPAP.modify().graph().createObjectAttribute("oa2", List.of("pc1")); + txPAP.modify().graph().createUser("u1", List.of("ua1")); + txPAP.modify().graph().createObject("o1", List.of("oa1")); }); assertThrows(PMException.class, () -> pdp.runTx(new UserContext("u1"), ((policy) -> - policy.graph().associate("ua1", "oa1", new AccessRightSet(CREATE_OBJECT_ATTRIBUTE))))); + policy.modify().graph().associate("ua1", "oa1", new AccessRightSet(CREATE_OBJECT_ATTRIBUTE))))); + + assertTrue(pap.query().graph().nodeExists("pc1")); + assertTrue(pap.query().graph().nodeExists("oa1")); + } + + + @Test + void testBootstrapWithAdminPolicyOnly() throws PMException { + PAP pap = new MemoryPAP(); + PDP pdp = new PDP(pap); + + pdp.bootstrap(p -> { + p.modify().graph().createPolicyClass("pc1"); + }); + + testAdminPolicy(pap, 2); + assertTrue(pap.query().graph().nodeExists("pc1")); + } + + @Test + void testBootstrapWithExistingPolicyThrowsException() throws PMException { + PAP pap = new MemoryPAP(); + PDP pdp = new PDP(pap); + pap.modify().graph().createPolicyClass("pc1"); + assertThrows(BootstrapExistingPolicyException.class, () -> { + pdp.bootstrap((policy) -> {}); + }); + + pap.reset(); + + pap.modify().operations().setResourceOperations(new AccessRightSet("read")); + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.modify().graph().createUser("u1", List.of("ua1")); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + pap.modify().graph().createObject("o1", List.of("oa1")); + + pap.modify().prohibitions().createProhibition("pro1", new ProhibitionSubject("u1", ProhibitionSubject.Type.USER), + new AccessRightSet("read"), true, + Collections.singleton(new ContainerCondition("oa1", false)) + ); + + assertThrows(BootstrapExistingPolicyException.class, () -> { + pdp.bootstrap((policy) -> {}); + }); + + pap.modify().obligations().createObligation("u1", "obl1", List.of()); + + assertThrows(BootstrapExistingPolicyException.class, () -> { + pdp.bootstrap((policy) -> {}); + }); + } + + @Test + void testRollback() throws PMException { + PAP pap = new MemoryPAP(); + PDP pdp = new PDP(pap); + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.modify().graph().createUser("u1", List.of("ua1")); + pap.modify().graph().associate("ua1", AdminPolicyNode.ADMIN_POLICY_OBJECT.nodeName(), new AccessRightSet("*")); + + assertThrows(NodeNameExistsException.class, () -> { + pdp.runTx(new UserContext("u1"), policy -> { + policy.modify().graph().createPolicyClass("pc2"); + // expect error and rollback + policy.modify().graph().createObjectAttribute("oa1", List.of("pc2")); + }); + }); + + assertTrue(pap.query().graph().nodeExists("pc1")); + assertTrue(pap.query().graph().nodeExists("ua1")); + assertTrue(pap.query().graph().nodeExists("oa1")); + assertFalse(pap.query().graph().nodeExists("pc2")); + } + + @Test + void testAdjudicateResourceOperation() throws PMException { + PAP pap = new MemoryPAP(); + pap.executePML(new UserContext(""), """ + set resource operations ["read", "write"] + create pc "pc1" + create ua "ua1" in ["pc1"] + create oa "oa1" in ["pc1"] + associate "ua1" and "oa1" with ["read"] + + create u "u1" in ["ua1"] + create o "o1" in ["oa1"] + """); + + PDP pdp = new PDP(pap); + ResourceAdjudicationResponse resp = pdp.adjudicateResourceOperation(new UserContext("u1"), "o1", "read"); + assertEquals(resp.getResource(), pap.query().graph().getNode("o1")); + assertEquals(resp.getDecision(), Decision.GRANT); + + resp = pdp.adjudicateResourceOperation(new UserContext("u1"), "o1", "write"); + assertNull(resp.getResource()); + assertEquals(resp.getDecision(), Decision.DENY); + } + + @Test + void testAdjudicateAdminOperation() throws PMException { + PAP pap = new MemoryPAP(); + pap.executePML(new UserContext(""), """ + create pc "pc1" + create ua "ua1" in ["pc1"] + create ua "ua2" in ["pc1"] + create oa "oa1" in ["pc1"] + create oa "oa2" in ["pc1"] + associate "ua1" and "oa1" with ["assign"] + associate "ua1" and "oa2" with ["assign_to"] + + create u "u1" in ["ua1"] + create u "u2" in ["ua2"] + create o "o1" in ["oa1"] + + operation op1() { + check "assign_to" on "oa2" + } { + create pc "test" + } + """); + + PDP pdp = new PDP(pap); + + // builtin operation + AdminAdjudicationResponse resp = pdp.adjudicateAdminOperations( + new UserContext("u1"), + List.of(new OperationRequest("assign", Map.of(ASCENDANT_OPERAND, "o1", DESCENDANTS_OPERAND, List.of("oa2")))) + ); + assertEquals(Decision.GRANT, resp.getDecision()); + + // custom operation + resp = pdp.adjudicateAdminOperations(new UserContext("u1"), List.of(new OperationRequest("op1", Map.of()))); + assertEquals(Decision.GRANT, resp.getDecision()); + + // denied + resp = pdp.adjudicateAdminOperations(new UserContext("u2"), List.of(new OperationRequest("op1", Map.of()))); + assertEquals(Decision.DENY, resp.getDecision()); + } + + @Test + void testAdjudicateDoesNotExist() throws PMException { + PAP pap = new MemoryPAP(); + pap.executePML(new UserContext(""), """ + create pc "pc1" + create ua "ua1" in ["pc1"] + create u "u1" in ["ua1"] + + set resource operations ["read", "write"] + + """); + PDP pdp = new PDP(pap); + assertThrows(OperationDoesNotExistException.class, + () -> pdp.adjudicateAdminOperations(new UserContext("u1"), List.of(new OperationRequest("op1", Map.of())))); + assertThrows(NodeDoesNotExistException.class, + () -> pdp.adjudicateResourceOperation(new UserContext("u1"), "oa1", "read")); + assertThrows(OperationDoesNotExistException.class, + () -> pdp.adjudicateResourceOperation(new UserContext("u1"), "ua1", "x")); + } + + @Test + void testAdjudicateAdminRoutine() throws PMException { + PAP pap = new MemoryPAP(); + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.modify().graph().createUserAttribute("ua2", List.of("pc1")); + pap.modify().graph().createUser("u1", List.of("ua1")); + pap.modify().graph().createUser("u2", List.of("ua2")); + pap.modify().graph().associate("ua1", AdminPolicyNode.ADMIN_POLICY_OBJECT.nodeName(), new AccessRightSet("*")); + + pap.modify().routines().createAdminRoutine(new Routine("routine1", List.of("a")) { + @Override + public Void execute(PAP pap, Map operands) throws PMException { + pap.modify().graph().createPolicyClass((String) operands.get("a")); + return null; + } + }); + pap.executePML(new UserContext("u1"), """ + routine routine2() { + create policy class "test2" + } + """); + + PDP pdp = new PDP(pap); + pdp.adjudicateAdminRoutine(new UserContext("u1"), new RoutineRequest("routine1", Map.of("a", "test"))); + pdp.adjudicateAdminRoutine(new UserContext("u1"), new RoutineRequest("routine2", Map.of())); + + assertTrue(pap.query().graph().nodeExists("test")); + assertTrue(pap.query().graph().nodeExists("test2")); + + UnauthorizedException e = assertThrows( + UnauthorizedException.class, + () -> pdp.adjudicateAdminRoutine(new UserContext("u2"), new RoutineRequest("routine1", Map.of("a", "test3"))) + ); + assertEquals("[user=u2] does not have access right [create_policy_class] on [PM_ADMIN:object]", e.getMessage()); + } + + @Test + void testRoutineWithForLoop() throws PMException { + String pml = """ + create pc "pc1" + create ua "ua1" in ["pc1"] + create oa "oa1" in ["pc1"] + create oa "oa2" in ["pc1"] + create u "u1" in ["ua1"] + + associate "ua1" and "oa1" with ["create_object"] + + routine routine1() { + foreach x in ["oa1", "oa2"] { + if true { + create o x + "_o" in [x] + } + } + } + """; + PAP pap = new MemoryPAP(); + pap.executePML(new UserContext("u1"), pml); + + PDP pdp = new PDP(pap); + assertThrows(UnauthorizedException.class, () -> pdp.adjudicateAdminRoutine(new UserContext("u1"), new RoutineRequest("routine1", Map.of()))); + } + + @Test + void testRoutineTx() throws PMException { + MemoryPAP pap = new MemoryPAP(); + pap.executePML(new UserContext("u1"), """ + create pc "pc1" + create ua "ua1" in ["pc1"] + create oa "oa1" in ["pc1"] + create oa "oa2" in ["pc1"] + associate "ua1" and "oa1" with ["create_object"] + + create u "u1" in ["ua1"] + + routine r1() { + create o "o1" in ["oa1"] + create o "o2" in ["oa1"] + create o "o3" in ["oa2"] + } + """); + PDP pdp = new PDP(pap); + assertThrows(UnauthorizedException.class, () -> pdp.runTx(new UserContext("u1"), tx -> { + tx.executePML(new UserContext("u1"), "r1()"); + })); + assertFalse(pap.query().graph().nodeExists("o1")); + assertFalse(pap.query().graph().nodeExists("o2")); + + } + + @Test + void testPMLOperationDoesNotEmitEvents() throws PMException { + MemoryPAP pap = new MemoryPAP(); + pap.executePML(new UserContext("u1"), """ + create pc "pc1" + create ua "ua1" in ["pc1"] + create oa "oa1" in ["pc1"] + create oa "oa2" in ["pc1"] + associate "ua1" and "oa1" with ["create_object"] + associate "ua1" and ADMIN_POLICY_OBJECT with ["*a"] + + create u "u1" in ["ua1"] + + operation op1() { + create pc "pc2" + foreach x in ["ua2", "ua3"] { + create ua x in ["pc2"] + } + } + + create obligation "o1" { + create rule "r1" + when any user + performs "create_user_attribute" + do(ctx) { + create pc "test" + } + } + """); - assertTrue(pap.graph().nodeExists("pc1")); - assertTrue(pap.graph().nodeExists("oa1")); + PDP pdp = new PDP(pap); + EPP epp = new EPP(pdp, pap); + pdp.adjudicateAdminOperations(new UserContext("u1"), List.of(new OperationRequest("op1", Map.of()))); + assertFalse(pap.query().graph().nodeExists("test")); } } \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pdp/PDPTxTest.java b/src/test/java/gov/nist/csd/pm/pdp/PDPTxTest.java new file mode 100644 index 000000000..7912b3754 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pdp/PDPTxTest.java @@ -0,0 +1,74 @@ +package gov.nist.csd.pm.pdp; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.serialization.json.JSONSerializer; +import gov.nist.csd.pm.pap.serialization.pml.PMLDeserializer; +import gov.nist.csd.pm.pdp.exception.UnauthorizedException; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +class PDPTxTest { + + @Test + void testReset() throws PMException { + PAP pap = new MemoryPAP(); + pap.executePML(new UserContext("u1"), """ + create pc "pc1" + create ua "ua1" in ["pc1"] + create ua "ua2" in ["pc1"] + create u "u1" in ["ua1"] + create u "u2" in ["ua2"] + associate "ua1" and ADMIN_POLICY_OBJECT with ["*a"] + """); + PDPTx u2 = new PDPTx(new UserContext("u2"), pap, List.of()); + assertThrows(UnauthorizedException.class, u2::reset); + + PDPTx u1 = new PDPTx(new UserContext("u1"), pap, List.of()); + assertDoesNotThrow(u1::reset); + } + + @Test + void testSerialize() throws PMException { + PAP pap = new MemoryPAP(); + pap.executePML(new UserContext("u1"), """ + create pc "pc1" + create ua "ua1" in ["pc1"] + create ua "ua2" in ["pc1"] + create u "u1" in ["ua1"] + create u "u2" in ["ua2"] + associate "ua1" and ADMIN_POLICY_OBJECT with ["*a"] + """); + PDPTx u2 = new PDPTx(new UserContext("u2"), pap, List.of()); + assertThrows(UnauthorizedException.class, () -> u2.serialize(new JSONSerializer())); + + PDPTx u1 = new PDPTx(new UserContext("u1"), pap, List.of()); + assertDoesNotThrow(() -> u1.serialize(new JSONSerializer())); + } + + @Test + void testDeserialize() throws PMException { + PAP pap = new MemoryPAP(); + pap.executePML(new UserContext("u1"), """ + create pc "pc1" + create ua "ua1" in ["pc1"] + create ua "ua2" in ["pc1"] + create u "u1" in ["ua1"] + create u "u2" in ["ua2"] + associate "ua1" and ADMIN_POLICY_OBJECT with ["*a"] + """); + + String serialize = "create pc \"test\""; + + PDPTx u2 = new PDPTx(new UserContext("u2"), pap, List.of()); + assertThrows(UnauthorizedException.class, () -> u2.deserialize(new UserContext(), serialize, new PMLDeserializer())); + + PDPTx u1 = new PDPTx(new UserContext("u1"), pap, List.of()); + assertDoesNotThrow(() -> u1.deserialize(new UserContext(), serialize, new PMLDeserializer())); + } +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pdp/PMLBootstrapperTest.java b/src/test/java/gov/nist/csd/pm/pdp/PMLBootstrapperTest.java new file mode 100644 index 000000000..7a71e50b4 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pdp/PMLBootstrapperTest.java @@ -0,0 +1,81 @@ +package gov.nist.csd.pm.pdp; + +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.op.Operation; +import gov.nist.csd.pm.pap.pml.executable.operation.PMLOperationWrapper; +import gov.nist.csd.pm.pap.pml.executable.routine.PMLRoutineWrapper; +import gov.nist.csd.pm.pap.pml.value.StringValue; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.routine.Routine; +import org.junit.jupiter.api.Test; + +import java.util.List; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.assertTrue; + +class PMLBootstrapperTest { + + @Test + void test() throws PMException { + PAP pap = new MemoryPAP(); + PDP pdp = new PDP(pap); + + String input = """ + set resource operations ["read", "write"] + + create pc "pc1" + create ua "ua1" in ["pc1"] + create oa "oa1" in ["pc1"] + + associate "ua1" and "oa1" with ["read"] + + create user "u1" in ["ua1"] + + op1() + + routine1() + + create pc TEST_CONST + """; + + Operation op1 = new Operation<>("op1") { + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { + + } + + @Override + public Object execute(PAP pap, Map operands) throws PMException { + pap.modify().graph().createPolicyClass("op1"); + + return null; + } + }; + + Routine routine1 = new Routine<>("routine1", List.of()) { + @Override + public Object execute(PAP pap, Map operands) throws PMException { + pap.modify().graph().createPolicyClass("routine1"); + return null; + } + }; + + pdp.bootstrap(new PMLBootstrapper(new UserContext("u1"), input, + List.of(new PMLOperationWrapper(op1)), + List.of(new PMLRoutineWrapper(routine1)), + Map.of("TEST_CONST", new StringValue("TEST_PC")) + )); + + assertTrue(pap.query().graph().nodeExists("pc1")); + assertTrue(pap.query().graph().nodeExists("op1")); + assertTrue(pap.query().graph().nodeExists("routine1")); + assertTrue(pap.query().graph().nodeExists("TEST_PC")); + assertTrue(pap.query().graph().nodeExists("ua1")); + assertTrue(pap.query().graph().nodeExists("oa1")); + assertTrue(pap.query().graph().nodeExists("u1")); + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pdp/PrivilegeCheckerTest.java b/src/test/java/gov/nist/csd/pm/pdp/PrivilegeCheckerTest.java new file mode 100644 index 000000000..a3f945a7d --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pdp/PrivilegeCheckerTest.java @@ -0,0 +1,42 @@ +package gov.nist.csd.pm.pdp; + +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.op.AdminAccessRights; +import gov.nist.csd.pm.pap.admin.AdminPolicyNode; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.op.PrivilegeChecker; +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pdp.exception.UnauthorizedException; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +class PrivilegeCheckerTest { + + @Test + void testAccessRightChecker() throws PMException { + PAP pap = new MemoryPAP(); + + pap.modify().operations().setResourceOperations(new AccessRightSet("read")); + + pap.modify().graph().createPolicyClass("pc1"); + pap.modify().graph().createUserAttribute("ua1", List.of("pc1")); + pap.modify().graph().createObjectAttribute("oa1", List.of("pc1")); + + pap.modify().graph().associate("ua1", "oa1", new AccessRightSet("read")); + pap.modify().graph().associate("ua1", AdminPolicyNode.ADMIN_POLICY_OBJECT.nodeName(), new AccessRightSet( + AdminAccessRights.ASSIGN_TO)); + + pap.modify().graph().createUser("u1", List.of("ua1")); + pap.modify().graph().createObject("o1", List.of("oa1")); + + PrivilegeChecker.check(pap, new UserContext("u1"), "o1", "read"); + PrivilegeChecker.check(pap, new UserContext("u1"), "pc1", AdminAccessRights.ASSIGN_TO); + assertThrows(UnauthorizedException.class, () -> PrivilegeChecker.check(pap, new UserContext("u1"), "pc1", AdminAccessRights.DELETE_POLICY_CLASS)); + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pdp/adjudicator/PrivilegeCheckerTest.java b/src/test/java/gov/nist/csd/pm/pdp/adjudicator/PrivilegeCheckerTest.java new file mode 100644 index 000000000..914a3485a --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pdp/adjudicator/PrivilegeCheckerTest.java @@ -0,0 +1,75 @@ +package gov.nist.csd.pm.pdp.adjudicator; + +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.op.PrivilegeChecker; +import gov.nist.csd.pm.pap.serialization.pml.PMLDeserializer; +import gov.nist.csd.pm.pap.exception.NodeDoesNotExistException; +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.query.UserContext; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class PrivilegeCheckerTest { + + static PAP pap; + + @BeforeAll + static void setup() throws PMException { + pap = new MemoryPAP(); + pap.deserialize( + new UserContext("u1"), + """ + set resource operations ["read", "write"] + + create policy class "pc1" + create ua "ua1" in ["pc1"] + create ua "ua2" in ["pc1"] + + create oa "oa1" in ["pc1"] + create oa "oa2" in ["pc1"] + + associate "ua1" and "oa1" with ["read", "write"] + associate "ua1" and ADMIN_POLICY_OBJECT with ["read"] + + create user "u1" in ["ua1"] + create user "u2" in ["ua2"] + + create object "o1" in ["oa1"] + """, + new PMLDeserializer() + ); + } + + @Test + void testCheckUserAndTargetDoesNotExist() throws PMException { + assertThrows(NodeDoesNotExistException.class, + () -> PrivilegeChecker.check(pap, new UserContext("u3"), "o1", "read")); + assertThrows(NodeDoesNotExistException.class, + () -> PrivilegeChecker.check(pap, new UserContext("u1"), "o2", "read")); + } + + @Test + void testCheckNodeIsPC() { + assertDoesNotThrow(() -> PrivilegeChecker.check(pap, new UserContext("u1"), "pc1", "read")); + } + + @Test + void testAuthorize() { + assertDoesNotThrow(() -> PrivilegeChecker.check(pap, new UserContext("u1"), "o1", "read")); + } + + @Test + void testUnauthorized() { + assertThrows(PMException.class, + () -> PrivilegeChecker.check(pap, new UserContext("u2"), "o1", "read")); + } + + @Test + void testEmptyAccessRights() { + assertDoesNotThrow(() -> PrivilegeChecker.check(pap, new UserContext("u1"), "o1")); + } + +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pdp/memory/MemoryPDPTest.java b/src/test/java/gov/nist/csd/pm/pdp/memory/MemoryPDPTest.java deleted file mode 100644 index 4ed86eb60..000000000 --- a/src/test/java/gov/nist/csd/pm/pdp/memory/MemoryPDPTest.java +++ /dev/null @@ -1,81 +0,0 @@ -package gov.nist.csd.pm.pdp.memory; - -import gov.nist.csd.pm.SamplePolicy; -import gov.nist.csd.pm.pap.PAP; -import gov.nist.csd.pm.pap.memory.MemoryPolicyStore; -import gov.nist.csd.pm.pdp.PDP; -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; -import gov.nist.csd.pm.policy.exceptions.NodeNameExistsException; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.exceptions.UnauthorizedException; -import gov.nist.csd.pm.policy.model.access.UserContext; -import org.junit.jupiter.api.Test; - -import java.io.IOException; -import java.util.List; - -import static gov.nist.csd.pm.pap.SuperPolicy.SUPER_USER; -import static org.junit.jupiter.api.Assertions.*; - -class MemoryPDPTest { - - @Test - void testRollback() throws PMException { - PAP pap = new PAP(new MemoryPolicyStore()); - pap.graph().createPolicyClass("pc1"); - pap.graph().createObjectAttribute("oa1", "pc1"); - pap.graph().createUserAttribute("ua1", "pc1"); - - PDP pdp = new MemoryPDP(pap, false); - assertThrows(NodeNameExistsException.class, () -> { - pdp.runTx(new UserContext(SUPER_USER), policy -> { - policy.graph().createPolicyClass("pc2"); - // expect error and rollback - policy.graph().createObjectAttribute("oa1", "pc2"); - }); - }); - - assertTrue(pap.graph().nodeExists("pc1")); - assertTrue(pap.graph().nodeExists("ua1")); - assertTrue(pap.graph().nodeExists("oa1")); - assertFalse(pap.graph().nodeExists("pc2")); - } - - @Test - void testExecutePML() throws PMException { - try { - PAP pap = new PAP(new MemoryPolicyStore()); - SamplePolicy.loadSamplePolicyFromPML(pap); - - FunctionDefinitionStatement functionDefinitionStatement = new FunctionDefinitionStatement( - "testfunc", - Type.voidType(), - List.of(), - (ctx, policy) -> { - policy.graph().createPolicyClass("pc3"); - return new Value(); - } - ); - - MemoryPDP memoryPDP = new MemoryPDP(pap, false); - memoryPDP.runTx(new UserContext(SUPER_USER), policy -> { - policy.userDefinedPML().createFunction(functionDefinitionStatement); - policy.executePML(new UserContext(SUPER_USER), "create ua 'ua3' in ['pc2']"); - }); - - assertTrue(pap.graph().nodeExists("ua3")); - - assertThrows(UnauthorizedException.class, () -> { - memoryPDP.runTx(new UserContext("u1"), policy -> { - policy.executePML(new UserContext("u1"), "testfunc()"); - }); - }); - - assertFalse(pap.graph().nodeExists("pc3")); - } catch (IOException e) { - throw new RuntimeException(e); - } - } -} diff --git a/src/test/java/gov/nist/csd/pm/pdp/memory/MemoryPolicyReviewerTest.java b/src/test/java/gov/nist/csd/pm/pdp/memory/MemoryPolicyReviewerTest.java deleted file mode 100644 index 363452306..000000000 --- a/src/test/java/gov/nist/csd/pm/pdp/memory/MemoryPolicyReviewerTest.java +++ /dev/null @@ -1,824 +0,0 @@ -package gov.nist.csd.pm.pdp.memory; - -import gov.nist.csd.pm.pap.PAP; -import gov.nist.csd.pm.pap.memory.MemoryPolicyStore; -import gov.nist.csd.pm.pdp.PDP; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.AccessRightSet; -import gov.nist.csd.pm.policy.model.access.UserContext; -import gov.nist.csd.pm.policy.model.prohibition.ContainerCondition; -import gov.nist.csd.pm.policy.model.prohibition.ProhibitionSubject; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; - -import java.util.Arrays; -import java.util.Map; -import java.util.Set; - -import static gov.nist.csd.pm.policy.model.access.AdminAccessRights.*; -import static org.junit.jupiter.api.Assertions.*; - -class MemoryPolicyReviewerTest { - - @Nested - class GetAccessRights { - private static final AccessRightSet RWE = new AccessRightSet("read", "write", "execute"); - - @Test - void testGetChildren() throws PMException { - PAP pap = new PAP(new MemoryPolicyStore()); - PDP pdp = new MemoryPDP(pap, false); - - pap.graph().setResourceAccessRights(RWE); - - String pc1 = pap.graph().createPolicyClass("pc1"); - String ua1 = pap.graph().createUserAttribute("ua1", pc1); - String oa1 = pap.graph().createObjectAttribute("oa1", pc1); - String u1 = pap.graph().createUser("u1", ua1); - String o1 = pap.graph().createObject("o1", oa1); - String o2 = pap.graph().createObject("o2", oa1); - String o3 = pap.graph().createObject("o3", oa1); - - AccessRightSet arset = new AccessRightSet("read", "write"); - pap.graph().associate(ua1, oa1, arset); - - Map subgraph = pdp.reviewer().getSubgraphAccessRights(new UserContext(u1), oa1); - assertEquals( - Map.of("o1", arset, "o2", arset, "o3", arset), - subgraph - ); - } - - @Test - void testGetAccessibleNodes() throws PMException { - PAP pap = new PAP(new MemoryPolicyStore()); - PDP pdp = new MemoryPDP(pap, false); - - pap.graph().setResourceAccessRights(RWE); - - String pc1 = pap.graph().createPolicyClass("pc1"); - String ua1 = pap.graph().createUserAttribute("ua1", pc1); - String oa1 = pap.graph().createObjectAttribute("oa1", pc1); - String u1 = pap.graph().createUser("u1", ua1); - String o1 = pap.graph().createObject("o1", oa1); - String o2 = pap.graph().createObject("o2", oa1); - String o3 = pap.graph().createObject("o3", oa1); - - AccessRightSet arset = new AccessRightSet("read", "write"); - pap.graph().associate(ua1, oa1, arset); - - Map accessibleNodes = pdp.reviewer().buildCapabilityList(new UserContext(u1)); - - assertTrue(accessibleNodes.containsKey(oa1)); - assertTrue(accessibleNodes.containsKey(o1)); - assertTrue(accessibleNodes.containsKey(o2)); - assertTrue(accessibleNodes.containsKey(o3)); - - assertEquals(arset, accessibleNodes.get(oa1)); - assertEquals(arset, accessibleNodes.get(o1)); - assertEquals(arset, accessibleNodes.get(o2)); - assertEquals(arset, accessibleNodes.get(o3)); - } - - @Test - void testGraph1() throws PMException { - PAP pap = new PAP(new MemoryPolicyStore()); - PDP pdp = new MemoryPDP(pap, false); - - pap.graph().setResourceAccessRights(RWE); - - String pc1 = pap.graph().createPolicyClass("pc1"); - String ua1 = pap.graph().createUserAttribute("ua1", pc1); - String u1 = pap.graph().createUser("u1", ua1); - String oa1 = pap.graph().createObjectAttribute("oa1", pc1); - String o1 = pap.graph().createObject("o1", oa1); - - pap.graph().associate(ua1, oa1, new AccessRightSet("read", "write")); - - assertTrue(pdp.reviewer().getAccessRights(new UserContext(u1), o1).containsAll(Arrays.asList("read", "write"))); - } - @Test - void testGraph2() throws PMException { - PAP pap = new PAP(new MemoryPolicyStore()); - PDP pdp = new MemoryPDP(pap, false); - - pap.graph().setResourceAccessRights(RWE); - - String pc1 = pap.graph().createPolicyClass("pc1"); - String pc2 = pap.graph().createPolicyClass("pc2"); - String ua1 = pap.graph().createUserAttribute("ua1", pc1, pc2); - String ua2 = pap.graph().createUserAttribute("ua2", pc1); - String u1 = pap.graph().createUser("u1", ua1, ua2); - - String oa1 = pap.graph().createObjectAttribute("oa1", pc1); - String oa2 = pap.graph().createObjectAttribute("oa2", pc2); - String o1 = pap.graph().createObject("o1", oa1, oa2); - - pap.graph().associate(ua1, oa1, new AccessRightSet("read")); - - assertTrue(pdp.reviewer().getAccessRights(new UserContext(u1), o1).isEmpty()); - } - @Test - void testGraph3() throws PMException { - PAP pap = new PAP(new MemoryPolicyStore()); - PDP pdp = new MemoryPDP(pap, false); - - pap.graph().setResourceAccessRights(RWE); - String pc1 = pap.graph().createPolicyClass("pc1"); - String ua1 = pap.graph().createUserAttribute("ua1", pc1); - String u1 = pap.graph().createUser("u1", ua1); - String oa1 = pap.graph().createObjectAttribute("oa1", pc1); - String o1 = pap.graph().createObject("o1", oa1); - - pap.graph().associate(ua1, oa1, new AccessRightSet("read", "write")); - - assertTrue(pdp.reviewer().getAccessRights(new UserContext(u1), o1).containsAll(Arrays.asList("read", "write"))); - } - @Test - void testGraph4() throws PMException { - PAP pap = new PAP(new MemoryPolicyStore()); - PDP pdp = new MemoryPDP(pap, false); - - pap.graph().setResourceAccessRights(RWE); - String pc1 = pap.graph().createPolicyClass("pc1"); - String ua1 = pap.graph().createUserAttribute("ua1", pc1); - String ua2 = pap.graph().createUserAttribute("ua2", pc1); - String u1 = pap.graph().createUser("u1", ua1, ua2); - String oa1 = pap.graph().createObjectAttribute("oa1", pc1); - String o1 = pap.graph().createObject("o1", oa1); - - pap.graph().associate(ua1, oa1, new AccessRightSet("read")); - pap.graph().associate(ua2, oa1, new AccessRightSet("write")); - - assertTrue(pdp.reviewer().getAccessRights(new UserContext(u1), o1).containsAll(Arrays.asList("read", "write"))); - } - @Test - void testGraph5() throws PMException { - PAP pap = new PAP(new MemoryPolicyStore()); - PDP pdp = new MemoryPDP(pap, false); - - pap.graph().setResourceAccessRights(RWE); - - String pc1 = pap.graph().createPolicyClass("pc1"); - String pc2 = pap.graph().createPolicyClass("pc2"); - String ua1 = pap.graph().createUserAttribute("ua1", pc1); - String ua2 = pap.graph().createUserAttribute("ua2", pc2); - String u1 = pap.graph().createUser("u1", ua1, ua2); - String oa1 = pap.graph().createObjectAttribute("oa1", pc1); - String oa2 = pap.graph().createObjectAttribute("oa2", pc2); - String o1 = pap.graph().createObject("o1", oa1, oa2); - - pap.graph().associate(ua1, oa1, new AccessRightSet("read")); - pap.graph().associate(ua2, oa2, new AccessRightSet("read", "write")); - - - assertTrue(pdp.reviewer().getAccessRights(new UserContext(u1), o1).containsAll(Arrays.asList("read"))); - } - @Test - void testGraph6() throws PMException { - PAP pap = new PAP(new MemoryPolicyStore()); - PDP pdp = new MemoryPDP(pap, false); - - pap.graph().setResourceAccessRights(RWE); - String pc1 = pap.graph().createPolicyClass("pc1"); - String pc2 = pap.graph().createPolicyClass("pc2"); - String ua1 = pap.graph().createUserAttribute("ua1", pc1); - String ua2 = pap.graph().createUserAttribute("ua2", pc2); - String u1 = pap.graph().createUser("u1", ua1, ua2); - String oa1 = pap.graph().createObjectAttribute("oa1", pc1); - String oa2 = pap.graph().createObjectAttribute("oa2", pc2); - String o1 = pap.graph().createObject("o1", oa1, oa2); - - pap.graph().associate(ua1, oa1, new AccessRightSet("read", "write")); - pap.graph().associate(ua2, oa2, new AccessRightSet("read")); - - - assertTrue(pdp.reviewer().getAccessRights(new UserContext(u1), o1).containsAll(Arrays.asList("read"))); - } - @Test - void testGraph7() throws PMException { - PAP pap = new PAP(new MemoryPolicyStore()); - PDP pdp = new MemoryPDP(pap, false); - - pap.graph().setResourceAccessRights(RWE); - - String pc1 = pap.graph().createPolicyClass("pc1"); - String pc2 = pap.graph().createPolicyClass("pc2"); - String ua1 = pap.graph().createUserAttribute("ua1", pc1); - String u1 = pap.graph().createUser("u1", ua1); - String oa1 = pap.graph().createObjectAttribute("oa1", pc1); - String oa2 = pap.graph().createObjectAttribute("oa2", pc2); - String o1 = pap.graph().createObject("o1", oa1, oa2); - - pap.graph().associate(ua1, oa1, new AccessRightSet("read", "write")); - - - assertTrue(pdp.reviewer().getAccessRights(new UserContext(u1), o1).isEmpty()); - } - @Test - void testGraph8() throws PMException { - PAP pap = new PAP(new MemoryPolicyStore()); - PDP pdp = new MemoryPDP(pap, false); - - pap.graph().setResourceAccessRights(RWE); - String pc1 = pap.graph().createPolicyClass("pc1"); - String ua1 = pap.graph().createUserAttribute("ua1", pc1); - String u1 = pap.graph().createUser("u1", ua1); - String oa1 = pap.graph().createObjectAttribute("oa1", pc1); - String o1 = pap.graph().createObject("o1", oa1); - - pap.graph().associate(ua1, oa1, new AccessRightSet("*")); - - - Set list = pdp.reviewer().getAccessRights(new UserContext(u1), o1); - assertTrue(list.containsAll(allAdminAccessRights())); - assertTrue(list.containsAll(RWE)); - } - @Test - void testGraph9() throws PMException { - PAP pap = new PAP(new MemoryPolicyStore()); - PDP pdp = new MemoryPDP(pap, false); - - pap.graph().setResourceAccessRights(RWE); - String pc1 = pap.graph().createPolicyClass("pc1"); - String ua1 = pap.graph().createUserAttribute("ua1", pc1); - String ua2 = pap.graph().createUserAttribute("ua2", pc1); - String u1 = pap.graph().createUser("u1", ua1); - String oa1 = pap.graph().createObjectAttribute("oa1", pc1); - String o1 = pap.graph().createObject("o1", oa1); - - pap.graph().associate(ua1, oa1, new AccessRightSet("*")); - pap.graph().associate(ua2, oa1, new AccessRightSet("read", "write")); - - - Set list = pdp.reviewer().getAccessRights(new UserContext(u1), o1); - assertTrue(list.containsAll(allAdminAccessRights())); - assertTrue(list.containsAll(RWE)); - } - @Test - void testGraph10() throws PMException { - PAP pap = new PAP(new MemoryPolicyStore()); - PDP pdp = new MemoryPDP(pap, false); - - pap.graph().setResourceAccessRights(RWE); - String pc1 = pap.graph().createPolicyClass("pc1"); - String pc2 = pap.graph().createPolicyClass("pc2"); - String ua1 = pap.graph().createUserAttribute("ua1", pc1); - String ua2 = pap.graph().createUserAttribute("ua2", pc2); - String u1 = pap.graph().createUser("u1", ua1, ua2); - String oa1 = pap.graph().createObjectAttribute("oa1", pc1); - String oa2 = pap.graph().createObjectAttribute("oa2", pc2); - String o1 = pap.graph().createObject("o1", oa1, oa2); - - pap.graph().associate(ua1, oa1, new AccessRightSet("*")); - pap.graph().associate(ua2, oa2, new AccessRightSet("read", "write")); - - - assertTrue(pdp.reviewer().getAccessRights(new UserContext(u1), o1).containsAll(Arrays.asList("read", "write"))); - } - @Test - void testGraph11() throws PMException { - PAP pap = new PAP(new MemoryPolicyStore()); - PDP pdp = new MemoryPDP(pap, false); - - pap.graph().setResourceAccessRights(RWE); - String pc1 = pap.graph().createPolicyClass("pc1"); - String pc2 = pap.graph().createPolicyClass("pc2"); - String ua1 = pap.graph().createUserAttribute("ua1", pc1); - String u1 = pap.graph().createUser("u1", ua1); - String oa1 = pap.graph().createObjectAttribute("oa1", pc1); - String oa2 = pap.graph().createObjectAttribute("oa2", pc2); - String o1 = pap.graph().createObject("o1", oa1, oa2); - - pap.graph().associate(ua1, oa1, new AccessRightSet("*")); - - - assertTrue(pdp.reviewer().getAccessRights(new UserContext(u1), o1).isEmpty()); - } - @Test - void testGraph12() throws PMException { - PAP pap = new PAP(new MemoryPolicyStore()); - PDP pdp = new MemoryPDP(pap, false); - - pap.graph().setResourceAccessRights(RWE); - String pc1 = pap.graph().createPolicyClass("pc1"); - String ua1 = pap.graph().createUserAttribute("ua1", pc1); - String ua2 = pap.graph().createUserAttribute("ua2", pc1); - String u1 = pap.graph().createUser("u1", ua1, ua2); - String oa1 = pap.graph().createObjectAttribute("oa1", pc1); - String o1 = pap.graph().createObject("o1", oa1); - - pap.graph().associate(ua1, oa1, new AccessRightSet("read")); - pap.graph().associate(ua2, oa1, new AccessRightSet("write")); - - - assertTrue(pdp.reviewer().getAccessRights(new UserContext(u1), o1).containsAll(Arrays.asList("read", "write"))); - } - @Test - void testGraph13() throws PMException { - PAP pap = new PAP(new MemoryPolicyStore()); - PDP pdp = new MemoryPDP(pap, false); - - pap.graph().setResourceAccessRights(RWE); - String pc1 = pap.graph().createPolicyClass("pc1"); - String ua2 = pap.graph().createUserAttribute("ua2", pc1); - String ua1 = pap.graph().createUserAttribute("ua1", ua2); - String u1 = pap.graph().createUser("u1", ua1); - String oa2 = pap.graph().createObjectAttribute("oa2", pc1); - String oa1 = pap.graph().createObjectAttribute("oa1", oa2); - String o1 = pap.graph().createObject("o1", oa1); - - pap.graph().associate(ua1, oa1, new AccessRightSet("*")); - pap.graph().associate(ua2, oa2, new AccessRightSet("read")); - - - Set list = pdp.reviewer().getAccessRights(new UserContext(u1), o1); - assertTrue(list.containsAll(allAdminAccessRights())); - assertTrue(list.contains("read")); - } - @Test - void testGraph14() throws PMException { - PAP pap = new PAP(new MemoryPolicyStore()); - PDP pdp = new MemoryPDP(pap, false); - - pap.graph().setResourceAccessRights(RWE); - String pc1 = pap.graph().createPolicyClass("pc1"); - String pc2 = pap.graph().createPolicyClass("pc2"); - String ua1 = pap.graph().createUserAttribute("ua1", pc1); - String ua2 = pap.graph().createUserAttribute("ua2", pc1); - String u1 = pap.graph().createUser("u1", ua1, ua2); - String oa1 = pap.graph().createObjectAttribute("oa1", pc1, pc2); - String o1 = pap.graph().createObject("o1", oa1); - - pap.graph().associate(ua1, oa1, new AccessRightSet("*")); - pap.graph().associate(ua2, oa1, new AccessRightSet("*")); - - - Set list = pdp.reviewer().getAccessRights(new UserContext(u1), o1); - assertTrue(list.containsAll(allAdminAccessRights())); - assertTrue(list.containsAll(RWE)); - } - @Test - void testGraph15() throws PMException { - PAP pap = new PAP(new MemoryPolicyStore()); - PDP pdp = new MemoryPDP(pap, false); - - pap.graph().setResourceAccessRights(RWE); - String pc1 = pap.graph().createPolicyClass("pc1"); - String ua2 = pap.graph().createUserAttribute("ua2", pc1); - String ua1 = pap.graph().createUserAttribute("ua1", ua2); - String u1 = pap.graph().createUser("u1", ua1); - String oa2 = pap.graph().createObjectAttribute("oa2", pc1); - String oa1 = pap.graph().createObjectAttribute("oa1", oa2); - String o1 = pap.graph().createObject("o1", oa1); - - pap.graph().associate(ua1, oa1, new AccessRightSet("*")); - pap.graph().associate(ua2, oa2, new AccessRightSet("read")); - - - Set list = pdp.reviewer().getAccessRights(new UserContext(u1), o1); - assertTrue(list.containsAll(allAdminAccessRights())); - assertTrue(list.containsAll(RWE)); - } - @Test - void testGraph16() throws PMException { - PAP pap = new PAP(new MemoryPolicyStore()); - PDP pdp = new MemoryPDP(pap, false); - - pap.graph().setResourceAccessRights(RWE); - String pc1 = pap.graph().createPolicyClass("pc1"); - String ua2 = pap.graph().createUserAttribute("ua2", pc1); - String ua1 = pap.graph().createUserAttribute("ua1", ua2); - String u1 = pap.graph().createUser("u1", ua1); - String oa1 = pap.graph().createObjectAttribute("oa1", pc1); - String o1 = pap.graph().createObject("o1", oa1); - - pap.graph().associate(ua1, oa1, new AccessRightSet("read")); - pap.graph().associate(ua2, oa1, new AccessRightSet("write")); - - - assertTrue(pdp.reviewer().getAccessRights(new UserContext(u1), o1).containsAll(Arrays.asList("read", "write"))); - } - - // removed graph7 due to adding the parent IDs to the createNode, need to always connect to the pap.graph(). - - @Test - void testGraph18() throws PMException { - PAP pap = new PAP(new MemoryPolicyStore()); - PDP pdp = new MemoryPDP(pap, false); - - pap.graph().setResourceAccessRights(RWE); - String pc1 = pap.graph().createPolicyClass("pc1"); - String ua1 = pap.graph().createUserAttribute("ua1", pc1); - String u1 = pap.graph().createUser("u1", ua1); - String oa1 = pap.graph().createObjectAttribute("oa1", pc1); - String oa2 = pap.graph().createObjectAttribute("oa2", pc1); - String o1 = pap.graph().createObject("o1", oa2); - - pap.graph().associate(ua1, oa1, new AccessRightSet("read", "write")); - - - assertTrue(pdp.reviewer().getAccessRights(new UserContext(u1), o1).isEmpty()); - } - @Test - void testGraph19() throws PMException { - PAP pap = new PAP(new MemoryPolicyStore()); - PDP pdp = new MemoryPDP(pap, false); - - pap.graph().setResourceAccessRights(RWE); - String pc1 = pap.graph().createPolicyClass("pc1"); - String ua1 = pap.graph().createUserAttribute("ua1", pc1); - String ua2 = pap.graph().createUserAttribute("ua2", pc1); - String u1 = pap.graph().createUser("u1", ua2); - String oa1 = pap.graph().createObjectAttribute("oa1", pc1); - String o1 = pap.graph().createObject("o1", oa1); - - pap.graph().associate(ua1, oa1, new AccessRightSet("read")); - - - assertTrue(pdp.reviewer().getAccessRights(new UserContext(u1), o1).isEmpty()); - } - @Test - void testGraph20() throws PMException { - PAP pap = new PAP(new MemoryPolicyStore()); - PDP pdp = new MemoryPDP(pap, false); - - pap.graph().setResourceAccessRights(RWE); - String pc1 = pap.graph().createPolicyClass("pc1"); - String pc2 = pap.graph().createPolicyClass("pc2"); - String ua1 = pap.graph().createUserAttribute("ua1", pc1); - String ua2 = pap.graph().createUserAttribute("ua2", pc1); - String u1 = pap.graph().createUser("u1", ua1, ua2); - String oa1 = pap.graph().createObjectAttribute("oa1", pc1); - String oa2 = pap.graph().createObjectAttribute("oa2", pc2); - String o1 = pap.graph().createObject("o1", oa1, oa2); - - pap.graph().associate(ua1, oa1, new AccessRightSet("read")); - pap.graph().associate(ua2, oa2, new AccessRightSet("read", "write")); - - - assertTrue(pdp.reviewer().getAccessRights(new UserContext(u1), o1).containsAll(Arrays.asList("read"))); - } - @Test - void testGraph21() throws PMException { - PAP pap = new PAP(new MemoryPolicyStore()); - PDP pdp = new MemoryPDP(pap, false); - - pap.graph().setResourceAccessRights(RWE); - String pc1 = pap.graph().createPolicyClass("pc1"); - String pc2 = pap.graph().createPolicyClass("pc2"); - String ua1 = pap.graph().createUserAttribute("ua1", pc1); - String ua2 = pap.graph().createUserAttribute("ua2", pc1); - String u1 = pap.graph().createUser("u1", ua1, ua2); - String oa1 = pap.graph().createObjectAttribute("oa1", pc1); - String oa2 = pap.graph().createObjectAttribute("oa2", pc2); - String o1 = pap.graph().createObject("o1", oa1, oa2); - - pap.graph().associate(ua1, oa1, new AccessRightSet("read")); - pap.graph().associate(ua2, oa2, new AccessRightSet("write")); - - - assertTrue(pdp.reviewer().getAccessRights(new UserContext(u1), o1).isEmpty()); - } - @Test - void testGraph22() throws PMException { - PAP pap = new PAP(new MemoryPolicyStore()); - PDP pdp = new MemoryPDP(pap, false); - - pap.graph().setResourceAccessRights(RWE); - String pc1 = pap.graph().createPolicyClass("pc1"); - String pc2 = pap.graph().createPolicyClass("pc2"); - String ua1 = pap.graph().createUserAttribute("ua1", pc1); - String u1 = pap.graph().createUser("u1", ua1); - String oa1 = pap.graph().createObjectAttribute("oa1", pc1); - String o1 = pap.graph().createObject("o1", oa1); - - pap.graph().associate(ua1, oa1, new AccessRightSet("read", "write")); - - - assertTrue(pdp.reviewer().getAccessRights(new UserContext(u1), o1).containsAll(Arrays.asList("read", "write"))); - } - - @Test - void testGraph23WithProhibitions() throws PMException { - PAP pap = new PAP(new MemoryPolicyStore()); - PDP pdp = new MemoryPDP(pap, false); - - pap.graph().setResourceAccessRights(RWE); - - String pc1 = pap.graph().createPolicyClass("pc1"); - String ua1 = pap.graph().createUserAttribute("ua1", pc1); - String u1 = pap.graph().createUser("u1", ua1); - String oa3 = pap.graph().createObjectAttribute("oa3", pc1); - String oa4 = pap.graph().createObjectAttribute("oa4", pc1); - String oa2 = pap.graph().createObjectAttribute("oa2", oa3); - String oa1 = pap.graph().createObjectAttribute("oa1", oa4); - String o1 = pap.graph().createObject("o1", oa1, oa2); - - pap.graph().associate(ua1, oa3, new AccessRightSet("read", "write", "execute")); - pap.prohibitions().create("deny", ProhibitionSubject.userAttribute("ua1"), new AccessRightSet("read"), true, - new ContainerCondition(oa1, false), - new ContainerCondition(oa2, false) - ); - - pap.prohibitions().create("deny2", ProhibitionSubject.user(u1), new AccessRightSet("write"), - true, - new ContainerCondition(oa3, false)); - - Set list = pdp.reviewer().getAccessRights(new UserContext(u1), o1); - assertEquals(1, list.size()); - assertTrue(list.contains("execute")); - } - - @Test - void testGraph24WithProhibitions() throws PMException { - PAP pap = new PAP(new MemoryPolicyStore()); - PDP pdp = new MemoryPDP(pap, false); - - pap.graph().setResourceAccessRights(RWE); - - String pc1 = pap.graph().createPolicyClass("pc1"); - String ua1 = pap.graph().createUserAttribute("ua1", pc1); - String u1 = pap.graph().createUser("u1", ua1); - String oa1 = pap.graph().createObjectAttribute("oa1", pc1); - String oa2 = pap.graph().createObjectAttribute("oa2", pc1); - String o1 = pap.graph().createObject("o1", oa1, oa2); - String o2 = pap.graph().createObject("o2", oa2); - - pap.graph().associate(ua1, oa1, new AccessRightSet("read")); - - pap.prohibitions().create("deny", ProhibitionSubject.userAttribute(ua1), - new AccessRightSet("read"), - true, - new ContainerCondition(oa1, false), - new ContainerCondition(oa2, true) - ); - - assertTrue(pdp.reviewer().getAccessRights(new UserContext(u1), o1).contains("read")); - assertTrue(pdp.reviewer().getAccessRights(new UserContext(u1), o2).isEmpty()); - - pap.graph().associate(ua1, oa2, new AccessRightSet("read")); - - pap.prohibitions().create("deny-process", ProhibitionSubject.process("1234"), - new AccessRightSet("read"), - false, - new ContainerCondition(oa1, false)); - - assertTrue(pdp.reviewer().getAccessRights(new UserContext(u1, "1234"), o1).isEmpty()); - } - - @Test - void testGraph25WithProhibitions() throws PMException { - PAP pap = new PAP(new MemoryPolicyStore()); - PDP pdp = new MemoryPDP(pap, false); - - pap.graph().setResourceAccessRights(RWE); - - String pc1 = pap.graph().createPolicyClass("pc1"); - String ua1 = pap.graph().createUserAttribute("ua1", pc1); - String u1 = pap.graph().createUser("u1", ua1); - String oa1 = pap.graph().createObjectAttribute("oa1", pc1); - String oa2 = pap.graph().createObjectAttribute("oa2", oa1); - String oa3 = pap.graph().createObjectAttribute("oa3", oa1); - String oa4 = pap.graph().createObjectAttribute("oa4", oa3); - String oa5 = pap.graph().createObjectAttribute("oa5", oa2); - String o1 = pap.graph().createObject("o1", oa4); - - pap.graph().associate(ua1, oa1, new AccessRightSet("read", "write")); - - pap.prohibitions().create("deny", ProhibitionSubject.user(u1), new AccessRightSet("read", "write"), - true, - new ContainerCondition(oa4, true), - new ContainerCondition(oa1, false)); - - assertTrue(pdp.reviewer().getAccessRights(new UserContext(u1), oa5).isEmpty()); - assertTrue(pdp.reviewer().getAccessRights(new UserContext(u1), o1).containsAll(Arrays.asList("read", "write"))); - } - - @Test - void testGraph25WithProhibitions2() throws PMException { - PAP pap = new PAP(new MemoryPolicyStore()); - PDP pdp = new MemoryPDP(pap, false); - - pap.graph().setResourceAccessRights(RWE); - - String pc1 = pap.graph().createPolicyClass("pc1"); - String ua1 = pap.graph().createUserAttribute("ua1", pc1); - String u1 = pap.graph().createUser("u1", ua1); - String oa1 = pap.graph().createObjectAttribute("oa1", pc1); - String oa2 = pap.graph().createObjectAttribute("oa2", pc1); - String o1 = pap.graph().createObject("o1", oa1, oa2); - - pap.graph().associate(ua1, oa1, new AccessRightSet("read", "write")); - - - pap.prohibitions().create("deny", ProhibitionSubject.user(u1), new AccessRightSet("read", "write"), - true, - new ContainerCondition(oa1, false), - new ContainerCondition(oa2, false)); - - assertTrue(pdp.reviewer().getAccessRights(new UserContext(u1), o1).isEmpty()); - } - - @Test - void testDeciderWithUA() throws PMException { - PAP pap = new PAP(new MemoryPolicyStore()); - PDP pdp = new MemoryPDP(pap, false); - - pap.graph().setResourceAccessRights(RWE); - - String pc1 = pap.graph().createPolicyClass("pc1"); - String ua2 = pap.graph().createUserAttribute("ua2", pc1); - String ua1 = pap.graph().createUserAttribute("ua1", ua2); - String u1 = pap.graph().createUser("u1", ua1); - String oa1 = pap.graph().createObjectAttribute("oa1", pc1); - String oa2 = pap.graph().createObjectAttribute("oa2", pc1); - String o1 = pap.graph().createObject("o1", oa1, oa2); - String o2 = pap.graph().createObject("o2", oa2); - - pap.graph().associate(ua1, oa1, new AccessRightSet("read")); - pap.graph().associate(ua2, oa1, new AccessRightSet("write")); - - assertTrue(pdp.reviewer().getAccessRights(new UserContext(ua1), oa1).containsAll(Arrays.asList("read", "write"))); - } - - @Test - void testProhibitionsAllCombinations() throws PMException { - PAP pap = new PAP(new MemoryPolicyStore()); - PDP pdp = new MemoryPDP(pap, false); - - pap.graph().setResourceAccessRights(RWE); - pap.graph().createPolicyClass("pc1"); - pap.graph().createObjectAttribute("oa1", "pc1"); - pap.graph().createObjectAttribute("oa2", "pc1"); - pap.graph().createObjectAttribute("oa3", "pc1"); - pap.graph().createObjectAttribute("oa4", "pc1"); - pap.graph().createObject("o1", "oa1", "oa2", "oa3"); - pap.graph().createObject("o2", "oa1", "oa4"); - - pap.graph().createUserAttribute("ua1", "pc1"); - pap.graph().createUser("u1", "ua1"); - pap.graph().createUser("u2", "ua1"); - pap.graph().createUser("u3", "ua1"); - pap.graph().createUser("u4", "ua1"); - - pap.graph().associate("ua1", "oa1", new AccessRightSet("read", "write")); - - - pap.prohibitions().create( - "p1", - ProhibitionSubject.user("u1"), - new AccessRightSet("write"), - true, - new ContainerCondition("oa1", false), - new ContainerCondition("oa2", false), - new ContainerCondition("oa3", false) - ); - - pap.prohibitions().create( - "p2", - ProhibitionSubject.user("u2"), - new AccessRightSet("write"), - false, - new ContainerCondition("oa1", false), - new ContainerCondition("oa2", false), - new ContainerCondition("oa3", false) - ); - - pap.prohibitions().create( - "p3", - ProhibitionSubject.user("u3"), - new AccessRightSet("write"), - true, - new ContainerCondition("oa1", false), - new ContainerCondition("oa2", true) - ); - - pap.prohibitions().create( - "p4", - ProhibitionSubject.user("u4"), - new AccessRightSet("write"), - false, - new ContainerCondition("oa1", false), - new ContainerCondition("oa2", true) - ); - - pap.prohibitions().create( - "p5", - ProhibitionSubject.user("u4"), - new AccessRightSet("write"), - false, - new ContainerCondition("oa2", true) - ); - - Set list = pdp.reviewer().getAccessRights(new UserContext("u1"), "o1"); - assertTrue(list.contains("read") && !list.contains("write")); - - list = pdp.reviewer().getAccessRights(new UserContext("u1"), "o2"); - assertTrue(list.contains("read") && list.contains("write")); - - list =pdp.reviewer().getAccessRights(new UserContext("u2"), "o2"); - assertTrue(list.contains("read") && !list.contains("write")); - - list = pdp.reviewer().getAccessRights(new UserContext("u3"), "o2"); - assertTrue(list.contains("read") && !list.contains("write")); - - list = pdp.reviewer().getAccessRights(new UserContext("u4"), "o1"); - assertTrue(list.contains("read") && !list.contains("write")); - - list = pdp.reviewer().getAccessRights(new UserContext("u4"), "o2"); - assertTrue(list.contains("read") && !list.contains("write")); - } - - @Test - void testPermissions() throws PMException { - PAP pap = new PAP(new MemoryPolicyStore()); - PDP pdp = new MemoryPDP(pap, false); - - pap.graph().setResourceAccessRights(RWE); - - String pc1 = pap.graph().createPolicyClass("pc1"); - String ua1 = pap.graph().createUserAttribute("ua1", pc1); - String u1 = pap.graph().createUser("u1", ua1); - String oa1 = pap.graph().createObjectAttribute("oa1", pc1); - String o1 = pap.graph().createObject("o1", oa1); - - pap.graph().associate(ua1, oa1, allAccessRights()); - - Set list = pdp.reviewer().getAccessRights(new UserContext("u1"), "o1"); - assertTrue(list.containsAll(allAdminAccessRights())); - assertTrue(list.containsAll(RWE)); - - pap.graph().associate(ua1, oa1, allAdminAccessRights()); - list = pdp.reviewer().getAccessRights(new UserContext("u1"), "o1"); - assertTrue(list.containsAll(allAdminAccessRights())); - assertFalse(list.containsAll(RWE)); - - pap.graph().associate(ua1, oa1, new AccessRightSet(ALL_RESOURCE_ACCESS_RIGHTS)); - list = pdp.reviewer().getAccessRights(new UserContext("u1"), "o1"); - assertFalse(list.containsAll(allAdminAccessRights())); - assertTrue(list.containsAll(RWE)); - } - - @Test - void testPermissionsInOnlyOnePC() throws PMException { - PAP pap = new PAP(new MemoryPolicyStore()); - PDP pdp = new MemoryPDP(pap, false); - - pap.graph().setResourceAccessRights(RWE); - pap.graph().createPolicyClass("pc1"); - pap.graph().createPolicyClass("pc2"); - pap.graph().createUserAttribute("ua3", "pc1"); - pap.graph().createUserAttribute("ua2", "ua3"); - pap.graph().createUserAttribute("u1", "ua2"); - - pap.graph().createObjectAttribute("oa1", "pc1"); - pap.graph().createObjectAttribute("oa3", "pc2"); - pap.graph().assign("oa3", "oa1"); - pap.graph().createObject("o1", "oa3"); - - pap.graph().associate("ua3", "oa1", new AccessRightSet("read")); - - assertTrue(pdp.reviewer().getAccessRights(new UserContext("u1"), "o1").isEmpty()); - } - - @Test - void testProhibitionsWithContainerAsTarget() throws PMException { - PAP pap = new PAP(new MemoryPolicyStore()); - PDP pdp = new MemoryPDP(pap, false); - - pap.graph().setResourceAccessRights(new AccessRightSet("read")); - pap.graph().createPolicyClass("pc1"); - pap.graph().createUserAttribute("ua1", "pc1"); - pap.graph().createObjectAttribute("oa1", "pc1"); - pap.graph().createUser("u1", "ua1"); - pap.graph().associate("ua1", "oa1", new AccessRightSet("read")); - - pap.prohibitions().create("deny1", ProhibitionSubject.user("u1"), new AccessRightSet("read"), false, - new ContainerCondition("oa1", false)); - - AccessRightSet deniedAccessRights = pdp.reviewer().getDeniedAccessRights(new UserContext("u1"), "oa1"); - assertTrue(deniedAccessRights.contains("read")); - } - - @Test - void testProhibitionWithContainerAsTargetComplement() throws PMException { - PAP pap = new PAP(new MemoryPolicyStore()); - PDP pdp = new MemoryPDP(pap, false); - - pap.graph().setResourceAccessRights(new AccessRightSet("read")); - pap.graph().createPolicyClass("pc1"); - pap.graph().createUserAttribute("ua1", "pc1"); - pap.graph().createObjectAttribute("oa1", "pc1"); - pap.graph().createUser("u1", "ua1"); - pap.graph().associate("ua1", "oa1", new AccessRightSet("read")); - - pap.prohibitions().create("deny1", ProhibitionSubject.user("u1"), new AccessRightSet("read"), false, - new ContainerCondition("oa1", true)); - - AccessRightSet deniedAccessRights = pdp.reviewer().getDeniedAccessRights(new UserContext("u1"), "oa1"); - assertFalse(deniedAccessRights.contains("read")); - } - } - -} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pdp/modification/GraphModificationAdjudicatorTest.java b/src/test/java/gov/nist/csd/pm/pdp/modification/GraphModificationAdjudicatorTest.java new file mode 100644 index 000000000..4f531df6c --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pdp/modification/GraphModificationAdjudicatorTest.java @@ -0,0 +1,236 @@ +package gov.nist.csd.pm.pdp.modification; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.node.NodeType; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.graph.relationship.Association; +import gov.nist.csd.pm.pap.obligation.EventContext; +import gov.nist.csd.pm.epp.EPP; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.op.graph.*; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pdp.PDP; +import gov.nist.csd.pm.pdp.exception.UnauthorizedException; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +import static gov.nist.csd.pm.pap.op.Operation.NAME_OPERAND; +import static gov.nist.csd.pm.pap.op.graph.GraphOp.*; +import static org.junit.jupiter.api.Assertions.*; + +class GraphModificationAdjudicatorTest { + + PAP pap; + PDP pdp; + EPP epp; + + TestEventProcessor testEventProcessor; + GraphModificationAdjudicator ok; + GraphModificationAdjudicator fail; + + + @BeforeEach + void setup() throws PMException { + pap = new MemoryPAP(); + + pap.executePML(new UserContext("u1"), """ + create pc "pc1" + create pc "pc2" + create ua "ua1" in ["pc1"] + create ua "ua2" in ["pc1"] + create ua "ua3" in ["pc1"] + create ua "ua4" in ["pc1"] + create oa "oa1" in ["pc1"] + create oa "oa2" in ["pc1"] + + associate "ua1" and "oa1" with ["*a"] + associate "ua1" and "oa2" with ["*a"] + associate "ua1" and ADMIN_POLICY_OBJECT with ["*a"] + associate "ua3" and "ua1" with ["*a"] + associate "ua1" and "ua4" with ["*a"] + associate "ua1" and "ua3" with ["*a"] + + create u "u1" in ["ua1", "ua3"] + create u "u2" in ["ua2"] + create o "o1" in ["oa1"] + """); + + pdp = new PDP(pap); + epp = new EPP(pdp, pap); + + testEventProcessor = new TestEventProcessor(); + pdp.addEventListener(testEventProcessor); + + ok = new GraphModificationAdjudicator(new UserContext("u1"), pap, pdp); + fail = new GraphModificationAdjudicator(new UserContext("u2"), pap, pdp); + } + + @Test + void createPolicyClass() throws PMException { + assertDoesNotThrow(() -> ok.createPolicyClass("test")); + assertEquals( + new EventContext("u1", "", new CreatePolicyClassOp(), Map.of(NAME_OPERAND, "test")), + testEventProcessor.getEventContext() + ); + assertTrue(pap.query().graph().nodeExists("test")); + + assertThrows(UnauthorizedException.class, () -> fail.createPolicyClass("test")); + } + + @Test + void createUserAttribute() throws PMException { + assertDoesNotThrow(() -> ok.createUserAttribute("test", List.of("ua1"))); + assertEquals( + new EventContext("u1", "", new CreateUserAttributeOp(), Map.of(NAME_OPERAND, "test", DESCENDANTS_OPERAND, List.of("ua1"))), + testEventProcessor.getEventContext() + ); + assertTrue(pap.query().graph().nodeExists("test")); + + assertThrows(UnauthorizedException.class, () -> fail.createUserAttribute("test", List.of("ua1"))); + } + + @Test + void createObjectAttribute() throws PMException { + assertDoesNotThrow(() -> ok.createObjectAttribute("test", List.of("oa1"))); + assertEquals( + new EventContext("u1", "", new CreateObjectAttributeOp(), Map.of(NAME_OPERAND, "test", DESCENDANTS_OPERAND, List.of("oa1"))), + testEventProcessor.getEventContext() + ); + assertTrue(pap.query().graph().nodeExists("test")); + + assertThrows(UnauthorizedException.class, () -> fail.createObjectAttribute("test", List.of("oa1"))); + } + + @Test + void createObject() throws PMException { + assertDoesNotThrow(() -> ok.createObject("test", List.of("oa1"))); + assertEquals( + new EventContext("u1", "", new CreateObjectOp(), Map.of(NAME_OPERAND, "test", DESCENDANTS_OPERAND, List.of("oa1"))), + testEventProcessor.getEventContext() + ); + assertTrue(pap.query().graph().nodeExists("test")); + + assertThrows(UnauthorizedException.class, () -> fail.createObject("test", List.of("oa1"))); + } + + @Test + void createUser() throws PMException { + assertDoesNotThrow(() -> ok.createUser("test", List.of("ua1"))); + assertEquals( + new EventContext("u1", "", new CreateUserOp(), Map.of(NAME_OPERAND, "test", DESCENDANTS_OPERAND, List.of("ua1"))), + testEventProcessor.getEventContext() + ); + assertTrue(pap.query().graph().nodeExists("test")); + + assertThrows(UnauthorizedException.class, () -> fail.createUser("test", List.of("ua1"))); + } + + @Test + void setNodeProperties() throws PMException { + assertDoesNotThrow(() -> ok.setNodeProperties("o1", Map.of("a", "b"))); + assertEquals( + new EventContext("u1", "", new SetNodePropertiesOp(), Map.of(NAME_OPERAND, "o1", PROPERTIES_OPERAND, Map.of("a", "b"))), + testEventProcessor.getEventContext() + ); + assertTrue(pap.query().graph().getNode("o1").getProperties().equals(Map.of("a", "b"))); + + assertThrows(UnauthorizedException.class, () -> fail.setNodeProperties("o1", Map.of("a", "b"))); + } + + @Test + void deleteNodeOk() throws PMException { + assertDoesNotThrow(() -> ok.deleteNode("o1")); + assertEquals( + new EventContext("u1", "", new DeleteObjectOp(), Map.of(NAME_OPERAND, "o1", DESCENDANTS_OPERAND, Set.of("oa1"), TYPE_OPERAND, NodeType.O)), + testEventProcessor.getEventContext() + ); + assertDoesNotThrow(() -> ok.deleteNode("oa2")); + assertEquals( + new EventContext("u1", "", new DeleteObjectAttributeOp(), Map.of(NAME_OPERAND, "oa2", DESCENDANTS_OPERAND, Set.of("pc1"), TYPE_OPERAND, NodeType.OA)), + testEventProcessor.getEventContext() + ); + assertDoesNotThrow(() -> ok.deleteNode("ua4")); + assertEquals( + new EventContext("u1", "", new DeleteUserAttributeOp(), Map.of(NAME_OPERAND, "ua4", DESCENDANTS_OPERAND, Set.of("pc1"), TYPE_OPERAND, NodeType.UA)), + testEventProcessor.getEventContext() + ); + assertDoesNotThrow(() -> ok.deleteNode("pc2")); + assertEquals( + new EventContext("u1", "", new DeletePolicyClassOp(), Map.of(NAME_OPERAND, "pc2", TYPE_OPERAND, NodeType.PC, DESCENDANTS_OPERAND, Set.of())), + testEventProcessor.getEventContext() + ); + assertDoesNotThrow(() -> ok.deleteNode("u1")); + assertEquals( + new EventContext("u1", "", new DeleteUserOp(), Map.of(NAME_OPERAND, "u1", DESCENDANTS_OPERAND, Set.of("ua1", "ua3"), TYPE_OPERAND, NodeType.U)), + testEventProcessor.getEventContext() + ); + + assertFalse(pap.query().graph().nodeExists("o1")); + assertFalse(pap.query().graph().nodeExists("oa2")); + assertFalse(pap.query().graph().nodeExists("ua4")); + assertFalse(pap.query().graph().nodeExists("pc2")); + assertFalse(pap.query().graph().nodeExists("u1")); + } + + @Test + void deleteNodeFail() { + assertThrows(UnauthorizedException.class, () -> fail.deleteNode("pc1")); + assertThrows(UnauthorizedException.class, () -> fail.deleteNode("ua1")); + assertThrows(UnauthorizedException.class, () -> fail.deleteNode("oa1")); + assertThrows(UnauthorizedException.class, () -> fail.deleteNode("u1")); + assertThrows(UnauthorizedException.class, () -> fail.deleteNode("o1")); + } + + @Test + void assign() throws PMException { + assertDoesNotThrow(() -> ok.assign("o1", List.of("oa2"))); + assertEquals( + new EventContext("u1", "", new AssignOp(), Map.of(ASCENDANT_OPERAND, "o1", DESCENDANTS_OPERAND, List.of("oa2"))), + testEventProcessor.getEventContext() + ); + assertTrue(pap.query().graph().isAscendant("o1", "oa2")); + + assertThrows(UnauthorizedException.class, () -> fail.assign("o1", List.of("oa1"))); + } + + @Test + void deassign() throws PMException { + assertDoesNotThrow(() -> ok.deassign("u1", List.of("ua1"))); + assertEquals( + new EventContext("u1", "", new DeassignOp(), Map.of(ASCENDANT_OPERAND, "u1", DESCENDANTS_OPERAND, List.of("ua1"))), + testEventProcessor.getEventContext() + ); + assertFalse(pap.query().graph().isAscendant("u1", "ua1")); + + assertThrows(UnauthorizedException.class, () -> fail.deassign("o1", List.of("oa1"))); + } + + @Test + void associate() throws PMException { + assertDoesNotThrow(() -> ok.associate("ua1", "ua3", new AccessRightSet("assign"))); + assertEquals( + new EventContext("u1", "", new AssociateOp(), Map.of(UA_OPERAND, "ua1", TARGET_OPERAND, "ua3", ARSET_OPERAND, new AccessRightSet("assign"))), + testEventProcessor.getEventContext() + ); + assertTrue(pap.query().graph().getAssociationsWithSource("ua1").contains(new Association("ua1", "ua3", new AccessRightSet("assign")))); + + assertThrows(UnauthorizedException.class, () -> fail.associate("ua1", "ua3", new AccessRightSet("assign"))); + } + + @Test + void dissociate() throws PMException { + assertDoesNotThrow(() -> ok.dissociate("ua1", "ua3")); + assertEquals( + new EventContext("u1", "", new DissociateOp(), Map.of(UA_OPERAND, "ua1", TARGET_OPERAND, "ua3")), + testEventProcessor.getEventContext() + ); + assertFalse(pap.query().graph().getAssociationsWithSource("ua1").contains(new Association("ua1", "ua3", new AccessRightSet("*a")))); + + assertThrows(UnauthorizedException.class, () -> fail.dissociate("ua1", "ua3")); + } +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pdp/modification/ObligationsModificationAdjudicatorTest.java b/src/test/java/gov/nist/csd/pm/pdp/modification/ObligationsModificationAdjudicatorTest.java new file mode 100644 index 000000000..8a2a8342b --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pdp/modification/ObligationsModificationAdjudicatorTest.java @@ -0,0 +1,103 @@ +package gov.nist.csd.pm.pdp.modification; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.obligation.EventPattern; +import gov.nist.csd.pm.pap.obligation.Response; +import gov.nist.csd.pm.pap.obligation.Rule; +import gov.nist.csd.pm.epp.EPP; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.pml.pattern.OperationPattern; +import gov.nist.csd.pm.pap.pml.pattern.subject.SubjectPattern; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pdp.PDP; +import gov.nist.csd.pm.pdp.exception.UnauthorizedException; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.List; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.*; + +class ObligationsModificationAdjudicatorTest { + + PAP pap; + PDP pdp; + EPP epp; + + TestEventProcessor testEventProcessor; + ObligationsModificationAdjudicator ok; + ObligationsModificationAdjudicator fail; + + + @BeforeEach + void setup() throws PMException { + pap = new MemoryPAP(); + + pap.executePML(new UserContext("u1"), """ + create pc "pc1" + create ua "ua1" in ["pc1"] + create ua "ua2" in ["pc1"] + create oa "oa1" in ["pc1"] + create oa "oa2" in ["pc1"] + + associate "ua1" and "oa1" with ["*a"] + associate "ua1" and "oa2" with ["*a"] + associate "ua1" and ADMIN_POLICY_OBJECT with ["*a"] + + create u "u1" in ["ua1"] + create u "u2" in ["ua2"] + create o "o1" in ["oa1"] + """); + + pdp = new PDP(pap); + epp = new EPP(pdp, pap); + + testEventProcessor = new TestEventProcessor(); + pdp.addEventListener(testEventProcessor); + + ok = new ObligationsModificationAdjudicator(new UserContext("u1"), pap, pdp); + fail = new ObligationsModificationAdjudicator(new UserContext("u2"), pap, pdp); + } + + + @Test + void createObligation() { + assertDoesNotThrow(() -> ok.createObligation("u1", "name", List.of( + new Rule( + "rule1", + new EventPattern(new SubjectPattern(), new OperationPattern(), Map.of()), + new Response("e", List.of()) + ) + ))); + assertThrows(UnauthorizedException.class, () -> fail.createObligation("u1", "name", List.of( + new Rule( + "rule1", + new EventPattern(new SubjectPattern(), new OperationPattern(), Map.of()), + new Response("e", List.of()) + ) + ))); + } + + @Test + void deleteObligation() throws PMException { + ok.createObligation("u1", "test", List.of( + new Rule( + "rule1", + new EventPattern(new SubjectPattern(), new OperationPattern(), Map.of()), + new Response("e", List.of()) + ) + )); + ok.createObligation("u1", "test2", List.of( + new Rule( + "rule1", + new EventPattern(new SubjectPattern(), new OperationPattern(), Map.of()), + new Response("e", List.of()) + ) + )); + assertDoesNotThrow(() -> ok.deleteObligation("test")); + assertFalse(pap.query().prohibitions().getProhibitions().containsKey("test")); + assertThrows(UnauthorizedException.class, () -> fail.deleteObligation("test2")); + } +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pdp/modification/OperationsModificationAdjudicatorTest.java b/src/test/java/gov/nist/csd/pm/pdp/modification/OperationsModificationAdjudicatorTest.java new file mode 100644 index 000000000..b1d8aa863 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pdp/modification/OperationsModificationAdjudicatorTest.java @@ -0,0 +1,125 @@ +package gov.nist.csd.pm.pdp.modification; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.obligation.EventContext; +import gov.nist.csd.pm.epp.EPP; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.op.Operation; +import gov.nist.csd.pm.pap.op.operation.CreateAdminOperationOp; +import gov.nist.csd.pm.pap.op.operation.DeleteAdminOperationOp; +import gov.nist.csd.pm.pap.op.operation.SetResourceOperationsOp; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pdp.PDP; +import gov.nist.csd.pm.pdp.exception.UnauthorizedException; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.Map; + +import static gov.nist.csd.pm.pap.op.Operation.NAME_OPERAND; +import static gov.nist.csd.pm.pap.op.operation.CreateAdminOperationOp.OPERATION_OPERAND; +import static gov.nist.csd.pm.pap.op.operation.SetResourceOperationsOp.OPERATIONS_OPERAND; +import static org.junit.jupiter.api.Assertions.*; + +class OperationsModificationAdjudicatorTest { + + PAP pap; + PDP pdp; + EPP epp; + + TestEventProcessor testEventProcessor; + OperationsModificationAdjudicator ok; + OperationsModificationAdjudicator fail; + + + @BeforeEach + void setup() throws PMException { + pap = new MemoryPAP(); + + pap.executePML(new UserContext("u1"), """ + create pc "pc1" + + create ua "ua1" in ["pc1"] + create ua "ua2" in ["pc1"] + + create oa "oa1" in ["pc1"] + + associate "ua1" and "oa1" with ["*a"] + associate "ua1" and ADMIN_POLICY_OBJECT with ["*a"] + + create u "u1" in ["ua1"] + create u "u2" in ["ua2"] + create o "o1" in ["oa1"] + """); + + pdp = new PDP(pap); + epp = new EPP(pdp, pap); + + testEventProcessor = new TestEventProcessor(); + pdp.addEventListener(testEventProcessor); + + ok = new OperationsModificationAdjudicator(new UserContext("u1"), pap, pdp); + fail = new OperationsModificationAdjudicator(new UserContext("u2"), pap, pdp); + } + + + @Test + void setResourceOperations() throws PMException { + assertDoesNotThrow(() -> ok.setResourceOperations(new AccessRightSet("read"))); + assertEquals( + new EventContext("u1", "", new SetResourceOperationsOp(), Map.of(OPERATIONS_OPERAND, new AccessRightSet("read"))), + testEventProcessor.getEventContext() + ); + assertEquals(new AccessRightSet("read"), pap.query().operations().getResourceOperations()); + assertThrows(UnauthorizedException.class, () -> fail.setResourceOperations(new AccessRightSet("read"))); + } + + @Test + void createAdminOperation() throws PMException { + Operation op1 = new Operation<>("op1") { + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { + + } + + @Override + public Void execute(PAP pap, Map operands) throws PMException { + return null; + } + }; + + assertDoesNotThrow(() -> ok.createAdminOperation(op1)); + assertEquals( + new EventContext("u1", "", new CreateAdminOperationOp(), Map.of(OPERATION_OPERAND, op1)), + testEventProcessor.getEventContext() + ); + assertTrue(pap.query().operations().getAdminOperationNames().contains("op1")); + assertThrows(UnauthorizedException.class, () -> fail.createAdminOperation(op1)); + } + + @Test + void deleteAdminOperation() throws PMException { + Operation op1 = new Operation<>("op1") { + @Override + public void canExecute(PAP pap, UserContext userCtx, Map operands) throws PMException { + + } + + @Override + public Void execute(PAP pap, Map operands) throws PMException { + return null; + } + }; + ok.createAdminOperation(op1); + + assertDoesNotThrow(() -> ok.deleteAdminOperation("op1")); + assertEquals( + new EventContext("u1", "", new DeleteAdminOperationOp(), Map.of(NAME_OPERAND, "op1")), + testEventProcessor.getEventContext() + ); + + assertThrows(UnauthorizedException.class, () -> fail.deleteAdminOperation("op1")); + } +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pdp/modification/ProhibitionsModificationAdjudicatorTest.java b/src/test/java/gov/nist/csd/pm/pdp/modification/ProhibitionsModificationAdjudicatorTest.java new file mode 100644 index 000000000..8aea5da41 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pdp/modification/ProhibitionsModificationAdjudicatorTest.java @@ -0,0 +1,165 @@ +package gov.nist.csd.pm.pdp.modification; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.obligation.EventContext; +import gov.nist.csd.pm.pap.prohibition.ContainerCondition; +import gov.nist.csd.pm.pap.prohibition.ProhibitionSubject; +import gov.nist.csd.pm.epp.EPP; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.op.prohibition.CreateProhibitionOp; +import gov.nist.csd.pm.pap.op.prohibition.DeleteProhibitionOp; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pdp.PDP; +import gov.nist.csd.pm.pdp.exception.UnauthorizedException; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.List; +import java.util.Map; + +import static gov.nist.csd.pm.pap.op.Operation.NAME_OPERAND; +import static gov.nist.csd.pm.pap.op.prohibition.ProhibitionOp.*; +import static org.junit.jupiter.api.Assertions.*; + +class ProhibitionsModificationAdjudicatorTest { + + PAP pap; + PDP pdp; + EPP epp; + + TestEventProcessor testEventProcessor; + ProhibitionsModificationAdjudicator ok; + ProhibitionsModificationAdjudicator fail; + + @BeforeEach + void setup() throws PMException { + pap = new MemoryPAP(); + + pap.executePML(new UserContext("u1"), """ + create pc "pc1" + create ua "ua1" in ["pc1"] + create ua "ua2" in ["pc1"] + create oa "oa1" in ["pc1"] + create oa "oa2" in ["pc1"] + + associate "ua1" and "oa1" with ["*a"] + associate "ua1" and "oa2" with ["*a"] + associate "ua1" and ADMIN_POLICY_OBJECT with ["*a"] + associate "ua1" and "ua2" with ["*a"] + + create u "u1" in ["ua1"] + create u "u2" in ["ua2"] + create o "o1" in ["oa1"] + """); + + pdp = new PDP(pap); + epp = new EPP(pdp, pap); + + testEventProcessor = new TestEventProcessor(); + pdp.addEventListener(testEventProcessor); + + ok = new ProhibitionsModificationAdjudicator(new UserContext("u1"), pap, pdp); + fail = new ProhibitionsModificationAdjudicator(new UserContext("u2"), pap, pdp); + } + + @Test + void createProhibition() throws PMException { + assertDoesNotThrow(() -> ok.createProhibition( + "pro1", + new ProhibitionSubject("u2", ProhibitionSubject.Type.USER), + new AccessRightSet("assign"), + true, + List.of(new ContainerCondition("oa1", false)) + )); + assertEquals( + new EventContext( + "u1", "", + new CreateProhibitionOp(), + Map.of( + NAME_OPERAND, "pro1", + SUBJECT_OPERAND, new ProhibitionSubject("u2", ProhibitionSubject.Type.USER), + ARSET_OPERAND, new AccessRightSet("assign"), + INTERSECTION_OPERAND, true, + CONTAINERS_OPERAND, List.of(new ContainerCondition("oa1", false)) + ) + ), + testEventProcessor.getEventContext() + ); + + assertTrue(pap.query().prohibitions().getProhibitions().containsKey("u2")); + + assertDoesNotThrow(() -> ok.createProhibition( + "pro2", + new ProhibitionSubject("123", ProhibitionSubject.Type.PROCESS), + new AccessRightSet("assign"), + true, + List.of(new ContainerCondition("oa1", true)) + )); + assertEquals( + new EventContext( + "u1", "", + new CreateProhibitionOp(), + Map.of( + NAME_OPERAND, "pro2", + SUBJECT_OPERAND, new ProhibitionSubject("123", ProhibitionSubject.Type.PROCESS), + ARSET_OPERAND, new AccessRightSet("assign"), + INTERSECTION_OPERAND, true, + CONTAINERS_OPERAND, List.of(new ContainerCondition("oa1", true)) + ) + ), + testEventProcessor.getEventContext() + ); + + assertTrue(pap.query().prohibitions().getProhibitions().containsKey("123")); + + + assertThrows(UnauthorizedException.class, () -> fail.createProhibition( + "pro1", + new ProhibitionSubject("u2", ProhibitionSubject.Type.USER), + new AccessRightSet("assign"), + true, + List.of(new ContainerCondition("oa1", false)) + )); + + assertThrows(UnauthorizedException.class, () -> fail.createProhibition( + "pro1", + new ProhibitionSubject("123", ProhibitionSubject.Type.PROCESS), + new AccessRightSet("assign"), + true, + List.of(new ContainerCondition("oa1", true)) + )); + } + + @Test + void deleteProhibition() throws PMException { + ok.createProhibition( + "pro1", + new ProhibitionSubject("u2", ProhibitionSubject.Type.USER), + new AccessRightSet("assign"), + true, + List.of(new ContainerCondition("oa1", false)) + ); + + assertThrows(UnauthorizedException.class, () -> fail.deleteProhibition("pro1")); + assertDoesNotThrow(() -> ok.deleteProhibition("pro1")); + + assertEquals( + new EventContext( + "u1", "", + new DeleteProhibitionOp(), + Map.of( + NAME_OPERAND, "pro1", + SUBJECT_OPERAND, new ProhibitionSubject("u2", ProhibitionSubject.Type.USER), + ARSET_OPERAND, new AccessRightSet("assign"), + INTERSECTION_OPERAND, true, + CONTAINERS_OPERAND, List.of(new ContainerCondition("oa1", false)) + ) + ), + testEventProcessor.getEventContext() + ); + + assertFalse(pap.query().prohibitions().getProhibitions().containsKey("u2")); + } +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pdp/modification/RoutinesModificationAdjudicatorTest.java b/src/test/java/gov/nist/csd/pm/pdp/modification/RoutinesModificationAdjudicatorTest.java new file mode 100644 index 000000000..ddbc1f1d7 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pdp/modification/RoutinesModificationAdjudicatorTest.java @@ -0,0 +1,102 @@ +package gov.nist.csd.pm.pdp.modification; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.obligation.EventContext; +import gov.nist.csd.pm.epp.EPP; +import gov.nist.csd.pm.impl.memory.pap.MemoryPAP; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.op.routine.CreateAdminRoutineOp; +import gov.nist.csd.pm.pap.op.routine.DeleteAdminRoutineOp; +import gov.nist.csd.pm.pap.query.UserContext; +import gov.nist.csd.pm.pap.routine.Routine; +import gov.nist.csd.pm.pdp.PDP; +import gov.nist.csd.pm.pdp.exception.UnauthorizedException; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.List; +import java.util.Map; + +import static gov.nist.csd.pm.pap.op.Operation.NAME_OPERAND; +import static gov.nist.csd.pm.pap.op.routine.CreateAdminRoutineOp.ROUTINE_OPERAND; +import static org.junit.jupiter.api.Assertions.*; + +class RoutinesModificationAdjudicatorTest { + + PAP pap; + PDP pdp; + EPP epp; + + TestEventProcessor testEventProcessor; + RoutinesModificationAdjudicator ok; + RoutinesModificationAdjudicator fail; + + + @BeforeEach + void setup() throws PMException { + pap = new MemoryPAP(); + + pap.executePML(new UserContext("u1"), """ + create pc "pc1" + + create ua "ua1" in ["pc1"] + create ua "ua2" in ["pc1"] + + create oa "oa1" in ["pc1"] + + associate "ua1" and "oa1" with ["*a"] + associate "ua1" and ADMIN_POLICY_OBJECT with ["*a"] + + create u "u1" in ["ua1"] + create u "u2" in ["ua2"] + create o "o1" in ["oa1"] + """); + + pdp = new PDP(pap); + epp = new EPP(pdp, pap); + + testEventProcessor = new TestEventProcessor(); + pdp.addEventListener(testEventProcessor); + + ok = new RoutinesModificationAdjudicator(new UserContext("u1"), pap, pdp); + fail = new RoutinesModificationAdjudicator(new UserContext("u2"), pap, pdp); + } + + + @Test + void createAdminRoutine() throws PMException { + Routine routine1 = new Routine<>("routine1", List.of()) { + @Override + public Void execute(PAP pap, Map operands) throws PMException { + return null; + } + }; + + assertDoesNotThrow(() -> ok.createAdminRoutine(routine1)); + assertEquals( + new EventContext("u1", "", new CreateAdminRoutineOp(), Map.of(ROUTINE_OPERAND, routine1)), + testEventProcessor.getEventContext() + ); + assertTrue(pap.query().routines().getAdminRoutineNames().contains("routine1")); + assertThrows(UnauthorizedException.class, () -> fail.createAdminRoutine(routine1)); + } + + @Test + void deleteAdminRoutine() throws PMException { + Routine routine1 = new Routine<>("routine1", List.of()) { + @Override + public Void execute(PAP pap, Map operands) throws PMException { + return null; + } + }; + ok.createAdminRoutine(routine1); + + assertDoesNotThrow(() -> ok.deleteAdminRoutine("routine1")); + assertEquals( + new EventContext("u1", "", new DeleteAdminRoutineOp(), Map.of(NAME_OPERAND, "routine1")), + testEventProcessor.getEventContext() + ); + + assertThrows(UnauthorizedException.class, () -> fail.deleteAdminRoutine("routine1")); + } +} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/pdp/modification/TestEventProcessor.java b/src/test/java/gov/nist/csd/pm/pdp/modification/TestEventProcessor.java new file mode 100644 index 000000000..bf8f32b30 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/pdp/modification/TestEventProcessor.java @@ -0,0 +1,19 @@ +package gov.nist.csd.pm.pdp.modification; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.obligation.EventContext; +import gov.nist.csd.pm.epp.EventProcessor; + +public class TestEventProcessor implements EventProcessor { + + private EventContext eventContext; + + public EventContext getEventContext() { + return eventContext; + } + + @Override + public void processEvent(EventContext eventCtx) throws PMException { + this.eventContext = eventCtx; + } +} diff --git a/src/test/java/gov/nist/csd/pm/policy/PolicyEquals.java b/src/test/java/gov/nist/csd/pm/policy/PolicyEquals.java deleted file mode 100644 index 9c1522fcd..000000000 --- a/src/test/java/gov/nist/csd/pm/policy/PolicyEquals.java +++ /dev/null @@ -1,70 +0,0 @@ -package gov.nist.csd.pm.policy; - -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.graph.nodes.Node; -import gov.nist.csd.pm.policy.model.graph.nodes.NodeType; -import gov.nist.csd.pm.policy.model.graph.relationships.Association; -import gov.nist.csd.pm.policy.model.obligation.Obligation; -import gov.nist.csd.pm.policy.model.prohibition.Prohibition; - -import java.util.List; -import java.util.Map; - -import static gov.nist.csd.pm.policy.model.graph.nodes.Properties.NO_PROPERTIES; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; - -public class PolicyEquals { - - public static void check(Policy a, Policy b) throws PMException { - assertEquals(a.graph().getResourceAccessRights(), b.graph().getResourceAccessRights()); - - List aNodes = a.graph().search(NodeType.ANY, NO_PROPERTIES); - List bNodes = b.graph().search(NodeType.ANY, NO_PROPERTIES); - assertTrue(aNodes.containsAll(bNodes)); - assertTrue(bNodes.containsAll(aNodes)); - - for (String nodeName : aNodes) { - Node aNode = a.graph().getNode(nodeName); - Node bNode = b.graph().getNode(nodeName); - assertEquals(aNode, bNode); - - List aChildren = a.graph().getChildren(nodeName); - List aParents = a.graph().getParents(nodeName); - - List bChildren = b.graph().getChildren(nodeName); - List bParents = b.graph().getParents(nodeName); - - assertTrue(aChildren.containsAll(bChildren)); - assertTrue(bChildren.containsAll(aChildren)); - assertTrue(aParents.containsAll(bParents)); - assertTrue(bParents.containsAll(aParents)); - - List aSourceAssocs = a.graph().getAssociationsWithSource(nodeName); - List aTargetAssocs = a.graph().getAssociationsWithTarget(nodeName); - - List bSourceAssocs = b.graph().getAssociationsWithSource(nodeName); - List bTargetAssocs = b.graph().getAssociationsWithTarget(nodeName); - - assertTrue(aSourceAssocs.containsAll(bSourceAssocs)); - assertTrue(bSourceAssocs.containsAll(aSourceAssocs)); - assertTrue(aTargetAssocs.containsAll(bTargetAssocs)); - assertTrue(bTargetAssocs.containsAll(aTargetAssocs)); - } - - // check prohibitions - Map> aProhibitions = a.prohibitions().getAll(); - Map> bProhibitions = a.prohibitions().getAll(); - - assertTrue(aProhibitions.keySet().containsAll(bProhibitions.keySet())); - assertTrue(aProhibitions.values().containsAll(bProhibitions.values())); - - // check obligations - List aObligations = a.obligations().getAll(); - List bObligations = b.obligations().getAll(); - - assertTrue(aObligations.containsAll(bObligations)); - assertTrue(bObligations.containsAll(aObligations)); - } - -} diff --git a/src/test/java/gov/nist/csd/pm/policy/events/PolicyEventHandlerTest.java b/src/test/java/gov/nist/csd/pm/policy/events/PolicyEventHandlerTest.java deleted file mode 100644 index eee38d159..000000000 --- a/src/test/java/gov/nist/csd/pm/policy/events/PolicyEventHandlerTest.java +++ /dev/null @@ -1,202 +0,0 @@ -package gov.nist.csd.pm.policy.events; - -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.AccessRightSet; -import gov.nist.csd.pm.policy.model.access.UserContext; -import gov.nist.csd.pm.policy.model.obligation.Obligation; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -class PolicyEventHandlerTest { - - @Test - void testPolicyEventHandler() throws PMException { - TestPolicyEventHandler handler = new TestPolicyEventHandler(); - - handler.handle(new AddConstantEvent("", new Value())); - handler.handle(new AddFunctionEvent(new FunctionDefinitionStatement(null, null, null, List.of()))); - handler.handle(new AssignEvent("", "")); - handler.handle(new AssignToEvent("", "")); - handler.handle(new AssociateEvent("", "", new AccessRightSet())); - handler.handle(new BeginTxEvent()); - handler.handle(new CommitTxEvent()); - handler.handle(new CreateObjectAttributeEvent("", null, null, null)); - handler.handle(new CreateObjectEvent(null, null, null, null)); - handler.handle(new CreateObligationEvent(null, null, null)); - handler.handle(new CreatePolicyClassEvent(null, null)); - handler.handle(new CreateProhibitionEvent(null, null, null, false, null)); - handler.handle(new CreateUserAttributeEvent(null, null, null)); - handler.handle(new CreateUserEvent(null, null, null)); - handler.handle(new DeassignEvent("", "")); - handler.handle(new DeassignFromEvent("", "")); - handler.handle(new DeleteNodeEvent("")); - handler.handle(new DeleteObligationEvent(new Obligation(new UserContext(""), ""))); - handler.handle(new DeleteProhibitionEvent(null)); - handler.handle(new DissociateEvent("", "")); - handler.handle(new PolicySynchronizationEvent(null)); - handler.handle(new RemoveConstantEvent(null)); - handler.handle(new RemoveFunctionEvent(null)); - handler.handle(new RollbackTxEvent(null)); - handler.handle(new SetNodePropertiesEvent(null, null)); - handler.handle(new SetResourceAccessRightsEvent(null)); - handler.handle(new UpdateObligationEvent(null, null, null)); - handler.handle(new UpdateProhibitionEvent(null, null, null, false, null)); - - assertEquals(28, handler.count); - } - - class TestPolicyEventHandler extends PolicyEventHandler { - int count = 0; - TestPolicyEventHandler() {} - @Override - public void handleAddConstantEvent(AddConstantEvent e) { - count++; - } - - @Override - public void handleAddFunctionEvent(AddFunctionEvent e) { - count++; - } - - @Override - public void handleAssignEvent(AssignEvent e) { - count++; - } - - @Override - public void handleAssignToEvent(AssignToEvent e) { - count++; - } - - @Override - public void handleAssociateEvent(AssociateEvent e) { - count++; - } - - @Override - public void handleBeginTxEvent(BeginTxEvent e) { - count++; - } - - @Override - public void handleCommitTxEvent(CommitTxEvent e) { - count++; - } - - @Override - public void handleCreateNodeEvent(CreateNodeEvent e) { - count++; - } - - @Override - public void handleCreateObjectAttributeEvent(CreateObjectAttributeEvent e) { - count++; - } - - @Override - public void handleCreateObjectEvent(CreateObjectEvent e) { - count++; - } - - @Override - public void handleCreateObligationEvent(CreateObligationEvent e) { - count++; - } - - @Override - public void handleCreatePolicyClassEvent(CreatePolicyClassEvent e) { - count++; - } - - @Override - public void handleCreateProhibitionEvent(CreateProhibitionEvent e) { - count++; - } - - @Override - public void handleCreateUserAttributeEvent(CreateUserAttributeEvent e) { - count++; - } - - @Override - public void handleCreateUserEvent(CreateUserEvent e) { - count++; - } - - @Override - public void handleDeassignEvent(DeassignEvent e) { - count++; - } - - @Override - public void handleDeassignFromEvent(DeassignFromEvent e) { - count++; - } - - @Override - public void handleDeleteNodeEvent(DeleteNodeEvent e) { - count++; - } - - @Override - public void handleDeleteObligationEvent(DeleteObligationEvent e) { - count++; - } - - @Override - public void handleDeleteProhibitionEvent(DeleteProhibitionEvent e) { - count++; - } - - @Override - public void handleDissociateEvent(DissociateEvent e) { - count++; - } - - @Override - public void handlePolicySyncEvent(PolicySynchronizationEvent e) { - count++; - } - - @Override - public void handleRemoveConstantEvent(RemoveConstantEvent e) { - count++; - } - - @Override - public void handleRemoveFunctionEvent(RemoveFunctionEvent e) { - count++; - } - - @Override - public void handleRollbackTxEvent(RollbackTxEvent e) { - count++; - } - - @Override - public void handleSetNodePropertiesEvent(SetNodePropertiesEvent e) { - count++; - } - - @Override - public void handleSetResourceAccessRightsEvent(SetResourceAccessRightsEvent e) { - count++; - } - - @Override - public void handleUpdateObligationEvent(UpdateObligationEvent e) { - count++; - } - - @Override - public void handleUpdateProhibitionEvent(UpdateProhibitionEvent e) { - count++; - } - } - -} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/policy/model/obligation/ResponseTest.java b/src/test/java/gov/nist/csd/pm/policy/model/obligation/ResponseTest.java deleted file mode 100644 index dfea030b9..000000000 --- a/src/test/java/gov/nist/csd/pm/policy/model/obligation/ResponseTest.java +++ /dev/null @@ -1,47 +0,0 @@ -package gov.nist.csd.pm.policy.model.obligation; - -import gov.nist.csd.pm.epp.EPP; -import gov.nist.csd.pm.epp.EventContext; -import gov.nist.csd.pm.pap.PAP; -import gov.nist.csd.pm.pap.memory.MemoryPolicyStore; -import gov.nist.csd.pm.pdp.PDP; -import gov.nist.csd.pm.pdp.memory.MemoryPDP; -import gov.nist.csd.pm.policy.events.AssignToEvent; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.UserContext; -import org.junit.jupiter.api.Test; - -import static gov.nist.csd.pm.pap.SuperPolicy.SUPER_USER; -import static org.junit.jupiter.api.Assertions.*; - -class ResponseTest { - - @Test - void testResponseExecutionWithUserDefinedAndBuiltinPML() throws PMException { - String pml = """ - create pc 'pc1' - create oa 'oa1' in ['pc1'] - const x = "hello world" - function createX() { - create policy class x - } - - create obligation 'obl1' { - create rule 'rule1' - when any user - performs ['assign_to'] - on 'oa1' - do(ctx) { - createX() - } - } - """; - PAP pap = new PAP(new MemoryPolicyStore()); - pap.deserialize().fromPML(new UserContext(SUPER_USER), pml); - MemoryPDP pdp = new MemoryPDP(pap, false); - EPP epp = new EPP(pdp, pap); - epp.handlePolicyEvent(new EventContext(new UserContext("u1"), "oa1", new AssignToEvent("o1", "oa1"))); - assertTrue(pap.graph().nodeExists("hello world")); - } - -} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/policy/pml/CompileTest.java b/src/test/java/gov/nist/csd/pm/policy/pml/CompileTest.java deleted file mode 100644 index 1160b499e..000000000 --- a/src/test/java/gov/nist/csd/pm/policy/pml/CompileTest.java +++ /dev/null @@ -1,463 +0,0 @@ -package gov.nist.csd.pm.policy.pml; - -import gov.nist.csd.pm.pap.PAP; -import gov.nist.csd.pm.pap.memory.MemoryPolicyStore; -import gov.nist.csd.pm.policy.Policy; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.UserContext; -import gov.nist.csd.pm.policy.model.obligation.Obligation; -import gov.nist.csd.pm.policy.model.obligation.Response; -import gov.nist.csd.pm.policy.model.obligation.Rule; -import gov.nist.csd.pm.policy.model.obligation.event.EventPattern; -import gov.nist.csd.pm.policy.model.obligation.event.EventSubject; -import gov.nist.csd.pm.policy.model.obligation.event.Target; -import gov.nist.csd.pm.policy.pml.model.context.ExecutionContext; -import gov.nist.csd.pm.policy.pml.model.exception.PMLCompilationException; -import gov.nist.csd.pm.policy.pml.model.expression.*; -import gov.nist.csd.pm.policy.pml.model.scope.UnknownVariableInScopeException; -import gov.nist.csd.pm.policy.pml.statement.*; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import static gov.nist.csd.pm.pap.SuperPolicy.SUPER_USER; -import static org.junit.jupiter.api.Assertions.*; - -class CompileTest { - - @Test - void testCompileLet() throws PMException { - String pml = """ - let a = 'hello world' - let b = ['hello', 'world'] - let c = { - '1': '2', - '3': '4' - } - let d = {'1': '2', a: b} - let e = true - let f = c['1'] - let g = concat([f, ' ', a]) - let h = [] - """; - List stmts = test(pml, new PAP(new MemoryPolicyStore())); - VarStatement stmt = (VarStatement) stmts.get(0); - assertEquals("a", stmt.getVarName()); - Assertions.assertEquals("hello world", stmt.getExpression().getLiteral().getStringLiteral()); - - stmt = (VarStatement) stmts.get(1); - assertEquals("b", stmt.getVarName()); - Assertions.assertEquals(Type.array(Type.string()), stmt.getExpression().getLiteral().getArrayLiteral().getType()); - Assertions.assertArrayEquals(new Expression[]{ - new Expression(new Literal("hello")), - new Expression(new Literal("world")) - }, stmt.getExpression().getLiteral().getArrayLiteral().getArray()); - - stmt = (VarStatement) stmts.get(2); - assertEquals("c", stmt.getVarName()); - MapLiteral mapLiteral = stmt.getExpression().getLiteral().getMapLiteral(); - assertEquals(Type.map(Type.string(), Type.string()), mapLiteral.getType()); - Map actual = mapLiteral.getMap(); - - Expression k1 = new Expression(new Literal("1")); - Expression v1 = new Expression(new Literal("2")); - Expression k2 = new Expression(new Literal("3")); - Expression v2 = new Expression(new Literal("4")); - - Map expected = Map.of( - k1, v1, - k2, v2 - ); - assertEquals(2, actual.size()); - assertEquals(expected.get(k1), v1); - assertEquals(expected.get(k2), v2); - assertEquals(Type.map(Type.string(), Type.string()), mapLiteral.getType()); - - stmt = (VarStatement) stmts.get(3); - assertEquals("d", stmt.getVarName()); - mapLiteral = stmt.getExpression().getLiteral().getMapLiteral(); - assertEquals(Type.map(Type.string(), Type.any()), mapLiteral.getType()); - actual = mapLiteral.getMap(); - - k1 = new Expression(new Literal("1")); - v1 = new Expression(new Literal("2")); - k2 = new Expression(new VariableReference("a", Type.string())); - v2 = new Expression(new VariableReference("b", Type.array(Type.string()))); - - expected = Map.of( - k1, v1, - k2, v2 - ); - assertEquals(2, actual.size()); - assertEquals(expected.get(k1), v1); - assertEquals(expected.get(k2), v2); - assertEquals(Type.map(Type.string(), Type.any()), mapLiteral.getType()); - - stmt = (VarStatement) stmts.get(4); - assertEquals("e", stmt.getVarName()); - Assertions.assertTrue(stmt.getExpression().getLiteral().getBooleanLiteral()); - - stmt = (VarStatement) stmts.get(5); - assertEquals("f", stmt.getVarName()); - Assertions.assertEquals("c", stmt.getExpression().getVariableReference().getEntryReference().getVarRef().getID()); - Assertions.assertEquals(k1, stmt.getExpression().getVariableReference().getEntryReference().getKey()); - - stmt = (VarStatement) stmts.get(6); - assertEquals("g", stmt.getVarName()); - Expression expectedExpression = new Expression(new FunctionInvocationStatement("concat", Arrays.asList( - new Expression(new Literal(new ArrayLiteral( - new Expression[]{ - new Expression(new VariableReference("f", Type.string())), - new Expression(new Literal(" ")), - new Expression(new VariableReference("a", Type.string())) - }, - Type.string() - ))) - ))); - assertEquals(expectedExpression.toString(), stmt.getExpression().toString()); - - - stmt = (VarStatement) stmts.get(7); - assertEquals("h", stmt.getVarName()); - expectedExpression = new Expression(new Literal(new ArrayLiteral(Type.array(Type.any())))); - assertEquals(expectedExpression.toString(), stmt.getExpression().toString()); - Assertions.assertEquals(Type.any(), stmt.getExpression().getLiteral().getArrayLiteral().getType()); - } - - @Test - void testCompileErrors() { - String pml = """ - let a = concat('1') - let b = a['a'] - let c = {'a': 'b'} - let d = c[true] - let e = {'': '', ['']: {'': ''}, true: ''} - let a = b - a = b - """; - PMLCompilationException ex = assertThrows(PMLCompilationException.class, () -> test(pml, new PAP(new MemoryPolicyStore()))); - assertEquals(5, ex.getErrors().size(), ex.getErrors().toString()); - Assertions.assertTrue(ex.getErrors().get(0).errorMessage().contains("expected []string, got string")); - Assertions.assertTrue(ex.getErrors().get(1).errorMessage().contains("expected map or array type")); - Assertions.assertTrue(ex.getErrors().get(2).errorMessage().contains("expression type boolean not allowed, only: [string]")); - Assertions.assertTrue(ex.getErrors().get(3).errorMessage().contains("expected map keys to be of the same type but found")); - Assertions.assertTrue(ex.getErrors().get(4).errorMessage().contains("expected map keys to be of the same type but found")); - } - - @Test - void testConstErrors() { - String pml = """ - const a = 'hello world' - const a = 'test' - a = 'test' - """; - PMLCompilationException ex = assertThrows(PMLCompilationException.class, () -> test(pml, new PAP(new MemoryPolicyStore()))); - assertEquals(2, ex.getErrors().size(), ex.getErrors().toString()); - Assertions.assertTrue(ex.getErrors().get(0).errorMessage().contains("already defined")); - Assertions.assertTrue(ex.getErrors().get(1).errorMessage().contains("cannot reassign")); - } - - @Test - void testForeachCompileErrors() { - String pml = """ - foreach x, y in ['', ''] { - - } - """; - PMLCompilationException ex = assertThrows(PMLCompilationException.class, () -> test(pml, new PAP(new MemoryPolicyStore()))); - assertEquals(1, ex.getErrors().size()); - - String pml1 = """ - foreach x, y in {'k': 'v', 'k1': 'v1'} { - - } - """; - assertDoesNotThrow(() -> test(pml1, new PAP(new MemoryPolicyStore()))); - } - - @Test - void testForRangeCompileErrors() throws PMException { - String pml = """ - for i in range [1, 5] { - create policy class i - } - """; - PMLCompilationException ex = assertThrows(PMLCompilationException.class, () -> test(pml, new PAP(new MemoryPolicyStore()))); - assertEquals(1, ex.getErrors().size()); - Assertions.assertTrue(ex.getErrors().get(0).errorMessage().contains("number not allowed, only: [string]")); - } - - private List test(String pml, Policy policyAuthor) throws PMException { - return PMLCompiler.compilePML(policyAuthor, pml); - } - - @Test - void testMaps() { - String pml = """ - let m = {'k1': {'k2': 'v1'}} - let x = m['k1']['k2']['k3'] - """; - PMLCompilationException ex = assertThrows(PMLCompilationException.class, () -> test(pml, new PAP(new MemoryPolicyStore()))); - assertEquals(1, ex.getErrors().size()); - Assertions.assertTrue(ex.getErrors().get(0).errorMessage().contains("expected map or array type")); - - String pml1 = """ - let m = {'k1': {'k2': 'v1'}} - create policy class m['k1'] - """; - ex = assertThrows(PMLCompilationException.class, () -> test(pml1, new PAP(new MemoryPolicyStore()))); - assertEquals(1, ex.getErrors().size()); - Assertions.assertTrue(ex.getErrors().get(0).errorMessage().contains("expression type map[string]string not allowed, only: [string]")); - } - - @Test - void testMapsSuccess() throws PMException, UnknownVariableInScopeException { - String pml = """ - let m = {'k1': {'k1-1': {'k1-1-1': 'v1'}}} - let x = m['k1']['k1-1']['k1-1-1'] - create policy class x - """; - PAP pap = new PAP(new MemoryPolicyStore()); - List test = test(pml, new PAP(new MemoryPolicyStore())); - - ExecutionContext ctx = new ExecutionContext(new UserContext(SUPER_USER)); - PMLStatement stmt = test.get(0); - stmt.execute(ctx, pap); - Value m = ctx.scope().getValue("m"); - assertTrue(m.isMap()); - assertEquals(Type.string(), m.getType().getMapKeyType()); - assertEquals(Type.map(Type.string(), Type.map(Type.string(), Type.map(Type.string(), Type.string()))), m.getType()); - - stmt = test.get(1); - stmt.execute(ctx, pap); - Value x = ctx.scope().getValue("x"); - assertEquals(Type.string(), x.getType()); - assertEquals("v1", x.getStringValue()); - - stmt = test.get(2); - stmt.execute(ctx, pap); - } - - @Test - void testCompileObligation() throws PMException { - String pml = """ - create obligation 'test' { - create rule 'rule1' - when any user - performs ['create_object_attribute'] - on 'oa1' - do(event) { - create policy class event['eventName'] - let target = event['target'] - - create policy class concat([event['name'], '_test']) - set properties of event['event']['name'] to {'key': target} - - create policy class concat([event['userCtx']['user'], '_test']) - } - } - """; - - UserContext userCtx = new UserContext(SUPER_USER); - PAP pap = new PAP(new MemoryPolicyStore()); - ExecutionContext ctx = new ExecutionContext(userCtx); - pap.graph().createPolicyClass("pc1"); - pap.graph().createObjectAttribute("oa1", "pc1"); - List test = test(pml, pap); - assertEquals(1, test.size()); - - PMLStatement stmt = test.get(0); - stmt.execute(ctx, pap); - - assertEquals(1, pap.obligations().getAll().size()); - Obligation actual = pap.obligations().get("test"); - assertEquals(1, actual.getRules().size()); - assertEquals("test", actual.getLabel()); - assertEquals(userCtx, actual.getAuthor()); - - Rule rule = actual.getRules().get(0); - assertEquals("rule1", rule.getLabel()); - - EventPattern event = rule.getEventPattern(); - assertEquals(EventSubject.anyUser(), event.getSubject()); - assertTrue(event.getOperations().contains("create_object_attribute")); - assertEquals(Target.policyElement("oa1"), event.getTarget()); - - Response response = rule.getResponse(); - - List statements = response.getStatements(); - assertEquals(5, statements.size()); - - stmt = statements.get(0); - - Type evtCtxType = Type.map(Type.string(), Type.any()); - PMLStatement expected = new CreatePolicyStatement( - new Expression( - new VariableReference( - new EntryReference( - new VariableReference("event", evtCtxType), new Expression(new Literal("eventName")) - ), - Type.any() - ) - ) - ); - assertEquals(expected, stmt); - - stmt = statements.get(1); - expected = new VarStatement( - "target", - new Expression( - new VariableReference( - new EntryReference( - new VariableReference("event", evtCtxType), new Expression(new Literal("target")) - ), - Type.any() - ) - ), - false); - assertEquals(expected, stmt); - - stmt = statements.get(2); - expected = new CreatePolicyStatement( - new Expression( - new FunctionInvocationStatement( - "concat", - Arrays.asList(new Expression(new Literal(new ArrayLiteral( - new Expression[]{ - new Expression(new VariableReference(new EntryReference(new VariableReference("event", Type.any()), new Expression(new Literal("name"))), Type.any())), - new Expression(new Literal("_test")) - }, - Type.string() - ))))) - ) - ); - assertEquals(expected, stmt); - - stmt = statements.get(3); - HashMap exprMap = new HashMap<>(); - exprMap.put(new Expression(new Literal("key")), new Expression(new VariableReference("target", Type.any()))); - expected = new SetNodePropertiesStatement( - new Expression( - new VariableReference( - new EntryReference( - new VariableReference( - new EntryReference( - new VariableReference("event", Type.any()), - new Expression(new Literal("event")) - ), - Type.any() - ), - new Expression(new Literal("name")) - ), - Type.any() - ) - ), - new Expression(new Literal(new MapLiteral(exprMap, Type.string(), Type.any()))) - ); - assertEquals(expected, stmt); - - stmt = statements.get(4); - expected = new CreatePolicyStatement( - new Expression( - new FunctionInvocationStatement( - "concat", - Arrays.asList(new Expression(new Literal(new ArrayLiteral( - new Expression[]{ - new Expression( - new VariableReference( - new EntryReference( - new VariableReference( - new EntryReference( - new VariableReference("event", Type.any()), - new Expression(new Literal("userCtx")) - ), - Type.any() - ), - new Expression(new Literal("user")) - ), - Type.any() - ) - ), - new Expression(new Literal("_test")), - }, - Type.any() - ))))) - ) - ); - assertEquals(expected, stmt); - } - - @Test - void testScopeOrder() { - String pml = """ - let x = 'hello' - create policy class concat([x, ' ', y]) - let y = 'world' - """; - assertThrows(PMLCompilationException.class, () -> PMLCompiler.compilePML(new PAP(new MemoryPolicyStore()), pml)); - } - - @Test - void testEmptyMap() { - String pml = """ - function testFunc(map[string]string m) { - - } - - testFunc({}) - """; - assertDoesNotThrow(() -> PMLCompiler.compilePML(new PAP(new MemoryPolicyStore()), pml)); - } - - @Test - void testForLoopLocalVar() throws PMException { - String pml = """ - for i in range [1, 100] { - let x = i - create pc numToStr(x) - } - """; - PAP pap = new PAP(new MemoryPolicyStore()); - pap.deserialize().fromPML(new UserContext(SUPER_USER), pml); - assertEquals(101, pap.graph().getPolicyClasses().size()); - - String pml2 = """ - for i in range [1, 100] { - let x = i - create pc numToStr(x) - } - - create oa 'oa1' in x - """; - PAP pap2 = new PAP(new MemoryPolicyStore()); - assertThrows(PMLCompilationException.class, () -> pap2.deserialize().fromPML(new UserContext(SUPER_USER), pml2)); - - pml = """ - create pc 'pc1' - create oa 'oa1' in ['pc1'] - foreach child in getChildren('pc1') { - let x = 'pc2' - create pc x - } - """; - pap = new PAP(new MemoryPolicyStore()); - pap.deserialize().fromPML(new UserContext(SUPER_USER), pml); - assertTrue(pap.graph().nodeExists("pc2")); - - String pml3 = """ - foreach child in getChildren('pc1') { - let x = 'pc2' - create pc x - } - - create oa 'oa1' in x - """; - PAP pap3 = new PAP(new MemoryPolicyStore()); - assertThrows(PMLCompilationException.class, () -> pap3.deserialize().fromPML(new UserContext(SUPER_USER), pml3)); - - } -} diff --git a/src/test/java/gov/nist/csd/pm/policy/pml/ExecutionTest.java b/src/test/java/gov/nist/csd/pm/policy/pml/ExecutionTest.java deleted file mode 100644 index 4576d18bd..000000000 --- a/src/test/java/gov/nist/csd/pm/policy/pml/ExecutionTest.java +++ /dev/null @@ -1,467 +0,0 @@ -package gov.nist.csd.pm.policy.pml; - -import gov.nist.csd.pm.pap.memory.MemoryPolicyStore; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.UserContext; -import gov.nist.csd.pm.policy.model.graph.relationships.Association; -import gov.nist.csd.pm.policy.model.access.AccessRightSet; -import gov.nist.csd.pm.pap.PAP; -import org.junit.jupiter.api.Test; - -import java.util.Arrays; -import java.util.List; - -import static gov.nist.csd.pm.pap.SuperPolicy.SUPER_USER; -import static org.junit.jupiter.api.Assertions.*; - -public class ExecutionTest { - - static UserContext superUser = new UserContext(SUPER_USER); - - @Test - void testGraphPML() throws PMException { - PAP pap = new PAP(new MemoryPolicyStore()); - - String input = - """ - set resource access rights ['read', 'write'] - - create policy class 'pc1' - - set properties of 'pc1' to {'k': 'v'} - - create object attribute 'oa1' in ['pc1'] - create object attribute 'oa2' in ['pc1'] - create object attribute 'oa3' in ['pc1'] - - let parents = ['oa1', 'oa2', 'oa3'] - create object 'o1' in parents - - create user attribute 'ua1' in ['pc1'] - create user attribute 'ua2' in ['pc1'] - create user attribute 'ua3' in ['pc1'] - - let username = 'u1' - create user username in ['ua1'] - assign username to ['ua2', 'ua3'] - - associate 'ua1' and 'oa1' with ['read', 'write'] - associate 'ua2' and 'oa2' with ['read', 'write'] - associate 'ua3' and 'oa3' with ['read', 'write'] - """; - PMLExecutor.compileAndExecutePML(pap, superUser, input); - - assertTrue(pap.graph().nodeExists("pc1")); - assertTrue(pap.graph().nodeExists("oa1")); - assertTrue(pap.graph().nodeExists("oa2")); - assertTrue(pap.graph().nodeExists("oa3")); - assertTrue(pap.graph().nodeExists("ua1")); - assertTrue(pap.graph().nodeExists("ua2")); - assertTrue(pap.graph().nodeExists("ua3")); - assertTrue(pap.graph().nodeExists("o1")); - assertTrue(pap.graph().nodeExists("u1")); - - assertEquals("v", pap.graph().getNode("pc1").getProperties().get("k")); - - List children = pap.graph().getChildren("pc1"); - assertTrue(children.containsAll(Arrays.asList("ua1", "ua2", "ua3"))); - children = pap.graph().getChildren("pc1"); - assertTrue(children.containsAll(Arrays.asList("oa1", "oa2", "oa3"))); - - assertTrue(pap.graph().getParents("ua1").contains("pc1")); - assertTrue(pap.graph().getParents("ua2").contains("pc1")); - assertTrue(pap.graph().getParents("ua3").contains("pc1")); - assertTrue(pap.graph().getParents("oa1").contains("pc1")); - assertTrue(pap.graph().getParents("oa2").contains("pc1")); - assertTrue(pap.graph().getParents("oa3").contains("pc1")); - assertTrue(pap.graph().getParents("u1").containsAll(Arrays.asList("ua1", "ua2", "ua3"))); - assertTrue(pap.graph().getParents("o1").containsAll(Arrays.asList("oa1", "oa2", "oa3"))); - - assertEquals(new Association("ua1", "oa1", new AccessRightSet("read", "write")), - pap.graph().getAssociationsWithSource("ua1").get(0)); - assertEquals(new Association("ua2", "oa2", new AccessRightSet("read", "write")), - pap.graph().getAssociationsWithSource("ua2").get(0)); - assertEquals(new Association("ua3", "oa3", new AccessRightSet("read", "write")), - pap.graph().getAssociationsWithSource("ua3").get(0)); - - input = - """ - deassign 'u1' from ['ua1', 'ua2'] - """; - PMLExecutor.compileAndExecutePML(pap, superUser, input); - assertFalse(pap.graph().getParents("u1").containsAll(Arrays.asList("ua1", "ua2"))); - assertFalse(pap.graph().getChildren("ua1").contains("u1")); - assertFalse(pap.graph().getChildren("ua2").contains("u1")); - - input = - """ - delete user 'u1' - """; - PMLExecutor.compileAndExecutePML(pap, superUser, input); - assertFalse(pap.graph().nodeExists("u1")); - - input = - """ - deassign 'o1' from ['oa1'] - """; - PMLExecutor.compileAndExecutePML(pap, superUser, input); - assertFalse(pap.graph().getParents("oa1").contains("oa1")); - assertFalse(pap.graph().getChildren("oa1").contains("o1")); - - input = - """ - delete object 'o1' - """; - PMLExecutor.compileAndExecutePML(pap, superUser, input); - assertFalse(pap.graph().nodeExists("o1")); - - input = - """ - delete user attribute 'ua1' - delete user attribute 'ua2' - delete user attribute 'ua3' - """; - PMLExecutor.compileAndExecutePML(pap, superUser, input); - assertFalse(pap.graph().nodeExists("ua1")); - assertFalse(pap.graph().nodeExists("ua2")); - assertFalse(pap.graph().nodeExists("ua3")); - - - input = - """ - delete object attribute 'oa1' - delete object attribute 'oa2' - delete object attribute 'oa3' - """; - PMLExecutor.compileAndExecutePML(pap, superUser, input); - assertFalse(pap.graph().nodeExists("oa1")); - assertFalse(pap.graph().nodeExists("oa2")); - assertFalse(pap.graph().nodeExists("oa3")); - - input = - """ - delete policy class 'pc1' - """; - PMLExecutor.compileAndExecutePML(pap, superUser, input); - assertFalse(pap.graph().nodeExists("pc1")); - } - - @Test - void testIf() throws PMException { - PAP pap = new PAP(new MemoryPolicyStore()); - String input = """ - let x = 'test' - let y = 'test' - if equals(x, y) { - create policy class 'pc1' - } - """; - PMLExecutor.compileAndExecutePML(pap, superUser, input); - assertTrue(pap.graph().nodeExists("pc1")); - - input = """ - let x = 'test' - let y = 'test' - let z = 'test1' - if equals(x, z) { - create policy class 'pc1' - } else if equals(x, y) { - create policy class 'pc2' - } - """; - pap = new PAP(new MemoryPolicyStore()); - PMLExecutor.compileAndExecutePML(pap, superUser, input); - - assertFalse(pap.graph().nodeExists("pc1")); - assertTrue(pap.graph().nodeExists("pc2")); - - input = """ - let x = 'test' - let y = 'test1' - let z = 'test2' - if equals(x, z) { - create policy class 'pc1' - } else if equals(x, y) { - create policy class 'pc2' - } else { - create policy class 'pc3' - } - """; - pap = new PAP(new MemoryPolicyStore()); - PMLExecutor.compileAndExecutePML(pap, superUser, input); - - assertFalse(pap.graph().nodeExists("pc1")); - assertFalse(pap.graph().nodeExists("pc2")); - assertTrue(pap.graph().nodeExists("pc3")); - - input = """ - let x = 'test' - let y = 'test1' - let z = 'test2' - if equals(x, y) { - create policy class 'pc1' - } else { - create policy class 'pc2' - } - """; - pap = new PAP(new MemoryPolicyStore()); - PMLExecutor.compileAndExecutePML(pap, superUser, input); - - assertFalse(pap.graph().nodeExists("pc1")); - assertTrue(pap.graph().nodeExists("pc2")); - - input = """ - let x = 'test' - let y = 'test1' - let z = 'test2' - if !equals(x, y) { - create policy class 'pc1' - } else { - create policy class 'pc2' - } - """; - pap = new PAP(new MemoryPolicyStore()); - PMLExecutor.compileAndExecutePML(pap, superUser, input); - - assertTrue(pap.graph().nodeExists("pc1")); - assertFalse(pap.graph().nodeExists("pc2")); - } - - @Test - void testForeach() throws PMException { - PAP pap = new PAP(new MemoryPolicyStore()); - String input = """ - foreach x in ['pc1', 'pc2', 'pc3'] { - create policy class x - } - """; - PMLExecutor.compileAndExecutePML(pap, superUser, input); - - assertTrue(pap.graph().nodeExists("pc1")); - assertTrue(pap.graph().nodeExists("pc2")); - assertTrue(pap.graph().nodeExists("pc3")); - - input = """ - let m = {'k1': 'pc1', 'k2': 'pc2', 'k3': 'pc3'} - foreach x in m { - create policy class m[x] - } - """; - pap = new PAP(new MemoryPolicyStore()); - PMLExecutor.compileAndExecutePML(pap, superUser, input); - - assertTrue(pap.graph().nodeExists("pc1")); - assertTrue(pap.graph().nodeExists("pc2")); - assertTrue(pap.graph().nodeExists("pc3")); - - input = """ - foreach x, y in {'k1': ['pc1', 'pc2'], 'k2': ['pc3']} { - foreach z in y { - create policy class z - } - } - """; - pap = new PAP(new MemoryPolicyStore()); - PMLExecutor.compileAndExecutePML(pap, superUser, input); - - assertTrue(pap.graph().nodeExists("pc1")); - assertTrue(pap.graph().nodeExists("pc2")); - assertTrue(pap.graph().nodeExists("pc3")); - - input = """ - foreach x, y in {'k1': ['pc1', 'pc2'], 'k2': ['pc3']} { - foreach z in y { - create policy class z - break - } - } - """; - pap = new PAP(new MemoryPolicyStore()); - PMLExecutor.compileAndExecutePML(pap, superUser, input); - - assertTrue(pap.graph().nodeExists("pc1")); - assertFalse(pap.graph().nodeExists("pc2")); - assertTrue(pap.graph().nodeExists("pc3")); - - input = """ - foreach x, y in {'k1': ['pc1', 'pc2'], 'k2': ['pc3']} { - foreach z in y { - continue - create policy class z - } - } - """; - pap = new PAP(new MemoryPolicyStore()); - PMLExecutor.compileAndExecutePML(pap, superUser, input); - - assertFalse(pap.graph().nodeExists("pc1")); - assertFalse(pap.graph().nodeExists("pc2")); - assertFalse(pap.graph().nodeExists("pc3")); - - input = """ - let a = 'test' - let b = 'test' - foreach x in ['pc1', 'pc2', 'pc3'] { - if equals(a, b) { - a = 'test2' - continue - } - - create policy class x - } - """; - pap = new PAP(new MemoryPolicyStore()); - PMLExecutor.compileAndExecutePML(pap, superUser, input); - - assertFalse(pap.graph().nodeExists("pc1")); - assertTrue(pap.graph().nodeExists("pc2")); - assertTrue(pap.graph().nodeExists("pc3")); - } - - @Test - void testForRange() throws PMException { - String input = """ - for i in range [1, 5] { - create policy class numToStr(i) - } - """; - PAP pap = new PAP(new MemoryPolicyStore()); - PMLExecutor.compileAndExecutePML(pap, superUser, input); - - assertEquals(6, pap.graph().getPolicyClasses().size()); - assertTrue(pap.graph().getPolicyClasses().containsAll(List.of("1", "2", "3", "4", "5"))); - } - - @Test - void testFunction() throws PMException { - String input = """ - function testFunc(any x) { - create policy class x - } - - testFunc('pc1') - """; - PAP pap = new PAP(new MemoryPolicyStore()); - PMLExecutor.compileAndExecutePML(pap, superUser, input); - - assertTrue(pap.graph().nodeExists("pc1")); - - String input1 = """ - function testFunc(any x) { - create policy class x - } - - testFunc(['pc1']) - """; - PAP pap1 = new PAP(new MemoryPolicyStore()); - assertThrows(IllegalStateException.class, () -> PMLExecutor.compileAndExecutePML(pap1, superUser, input1)); - - input = """ - let x = 'hello' - function testFunc() { - x = concat([x, ' world']) - create policy class x - } - - testFunc() - """; - PMLExecutor.compileAndExecutePML(pap1, superUser, input); - assertTrue(pap1.graph().nodeExists("hello world")); - } - - @Test - void testChangeVariableValue() throws PMException { - String input = """ - let a = 'hello world' - const b = a - create policy class b - """; - PAP pap = new PAP(new MemoryPolicyStore()); - PMLExecutor.compileAndExecutePML(pap, superUser, input); - assertTrue(pap.graph().nodeExists("hello world")); - - PAP pap1 = new PAP(new MemoryPolicyStore()); - String input1 = """ - let a = 'hello world' - const b = a - a = 'test' - create policy class b - """; - PMLExecutor.compileAndExecutePML(pap1, superUser, input1); - assertFalse(pap.graph().nodeExists("test")); - } - - @Test - void testMaps() throws PMException { - String input = """ - let m = {'k1': {'k1-1': {'k1-1-1': 'v1'}}} - let x = m['k1']['k1-1']['k1-1-1'] - create policy class x - """; - PAP pap = new PAP(new MemoryPolicyStore()); - PMLExecutor.compileAndExecutePML(pap, superUser, input); - assertTrue(pap.graph().getPolicyClasses().contains("v1")); - } - - @Test - void testArrayWithLiteral() throws PMException { - String input = """ - set resource access rights ["read", "write"] - """; - PAP pap = new PAP(new MemoryPolicyStore()); - PMLExecutor.compileAndExecutePML(pap, superUser, input); - assertTrue(pap.graph().getResourceAccessRights().contains("read")); - - String input1 = """ - set resource access rights [["read", "write"], ["exec"]] - """; - assertThrows(PMException.class, () -> PMLExecutor.compileAndExecutePML(pap, superUser, input1)); - } - - @Test - void testDeleteNonExistentNode() throws PMException { - String input = """ - delete pc 'pc1' - """; - PAP pap = new PAP(new MemoryPolicyStore()); - assertDoesNotThrow(() -> PMLExecutor.compileAndExecutePML(pap, superUser, input)); - } - - @Test - void testDeleteProhibition() throws PMException { - PAP pap = new PAP(new MemoryPolicyStore()); - pap.graph().setResourceAccessRights(new AccessRightSet("read")); - pap.graph().createPolicyClass("pc1"); - pap.graph().createUserAttribute("ua1", "pc1"); - pap.graph().createObjectAttribute("oa1", "pc1"); - - String input = """ - create prohibition 'p1' - deny user attribute "ua1" - access rights ["read"] - on union of ["oa1"] - """; - pap.executePML(superUser, input); - - input = """ - delete prohibition 'p1' - """; - pap.executePML(superUser, input); - assertFalse(pap.prohibitions().getAll().containsKey("p1")); - } - - @Test - void testArrayGetByIndex() throws PMException { - String s = """ - let x = ["1", "2", "3"] - create pc x[1] - - let y = [["1", "2", "3"]] - create pc y[0][0] - """; - PAP pap = new PAP(new MemoryPolicyStore()); - pap.executePML(new UserContext(SUPER_USER), s); - assertTrue(pap.graph().nodeExists("2")); - assertTrue(pap.graph().nodeExists("1")); - } -} diff --git a/src/test/java/gov/nist/csd/pm/policy/pml/ObligationTest.java b/src/test/java/gov/nist/csd/pm/policy/pml/ObligationTest.java deleted file mode 100644 index def89732f..000000000 --- a/src/test/java/gov/nist/csd/pm/policy/pml/ObligationTest.java +++ /dev/null @@ -1,213 +0,0 @@ -package gov.nist.csd.pm.policy.pml; - -import gov.nist.csd.pm.pap.PAP; -import gov.nist.csd.pm.pap.memory.MemoryPolicyStore; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.UserContext; -import gov.nist.csd.pm.policy.model.obligation.Obligation; -import gov.nist.csd.pm.policy.model.obligation.Response; -import gov.nist.csd.pm.policy.model.obligation.Rule; -import gov.nist.csd.pm.policy.model.obligation.event.EventPattern; -import gov.nist.csd.pm.policy.model.obligation.event.EventSubject; -import gov.nist.csd.pm.policy.model.obligation.event.Performs; -import gov.nist.csd.pm.policy.model.obligation.event.Target; -import gov.nist.csd.pm.policy.pml.model.expression.*; -import gov.nist.csd.pm.policy.pml.statement.*; -import org.junit.jupiter.api.Test; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; - -import static gov.nist.csd.pm.pap.SuperPolicy.SUPER_USER; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; - -public class ObligationTest { - - @Test - void testObligation() throws PMException { - PAP pap = new PAP(new MemoryPolicyStore()); - pap.graph().createPolicyClass("pc1"); - pap.graph().createObjectAttribute("oa1", "pc1"); - - String input = """ - create policy class 'pc1' - create oa 'oa1' in ['pc1'] - create obligation 'obligation1' { - create rule 'rule1' - when any user - performs ['test_event'] - on 'oa1' - do(evtCtx) { - create policy class evtCtx['eventName'] - - delete rule 'rule1' from obligation 'obligation1' - } - } - """; - pap.deserialize().fromPML(new UserContext(SUPER_USER), input); - - Obligation obligation1 = pap.obligations().get("obligation1"); - assertEquals("obligation1", obligation1.getLabel()); - assertEquals(1, obligation1.getRules().size()); - assertEquals(new UserContext(SUPER_USER), obligation1.getAuthor()); - - Rule rule = obligation1.getRules().get(0); - assertEquals("rule1", rule.getLabel()); - assertEquals(new EventPattern( - EventSubject.anyUser(), - Performs.events("test_event"), - Target.policyElement("oa1") - ), rule.getEventPattern()); - assertEquals(2, rule.getResponse().getStatements().size()); - } - - @Test - void testObligationComplex() throws PMException { - String pml = """ - create policy class 'pc1'; - create oa 'oa1' in ['pc1']; - - create obligation 'test' { - create rule 'rule1' - when any user - performs ['create_object_attribute'] - on 'oa1' - do(evtCtx) { - create policy class evtCtx['eventName']; - let target = evtCtx['target']; - - let event = evtCtx['event']; - create policy class concat([event['name'], '_test']); - set properties of event['name'] to {'key': target}; - - create policy class concat([evtCtx['userCtx']['user'], '_test']); - } - } - """; - - UserContext userCtx = new UserContext(SUPER_USER); - PAP pap = new PAP(new MemoryPolicyStore()); - pap.deserialize().fromPML(userCtx, pml); - - assertEquals(1, pap.obligations().getAll().size()); - Obligation actual = pap.obligations().get("test"); - assertEquals(1, actual.getRules().size()); - assertEquals("test", actual.getLabel()); - assertEquals(userCtx, actual.getAuthor()); - - Rule rule = actual.getRules().get(0); - assertEquals("rule1", rule.getLabel()); - - EventPattern event = rule.getEventPattern(); - assertEquals(EventSubject.anyUser(), event.getSubject()); - assertTrue(event.getOperations().contains("create_object_attribute")); - assertEquals(Target.policyElement("oa1"), event.getTarget()); - - Response response = rule.getResponse(); - assertEquals("evtCtx", response.getEventCtxVariable()); - - List statements = response.getStatements(); - assertEquals(6, statements.size()); - - PMLStatement stmt = statements.get(0); - Type evtCtxType = Type.map(Type.string(), Type.any()); - PMLStatement expected = new CreatePolicyStatement( - new Expression( - new VariableReference( - new EntryReference( - new VariableReference("evtCtx", evtCtxType), new Expression(new Literal("eventName")) - ), - Type.any() - ) - ) - ); - assertEquals(expected, stmt); - - stmt = statements.get(1); - expected = new VarStatement( - "target", - new Expression( - new VariableReference( - new EntryReference( - new VariableReference("evtCtx", evtCtxType), new Expression(new Literal("target")) - ), - Type.any() - ) - ), - false); - assertEquals(expected, stmt); - - stmt = statements.get(2); - expected = new VarStatement( - "event", - new Expression( - new VariableReference( - new EntryReference( - new VariableReference("evtCtx", evtCtxType), new Expression(new Literal("event")) - ), - Type.any() - ) - ), - false); - assertEquals(expected, stmt); - - stmt = statements.get(3); - expected = new CreatePolicyStatement( - new Expression( - new FunctionInvocationStatement( - "concat", - Arrays.asList(new Expression(new Literal(new ArrayLiteral( - new Expression[]{ - new Expression(new VariableReference(new EntryReference(new VariableReference("event", Type.any()), new Expression(new Literal("name"))), Type.any())), - new Expression(new Literal("_test")) - }, - Type.string() - ))))) - ) - ); - assertEquals(expected, stmt); - - stmt = statements.get(4); - HashMap exprMap = new HashMap<>(); - exprMap.put(new Expression(new Literal("key")), new Expression(new VariableReference("target", Type.any()))); - expected = new SetNodePropertiesStatement( - new Expression(new VariableReference(new EntryReference(new VariableReference("event", Type.any()), new Expression(new Literal("name"))), Type.any())), - new Expression(new Literal(new MapLiteral(exprMap, Type.string(), Type.any()))) - ); - assertEquals(expected, stmt); - - stmt = statements.get(5); - expected = new CreatePolicyStatement( - new Expression( - new FunctionInvocationStatement( - "concat", - Arrays.asList(new Expression(new Literal(new ArrayLiteral( - new Expression[]{ - new Expression( - new VariableReference( - new EntryReference( - new VariableReference( - new EntryReference( - new VariableReference("evtCtx", Type.map(Type.string(), Type.any())), - new Expression(new Literal("userCtx")) - ), - Type.any() - ), - new Expression(new Literal("user")) - ), - Type.any() - ) - ), - new Expression(new Literal("_test")) - }, - Type.any() - ))))) - ) - ); - assertEquals(expected, stmt); - } - - -} diff --git a/src/test/java/gov/nist/csd/pm/policy/pml/PMLExecutorTest.java b/src/test/java/gov/nist/csd/pm/policy/pml/PMLExecutorTest.java deleted file mode 100644 index 8d5a406a5..000000000 --- a/src/test/java/gov/nist/csd/pm/policy/pml/PMLExecutorTest.java +++ /dev/null @@ -1,68 +0,0 @@ -package gov.nist.csd.pm.policy.pml; - -import gov.nist.csd.pm.pap.PAP; -import gov.nist.csd.pm.pap.memory.MemoryPolicyStore; -import gov.nist.csd.pm.policy.pml.model.expression.Literal; -import gov.nist.csd.pm.policy.pml.model.expression.Type; -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.pml.model.function.FormalArgument; -import gov.nist.csd.pm.policy.pml.statement.Expression; -import gov.nist.csd.pm.policy.pml.statement.FunctionDefinitionStatement; -import gov.nist.csd.pm.policy.pml.statement.PMLStatement; -import gov.nist.csd.pm.policy.pml.statement.VarStatement; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.UserContext; -import org.junit.jupiter.api.Test; - -import java.util.List; -import java.util.Map; - -import static gov.nist.csd.pm.pap.SuperPolicy.SUPER_USER; -import static org.junit.jupiter.api.Assertions.*; - -class PMLExecutorTest { - - @Test - void testCustomBuiltinFunctions() throws PMException { - FunctionDefinitionStatement test1 = new FunctionDefinitionStatement.Builder("test1") - .returns(Type.voidType()) - .args( - new FormalArgument("a1", Type.string()) - ) - .executor((ctx, policy) -> { - return new Value("hello world"); - }) - .build(); - FunctionDefinitionStatement test2 = new FunctionDefinitionStatement.Builder("test2") - .returns(Type.voidType()) - .args( - new FormalArgument("a1", Type.string()) - ) - .body( - new VarStatement("test123", new Expression(new Literal("hello world")), true) - ) - .build(); - - PAP pap = new PAP(new MemoryPolicyStore()); - - String pml = """ - - test1('') - test2('') - - """; - - List statements = PMLCompiler.compilePML(pap, pml, test1, test2); - assertEquals(2, statements.size()); - - Map functions = pap.userDefinedPML().getFunctions(); - assertTrue(functions.isEmpty()); - - pap.deserialize().fromPML(new UserContext(SUPER_USER), pml, test1, test2); - assertEquals(2, statements.size()); - - functions = pap.userDefinedPML().getFunctions(); - assertTrue(functions.isEmpty()); - } - -} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/policy/pml/PMLFormatterTest.java b/src/test/java/gov/nist/csd/pm/policy/pml/PMLFormatterTest.java deleted file mode 100644 index 6b2c8d21b..000000000 --- a/src/test/java/gov/nist/csd/pm/policy/pml/PMLFormatterTest.java +++ /dev/null @@ -1,57 +0,0 @@ -package gov.nist.csd.pm.policy.pml; - -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.*; - -class PMLFormatterTest { - - private static final String expected = """ - set resource access rights ['read', 'write'] - create policy class 'pc1' - create oa 'oa1' in ['pc1'] - create ua 'ua1' in ['pc1'] - associate 'ua1' and 'oa1' with ['read', 'write'] - create obligation 'obl1' { - create rule 'rule1' - when any user - performs ['event1', 'event2'] - do(evtCtx) { - let event = evtCtx['event'] - if equals(event, 'event1') { - create policy class 'e1' - } else if equals(event, 'event2') { - create policy class 'e2' - } - } - } - """; - private static final String input = - "set resource access rights ['read', 'write']" + - "create policy class 'pc1'" + - "create oa 'oa1' in ['pc1']" + - "create ua 'ua1' in ['pc1']" + - "associate 'ua1' and 'oa1' with ['read', 'write']" + - "create obligation 'obl1' {" + - "create rule 'rule1'" + - " when any user" + - " performs" + - " ['event1'," + - " 'event2']" + - " do(evtCtx) {" + - " let event = evtCtx['event']" + - " if equals(event, 'event1') {" + - " create policy class 'e1'" + - " } else if equals(event, 'event2') {" + - " create policy class 'e2'" + - "}" + - "}" + - "}"; - - @Test - void testFormatWithObligation() { - String format = PMLFormatter.format(input); - assertEquals(expected, format); - } - -} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/policy/pml/PMLTest.java b/src/test/java/gov/nist/csd/pm/policy/pml/PMLTest.java deleted file mode 100644 index aa51ca8a1..000000000 --- a/src/test/java/gov/nist/csd/pm/policy/pml/PMLTest.java +++ /dev/null @@ -1,129 +0,0 @@ -package gov.nist.csd.pm.policy.pml; - -import gov.nist.csd.pm.pap.PAP; -import gov.nist.csd.pm.pap.memory.MemoryPolicyStore; -import gov.nist.csd.pm.policy.pml.model.exception.PMLCompilationException; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.UserContext; -import org.junit.jupiter.api.Test; - -import static gov.nist.csd.pm.pap.SuperPolicy.SUPER_USER; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; - -class PMLTest { - - @Test - void testBuiltinFunction() throws PMException, PMLCompilationException { - String input = """ - let x = concat(['hello', 'world']) - create policy class x - """; - PAP pap = new PAP(new MemoryPolicyStore()); - pap.deserialize().fromPML(new UserContext(SUPER_USER), input); - assertTrue(pap.graph().nodeExists("helloworld")); - } - - @Test - void testExpression() throws PMException, PMLCompilationException { - String input = """ - let a1 = 'test' - let a2 = ['1', '2', a1] - let a3 = {'1': '2', '3': a1} - - function testFunc(string x) string { - return concat([x, '_test']) - } - - let a4 = testFunc('test') - let a5 = testFunc(a4) - let a6 = a5 - let a7 = '1' - let a8 = a3[a7] - let a9 = a3['1'] - - create policy class a4 - create policy class a5 - create policy class concat(['test', a6]) - create policy class a8 - """; - PAP pap = new PAP(new MemoryPolicyStore()); - pap.deserialize().fromPML(new UserContext(SUPER_USER), input); - // 5 accounts for super policy class - assertEquals(5, pap.graph().getPolicyClasses().size()); - } - - @Test - void testCreatePolicy() throws PMException, PMLCompilationException { - String input = """ - create policy class 'pc1' - """; - PAP pap = new PAP(new MemoryPolicyStore()); - pap.deserialize().fromPML(new UserContext(SUPER_USER), input); - assertTrue(pap.graph().nodeExists("pc1")); - } - - @Test - void testCreateAttr() throws PMException, PMLCompilationException { - String input = """ - create policy class 'pc1' - create user attribute 'ua1' in ['pc1'] - create object attribute 'oa1' in ['pc1'] - """; - PAP pap = new PAP(new MemoryPolicyStore()); - pap.deserialize().fromPML(new UserContext(SUPER_USER), input); - assertTrue(pap.graph().nodeExists("ua1")); - assertTrue(pap.graph().getParents("ua1").contains("pc1")); - assertTrue(pap.graph().nodeExists("oa1")); - assertTrue(pap.graph().getParents("oa1").contains("pc1")); - assertTrue(pap.graph().getChildren("pc1").contains("ua1")); - assertTrue(pap.graph().getChildren("pc1").contains("oa1")); - } - - @Test - void testCreateUserObject() throws PMException, PMLCompilationException { - String input = """ - create policy class 'pc1' - create user attribute 'ua1' in ['pc1'] - create object attribute 'oa1' in ['pc1'] - create user 'u1' in ['ua1'] - create object 'o1' in ['oa1'] - """; - PAP pap = new PAP(new MemoryPolicyStore()); - pap.deserialize().fromPML(new UserContext(SUPER_USER), input); - assertTrue(pap.graph().nodeExists("u1")); - assertTrue(pap.graph().getParents("u1").contains("ua1")); - assertTrue(pap.graph().nodeExists("o1")); - assertTrue(pap.graph().getParents("o1").contains("oa1")); - assertTrue(pap.graph().getChildren("oa1").contains("o1")); - assertTrue(pap.graph().getChildren("ua1").contains("u1")); - } - - @Test - void testSetNodeProperties() throws PMException, PMLCompilationException { - String input = """ - create policy class 'pc1' - create user attribute 'ua1' in ['pc1'] - set properties of 'ua1' to {'key': 'value'} - """; - PAP pap = new PAP(new MemoryPolicyStore()); - pap.deserialize().fromPML(new UserContext(SUPER_USER), input); - assertEquals("value", pap.graph().getNode("ua1").getProperties().get("key")); - } - - @Test - void testAssign() throws PMException, PMLCompilationException { - String input = """ - create policy class 'pc1' - create user attribute 'ua1' in ['pc1'] - create user attribute 'ua2' in ['pc1'] - create user attribute 'ua3' in ['pc1'] - assign 'ua1' to ['ua2', 'ua3'] - """; - PAP pap = new PAP(new MemoryPolicyStore()); - pap.deserialize().fromPML(new UserContext(SUPER_USER), input); - assertTrue(pap.graph().getParents("ua1").contains("ua2")); - assertTrue(pap.graph().getParents("ua1").contains("ua3")); - } - -} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/policy/pml/ProhibitionTest.java b/src/test/java/gov/nist/csd/pm/policy/pml/ProhibitionTest.java deleted file mode 100644 index 7d2bf20ea..000000000 --- a/src/test/java/gov/nist/csd/pm/policy/pml/ProhibitionTest.java +++ /dev/null @@ -1,60 +0,0 @@ -package gov.nist.csd.pm.policy.pml; - -import gov.nist.csd.pm.pap.PAP; -import gov.nist.csd.pm.pap.memory.MemoryPolicyStore; -import gov.nist.csd.pm.pdp.memory.MemoryPolicyReviewer; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.AccessRightSet; -import gov.nist.csd.pm.policy.model.access.UserContext; -import gov.nist.csd.pm.policy.model.prohibition.ContainerCondition; -import gov.nist.csd.pm.policy.model.prohibition.Prohibition; -import gov.nist.csd.pm.policy.model.prohibition.ProhibitionSubject; -import org.junit.jupiter.api.Test; - -import java.util.List; - -import static gov.nist.csd.pm.pap.SuperPolicy.SUPER_USER; -import static gov.nist.csd.pm.policy.model.access.AdminAccessRights.CREATE_POLICY_CLASS; -import static org.junit.jupiter.api.Assertions.*; - -class ProhibitionTest { - - @Test - void testCreateProhibition() throws PMException { - String input = """ - set resource access rights ['read', 'write'] - create pc 'pc1' - create oa 'oa1' in ['pc1'] - create ua 'ua1' in ['pc1'] - create u 'u1' in ['ua1'] - create u 'u2' in ['ua1'] - associate 'ua1' and 'oa1' with ['read', 'write'] - - create prohibition 'pro1' - deny user 'u1' - access rights [create_policy_class, 'write'] - on union of ['oa1'] - """; - PAP pap = new PAP(new MemoryPolicyStore()); - pap.deserialize().fromPML(new UserContext(SUPER_USER), input); - - Prohibition prohibition = pap.prohibitions().get("pro1"); - assertEquals("pro1", prohibition.getLabel()); - assertEquals(new ProhibitionSubject("u1", ProhibitionSubject.Type.USER), prohibition.getSubject()); - assertEquals(new AccessRightSet(CREATE_POLICY_CLASS, "write"), prohibition.getAccessRightSet()); - assertFalse(prohibition.isIntersection()); - assertEquals(List.of(new ContainerCondition("oa1", false)), prohibition.getContainers()); - - MemoryPolicyReviewer reviewer = new MemoryPolicyReviewer(pap); - AccessRightSet accessRights = reviewer.getAccessRights(new UserContext("u1"), "oa1"); - assertEquals(new AccessRightSet("read"), accessRights); - accessRights = reviewer.getAccessRights(new UserContext("u2"), "oa1"); - assertEquals(new AccessRightSet("read", "write"), accessRights); - - input = """ - delete prohibition 'pro1' - """; - pap.executePML(new UserContext(SUPER_USER), input); - assertTrue(pap.prohibitions().getWithSubject("u1").isEmpty()); - } -} diff --git a/src/test/java/gov/nist/csd/pm/policy/pml/expression/ValueTest.java b/src/test/java/gov/nist/csd/pm/policy/pml/expression/ValueTest.java deleted file mode 100644 index a862d577d..000000000 --- a/src/test/java/gov/nist/csd/pm/policy/pml/expression/ValueTest.java +++ /dev/null @@ -1,113 +0,0 @@ -package gov.nist.csd.pm.policy.pml.expression; - -import gov.nist.csd.pm.policy.pml.model.expression.Value; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.UserContext; -import gov.nist.csd.pm.policy.events.CreateObjectAttributeEvent; -import gov.nist.csd.pm.epp.EventContext; -import org.junit.jupiter.api.Test; - -import java.util.*; - -import static gov.nist.csd.pm.policy.model.access.AdminAccessRights.CREATE_OBJECT_ATTRIBUTE; -import static gov.nist.csd.pm.policy.model.graph.nodes.Properties.NO_PROPERTIES; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; - -class ValueTest { - - @Test - void testStringToValue() throws PMException { - Value value = Value.objectToValue("test"); - assertTrue(value.isString()); - assertEquals("test", value.getStringValue()); - } - - @Test - void testArrayToValue() throws PMException { - Value value = Value.objectToValue(List.of("hello", "world")); - assertTrue(value.isArray()); - assertEquals(new Value("hello"), value.getArrayValue().get(0)); - assertEquals(new Value("world"), value.getArrayValue().get(1)); - } - - @Test - void testBooleanToValue() throws PMException { - Value value = Value.objectToValue(true); - assertTrue(value.isBoolean()); - assertTrue(value.getBooleanValue()); - } - - @Test - void testListToValue() throws PMException { - Value value = Value.objectToValue(Arrays.asList("hello", "world")); - assertTrue(value.isArray()); - assertEquals(new Value("hello"), value.getArrayValue().get(0)); - assertEquals(new Value("world"), value.getArrayValue().get(1)); - } - - @Test - void testObjectToValue() throws PMException { - EventContext testEventCtx = new EventContext(new UserContext("testUser"), "target123", - new CreateObjectAttributeEvent("testOA", NO_PROPERTIES, "pc1")); - - Value objectToValue = Value.objectToValue(testEventCtx); - assertTrue(objectToValue.isMap()); - - Value key = new Value("userCtx"); - Value value = objectToValue.getMapValue().get(key); - assertTrue(value.isMap()); - assertEquals( - Map.of(new Value("user"), new Value("testUser"), new Value("process"), new Value("")), - value.getMapValue() - ); - - key = new Value("target"); - value = objectToValue.getMapValue().get(key); - assertTrue(value.isString()); - assertEquals( - "target123", - value.getStringValue() - ); - - key = new Value("eventName"); - value = objectToValue.getMapValue().get(key); - assertTrue(value.isString()); - assertEquals( - CREATE_OBJECT_ATTRIBUTE, - value.getStringValue() - ); - - key = new Value("event"); - value = objectToValue.getMapValue().get(key); - assertTrue(value.isMap()); - assertEquals( - Map.of(new Value("name"), new Value("testOA"), - new Value("type"), new Value("OA"), - new Value("properties"), new Value(new HashMap<>()), - new Value("initialParent"), new Value("pc1"), - new Value("additionalParents"), new Value(new ArrayList<>()), - new Value("eventName"), new Value("create_object_attribute") - ), - value.getMapValue() - ); - } - - @Test - void testToObject() throws PMException { - Value v = new Value("hello world"); - Object o = Value.valueToObject(v); - assertTrue(o instanceof String); - assertEquals("hello world", o); - - v = new Value(List.of(new Value("1"), new Value("2"))); - o = Value.valueToObject(v); - assertTrue(o instanceof List); - assertEquals(List.of("1", "2"), o); - - v = new Value(List.of(new Value(List.of(new Value("1"), new Value("2"))))); - o = Value.valueToObject(v); - assertTrue(o instanceof List); - assertEquals(List.of(List.of("1", "2")), o); - } -} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/policy/pml/statement/ExpressionTest.java b/src/test/java/gov/nist/csd/pm/policy/pml/statement/ExpressionTest.java deleted file mode 100644 index b099ac4bf..000000000 --- a/src/test/java/gov/nist/csd/pm/policy/pml/statement/ExpressionTest.java +++ /dev/null @@ -1,95 +0,0 @@ -package gov.nist.csd.pm.policy.pml.statement; - -import gov.nist.csd.pm.pap.memory.MemoryPolicyStore; -import gov.nist.csd.pm.policy.exceptions.PMException; -import gov.nist.csd.pm.policy.model.access.UserContext; -import gov.nist.csd.pm.policy.pml.PMLExecutor; -import org.junit.jupiter.api.Test; - -import static gov.nist.csd.pm.pap.SuperPolicy.SUPER_USER; -import static org.junit.jupiter.api.Assertions.*; - -class ExpressionTest { - - @Test - void testCompareExpression() throws PMException { - String pml = """ - let x = "hello world" - let y = "hello world" - if x == y { - create policy class 'pc1' - } - - x = "test" - if x != y { - create policy class 'pc2' - } - - x = ["1", "2"] - if x != y { - create policy class 'pc3' - } - - y = ["1", "2"] - if x == y { - create policy class 'pc4' - } - - x = {"1": "2"} - if x != y { - create policy class 'pc5' - } - - y = {"1": "2"} - if x == y { - create policy class 'pc6' - } - - """; - MemoryPolicyStore memoryPolicyStore = new MemoryPolicyStore(); - PMLExecutor.compileAndExecutePML(memoryPolicyStore, new UserContext(SUPER_USER), pml); - - assertTrue(memoryPolicyStore.graph().nodeExists("pc1")); - assertTrue(memoryPolicyStore.graph().nodeExists("pc2")); - assertTrue(memoryPolicyStore.graph().nodeExists("pc3")); - assertTrue(memoryPolicyStore.graph().nodeExists("pc4")); - assertTrue(memoryPolicyStore.graph().nodeExists("pc5")); - assertTrue(memoryPolicyStore.graph().nodeExists("pc6")); - } - - @Test - void testLogicalExpression() throws PMException { - String pml = """ - let x = "a" - let y = "a" - let z = "b" - - if x == y || x == z { - create pc 'pc1' - } - - if x == y && x == z { - create pc 'pc2' - } - - z = "a" - if x == y && x == z { - create pc 'pc3' - } - - x = "a" == "a" || "a" == "x" - if x { - create pc 'pc4' - } - """; - - MemoryPolicyStore memoryPolicyStore = new MemoryPolicyStore(); - PMLExecutor.compileAndExecutePML(memoryPolicyStore, new UserContext(SUPER_USER), pml); - - assertTrue(memoryPolicyStore.graph().nodeExists("pc1")); - assertFalse(memoryPolicyStore.graph().nodeExists("pc2")); - assertTrue(memoryPolicyStore.graph().nodeExists("pc3")); - assertTrue(memoryPolicyStore.graph().nodeExists("pc4")); - } - -} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/policy/tx/TxHandlerRunnerTest.java b/src/test/java/gov/nist/csd/pm/policy/tx/TxHandlerRunnerTest.java deleted file mode 100644 index 5f08b6df8..000000000 --- a/src/test/java/gov/nist/csd/pm/policy/tx/TxHandlerRunnerTest.java +++ /dev/null @@ -1,34 +0,0 @@ -package gov.nist.csd.pm.policy.tx; - -import gov.nist.csd.pm.pap.PAP; -import gov.nist.csd.pm.pap.memory.MemoryPolicyStore; -import gov.nist.csd.pm.policy.exceptions.NodeNameExistsException; -import gov.nist.csd.pm.policy.exceptions.PMException; -import org.junit.jupiter.api.Test; - -import static gov.nist.csd.pm.policy.tx.TxRunner.runTx; -import static org.junit.jupiter.api.Assertions.*; - -class TxHandlerRunnerTest { - - @Test - void testRunTx() throws PMException { - PAP pap = new PAP(new MemoryPolicyStore()); - runTx(pap, () -> { - pap.graph().createPolicyClass("pc1"); - }); - - assertTrue(pap.graph().nodeExists("pc1")); - - assertThrows(NodeNameExistsException.class, () -> runTx(pap, () -> { - pap.graph().deleteNode("pc1"); - pap.graph().createPolicyClass("pc2"); - // expect error and rollback - pap.graph().createPolicyClass("pc2"); - })); - - assertTrue(pap.graph().nodeExists("pc1")); - assertFalse(pap.graph().nodeExists("pc2")); - } - -} \ No newline at end of file diff --git a/src/test/java/gov/nist/csd/pm/util/PolicyEquals.java b/src/test/java/gov/nist/csd/pm/util/PolicyEquals.java new file mode 100644 index 000000000..f0839ffe7 --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/util/PolicyEquals.java @@ -0,0 +1,80 @@ +package gov.nist.csd.pm.util; + +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.graph.node.Node; +import gov.nist.csd.pm.pap.graph.node.NodeType; +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.graph.relationship.Association; +import gov.nist.csd.pm.pap.obligation.Obligation; +import gov.nist.csd.pm.pap.prohibition.Prohibition; +import gov.nist.csd.pm.pap.query.PolicyQuery; + +import java.util.Collection; +import java.util.HashSet; +import java.util.Map; + +import static gov.nist.csd.pm.pap.graph.node.Properties.NO_PROPERTIES; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class PolicyEquals { + + public static void assertPolicyEquals(PolicyQuery a, PolicyQuery b) throws PMException { + // check nodes + // assignments + // associations + Collection aNodes = new HashSet<>(a.graph().search(NodeType.ANY, NO_PROPERTIES)); + Collection bNodes = new HashSet<>(b.graph().search(NodeType.ANY, NO_PROPERTIES)); + assertEquals(aNodes, bNodes); + + for (String nodeName : aNodes) { + Node aNode = a.graph().getNode(nodeName); + Node bNode = b.graph().getNode(nodeName); + assertEquals(aNode, bNode); + + Collection aAscendants = new HashSet<>(a.graph().getAdjacentAscendants(nodeName)); + Collection aDescendants = new HashSet<>(a.graph().getAdjacentDescendants(nodeName)); + + Collection bAscendants = new HashSet<>(b.graph().getAdjacentAscendants(nodeName)); + Collection bDescendants = new HashSet<>(b.graph().getAdjacentDescendants(nodeName)); + + assertEquals(aAscendants, bAscendants); + assertEquals(aDescendants, bDescendants); + + Collection aSourceAssocs = new HashSet<>(a.graph().getAssociationsWithSource(nodeName)); + Collection aTargetAssocs = new HashSet<>(a.graph().getAssociationsWithTarget(nodeName)); + + Collection bSourceAssocs = new HashSet<>(b.graph().getAssociationsWithSource(nodeName)); + Collection bTargetAssocs = new HashSet<>(b.graph().getAssociationsWithTarget(nodeName)); + + assertEquals(aSourceAssocs, bSourceAssocs); + assertEquals(aTargetAssocs, bTargetAssocs); + } + + // check prohibitions + Map> aProhibitions = a.prohibitions().getProhibitions(); + Map> bProhibitions = b.prohibitions().getProhibitions(); + + assertEquals(aProhibitions, bProhibitions); + + // check obligations + Collection aObligations = new HashSet<>(a.obligations().getObligations()); + Collection bObligations = new HashSet<>(b.obligations().getObligations()); + + assertEquals(aObligations, bObligations); + + // check operations + AccessRightSet aResOps = a.operations().getResourceOperations(); + AccessRightSet bResOps = b.operations().getResourceOperations(); + assertEquals(aResOps, bResOps); + + Collection aOps = new HashSet<>(a.operations().getAdminOperationNames()); + Collection bOps = new HashSet<>(b.operations().getAdminOperationNames()); + assertEquals(aOps, bOps); + + // check routines + Collection aRoutines = new HashSet<>(a.routines().getAdminRoutineNames()); + Collection bRoutines = new HashSet<>(b.routines().getAdminRoutineNames()); + assertEquals(aRoutines, bRoutines); + } +} diff --git a/src/test/java/gov/nist/csd/pm/util/SamplePolicy.java b/src/test/java/gov/nist/csd/pm/util/SamplePolicy.java new file mode 100644 index 000000000..b2c975afe --- /dev/null +++ b/src/test/java/gov/nist/csd/pm/util/SamplePolicy.java @@ -0,0 +1,42 @@ +package gov.nist.csd.pm.util; + +import gov.nist.csd.pm.pap.graph.relationship.AccessRightSet; +import gov.nist.csd.pm.pap.PAP; +import gov.nist.csd.pm.pap.admin.AdminPolicyNode; +import gov.nist.csd.pm.pap.serialization.json.JSONDeserializer; +import gov.nist.csd.pm.pap.serialization.pml.PMLDeserializer; +import gov.nist.csd.pm.pap.exception.PMException; +import gov.nist.csd.pm.pap.query.UserContext; +import org.apache.commons.io.IOUtils; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.Collections; + +public class SamplePolicy { + + public static void loadSamplePolicyFromPML(PAP pap) throws IOException, PMException { + String s = IOUtils.resourceToString("sample/sample.pml", StandardCharsets.UTF_8, SamplePolicy.class.getClassLoader()); + + pap.modify().graph().createPolicyClass("test_pc"); + pap.modify().graph().createUserAttribute("ua1", Collections.singleton("test_pc")); + pap.modify().graph().createUser("u1", Collections.singleton("ua1")); + pap.modify().graph().associate("ua1", AdminPolicyNode.ADMIN_POLICY_OBJECT.nodeName(), new AccessRightSet("*")); + + pap.deserialize(new UserContext("u1"), s, new PMLDeserializer()); + } + + public static void loadSamplePolicyFromJSON(PAP pap) throws IOException, PMException { + String s = IOUtils.resourceToString("sample/sample.json", StandardCharsets.UTF_8, SamplePolicy.class.getClassLoader()); + pap.modify().graph().createPolicyClass("test_pc"); + pap.modify().graph().createUserAttribute("ua1", Collections.singleton("test_pc")); + pap.modify().graph().createUser("u1", Collections.singleton("ua1")); + pap.modify().graph().associate("ua1", AdminPolicyNode.ADMIN_POLICY_OBJECT.nodeName(), new AccessRightSet("*")); + + pap.deserialize(new UserContext("u1"), s, new JSONDeserializer()); + } + + public static String loadSamplePolicyPML() throws IOException { + return IOUtils.resourceToString("sample/sample.pml", StandardCharsets.UTF_8, SamplePolicy.class.getClassLoader()); + } +} diff --git a/src/test/resources/sample/sample.json b/src/test/resources/sample/sample.json new file mode 100644 index 000000000..6401e8114 --- /dev/null +++ b/src/test/resources/sample/sample.json @@ -0,0 +1,151 @@ +{ + "resourceOperations": [ + "read", + "delete_readme", + "delete_project", + "write" + ], + "graph": { + "pcs": { + "RBAC": {}, + "Location": {} + }, + "uas": { + "US user": { + "assignments": [ + "Location" + ], + "associations": { + "US project": [ + "*" + ] + } + }, + "reader": { + "assignments": [ + "employee" + ], + "associations": { + "project": [ + "read" + ] + } + }, + "EU user": { + "assignments": [ + "Location" + ], + "associations": { + "EU project": [ + "*" + ] + } + }, + "writer": { + "assignments": [ + "reader" + ], + "associations": { + "project": [ + "write" + ] + } + }, + "employee": { + "assignments": [ + "RBAC" + ] + }, + "deleter": { + "assignments": [ + "employee" + ], + "associations": { + "project": [ + "write" + ] + } + } + }, + "oas": { + "EU project": { + "assignments": [ + "Location" + ] + }, + "us_project1": { + "assignments": [ + "US project", + "project" + ] + }, + "project": { + "assignments": [ + "RBAC" + ] + }, + "eu_project1": { + "assignments": [ + "project", + "EU project" + ] + }, + "US project": { + "assignments": [ + "Location" + ] + } + }, + "users": { + "eu_writer1": { + "assignments": [ + "EU user", + "writer" + ] + }, + "us_writer1": { + "assignments": [ + "US user", + "writer" + ] + }, + "eu_reader1": { + "assignments": [ + "EU user", + "reader" + ] + }, + "us_reader1": { + "assignments": [ + "US user", + "reader" + ] + } + }, + "objects": { + "eu_project1 README": { + "assignments": [ + "eu_project1" + ] + }, + "us_project1 README": { + "assignments": [ + "us_project1" + ] + } + } + }, + "prohibitions": [], + "obligations": [ + "create obligation \"create us project admin\" {\n create rule \"us project\"\n when any user\n performs \"createProject\"\n on {\n locProjectAttr: \"US project\"\n }\n do (ctx) {\n createProjectAdmin(ctx.operands.projectName)\n }\n\n create rule \"eu project\"\n when any user\n performs \"createProject\"\n on {\n locProjectAttr: \"EU project\"\n }\n do (ctx) {\n createProjectAdmin(ctx.operands.projectName)\n }\n\n}" + ], + "operations": [ + "operation deleteProject(nodeop string projectName) {\n check \"delete_project\" on projectName\n} {\n delete OA projectName\n}", + "operation createProject(string projectName, nodeop string locProjectAttr) {\n check \"assign_to\" on \"project\"\n check \"assign_to\" on locProjectAttr\n} {\n create OA projectName in [\"project\", locProjectAttr]\n create O projectName + \" README\" in [projectName]\n}", + "operation deleteReadme(nodeop string projectReadme) {\n check \"delete_readme\" on projectReadme\n} {\n delete O projectReadme\n}", + "operation createProjectAdmin(string projectName) {\n uaName := projectName + \" admin\"\n create UA uaName in [\"writer\"]\n associate uaName and projectName with [\"*\"]\n create prohibition \"deny admin delete README\"\n deny UA uaName\n access rights [\"delete_readme\"]\n on union of [projectName]\n}" + ], + "routines": [ + "routine deleteAllProjects(string locProjectOA) {\n foreach project in getAdjacentAscendants(locProjectOA) {\n deleteReadme(project + \" README\")\n deleteProject(project)\n }\n}" + ] +} \ No newline at end of file diff --git a/src/test/resources/sample/sample.pml b/src/test/resources/sample/sample.pml index d380469fd..f2beb8894 100644 --- a/src/test/resources/sample/sample.pml +++ b/src/test/resources/sample/sample.pml @@ -1,33 +1,94 @@ -set resource access rights ["read", "write"] +set resource operations ["read", "write", "delete_project", "delete_readme"] -create policy class "pc1" -create user attribute "ua1" in ["pc1"] -create user attribute "oa1" in ["pc1"] -associate "ua1" and "oa1" with ["read", "write"] +create pc "RBAC" -create policy class "pc2" -create user attribute "ua2" in ["pc2"] -create object attribute "oa2" in ["pc2"] -associate "ua2" and "oa2" with ["read", "write"] + create UA "employee" in ["RBAC"] + create UA "reader" in ["employee"] + create UA "writer" in ["reader"] + create UA "deleter" in ["employee"] -create user "u1" in ["ua1", "ua2"] -create user "u2" in ["ua1", "ua2"] + create OA "project" in ["RBAC"] -create object "o1" in ["oa1", "oa2"] + associate "reader" and "project" with ["read"] + associate "writer" and "project" with ["write"] + associate "deleter" and "project" with ["write"] -create prohibition "u2-prohibition" -deny user "u2" -access rights ["write"] -on intersection of ["oa1", "oa2"] +create pc "Location" -create obligation "o1-obligation" { - create rule "o1-assignment-rule" - when any user - performs ["assign"] - on "o1" - do(evtCtx) { - let parent = evtCtx["parent"] - associate "ua1" and parent with ["read", "write"] - associate "ua2" and parent with ["read", "write"] + create UA "US user" in ["Location"] + create UA "EU user" in ["Location"] + + create OA "US project" in ["Location"] + create OA "EU project" in ["Location"] + + associate "US user" and "US project" with ["*"] + associate "EU user" and "EU project" with ["*"] + +create user "us_reader1" in ["reader", "US user"] +create user "us_writer1" in ["writer", "US user"] + +create user "eu_reader1" in ["reader", "EU user"] +create user "eu_writer1" in ["writer", "EU user"] + +createProject("us_project1", "US project") +createProject("eu_project1", "EU project") + +routine deleteAllProjects(string locProjectOA) { + foreach project in getAdjacentAscendants(locProjectOA) { + deleteReadme(project + " README") + deleteProject(project) } } + +operation deleteReadme(nodeop string projectReadme) { + check "delete_readme" on projectReadme +} { + delete object projectReadme +} + +operation deleteProject(nodeop string projectName) { + check "delete_project" on projectName +} { + delete oa projectName +} + +operation createProject(string projectName, nodeop string locProjectAttr) { + check "assign_to" on "project" + check "assign_to" on locProjectAttr +} { + create oa projectName in ["project", locProjectAttr] + create o projectName + " README" in [projectName] +} + +operation createProjectAdmin(string projectName) { + uaName := projectName + " admin" + create UA uaName in ["writer"] + associate uaName and projectName with ["*"] + + create prohibition "deny admin delete README" + deny user attribute uaName + access rights ["delete_readme"] + on union of [projectName] +} + +create obligation "create us project admin" { + create rule "us project" + when any user + performs "createProject" + on { + locProjectAttr: "US project" + } + do(ctx) { + createProjectAdmin(ctx.operands.projectName) + } + + create rule "eu project" + when any user + performs "createProject" + on { + locProjectAttr: "EU project" + } + do(ctx) { + createProjectAdmin(ctx.operands.projectName) + } +} \ No newline at end of file diff --git a/src/test/resources/sql/db.properties b/src/test/resources/sql/db.properties deleted file mode 100644 index 2fea8d591..000000000 --- a/src/test/resources/sql/db.properties +++ /dev/null @@ -1,6 +0,0 @@ -#connectionUrl=jdbc:mysql://localhost:3306/pm_core -#user=root -#password=root -#execution=external - -execution=container \ No newline at end of file diff --git a/src/test/resources/sql/pm_core.sql b/src/test/resources/sql/pm_core.sql deleted file mode 100644 index faf36dfe8..000000000 --- a/src/test/resources/sql/pm_core.sql +++ /dev/null @@ -1,116 +0,0 @@ -DROP SCHEMA IF EXISTS `pm_core`; -CREATE SCHEMA `pm_core`; -USE `pm_core`; - -CREATE TABLE IF NOT EXISTS `resource_access_rights` ( - `id` int(1) NOT NULL AUTO_INCREMENT, - `access_rights` json NOT NULL, - PRIMARY KEY (`id`) -); - -CREATE TABLE IF NOT EXISTS `node_type` ( - `id` int(11) NOT NULL, - `name` varchar(50) DEFAULT NULL, - `description` varchar(50) DEFAULT NULL, - PRIMARY KEY (`id`), - UNIQUE KEY `idx_node_type_name` (`name`) -); - -CREATE TABLE IF NOT EXISTS `node` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `node_type_id` int(11) NOT NULL, - `name` varchar(50) DEFAULT NULL, - `properties` json DEFAULT NULL, - PRIMARY KEY (`id`), - UNIQUE KEY `node_name` (`name`), - KEY `node_type_id_idx` (`node_type_id`), - CONSTRAINT `fk_node_type_id` FOREIGN KEY (`node_type_id`) REFERENCES `node_type` (`id`) -); - -CREATE TABLE IF NOT EXISTS `assignment` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `start_node_id` int(11) NOT NULL, - `end_node_id` int(11) NOT NULL, - PRIMARY KEY (`id`), - KEY `assign_start_node_id` (`start_node_id`), - KEY `assign_end_node_id` (`end_node_id`), - UNIQUE `assign_start_and_end_ids` (`start_node_id`,`end_node_id`), - CONSTRAINT `fk_endnode` FOREIGN KEY (`end_node_id`) REFERENCES `node` (`id`) ON DELETE CASCADE, - CONSTRAINT `fk_startnode` FOREIGN KEY (`start_node_id`) REFERENCES `node` (`id`) ON DELETE CASCADE -); - -CREATE TABLE IF NOT EXISTS `association` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `start_node_id` int(11) NOT NULL, - `end_node_id` int(11) NOT NULL, - `operation_set` json NOT NULL, - PRIMARY KEY (`id`), - KEY `assoc_start_node_id` (`start_node_id`), - KEY `assoc_end_node_id` (`end_node_id`), - UNIQUE KEY `assoc_start_and_end_ids` (`start_node_id`,`end_node_id`), - CONSTRAINT `FK_end_node_id` FOREIGN KEY (`end_node_id`) REFERENCES `node` (`id`) ON DELETE CASCADE, - CONSTRAINT `FK_start_node_id` FOREIGN KEY (`start_node_id`) REFERENCES `node` (`id`) ON DELETE CASCADE -); - -CREATE TABLE IF NOT EXISTS `prohibition_type` ( - `id` int(11) NOT NULL, - `name` varchar(20), - PRIMARY KEY (`id`), - UNIQUE KEY `prohibition_type_name` (`name`) -); - -CREATE TABLE IF NOT EXISTS `prohibition` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `label` varchar(50) NOT NULL, - `node_id` int(11), - `process_id` varchar(50), - `subject_type` int(11) NOT NULL, - `is_intersection` int(1) NOT NULL, - `access_rights` json NOT NULL, - PRIMARY KEY (`id`), - UNIQUE KEY `prohibition_label` (`label`), - CONSTRAINT `fk_prohibition_node_id` FOREIGN KEY (`node_id`) REFERENCES `node` (`id`) ON DELETE CASCADE, - CONSTRAINT `fk_prohibition_type_id` FOREIGN KEY (`subject_type`) REFERENCES `prohibition_type` (`id`) -); - -CREATE TABLE IF NOT EXISTS `prohibition_container` ( - `prohibition_id` int(11) NOT NULL, - `container_id` int(11) NOT NULL, - `is_complement` int(1) NOT NULL, - PRIMARY KEY (`prohibition_id`,`container_id`), - CONSTRAINT `fk_prohibition_id` FOREIGN KEY (`prohibition_id`) REFERENCES `prohibition` (`id`) ON DELETE CASCADE, - CONSTRAINT `fk_container_id` FOREIGN KEY (`container_id`) REFERENCES `node` (`id`) -); - -CREATE TABLE IF NOT EXISTS `obligation` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `label` varchar(50) NOT NULL, - `author` json NOT NULL, - `rules` BLOB NOT NULL, - PRIMARY KEY(`id`), - UNIQUE KEY `obligation_label` (`label`) -); - -CREATE TABLE IF NOT EXISTS `pml_function` ( - `name` varchar(50) NOT NULL, - `bytes` BLOB NOT NULL, - PRIMARY KEY (`name`) -); - -CREATE TABLE IF NOT EXISTS `pml_constant` ( - `name` varchar(50) NOT NULL, - `value` BLOB NOT NULL, - PRIMARY KEY (`name`) -); - -INSERT INTO `prohibition_type` (id, name) VALUES - (1, 'USER'), - (2, 'USER_ATTRIBUTE'), - (3, 'PROCESS'); - -INSERT INTO `node_type` (`id`, `name`, `description`) VALUES - (1, 'OA', 'Object Attribute'), - (2, 'UA', 'User Attribute'), - (3, 'U', 'User'), - (4, 'O', 'Object'), - (5, 'PC', 'Policy Class'); \ No newline at end of file diff --git a/testdb/csv/O.csv b/testdb/csv/O.csv new file mode 100644 index 000000000..f55791cf2 --- /dev/null +++ b/testdb/csv/O.csv @@ -0,0 +1,50000 @@ +1, O1 +2, O2 +3, O3 +4, O4 +5, O5 +6, O6 +7, O7 +8, O8 +9, O9 +10, O10 +11, O11 +12, O12 +13, O13 +14, O14 +15, O15 +16, O16 +17, O17 +18, O18 +19, O19 +20, O20 +21, O21 +22, O22 +23, O23 +24, O24 +25, O25 +26, O26 +27, O27 +28, O28 +29, O29 +30, O30 +31, O31 +32, O32 +33, O33 +34, O34 +35, O35 +36, O36 +37, O37 +38, O38 +39, O39 +40, O40 +41, O41 +42, O42 +43, O43 +44, O44 +45, O45 +46, O46 +47, O47 +48, O48 +49, O49 +50, O50 +51, O51 +52, O52 +53, O53 +54, O54 +55, O55 +56, O56 +57, O57 +58, O58 +59, O59 +60, O60 +61, O61 +62, O62 +63, O63 +64, O64 +65, O65 +66, O66 +67, O67 +68, O68 +69, O69 +70, O70 +71, O71 +72, O72 +73, O73 +74, O74 +75, O75 +76, O76 +77, O77 +78, O78 +79, O79 +80, O80 +81, O81 +82, O82 +83, O83 +84, O84 +85, O85 +86, O86 +87, O87 +88, O88 +89, O89 +90, O90 +91, O91 +92, O92 +93, O93 +94, O94 +95, O95 +96, O96 +97, O97 +98, O98 +99, O99 +100, O100 +101, O101 +102, O102 +103, O103 +104, O104 +105, O105 +106, O106 +107, O107 +108, O108 +109, O109 +110, O110 +111, O111 +112, O112 +113, O113 +114, O114 +115, O115 +116, O116 +117, O117 +118, O118 +119, O119 +120, O120 +121, O121 +122, O122 +123, O123 +124, O124 +125, O125 +126, O126 +127, O127 +128, O128 +129, O129 +130, O130 +131, O131 +132, O132 +133, O133 +134, O134 +135, O135 +136, O136 +137, O137 +138, O138 +139, O139 +140, O140 +141, O141 +142, O142 +143, O143 +144, O144 +145, O145 +146, O146 +147, O147 +148, O148 +149, O149 +150, O150 +151, O151 +152, O152 +153, O153 +154, O154 +155, O155 +156, O156 +157, O157 +158, O158 +159, O159 +160, O160 +161, O161 +162, O162 +163, O163 +164, O164 +165, O165 +166, O166 +167, O167 +168, O168 +169, O169 +170, O170 +171, O171 +172, O172 +173, O173 +174, O174 +175, O175 +176, O176 +177, O177 +178, O178 +179, O179 +180, O180 +181, O181 +182, O182 +183, O183 +184, O184 +185, O185 +186, O186 +187, O187 +188, O188 +189, O189 +190, O190 +191, O191 +192, O192 +193, O193 +194, O194 +195, O195 +196, O196 +197, O197 +198, O198 +199, O199 +200, O200 +201, O201 +202, O202 +203, O203 +204, O204 +205, O205 +206, O206 +207, O207 +208, O208 +209, O209 +210, O210 +211, O211 +212, O212 +213, O213 +214, O214 +215, O215 +216, O216 +217, O217 +218, O218 +219, O219 +220, O220 +221, O221 +222, O222 +223, O223 +224, O224 +225, O225 +226, O226 +227, O227 +228, O228 +229, O229 +230, O230 +231, O231 +232, O232 +233, O233 +234, O234 +235, O235 +236, O236 +237, O237 +238, O238 +239, O239 +240, O240 +241, O241 +242, O242 +243, O243 +244, O244 +245, O245 +246, O246 +247, O247 +248, O248 +249, O249 +250, O250 +251, O251 +252, O252 +253, O253 +254, O254 +255, O255 +256, O256 +257, O257 +258, O258 +259, O259 +260, O260 +261, O261 +262, O262 +263, O263 +264, O264 +265, O265 +266, O266 +267, O267 +268, O268 +269, O269 +270, O270 +271, O271 +272, O272 +273, O273 +274, O274 +275, O275 +276, O276 +277, O277 +278, O278 +279, O279 +280, O280 +281, O281 +282, O282 +283, O283 +284, O284 +285, O285 +286, O286 +287, O287 +288, O288 +289, O289 +290, O290 +291, O291 +292, O292 +293, O293 +294, O294 +295, O295 +296, O296 +297, O297 +298, O298 +299, O299 +300, O300 +301, O301 +302, O302 +303, O303 +304, O304 +305, O305 +306, O306 +307, O307 +308, O308 +309, O309 +310, O310 +311, O311 +312, O312 +313, O313 +314, O314 +315, O315 +316, O316 +317, O317 +318, O318 +319, O319 +320, O320 +321, O321 +322, O322 +323, O323 +324, O324 +325, O325 +326, O326 +327, O327 +328, O328 +329, O329 +330, O330 +331, O331 +332, O332 +333, O333 +334, O334 +335, O335 +336, O336 +337, O337 +338, O338 +339, O339 +340, O340 +341, O341 +342, O342 +343, O343 +344, O344 +345, O345 +346, O346 +347, O347 +348, O348 +349, O349 +350, O350 +351, O351 +352, O352 +353, O353 +354, O354 +355, O355 +356, O356 +357, O357 +358, O358 +359, O359 +360, O360 +361, O361 +362, O362 +363, O363 +364, O364 +365, O365 +366, O366 +367, O367 +368, O368 +369, O369 +370, O370 +371, O371 +372, O372 +373, O373 +374, O374 +375, O375 +376, O376 +377, O377 +378, O378 +379, O379 +380, O380 +381, O381 +382, O382 +383, O383 +384, O384 +385, O385 +386, O386 +387, O387 +388, O388 +389, O389 +390, O390 +391, O391 +392, O392 +393, O393 +394, O394 +395, O395 +396, O396 +397, O397 +398, O398 +399, O399 +400, O400 +401, O401 +402, O402 +403, O403 +404, O404 +405, O405 +406, O406 +407, O407 +408, O408 +409, O409 +410, O410 +411, O411 +412, O412 +413, O413 +414, O414 +415, O415 +416, O416 +417, O417 +418, O418 +419, O419 +420, O420 +421, O421 +422, O422 +423, O423 +424, O424 +425, O425 +426, O426 +427, O427 +428, O428 +429, O429 +430, O430 +431, O431 +432, O432 +433, O433 +434, O434 +435, O435 +436, O436 +437, O437 +438, O438 +439, O439 +440, O440 +441, O441 +442, O442 +443, O443 +444, O444 +445, O445 +446, O446 +447, O447 +448, O448 +449, O449 +450, O450 +451, O451 +452, O452 +453, O453 +454, O454 +455, O455 +456, O456 +457, O457 +458, O458 +459, O459 +460, O460 +461, O461 +462, O462 +463, O463 +464, O464 +465, O465 +466, O466 +467, O467 +468, O468 +469, O469 +470, O470 +471, O471 +472, O472 +473, O473 +474, O474 +475, O475 +476, O476 +477, O477 +478, O478 +479, O479 +480, O480 +481, O481 +482, O482 +483, O483 +484, O484 +485, O485 +486, O486 +487, O487 +488, O488 +489, O489 +490, O490 +491, O491 +492, O492 +493, O493 +494, O494 +495, O495 +496, O496 +497, O497 +498, O498 +499, O499 +500, O500 +501, O501 +502, O502 +503, O503 +504, O504 +505, O505 +506, O506 +507, O507 +508, O508 +509, O509 +510, O510 +511, O511 +512, O512 +513, O513 +514, O514 +515, O515 +516, O516 +517, O517 +518, O518 +519, O519 +520, O520 +521, O521 +522, O522 +523, O523 +524, O524 +525, O525 +526, O526 +527, O527 +528, O528 +529, O529 +530, O530 +531, O531 +532, O532 +533, O533 +534, O534 +535, O535 +536, O536 +537, O537 +538, O538 +539, O539 +540, O540 +541, O541 +542, O542 +543, O543 +544, O544 +545, O545 +546, O546 +547, O547 +548, O548 +549, O549 +550, O550 +551, O551 +552, O552 +553, O553 +554, O554 +555, O555 +556, O556 +557, O557 +558, O558 +559, O559 +560, O560 +561, O561 +562, O562 +563, O563 +564, O564 +565, O565 +566, O566 +567, O567 +568, O568 +569, O569 +570, O570 +571, O571 +572, O572 +573, O573 +574, O574 +575, O575 +576, O576 +577, O577 +578, O578 +579, O579 +580, O580 +581, O581 +582, O582 +583, O583 +584, O584 +585, O585 +586, O586 +587, O587 +588, O588 +589, O589 +590, O590 +591, O591 +592, O592 +593, O593 +594, O594 +595, O595 +596, O596 +597, O597 +598, O598 +599, O599 +600, O600 +601, O601 +602, O602 +603, O603 +604, O604 +605, O605 +606, O606 +607, O607 +608, O608 +609, O609 +610, O610 +611, O611 +612, O612 +613, O613 +614, O614 +615, O615 +616, O616 +617, O617 +618, O618 +619, O619 +620, O620 +621, O621 +622, O622 +623, O623 +624, O624 +625, O625 +626, O626 +627, O627 +628, O628 +629, O629 +630, O630 +631, O631 +632, O632 +633, O633 +634, O634 +635, O635 +636, O636 +637, O637 +638, O638 +639, O639 +640, O640 +641, O641 +642, O642 +643, O643 +644, O644 +645, O645 +646, O646 +647, O647 +648, O648 +649, O649 +650, O650 +651, O651 +652, O652 +653, O653 +654, O654 +655, O655 +656, O656 +657, O657 +658, O658 +659, O659 +660, O660 +661, O661 +662, O662 +663, O663 +664, O664 +665, O665 +666, O666 +667, O667 +668, O668 +669, O669 +670, O670 +671, O671 +672, O672 +673, O673 +674, O674 +675, O675 +676, O676 +677, O677 +678, O678 +679, O679 +680, O680 +681, O681 +682, O682 +683, O683 +684, O684 +685, O685 +686, O686 +687, O687 +688, O688 +689, O689 +690, O690 +691, O691 +692, O692 +693, O693 +694, O694 +695, O695 +696, O696 +697, O697 +698, O698 +699, O699 +700, O700 +701, O701 +702, O702 +703, O703 +704, O704 +705, O705 +706, O706 +707, O707 +708, O708 +709, O709 +710, O710 +711, O711 +712, O712 +713, O713 +714, O714 +715, O715 +716, O716 +717, O717 +718, O718 +719, O719 +720, O720 +721, O721 +722, O722 +723, O723 +724, O724 +725, O725 +726, O726 +727, O727 +728, O728 +729, O729 +730, O730 +731, O731 +732, O732 +733, O733 +734, O734 +735, O735 +736, O736 +737, O737 +738, O738 +739, O739 +740, O740 +741, O741 +742, O742 +743, O743 +744, O744 +745, O745 +746, O746 +747, O747 +748, O748 +749, O749 +750, O750 +751, O751 +752, O752 +753, O753 +754, O754 +755, O755 +756, O756 +757, O757 +758, O758 +759, O759 +760, O760 +761, O761 +762, O762 +763, O763 +764, O764 +765, O765 +766, O766 +767, O767 +768, O768 +769, O769 +770, O770 +771, O771 +772, O772 +773, O773 +774, O774 +775, O775 +776, O776 +777, O777 +778, O778 +779, O779 +780, O780 +781, O781 +782, O782 +783, O783 +784, O784 +785, O785 +786, O786 +787, O787 +788, O788 +789, O789 +790, O790 +791, O791 +792, O792 +793, O793 +794, O794 +795, O795 +796, O796 +797, O797 +798, O798 +799, O799 +800, O800 +801, O801 +802, O802 +803, O803 +804, O804 +805, O805 +806, O806 +807, O807 +808, O808 +809, O809 +810, O810 +811, O811 +812, O812 +813, O813 +814, O814 +815, O815 +816, O816 +817, O817 +818, O818 +819, O819 +820, O820 +821, O821 +822, O822 +823, O823 +824, O824 +825, O825 +826, O826 +827, O827 +828, O828 +829, O829 +830, O830 +831, O831 +832, O832 +833, O833 +834, O834 +835, O835 +836, O836 +837, O837 +838, O838 +839, O839 +840, O840 +841, O841 +842, O842 +843, O843 +844, O844 +845, O845 +846, O846 +847, O847 +848, O848 +849, O849 +850, O850 +851, O851 +852, O852 +853, O853 +854, O854 +855, O855 +856, O856 +857, O857 +858, O858 +859, O859 +860, O860 +861, O861 +862, O862 +863, O863 +864, O864 +865, O865 +866, O866 +867, O867 +868, O868 +869, O869 +870, O870 +871, O871 +872, O872 +873, O873 +874, O874 +875, O875 +876, O876 +877, O877 +878, O878 +879, O879 +880, O880 +881, O881 +882, O882 +883, O883 +884, O884 +885, O885 +886, O886 +887, O887 +888, O888 +889, O889 +890, O890 +891, O891 +892, O892 +893, O893 +894, O894 +895, O895 +896, O896 +897, O897 +898, O898 +899, O899 +900, O900 +901, O901 +902, O902 +903, O903 +904, O904 +905, O905 +906, O906 +907, O907 +908, O908 +909, O909 +910, O910 +911, O911 +912, O912 +913, O913 +914, O914 +915, O915 +916, O916 +917, O917 +918, O918 +919, O919 +920, O920 +921, O921 +922, O922 +923, O923 +924, O924 +925, O925 +926, O926 +927, O927 +928, O928 +929, O929 +930, O930 +931, O931 +932, O932 +933, O933 +934, O934 +935, O935 +936, O936 +937, O937 +938, O938 +939, O939 +940, O940 +941, O941 +942, O942 +943, O943 +944, O944 +945, O945 +946, O946 +947, O947 +948, O948 +949, O949 +950, O950 +951, O951 +952, O952 +953, O953 +954, O954 +955, O955 +956, O956 +957, O957 +958, O958 +959, O959 +960, O960 +961, O961 +962, O962 +963, O963 +964, O964 +965, O965 +966, O966 +967, O967 +968, O968 +969, O969 +970, O970 +971, O971 +972, O972 +973, O973 +974, O974 +975, O975 +976, O976 +977, O977 +978, O978 +979, O979 +980, O980 +981, O981 +982, O982 +983, O983 +984, O984 +985, O985 +986, O986 +987, O987 +988, O988 +989, O989 +990, O990 +991, O991 +992, O992 +993, O993 +994, O994 +995, O995 +996, O996 +997, O997 +998, O998 +999, O999 +1000, O1000 +1001, O1001 +1002, O1002 +1003, O1003 +1004, O1004 +1005, O1005 +1006, O1006 +1007, O1007 +1008, O1008 +1009, O1009 +1010, O1010 +1011, O1011 +1012, O1012 +1013, O1013 +1014, O1014 +1015, O1015 +1016, O1016 +1017, O1017 +1018, O1018 +1019, O1019 +1020, O1020 +1021, O1021 +1022, O1022 +1023, O1023 +1024, O1024 +1025, O1025 +1026, O1026 +1027, O1027 +1028, O1028 +1029, O1029 +1030, O1030 +1031, O1031 +1032, O1032 +1033, O1033 +1034, O1034 +1035, O1035 +1036, O1036 +1037, O1037 +1038, O1038 +1039, O1039 +1040, O1040 +1041, O1041 +1042, O1042 +1043, O1043 +1044, O1044 +1045, O1045 +1046, O1046 +1047, O1047 +1048, O1048 +1049, O1049 +1050, O1050 +1051, O1051 +1052, O1052 +1053, O1053 +1054, O1054 +1055, O1055 +1056, O1056 +1057, O1057 +1058, O1058 +1059, O1059 +1060, O1060 +1061, O1061 +1062, O1062 +1063, O1063 +1064, O1064 +1065, O1065 +1066, O1066 +1067, O1067 +1068, O1068 +1069, O1069 +1070, O1070 +1071, O1071 +1072, O1072 +1073, O1073 +1074, O1074 +1075, O1075 +1076, O1076 +1077, O1077 +1078, O1078 +1079, O1079 +1080, O1080 +1081, O1081 +1082, O1082 +1083, O1083 +1084, O1084 +1085, O1085 +1086, O1086 +1087, O1087 +1088, O1088 +1089, O1089 +1090, O1090 +1091, O1091 +1092, O1092 +1093, O1093 +1094, O1094 +1095, O1095 +1096, O1096 +1097, O1097 +1098, O1098 +1099, O1099 +1100, O1100 +1101, O1101 +1102, O1102 +1103, O1103 +1104, O1104 +1105, O1105 +1106, O1106 +1107, O1107 +1108, O1108 +1109, O1109 +1110, O1110 +1111, O1111 +1112, O1112 +1113, O1113 +1114, O1114 +1115, O1115 +1116, O1116 +1117, O1117 +1118, O1118 +1119, O1119 +1120, O1120 +1121, O1121 +1122, O1122 +1123, O1123 +1124, O1124 +1125, O1125 +1126, O1126 +1127, O1127 +1128, O1128 +1129, O1129 +1130, O1130 +1131, O1131 +1132, O1132 +1133, O1133 +1134, O1134 +1135, O1135 +1136, O1136 +1137, O1137 +1138, O1138 +1139, O1139 +1140, O1140 +1141, O1141 +1142, O1142 +1143, O1143 +1144, O1144 +1145, O1145 +1146, O1146 +1147, O1147 +1148, O1148 +1149, O1149 +1150, O1150 +1151, O1151 +1152, O1152 +1153, O1153 +1154, O1154 +1155, O1155 +1156, O1156 +1157, O1157 +1158, O1158 +1159, O1159 +1160, O1160 +1161, O1161 +1162, O1162 +1163, O1163 +1164, O1164 +1165, O1165 +1166, O1166 +1167, O1167 +1168, O1168 +1169, O1169 +1170, O1170 +1171, O1171 +1172, O1172 +1173, O1173 +1174, O1174 +1175, O1175 +1176, O1176 +1177, O1177 +1178, O1178 +1179, O1179 +1180, O1180 +1181, O1181 +1182, O1182 +1183, O1183 +1184, O1184 +1185, O1185 +1186, O1186 +1187, O1187 +1188, O1188 +1189, O1189 +1190, O1190 +1191, O1191 +1192, O1192 +1193, O1193 +1194, O1194 +1195, O1195 +1196, O1196 +1197, O1197 +1198, O1198 +1199, O1199 +1200, O1200 +1201, O1201 +1202, O1202 +1203, O1203 +1204, O1204 +1205, O1205 +1206, O1206 +1207, O1207 +1208, O1208 +1209, O1209 +1210, O1210 +1211, O1211 +1212, O1212 +1213, O1213 +1214, O1214 +1215, O1215 +1216, O1216 +1217, O1217 +1218, O1218 +1219, O1219 +1220, O1220 +1221, O1221 +1222, O1222 +1223, O1223 +1224, O1224 +1225, O1225 +1226, O1226 +1227, O1227 +1228, O1228 +1229, O1229 +1230, O1230 +1231, O1231 +1232, O1232 +1233, O1233 +1234, O1234 +1235, O1235 +1236, O1236 +1237, O1237 +1238, O1238 +1239, O1239 +1240, O1240 +1241, O1241 +1242, O1242 +1243, O1243 +1244, O1244 +1245, O1245 +1246, O1246 +1247, O1247 +1248, O1248 +1249, O1249 +1250, O1250 +1251, O1251 +1252, O1252 +1253, O1253 +1254, O1254 +1255, O1255 +1256, O1256 +1257, O1257 +1258, O1258 +1259, O1259 +1260, O1260 +1261, O1261 +1262, O1262 +1263, O1263 +1264, O1264 +1265, O1265 +1266, O1266 +1267, O1267 +1268, O1268 +1269, O1269 +1270, O1270 +1271, O1271 +1272, O1272 +1273, O1273 +1274, O1274 +1275, O1275 +1276, O1276 +1277, O1277 +1278, O1278 +1279, O1279 +1280, O1280 +1281, O1281 +1282, O1282 +1283, O1283 +1284, O1284 +1285, O1285 +1286, O1286 +1287, O1287 +1288, O1288 +1289, O1289 +1290, O1290 +1291, O1291 +1292, O1292 +1293, O1293 +1294, O1294 +1295, O1295 +1296, O1296 +1297, O1297 +1298, O1298 +1299, O1299 +1300, O1300 +1301, O1301 +1302, O1302 +1303, O1303 +1304, O1304 +1305, O1305 +1306, O1306 +1307, O1307 +1308, O1308 +1309, O1309 +1310, O1310 +1311, O1311 +1312, O1312 +1313, O1313 +1314, O1314 +1315, O1315 +1316, O1316 +1317, O1317 +1318, O1318 +1319, O1319 +1320, O1320 +1321, O1321 +1322, O1322 +1323, O1323 +1324, O1324 +1325, O1325 +1326, O1326 +1327, O1327 +1328, O1328 +1329, O1329 +1330, O1330 +1331, O1331 +1332, O1332 +1333, O1333 +1334, O1334 +1335, O1335 +1336, O1336 +1337, O1337 +1338, O1338 +1339, O1339 +1340, O1340 +1341, O1341 +1342, O1342 +1343, O1343 +1344, O1344 +1345, O1345 +1346, O1346 +1347, O1347 +1348, O1348 +1349, O1349 +1350, O1350 +1351, O1351 +1352, O1352 +1353, O1353 +1354, O1354 +1355, O1355 +1356, O1356 +1357, O1357 +1358, O1358 +1359, O1359 +1360, O1360 +1361, O1361 +1362, O1362 +1363, O1363 +1364, O1364 +1365, O1365 +1366, O1366 +1367, O1367 +1368, O1368 +1369, O1369 +1370, O1370 +1371, O1371 +1372, O1372 +1373, O1373 +1374, O1374 +1375, O1375 +1376, O1376 +1377, O1377 +1378, O1378 +1379, O1379 +1380, O1380 +1381, O1381 +1382, O1382 +1383, O1383 +1384, O1384 +1385, O1385 +1386, O1386 +1387, O1387 +1388, O1388 +1389, O1389 +1390, O1390 +1391, O1391 +1392, O1392 +1393, O1393 +1394, O1394 +1395, O1395 +1396, O1396 +1397, O1397 +1398, O1398 +1399, O1399 +1400, O1400 +1401, O1401 +1402, O1402 +1403, O1403 +1404, O1404 +1405, O1405 +1406, O1406 +1407, O1407 +1408, O1408 +1409, O1409 +1410, O1410 +1411, O1411 +1412, O1412 +1413, O1413 +1414, O1414 +1415, O1415 +1416, O1416 +1417, O1417 +1418, O1418 +1419, O1419 +1420, O1420 +1421, O1421 +1422, O1422 +1423, O1423 +1424, O1424 +1425, O1425 +1426, O1426 +1427, O1427 +1428, O1428 +1429, O1429 +1430, O1430 +1431, O1431 +1432, O1432 +1433, O1433 +1434, O1434 +1435, O1435 +1436, O1436 +1437, O1437 +1438, O1438 +1439, O1439 +1440, O1440 +1441, O1441 +1442, O1442 +1443, O1443 +1444, O1444 +1445, O1445 +1446, O1446 +1447, O1447 +1448, O1448 +1449, O1449 +1450, O1450 +1451, O1451 +1452, O1452 +1453, O1453 +1454, O1454 +1455, O1455 +1456, O1456 +1457, O1457 +1458, O1458 +1459, O1459 +1460, O1460 +1461, O1461 +1462, O1462 +1463, O1463 +1464, O1464 +1465, O1465 +1466, O1466 +1467, O1467 +1468, O1468 +1469, O1469 +1470, O1470 +1471, O1471 +1472, O1472 +1473, O1473 +1474, O1474 +1475, O1475 +1476, O1476 +1477, O1477 +1478, O1478 +1479, O1479 +1480, O1480 +1481, O1481 +1482, O1482 +1483, O1483 +1484, O1484 +1485, O1485 +1486, O1486 +1487, O1487 +1488, O1488 +1489, O1489 +1490, O1490 +1491, O1491 +1492, O1492 +1493, O1493 +1494, O1494 +1495, O1495 +1496, O1496 +1497, O1497 +1498, O1498 +1499, O1499 +1500, O1500 +1501, O1501 +1502, O1502 +1503, O1503 +1504, O1504 +1505, O1505 +1506, O1506 +1507, O1507 +1508, O1508 +1509, O1509 +1510, O1510 +1511, O1511 +1512, O1512 +1513, O1513 +1514, O1514 +1515, O1515 +1516, O1516 +1517, O1517 +1518, O1518 +1519, O1519 +1520, O1520 +1521, O1521 +1522, O1522 +1523, O1523 +1524, O1524 +1525, O1525 +1526, O1526 +1527, O1527 +1528, O1528 +1529, O1529 +1530, O1530 +1531, O1531 +1532, O1532 +1533, O1533 +1534, O1534 +1535, O1535 +1536, O1536 +1537, O1537 +1538, O1538 +1539, O1539 +1540, O1540 +1541, O1541 +1542, O1542 +1543, O1543 +1544, O1544 +1545, O1545 +1546, O1546 +1547, O1547 +1548, O1548 +1549, O1549 +1550, O1550 +1551, O1551 +1552, O1552 +1553, O1553 +1554, O1554 +1555, O1555 +1556, O1556 +1557, O1557 +1558, O1558 +1559, O1559 +1560, O1560 +1561, O1561 +1562, O1562 +1563, O1563 +1564, O1564 +1565, O1565 +1566, O1566 +1567, O1567 +1568, O1568 +1569, O1569 +1570, O1570 +1571, O1571 +1572, O1572 +1573, O1573 +1574, O1574 +1575, O1575 +1576, O1576 +1577, O1577 +1578, O1578 +1579, O1579 +1580, O1580 +1581, O1581 +1582, O1582 +1583, O1583 +1584, O1584 +1585, O1585 +1586, O1586 +1587, O1587 +1588, O1588 +1589, O1589 +1590, O1590 +1591, O1591 +1592, O1592 +1593, O1593 +1594, O1594 +1595, O1595 +1596, O1596 +1597, O1597 +1598, O1598 +1599, O1599 +1600, O1600 +1601, O1601 +1602, O1602 +1603, O1603 +1604, O1604 +1605, O1605 +1606, O1606 +1607, O1607 +1608, O1608 +1609, O1609 +1610, O1610 +1611, O1611 +1612, O1612 +1613, O1613 +1614, O1614 +1615, O1615 +1616, O1616 +1617, O1617 +1618, O1618 +1619, O1619 +1620, O1620 +1621, O1621 +1622, O1622 +1623, O1623 +1624, O1624 +1625, O1625 +1626, O1626 +1627, O1627 +1628, O1628 +1629, O1629 +1630, O1630 +1631, O1631 +1632, O1632 +1633, O1633 +1634, O1634 +1635, O1635 +1636, O1636 +1637, O1637 +1638, O1638 +1639, O1639 +1640, O1640 +1641, O1641 +1642, O1642 +1643, O1643 +1644, O1644 +1645, O1645 +1646, O1646 +1647, O1647 +1648, O1648 +1649, O1649 +1650, O1650 +1651, O1651 +1652, O1652 +1653, O1653 +1654, O1654 +1655, O1655 +1656, O1656 +1657, O1657 +1658, O1658 +1659, O1659 +1660, O1660 +1661, O1661 +1662, O1662 +1663, O1663 +1664, O1664 +1665, O1665 +1666, O1666 +1667, O1667 +1668, O1668 +1669, O1669 +1670, O1670 +1671, O1671 +1672, O1672 +1673, O1673 +1674, O1674 +1675, O1675 +1676, O1676 +1677, O1677 +1678, O1678 +1679, O1679 +1680, O1680 +1681, O1681 +1682, O1682 +1683, O1683 +1684, O1684 +1685, O1685 +1686, O1686 +1687, O1687 +1688, O1688 +1689, O1689 +1690, O1690 +1691, O1691 +1692, O1692 +1693, O1693 +1694, O1694 +1695, O1695 +1696, O1696 +1697, O1697 +1698, O1698 +1699, O1699 +1700, O1700 +1701, O1701 +1702, O1702 +1703, O1703 +1704, O1704 +1705, O1705 +1706, O1706 +1707, O1707 +1708, O1708 +1709, O1709 +1710, O1710 +1711, O1711 +1712, O1712 +1713, O1713 +1714, O1714 +1715, O1715 +1716, O1716 +1717, O1717 +1718, O1718 +1719, O1719 +1720, O1720 +1721, O1721 +1722, O1722 +1723, O1723 +1724, O1724 +1725, O1725 +1726, O1726 +1727, O1727 +1728, O1728 +1729, O1729 +1730, O1730 +1731, O1731 +1732, O1732 +1733, O1733 +1734, O1734 +1735, O1735 +1736, O1736 +1737, O1737 +1738, O1738 +1739, O1739 +1740, O1740 +1741, O1741 +1742, O1742 +1743, O1743 +1744, O1744 +1745, O1745 +1746, O1746 +1747, O1747 +1748, O1748 +1749, O1749 +1750, O1750 +1751, O1751 +1752, O1752 +1753, O1753 +1754, O1754 +1755, O1755 +1756, O1756 +1757, O1757 +1758, O1758 +1759, O1759 +1760, O1760 +1761, O1761 +1762, O1762 +1763, O1763 +1764, O1764 +1765, O1765 +1766, O1766 +1767, O1767 +1768, O1768 +1769, O1769 +1770, O1770 +1771, O1771 +1772, O1772 +1773, O1773 +1774, O1774 +1775, O1775 +1776, O1776 +1777, O1777 +1778, O1778 +1779, O1779 +1780, O1780 +1781, O1781 +1782, O1782 +1783, O1783 +1784, O1784 +1785, O1785 +1786, O1786 +1787, O1787 +1788, O1788 +1789, O1789 +1790, O1790 +1791, O1791 +1792, O1792 +1793, O1793 +1794, O1794 +1795, O1795 +1796, O1796 +1797, O1797 +1798, O1798 +1799, O1799 +1800, O1800 +1801, O1801 +1802, O1802 +1803, O1803 +1804, O1804 +1805, O1805 +1806, O1806 +1807, O1807 +1808, O1808 +1809, O1809 +1810, O1810 +1811, O1811 +1812, O1812 +1813, O1813 +1814, O1814 +1815, O1815 +1816, O1816 +1817, O1817 +1818, O1818 +1819, O1819 +1820, O1820 +1821, O1821 +1822, O1822 +1823, O1823 +1824, O1824 +1825, O1825 +1826, O1826 +1827, O1827 +1828, O1828 +1829, O1829 +1830, O1830 +1831, O1831 +1832, O1832 +1833, O1833 +1834, O1834 +1835, O1835 +1836, O1836 +1837, O1837 +1838, O1838 +1839, O1839 +1840, O1840 +1841, O1841 +1842, O1842 +1843, O1843 +1844, O1844 +1845, O1845 +1846, O1846 +1847, O1847 +1848, O1848 +1849, O1849 +1850, O1850 +1851, O1851 +1852, O1852 +1853, O1853 +1854, O1854 +1855, O1855 +1856, O1856 +1857, O1857 +1858, O1858 +1859, O1859 +1860, O1860 +1861, O1861 +1862, O1862 +1863, O1863 +1864, O1864 +1865, O1865 +1866, O1866 +1867, O1867 +1868, O1868 +1869, O1869 +1870, O1870 +1871, O1871 +1872, O1872 +1873, O1873 +1874, O1874 +1875, O1875 +1876, O1876 +1877, O1877 +1878, O1878 +1879, O1879 +1880, O1880 +1881, O1881 +1882, O1882 +1883, O1883 +1884, O1884 +1885, O1885 +1886, O1886 +1887, O1887 +1888, O1888 +1889, O1889 +1890, O1890 +1891, O1891 +1892, O1892 +1893, O1893 +1894, O1894 +1895, O1895 +1896, O1896 +1897, O1897 +1898, O1898 +1899, O1899 +1900, O1900 +1901, O1901 +1902, O1902 +1903, O1903 +1904, O1904 +1905, O1905 +1906, O1906 +1907, O1907 +1908, O1908 +1909, O1909 +1910, O1910 +1911, O1911 +1912, O1912 +1913, O1913 +1914, O1914 +1915, O1915 +1916, O1916 +1917, O1917 +1918, O1918 +1919, O1919 +1920, O1920 +1921, O1921 +1922, O1922 +1923, O1923 +1924, O1924 +1925, O1925 +1926, O1926 +1927, O1927 +1928, O1928 +1929, O1929 +1930, O1930 +1931, O1931 +1932, O1932 +1933, O1933 +1934, O1934 +1935, O1935 +1936, O1936 +1937, O1937 +1938, O1938 +1939, O1939 +1940, O1940 +1941, O1941 +1942, O1942 +1943, O1943 +1944, O1944 +1945, O1945 +1946, O1946 +1947, O1947 +1948, O1948 +1949, O1949 +1950, O1950 +1951, O1951 +1952, O1952 +1953, O1953 +1954, O1954 +1955, O1955 +1956, O1956 +1957, O1957 +1958, O1958 +1959, O1959 +1960, O1960 +1961, O1961 +1962, O1962 +1963, O1963 +1964, O1964 +1965, O1965 +1966, O1966 +1967, O1967 +1968, O1968 +1969, O1969 +1970, O1970 +1971, O1971 +1972, O1972 +1973, O1973 +1974, O1974 +1975, O1975 +1976, O1976 +1977, O1977 +1978, O1978 +1979, O1979 +1980, O1980 +1981, O1981 +1982, O1982 +1983, O1983 +1984, O1984 +1985, O1985 +1986, O1986 +1987, O1987 +1988, O1988 +1989, O1989 +1990, O1990 +1991, O1991 +1992, O1992 +1993, O1993 +1994, O1994 +1995, O1995 +1996, O1996 +1997, O1997 +1998, O1998 +1999, O1999 +2000, O2000 +2001, O2001 +2002, O2002 +2003, O2003 +2004, O2004 +2005, O2005 +2006, O2006 +2007, O2007 +2008, O2008 +2009, O2009 +2010, O2010 +2011, O2011 +2012, O2012 +2013, O2013 +2014, O2014 +2015, O2015 +2016, O2016 +2017, O2017 +2018, O2018 +2019, O2019 +2020, O2020 +2021, O2021 +2022, O2022 +2023, O2023 +2024, O2024 +2025, O2025 +2026, O2026 +2027, O2027 +2028, O2028 +2029, O2029 +2030, O2030 +2031, O2031 +2032, O2032 +2033, O2033 +2034, O2034 +2035, O2035 +2036, O2036 +2037, O2037 +2038, O2038 +2039, O2039 +2040, O2040 +2041, O2041 +2042, O2042 +2043, O2043 +2044, O2044 +2045, O2045 +2046, O2046 +2047, O2047 +2048, O2048 +2049, O2049 +2050, O2050 +2051, O2051 +2052, O2052 +2053, O2053 +2054, O2054 +2055, O2055 +2056, O2056 +2057, O2057 +2058, O2058 +2059, O2059 +2060, O2060 +2061, O2061 +2062, O2062 +2063, O2063 +2064, O2064 +2065, O2065 +2066, O2066 +2067, O2067 +2068, O2068 +2069, O2069 +2070, O2070 +2071, O2071 +2072, O2072 +2073, O2073 +2074, O2074 +2075, O2075 +2076, O2076 +2077, O2077 +2078, O2078 +2079, O2079 +2080, O2080 +2081, O2081 +2082, O2082 +2083, O2083 +2084, O2084 +2085, O2085 +2086, O2086 +2087, O2087 +2088, O2088 +2089, O2089 +2090, O2090 +2091, O2091 +2092, O2092 +2093, O2093 +2094, O2094 +2095, O2095 +2096, O2096 +2097, O2097 +2098, O2098 +2099, O2099 +2100, O2100 +2101, O2101 +2102, O2102 +2103, O2103 +2104, O2104 +2105, O2105 +2106, O2106 +2107, O2107 +2108, O2108 +2109, O2109 +2110, O2110 +2111, O2111 +2112, O2112 +2113, O2113 +2114, O2114 +2115, O2115 +2116, O2116 +2117, O2117 +2118, O2118 +2119, O2119 +2120, O2120 +2121, O2121 +2122, O2122 +2123, O2123 +2124, O2124 +2125, O2125 +2126, O2126 +2127, O2127 +2128, O2128 +2129, O2129 +2130, O2130 +2131, O2131 +2132, O2132 +2133, O2133 +2134, O2134 +2135, O2135 +2136, O2136 +2137, O2137 +2138, O2138 +2139, O2139 +2140, O2140 +2141, O2141 +2142, O2142 +2143, O2143 +2144, O2144 +2145, O2145 +2146, O2146 +2147, O2147 +2148, O2148 +2149, O2149 +2150, O2150 +2151, O2151 +2152, O2152 +2153, O2153 +2154, O2154 +2155, O2155 +2156, O2156 +2157, O2157 +2158, O2158 +2159, O2159 +2160, O2160 +2161, O2161 +2162, O2162 +2163, O2163 +2164, O2164 +2165, O2165 +2166, O2166 +2167, O2167 +2168, O2168 +2169, O2169 +2170, O2170 +2171, O2171 +2172, O2172 +2173, O2173 +2174, O2174 +2175, O2175 +2176, O2176 +2177, O2177 +2178, O2178 +2179, O2179 +2180, O2180 +2181, O2181 +2182, O2182 +2183, O2183 +2184, O2184 +2185, O2185 +2186, O2186 +2187, O2187 +2188, O2188 +2189, O2189 +2190, O2190 +2191, O2191 +2192, O2192 +2193, O2193 +2194, O2194 +2195, O2195 +2196, O2196 +2197, O2197 +2198, O2198 +2199, O2199 +2200, O2200 +2201, O2201 +2202, O2202 +2203, O2203 +2204, O2204 +2205, O2205 +2206, O2206 +2207, O2207 +2208, O2208 +2209, O2209 +2210, O2210 +2211, O2211 +2212, O2212 +2213, O2213 +2214, O2214 +2215, O2215 +2216, O2216 +2217, O2217 +2218, O2218 +2219, O2219 +2220, O2220 +2221, O2221 +2222, O2222 +2223, O2223 +2224, O2224 +2225, O2225 +2226, O2226 +2227, O2227 +2228, O2228 +2229, O2229 +2230, O2230 +2231, O2231 +2232, O2232 +2233, O2233 +2234, O2234 +2235, O2235 +2236, O2236 +2237, O2237 +2238, O2238 +2239, O2239 +2240, O2240 +2241, O2241 +2242, O2242 +2243, O2243 +2244, O2244 +2245, O2245 +2246, O2246 +2247, O2247 +2248, O2248 +2249, O2249 +2250, O2250 +2251, O2251 +2252, O2252 +2253, O2253 +2254, O2254 +2255, O2255 +2256, O2256 +2257, O2257 +2258, O2258 +2259, O2259 +2260, O2260 +2261, O2261 +2262, O2262 +2263, O2263 +2264, O2264 +2265, O2265 +2266, O2266 +2267, O2267 +2268, O2268 +2269, O2269 +2270, O2270 +2271, O2271 +2272, O2272 +2273, O2273 +2274, O2274 +2275, O2275 +2276, O2276 +2277, O2277 +2278, O2278 +2279, O2279 +2280, O2280 +2281, O2281 +2282, O2282 +2283, O2283 +2284, O2284 +2285, O2285 +2286, O2286 +2287, O2287 +2288, O2288 +2289, O2289 +2290, O2290 +2291, O2291 +2292, O2292 +2293, O2293 +2294, O2294 +2295, O2295 +2296, O2296 +2297, O2297 +2298, O2298 +2299, O2299 +2300, O2300 +2301, O2301 +2302, O2302 +2303, O2303 +2304, O2304 +2305, O2305 +2306, O2306 +2307, O2307 +2308, O2308 +2309, O2309 +2310, O2310 +2311, O2311 +2312, O2312 +2313, O2313 +2314, O2314 +2315, O2315 +2316, O2316 +2317, O2317 +2318, O2318 +2319, O2319 +2320, O2320 +2321, O2321 +2322, O2322 +2323, O2323 +2324, O2324 +2325, O2325 +2326, O2326 +2327, O2327 +2328, O2328 +2329, O2329 +2330, O2330 +2331, O2331 +2332, O2332 +2333, O2333 +2334, O2334 +2335, O2335 +2336, O2336 +2337, O2337 +2338, O2338 +2339, O2339 +2340, O2340 +2341, O2341 +2342, O2342 +2343, O2343 +2344, O2344 +2345, O2345 +2346, O2346 +2347, O2347 +2348, O2348 +2349, O2349 +2350, O2350 +2351, O2351 +2352, O2352 +2353, O2353 +2354, O2354 +2355, O2355 +2356, O2356 +2357, O2357 +2358, O2358 +2359, O2359 +2360, O2360 +2361, O2361 +2362, O2362 +2363, O2363 +2364, O2364 +2365, O2365 +2366, O2366 +2367, O2367 +2368, O2368 +2369, O2369 +2370, O2370 +2371, O2371 +2372, O2372 +2373, O2373 +2374, O2374 +2375, O2375 +2376, O2376 +2377, O2377 +2378, O2378 +2379, O2379 +2380, O2380 +2381, O2381 +2382, O2382 +2383, O2383 +2384, O2384 +2385, O2385 +2386, O2386 +2387, O2387 +2388, O2388 +2389, O2389 +2390, O2390 +2391, O2391 +2392, O2392 +2393, O2393 +2394, O2394 +2395, O2395 +2396, O2396 +2397, O2397 +2398, O2398 +2399, O2399 +2400, O2400 +2401, O2401 +2402, O2402 +2403, O2403 +2404, O2404 +2405, O2405 +2406, O2406 +2407, O2407 +2408, O2408 +2409, O2409 +2410, O2410 +2411, O2411 +2412, O2412 +2413, O2413 +2414, O2414 +2415, O2415 +2416, O2416 +2417, O2417 +2418, O2418 +2419, O2419 +2420, O2420 +2421, O2421 +2422, O2422 +2423, O2423 +2424, O2424 +2425, O2425 +2426, O2426 +2427, O2427 +2428, O2428 +2429, O2429 +2430, O2430 +2431, O2431 +2432, O2432 +2433, O2433 +2434, O2434 +2435, O2435 +2436, O2436 +2437, O2437 +2438, O2438 +2439, O2439 +2440, O2440 +2441, O2441 +2442, O2442 +2443, O2443 +2444, O2444 +2445, O2445 +2446, O2446 +2447, O2447 +2448, O2448 +2449, O2449 +2450, O2450 +2451, O2451 +2452, O2452 +2453, O2453 +2454, O2454 +2455, O2455 +2456, O2456 +2457, O2457 +2458, O2458 +2459, O2459 +2460, O2460 +2461, O2461 +2462, O2462 +2463, O2463 +2464, O2464 +2465, O2465 +2466, O2466 +2467, O2467 +2468, O2468 +2469, O2469 +2470, O2470 +2471, O2471 +2472, O2472 +2473, O2473 +2474, O2474 +2475, O2475 +2476, O2476 +2477, O2477 +2478, O2478 +2479, O2479 +2480, O2480 +2481, O2481 +2482, O2482 +2483, O2483 +2484, O2484 +2485, O2485 +2486, O2486 +2487, O2487 +2488, O2488 +2489, O2489 +2490, O2490 +2491, O2491 +2492, O2492 +2493, O2493 +2494, O2494 +2495, O2495 +2496, O2496 +2497, O2497 +2498, O2498 +2499, O2499 +2500, O2500 +2501, O2501 +2502, O2502 +2503, O2503 +2504, O2504 +2505, O2505 +2506, O2506 +2507, O2507 +2508, O2508 +2509, O2509 +2510, O2510 +2511, O2511 +2512, O2512 +2513, O2513 +2514, O2514 +2515, O2515 +2516, O2516 +2517, O2517 +2518, O2518 +2519, O2519 +2520, O2520 +2521, O2521 +2522, O2522 +2523, O2523 +2524, O2524 +2525, O2525 +2526, O2526 +2527, O2527 +2528, O2528 +2529, O2529 +2530, O2530 +2531, O2531 +2532, O2532 +2533, O2533 +2534, O2534 +2535, O2535 +2536, O2536 +2537, O2537 +2538, O2538 +2539, O2539 +2540, O2540 +2541, O2541 +2542, O2542 +2543, O2543 +2544, O2544 +2545, O2545 +2546, O2546 +2547, O2547 +2548, O2548 +2549, O2549 +2550, O2550 +2551, O2551 +2552, O2552 +2553, O2553 +2554, O2554 +2555, O2555 +2556, O2556 +2557, O2557 +2558, O2558 +2559, O2559 +2560, O2560 +2561, O2561 +2562, O2562 +2563, O2563 +2564, O2564 +2565, O2565 +2566, O2566 +2567, O2567 +2568, O2568 +2569, O2569 +2570, O2570 +2571, O2571 +2572, O2572 +2573, O2573 +2574, O2574 +2575, O2575 +2576, O2576 +2577, O2577 +2578, O2578 +2579, O2579 +2580, O2580 +2581, O2581 +2582, O2582 +2583, O2583 +2584, O2584 +2585, O2585 +2586, O2586 +2587, O2587 +2588, O2588 +2589, O2589 +2590, O2590 +2591, O2591 +2592, O2592 +2593, O2593 +2594, O2594 +2595, O2595 +2596, O2596 +2597, O2597 +2598, O2598 +2599, O2599 +2600, O2600 +2601, O2601 +2602, O2602 +2603, O2603 +2604, O2604 +2605, O2605 +2606, O2606 +2607, O2607 +2608, O2608 +2609, O2609 +2610, O2610 +2611, O2611 +2612, O2612 +2613, O2613 +2614, O2614 +2615, O2615 +2616, O2616 +2617, O2617 +2618, O2618 +2619, O2619 +2620, O2620 +2621, O2621 +2622, O2622 +2623, O2623 +2624, O2624 +2625, O2625 +2626, O2626 +2627, O2627 +2628, O2628 +2629, O2629 +2630, O2630 +2631, O2631 +2632, O2632 +2633, O2633 +2634, O2634 +2635, O2635 +2636, O2636 +2637, O2637 +2638, O2638 +2639, O2639 +2640, O2640 +2641, O2641 +2642, O2642 +2643, O2643 +2644, O2644 +2645, O2645 +2646, O2646 +2647, O2647 +2648, O2648 +2649, O2649 +2650, O2650 +2651, O2651 +2652, O2652 +2653, O2653 +2654, O2654 +2655, O2655 +2656, O2656 +2657, O2657 +2658, O2658 +2659, O2659 +2660, O2660 +2661, O2661 +2662, O2662 +2663, O2663 +2664, O2664 +2665, O2665 +2666, O2666 +2667, O2667 +2668, O2668 +2669, O2669 +2670, O2670 +2671, O2671 +2672, O2672 +2673, O2673 +2674, O2674 +2675, O2675 +2676, O2676 +2677, O2677 +2678, O2678 +2679, O2679 +2680, O2680 +2681, O2681 +2682, O2682 +2683, O2683 +2684, O2684 +2685, O2685 +2686, O2686 +2687, O2687 +2688, O2688 +2689, O2689 +2690, O2690 +2691, O2691 +2692, O2692 +2693, O2693 +2694, O2694 +2695, O2695 +2696, O2696 +2697, O2697 +2698, O2698 +2699, O2699 +2700, O2700 +2701, O2701 +2702, O2702 +2703, O2703 +2704, O2704 +2705, O2705 +2706, O2706 +2707, O2707 +2708, O2708 +2709, O2709 +2710, O2710 +2711, O2711 +2712, O2712 +2713, O2713 +2714, O2714 +2715, O2715 +2716, O2716 +2717, O2717 +2718, O2718 +2719, O2719 +2720, O2720 +2721, O2721 +2722, O2722 +2723, O2723 +2724, O2724 +2725, O2725 +2726, O2726 +2727, O2727 +2728, O2728 +2729, O2729 +2730, O2730 +2731, O2731 +2732, O2732 +2733, O2733 +2734, O2734 +2735, O2735 +2736, O2736 +2737, O2737 +2738, O2738 +2739, O2739 +2740, O2740 +2741, O2741 +2742, O2742 +2743, O2743 +2744, O2744 +2745, O2745 +2746, O2746 +2747, O2747 +2748, O2748 +2749, O2749 +2750, O2750 +2751, O2751 +2752, O2752 +2753, O2753 +2754, O2754 +2755, O2755 +2756, O2756 +2757, O2757 +2758, O2758 +2759, O2759 +2760, O2760 +2761, O2761 +2762, O2762 +2763, O2763 +2764, O2764 +2765, O2765 +2766, O2766 +2767, O2767 +2768, O2768 +2769, O2769 +2770, O2770 +2771, O2771 +2772, O2772 +2773, O2773 +2774, O2774 +2775, O2775 +2776, O2776 +2777, O2777 +2778, O2778 +2779, O2779 +2780, O2780 +2781, O2781 +2782, O2782 +2783, O2783 +2784, O2784 +2785, O2785 +2786, O2786 +2787, O2787 +2788, O2788 +2789, O2789 +2790, O2790 +2791, O2791 +2792, O2792 +2793, O2793 +2794, O2794 +2795, O2795 +2796, O2796 +2797, O2797 +2798, O2798 +2799, O2799 +2800, O2800 +2801, O2801 +2802, O2802 +2803, O2803 +2804, O2804 +2805, O2805 +2806, O2806 +2807, O2807 +2808, O2808 +2809, O2809 +2810, O2810 +2811, O2811 +2812, O2812 +2813, O2813 +2814, O2814 +2815, O2815 +2816, O2816 +2817, O2817 +2818, O2818 +2819, O2819 +2820, O2820 +2821, O2821 +2822, O2822 +2823, O2823 +2824, O2824 +2825, O2825 +2826, O2826 +2827, O2827 +2828, O2828 +2829, O2829 +2830, O2830 +2831, O2831 +2832, O2832 +2833, O2833 +2834, O2834 +2835, O2835 +2836, O2836 +2837, O2837 +2838, O2838 +2839, O2839 +2840, O2840 +2841, O2841 +2842, O2842 +2843, O2843 +2844, O2844 +2845, O2845 +2846, O2846 +2847, O2847 +2848, O2848 +2849, O2849 +2850, O2850 +2851, O2851 +2852, O2852 +2853, O2853 +2854, O2854 +2855, O2855 +2856, O2856 +2857, O2857 +2858, O2858 +2859, O2859 +2860, O2860 +2861, O2861 +2862, O2862 +2863, O2863 +2864, O2864 +2865, O2865 +2866, O2866 +2867, O2867 +2868, O2868 +2869, O2869 +2870, O2870 +2871, O2871 +2872, O2872 +2873, O2873 +2874, O2874 +2875, O2875 +2876, O2876 +2877, O2877 +2878, O2878 +2879, O2879 +2880, O2880 +2881, O2881 +2882, O2882 +2883, O2883 +2884, O2884 +2885, O2885 +2886, O2886 +2887, O2887 +2888, O2888 +2889, O2889 +2890, O2890 +2891, O2891 +2892, O2892 +2893, O2893 +2894, O2894 +2895, O2895 +2896, O2896 +2897, O2897 +2898, O2898 +2899, O2899 +2900, O2900 +2901, O2901 +2902, O2902 +2903, O2903 +2904, O2904 +2905, O2905 +2906, O2906 +2907, O2907 +2908, O2908 +2909, O2909 +2910, O2910 +2911, O2911 +2912, O2912 +2913, O2913 +2914, O2914 +2915, O2915 +2916, O2916 +2917, O2917 +2918, O2918 +2919, O2919 +2920, O2920 +2921, O2921 +2922, O2922 +2923, O2923 +2924, O2924 +2925, O2925 +2926, O2926 +2927, O2927 +2928, O2928 +2929, O2929 +2930, O2930 +2931, O2931 +2932, O2932 +2933, O2933 +2934, O2934 +2935, O2935 +2936, O2936 +2937, O2937 +2938, O2938 +2939, O2939 +2940, O2940 +2941, O2941 +2942, O2942 +2943, O2943 +2944, O2944 +2945, O2945 +2946, O2946 +2947, O2947 +2948, O2948 +2949, O2949 +2950, O2950 +2951, O2951 +2952, O2952 +2953, O2953 +2954, O2954 +2955, O2955 +2956, O2956 +2957, O2957 +2958, O2958 +2959, O2959 +2960, O2960 +2961, O2961 +2962, O2962 +2963, O2963 +2964, O2964 +2965, O2965 +2966, O2966 +2967, O2967 +2968, O2968 +2969, O2969 +2970, O2970 +2971, O2971 +2972, O2972 +2973, O2973 +2974, O2974 +2975, O2975 +2976, O2976 +2977, O2977 +2978, O2978 +2979, O2979 +2980, O2980 +2981, O2981 +2982, O2982 +2983, O2983 +2984, O2984 +2985, O2985 +2986, O2986 +2987, O2987 +2988, O2988 +2989, O2989 +2990, O2990 +2991, O2991 +2992, O2992 +2993, O2993 +2994, O2994 +2995, O2995 +2996, O2996 +2997, O2997 +2998, O2998 +2999, O2999 +3000, O3000 +3001, O3001 +3002, O3002 +3003, O3003 +3004, O3004 +3005, O3005 +3006, O3006 +3007, O3007 +3008, O3008 +3009, O3009 +3010, O3010 +3011, O3011 +3012, O3012 +3013, O3013 +3014, O3014 +3015, O3015 +3016, O3016 +3017, O3017 +3018, O3018 +3019, O3019 +3020, O3020 +3021, O3021 +3022, O3022 +3023, O3023 +3024, O3024 +3025, O3025 +3026, O3026 +3027, O3027 +3028, O3028 +3029, O3029 +3030, O3030 +3031, O3031 +3032, O3032 +3033, O3033 +3034, O3034 +3035, O3035 +3036, O3036 +3037, O3037 +3038, O3038 +3039, O3039 +3040, O3040 +3041, O3041 +3042, O3042 +3043, O3043 +3044, O3044 +3045, O3045 +3046, O3046 +3047, O3047 +3048, O3048 +3049, O3049 +3050, O3050 +3051, O3051 +3052, O3052 +3053, O3053 +3054, O3054 +3055, O3055 +3056, O3056 +3057, O3057 +3058, O3058 +3059, O3059 +3060, O3060 +3061, O3061 +3062, O3062 +3063, O3063 +3064, O3064 +3065, O3065 +3066, O3066 +3067, O3067 +3068, O3068 +3069, O3069 +3070, O3070 +3071, O3071 +3072, O3072 +3073, O3073 +3074, O3074 +3075, O3075 +3076, O3076 +3077, O3077 +3078, O3078 +3079, O3079 +3080, O3080 +3081, O3081 +3082, O3082 +3083, O3083 +3084, O3084 +3085, O3085 +3086, O3086 +3087, O3087 +3088, O3088 +3089, O3089 +3090, O3090 +3091, O3091 +3092, O3092 +3093, O3093 +3094, O3094 +3095, O3095 +3096, O3096 +3097, O3097 +3098, O3098 +3099, O3099 +3100, O3100 +3101, O3101 +3102, O3102 +3103, O3103 +3104, O3104 +3105, O3105 +3106, O3106 +3107, O3107 +3108, O3108 +3109, O3109 +3110, O3110 +3111, O3111 +3112, O3112 +3113, O3113 +3114, O3114 +3115, O3115 +3116, O3116 +3117, O3117 +3118, O3118 +3119, O3119 +3120, O3120 +3121, O3121 +3122, O3122 +3123, O3123 +3124, O3124 +3125, O3125 +3126, O3126 +3127, O3127 +3128, O3128 +3129, O3129 +3130, O3130 +3131, O3131 +3132, O3132 +3133, O3133 +3134, O3134 +3135, O3135 +3136, O3136 +3137, O3137 +3138, O3138 +3139, O3139 +3140, O3140 +3141, O3141 +3142, O3142 +3143, O3143 +3144, O3144 +3145, O3145 +3146, O3146 +3147, O3147 +3148, O3148 +3149, O3149 +3150, O3150 +3151, O3151 +3152, O3152 +3153, O3153 +3154, O3154 +3155, O3155 +3156, O3156 +3157, O3157 +3158, O3158 +3159, O3159 +3160, O3160 +3161, O3161 +3162, O3162 +3163, O3163 +3164, O3164 +3165, O3165 +3166, O3166 +3167, O3167 +3168, O3168 +3169, O3169 +3170, O3170 +3171, O3171 +3172, O3172 +3173, O3173 +3174, O3174 +3175, O3175 +3176, O3176 +3177, O3177 +3178, O3178 +3179, O3179 +3180, O3180 +3181, O3181 +3182, O3182 +3183, O3183 +3184, O3184 +3185, O3185 +3186, O3186 +3187, O3187 +3188, O3188 +3189, O3189 +3190, O3190 +3191, O3191 +3192, O3192 +3193, O3193 +3194, O3194 +3195, O3195 +3196, O3196 +3197, O3197 +3198, O3198 +3199, O3199 +3200, O3200 +3201, O3201 +3202, O3202 +3203, O3203 +3204, O3204 +3205, O3205 +3206, O3206 +3207, O3207 +3208, O3208 +3209, O3209 +3210, O3210 +3211, O3211 +3212, O3212 +3213, O3213 +3214, O3214 +3215, O3215 +3216, O3216 +3217, O3217 +3218, O3218 +3219, O3219 +3220, O3220 +3221, O3221 +3222, O3222 +3223, O3223 +3224, O3224 +3225, O3225 +3226, O3226 +3227, O3227 +3228, O3228 +3229, O3229 +3230, O3230 +3231, O3231 +3232, O3232 +3233, O3233 +3234, O3234 +3235, O3235 +3236, O3236 +3237, O3237 +3238, O3238 +3239, O3239 +3240, O3240 +3241, O3241 +3242, O3242 +3243, O3243 +3244, O3244 +3245, O3245 +3246, O3246 +3247, O3247 +3248, O3248 +3249, O3249 +3250, O3250 +3251, O3251 +3252, O3252 +3253, O3253 +3254, O3254 +3255, O3255 +3256, O3256 +3257, O3257 +3258, O3258 +3259, O3259 +3260, O3260 +3261, O3261 +3262, O3262 +3263, O3263 +3264, O3264 +3265, O3265 +3266, O3266 +3267, O3267 +3268, O3268 +3269, O3269 +3270, O3270 +3271, O3271 +3272, O3272 +3273, O3273 +3274, O3274 +3275, O3275 +3276, O3276 +3277, O3277 +3278, O3278 +3279, O3279 +3280, O3280 +3281, O3281 +3282, O3282 +3283, O3283 +3284, O3284 +3285, O3285 +3286, O3286 +3287, O3287 +3288, O3288 +3289, O3289 +3290, O3290 +3291, O3291 +3292, O3292 +3293, O3293 +3294, O3294 +3295, O3295 +3296, O3296 +3297, O3297 +3298, O3298 +3299, O3299 +3300, O3300 +3301, O3301 +3302, O3302 +3303, O3303 +3304, O3304 +3305, O3305 +3306, O3306 +3307, O3307 +3308, O3308 +3309, O3309 +3310, O3310 +3311, O3311 +3312, O3312 +3313, O3313 +3314, O3314 +3315, O3315 +3316, O3316 +3317, O3317 +3318, O3318 +3319, O3319 +3320, O3320 +3321, O3321 +3322, O3322 +3323, O3323 +3324, O3324 +3325, O3325 +3326, O3326 +3327, O3327 +3328, O3328 +3329, O3329 +3330, O3330 +3331, O3331 +3332, O3332 +3333, O3333 +3334, O3334 +3335, O3335 +3336, O3336 +3337, O3337 +3338, O3338 +3339, O3339 +3340, O3340 +3341, O3341 +3342, O3342 +3343, O3343 +3344, O3344 +3345, O3345 +3346, O3346 +3347, O3347 +3348, O3348 +3349, O3349 +3350, O3350 +3351, O3351 +3352, O3352 +3353, O3353 +3354, O3354 +3355, O3355 +3356, O3356 +3357, O3357 +3358, O3358 +3359, O3359 +3360, O3360 +3361, O3361 +3362, O3362 +3363, O3363 +3364, O3364 +3365, O3365 +3366, O3366 +3367, O3367 +3368, O3368 +3369, O3369 +3370, O3370 +3371, O3371 +3372, O3372 +3373, O3373 +3374, O3374 +3375, O3375 +3376, O3376 +3377, O3377 +3378, O3378 +3379, O3379 +3380, O3380 +3381, O3381 +3382, O3382 +3383, O3383 +3384, O3384 +3385, O3385 +3386, O3386 +3387, O3387 +3388, O3388 +3389, O3389 +3390, O3390 +3391, O3391 +3392, O3392 +3393, O3393 +3394, O3394 +3395, O3395 +3396, O3396 +3397, O3397 +3398, O3398 +3399, O3399 +3400, O3400 +3401, O3401 +3402, O3402 +3403, O3403 +3404, O3404 +3405, O3405 +3406, O3406 +3407, O3407 +3408, O3408 +3409, O3409 +3410, O3410 +3411, O3411 +3412, O3412 +3413, O3413 +3414, O3414 +3415, O3415 +3416, O3416 +3417, O3417 +3418, O3418 +3419, O3419 +3420, O3420 +3421, O3421 +3422, O3422 +3423, O3423 +3424, O3424 +3425, O3425 +3426, O3426 +3427, O3427 +3428, O3428 +3429, O3429 +3430, O3430 +3431, O3431 +3432, O3432 +3433, O3433 +3434, O3434 +3435, O3435 +3436, O3436 +3437, O3437 +3438, O3438 +3439, O3439 +3440, O3440 +3441, O3441 +3442, O3442 +3443, O3443 +3444, O3444 +3445, O3445 +3446, O3446 +3447, O3447 +3448, O3448 +3449, O3449 +3450, O3450 +3451, O3451 +3452, O3452 +3453, O3453 +3454, O3454 +3455, O3455 +3456, O3456 +3457, O3457 +3458, O3458 +3459, O3459 +3460, O3460 +3461, O3461 +3462, O3462 +3463, O3463 +3464, O3464 +3465, O3465 +3466, O3466 +3467, O3467 +3468, O3468 +3469, O3469 +3470, O3470 +3471, O3471 +3472, O3472 +3473, O3473 +3474, O3474 +3475, O3475 +3476, O3476 +3477, O3477 +3478, O3478 +3479, O3479 +3480, O3480 +3481, O3481 +3482, O3482 +3483, O3483 +3484, O3484 +3485, O3485 +3486, O3486 +3487, O3487 +3488, O3488 +3489, O3489 +3490, O3490 +3491, O3491 +3492, O3492 +3493, O3493 +3494, O3494 +3495, O3495 +3496, O3496 +3497, O3497 +3498, O3498 +3499, O3499 +3500, O3500 +3501, O3501 +3502, O3502 +3503, O3503 +3504, O3504 +3505, O3505 +3506, O3506 +3507, O3507 +3508, O3508 +3509, O3509 +3510, O3510 +3511, O3511 +3512, O3512 +3513, O3513 +3514, O3514 +3515, O3515 +3516, O3516 +3517, O3517 +3518, O3518 +3519, O3519 +3520, O3520 +3521, O3521 +3522, O3522 +3523, O3523 +3524, O3524 +3525, O3525 +3526, O3526 +3527, O3527 +3528, O3528 +3529, O3529 +3530, O3530 +3531, O3531 +3532, O3532 +3533, O3533 +3534, O3534 +3535, O3535 +3536, O3536 +3537, O3537 +3538, O3538 +3539, O3539 +3540, O3540 +3541, O3541 +3542, O3542 +3543, O3543 +3544, O3544 +3545, O3545 +3546, O3546 +3547, O3547 +3548, O3548 +3549, O3549 +3550, O3550 +3551, O3551 +3552, O3552 +3553, O3553 +3554, O3554 +3555, O3555 +3556, O3556 +3557, O3557 +3558, O3558 +3559, O3559 +3560, O3560 +3561, O3561 +3562, O3562 +3563, O3563 +3564, O3564 +3565, O3565 +3566, O3566 +3567, O3567 +3568, O3568 +3569, O3569 +3570, O3570 +3571, O3571 +3572, O3572 +3573, O3573 +3574, O3574 +3575, O3575 +3576, O3576 +3577, O3577 +3578, O3578 +3579, O3579 +3580, O3580 +3581, O3581 +3582, O3582 +3583, O3583 +3584, O3584 +3585, O3585 +3586, O3586 +3587, O3587 +3588, O3588 +3589, O3589 +3590, O3590 +3591, O3591 +3592, O3592 +3593, O3593 +3594, O3594 +3595, O3595 +3596, O3596 +3597, O3597 +3598, O3598 +3599, O3599 +3600, O3600 +3601, O3601 +3602, O3602 +3603, O3603 +3604, O3604 +3605, O3605 +3606, O3606 +3607, O3607 +3608, O3608 +3609, O3609 +3610, O3610 +3611, O3611 +3612, O3612 +3613, O3613 +3614, O3614 +3615, O3615 +3616, O3616 +3617, O3617 +3618, O3618 +3619, O3619 +3620, O3620 +3621, O3621 +3622, O3622 +3623, O3623 +3624, O3624 +3625, O3625 +3626, O3626 +3627, O3627 +3628, O3628 +3629, O3629 +3630, O3630 +3631, O3631 +3632, O3632 +3633, O3633 +3634, O3634 +3635, O3635 +3636, O3636 +3637, O3637 +3638, O3638 +3639, O3639 +3640, O3640 +3641, O3641 +3642, O3642 +3643, O3643 +3644, O3644 +3645, O3645 +3646, O3646 +3647, O3647 +3648, O3648 +3649, O3649 +3650, O3650 +3651, O3651 +3652, O3652 +3653, O3653 +3654, O3654 +3655, O3655 +3656, O3656 +3657, O3657 +3658, O3658 +3659, O3659 +3660, O3660 +3661, O3661 +3662, O3662 +3663, O3663 +3664, O3664 +3665, O3665 +3666, O3666 +3667, O3667 +3668, O3668 +3669, O3669 +3670, O3670 +3671, O3671 +3672, O3672 +3673, O3673 +3674, O3674 +3675, O3675 +3676, O3676 +3677, O3677 +3678, O3678 +3679, O3679 +3680, O3680 +3681, O3681 +3682, O3682 +3683, O3683 +3684, O3684 +3685, O3685 +3686, O3686 +3687, O3687 +3688, O3688 +3689, O3689 +3690, O3690 +3691, O3691 +3692, O3692 +3693, O3693 +3694, O3694 +3695, O3695 +3696, O3696 +3697, O3697 +3698, O3698 +3699, O3699 +3700, O3700 +3701, O3701 +3702, O3702 +3703, O3703 +3704, O3704 +3705, O3705 +3706, O3706 +3707, O3707 +3708, O3708 +3709, O3709 +3710, O3710 +3711, O3711 +3712, O3712 +3713, O3713 +3714, O3714 +3715, O3715 +3716, O3716 +3717, O3717 +3718, O3718 +3719, O3719 +3720, O3720 +3721, O3721 +3722, O3722 +3723, O3723 +3724, O3724 +3725, O3725 +3726, O3726 +3727, O3727 +3728, O3728 +3729, O3729 +3730, O3730 +3731, O3731 +3732, O3732 +3733, O3733 +3734, O3734 +3735, O3735 +3736, O3736 +3737, O3737 +3738, O3738 +3739, O3739 +3740, O3740 +3741, O3741 +3742, O3742 +3743, O3743 +3744, O3744 +3745, O3745 +3746, O3746 +3747, O3747 +3748, O3748 +3749, O3749 +3750, O3750 +3751, O3751 +3752, O3752 +3753, O3753 +3754, O3754 +3755, O3755 +3756, O3756 +3757, O3757 +3758, O3758 +3759, O3759 +3760, O3760 +3761, O3761 +3762, O3762 +3763, O3763 +3764, O3764 +3765, O3765 +3766, O3766 +3767, O3767 +3768, O3768 +3769, O3769 +3770, O3770 +3771, O3771 +3772, O3772 +3773, O3773 +3774, O3774 +3775, O3775 +3776, O3776 +3777, O3777 +3778, O3778 +3779, O3779 +3780, O3780 +3781, O3781 +3782, O3782 +3783, O3783 +3784, O3784 +3785, O3785 +3786, O3786 +3787, O3787 +3788, O3788 +3789, O3789 +3790, O3790 +3791, O3791 +3792, O3792 +3793, O3793 +3794, O3794 +3795, O3795 +3796, O3796 +3797, O3797 +3798, O3798 +3799, O3799 +3800, O3800 +3801, O3801 +3802, O3802 +3803, O3803 +3804, O3804 +3805, O3805 +3806, O3806 +3807, O3807 +3808, O3808 +3809, O3809 +3810, O3810 +3811, O3811 +3812, O3812 +3813, O3813 +3814, O3814 +3815, O3815 +3816, O3816 +3817, O3817 +3818, O3818 +3819, O3819 +3820, O3820 +3821, O3821 +3822, O3822 +3823, O3823 +3824, O3824 +3825, O3825 +3826, O3826 +3827, O3827 +3828, O3828 +3829, O3829 +3830, O3830 +3831, O3831 +3832, O3832 +3833, O3833 +3834, O3834 +3835, O3835 +3836, O3836 +3837, O3837 +3838, O3838 +3839, O3839 +3840, O3840 +3841, O3841 +3842, O3842 +3843, O3843 +3844, O3844 +3845, O3845 +3846, O3846 +3847, O3847 +3848, O3848 +3849, O3849 +3850, O3850 +3851, O3851 +3852, O3852 +3853, O3853 +3854, O3854 +3855, O3855 +3856, O3856 +3857, O3857 +3858, O3858 +3859, O3859 +3860, O3860 +3861, O3861 +3862, O3862 +3863, O3863 +3864, O3864 +3865, O3865 +3866, O3866 +3867, O3867 +3868, O3868 +3869, O3869 +3870, O3870 +3871, O3871 +3872, O3872 +3873, O3873 +3874, O3874 +3875, O3875 +3876, O3876 +3877, O3877 +3878, O3878 +3879, O3879 +3880, O3880 +3881, O3881 +3882, O3882 +3883, O3883 +3884, O3884 +3885, O3885 +3886, O3886 +3887, O3887 +3888, O3888 +3889, O3889 +3890, O3890 +3891, O3891 +3892, O3892 +3893, O3893 +3894, O3894 +3895, O3895 +3896, O3896 +3897, O3897 +3898, O3898 +3899, O3899 +3900, O3900 +3901, O3901 +3902, O3902 +3903, O3903 +3904, O3904 +3905, O3905 +3906, O3906 +3907, O3907 +3908, O3908 +3909, O3909 +3910, O3910 +3911, O3911 +3912, O3912 +3913, O3913 +3914, O3914 +3915, O3915 +3916, O3916 +3917, O3917 +3918, O3918 +3919, O3919 +3920, O3920 +3921, O3921 +3922, O3922 +3923, O3923 +3924, O3924 +3925, O3925 +3926, O3926 +3927, O3927 +3928, O3928 +3929, O3929 +3930, O3930 +3931, O3931 +3932, O3932 +3933, O3933 +3934, O3934 +3935, O3935 +3936, O3936 +3937, O3937 +3938, O3938 +3939, O3939 +3940, O3940 +3941, O3941 +3942, O3942 +3943, O3943 +3944, O3944 +3945, O3945 +3946, O3946 +3947, O3947 +3948, O3948 +3949, O3949 +3950, O3950 +3951, O3951 +3952, O3952 +3953, O3953 +3954, O3954 +3955, O3955 +3956, O3956 +3957, O3957 +3958, O3958 +3959, O3959 +3960, O3960 +3961, O3961 +3962, O3962 +3963, O3963 +3964, O3964 +3965, O3965 +3966, O3966 +3967, O3967 +3968, O3968 +3969, O3969 +3970, O3970 +3971, O3971 +3972, O3972 +3973, O3973 +3974, O3974 +3975, O3975 +3976, O3976 +3977, O3977 +3978, O3978 +3979, O3979 +3980, O3980 +3981, O3981 +3982, O3982 +3983, O3983 +3984, O3984 +3985, O3985 +3986, O3986 +3987, O3987 +3988, O3988 +3989, O3989 +3990, O3990 +3991, O3991 +3992, O3992 +3993, O3993 +3994, O3994 +3995, O3995 +3996, O3996 +3997, O3997 +3998, O3998 +3999, O3999 +4000, O4000 +4001, O4001 +4002, O4002 +4003, O4003 +4004, O4004 +4005, O4005 +4006, O4006 +4007, O4007 +4008, O4008 +4009, O4009 +4010, O4010 +4011, O4011 +4012, O4012 +4013, O4013 +4014, O4014 +4015, O4015 +4016, O4016 +4017, O4017 +4018, O4018 +4019, O4019 +4020, O4020 +4021, O4021 +4022, O4022 +4023, O4023 +4024, O4024 +4025, O4025 +4026, O4026 +4027, O4027 +4028, O4028 +4029, O4029 +4030, O4030 +4031, O4031 +4032, O4032 +4033, O4033 +4034, O4034 +4035, O4035 +4036, O4036 +4037, O4037 +4038, O4038 +4039, O4039 +4040, O4040 +4041, O4041 +4042, O4042 +4043, O4043 +4044, O4044 +4045, O4045 +4046, O4046 +4047, O4047 +4048, O4048 +4049, O4049 +4050, O4050 +4051, O4051 +4052, O4052 +4053, O4053 +4054, O4054 +4055, O4055 +4056, O4056 +4057, O4057 +4058, O4058 +4059, O4059 +4060, O4060 +4061, O4061 +4062, O4062 +4063, O4063 +4064, O4064 +4065, O4065 +4066, O4066 +4067, O4067 +4068, O4068 +4069, O4069 +4070, O4070 +4071, O4071 +4072, O4072 +4073, O4073 +4074, O4074 +4075, O4075 +4076, O4076 +4077, O4077 +4078, O4078 +4079, O4079 +4080, O4080 +4081, O4081 +4082, O4082 +4083, O4083 +4084, O4084 +4085, O4085 +4086, O4086 +4087, O4087 +4088, O4088 +4089, O4089 +4090, O4090 +4091, O4091 +4092, O4092 +4093, O4093 +4094, O4094 +4095, O4095 +4096, O4096 +4097, O4097 +4098, O4098 +4099, O4099 +4100, O4100 +4101, O4101 +4102, O4102 +4103, O4103 +4104, O4104 +4105, O4105 +4106, O4106 +4107, O4107 +4108, O4108 +4109, O4109 +4110, O4110 +4111, O4111 +4112, O4112 +4113, O4113 +4114, O4114 +4115, O4115 +4116, O4116 +4117, O4117 +4118, O4118 +4119, O4119 +4120, O4120 +4121, O4121 +4122, O4122 +4123, O4123 +4124, O4124 +4125, O4125 +4126, O4126 +4127, O4127 +4128, O4128 +4129, O4129 +4130, O4130 +4131, O4131 +4132, O4132 +4133, O4133 +4134, O4134 +4135, O4135 +4136, O4136 +4137, O4137 +4138, O4138 +4139, O4139 +4140, O4140 +4141, O4141 +4142, O4142 +4143, O4143 +4144, O4144 +4145, O4145 +4146, O4146 +4147, O4147 +4148, O4148 +4149, O4149 +4150, O4150 +4151, O4151 +4152, O4152 +4153, O4153 +4154, O4154 +4155, O4155 +4156, O4156 +4157, O4157 +4158, O4158 +4159, O4159 +4160, O4160 +4161, O4161 +4162, O4162 +4163, O4163 +4164, O4164 +4165, O4165 +4166, O4166 +4167, O4167 +4168, O4168 +4169, O4169 +4170, O4170 +4171, O4171 +4172, O4172 +4173, O4173 +4174, O4174 +4175, O4175 +4176, O4176 +4177, O4177 +4178, O4178 +4179, O4179 +4180, O4180 +4181, O4181 +4182, O4182 +4183, O4183 +4184, O4184 +4185, O4185 +4186, O4186 +4187, O4187 +4188, O4188 +4189, O4189 +4190, O4190 +4191, O4191 +4192, O4192 +4193, O4193 +4194, O4194 +4195, O4195 +4196, O4196 +4197, O4197 +4198, O4198 +4199, O4199 +4200, O4200 +4201, O4201 +4202, O4202 +4203, O4203 +4204, O4204 +4205, O4205 +4206, O4206 +4207, O4207 +4208, O4208 +4209, O4209 +4210, O4210 +4211, O4211 +4212, O4212 +4213, O4213 +4214, O4214 +4215, O4215 +4216, O4216 +4217, O4217 +4218, O4218 +4219, O4219 +4220, O4220 +4221, O4221 +4222, O4222 +4223, O4223 +4224, O4224 +4225, O4225 +4226, O4226 +4227, O4227 +4228, O4228 +4229, O4229 +4230, O4230 +4231, O4231 +4232, O4232 +4233, O4233 +4234, O4234 +4235, O4235 +4236, O4236 +4237, O4237 +4238, O4238 +4239, O4239 +4240, O4240 +4241, O4241 +4242, O4242 +4243, O4243 +4244, O4244 +4245, O4245 +4246, O4246 +4247, O4247 +4248, O4248 +4249, O4249 +4250, O4250 +4251, O4251 +4252, O4252 +4253, O4253 +4254, O4254 +4255, O4255 +4256, O4256 +4257, O4257 +4258, O4258 +4259, O4259 +4260, O4260 +4261, O4261 +4262, O4262 +4263, O4263 +4264, O4264 +4265, O4265 +4266, O4266 +4267, O4267 +4268, O4268 +4269, O4269 +4270, O4270 +4271, O4271 +4272, O4272 +4273, O4273 +4274, O4274 +4275, O4275 +4276, O4276 +4277, O4277 +4278, O4278 +4279, O4279 +4280, O4280 +4281, O4281 +4282, O4282 +4283, O4283 +4284, O4284 +4285, O4285 +4286, O4286 +4287, O4287 +4288, O4288 +4289, O4289 +4290, O4290 +4291, O4291 +4292, O4292 +4293, O4293 +4294, O4294 +4295, O4295 +4296, O4296 +4297, O4297 +4298, O4298 +4299, O4299 +4300, O4300 +4301, O4301 +4302, O4302 +4303, O4303 +4304, O4304 +4305, O4305 +4306, O4306 +4307, O4307 +4308, O4308 +4309, O4309 +4310, O4310 +4311, O4311 +4312, O4312 +4313, O4313 +4314, O4314 +4315, O4315 +4316, O4316 +4317, O4317 +4318, O4318 +4319, O4319 +4320, O4320 +4321, O4321 +4322, O4322 +4323, O4323 +4324, O4324 +4325, O4325 +4326, O4326 +4327, O4327 +4328, O4328 +4329, O4329 +4330, O4330 +4331, O4331 +4332, O4332 +4333, O4333 +4334, O4334 +4335, O4335 +4336, O4336 +4337, O4337 +4338, O4338 +4339, O4339 +4340, O4340 +4341, O4341 +4342, O4342 +4343, O4343 +4344, O4344 +4345, O4345 +4346, O4346 +4347, O4347 +4348, O4348 +4349, O4349 +4350, O4350 +4351, O4351 +4352, O4352 +4353, O4353 +4354, O4354 +4355, O4355 +4356, O4356 +4357, O4357 +4358, O4358 +4359, O4359 +4360, O4360 +4361, O4361 +4362, O4362 +4363, O4363 +4364, O4364 +4365, O4365 +4366, O4366 +4367, O4367 +4368, O4368 +4369, O4369 +4370, O4370 +4371, O4371 +4372, O4372 +4373, O4373 +4374, O4374 +4375, O4375 +4376, O4376 +4377, O4377 +4378, O4378 +4379, O4379 +4380, O4380 +4381, O4381 +4382, O4382 +4383, O4383 +4384, O4384 +4385, O4385 +4386, O4386 +4387, O4387 +4388, O4388 +4389, O4389 +4390, O4390 +4391, O4391 +4392, O4392 +4393, O4393 +4394, O4394 +4395, O4395 +4396, O4396 +4397, O4397 +4398, O4398 +4399, O4399 +4400, O4400 +4401, O4401 +4402, O4402 +4403, O4403 +4404, O4404 +4405, O4405 +4406, O4406 +4407, O4407 +4408, O4408 +4409, O4409 +4410, O4410 +4411, O4411 +4412, O4412 +4413, O4413 +4414, O4414 +4415, O4415 +4416, O4416 +4417, O4417 +4418, O4418 +4419, O4419 +4420, O4420 +4421, O4421 +4422, O4422 +4423, O4423 +4424, O4424 +4425, O4425 +4426, O4426 +4427, O4427 +4428, O4428 +4429, O4429 +4430, O4430 +4431, O4431 +4432, O4432 +4433, O4433 +4434, O4434 +4435, O4435 +4436, O4436 +4437, O4437 +4438, O4438 +4439, O4439 +4440, O4440 +4441, O4441 +4442, O4442 +4443, O4443 +4444, O4444 +4445, O4445 +4446, O4446 +4447, O4447 +4448, O4448 +4449, O4449 +4450, O4450 +4451, O4451 +4452, O4452 +4453, O4453 +4454, O4454 +4455, O4455 +4456, O4456 +4457, O4457 +4458, O4458 +4459, O4459 +4460, O4460 +4461, O4461 +4462, O4462 +4463, O4463 +4464, O4464 +4465, O4465 +4466, O4466 +4467, O4467 +4468, O4468 +4469, O4469 +4470, O4470 +4471, O4471 +4472, O4472 +4473, O4473 +4474, O4474 +4475, O4475 +4476, O4476 +4477, O4477 +4478, O4478 +4479, O4479 +4480, O4480 +4481, O4481 +4482, O4482 +4483, O4483 +4484, O4484 +4485, O4485 +4486, O4486 +4487, O4487 +4488, O4488 +4489, O4489 +4490, O4490 +4491, O4491 +4492, O4492 +4493, O4493 +4494, O4494 +4495, O4495 +4496, O4496 +4497, O4497 +4498, O4498 +4499, O4499 +4500, O4500 +4501, O4501 +4502, O4502 +4503, O4503 +4504, O4504 +4505, O4505 +4506, O4506 +4507, O4507 +4508, O4508 +4509, O4509 +4510, O4510 +4511, O4511 +4512, O4512 +4513, O4513 +4514, O4514 +4515, O4515 +4516, O4516 +4517, O4517 +4518, O4518 +4519, O4519 +4520, O4520 +4521, O4521 +4522, O4522 +4523, O4523 +4524, O4524 +4525, O4525 +4526, O4526 +4527, O4527 +4528, O4528 +4529, O4529 +4530, O4530 +4531, O4531 +4532, O4532 +4533, O4533 +4534, O4534 +4535, O4535 +4536, O4536 +4537, O4537 +4538, O4538 +4539, O4539 +4540, O4540 +4541, O4541 +4542, O4542 +4543, O4543 +4544, O4544 +4545, O4545 +4546, O4546 +4547, O4547 +4548, O4548 +4549, O4549 +4550, O4550 +4551, O4551 +4552, O4552 +4553, O4553 +4554, O4554 +4555, O4555 +4556, O4556 +4557, O4557 +4558, O4558 +4559, O4559 +4560, O4560 +4561, O4561 +4562, O4562 +4563, O4563 +4564, O4564 +4565, O4565 +4566, O4566 +4567, O4567 +4568, O4568 +4569, O4569 +4570, O4570 +4571, O4571 +4572, O4572 +4573, O4573 +4574, O4574 +4575, O4575 +4576, O4576 +4577, O4577 +4578, O4578 +4579, O4579 +4580, O4580 +4581, O4581 +4582, O4582 +4583, O4583 +4584, O4584 +4585, O4585 +4586, O4586 +4587, O4587 +4588, O4588 +4589, O4589 +4590, O4590 +4591, O4591 +4592, O4592 +4593, O4593 +4594, O4594 +4595, O4595 +4596, O4596 +4597, O4597 +4598, O4598 +4599, O4599 +4600, O4600 +4601, O4601 +4602, O4602 +4603, O4603 +4604, O4604 +4605, O4605 +4606, O4606 +4607, O4607 +4608, O4608 +4609, O4609 +4610, O4610 +4611, O4611 +4612, O4612 +4613, O4613 +4614, O4614 +4615, O4615 +4616, O4616 +4617, O4617 +4618, O4618 +4619, O4619 +4620, O4620 +4621, O4621 +4622, O4622 +4623, O4623 +4624, O4624 +4625, O4625 +4626, O4626 +4627, O4627 +4628, O4628 +4629, O4629 +4630, O4630 +4631, O4631 +4632, O4632 +4633, O4633 +4634, O4634 +4635, O4635 +4636, O4636 +4637, O4637 +4638, O4638 +4639, O4639 +4640, O4640 +4641, O4641 +4642, O4642 +4643, O4643 +4644, O4644 +4645, O4645 +4646, O4646 +4647, O4647 +4648, O4648 +4649, O4649 +4650, O4650 +4651, O4651 +4652, O4652 +4653, O4653 +4654, O4654 +4655, O4655 +4656, O4656 +4657, O4657 +4658, O4658 +4659, O4659 +4660, O4660 +4661, O4661 +4662, O4662 +4663, O4663 +4664, O4664 +4665, O4665 +4666, O4666 +4667, O4667 +4668, O4668 +4669, O4669 +4670, O4670 +4671, O4671 +4672, O4672 +4673, O4673 +4674, O4674 +4675, O4675 +4676, O4676 +4677, O4677 +4678, O4678 +4679, O4679 +4680, O4680 +4681, O4681 +4682, O4682 +4683, O4683 +4684, O4684 +4685, O4685 +4686, O4686 +4687, O4687 +4688, O4688 +4689, O4689 +4690, O4690 +4691, O4691 +4692, O4692 +4693, O4693 +4694, O4694 +4695, O4695 +4696, O4696 +4697, O4697 +4698, O4698 +4699, O4699 +4700, O4700 +4701, O4701 +4702, O4702 +4703, O4703 +4704, O4704 +4705, O4705 +4706, O4706 +4707, O4707 +4708, O4708 +4709, O4709 +4710, O4710 +4711, O4711 +4712, O4712 +4713, O4713 +4714, O4714 +4715, O4715 +4716, O4716 +4717, O4717 +4718, O4718 +4719, O4719 +4720, O4720 +4721, O4721 +4722, O4722 +4723, O4723 +4724, O4724 +4725, O4725 +4726, O4726 +4727, O4727 +4728, O4728 +4729, O4729 +4730, O4730 +4731, O4731 +4732, O4732 +4733, O4733 +4734, O4734 +4735, O4735 +4736, O4736 +4737, O4737 +4738, O4738 +4739, O4739 +4740, O4740 +4741, O4741 +4742, O4742 +4743, O4743 +4744, O4744 +4745, O4745 +4746, O4746 +4747, O4747 +4748, O4748 +4749, O4749 +4750, O4750 +4751, O4751 +4752, O4752 +4753, O4753 +4754, O4754 +4755, O4755 +4756, O4756 +4757, O4757 +4758, O4758 +4759, O4759 +4760, O4760 +4761, O4761 +4762, O4762 +4763, O4763 +4764, O4764 +4765, O4765 +4766, O4766 +4767, O4767 +4768, O4768 +4769, O4769 +4770, O4770 +4771, O4771 +4772, O4772 +4773, O4773 +4774, O4774 +4775, O4775 +4776, O4776 +4777, O4777 +4778, O4778 +4779, O4779 +4780, O4780 +4781, O4781 +4782, O4782 +4783, O4783 +4784, O4784 +4785, O4785 +4786, O4786 +4787, O4787 +4788, O4788 +4789, O4789 +4790, O4790 +4791, O4791 +4792, O4792 +4793, O4793 +4794, O4794 +4795, O4795 +4796, O4796 +4797, O4797 +4798, O4798 +4799, O4799 +4800, O4800 +4801, O4801 +4802, O4802 +4803, O4803 +4804, O4804 +4805, O4805 +4806, O4806 +4807, O4807 +4808, O4808 +4809, O4809 +4810, O4810 +4811, O4811 +4812, O4812 +4813, O4813 +4814, O4814 +4815, O4815 +4816, O4816 +4817, O4817 +4818, O4818 +4819, O4819 +4820, O4820 +4821, O4821 +4822, O4822 +4823, O4823 +4824, O4824 +4825, O4825 +4826, O4826 +4827, O4827 +4828, O4828 +4829, O4829 +4830, O4830 +4831, O4831 +4832, O4832 +4833, O4833 +4834, O4834 +4835, O4835 +4836, O4836 +4837, O4837 +4838, O4838 +4839, O4839 +4840, O4840 +4841, O4841 +4842, O4842 +4843, O4843 +4844, O4844 +4845, O4845 +4846, O4846 +4847, O4847 +4848, O4848 +4849, O4849 +4850, O4850 +4851, O4851 +4852, O4852 +4853, O4853 +4854, O4854 +4855, O4855 +4856, O4856 +4857, O4857 +4858, O4858 +4859, O4859 +4860, O4860 +4861, O4861 +4862, O4862 +4863, O4863 +4864, O4864 +4865, O4865 +4866, O4866 +4867, O4867 +4868, O4868 +4869, O4869 +4870, O4870 +4871, O4871 +4872, O4872 +4873, O4873 +4874, O4874 +4875, O4875 +4876, O4876 +4877, O4877 +4878, O4878 +4879, O4879 +4880, O4880 +4881, O4881 +4882, O4882 +4883, O4883 +4884, O4884 +4885, O4885 +4886, O4886 +4887, O4887 +4888, O4888 +4889, O4889 +4890, O4890 +4891, O4891 +4892, O4892 +4893, O4893 +4894, O4894 +4895, O4895 +4896, O4896 +4897, O4897 +4898, O4898 +4899, O4899 +4900, O4900 +4901, O4901 +4902, O4902 +4903, O4903 +4904, O4904 +4905, O4905 +4906, O4906 +4907, O4907 +4908, O4908 +4909, O4909 +4910, O4910 +4911, O4911 +4912, O4912 +4913, O4913 +4914, O4914 +4915, O4915 +4916, O4916 +4917, O4917 +4918, O4918 +4919, O4919 +4920, O4920 +4921, O4921 +4922, O4922 +4923, O4923 +4924, O4924 +4925, O4925 +4926, O4926 +4927, O4927 +4928, O4928 +4929, O4929 +4930, O4930 +4931, O4931 +4932, O4932 +4933, O4933 +4934, O4934 +4935, O4935 +4936, O4936 +4937, O4937 +4938, O4938 +4939, O4939 +4940, O4940 +4941, O4941 +4942, O4942 +4943, O4943 +4944, O4944 +4945, O4945 +4946, O4946 +4947, O4947 +4948, O4948 +4949, O4949 +4950, O4950 +4951, O4951 +4952, O4952 +4953, O4953 +4954, O4954 +4955, O4955 +4956, O4956 +4957, O4957 +4958, O4958 +4959, O4959 +4960, O4960 +4961, O4961 +4962, O4962 +4963, O4963 +4964, O4964 +4965, O4965 +4966, O4966 +4967, O4967 +4968, O4968 +4969, O4969 +4970, O4970 +4971, O4971 +4972, O4972 +4973, O4973 +4974, O4974 +4975, O4975 +4976, O4976 +4977, O4977 +4978, O4978 +4979, O4979 +4980, O4980 +4981, O4981 +4982, O4982 +4983, O4983 +4984, O4984 +4985, O4985 +4986, O4986 +4987, O4987 +4988, O4988 +4989, O4989 +4990, O4990 +4991, O4991 +4992, O4992 +4993, O4993 +4994, O4994 +4995, O4995 +4996, O4996 +4997, O4997 +4998, O4998 +4999, O4999 +5000, O5000 +5001, O5001 +5002, O5002 +5003, O5003 +5004, O5004 +5005, O5005 +5006, O5006 +5007, O5007 +5008, O5008 +5009, O5009 +5010, O5010 +5011, O5011 +5012, O5012 +5013, O5013 +5014, O5014 +5015, O5015 +5016, O5016 +5017, O5017 +5018, O5018 +5019, O5019 +5020, O5020 +5021, O5021 +5022, O5022 +5023, O5023 +5024, O5024 +5025, O5025 +5026, O5026 +5027, O5027 +5028, O5028 +5029, O5029 +5030, O5030 +5031, O5031 +5032, O5032 +5033, O5033 +5034, O5034 +5035, O5035 +5036, O5036 +5037, O5037 +5038, O5038 +5039, O5039 +5040, O5040 +5041, O5041 +5042, O5042 +5043, O5043 +5044, O5044 +5045, O5045 +5046, O5046 +5047, O5047 +5048, O5048 +5049, O5049 +5050, O5050 +5051, O5051 +5052, O5052 +5053, O5053 +5054, O5054 +5055, O5055 +5056, O5056 +5057, O5057 +5058, O5058 +5059, O5059 +5060, O5060 +5061, O5061 +5062, O5062 +5063, O5063 +5064, O5064 +5065, O5065 +5066, O5066 +5067, O5067 +5068, O5068 +5069, O5069 +5070, O5070 +5071, O5071 +5072, O5072 +5073, O5073 +5074, O5074 +5075, O5075 +5076, O5076 +5077, O5077 +5078, O5078 +5079, O5079 +5080, O5080 +5081, O5081 +5082, O5082 +5083, O5083 +5084, O5084 +5085, O5085 +5086, O5086 +5087, O5087 +5088, O5088 +5089, O5089 +5090, O5090 +5091, O5091 +5092, O5092 +5093, O5093 +5094, O5094 +5095, O5095 +5096, O5096 +5097, O5097 +5098, O5098 +5099, O5099 +5100, O5100 +5101, O5101 +5102, O5102 +5103, O5103 +5104, O5104 +5105, O5105 +5106, O5106 +5107, O5107 +5108, O5108 +5109, O5109 +5110, O5110 +5111, O5111 +5112, O5112 +5113, O5113 +5114, O5114 +5115, O5115 +5116, O5116 +5117, O5117 +5118, O5118 +5119, O5119 +5120, O5120 +5121, O5121 +5122, O5122 +5123, O5123 +5124, O5124 +5125, O5125 +5126, O5126 +5127, O5127 +5128, O5128 +5129, O5129 +5130, O5130 +5131, O5131 +5132, O5132 +5133, O5133 +5134, O5134 +5135, O5135 +5136, O5136 +5137, O5137 +5138, O5138 +5139, O5139 +5140, O5140 +5141, O5141 +5142, O5142 +5143, O5143 +5144, O5144 +5145, O5145 +5146, O5146 +5147, O5147 +5148, O5148 +5149, O5149 +5150, O5150 +5151, O5151 +5152, O5152 +5153, O5153 +5154, O5154 +5155, O5155 +5156, O5156 +5157, O5157 +5158, O5158 +5159, O5159 +5160, O5160 +5161, O5161 +5162, O5162 +5163, O5163 +5164, O5164 +5165, O5165 +5166, O5166 +5167, O5167 +5168, O5168 +5169, O5169 +5170, O5170 +5171, O5171 +5172, O5172 +5173, O5173 +5174, O5174 +5175, O5175 +5176, O5176 +5177, O5177 +5178, O5178 +5179, O5179 +5180, O5180 +5181, O5181 +5182, O5182 +5183, O5183 +5184, O5184 +5185, O5185 +5186, O5186 +5187, O5187 +5188, O5188 +5189, O5189 +5190, O5190 +5191, O5191 +5192, O5192 +5193, O5193 +5194, O5194 +5195, O5195 +5196, O5196 +5197, O5197 +5198, O5198 +5199, O5199 +5200, O5200 +5201, O5201 +5202, O5202 +5203, O5203 +5204, O5204 +5205, O5205 +5206, O5206 +5207, O5207 +5208, O5208 +5209, O5209 +5210, O5210 +5211, O5211 +5212, O5212 +5213, O5213 +5214, O5214 +5215, O5215 +5216, O5216 +5217, O5217 +5218, O5218 +5219, O5219 +5220, O5220 +5221, O5221 +5222, O5222 +5223, O5223 +5224, O5224 +5225, O5225 +5226, O5226 +5227, O5227 +5228, O5228 +5229, O5229 +5230, O5230 +5231, O5231 +5232, O5232 +5233, O5233 +5234, O5234 +5235, O5235 +5236, O5236 +5237, O5237 +5238, O5238 +5239, O5239 +5240, O5240 +5241, O5241 +5242, O5242 +5243, O5243 +5244, O5244 +5245, O5245 +5246, O5246 +5247, O5247 +5248, O5248 +5249, O5249 +5250, O5250 +5251, O5251 +5252, O5252 +5253, O5253 +5254, O5254 +5255, O5255 +5256, O5256 +5257, O5257 +5258, O5258 +5259, O5259 +5260, O5260 +5261, O5261 +5262, O5262 +5263, O5263 +5264, O5264 +5265, O5265 +5266, O5266 +5267, O5267 +5268, O5268 +5269, O5269 +5270, O5270 +5271, O5271 +5272, O5272 +5273, O5273 +5274, O5274 +5275, O5275 +5276, O5276 +5277, O5277 +5278, O5278 +5279, O5279 +5280, O5280 +5281, O5281 +5282, O5282 +5283, O5283 +5284, O5284 +5285, O5285 +5286, O5286 +5287, O5287 +5288, O5288 +5289, O5289 +5290, O5290 +5291, O5291 +5292, O5292 +5293, O5293 +5294, O5294 +5295, O5295 +5296, O5296 +5297, O5297 +5298, O5298 +5299, O5299 +5300, O5300 +5301, O5301 +5302, O5302 +5303, O5303 +5304, O5304 +5305, O5305 +5306, O5306 +5307, O5307 +5308, O5308 +5309, O5309 +5310, O5310 +5311, O5311 +5312, O5312 +5313, O5313 +5314, O5314 +5315, O5315 +5316, O5316 +5317, O5317 +5318, O5318 +5319, O5319 +5320, O5320 +5321, O5321 +5322, O5322 +5323, O5323 +5324, O5324 +5325, O5325 +5326, O5326 +5327, O5327 +5328, O5328 +5329, O5329 +5330, O5330 +5331, O5331 +5332, O5332 +5333, O5333 +5334, O5334 +5335, O5335 +5336, O5336 +5337, O5337 +5338, O5338 +5339, O5339 +5340, O5340 +5341, O5341 +5342, O5342 +5343, O5343 +5344, O5344 +5345, O5345 +5346, O5346 +5347, O5347 +5348, O5348 +5349, O5349 +5350, O5350 +5351, O5351 +5352, O5352 +5353, O5353 +5354, O5354 +5355, O5355 +5356, O5356 +5357, O5357 +5358, O5358 +5359, O5359 +5360, O5360 +5361, O5361 +5362, O5362 +5363, O5363 +5364, O5364 +5365, O5365 +5366, O5366 +5367, O5367 +5368, O5368 +5369, O5369 +5370, O5370 +5371, O5371 +5372, O5372 +5373, O5373 +5374, O5374 +5375, O5375 +5376, O5376 +5377, O5377 +5378, O5378 +5379, O5379 +5380, O5380 +5381, O5381 +5382, O5382 +5383, O5383 +5384, O5384 +5385, O5385 +5386, O5386 +5387, O5387 +5388, O5388 +5389, O5389 +5390, O5390 +5391, O5391 +5392, O5392 +5393, O5393 +5394, O5394 +5395, O5395 +5396, O5396 +5397, O5397 +5398, O5398 +5399, O5399 +5400, O5400 +5401, O5401 +5402, O5402 +5403, O5403 +5404, O5404 +5405, O5405 +5406, O5406 +5407, O5407 +5408, O5408 +5409, O5409 +5410, O5410 +5411, O5411 +5412, O5412 +5413, O5413 +5414, O5414 +5415, O5415 +5416, O5416 +5417, O5417 +5418, O5418 +5419, O5419 +5420, O5420 +5421, O5421 +5422, O5422 +5423, O5423 +5424, O5424 +5425, O5425 +5426, O5426 +5427, O5427 +5428, O5428 +5429, O5429 +5430, O5430 +5431, O5431 +5432, O5432 +5433, O5433 +5434, O5434 +5435, O5435 +5436, O5436 +5437, O5437 +5438, O5438 +5439, O5439 +5440, O5440 +5441, O5441 +5442, O5442 +5443, O5443 +5444, O5444 +5445, O5445 +5446, O5446 +5447, O5447 +5448, O5448 +5449, O5449 +5450, O5450 +5451, O5451 +5452, O5452 +5453, O5453 +5454, O5454 +5455, O5455 +5456, O5456 +5457, O5457 +5458, O5458 +5459, O5459 +5460, O5460 +5461, O5461 +5462, O5462 +5463, O5463 +5464, O5464 +5465, O5465 +5466, O5466 +5467, O5467 +5468, O5468 +5469, O5469 +5470, O5470 +5471, O5471 +5472, O5472 +5473, O5473 +5474, O5474 +5475, O5475 +5476, O5476 +5477, O5477 +5478, O5478 +5479, O5479 +5480, O5480 +5481, O5481 +5482, O5482 +5483, O5483 +5484, O5484 +5485, O5485 +5486, O5486 +5487, O5487 +5488, O5488 +5489, O5489 +5490, O5490 +5491, O5491 +5492, O5492 +5493, O5493 +5494, O5494 +5495, O5495 +5496, O5496 +5497, O5497 +5498, O5498 +5499, O5499 +5500, O5500 +5501, O5501 +5502, O5502 +5503, O5503 +5504, O5504 +5505, O5505 +5506, O5506 +5507, O5507 +5508, O5508 +5509, O5509 +5510, O5510 +5511, O5511 +5512, O5512 +5513, O5513 +5514, O5514 +5515, O5515 +5516, O5516 +5517, O5517 +5518, O5518 +5519, O5519 +5520, O5520 +5521, O5521 +5522, O5522 +5523, O5523 +5524, O5524 +5525, O5525 +5526, O5526 +5527, O5527 +5528, O5528 +5529, O5529 +5530, O5530 +5531, O5531 +5532, O5532 +5533, O5533 +5534, O5534 +5535, O5535 +5536, O5536 +5537, O5537 +5538, O5538 +5539, O5539 +5540, O5540 +5541, O5541 +5542, O5542 +5543, O5543 +5544, O5544 +5545, O5545 +5546, O5546 +5547, O5547 +5548, O5548 +5549, O5549 +5550, O5550 +5551, O5551 +5552, O5552 +5553, O5553 +5554, O5554 +5555, O5555 +5556, O5556 +5557, O5557 +5558, O5558 +5559, O5559 +5560, O5560 +5561, O5561 +5562, O5562 +5563, O5563 +5564, O5564 +5565, O5565 +5566, O5566 +5567, O5567 +5568, O5568 +5569, O5569 +5570, O5570 +5571, O5571 +5572, O5572 +5573, O5573 +5574, O5574 +5575, O5575 +5576, O5576 +5577, O5577 +5578, O5578 +5579, O5579 +5580, O5580 +5581, O5581 +5582, O5582 +5583, O5583 +5584, O5584 +5585, O5585 +5586, O5586 +5587, O5587 +5588, O5588 +5589, O5589 +5590, O5590 +5591, O5591 +5592, O5592 +5593, O5593 +5594, O5594 +5595, O5595 +5596, O5596 +5597, O5597 +5598, O5598 +5599, O5599 +5600, O5600 +5601, O5601 +5602, O5602 +5603, O5603 +5604, O5604 +5605, O5605 +5606, O5606 +5607, O5607 +5608, O5608 +5609, O5609 +5610, O5610 +5611, O5611 +5612, O5612 +5613, O5613 +5614, O5614 +5615, O5615 +5616, O5616 +5617, O5617 +5618, O5618 +5619, O5619 +5620, O5620 +5621, O5621 +5622, O5622 +5623, O5623 +5624, O5624 +5625, O5625 +5626, O5626 +5627, O5627 +5628, O5628 +5629, O5629 +5630, O5630 +5631, O5631 +5632, O5632 +5633, O5633 +5634, O5634 +5635, O5635 +5636, O5636 +5637, O5637 +5638, O5638 +5639, O5639 +5640, O5640 +5641, O5641 +5642, O5642 +5643, O5643 +5644, O5644 +5645, O5645 +5646, O5646 +5647, O5647 +5648, O5648 +5649, O5649 +5650, O5650 +5651, O5651 +5652, O5652 +5653, O5653 +5654, O5654 +5655, O5655 +5656, O5656 +5657, O5657 +5658, O5658 +5659, O5659 +5660, O5660 +5661, O5661 +5662, O5662 +5663, O5663 +5664, O5664 +5665, O5665 +5666, O5666 +5667, O5667 +5668, O5668 +5669, O5669 +5670, O5670 +5671, O5671 +5672, O5672 +5673, O5673 +5674, O5674 +5675, O5675 +5676, O5676 +5677, O5677 +5678, O5678 +5679, O5679 +5680, O5680 +5681, O5681 +5682, O5682 +5683, O5683 +5684, O5684 +5685, O5685 +5686, O5686 +5687, O5687 +5688, O5688 +5689, O5689 +5690, O5690 +5691, O5691 +5692, O5692 +5693, O5693 +5694, O5694 +5695, O5695 +5696, O5696 +5697, O5697 +5698, O5698 +5699, O5699 +5700, O5700 +5701, O5701 +5702, O5702 +5703, O5703 +5704, O5704 +5705, O5705 +5706, O5706 +5707, O5707 +5708, O5708 +5709, O5709 +5710, O5710 +5711, O5711 +5712, O5712 +5713, O5713 +5714, O5714 +5715, O5715 +5716, O5716 +5717, O5717 +5718, O5718 +5719, O5719 +5720, O5720 +5721, O5721 +5722, O5722 +5723, O5723 +5724, O5724 +5725, O5725 +5726, O5726 +5727, O5727 +5728, O5728 +5729, O5729 +5730, O5730 +5731, O5731 +5732, O5732 +5733, O5733 +5734, O5734 +5735, O5735 +5736, O5736 +5737, O5737 +5738, O5738 +5739, O5739 +5740, O5740 +5741, O5741 +5742, O5742 +5743, O5743 +5744, O5744 +5745, O5745 +5746, O5746 +5747, O5747 +5748, O5748 +5749, O5749 +5750, O5750 +5751, O5751 +5752, O5752 +5753, O5753 +5754, O5754 +5755, O5755 +5756, O5756 +5757, O5757 +5758, O5758 +5759, O5759 +5760, O5760 +5761, O5761 +5762, O5762 +5763, O5763 +5764, O5764 +5765, O5765 +5766, O5766 +5767, O5767 +5768, O5768 +5769, O5769 +5770, O5770 +5771, O5771 +5772, O5772 +5773, O5773 +5774, O5774 +5775, O5775 +5776, O5776 +5777, O5777 +5778, O5778 +5779, O5779 +5780, O5780 +5781, O5781 +5782, O5782 +5783, O5783 +5784, O5784 +5785, O5785 +5786, O5786 +5787, O5787 +5788, O5788 +5789, O5789 +5790, O5790 +5791, O5791 +5792, O5792 +5793, O5793 +5794, O5794 +5795, O5795 +5796, O5796 +5797, O5797 +5798, O5798 +5799, O5799 +5800, O5800 +5801, O5801 +5802, O5802 +5803, O5803 +5804, O5804 +5805, O5805 +5806, O5806 +5807, O5807 +5808, O5808 +5809, O5809 +5810, O5810 +5811, O5811 +5812, O5812 +5813, O5813 +5814, O5814 +5815, O5815 +5816, O5816 +5817, O5817 +5818, O5818 +5819, O5819 +5820, O5820 +5821, O5821 +5822, O5822 +5823, O5823 +5824, O5824 +5825, O5825 +5826, O5826 +5827, O5827 +5828, O5828 +5829, O5829 +5830, O5830 +5831, O5831 +5832, O5832 +5833, O5833 +5834, O5834 +5835, O5835 +5836, O5836 +5837, O5837 +5838, O5838 +5839, O5839 +5840, O5840 +5841, O5841 +5842, O5842 +5843, O5843 +5844, O5844 +5845, O5845 +5846, O5846 +5847, O5847 +5848, O5848 +5849, O5849 +5850, O5850 +5851, O5851 +5852, O5852 +5853, O5853 +5854, O5854 +5855, O5855 +5856, O5856 +5857, O5857 +5858, O5858 +5859, O5859 +5860, O5860 +5861, O5861 +5862, O5862 +5863, O5863 +5864, O5864 +5865, O5865 +5866, O5866 +5867, O5867 +5868, O5868 +5869, O5869 +5870, O5870 +5871, O5871 +5872, O5872 +5873, O5873 +5874, O5874 +5875, O5875 +5876, O5876 +5877, O5877 +5878, O5878 +5879, O5879 +5880, O5880 +5881, O5881 +5882, O5882 +5883, O5883 +5884, O5884 +5885, O5885 +5886, O5886 +5887, O5887 +5888, O5888 +5889, O5889 +5890, O5890 +5891, O5891 +5892, O5892 +5893, O5893 +5894, O5894 +5895, O5895 +5896, O5896 +5897, O5897 +5898, O5898 +5899, O5899 +5900, O5900 +5901, O5901 +5902, O5902 +5903, O5903 +5904, O5904 +5905, O5905 +5906, O5906 +5907, O5907 +5908, O5908 +5909, O5909 +5910, O5910 +5911, O5911 +5912, O5912 +5913, O5913 +5914, O5914 +5915, O5915 +5916, O5916 +5917, O5917 +5918, O5918 +5919, O5919 +5920, O5920 +5921, O5921 +5922, O5922 +5923, O5923 +5924, O5924 +5925, O5925 +5926, O5926 +5927, O5927 +5928, O5928 +5929, O5929 +5930, O5930 +5931, O5931 +5932, O5932 +5933, O5933 +5934, O5934 +5935, O5935 +5936, O5936 +5937, O5937 +5938, O5938 +5939, O5939 +5940, O5940 +5941, O5941 +5942, O5942 +5943, O5943 +5944, O5944 +5945, O5945 +5946, O5946 +5947, O5947 +5948, O5948 +5949, O5949 +5950, O5950 +5951, O5951 +5952, O5952 +5953, O5953 +5954, O5954 +5955, O5955 +5956, O5956 +5957, O5957 +5958, O5958 +5959, O5959 +5960, O5960 +5961, O5961 +5962, O5962 +5963, O5963 +5964, O5964 +5965, O5965 +5966, O5966 +5967, O5967 +5968, O5968 +5969, O5969 +5970, O5970 +5971, O5971 +5972, O5972 +5973, O5973 +5974, O5974 +5975, O5975 +5976, O5976 +5977, O5977 +5978, O5978 +5979, O5979 +5980, O5980 +5981, O5981 +5982, O5982 +5983, O5983 +5984, O5984 +5985, O5985 +5986, O5986 +5987, O5987 +5988, O5988 +5989, O5989 +5990, O5990 +5991, O5991 +5992, O5992 +5993, O5993 +5994, O5994 +5995, O5995 +5996, O5996 +5997, O5997 +5998, O5998 +5999, O5999 +6000, O6000 +6001, O6001 +6002, O6002 +6003, O6003 +6004, O6004 +6005, O6005 +6006, O6006 +6007, O6007 +6008, O6008 +6009, O6009 +6010, O6010 +6011, O6011 +6012, O6012 +6013, O6013 +6014, O6014 +6015, O6015 +6016, O6016 +6017, O6017 +6018, O6018 +6019, O6019 +6020, O6020 +6021, O6021 +6022, O6022 +6023, O6023 +6024, O6024 +6025, O6025 +6026, O6026 +6027, O6027 +6028, O6028 +6029, O6029 +6030, O6030 +6031, O6031 +6032, O6032 +6033, O6033 +6034, O6034 +6035, O6035 +6036, O6036 +6037, O6037 +6038, O6038 +6039, O6039 +6040, O6040 +6041, O6041 +6042, O6042 +6043, O6043 +6044, O6044 +6045, O6045 +6046, O6046 +6047, O6047 +6048, O6048 +6049, O6049 +6050, O6050 +6051, O6051 +6052, O6052 +6053, O6053 +6054, O6054 +6055, O6055 +6056, O6056 +6057, O6057 +6058, O6058 +6059, O6059 +6060, O6060 +6061, O6061 +6062, O6062 +6063, O6063 +6064, O6064 +6065, O6065 +6066, O6066 +6067, O6067 +6068, O6068 +6069, O6069 +6070, O6070 +6071, O6071 +6072, O6072 +6073, O6073 +6074, O6074 +6075, O6075 +6076, O6076 +6077, O6077 +6078, O6078 +6079, O6079 +6080, O6080 +6081, O6081 +6082, O6082 +6083, O6083 +6084, O6084 +6085, O6085 +6086, O6086 +6087, O6087 +6088, O6088 +6089, O6089 +6090, O6090 +6091, O6091 +6092, O6092 +6093, O6093 +6094, O6094 +6095, O6095 +6096, O6096 +6097, O6097 +6098, O6098 +6099, O6099 +6100, O6100 +6101, O6101 +6102, O6102 +6103, O6103 +6104, O6104 +6105, O6105 +6106, O6106 +6107, O6107 +6108, O6108 +6109, O6109 +6110, O6110 +6111, O6111 +6112, O6112 +6113, O6113 +6114, O6114 +6115, O6115 +6116, O6116 +6117, O6117 +6118, O6118 +6119, O6119 +6120, O6120 +6121, O6121 +6122, O6122 +6123, O6123 +6124, O6124 +6125, O6125 +6126, O6126 +6127, O6127 +6128, O6128 +6129, O6129 +6130, O6130 +6131, O6131 +6132, O6132 +6133, O6133 +6134, O6134 +6135, O6135 +6136, O6136 +6137, O6137 +6138, O6138 +6139, O6139 +6140, O6140 +6141, O6141 +6142, O6142 +6143, O6143 +6144, O6144 +6145, O6145 +6146, O6146 +6147, O6147 +6148, O6148 +6149, O6149 +6150, O6150 +6151, O6151 +6152, O6152 +6153, O6153 +6154, O6154 +6155, O6155 +6156, O6156 +6157, O6157 +6158, O6158 +6159, O6159 +6160, O6160 +6161, O6161 +6162, O6162 +6163, O6163 +6164, O6164 +6165, O6165 +6166, O6166 +6167, O6167 +6168, O6168 +6169, O6169 +6170, O6170 +6171, O6171 +6172, O6172 +6173, O6173 +6174, O6174 +6175, O6175 +6176, O6176 +6177, O6177 +6178, O6178 +6179, O6179 +6180, O6180 +6181, O6181 +6182, O6182 +6183, O6183 +6184, O6184 +6185, O6185 +6186, O6186 +6187, O6187 +6188, O6188 +6189, O6189 +6190, O6190 +6191, O6191 +6192, O6192 +6193, O6193 +6194, O6194 +6195, O6195 +6196, O6196 +6197, O6197 +6198, O6198 +6199, O6199 +6200, O6200 +6201, O6201 +6202, O6202 +6203, O6203 +6204, O6204 +6205, O6205 +6206, O6206 +6207, O6207 +6208, O6208 +6209, O6209 +6210, O6210 +6211, O6211 +6212, O6212 +6213, O6213 +6214, O6214 +6215, O6215 +6216, O6216 +6217, O6217 +6218, O6218 +6219, O6219 +6220, O6220 +6221, O6221 +6222, O6222 +6223, O6223 +6224, O6224 +6225, O6225 +6226, O6226 +6227, O6227 +6228, O6228 +6229, O6229 +6230, O6230 +6231, O6231 +6232, O6232 +6233, O6233 +6234, O6234 +6235, O6235 +6236, O6236 +6237, O6237 +6238, O6238 +6239, O6239 +6240, O6240 +6241, O6241 +6242, O6242 +6243, O6243 +6244, O6244 +6245, O6245 +6246, O6246 +6247, O6247 +6248, O6248 +6249, O6249 +6250, O6250 +6251, O6251 +6252, O6252 +6253, O6253 +6254, O6254 +6255, O6255 +6256, O6256 +6257, O6257 +6258, O6258 +6259, O6259 +6260, O6260 +6261, O6261 +6262, O6262 +6263, O6263 +6264, O6264 +6265, O6265 +6266, O6266 +6267, O6267 +6268, O6268 +6269, O6269 +6270, O6270 +6271, O6271 +6272, O6272 +6273, O6273 +6274, O6274 +6275, O6275 +6276, O6276 +6277, O6277 +6278, O6278 +6279, O6279 +6280, O6280 +6281, O6281 +6282, O6282 +6283, O6283 +6284, O6284 +6285, O6285 +6286, O6286 +6287, O6287 +6288, O6288 +6289, O6289 +6290, O6290 +6291, O6291 +6292, O6292 +6293, O6293 +6294, O6294 +6295, O6295 +6296, O6296 +6297, O6297 +6298, O6298 +6299, O6299 +6300, O6300 +6301, O6301 +6302, O6302 +6303, O6303 +6304, O6304 +6305, O6305 +6306, O6306 +6307, O6307 +6308, O6308 +6309, O6309 +6310, O6310 +6311, O6311 +6312, O6312 +6313, O6313 +6314, O6314 +6315, O6315 +6316, O6316 +6317, O6317 +6318, O6318 +6319, O6319 +6320, O6320 +6321, O6321 +6322, O6322 +6323, O6323 +6324, O6324 +6325, O6325 +6326, O6326 +6327, O6327 +6328, O6328 +6329, O6329 +6330, O6330 +6331, O6331 +6332, O6332 +6333, O6333 +6334, O6334 +6335, O6335 +6336, O6336 +6337, O6337 +6338, O6338 +6339, O6339 +6340, O6340 +6341, O6341 +6342, O6342 +6343, O6343 +6344, O6344 +6345, O6345 +6346, O6346 +6347, O6347 +6348, O6348 +6349, O6349 +6350, O6350 +6351, O6351 +6352, O6352 +6353, O6353 +6354, O6354 +6355, O6355 +6356, O6356 +6357, O6357 +6358, O6358 +6359, O6359 +6360, O6360 +6361, O6361 +6362, O6362 +6363, O6363 +6364, O6364 +6365, O6365 +6366, O6366 +6367, O6367 +6368, O6368 +6369, O6369 +6370, O6370 +6371, O6371 +6372, O6372 +6373, O6373 +6374, O6374 +6375, O6375 +6376, O6376 +6377, O6377 +6378, O6378 +6379, O6379 +6380, O6380 +6381, O6381 +6382, O6382 +6383, O6383 +6384, O6384 +6385, O6385 +6386, O6386 +6387, O6387 +6388, O6388 +6389, O6389 +6390, O6390 +6391, O6391 +6392, O6392 +6393, O6393 +6394, O6394 +6395, O6395 +6396, O6396 +6397, O6397 +6398, O6398 +6399, O6399 +6400, O6400 +6401, O6401 +6402, O6402 +6403, O6403 +6404, O6404 +6405, O6405 +6406, O6406 +6407, O6407 +6408, O6408 +6409, O6409 +6410, O6410 +6411, O6411 +6412, O6412 +6413, O6413 +6414, O6414 +6415, O6415 +6416, O6416 +6417, O6417 +6418, O6418 +6419, O6419 +6420, O6420 +6421, O6421 +6422, O6422 +6423, O6423 +6424, O6424 +6425, O6425 +6426, O6426 +6427, O6427 +6428, O6428 +6429, O6429 +6430, O6430 +6431, O6431 +6432, O6432 +6433, O6433 +6434, O6434 +6435, O6435 +6436, O6436 +6437, O6437 +6438, O6438 +6439, O6439 +6440, O6440 +6441, O6441 +6442, O6442 +6443, O6443 +6444, O6444 +6445, O6445 +6446, O6446 +6447, O6447 +6448, O6448 +6449, O6449 +6450, O6450 +6451, O6451 +6452, O6452 +6453, O6453 +6454, O6454 +6455, O6455 +6456, O6456 +6457, O6457 +6458, O6458 +6459, O6459 +6460, O6460 +6461, O6461 +6462, O6462 +6463, O6463 +6464, O6464 +6465, O6465 +6466, O6466 +6467, O6467 +6468, O6468 +6469, O6469 +6470, O6470 +6471, O6471 +6472, O6472 +6473, O6473 +6474, O6474 +6475, O6475 +6476, O6476 +6477, O6477 +6478, O6478 +6479, O6479 +6480, O6480 +6481, O6481 +6482, O6482 +6483, O6483 +6484, O6484 +6485, O6485 +6486, O6486 +6487, O6487 +6488, O6488 +6489, O6489 +6490, O6490 +6491, O6491 +6492, O6492 +6493, O6493 +6494, O6494 +6495, O6495 +6496, O6496 +6497, O6497 +6498, O6498 +6499, O6499 +6500, O6500 +6501, O6501 +6502, O6502 +6503, O6503 +6504, O6504 +6505, O6505 +6506, O6506 +6507, O6507 +6508, O6508 +6509, O6509 +6510, O6510 +6511, O6511 +6512, O6512 +6513, O6513 +6514, O6514 +6515, O6515 +6516, O6516 +6517, O6517 +6518, O6518 +6519, O6519 +6520, O6520 +6521, O6521 +6522, O6522 +6523, O6523 +6524, O6524 +6525, O6525 +6526, O6526 +6527, O6527 +6528, O6528 +6529, O6529 +6530, O6530 +6531, O6531 +6532, O6532 +6533, O6533 +6534, O6534 +6535, O6535 +6536, O6536 +6537, O6537 +6538, O6538 +6539, O6539 +6540, O6540 +6541, O6541 +6542, O6542 +6543, O6543 +6544, O6544 +6545, O6545 +6546, O6546 +6547, O6547 +6548, O6548 +6549, O6549 +6550, O6550 +6551, O6551 +6552, O6552 +6553, O6553 +6554, O6554 +6555, O6555 +6556, O6556 +6557, O6557 +6558, O6558 +6559, O6559 +6560, O6560 +6561, O6561 +6562, O6562 +6563, O6563 +6564, O6564 +6565, O6565 +6566, O6566 +6567, O6567 +6568, O6568 +6569, O6569 +6570, O6570 +6571, O6571 +6572, O6572 +6573, O6573 +6574, O6574 +6575, O6575 +6576, O6576 +6577, O6577 +6578, O6578 +6579, O6579 +6580, O6580 +6581, O6581 +6582, O6582 +6583, O6583 +6584, O6584 +6585, O6585 +6586, O6586 +6587, O6587 +6588, O6588 +6589, O6589 +6590, O6590 +6591, O6591 +6592, O6592 +6593, O6593 +6594, O6594 +6595, O6595 +6596, O6596 +6597, O6597 +6598, O6598 +6599, O6599 +6600, O6600 +6601, O6601 +6602, O6602 +6603, O6603 +6604, O6604 +6605, O6605 +6606, O6606 +6607, O6607 +6608, O6608 +6609, O6609 +6610, O6610 +6611, O6611 +6612, O6612 +6613, O6613 +6614, O6614 +6615, O6615 +6616, O6616 +6617, O6617 +6618, O6618 +6619, O6619 +6620, O6620 +6621, O6621 +6622, O6622 +6623, O6623 +6624, O6624 +6625, O6625 +6626, O6626 +6627, O6627 +6628, O6628 +6629, O6629 +6630, O6630 +6631, O6631 +6632, O6632 +6633, O6633 +6634, O6634 +6635, O6635 +6636, O6636 +6637, O6637 +6638, O6638 +6639, O6639 +6640, O6640 +6641, O6641 +6642, O6642 +6643, O6643 +6644, O6644 +6645, O6645 +6646, O6646 +6647, O6647 +6648, O6648 +6649, O6649 +6650, O6650 +6651, O6651 +6652, O6652 +6653, O6653 +6654, O6654 +6655, O6655 +6656, O6656 +6657, O6657 +6658, O6658 +6659, O6659 +6660, O6660 +6661, O6661 +6662, O6662 +6663, O6663 +6664, O6664 +6665, O6665 +6666, O6666 +6667, O6667 +6668, O6668 +6669, O6669 +6670, O6670 +6671, O6671 +6672, O6672 +6673, O6673 +6674, O6674 +6675, O6675 +6676, O6676 +6677, O6677 +6678, O6678 +6679, O6679 +6680, O6680 +6681, O6681 +6682, O6682 +6683, O6683 +6684, O6684 +6685, O6685 +6686, O6686 +6687, O6687 +6688, O6688 +6689, O6689 +6690, O6690 +6691, O6691 +6692, O6692 +6693, O6693 +6694, O6694 +6695, O6695 +6696, O6696 +6697, O6697 +6698, O6698 +6699, O6699 +6700, O6700 +6701, O6701 +6702, O6702 +6703, O6703 +6704, O6704 +6705, O6705 +6706, O6706 +6707, O6707 +6708, O6708 +6709, O6709 +6710, O6710 +6711, O6711 +6712, O6712 +6713, O6713 +6714, O6714 +6715, O6715 +6716, O6716 +6717, O6717 +6718, O6718 +6719, O6719 +6720, O6720 +6721, O6721 +6722, O6722 +6723, O6723 +6724, O6724 +6725, O6725 +6726, O6726 +6727, O6727 +6728, O6728 +6729, O6729 +6730, O6730 +6731, O6731 +6732, O6732 +6733, O6733 +6734, O6734 +6735, O6735 +6736, O6736 +6737, O6737 +6738, O6738 +6739, O6739 +6740, O6740 +6741, O6741 +6742, O6742 +6743, O6743 +6744, O6744 +6745, O6745 +6746, O6746 +6747, O6747 +6748, O6748 +6749, O6749 +6750, O6750 +6751, O6751 +6752, O6752 +6753, O6753 +6754, O6754 +6755, O6755 +6756, O6756 +6757, O6757 +6758, O6758 +6759, O6759 +6760, O6760 +6761, O6761 +6762, O6762 +6763, O6763 +6764, O6764 +6765, O6765 +6766, O6766 +6767, O6767 +6768, O6768 +6769, O6769 +6770, O6770 +6771, O6771 +6772, O6772 +6773, O6773 +6774, O6774 +6775, O6775 +6776, O6776 +6777, O6777 +6778, O6778 +6779, O6779 +6780, O6780 +6781, O6781 +6782, O6782 +6783, O6783 +6784, O6784 +6785, O6785 +6786, O6786 +6787, O6787 +6788, O6788 +6789, O6789 +6790, O6790 +6791, O6791 +6792, O6792 +6793, O6793 +6794, O6794 +6795, O6795 +6796, O6796 +6797, O6797 +6798, O6798 +6799, O6799 +6800, O6800 +6801, O6801 +6802, O6802 +6803, O6803 +6804, O6804 +6805, O6805 +6806, O6806 +6807, O6807 +6808, O6808 +6809, O6809 +6810, O6810 +6811, O6811 +6812, O6812 +6813, O6813 +6814, O6814 +6815, O6815 +6816, O6816 +6817, O6817 +6818, O6818 +6819, O6819 +6820, O6820 +6821, O6821 +6822, O6822 +6823, O6823 +6824, O6824 +6825, O6825 +6826, O6826 +6827, O6827 +6828, O6828 +6829, O6829 +6830, O6830 +6831, O6831 +6832, O6832 +6833, O6833 +6834, O6834 +6835, O6835 +6836, O6836 +6837, O6837 +6838, O6838 +6839, O6839 +6840, O6840 +6841, O6841 +6842, O6842 +6843, O6843 +6844, O6844 +6845, O6845 +6846, O6846 +6847, O6847 +6848, O6848 +6849, O6849 +6850, O6850 +6851, O6851 +6852, O6852 +6853, O6853 +6854, O6854 +6855, O6855 +6856, O6856 +6857, O6857 +6858, O6858 +6859, O6859 +6860, O6860 +6861, O6861 +6862, O6862 +6863, O6863 +6864, O6864 +6865, O6865 +6866, O6866 +6867, O6867 +6868, O6868 +6869, O6869 +6870, O6870 +6871, O6871 +6872, O6872 +6873, O6873 +6874, O6874 +6875, O6875 +6876, O6876 +6877, O6877 +6878, O6878 +6879, O6879 +6880, O6880 +6881, O6881 +6882, O6882 +6883, O6883 +6884, O6884 +6885, O6885 +6886, O6886 +6887, O6887 +6888, O6888 +6889, O6889 +6890, O6890 +6891, O6891 +6892, O6892 +6893, O6893 +6894, O6894 +6895, O6895 +6896, O6896 +6897, O6897 +6898, O6898 +6899, O6899 +6900, O6900 +6901, O6901 +6902, O6902 +6903, O6903 +6904, O6904 +6905, O6905 +6906, O6906 +6907, O6907 +6908, O6908 +6909, O6909 +6910, O6910 +6911, O6911 +6912, O6912 +6913, O6913 +6914, O6914 +6915, O6915 +6916, O6916 +6917, O6917 +6918, O6918 +6919, O6919 +6920, O6920 +6921, O6921 +6922, O6922 +6923, O6923 +6924, O6924 +6925, O6925 +6926, O6926 +6927, O6927 +6928, O6928 +6929, O6929 +6930, O6930 +6931, O6931 +6932, O6932 +6933, O6933 +6934, O6934 +6935, O6935 +6936, O6936 +6937, O6937 +6938, O6938 +6939, O6939 +6940, O6940 +6941, O6941 +6942, O6942 +6943, O6943 +6944, O6944 +6945, O6945 +6946, O6946 +6947, O6947 +6948, O6948 +6949, O6949 +6950, O6950 +6951, O6951 +6952, O6952 +6953, O6953 +6954, O6954 +6955, O6955 +6956, O6956 +6957, O6957 +6958, O6958 +6959, O6959 +6960, O6960 +6961, O6961 +6962, O6962 +6963, O6963 +6964, O6964 +6965, O6965 +6966, O6966 +6967, O6967 +6968, O6968 +6969, O6969 +6970, O6970 +6971, O6971 +6972, O6972 +6973, O6973 +6974, O6974 +6975, O6975 +6976, O6976 +6977, O6977 +6978, O6978 +6979, O6979 +6980, O6980 +6981, O6981 +6982, O6982 +6983, O6983 +6984, O6984 +6985, O6985 +6986, O6986 +6987, O6987 +6988, O6988 +6989, O6989 +6990, O6990 +6991, O6991 +6992, O6992 +6993, O6993 +6994, O6994 +6995, O6995 +6996, O6996 +6997, O6997 +6998, O6998 +6999, O6999 +7000, O7000 +7001, O7001 +7002, O7002 +7003, O7003 +7004, O7004 +7005, O7005 +7006, O7006 +7007, O7007 +7008, O7008 +7009, O7009 +7010, O7010 +7011, O7011 +7012, O7012 +7013, O7013 +7014, O7014 +7015, O7015 +7016, O7016 +7017, O7017 +7018, O7018 +7019, O7019 +7020, O7020 +7021, O7021 +7022, O7022 +7023, O7023 +7024, O7024 +7025, O7025 +7026, O7026 +7027, O7027 +7028, O7028 +7029, O7029 +7030, O7030 +7031, O7031 +7032, O7032 +7033, O7033 +7034, O7034 +7035, O7035 +7036, O7036 +7037, O7037 +7038, O7038 +7039, O7039 +7040, O7040 +7041, O7041 +7042, O7042 +7043, O7043 +7044, O7044 +7045, O7045 +7046, O7046 +7047, O7047 +7048, O7048 +7049, O7049 +7050, O7050 +7051, O7051 +7052, O7052 +7053, O7053 +7054, O7054 +7055, O7055 +7056, O7056 +7057, O7057 +7058, O7058 +7059, O7059 +7060, O7060 +7061, O7061 +7062, O7062 +7063, O7063 +7064, O7064 +7065, O7065 +7066, O7066 +7067, O7067 +7068, O7068 +7069, O7069 +7070, O7070 +7071, O7071 +7072, O7072 +7073, O7073 +7074, O7074 +7075, O7075 +7076, O7076 +7077, O7077 +7078, O7078 +7079, O7079 +7080, O7080 +7081, O7081 +7082, O7082 +7083, O7083 +7084, O7084 +7085, O7085 +7086, O7086 +7087, O7087 +7088, O7088 +7089, O7089 +7090, O7090 +7091, O7091 +7092, O7092 +7093, O7093 +7094, O7094 +7095, O7095 +7096, O7096 +7097, O7097 +7098, O7098 +7099, O7099 +7100, O7100 +7101, O7101 +7102, O7102 +7103, O7103 +7104, O7104 +7105, O7105 +7106, O7106 +7107, O7107 +7108, O7108 +7109, O7109 +7110, O7110 +7111, O7111 +7112, O7112 +7113, O7113 +7114, O7114 +7115, O7115 +7116, O7116 +7117, O7117 +7118, O7118 +7119, O7119 +7120, O7120 +7121, O7121 +7122, O7122 +7123, O7123 +7124, O7124 +7125, O7125 +7126, O7126 +7127, O7127 +7128, O7128 +7129, O7129 +7130, O7130 +7131, O7131 +7132, O7132 +7133, O7133 +7134, O7134 +7135, O7135 +7136, O7136 +7137, O7137 +7138, O7138 +7139, O7139 +7140, O7140 +7141, O7141 +7142, O7142 +7143, O7143 +7144, O7144 +7145, O7145 +7146, O7146 +7147, O7147 +7148, O7148 +7149, O7149 +7150, O7150 +7151, O7151 +7152, O7152 +7153, O7153 +7154, O7154 +7155, O7155 +7156, O7156 +7157, O7157 +7158, O7158 +7159, O7159 +7160, O7160 +7161, O7161 +7162, O7162 +7163, O7163 +7164, O7164 +7165, O7165 +7166, O7166 +7167, O7167 +7168, O7168 +7169, O7169 +7170, O7170 +7171, O7171 +7172, O7172 +7173, O7173 +7174, O7174 +7175, O7175 +7176, O7176 +7177, O7177 +7178, O7178 +7179, O7179 +7180, O7180 +7181, O7181 +7182, O7182 +7183, O7183 +7184, O7184 +7185, O7185 +7186, O7186 +7187, O7187 +7188, O7188 +7189, O7189 +7190, O7190 +7191, O7191 +7192, O7192 +7193, O7193 +7194, O7194 +7195, O7195 +7196, O7196 +7197, O7197 +7198, O7198 +7199, O7199 +7200, O7200 +7201, O7201 +7202, O7202 +7203, O7203 +7204, O7204 +7205, O7205 +7206, O7206 +7207, O7207 +7208, O7208 +7209, O7209 +7210, O7210 +7211, O7211 +7212, O7212 +7213, O7213 +7214, O7214 +7215, O7215 +7216, O7216 +7217, O7217 +7218, O7218 +7219, O7219 +7220, O7220 +7221, O7221 +7222, O7222 +7223, O7223 +7224, O7224 +7225, O7225 +7226, O7226 +7227, O7227 +7228, O7228 +7229, O7229 +7230, O7230 +7231, O7231 +7232, O7232 +7233, O7233 +7234, O7234 +7235, O7235 +7236, O7236 +7237, O7237 +7238, O7238 +7239, O7239 +7240, O7240 +7241, O7241 +7242, O7242 +7243, O7243 +7244, O7244 +7245, O7245 +7246, O7246 +7247, O7247 +7248, O7248 +7249, O7249 +7250, O7250 +7251, O7251 +7252, O7252 +7253, O7253 +7254, O7254 +7255, O7255 +7256, O7256 +7257, O7257 +7258, O7258 +7259, O7259 +7260, O7260 +7261, O7261 +7262, O7262 +7263, O7263 +7264, O7264 +7265, O7265 +7266, O7266 +7267, O7267 +7268, O7268 +7269, O7269 +7270, O7270 +7271, O7271 +7272, O7272 +7273, O7273 +7274, O7274 +7275, O7275 +7276, O7276 +7277, O7277 +7278, O7278 +7279, O7279 +7280, O7280 +7281, O7281 +7282, O7282 +7283, O7283 +7284, O7284 +7285, O7285 +7286, O7286 +7287, O7287 +7288, O7288 +7289, O7289 +7290, O7290 +7291, O7291 +7292, O7292 +7293, O7293 +7294, O7294 +7295, O7295 +7296, O7296 +7297, O7297 +7298, O7298 +7299, O7299 +7300, O7300 +7301, O7301 +7302, O7302 +7303, O7303 +7304, O7304 +7305, O7305 +7306, O7306 +7307, O7307 +7308, O7308 +7309, O7309 +7310, O7310 +7311, O7311 +7312, O7312 +7313, O7313 +7314, O7314 +7315, O7315 +7316, O7316 +7317, O7317 +7318, O7318 +7319, O7319 +7320, O7320 +7321, O7321 +7322, O7322 +7323, O7323 +7324, O7324 +7325, O7325 +7326, O7326 +7327, O7327 +7328, O7328 +7329, O7329 +7330, O7330 +7331, O7331 +7332, O7332 +7333, O7333 +7334, O7334 +7335, O7335 +7336, O7336 +7337, O7337 +7338, O7338 +7339, O7339 +7340, O7340 +7341, O7341 +7342, O7342 +7343, O7343 +7344, O7344 +7345, O7345 +7346, O7346 +7347, O7347 +7348, O7348 +7349, O7349 +7350, O7350 +7351, O7351 +7352, O7352 +7353, O7353 +7354, O7354 +7355, O7355 +7356, O7356 +7357, O7357 +7358, O7358 +7359, O7359 +7360, O7360 +7361, O7361 +7362, O7362 +7363, O7363 +7364, O7364 +7365, O7365 +7366, O7366 +7367, O7367 +7368, O7368 +7369, O7369 +7370, O7370 +7371, O7371 +7372, O7372 +7373, O7373 +7374, O7374 +7375, O7375 +7376, O7376 +7377, O7377 +7378, O7378 +7379, O7379 +7380, O7380 +7381, O7381 +7382, O7382 +7383, O7383 +7384, O7384 +7385, O7385 +7386, O7386 +7387, O7387 +7388, O7388 +7389, O7389 +7390, O7390 +7391, O7391 +7392, O7392 +7393, O7393 +7394, O7394 +7395, O7395 +7396, O7396 +7397, O7397 +7398, O7398 +7399, O7399 +7400, O7400 +7401, O7401 +7402, O7402 +7403, O7403 +7404, O7404 +7405, O7405 +7406, O7406 +7407, O7407 +7408, O7408 +7409, O7409 +7410, O7410 +7411, O7411 +7412, O7412 +7413, O7413 +7414, O7414 +7415, O7415 +7416, O7416 +7417, O7417 +7418, O7418 +7419, O7419 +7420, O7420 +7421, O7421 +7422, O7422 +7423, O7423 +7424, O7424 +7425, O7425 +7426, O7426 +7427, O7427 +7428, O7428 +7429, O7429 +7430, O7430 +7431, O7431 +7432, O7432 +7433, O7433 +7434, O7434 +7435, O7435 +7436, O7436 +7437, O7437 +7438, O7438 +7439, O7439 +7440, O7440 +7441, O7441 +7442, O7442 +7443, O7443 +7444, O7444 +7445, O7445 +7446, O7446 +7447, O7447 +7448, O7448 +7449, O7449 +7450, O7450 +7451, O7451 +7452, O7452 +7453, O7453 +7454, O7454 +7455, O7455 +7456, O7456 +7457, O7457 +7458, O7458 +7459, O7459 +7460, O7460 +7461, O7461 +7462, O7462 +7463, O7463 +7464, O7464 +7465, O7465 +7466, O7466 +7467, O7467 +7468, O7468 +7469, O7469 +7470, O7470 +7471, O7471 +7472, O7472 +7473, O7473 +7474, O7474 +7475, O7475 +7476, O7476 +7477, O7477 +7478, O7478 +7479, O7479 +7480, O7480 +7481, O7481 +7482, O7482 +7483, O7483 +7484, O7484 +7485, O7485 +7486, O7486 +7487, O7487 +7488, O7488 +7489, O7489 +7490, O7490 +7491, O7491 +7492, O7492 +7493, O7493 +7494, O7494 +7495, O7495 +7496, O7496 +7497, O7497 +7498, O7498 +7499, O7499 +7500, O7500 +7501, O7501 +7502, O7502 +7503, O7503 +7504, O7504 +7505, O7505 +7506, O7506 +7507, O7507 +7508, O7508 +7509, O7509 +7510, O7510 +7511, O7511 +7512, O7512 +7513, O7513 +7514, O7514 +7515, O7515 +7516, O7516 +7517, O7517 +7518, O7518 +7519, O7519 +7520, O7520 +7521, O7521 +7522, O7522 +7523, O7523 +7524, O7524 +7525, O7525 +7526, O7526 +7527, O7527 +7528, O7528 +7529, O7529 +7530, O7530 +7531, O7531 +7532, O7532 +7533, O7533 +7534, O7534 +7535, O7535 +7536, O7536 +7537, O7537 +7538, O7538 +7539, O7539 +7540, O7540 +7541, O7541 +7542, O7542 +7543, O7543 +7544, O7544 +7545, O7545 +7546, O7546 +7547, O7547 +7548, O7548 +7549, O7549 +7550, O7550 +7551, O7551 +7552, O7552 +7553, O7553 +7554, O7554 +7555, O7555 +7556, O7556 +7557, O7557 +7558, O7558 +7559, O7559 +7560, O7560 +7561, O7561 +7562, O7562 +7563, O7563 +7564, O7564 +7565, O7565 +7566, O7566 +7567, O7567 +7568, O7568 +7569, O7569 +7570, O7570 +7571, O7571 +7572, O7572 +7573, O7573 +7574, O7574 +7575, O7575 +7576, O7576 +7577, O7577 +7578, O7578 +7579, O7579 +7580, O7580 +7581, O7581 +7582, O7582 +7583, O7583 +7584, O7584 +7585, O7585 +7586, O7586 +7587, O7587 +7588, O7588 +7589, O7589 +7590, O7590 +7591, O7591 +7592, O7592 +7593, O7593 +7594, O7594 +7595, O7595 +7596, O7596 +7597, O7597 +7598, O7598 +7599, O7599 +7600, O7600 +7601, O7601 +7602, O7602 +7603, O7603 +7604, O7604 +7605, O7605 +7606, O7606 +7607, O7607 +7608, O7608 +7609, O7609 +7610, O7610 +7611, O7611 +7612, O7612 +7613, O7613 +7614, O7614 +7615, O7615 +7616, O7616 +7617, O7617 +7618, O7618 +7619, O7619 +7620, O7620 +7621, O7621 +7622, O7622 +7623, O7623 +7624, O7624 +7625, O7625 +7626, O7626 +7627, O7627 +7628, O7628 +7629, O7629 +7630, O7630 +7631, O7631 +7632, O7632 +7633, O7633 +7634, O7634 +7635, O7635 +7636, O7636 +7637, O7637 +7638, O7638 +7639, O7639 +7640, O7640 +7641, O7641 +7642, O7642 +7643, O7643 +7644, O7644 +7645, O7645 +7646, O7646 +7647, O7647 +7648, O7648 +7649, O7649 +7650, O7650 +7651, O7651 +7652, O7652 +7653, O7653 +7654, O7654 +7655, O7655 +7656, O7656 +7657, O7657 +7658, O7658 +7659, O7659 +7660, O7660 +7661, O7661 +7662, O7662 +7663, O7663 +7664, O7664 +7665, O7665 +7666, O7666 +7667, O7667 +7668, O7668 +7669, O7669 +7670, O7670 +7671, O7671 +7672, O7672 +7673, O7673 +7674, O7674 +7675, O7675 +7676, O7676 +7677, O7677 +7678, O7678 +7679, O7679 +7680, O7680 +7681, O7681 +7682, O7682 +7683, O7683 +7684, O7684 +7685, O7685 +7686, O7686 +7687, O7687 +7688, O7688 +7689, O7689 +7690, O7690 +7691, O7691 +7692, O7692 +7693, O7693 +7694, O7694 +7695, O7695 +7696, O7696 +7697, O7697 +7698, O7698 +7699, O7699 +7700, O7700 +7701, O7701 +7702, O7702 +7703, O7703 +7704, O7704 +7705, O7705 +7706, O7706 +7707, O7707 +7708, O7708 +7709, O7709 +7710, O7710 +7711, O7711 +7712, O7712 +7713, O7713 +7714, O7714 +7715, O7715 +7716, O7716 +7717, O7717 +7718, O7718 +7719, O7719 +7720, O7720 +7721, O7721 +7722, O7722 +7723, O7723 +7724, O7724 +7725, O7725 +7726, O7726 +7727, O7727 +7728, O7728 +7729, O7729 +7730, O7730 +7731, O7731 +7732, O7732 +7733, O7733 +7734, O7734 +7735, O7735 +7736, O7736 +7737, O7737 +7738, O7738 +7739, O7739 +7740, O7740 +7741, O7741 +7742, O7742 +7743, O7743 +7744, O7744 +7745, O7745 +7746, O7746 +7747, O7747 +7748, O7748 +7749, O7749 +7750, O7750 +7751, O7751 +7752, O7752 +7753, O7753 +7754, O7754 +7755, O7755 +7756, O7756 +7757, O7757 +7758, O7758 +7759, O7759 +7760, O7760 +7761, O7761 +7762, O7762 +7763, O7763 +7764, O7764 +7765, O7765 +7766, O7766 +7767, O7767 +7768, O7768 +7769, O7769 +7770, O7770 +7771, O7771 +7772, O7772 +7773, O7773 +7774, O7774 +7775, O7775 +7776, O7776 +7777, O7777 +7778, O7778 +7779, O7779 +7780, O7780 +7781, O7781 +7782, O7782 +7783, O7783 +7784, O7784 +7785, O7785 +7786, O7786 +7787, O7787 +7788, O7788 +7789, O7789 +7790, O7790 +7791, O7791 +7792, O7792 +7793, O7793 +7794, O7794 +7795, O7795 +7796, O7796 +7797, O7797 +7798, O7798 +7799, O7799 +7800, O7800 +7801, O7801 +7802, O7802 +7803, O7803 +7804, O7804 +7805, O7805 +7806, O7806 +7807, O7807 +7808, O7808 +7809, O7809 +7810, O7810 +7811, O7811 +7812, O7812 +7813, O7813 +7814, O7814 +7815, O7815 +7816, O7816 +7817, O7817 +7818, O7818 +7819, O7819 +7820, O7820 +7821, O7821 +7822, O7822 +7823, O7823 +7824, O7824 +7825, O7825 +7826, O7826 +7827, O7827 +7828, O7828 +7829, O7829 +7830, O7830 +7831, O7831 +7832, O7832 +7833, O7833 +7834, O7834 +7835, O7835 +7836, O7836 +7837, O7837 +7838, O7838 +7839, O7839 +7840, O7840 +7841, O7841 +7842, O7842 +7843, O7843 +7844, O7844 +7845, O7845 +7846, O7846 +7847, O7847 +7848, O7848 +7849, O7849 +7850, O7850 +7851, O7851 +7852, O7852 +7853, O7853 +7854, O7854 +7855, O7855 +7856, O7856 +7857, O7857 +7858, O7858 +7859, O7859 +7860, O7860 +7861, O7861 +7862, O7862 +7863, O7863 +7864, O7864 +7865, O7865 +7866, O7866 +7867, O7867 +7868, O7868 +7869, O7869 +7870, O7870 +7871, O7871 +7872, O7872 +7873, O7873 +7874, O7874 +7875, O7875 +7876, O7876 +7877, O7877 +7878, O7878 +7879, O7879 +7880, O7880 +7881, O7881 +7882, O7882 +7883, O7883 +7884, O7884 +7885, O7885 +7886, O7886 +7887, O7887 +7888, O7888 +7889, O7889 +7890, O7890 +7891, O7891 +7892, O7892 +7893, O7893 +7894, O7894 +7895, O7895 +7896, O7896 +7897, O7897 +7898, O7898 +7899, O7899 +7900, O7900 +7901, O7901 +7902, O7902 +7903, O7903 +7904, O7904 +7905, O7905 +7906, O7906 +7907, O7907 +7908, O7908 +7909, O7909 +7910, O7910 +7911, O7911 +7912, O7912 +7913, O7913 +7914, O7914 +7915, O7915 +7916, O7916 +7917, O7917 +7918, O7918 +7919, O7919 +7920, O7920 +7921, O7921 +7922, O7922 +7923, O7923 +7924, O7924 +7925, O7925 +7926, O7926 +7927, O7927 +7928, O7928 +7929, O7929 +7930, O7930 +7931, O7931 +7932, O7932 +7933, O7933 +7934, O7934 +7935, O7935 +7936, O7936 +7937, O7937 +7938, O7938 +7939, O7939 +7940, O7940 +7941, O7941 +7942, O7942 +7943, O7943 +7944, O7944 +7945, O7945 +7946, O7946 +7947, O7947 +7948, O7948 +7949, O7949 +7950, O7950 +7951, O7951 +7952, O7952 +7953, O7953 +7954, O7954 +7955, O7955 +7956, O7956 +7957, O7957 +7958, O7958 +7959, O7959 +7960, O7960 +7961, O7961 +7962, O7962 +7963, O7963 +7964, O7964 +7965, O7965 +7966, O7966 +7967, O7967 +7968, O7968 +7969, O7969 +7970, O7970 +7971, O7971 +7972, O7972 +7973, O7973 +7974, O7974 +7975, O7975 +7976, O7976 +7977, O7977 +7978, O7978 +7979, O7979 +7980, O7980 +7981, O7981 +7982, O7982 +7983, O7983 +7984, O7984 +7985, O7985 +7986, O7986 +7987, O7987 +7988, O7988 +7989, O7989 +7990, O7990 +7991, O7991 +7992, O7992 +7993, O7993 +7994, O7994 +7995, O7995 +7996, O7996 +7997, O7997 +7998, O7998 +7999, O7999 +8000, O8000 +8001, O8001 +8002, O8002 +8003, O8003 +8004, O8004 +8005, O8005 +8006, O8006 +8007, O8007 +8008, O8008 +8009, O8009 +8010, O8010 +8011, O8011 +8012, O8012 +8013, O8013 +8014, O8014 +8015, O8015 +8016, O8016 +8017, O8017 +8018, O8018 +8019, O8019 +8020, O8020 +8021, O8021 +8022, O8022 +8023, O8023 +8024, O8024 +8025, O8025 +8026, O8026 +8027, O8027 +8028, O8028 +8029, O8029 +8030, O8030 +8031, O8031 +8032, O8032 +8033, O8033 +8034, O8034 +8035, O8035 +8036, O8036 +8037, O8037 +8038, O8038 +8039, O8039 +8040, O8040 +8041, O8041 +8042, O8042 +8043, O8043 +8044, O8044 +8045, O8045 +8046, O8046 +8047, O8047 +8048, O8048 +8049, O8049 +8050, O8050 +8051, O8051 +8052, O8052 +8053, O8053 +8054, O8054 +8055, O8055 +8056, O8056 +8057, O8057 +8058, O8058 +8059, O8059 +8060, O8060 +8061, O8061 +8062, O8062 +8063, O8063 +8064, O8064 +8065, O8065 +8066, O8066 +8067, O8067 +8068, O8068 +8069, O8069 +8070, O8070 +8071, O8071 +8072, O8072 +8073, O8073 +8074, O8074 +8075, O8075 +8076, O8076 +8077, O8077 +8078, O8078 +8079, O8079 +8080, O8080 +8081, O8081 +8082, O8082 +8083, O8083 +8084, O8084 +8085, O8085 +8086, O8086 +8087, O8087 +8088, O8088 +8089, O8089 +8090, O8090 +8091, O8091 +8092, O8092 +8093, O8093 +8094, O8094 +8095, O8095 +8096, O8096 +8097, O8097 +8098, O8098 +8099, O8099 +8100, O8100 +8101, O8101 +8102, O8102 +8103, O8103 +8104, O8104 +8105, O8105 +8106, O8106 +8107, O8107 +8108, O8108 +8109, O8109 +8110, O8110 +8111, O8111 +8112, O8112 +8113, O8113 +8114, O8114 +8115, O8115 +8116, O8116 +8117, O8117 +8118, O8118 +8119, O8119 +8120, O8120 +8121, O8121 +8122, O8122 +8123, O8123 +8124, O8124 +8125, O8125 +8126, O8126 +8127, O8127 +8128, O8128 +8129, O8129 +8130, O8130 +8131, O8131 +8132, O8132 +8133, O8133 +8134, O8134 +8135, O8135 +8136, O8136 +8137, O8137 +8138, O8138 +8139, O8139 +8140, O8140 +8141, O8141 +8142, O8142 +8143, O8143 +8144, O8144 +8145, O8145 +8146, O8146 +8147, O8147 +8148, O8148 +8149, O8149 +8150, O8150 +8151, O8151 +8152, O8152 +8153, O8153 +8154, O8154 +8155, O8155 +8156, O8156 +8157, O8157 +8158, O8158 +8159, O8159 +8160, O8160 +8161, O8161 +8162, O8162 +8163, O8163 +8164, O8164 +8165, O8165 +8166, O8166 +8167, O8167 +8168, O8168 +8169, O8169 +8170, O8170 +8171, O8171 +8172, O8172 +8173, O8173 +8174, O8174 +8175, O8175 +8176, O8176 +8177, O8177 +8178, O8178 +8179, O8179 +8180, O8180 +8181, O8181 +8182, O8182 +8183, O8183 +8184, O8184 +8185, O8185 +8186, O8186 +8187, O8187 +8188, O8188 +8189, O8189 +8190, O8190 +8191, O8191 +8192, O8192 +8193, O8193 +8194, O8194 +8195, O8195 +8196, O8196 +8197, O8197 +8198, O8198 +8199, O8199 +8200, O8200 +8201, O8201 +8202, O8202 +8203, O8203 +8204, O8204 +8205, O8205 +8206, O8206 +8207, O8207 +8208, O8208 +8209, O8209 +8210, O8210 +8211, O8211 +8212, O8212 +8213, O8213 +8214, O8214 +8215, O8215 +8216, O8216 +8217, O8217 +8218, O8218 +8219, O8219 +8220, O8220 +8221, O8221 +8222, O8222 +8223, O8223 +8224, O8224 +8225, O8225 +8226, O8226 +8227, O8227 +8228, O8228 +8229, O8229 +8230, O8230 +8231, O8231 +8232, O8232 +8233, O8233 +8234, O8234 +8235, O8235 +8236, O8236 +8237, O8237 +8238, O8238 +8239, O8239 +8240, O8240 +8241, O8241 +8242, O8242 +8243, O8243 +8244, O8244 +8245, O8245 +8246, O8246 +8247, O8247 +8248, O8248 +8249, O8249 +8250, O8250 +8251, O8251 +8252, O8252 +8253, O8253 +8254, O8254 +8255, O8255 +8256, O8256 +8257, O8257 +8258, O8258 +8259, O8259 +8260, O8260 +8261, O8261 +8262, O8262 +8263, O8263 +8264, O8264 +8265, O8265 +8266, O8266 +8267, O8267 +8268, O8268 +8269, O8269 +8270, O8270 +8271, O8271 +8272, O8272 +8273, O8273 +8274, O8274 +8275, O8275 +8276, O8276 +8277, O8277 +8278, O8278 +8279, O8279 +8280, O8280 +8281, O8281 +8282, O8282 +8283, O8283 +8284, O8284 +8285, O8285 +8286, O8286 +8287, O8287 +8288, O8288 +8289, O8289 +8290, O8290 +8291, O8291 +8292, O8292 +8293, O8293 +8294, O8294 +8295, O8295 +8296, O8296 +8297, O8297 +8298, O8298 +8299, O8299 +8300, O8300 +8301, O8301 +8302, O8302 +8303, O8303 +8304, O8304 +8305, O8305 +8306, O8306 +8307, O8307 +8308, O8308 +8309, O8309 +8310, O8310 +8311, O8311 +8312, O8312 +8313, O8313 +8314, O8314 +8315, O8315 +8316, O8316 +8317, O8317 +8318, O8318 +8319, O8319 +8320, O8320 +8321, O8321 +8322, O8322 +8323, O8323 +8324, O8324 +8325, O8325 +8326, O8326 +8327, O8327 +8328, O8328 +8329, O8329 +8330, O8330 +8331, O8331 +8332, O8332 +8333, O8333 +8334, O8334 +8335, O8335 +8336, O8336 +8337, O8337 +8338, O8338 +8339, O8339 +8340, O8340 +8341, O8341 +8342, O8342 +8343, O8343 +8344, O8344 +8345, O8345 +8346, O8346 +8347, O8347 +8348, O8348 +8349, O8349 +8350, O8350 +8351, O8351 +8352, O8352 +8353, O8353 +8354, O8354 +8355, O8355 +8356, O8356 +8357, O8357 +8358, O8358 +8359, O8359 +8360, O8360 +8361, O8361 +8362, O8362 +8363, O8363 +8364, O8364 +8365, O8365 +8366, O8366 +8367, O8367 +8368, O8368 +8369, O8369 +8370, O8370 +8371, O8371 +8372, O8372 +8373, O8373 +8374, O8374 +8375, O8375 +8376, O8376 +8377, O8377 +8378, O8378 +8379, O8379 +8380, O8380 +8381, O8381 +8382, O8382 +8383, O8383 +8384, O8384 +8385, O8385 +8386, O8386 +8387, O8387 +8388, O8388 +8389, O8389 +8390, O8390 +8391, O8391 +8392, O8392 +8393, O8393 +8394, O8394 +8395, O8395 +8396, O8396 +8397, O8397 +8398, O8398 +8399, O8399 +8400, O8400 +8401, O8401 +8402, O8402 +8403, O8403 +8404, O8404 +8405, O8405 +8406, O8406 +8407, O8407 +8408, O8408 +8409, O8409 +8410, O8410 +8411, O8411 +8412, O8412 +8413, O8413 +8414, O8414 +8415, O8415 +8416, O8416 +8417, O8417 +8418, O8418 +8419, O8419 +8420, O8420 +8421, O8421 +8422, O8422 +8423, O8423 +8424, O8424 +8425, O8425 +8426, O8426 +8427, O8427 +8428, O8428 +8429, O8429 +8430, O8430 +8431, O8431 +8432, O8432 +8433, O8433 +8434, O8434 +8435, O8435 +8436, O8436 +8437, O8437 +8438, O8438 +8439, O8439 +8440, O8440 +8441, O8441 +8442, O8442 +8443, O8443 +8444, O8444 +8445, O8445 +8446, O8446 +8447, O8447 +8448, O8448 +8449, O8449 +8450, O8450 +8451, O8451 +8452, O8452 +8453, O8453 +8454, O8454 +8455, O8455 +8456, O8456 +8457, O8457 +8458, O8458 +8459, O8459 +8460, O8460 +8461, O8461 +8462, O8462 +8463, O8463 +8464, O8464 +8465, O8465 +8466, O8466 +8467, O8467 +8468, O8468 +8469, O8469 +8470, O8470 +8471, O8471 +8472, O8472 +8473, O8473 +8474, O8474 +8475, O8475 +8476, O8476 +8477, O8477 +8478, O8478 +8479, O8479 +8480, O8480 +8481, O8481 +8482, O8482 +8483, O8483 +8484, O8484 +8485, O8485 +8486, O8486 +8487, O8487 +8488, O8488 +8489, O8489 +8490, O8490 +8491, O8491 +8492, O8492 +8493, O8493 +8494, O8494 +8495, O8495 +8496, O8496 +8497, O8497 +8498, O8498 +8499, O8499 +8500, O8500 +8501, O8501 +8502, O8502 +8503, O8503 +8504, O8504 +8505, O8505 +8506, O8506 +8507, O8507 +8508, O8508 +8509, O8509 +8510, O8510 +8511, O8511 +8512, O8512 +8513, O8513 +8514, O8514 +8515, O8515 +8516, O8516 +8517, O8517 +8518, O8518 +8519, O8519 +8520, O8520 +8521, O8521 +8522, O8522 +8523, O8523 +8524, O8524 +8525, O8525 +8526, O8526 +8527, O8527 +8528, O8528 +8529, O8529 +8530, O8530 +8531, O8531 +8532, O8532 +8533, O8533 +8534, O8534 +8535, O8535 +8536, O8536 +8537, O8537 +8538, O8538 +8539, O8539 +8540, O8540 +8541, O8541 +8542, O8542 +8543, O8543 +8544, O8544 +8545, O8545 +8546, O8546 +8547, O8547 +8548, O8548 +8549, O8549 +8550, O8550 +8551, O8551 +8552, O8552 +8553, O8553 +8554, O8554 +8555, O8555 +8556, O8556 +8557, O8557 +8558, O8558 +8559, O8559 +8560, O8560 +8561, O8561 +8562, O8562 +8563, O8563 +8564, O8564 +8565, O8565 +8566, O8566 +8567, O8567 +8568, O8568 +8569, O8569 +8570, O8570 +8571, O8571 +8572, O8572 +8573, O8573 +8574, O8574 +8575, O8575 +8576, O8576 +8577, O8577 +8578, O8578 +8579, O8579 +8580, O8580 +8581, O8581 +8582, O8582 +8583, O8583 +8584, O8584 +8585, O8585 +8586, O8586 +8587, O8587 +8588, O8588 +8589, O8589 +8590, O8590 +8591, O8591 +8592, O8592 +8593, O8593 +8594, O8594 +8595, O8595 +8596, O8596 +8597, O8597 +8598, O8598 +8599, O8599 +8600, O8600 +8601, O8601 +8602, O8602 +8603, O8603 +8604, O8604 +8605, O8605 +8606, O8606 +8607, O8607 +8608, O8608 +8609, O8609 +8610, O8610 +8611, O8611 +8612, O8612 +8613, O8613 +8614, O8614 +8615, O8615 +8616, O8616 +8617, O8617 +8618, O8618 +8619, O8619 +8620, O8620 +8621, O8621 +8622, O8622 +8623, O8623 +8624, O8624 +8625, O8625 +8626, O8626 +8627, O8627 +8628, O8628 +8629, O8629 +8630, O8630 +8631, O8631 +8632, O8632 +8633, O8633 +8634, O8634 +8635, O8635 +8636, O8636 +8637, O8637 +8638, O8638 +8639, O8639 +8640, O8640 +8641, O8641 +8642, O8642 +8643, O8643 +8644, O8644 +8645, O8645 +8646, O8646 +8647, O8647 +8648, O8648 +8649, O8649 +8650, O8650 +8651, O8651 +8652, O8652 +8653, O8653 +8654, O8654 +8655, O8655 +8656, O8656 +8657, O8657 +8658, O8658 +8659, O8659 +8660, O8660 +8661, O8661 +8662, O8662 +8663, O8663 +8664, O8664 +8665, O8665 +8666, O8666 +8667, O8667 +8668, O8668 +8669, O8669 +8670, O8670 +8671, O8671 +8672, O8672 +8673, O8673 +8674, O8674 +8675, O8675 +8676, O8676 +8677, O8677 +8678, O8678 +8679, O8679 +8680, O8680 +8681, O8681 +8682, O8682 +8683, O8683 +8684, O8684 +8685, O8685 +8686, O8686 +8687, O8687 +8688, O8688 +8689, O8689 +8690, O8690 +8691, O8691 +8692, O8692 +8693, O8693 +8694, O8694 +8695, O8695 +8696, O8696 +8697, O8697 +8698, O8698 +8699, O8699 +8700, O8700 +8701, O8701 +8702, O8702 +8703, O8703 +8704, O8704 +8705, O8705 +8706, O8706 +8707, O8707 +8708, O8708 +8709, O8709 +8710, O8710 +8711, O8711 +8712, O8712 +8713, O8713 +8714, O8714 +8715, O8715 +8716, O8716 +8717, O8717 +8718, O8718 +8719, O8719 +8720, O8720 +8721, O8721 +8722, O8722 +8723, O8723 +8724, O8724 +8725, O8725 +8726, O8726 +8727, O8727 +8728, O8728 +8729, O8729 +8730, O8730 +8731, O8731 +8732, O8732 +8733, O8733 +8734, O8734 +8735, O8735 +8736, O8736 +8737, O8737 +8738, O8738 +8739, O8739 +8740, O8740 +8741, O8741 +8742, O8742 +8743, O8743 +8744, O8744 +8745, O8745 +8746, O8746 +8747, O8747 +8748, O8748 +8749, O8749 +8750, O8750 +8751, O8751 +8752, O8752 +8753, O8753 +8754, O8754 +8755, O8755 +8756, O8756 +8757, O8757 +8758, O8758 +8759, O8759 +8760, O8760 +8761, O8761 +8762, O8762 +8763, O8763 +8764, O8764 +8765, O8765 +8766, O8766 +8767, O8767 +8768, O8768 +8769, O8769 +8770, O8770 +8771, O8771 +8772, O8772 +8773, O8773 +8774, O8774 +8775, O8775 +8776, O8776 +8777, O8777 +8778, O8778 +8779, O8779 +8780, O8780 +8781, O8781 +8782, O8782 +8783, O8783 +8784, O8784 +8785, O8785 +8786, O8786 +8787, O8787 +8788, O8788 +8789, O8789 +8790, O8790 +8791, O8791 +8792, O8792 +8793, O8793 +8794, O8794 +8795, O8795 +8796, O8796 +8797, O8797 +8798, O8798 +8799, O8799 +8800, O8800 +8801, O8801 +8802, O8802 +8803, O8803 +8804, O8804 +8805, O8805 +8806, O8806 +8807, O8807 +8808, O8808 +8809, O8809 +8810, O8810 +8811, O8811 +8812, O8812 +8813, O8813 +8814, O8814 +8815, O8815 +8816, O8816 +8817, O8817 +8818, O8818 +8819, O8819 +8820, O8820 +8821, O8821 +8822, O8822 +8823, O8823 +8824, O8824 +8825, O8825 +8826, O8826 +8827, O8827 +8828, O8828 +8829, O8829 +8830, O8830 +8831, O8831 +8832, O8832 +8833, O8833 +8834, O8834 +8835, O8835 +8836, O8836 +8837, O8837 +8838, O8838 +8839, O8839 +8840, O8840 +8841, O8841 +8842, O8842 +8843, O8843 +8844, O8844 +8845, O8845 +8846, O8846 +8847, O8847 +8848, O8848 +8849, O8849 +8850, O8850 +8851, O8851 +8852, O8852 +8853, O8853 +8854, O8854 +8855, O8855 +8856, O8856 +8857, O8857 +8858, O8858 +8859, O8859 +8860, O8860 +8861, O8861 +8862, O8862 +8863, O8863 +8864, O8864 +8865, O8865 +8866, O8866 +8867, O8867 +8868, O8868 +8869, O8869 +8870, O8870 +8871, O8871 +8872, O8872 +8873, O8873 +8874, O8874 +8875, O8875 +8876, O8876 +8877, O8877 +8878, O8878 +8879, O8879 +8880, O8880 +8881, O8881 +8882, O8882 +8883, O8883 +8884, O8884 +8885, O8885 +8886, O8886 +8887, O8887 +8888, O8888 +8889, O8889 +8890, O8890 +8891, O8891 +8892, O8892 +8893, O8893 +8894, O8894 +8895, O8895 +8896, O8896 +8897, O8897 +8898, O8898 +8899, O8899 +8900, O8900 +8901, O8901 +8902, O8902 +8903, O8903 +8904, O8904 +8905, O8905 +8906, O8906 +8907, O8907 +8908, O8908 +8909, O8909 +8910, O8910 +8911, O8911 +8912, O8912 +8913, O8913 +8914, O8914 +8915, O8915 +8916, O8916 +8917, O8917 +8918, O8918 +8919, O8919 +8920, O8920 +8921, O8921 +8922, O8922 +8923, O8923 +8924, O8924 +8925, O8925 +8926, O8926 +8927, O8927 +8928, O8928 +8929, O8929 +8930, O8930 +8931, O8931 +8932, O8932 +8933, O8933 +8934, O8934 +8935, O8935 +8936, O8936 +8937, O8937 +8938, O8938 +8939, O8939 +8940, O8940 +8941, O8941 +8942, O8942 +8943, O8943 +8944, O8944 +8945, O8945 +8946, O8946 +8947, O8947 +8948, O8948 +8949, O8949 +8950, O8950 +8951, O8951 +8952, O8952 +8953, O8953 +8954, O8954 +8955, O8955 +8956, O8956 +8957, O8957 +8958, O8958 +8959, O8959 +8960, O8960 +8961, O8961 +8962, O8962 +8963, O8963 +8964, O8964 +8965, O8965 +8966, O8966 +8967, O8967 +8968, O8968 +8969, O8969 +8970, O8970 +8971, O8971 +8972, O8972 +8973, O8973 +8974, O8974 +8975, O8975 +8976, O8976 +8977, O8977 +8978, O8978 +8979, O8979 +8980, O8980 +8981, O8981 +8982, O8982 +8983, O8983 +8984, O8984 +8985, O8985 +8986, O8986 +8987, O8987 +8988, O8988 +8989, O8989 +8990, O8990 +8991, O8991 +8992, O8992 +8993, O8993 +8994, O8994 +8995, O8995 +8996, O8996 +8997, O8997 +8998, O8998 +8999, O8999 +9000, O9000 +9001, O9001 +9002, O9002 +9003, O9003 +9004, O9004 +9005, O9005 +9006, O9006 +9007, O9007 +9008, O9008 +9009, O9009 +9010, O9010 +9011, O9011 +9012, O9012 +9013, O9013 +9014, O9014 +9015, O9015 +9016, O9016 +9017, O9017 +9018, O9018 +9019, O9019 +9020, O9020 +9021, O9021 +9022, O9022 +9023, O9023 +9024, O9024 +9025, O9025 +9026, O9026 +9027, O9027 +9028, O9028 +9029, O9029 +9030, O9030 +9031, O9031 +9032, O9032 +9033, O9033 +9034, O9034 +9035, O9035 +9036, O9036 +9037, O9037 +9038, O9038 +9039, O9039 +9040, O9040 +9041, O9041 +9042, O9042 +9043, O9043 +9044, O9044 +9045, O9045 +9046, O9046 +9047, O9047 +9048, O9048 +9049, O9049 +9050, O9050 +9051, O9051 +9052, O9052 +9053, O9053 +9054, O9054 +9055, O9055 +9056, O9056 +9057, O9057 +9058, O9058 +9059, O9059 +9060, O9060 +9061, O9061 +9062, O9062 +9063, O9063 +9064, O9064 +9065, O9065 +9066, O9066 +9067, O9067 +9068, O9068 +9069, O9069 +9070, O9070 +9071, O9071 +9072, O9072 +9073, O9073 +9074, O9074 +9075, O9075 +9076, O9076 +9077, O9077 +9078, O9078 +9079, O9079 +9080, O9080 +9081, O9081 +9082, O9082 +9083, O9083 +9084, O9084 +9085, O9085 +9086, O9086 +9087, O9087 +9088, O9088 +9089, O9089 +9090, O9090 +9091, O9091 +9092, O9092 +9093, O9093 +9094, O9094 +9095, O9095 +9096, O9096 +9097, O9097 +9098, O9098 +9099, O9099 +9100, O9100 +9101, O9101 +9102, O9102 +9103, O9103 +9104, O9104 +9105, O9105 +9106, O9106 +9107, O9107 +9108, O9108 +9109, O9109 +9110, O9110 +9111, O9111 +9112, O9112 +9113, O9113 +9114, O9114 +9115, O9115 +9116, O9116 +9117, O9117 +9118, O9118 +9119, O9119 +9120, O9120 +9121, O9121 +9122, O9122 +9123, O9123 +9124, O9124 +9125, O9125 +9126, O9126 +9127, O9127 +9128, O9128 +9129, O9129 +9130, O9130 +9131, O9131 +9132, O9132 +9133, O9133 +9134, O9134 +9135, O9135 +9136, O9136 +9137, O9137 +9138, O9138 +9139, O9139 +9140, O9140 +9141, O9141 +9142, O9142 +9143, O9143 +9144, O9144 +9145, O9145 +9146, O9146 +9147, O9147 +9148, O9148 +9149, O9149 +9150, O9150 +9151, O9151 +9152, O9152 +9153, O9153 +9154, O9154 +9155, O9155 +9156, O9156 +9157, O9157 +9158, O9158 +9159, O9159 +9160, O9160 +9161, O9161 +9162, O9162 +9163, O9163 +9164, O9164 +9165, O9165 +9166, O9166 +9167, O9167 +9168, O9168 +9169, O9169 +9170, O9170 +9171, O9171 +9172, O9172 +9173, O9173 +9174, O9174 +9175, O9175 +9176, O9176 +9177, O9177 +9178, O9178 +9179, O9179 +9180, O9180 +9181, O9181 +9182, O9182 +9183, O9183 +9184, O9184 +9185, O9185 +9186, O9186 +9187, O9187 +9188, O9188 +9189, O9189 +9190, O9190 +9191, O9191 +9192, O9192 +9193, O9193 +9194, O9194 +9195, O9195 +9196, O9196 +9197, O9197 +9198, O9198 +9199, O9199 +9200, O9200 +9201, O9201 +9202, O9202 +9203, O9203 +9204, O9204 +9205, O9205 +9206, O9206 +9207, O9207 +9208, O9208 +9209, O9209 +9210, O9210 +9211, O9211 +9212, O9212 +9213, O9213 +9214, O9214 +9215, O9215 +9216, O9216 +9217, O9217 +9218, O9218 +9219, O9219 +9220, O9220 +9221, O9221 +9222, O9222 +9223, O9223 +9224, O9224 +9225, O9225 +9226, O9226 +9227, O9227 +9228, O9228 +9229, O9229 +9230, O9230 +9231, O9231 +9232, O9232 +9233, O9233 +9234, O9234 +9235, O9235 +9236, O9236 +9237, O9237 +9238, O9238 +9239, O9239 +9240, O9240 +9241, O9241 +9242, O9242 +9243, O9243 +9244, O9244 +9245, O9245 +9246, O9246 +9247, O9247 +9248, O9248 +9249, O9249 +9250, O9250 +9251, O9251 +9252, O9252 +9253, O9253 +9254, O9254 +9255, O9255 +9256, O9256 +9257, O9257 +9258, O9258 +9259, O9259 +9260, O9260 +9261, O9261 +9262, O9262 +9263, O9263 +9264, O9264 +9265, O9265 +9266, O9266 +9267, O9267 +9268, O9268 +9269, O9269 +9270, O9270 +9271, O9271 +9272, O9272 +9273, O9273 +9274, O9274 +9275, O9275 +9276, O9276 +9277, O9277 +9278, O9278 +9279, O9279 +9280, O9280 +9281, O9281 +9282, O9282 +9283, O9283 +9284, O9284 +9285, O9285 +9286, O9286 +9287, O9287 +9288, O9288 +9289, O9289 +9290, O9290 +9291, O9291 +9292, O9292 +9293, O9293 +9294, O9294 +9295, O9295 +9296, O9296 +9297, O9297 +9298, O9298 +9299, O9299 +9300, O9300 +9301, O9301 +9302, O9302 +9303, O9303 +9304, O9304 +9305, O9305 +9306, O9306 +9307, O9307 +9308, O9308 +9309, O9309 +9310, O9310 +9311, O9311 +9312, O9312 +9313, O9313 +9314, O9314 +9315, O9315 +9316, O9316 +9317, O9317 +9318, O9318 +9319, O9319 +9320, O9320 +9321, O9321 +9322, O9322 +9323, O9323 +9324, O9324 +9325, O9325 +9326, O9326 +9327, O9327 +9328, O9328 +9329, O9329 +9330, O9330 +9331, O9331 +9332, O9332 +9333, O9333 +9334, O9334 +9335, O9335 +9336, O9336 +9337, O9337 +9338, O9338 +9339, O9339 +9340, O9340 +9341, O9341 +9342, O9342 +9343, O9343 +9344, O9344 +9345, O9345 +9346, O9346 +9347, O9347 +9348, O9348 +9349, O9349 +9350, O9350 +9351, O9351 +9352, O9352 +9353, O9353 +9354, O9354 +9355, O9355 +9356, O9356 +9357, O9357 +9358, O9358 +9359, O9359 +9360, O9360 +9361, O9361 +9362, O9362 +9363, O9363 +9364, O9364 +9365, O9365 +9366, O9366 +9367, O9367 +9368, O9368 +9369, O9369 +9370, O9370 +9371, O9371 +9372, O9372 +9373, O9373 +9374, O9374 +9375, O9375 +9376, O9376 +9377, O9377 +9378, O9378 +9379, O9379 +9380, O9380 +9381, O9381 +9382, O9382 +9383, O9383 +9384, O9384 +9385, O9385 +9386, O9386 +9387, O9387 +9388, O9388 +9389, O9389 +9390, O9390 +9391, O9391 +9392, O9392 +9393, O9393 +9394, O9394 +9395, O9395 +9396, O9396 +9397, O9397 +9398, O9398 +9399, O9399 +9400, O9400 +9401, O9401 +9402, O9402 +9403, O9403 +9404, O9404 +9405, O9405 +9406, O9406 +9407, O9407 +9408, O9408 +9409, O9409 +9410, O9410 +9411, O9411 +9412, O9412 +9413, O9413 +9414, O9414 +9415, O9415 +9416, O9416 +9417, O9417 +9418, O9418 +9419, O9419 +9420, O9420 +9421, O9421 +9422, O9422 +9423, O9423 +9424, O9424 +9425, O9425 +9426, O9426 +9427, O9427 +9428, O9428 +9429, O9429 +9430, O9430 +9431, O9431 +9432, O9432 +9433, O9433 +9434, O9434 +9435, O9435 +9436, O9436 +9437, O9437 +9438, O9438 +9439, O9439 +9440, O9440 +9441, O9441 +9442, O9442 +9443, O9443 +9444, O9444 +9445, O9445 +9446, O9446 +9447, O9447 +9448, O9448 +9449, O9449 +9450, O9450 +9451, O9451 +9452, O9452 +9453, O9453 +9454, O9454 +9455, O9455 +9456, O9456 +9457, O9457 +9458, O9458 +9459, O9459 +9460, O9460 +9461, O9461 +9462, O9462 +9463, O9463 +9464, O9464 +9465, O9465 +9466, O9466 +9467, O9467 +9468, O9468 +9469, O9469 +9470, O9470 +9471, O9471 +9472, O9472 +9473, O9473 +9474, O9474 +9475, O9475 +9476, O9476 +9477, O9477 +9478, O9478 +9479, O9479 +9480, O9480 +9481, O9481 +9482, O9482 +9483, O9483 +9484, O9484 +9485, O9485 +9486, O9486 +9487, O9487 +9488, O9488 +9489, O9489 +9490, O9490 +9491, O9491 +9492, O9492 +9493, O9493 +9494, O9494 +9495, O9495 +9496, O9496 +9497, O9497 +9498, O9498 +9499, O9499 +9500, O9500 +9501, O9501 +9502, O9502 +9503, O9503 +9504, O9504 +9505, O9505 +9506, O9506 +9507, O9507 +9508, O9508 +9509, O9509 +9510, O9510 +9511, O9511 +9512, O9512 +9513, O9513 +9514, O9514 +9515, O9515 +9516, O9516 +9517, O9517 +9518, O9518 +9519, O9519 +9520, O9520 +9521, O9521 +9522, O9522 +9523, O9523 +9524, O9524 +9525, O9525 +9526, O9526 +9527, O9527 +9528, O9528 +9529, O9529 +9530, O9530 +9531, O9531 +9532, O9532 +9533, O9533 +9534, O9534 +9535, O9535 +9536, O9536 +9537, O9537 +9538, O9538 +9539, O9539 +9540, O9540 +9541, O9541 +9542, O9542 +9543, O9543 +9544, O9544 +9545, O9545 +9546, O9546 +9547, O9547 +9548, O9548 +9549, O9549 +9550, O9550 +9551, O9551 +9552, O9552 +9553, O9553 +9554, O9554 +9555, O9555 +9556, O9556 +9557, O9557 +9558, O9558 +9559, O9559 +9560, O9560 +9561, O9561 +9562, O9562 +9563, O9563 +9564, O9564 +9565, O9565 +9566, O9566 +9567, O9567 +9568, O9568 +9569, O9569 +9570, O9570 +9571, O9571 +9572, O9572 +9573, O9573 +9574, O9574 +9575, O9575 +9576, O9576 +9577, O9577 +9578, O9578 +9579, O9579 +9580, O9580 +9581, O9581 +9582, O9582 +9583, O9583 +9584, O9584 +9585, O9585 +9586, O9586 +9587, O9587 +9588, O9588 +9589, O9589 +9590, O9590 +9591, O9591 +9592, O9592 +9593, O9593 +9594, O9594 +9595, O9595 +9596, O9596 +9597, O9597 +9598, O9598 +9599, O9599 +9600, O9600 +9601, O9601 +9602, O9602 +9603, O9603 +9604, O9604 +9605, O9605 +9606, O9606 +9607, O9607 +9608, O9608 +9609, O9609 +9610, O9610 +9611, O9611 +9612, O9612 +9613, O9613 +9614, O9614 +9615, O9615 +9616, O9616 +9617, O9617 +9618, O9618 +9619, O9619 +9620, O9620 +9621, O9621 +9622, O9622 +9623, O9623 +9624, O9624 +9625, O9625 +9626, O9626 +9627, O9627 +9628, O9628 +9629, O9629 +9630, O9630 +9631, O9631 +9632, O9632 +9633, O9633 +9634, O9634 +9635, O9635 +9636, O9636 +9637, O9637 +9638, O9638 +9639, O9639 +9640, O9640 +9641, O9641 +9642, O9642 +9643, O9643 +9644, O9644 +9645, O9645 +9646, O9646 +9647, O9647 +9648, O9648 +9649, O9649 +9650, O9650 +9651, O9651 +9652, O9652 +9653, O9653 +9654, O9654 +9655, O9655 +9656, O9656 +9657, O9657 +9658, O9658 +9659, O9659 +9660, O9660 +9661, O9661 +9662, O9662 +9663, O9663 +9664, O9664 +9665, O9665 +9666, O9666 +9667, O9667 +9668, O9668 +9669, O9669 +9670, O9670 +9671, O9671 +9672, O9672 +9673, O9673 +9674, O9674 +9675, O9675 +9676, O9676 +9677, O9677 +9678, O9678 +9679, O9679 +9680, O9680 +9681, O9681 +9682, O9682 +9683, O9683 +9684, O9684 +9685, O9685 +9686, O9686 +9687, O9687 +9688, O9688 +9689, O9689 +9690, O9690 +9691, O9691 +9692, O9692 +9693, O9693 +9694, O9694 +9695, O9695 +9696, O9696 +9697, O9697 +9698, O9698 +9699, O9699 +9700, O9700 +9701, O9701 +9702, O9702 +9703, O9703 +9704, O9704 +9705, O9705 +9706, O9706 +9707, O9707 +9708, O9708 +9709, O9709 +9710, O9710 +9711, O9711 +9712, O9712 +9713, O9713 +9714, O9714 +9715, O9715 +9716, O9716 +9717, O9717 +9718, O9718 +9719, O9719 +9720, O9720 +9721, O9721 +9722, O9722 +9723, O9723 +9724, O9724 +9725, O9725 +9726, O9726 +9727, O9727 +9728, O9728 +9729, O9729 +9730, O9730 +9731, O9731 +9732, O9732 +9733, O9733 +9734, O9734 +9735, O9735 +9736, O9736 +9737, O9737 +9738, O9738 +9739, O9739 +9740, O9740 +9741, O9741 +9742, O9742 +9743, O9743 +9744, O9744 +9745, O9745 +9746, O9746 +9747, O9747 +9748, O9748 +9749, O9749 +9750, O9750 +9751, O9751 +9752, O9752 +9753, O9753 +9754, O9754 +9755, O9755 +9756, O9756 +9757, O9757 +9758, O9758 +9759, O9759 +9760, O9760 +9761, O9761 +9762, O9762 +9763, O9763 +9764, O9764 +9765, O9765 +9766, O9766 +9767, O9767 +9768, O9768 +9769, O9769 +9770, O9770 +9771, O9771 +9772, O9772 +9773, O9773 +9774, O9774 +9775, O9775 +9776, O9776 +9777, O9777 +9778, O9778 +9779, O9779 +9780, O9780 +9781, O9781 +9782, O9782 +9783, O9783 +9784, O9784 +9785, O9785 +9786, O9786 +9787, O9787 +9788, O9788 +9789, O9789 +9790, O9790 +9791, O9791 +9792, O9792 +9793, O9793 +9794, O9794 +9795, O9795 +9796, O9796 +9797, O9797 +9798, O9798 +9799, O9799 +9800, O9800 +9801, O9801 +9802, O9802 +9803, O9803 +9804, O9804 +9805, O9805 +9806, O9806 +9807, O9807 +9808, O9808 +9809, O9809 +9810, O9810 +9811, O9811 +9812, O9812 +9813, O9813 +9814, O9814 +9815, O9815 +9816, O9816 +9817, O9817 +9818, O9818 +9819, O9819 +9820, O9820 +9821, O9821 +9822, O9822 +9823, O9823 +9824, O9824 +9825, O9825 +9826, O9826 +9827, O9827 +9828, O9828 +9829, O9829 +9830, O9830 +9831, O9831 +9832, O9832 +9833, O9833 +9834, O9834 +9835, O9835 +9836, O9836 +9837, O9837 +9838, O9838 +9839, O9839 +9840, O9840 +9841, O9841 +9842, O9842 +9843, O9843 +9844, O9844 +9845, O9845 +9846, O9846 +9847, O9847 +9848, O9848 +9849, O9849 +9850, O9850 +9851, O9851 +9852, O9852 +9853, O9853 +9854, O9854 +9855, O9855 +9856, O9856 +9857, O9857 +9858, O9858 +9859, O9859 +9860, O9860 +9861, O9861 +9862, O9862 +9863, O9863 +9864, O9864 +9865, O9865 +9866, O9866 +9867, O9867 +9868, O9868 +9869, O9869 +9870, O9870 +9871, O9871 +9872, O9872 +9873, O9873 +9874, O9874 +9875, O9875 +9876, O9876 +9877, O9877 +9878, O9878 +9879, O9879 +9880, O9880 +9881, O9881 +9882, O9882 +9883, O9883 +9884, O9884 +9885, O9885 +9886, O9886 +9887, O9887 +9888, O9888 +9889, O9889 +9890, O9890 +9891, O9891 +9892, O9892 +9893, O9893 +9894, O9894 +9895, O9895 +9896, O9896 +9897, O9897 +9898, O9898 +9899, O9899 +9900, O9900 +9901, O9901 +9902, O9902 +9903, O9903 +9904, O9904 +9905, O9905 +9906, O9906 +9907, O9907 +9908, O9908 +9909, O9909 +9910, O9910 +9911, O9911 +9912, O9912 +9913, O9913 +9914, O9914 +9915, O9915 +9916, O9916 +9917, O9917 +9918, O9918 +9919, O9919 +9920, O9920 +9921, O9921 +9922, O9922 +9923, O9923 +9924, O9924 +9925, O9925 +9926, O9926 +9927, O9927 +9928, O9928 +9929, O9929 +9930, O9930 +9931, O9931 +9932, O9932 +9933, O9933 +9934, O9934 +9935, O9935 +9936, O9936 +9937, O9937 +9938, O9938 +9939, O9939 +9940, O9940 +9941, O9941 +9942, O9942 +9943, O9943 +9944, O9944 +9945, O9945 +9946, O9946 +9947, O9947 +9948, O9948 +9949, O9949 +9950, O9950 +9951, O9951 +9952, O9952 +9953, O9953 +9954, O9954 +9955, O9955 +9956, O9956 +9957, O9957 +9958, O9958 +9959, O9959 +9960, O9960 +9961, O9961 +9962, O9962 +9963, O9963 +9964, O9964 +9965, O9965 +9966, O9966 +9967, O9967 +9968, O9968 +9969, O9969 +9970, O9970 +9971, O9971 +9972, O9972 +9973, O9973 +9974, O9974 +9975, O9975 +9976, O9976 +9977, O9977 +9978, O9978 +9979, O9979 +9980, O9980 +9981, O9981 +9982, O9982 +9983, O9983 +9984, O9984 +9985, O9985 +9986, O9986 +9987, O9987 +9988, O9988 +9989, O9989 +9990, O9990 +9991, O9991 +9992, O9992 +9993, O9993 +9994, O9994 +9995, O9995 +9996, O9996 +9997, O9997 +9998, O9998 +9999, O9999 +10000, O10000 +10001, O10001 +10002, O10002 +10003, O10003 +10004, O10004 +10005, O10005 +10006, O10006 +10007, O10007 +10008, O10008 +10009, O10009 +10010, O10010 +10011, O10011 +10012, O10012 +10013, O10013 +10014, O10014 +10015, O10015 +10016, O10016 +10017, O10017 +10018, O10018 +10019, O10019 +10020, O10020 +10021, O10021 +10022, O10022 +10023, O10023 +10024, O10024 +10025, O10025 +10026, O10026 +10027, O10027 +10028, O10028 +10029, O10029 +10030, O10030 +10031, O10031 +10032, O10032 +10033, O10033 +10034, O10034 +10035, O10035 +10036, O10036 +10037, O10037 +10038, O10038 +10039, O10039 +10040, O10040 +10041, O10041 +10042, O10042 +10043, O10043 +10044, O10044 +10045, O10045 +10046, O10046 +10047, O10047 +10048, O10048 +10049, O10049 +10050, O10050 +10051, O10051 +10052, O10052 +10053, O10053 +10054, O10054 +10055, O10055 +10056, O10056 +10057, O10057 +10058, O10058 +10059, O10059 +10060, O10060 +10061, O10061 +10062, O10062 +10063, O10063 +10064, O10064 +10065, O10065 +10066, O10066 +10067, O10067 +10068, O10068 +10069, O10069 +10070, O10070 +10071, O10071 +10072, O10072 +10073, O10073 +10074, O10074 +10075, O10075 +10076, O10076 +10077, O10077 +10078, O10078 +10079, O10079 +10080, O10080 +10081, O10081 +10082, O10082 +10083, O10083 +10084, O10084 +10085, O10085 +10086, O10086 +10087, O10087 +10088, O10088 +10089, O10089 +10090, O10090 +10091, O10091 +10092, O10092 +10093, O10093 +10094, O10094 +10095, O10095 +10096, O10096 +10097, O10097 +10098, O10098 +10099, O10099 +10100, O10100 +10101, O10101 +10102, O10102 +10103, O10103 +10104, O10104 +10105, O10105 +10106, O10106 +10107, O10107 +10108, O10108 +10109, O10109 +10110, O10110 +10111, O10111 +10112, O10112 +10113, O10113 +10114, O10114 +10115, O10115 +10116, O10116 +10117, O10117 +10118, O10118 +10119, O10119 +10120, O10120 +10121, O10121 +10122, O10122 +10123, O10123 +10124, O10124 +10125, O10125 +10126, O10126 +10127, O10127 +10128, O10128 +10129, O10129 +10130, O10130 +10131, O10131 +10132, O10132 +10133, O10133 +10134, O10134 +10135, O10135 +10136, O10136 +10137, O10137 +10138, O10138 +10139, O10139 +10140, O10140 +10141, O10141 +10142, O10142 +10143, O10143 +10144, O10144 +10145, O10145 +10146, O10146 +10147, O10147 +10148, O10148 +10149, O10149 +10150, O10150 +10151, O10151 +10152, O10152 +10153, O10153 +10154, O10154 +10155, O10155 +10156, O10156 +10157, O10157 +10158, O10158 +10159, O10159 +10160, O10160 +10161, O10161 +10162, O10162 +10163, O10163 +10164, O10164 +10165, O10165 +10166, O10166 +10167, O10167 +10168, O10168 +10169, O10169 +10170, O10170 +10171, O10171 +10172, O10172 +10173, O10173 +10174, O10174 +10175, O10175 +10176, O10176 +10177, O10177 +10178, O10178 +10179, O10179 +10180, O10180 +10181, O10181 +10182, O10182 +10183, O10183 +10184, O10184 +10185, O10185 +10186, O10186 +10187, O10187 +10188, O10188 +10189, O10189 +10190, O10190 +10191, O10191 +10192, O10192 +10193, O10193 +10194, O10194 +10195, O10195 +10196, O10196 +10197, O10197 +10198, O10198 +10199, O10199 +10200, O10200 +10201, O10201 +10202, O10202 +10203, O10203 +10204, O10204 +10205, O10205 +10206, O10206 +10207, O10207 +10208, O10208 +10209, O10209 +10210, O10210 +10211, O10211 +10212, O10212 +10213, O10213 +10214, O10214 +10215, O10215 +10216, O10216 +10217, O10217 +10218, O10218 +10219, O10219 +10220, O10220 +10221, O10221 +10222, O10222 +10223, O10223 +10224, O10224 +10225, O10225 +10226, O10226 +10227, O10227 +10228, O10228 +10229, O10229 +10230, O10230 +10231, O10231 +10232, O10232 +10233, O10233 +10234, O10234 +10235, O10235 +10236, O10236 +10237, O10237 +10238, O10238 +10239, O10239 +10240, O10240 +10241, O10241 +10242, O10242 +10243, O10243 +10244, O10244 +10245, O10245 +10246, O10246 +10247, O10247 +10248, O10248 +10249, O10249 +10250, O10250 +10251, O10251 +10252, O10252 +10253, O10253 +10254, O10254 +10255, O10255 +10256, O10256 +10257, O10257 +10258, O10258 +10259, O10259 +10260, O10260 +10261, O10261 +10262, O10262 +10263, O10263 +10264, O10264 +10265, O10265 +10266, O10266 +10267, O10267 +10268, O10268 +10269, O10269 +10270, O10270 +10271, O10271 +10272, O10272 +10273, O10273 +10274, O10274 +10275, O10275 +10276, O10276 +10277, O10277 +10278, O10278 +10279, O10279 +10280, O10280 +10281, O10281 +10282, O10282 +10283, O10283 +10284, O10284 +10285, O10285 +10286, O10286 +10287, O10287 +10288, O10288 +10289, O10289 +10290, O10290 +10291, O10291 +10292, O10292 +10293, O10293 +10294, O10294 +10295, O10295 +10296, O10296 +10297, O10297 +10298, O10298 +10299, O10299 +10300, O10300 +10301, O10301 +10302, O10302 +10303, O10303 +10304, O10304 +10305, O10305 +10306, O10306 +10307, O10307 +10308, O10308 +10309, O10309 +10310, O10310 +10311, O10311 +10312, O10312 +10313, O10313 +10314, O10314 +10315, O10315 +10316, O10316 +10317, O10317 +10318, O10318 +10319, O10319 +10320, O10320 +10321, O10321 +10322, O10322 +10323, O10323 +10324, O10324 +10325, O10325 +10326, O10326 +10327, O10327 +10328, O10328 +10329, O10329 +10330, O10330 +10331, O10331 +10332, O10332 +10333, O10333 +10334, O10334 +10335, O10335 +10336, O10336 +10337, O10337 +10338, O10338 +10339, O10339 +10340, O10340 +10341, O10341 +10342, O10342 +10343, O10343 +10344, O10344 +10345, O10345 +10346, O10346 +10347, O10347 +10348, O10348 +10349, O10349 +10350, O10350 +10351, O10351 +10352, O10352 +10353, O10353 +10354, O10354 +10355, O10355 +10356, O10356 +10357, O10357 +10358, O10358 +10359, O10359 +10360, O10360 +10361, O10361 +10362, O10362 +10363, O10363 +10364, O10364 +10365, O10365 +10366, O10366 +10367, O10367 +10368, O10368 +10369, O10369 +10370, O10370 +10371, O10371 +10372, O10372 +10373, O10373 +10374, O10374 +10375, O10375 +10376, O10376 +10377, O10377 +10378, O10378 +10379, O10379 +10380, O10380 +10381, O10381 +10382, O10382 +10383, O10383 +10384, O10384 +10385, O10385 +10386, O10386 +10387, O10387 +10388, O10388 +10389, O10389 +10390, O10390 +10391, O10391 +10392, O10392 +10393, O10393 +10394, O10394 +10395, O10395 +10396, O10396 +10397, O10397 +10398, O10398 +10399, O10399 +10400, O10400 +10401, O10401 +10402, O10402 +10403, O10403 +10404, O10404 +10405, O10405 +10406, O10406 +10407, O10407 +10408, O10408 +10409, O10409 +10410, O10410 +10411, O10411 +10412, O10412 +10413, O10413 +10414, O10414 +10415, O10415 +10416, O10416 +10417, O10417 +10418, O10418 +10419, O10419 +10420, O10420 +10421, O10421 +10422, O10422 +10423, O10423 +10424, O10424 +10425, O10425 +10426, O10426 +10427, O10427 +10428, O10428 +10429, O10429 +10430, O10430 +10431, O10431 +10432, O10432 +10433, O10433 +10434, O10434 +10435, O10435 +10436, O10436 +10437, O10437 +10438, O10438 +10439, O10439 +10440, O10440 +10441, O10441 +10442, O10442 +10443, O10443 +10444, O10444 +10445, O10445 +10446, O10446 +10447, O10447 +10448, O10448 +10449, O10449 +10450, O10450 +10451, O10451 +10452, O10452 +10453, O10453 +10454, O10454 +10455, O10455 +10456, O10456 +10457, O10457 +10458, O10458 +10459, O10459 +10460, O10460 +10461, O10461 +10462, O10462 +10463, O10463 +10464, O10464 +10465, O10465 +10466, O10466 +10467, O10467 +10468, O10468 +10469, O10469 +10470, O10470 +10471, O10471 +10472, O10472 +10473, O10473 +10474, O10474 +10475, O10475 +10476, O10476 +10477, O10477 +10478, O10478 +10479, O10479 +10480, O10480 +10481, O10481 +10482, O10482 +10483, O10483 +10484, O10484 +10485, O10485 +10486, O10486 +10487, O10487 +10488, O10488 +10489, O10489 +10490, O10490 +10491, O10491 +10492, O10492 +10493, O10493 +10494, O10494 +10495, O10495 +10496, O10496 +10497, O10497 +10498, O10498 +10499, O10499 +10500, O10500 +10501, O10501 +10502, O10502 +10503, O10503 +10504, O10504 +10505, O10505 +10506, O10506 +10507, O10507 +10508, O10508 +10509, O10509 +10510, O10510 +10511, O10511 +10512, O10512 +10513, O10513 +10514, O10514 +10515, O10515 +10516, O10516 +10517, O10517 +10518, O10518 +10519, O10519 +10520, O10520 +10521, O10521 +10522, O10522 +10523, O10523 +10524, O10524 +10525, O10525 +10526, O10526 +10527, O10527 +10528, O10528 +10529, O10529 +10530, O10530 +10531, O10531 +10532, O10532 +10533, O10533 +10534, O10534 +10535, O10535 +10536, O10536 +10537, O10537 +10538, O10538 +10539, O10539 +10540, O10540 +10541, O10541 +10542, O10542 +10543, O10543 +10544, O10544 +10545, O10545 +10546, O10546 +10547, O10547 +10548, O10548 +10549, O10549 +10550, O10550 +10551, O10551 +10552, O10552 +10553, O10553 +10554, O10554 +10555, O10555 +10556, O10556 +10557, O10557 +10558, O10558 +10559, O10559 +10560, O10560 +10561, O10561 +10562, O10562 +10563, O10563 +10564, O10564 +10565, O10565 +10566, O10566 +10567, O10567 +10568, O10568 +10569, O10569 +10570, O10570 +10571, O10571 +10572, O10572 +10573, O10573 +10574, O10574 +10575, O10575 +10576, O10576 +10577, O10577 +10578, O10578 +10579, O10579 +10580, O10580 +10581, O10581 +10582, O10582 +10583, O10583 +10584, O10584 +10585, O10585 +10586, O10586 +10587, O10587 +10588, O10588 +10589, O10589 +10590, O10590 +10591, O10591 +10592, O10592 +10593, O10593 +10594, O10594 +10595, O10595 +10596, O10596 +10597, O10597 +10598, O10598 +10599, O10599 +10600, O10600 +10601, O10601 +10602, O10602 +10603, O10603 +10604, O10604 +10605, O10605 +10606, O10606 +10607, O10607 +10608, O10608 +10609, O10609 +10610, O10610 +10611, O10611 +10612, O10612 +10613, O10613 +10614, O10614 +10615, O10615 +10616, O10616 +10617, O10617 +10618, O10618 +10619, O10619 +10620, O10620 +10621, O10621 +10622, O10622 +10623, O10623 +10624, O10624 +10625, O10625 +10626, O10626 +10627, O10627 +10628, O10628 +10629, O10629 +10630, O10630 +10631, O10631 +10632, O10632 +10633, O10633 +10634, O10634 +10635, O10635 +10636, O10636 +10637, O10637 +10638, O10638 +10639, O10639 +10640, O10640 +10641, O10641 +10642, O10642 +10643, O10643 +10644, O10644 +10645, O10645 +10646, O10646 +10647, O10647 +10648, O10648 +10649, O10649 +10650, O10650 +10651, O10651 +10652, O10652 +10653, O10653 +10654, O10654 +10655, O10655 +10656, O10656 +10657, O10657 +10658, O10658 +10659, O10659 +10660, O10660 +10661, O10661 +10662, O10662 +10663, O10663 +10664, O10664 +10665, O10665 +10666, O10666 +10667, O10667 +10668, O10668 +10669, O10669 +10670, O10670 +10671, O10671 +10672, O10672 +10673, O10673 +10674, O10674 +10675, O10675 +10676, O10676 +10677, O10677 +10678, O10678 +10679, O10679 +10680, O10680 +10681, O10681 +10682, O10682 +10683, O10683 +10684, O10684 +10685, O10685 +10686, O10686 +10687, O10687 +10688, O10688 +10689, O10689 +10690, O10690 +10691, O10691 +10692, O10692 +10693, O10693 +10694, O10694 +10695, O10695 +10696, O10696 +10697, O10697 +10698, O10698 +10699, O10699 +10700, O10700 +10701, O10701 +10702, O10702 +10703, O10703 +10704, O10704 +10705, O10705 +10706, O10706 +10707, O10707 +10708, O10708 +10709, O10709 +10710, O10710 +10711, O10711 +10712, O10712 +10713, O10713 +10714, O10714 +10715, O10715 +10716, O10716 +10717, O10717 +10718, O10718 +10719, O10719 +10720, O10720 +10721, O10721 +10722, O10722 +10723, O10723 +10724, O10724 +10725, O10725 +10726, O10726 +10727, O10727 +10728, O10728 +10729, O10729 +10730, O10730 +10731, O10731 +10732, O10732 +10733, O10733 +10734, O10734 +10735, O10735 +10736, O10736 +10737, O10737 +10738, O10738 +10739, O10739 +10740, O10740 +10741, O10741 +10742, O10742 +10743, O10743 +10744, O10744 +10745, O10745 +10746, O10746 +10747, O10747 +10748, O10748 +10749, O10749 +10750, O10750 +10751, O10751 +10752, O10752 +10753, O10753 +10754, O10754 +10755, O10755 +10756, O10756 +10757, O10757 +10758, O10758 +10759, O10759 +10760, O10760 +10761, O10761 +10762, O10762 +10763, O10763 +10764, O10764 +10765, O10765 +10766, O10766 +10767, O10767 +10768, O10768 +10769, O10769 +10770, O10770 +10771, O10771 +10772, O10772 +10773, O10773 +10774, O10774 +10775, O10775 +10776, O10776 +10777, O10777 +10778, O10778 +10779, O10779 +10780, O10780 +10781, O10781 +10782, O10782 +10783, O10783 +10784, O10784 +10785, O10785 +10786, O10786 +10787, O10787 +10788, O10788 +10789, O10789 +10790, O10790 +10791, O10791 +10792, O10792 +10793, O10793 +10794, O10794 +10795, O10795 +10796, O10796 +10797, O10797 +10798, O10798 +10799, O10799 +10800, O10800 +10801, O10801 +10802, O10802 +10803, O10803 +10804, O10804 +10805, O10805 +10806, O10806 +10807, O10807 +10808, O10808 +10809, O10809 +10810, O10810 +10811, O10811 +10812, O10812 +10813, O10813 +10814, O10814 +10815, O10815 +10816, O10816 +10817, O10817 +10818, O10818 +10819, O10819 +10820, O10820 +10821, O10821 +10822, O10822 +10823, O10823 +10824, O10824 +10825, O10825 +10826, O10826 +10827, O10827 +10828, O10828 +10829, O10829 +10830, O10830 +10831, O10831 +10832, O10832 +10833, O10833 +10834, O10834 +10835, O10835 +10836, O10836 +10837, O10837 +10838, O10838 +10839, O10839 +10840, O10840 +10841, O10841 +10842, O10842 +10843, O10843 +10844, O10844 +10845, O10845 +10846, O10846 +10847, O10847 +10848, O10848 +10849, O10849 +10850, O10850 +10851, O10851 +10852, O10852 +10853, O10853 +10854, O10854 +10855, O10855 +10856, O10856 +10857, O10857 +10858, O10858 +10859, O10859 +10860, O10860 +10861, O10861 +10862, O10862 +10863, O10863 +10864, O10864 +10865, O10865 +10866, O10866 +10867, O10867 +10868, O10868 +10869, O10869 +10870, O10870 +10871, O10871 +10872, O10872 +10873, O10873 +10874, O10874 +10875, O10875 +10876, O10876 +10877, O10877 +10878, O10878 +10879, O10879 +10880, O10880 +10881, O10881 +10882, O10882 +10883, O10883 +10884, O10884 +10885, O10885 +10886, O10886 +10887, O10887 +10888, O10888 +10889, O10889 +10890, O10890 +10891, O10891 +10892, O10892 +10893, O10893 +10894, O10894 +10895, O10895 +10896, O10896 +10897, O10897 +10898, O10898 +10899, O10899 +10900, O10900 +10901, O10901 +10902, O10902 +10903, O10903 +10904, O10904 +10905, O10905 +10906, O10906 +10907, O10907 +10908, O10908 +10909, O10909 +10910, O10910 +10911, O10911 +10912, O10912 +10913, O10913 +10914, O10914 +10915, O10915 +10916, O10916 +10917, O10917 +10918, O10918 +10919, O10919 +10920, O10920 +10921, O10921 +10922, O10922 +10923, O10923 +10924, O10924 +10925, O10925 +10926, O10926 +10927, O10927 +10928, O10928 +10929, O10929 +10930, O10930 +10931, O10931 +10932, O10932 +10933, O10933 +10934, O10934 +10935, O10935 +10936, O10936 +10937, O10937 +10938, O10938 +10939, O10939 +10940, O10940 +10941, O10941 +10942, O10942 +10943, O10943 +10944, O10944 +10945, O10945 +10946, O10946 +10947, O10947 +10948, O10948 +10949, O10949 +10950, O10950 +10951, O10951 +10952, O10952 +10953, O10953 +10954, O10954 +10955, O10955 +10956, O10956 +10957, O10957 +10958, O10958 +10959, O10959 +10960, O10960 +10961, O10961 +10962, O10962 +10963, O10963 +10964, O10964 +10965, O10965 +10966, O10966 +10967, O10967 +10968, O10968 +10969, O10969 +10970, O10970 +10971, O10971 +10972, O10972 +10973, O10973 +10974, O10974 +10975, O10975 +10976, O10976 +10977, O10977 +10978, O10978 +10979, O10979 +10980, O10980 +10981, O10981 +10982, O10982 +10983, O10983 +10984, O10984 +10985, O10985 +10986, O10986 +10987, O10987 +10988, O10988 +10989, O10989 +10990, O10990 +10991, O10991 +10992, O10992 +10993, O10993 +10994, O10994 +10995, O10995 +10996, O10996 +10997, O10997 +10998, O10998 +10999, O10999 +11000, O11000 +11001, O11001 +11002, O11002 +11003, O11003 +11004, O11004 +11005, O11005 +11006, O11006 +11007, O11007 +11008, O11008 +11009, O11009 +11010, O11010 +11011, O11011 +11012, O11012 +11013, O11013 +11014, O11014 +11015, O11015 +11016, O11016 +11017, O11017 +11018, O11018 +11019, O11019 +11020, O11020 +11021, O11021 +11022, O11022 +11023, O11023 +11024, O11024 +11025, O11025 +11026, O11026 +11027, O11027 +11028, O11028 +11029, O11029 +11030, O11030 +11031, O11031 +11032, O11032 +11033, O11033 +11034, O11034 +11035, O11035 +11036, O11036 +11037, O11037 +11038, O11038 +11039, O11039 +11040, O11040 +11041, O11041 +11042, O11042 +11043, O11043 +11044, O11044 +11045, O11045 +11046, O11046 +11047, O11047 +11048, O11048 +11049, O11049 +11050, O11050 +11051, O11051 +11052, O11052 +11053, O11053 +11054, O11054 +11055, O11055 +11056, O11056 +11057, O11057 +11058, O11058 +11059, O11059 +11060, O11060 +11061, O11061 +11062, O11062 +11063, O11063 +11064, O11064 +11065, O11065 +11066, O11066 +11067, O11067 +11068, O11068 +11069, O11069 +11070, O11070 +11071, O11071 +11072, O11072 +11073, O11073 +11074, O11074 +11075, O11075 +11076, O11076 +11077, O11077 +11078, O11078 +11079, O11079 +11080, O11080 +11081, O11081 +11082, O11082 +11083, O11083 +11084, O11084 +11085, O11085 +11086, O11086 +11087, O11087 +11088, O11088 +11089, O11089 +11090, O11090 +11091, O11091 +11092, O11092 +11093, O11093 +11094, O11094 +11095, O11095 +11096, O11096 +11097, O11097 +11098, O11098 +11099, O11099 +11100, O11100 +11101, O11101 +11102, O11102 +11103, O11103 +11104, O11104 +11105, O11105 +11106, O11106 +11107, O11107 +11108, O11108 +11109, O11109 +11110, O11110 +11111, O11111 +11112, O11112 +11113, O11113 +11114, O11114 +11115, O11115 +11116, O11116 +11117, O11117 +11118, O11118 +11119, O11119 +11120, O11120 +11121, O11121 +11122, O11122 +11123, O11123 +11124, O11124 +11125, O11125 +11126, O11126 +11127, O11127 +11128, O11128 +11129, O11129 +11130, O11130 +11131, O11131 +11132, O11132 +11133, O11133 +11134, O11134 +11135, O11135 +11136, O11136 +11137, O11137 +11138, O11138 +11139, O11139 +11140, O11140 +11141, O11141 +11142, O11142 +11143, O11143 +11144, O11144 +11145, O11145 +11146, O11146 +11147, O11147 +11148, O11148 +11149, O11149 +11150, O11150 +11151, O11151 +11152, O11152 +11153, O11153 +11154, O11154 +11155, O11155 +11156, O11156 +11157, O11157 +11158, O11158 +11159, O11159 +11160, O11160 +11161, O11161 +11162, O11162 +11163, O11163 +11164, O11164 +11165, O11165 +11166, O11166 +11167, O11167 +11168, O11168 +11169, O11169 +11170, O11170 +11171, O11171 +11172, O11172 +11173, O11173 +11174, O11174 +11175, O11175 +11176, O11176 +11177, O11177 +11178, O11178 +11179, O11179 +11180, O11180 +11181, O11181 +11182, O11182 +11183, O11183 +11184, O11184 +11185, O11185 +11186, O11186 +11187, O11187 +11188, O11188 +11189, O11189 +11190, O11190 +11191, O11191 +11192, O11192 +11193, O11193 +11194, O11194 +11195, O11195 +11196, O11196 +11197, O11197 +11198, O11198 +11199, O11199 +11200, O11200 +11201, O11201 +11202, O11202 +11203, O11203 +11204, O11204 +11205, O11205 +11206, O11206 +11207, O11207 +11208, O11208 +11209, O11209 +11210, O11210 +11211, O11211 +11212, O11212 +11213, O11213 +11214, O11214 +11215, O11215 +11216, O11216 +11217, O11217 +11218, O11218 +11219, O11219 +11220, O11220 +11221, O11221 +11222, O11222 +11223, O11223 +11224, O11224 +11225, O11225 +11226, O11226 +11227, O11227 +11228, O11228 +11229, O11229 +11230, O11230 +11231, O11231 +11232, O11232 +11233, O11233 +11234, O11234 +11235, O11235 +11236, O11236 +11237, O11237 +11238, O11238 +11239, O11239 +11240, O11240 +11241, O11241 +11242, O11242 +11243, O11243 +11244, O11244 +11245, O11245 +11246, O11246 +11247, O11247 +11248, O11248 +11249, O11249 +11250, O11250 +11251, O11251 +11252, O11252 +11253, O11253 +11254, O11254 +11255, O11255 +11256, O11256 +11257, O11257 +11258, O11258 +11259, O11259 +11260, O11260 +11261, O11261 +11262, O11262 +11263, O11263 +11264, O11264 +11265, O11265 +11266, O11266 +11267, O11267 +11268, O11268 +11269, O11269 +11270, O11270 +11271, O11271 +11272, O11272 +11273, O11273 +11274, O11274 +11275, O11275 +11276, O11276 +11277, O11277 +11278, O11278 +11279, O11279 +11280, O11280 +11281, O11281 +11282, O11282 +11283, O11283 +11284, O11284 +11285, O11285 +11286, O11286 +11287, O11287 +11288, O11288 +11289, O11289 +11290, O11290 +11291, O11291 +11292, O11292 +11293, O11293 +11294, O11294 +11295, O11295 +11296, O11296 +11297, O11297 +11298, O11298 +11299, O11299 +11300, O11300 +11301, O11301 +11302, O11302 +11303, O11303 +11304, O11304 +11305, O11305 +11306, O11306 +11307, O11307 +11308, O11308 +11309, O11309 +11310, O11310 +11311, O11311 +11312, O11312 +11313, O11313 +11314, O11314 +11315, O11315 +11316, O11316 +11317, O11317 +11318, O11318 +11319, O11319 +11320, O11320 +11321, O11321 +11322, O11322 +11323, O11323 +11324, O11324 +11325, O11325 +11326, O11326 +11327, O11327 +11328, O11328 +11329, O11329 +11330, O11330 +11331, O11331 +11332, O11332 +11333, O11333 +11334, O11334 +11335, O11335 +11336, O11336 +11337, O11337 +11338, O11338 +11339, O11339 +11340, O11340 +11341, O11341 +11342, O11342 +11343, O11343 +11344, O11344 +11345, O11345 +11346, O11346 +11347, O11347 +11348, O11348 +11349, O11349 +11350, O11350 +11351, O11351 +11352, O11352 +11353, O11353 +11354, O11354 +11355, O11355 +11356, O11356 +11357, O11357 +11358, O11358 +11359, O11359 +11360, O11360 +11361, O11361 +11362, O11362 +11363, O11363 +11364, O11364 +11365, O11365 +11366, O11366 +11367, O11367 +11368, O11368 +11369, O11369 +11370, O11370 +11371, O11371 +11372, O11372 +11373, O11373 +11374, O11374 +11375, O11375 +11376, O11376 +11377, O11377 +11378, O11378 +11379, O11379 +11380, O11380 +11381, O11381 +11382, O11382 +11383, O11383 +11384, O11384 +11385, O11385 +11386, O11386 +11387, O11387 +11388, O11388 +11389, O11389 +11390, O11390 +11391, O11391 +11392, O11392 +11393, O11393 +11394, O11394 +11395, O11395 +11396, O11396 +11397, O11397 +11398, O11398 +11399, O11399 +11400, O11400 +11401, O11401 +11402, O11402 +11403, O11403 +11404, O11404 +11405, O11405 +11406, O11406 +11407, O11407 +11408, O11408 +11409, O11409 +11410, O11410 +11411, O11411 +11412, O11412 +11413, O11413 +11414, O11414 +11415, O11415 +11416, O11416 +11417, O11417 +11418, O11418 +11419, O11419 +11420, O11420 +11421, O11421 +11422, O11422 +11423, O11423 +11424, O11424 +11425, O11425 +11426, O11426 +11427, O11427 +11428, O11428 +11429, O11429 +11430, O11430 +11431, O11431 +11432, O11432 +11433, O11433 +11434, O11434 +11435, O11435 +11436, O11436 +11437, O11437 +11438, O11438 +11439, O11439 +11440, O11440 +11441, O11441 +11442, O11442 +11443, O11443 +11444, O11444 +11445, O11445 +11446, O11446 +11447, O11447 +11448, O11448 +11449, O11449 +11450, O11450 +11451, O11451 +11452, O11452 +11453, O11453 +11454, O11454 +11455, O11455 +11456, O11456 +11457, O11457 +11458, O11458 +11459, O11459 +11460, O11460 +11461, O11461 +11462, O11462 +11463, O11463 +11464, O11464 +11465, O11465 +11466, O11466 +11467, O11467 +11468, O11468 +11469, O11469 +11470, O11470 +11471, O11471 +11472, O11472 +11473, O11473 +11474, O11474 +11475, O11475 +11476, O11476 +11477, O11477 +11478, O11478 +11479, O11479 +11480, O11480 +11481, O11481 +11482, O11482 +11483, O11483 +11484, O11484 +11485, O11485 +11486, O11486 +11487, O11487 +11488, O11488 +11489, O11489 +11490, O11490 +11491, O11491 +11492, O11492 +11493, O11493 +11494, O11494 +11495, O11495 +11496, O11496 +11497, O11497 +11498, O11498 +11499, O11499 +11500, O11500 +11501, O11501 +11502, O11502 +11503, O11503 +11504, O11504 +11505, O11505 +11506, O11506 +11507, O11507 +11508, O11508 +11509, O11509 +11510, O11510 +11511, O11511 +11512, O11512 +11513, O11513 +11514, O11514 +11515, O11515 +11516, O11516 +11517, O11517 +11518, O11518 +11519, O11519 +11520, O11520 +11521, O11521 +11522, O11522 +11523, O11523 +11524, O11524 +11525, O11525 +11526, O11526 +11527, O11527 +11528, O11528 +11529, O11529 +11530, O11530 +11531, O11531 +11532, O11532 +11533, O11533 +11534, O11534 +11535, O11535 +11536, O11536 +11537, O11537 +11538, O11538 +11539, O11539 +11540, O11540 +11541, O11541 +11542, O11542 +11543, O11543 +11544, O11544 +11545, O11545 +11546, O11546 +11547, O11547 +11548, O11548 +11549, O11549 +11550, O11550 +11551, O11551 +11552, O11552 +11553, O11553 +11554, O11554 +11555, O11555 +11556, O11556 +11557, O11557 +11558, O11558 +11559, O11559 +11560, O11560 +11561, O11561 +11562, O11562 +11563, O11563 +11564, O11564 +11565, O11565 +11566, O11566 +11567, O11567 +11568, O11568 +11569, O11569 +11570, O11570 +11571, O11571 +11572, O11572 +11573, O11573 +11574, O11574 +11575, O11575 +11576, O11576 +11577, O11577 +11578, O11578 +11579, O11579 +11580, O11580 +11581, O11581 +11582, O11582 +11583, O11583 +11584, O11584 +11585, O11585 +11586, O11586 +11587, O11587 +11588, O11588 +11589, O11589 +11590, O11590 +11591, O11591 +11592, O11592 +11593, O11593 +11594, O11594 +11595, O11595 +11596, O11596 +11597, O11597 +11598, O11598 +11599, O11599 +11600, O11600 +11601, O11601 +11602, O11602 +11603, O11603 +11604, O11604 +11605, O11605 +11606, O11606 +11607, O11607 +11608, O11608 +11609, O11609 +11610, O11610 +11611, O11611 +11612, O11612 +11613, O11613 +11614, O11614 +11615, O11615 +11616, O11616 +11617, O11617 +11618, O11618 +11619, O11619 +11620, O11620 +11621, O11621 +11622, O11622 +11623, O11623 +11624, O11624 +11625, O11625 +11626, O11626 +11627, O11627 +11628, O11628 +11629, O11629 +11630, O11630 +11631, O11631 +11632, O11632 +11633, O11633 +11634, O11634 +11635, O11635 +11636, O11636 +11637, O11637 +11638, O11638 +11639, O11639 +11640, O11640 +11641, O11641 +11642, O11642 +11643, O11643 +11644, O11644 +11645, O11645 +11646, O11646 +11647, O11647 +11648, O11648 +11649, O11649 +11650, O11650 +11651, O11651 +11652, O11652 +11653, O11653 +11654, O11654 +11655, O11655 +11656, O11656 +11657, O11657 +11658, O11658 +11659, O11659 +11660, O11660 +11661, O11661 +11662, O11662 +11663, O11663 +11664, O11664 +11665, O11665 +11666, O11666 +11667, O11667 +11668, O11668 +11669, O11669 +11670, O11670 +11671, O11671 +11672, O11672 +11673, O11673 +11674, O11674 +11675, O11675 +11676, O11676 +11677, O11677 +11678, O11678 +11679, O11679 +11680, O11680 +11681, O11681 +11682, O11682 +11683, O11683 +11684, O11684 +11685, O11685 +11686, O11686 +11687, O11687 +11688, O11688 +11689, O11689 +11690, O11690 +11691, O11691 +11692, O11692 +11693, O11693 +11694, O11694 +11695, O11695 +11696, O11696 +11697, O11697 +11698, O11698 +11699, O11699 +11700, O11700 +11701, O11701 +11702, O11702 +11703, O11703 +11704, O11704 +11705, O11705 +11706, O11706 +11707, O11707 +11708, O11708 +11709, O11709 +11710, O11710 +11711, O11711 +11712, O11712 +11713, O11713 +11714, O11714 +11715, O11715 +11716, O11716 +11717, O11717 +11718, O11718 +11719, O11719 +11720, O11720 +11721, O11721 +11722, O11722 +11723, O11723 +11724, O11724 +11725, O11725 +11726, O11726 +11727, O11727 +11728, O11728 +11729, O11729 +11730, O11730 +11731, O11731 +11732, O11732 +11733, O11733 +11734, O11734 +11735, O11735 +11736, O11736 +11737, O11737 +11738, O11738 +11739, O11739 +11740, O11740 +11741, O11741 +11742, O11742 +11743, O11743 +11744, O11744 +11745, O11745 +11746, O11746 +11747, O11747 +11748, O11748 +11749, O11749 +11750, O11750 +11751, O11751 +11752, O11752 +11753, O11753 +11754, O11754 +11755, O11755 +11756, O11756 +11757, O11757 +11758, O11758 +11759, O11759 +11760, O11760 +11761, O11761 +11762, O11762 +11763, O11763 +11764, O11764 +11765, O11765 +11766, O11766 +11767, O11767 +11768, O11768 +11769, O11769 +11770, O11770 +11771, O11771 +11772, O11772 +11773, O11773 +11774, O11774 +11775, O11775 +11776, O11776 +11777, O11777 +11778, O11778 +11779, O11779 +11780, O11780 +11781, O11781 +11782, O11782 +11783, O11783 +11784, O11784 +11785, O11785 +11786, O11786 +11787, O11787 +11788, O11788 +11789, O11789 +11790, O11790 +11791, O11791 +11792, O11792 +11793, O11793 +11794, O11794 +11795, O11795 +11796, O11796 +11797, O11797 +11798, O11798 +11799, O11799 +11800, O11800 +11801, O11801 +11802, O11802 +11803, O11803 +11804, O11804 +11805, O11805 +11806, O11806 +11807, O11807 +11808, O11808 +11809, O11809 +11810, O11810 +11811, O11811 +11812, O11812 +11813, O11813 +11814, O11814 +11815, O11815 +11816, O11816 +11817, O11817 +11818, O11818 +11819, O11819 +11820, O11820 +11821, O11821 +11822, O11822 +11823, O11823 +11824, O11824 +11825, O11825 +11826, O11826 +11827, O11827 +11828, O11828 +11829, O11829 +11830, O11830 +11831, O11831 +11832, O11832 +11833, O11833 +11834, O11834 +11835, O11835 +11836, O11836 +11837, O11837 +11838, O11838 +11839, O11839 +11840, O11840 +11841, O11841 +11842, O11842 +11843, O11843 +11844, O11844 +11845, O11845 +11846, O11846 +11847, O11847 +11848, O11848 +11849, O11849 +11850, O11850 +11851, O11851 +11852, O11852 +11853, O11853 +11854, O11854 +11855, O11855 +11856, O11856 +11857, O11857 +11858, O11858 +11859, O11859 +11860, O11860 +11861, O11861 +11862, O11862 +11863, O11863 +11864, O11864 +11865, O11865 +11866, O11866 +11867, O11867 +11868, O11868 +11869, O11869 +11870, O11870 +11871, O11871 +11872, O11872 +11873, O11873 +11874, O11874 +11875, O11875 +11876, O11876 +11877, O11877 +11878, O11878 +11879, O11879 +11880, O11880 +11881, O11881 +11882, O11882 +11883, O11883 +11884, O11884 +11885, O11885 +11886, O11886 +11887, O11887 +11888, O11888 +11889, O11889 +11890, O11890 +11891, O11891 +11892, O11892 +11893, O11893 +11894, O11894 +11895, O11895 +11896, O11896 +11897, O11897 +11898, O11898 +11899, O11899 +11900, O11900 +11901, O11901 +11902, O11902 +11903, O11903 +11904, O11904 +11905, O11905 +11906, O11906 +11907, O11907 +11908, O11908 +11909, O11909 +11910, O11910 +11911, O11911 +11912, O11912 +11913, O11913 +11914, O11914 +11915, O11915 +11916, O11916 +11917, O11917 +11918, O11918 +11919, O11919 +11920, O11920 +11921, O11921 +11922, O11922 +11923, O11923 +11924, O11924 +11925, O11925 +11926, O11926 +11927, O11927 +11928, O11928 +11929, O11929 +11930, O11930 +11931, O11931 +11932, O11932 +11933, O11933 +11934, O11934 +11935, O11935 +11936, O11936 +11937, O11937 +11938, O11938 +11939, O11939 +11940, O11940 +11941, O11941 +11942, O11942 +11943, O11943 +11944, O11944 +11945, O11945 +11946, O11946 +11947, O11947 +11948, O11948 +11949, O11949 +11950, O11950 +11951, O11951 +11952, O11952 +11953, O11953 +11954, O11954 +11955, O11955 +11956, O11956 +11957, O11957 +11958, O11958 +11959, O11959 +11960, O11960 +11961, O11961 +11962, O11962 +11963, O11963 +11964, O11964 +11965, O11965 +11966, O11966 +11967, O11967 +11968, O11968 +11969, O11969 +11970, O11970 +11971, O11971 +11972, O11972 +11973, O11973 +11974, O11974 +11975, O11975 +11976, O11976 +11977, O11977 +11978, O11978 +11979, O11979 +11980, O11980 +11981, O11981 +11982, O11982 +11983, O11983 +11984, O11984 +11985, O11985 +11986, O11986 +11987, O11987 +11988, O11988 +11989, O11989 +11990, O11990 +11991, O11991 +11992, O11992 +11993, O11993 +11994, O11994 +11995, O11995 +11996, O11996 +11997, O11997 +11998, O11998 +11999, O11999 +12000, O12000 +12001, O12001 +12002, O12002 +12003, O12003 +12004, O12004 +12005, O12005 +12006, O12006 +12007, O12007 +12008, O12008 +12009, O12009 +12010, O12010 +12011, O12011 +12012, O12012 +12013, O12013 +12014, O12014 +12015, O12015 +12016, O12016 +12017, O12017 +12018, O12018 +12019, O12019 +12020, O12020 +12021, O12021 +12022, O12022 +12023, O12023 +12024, O12024 +12025, O12025 +12026, O12026 +12027, O12027 +12028, O12028 +12029, O12029 +12030, O12030 +12031, O12031 +12032, O12032 +12033, O12033 +12034, O12034 +12035, O12035 +12036, O12036 +12037, O12037 +12038, O12038 +12039, O12039 +12040, O12040 +12041, O12041 +12042, O12042 +12043, O12043 +12044, O12044 +12045, O12045 +12046, O12046 +12047, O12047 +12048, O12048 +12049, O12049 +12050, O12050 +12051, O12051 +12052, O12052 +12053, O12053 +12054, O12054 +12055, O12055 +12056, O12056 +12057, O12057 +12058, O12058 +12059, O12059 +12060, O12060 +12061, O12061 +12062, O12062 +12063, O12063 +12064, O12064 +12065, O12065 +12066, O12066 +12067, O12067 +12068, O12068 +12069, O12069 +12070, O12070 +12071, O12071 +12072, O12072 +12073, O12073 +12074, O12074 +12075, O12075 +12076, O12076 +12077, O12077 +12078, O12078 +12079, O12079 +12080, O12080 +12081, O12081 +12082, O12082 +12083, O12083 +12084, O12084 +12085, O12085 +12086, O12086 +12087, O12087 +12088, O12088 +12089, O12089 +12090, O12090 +12091, O12091 +12092, O12092 +12093, O12093 +12094, O12094 +12095, O12095 +12096, O12096 +12097, O12097 +12098, O12098 +12099, O12099 +12100, O12100 +12101, O12101 +12102, O12102 +12103, O12103 +12104, O12104 +12105, O12105 +12106, O12106 +12107, O12107 +12108, O12108 +12109, O12109 +12110, O12110 +12111, O12111 +12112, O12112 +12113, O12113 +12114, O12114 +12115, O12115 +12116, O12116 +12117, O12117 +12118, O12118 +12119, O12119 +12120, O12120 +12121, O12121 +12122, O12122 +12123, O12123 +12124, O12124 +12125, O12125 +12126, O12126 +12127, O12127 +12128, O12128 +12129, O12129 +12130, O12130 +12131, O12131 +12132, O12132 +12133, O12133 +12134, O12134 +12135, O12135 +12136, O12136 +12137, O12137 +12138, O12138 +12139, O12139 +12140, O12140 +12141, O12141 +12142, O12142 +12143, O12143 +12144, O12144 +12145, O12145 +12146, O12146 +12147, O12147 +12148, O12148 +12149, O12149 +12150, O12150 +12151, O12151 +12152, O12152 +12153, O12153 +12154, O12154 +12155, O12155 +12156, O12156 +12157, O12157 +12158, O12158 +12159, O12159 +12160, O12160 +12161, O12161 +12162, O12162 +12163, O12163 +12164, O12164 +12165, O12165 +12166, O12166 +12167, O12167 +12168, O12168 +12169, O12169 +12170, O12170 +12171, O12171 +12172, O12172 +12173, O12173 +12174, O12174 +12175, O12175 +12176, O12176 +12177, O12177 +12178, O12178 +12179, O12179 +12180, O12180 +12181, O12181 +12182, O12182 +12183, O12183 +12184, O12184 +12185, O12185 +12186, O12186 +12187, O12187 +12188, O12188 +12189, O12189 +12190, O12190 +12191, O12191 +12192, O12192 +12193, O12193 +12194, O12194 +12195, O12195 +12196, O12196 +12197, O12197 +12198, O12198 +12199, O12199 +12200, O12200 +12201, O12201 +12202, O12202 +12203, O12203 +12204, O12204 +12205, O12205 +12206, O12206 +12207, O12207 +12208, O12208 +12209, O12209 +12210, O12210 +12211, O12211 +12212, O12212 +12213, O12213 +12214, O12214 +12215, O12215 +12216, O12216 +12217, O12217 +12218, O12218 +12219, O12219 +12220, O12220 +12221, O12221 +12222, O12222 +12223, O12223 +12224, O12224 +12225, O12225 +12226, O12226 +12227, O12227 +12228, O12228 +12229, O12229 +12230, O12230 +12231, O12231 +12232, O12232 +12233, O12233 +12234, O12234 +12235, O12235 +12236, O12236 +12237, O12237 +12238, O12238 +12239, O12239 +12240, O12240 +12241, O12241 +12242, O12242 +12243, O12243 +12244, O12244 +12245, O12245 +12246, O12246 +12247, O12247 +12248, O12248 +12249, O12249 +12250, O12250 +12251, O12251 +12252, O12252 +12253, O12253 +12254, O12254 +12255, O12255 +12256, O12256 +12257, O12257 +12258, O12258 +12259, O12259 +12260, O12260 +12261, O12261 +12262, O12262 +12263, O12263 +12264, O12264 +12265, O12265 +12266, O12266 +12267, O12267 +12268, O12268 +12269, O12269 +12270, O12270 +12271, O12271 +12272, O12272 +12273, O12273 +12274, O12274 +12275, O12275 +12276, O12276 +12277, O12277 +12278, O12278 +12279, O12279 +12280, O12280 +12281, O12281 +12282, O12282 +12283, O12283 +12284, O12284 +12285, O12285 +12286, O12286 +12287, O12287 +12288, O12288 +12289, O12289 +12290, O12290 +12291, O12291 +12292, O12292 +12293, O12293 +12294, O12294 +12295, O12295 +12296, O12296 +12297, O12297 +12298, O12298 +12299, O12299 +12300, O12300 +12301, O12301 +12302, O12302 +12303, O12303 +12304, O12304 +12305, O12305 +12306, O12306 +12307, O12307 +12308, O12308 +12309, O12309 +12310, O12310 +12311, O12311 +12312, O12312 +12313, O12313 +12314, O12314 +12315, O12315 +12316, O12316 +12317, O12317 +12318, O12318 +12319, O12319 +12320, O12320 +12321, O12321 +12322, O12322 +12323, O12323 +12324, O12324 +12325, O12325 +12326, O12326 +12327, O12327 +12328, O12328 +12329, O12329 +12330, O12330 +12331, O12331 +12332, O12332 +12333, O12333 +12334, O12334 +12335, O12335 +12336, O12336 +12337, O12337 +12338, O12338 +12339, O12339 +12340, O12340 +12341, O12341 +12342, O12342 +12343, O12343 +12344, O12344 +12345, O12345 +12346, O12346 +12347, O12347 +12348, O12348 +12349, O12349 +12350, O12350 +12351, O12351 +12352, O12352 +12353, O12353 +12354, O12354 +12355, O12355 +12356, O12356 +12357, O12357 +12358, O12358 +12359, O12359 +12360, O12360 +12361, O12361 +12362, O12362 +12363, O12363 +12364, O12364 +12365, O12365 +12366, O12366 +12367, O12367 +12368, O12368 +12369, O12369 +12370, O12370 +12371, O12371 +12372, O12372 +12373, O12373 +12374, O12374 +12375, O12375 +12376, O12376 +12377, O12377 +12378, O12378 +12379, O12379 +12380, O12380 +12381, O12381 +12382, O12382 +12383, O12383 +12384, O12384 +12385, O12385 +12386, O12386 +12387, O12387 +12388, O12388 +12389, O12389 +12390, O12390 +12391, O12391 +12392, O12392 +12393, O12393 +12394, O12394 +12395, O12395 +12396, O12396 +12397, O12397 +12398, O12398 +12399, O12399 +12400, O12400 +12401, O12401 +12402, O12402 +12403, O12403 +12404, O12404 +12405, O12405 +12406, O12406 +12407, O12407 +12408, O12408 +12409, O12409 +12410, O12410 +12411, O12411 +12412, O12412 +12413, O12413 +12414, O12414 +12415, O12415 +12416, O12416 +12417, O12417 +12418, O12418 +12419, O12419 +12420, O12420 +12421, O12421 +12422, O12422 +12423, O12423 +12424, O12424 +12425, O12425 +12426, O12426 +12427, O12427 +12428, O12428 +12429, O12429 +12430, O12430 +12431, O12431 +12432, O12432 +12433, O12433 +12434, O12434 +12435, O12435 +12436, O12436 +12437, O12437 +12438, O12438 +12439, O12439 +12440, O12440 +12441, O12441 +12442, O12442 +12443, O12443 +12444, O12444 +12445, O12445 +12446, O12446 +12447, O12447 +12448, O12448 +12449, O12449 +12450, O12450 +12451, O12451 +12452, O12452 +12453, O12453 +12454, O12454 +12455, O12455 +12456, O12456 +12457, O12457 +12458, O12458 +12459, O12459 +12460, O12460 +12461, O12461 +12462, O12462 +12463, O12463 +12464, O12464 +12465, O12465 +12466, O12466 +12467, O12467 +12468, O12468 +12469, O12469 +12470, O12470 +12471, O12471 +12472, O12472 +12473, O12473 +12474, O12474 +12475, O12475 +12476, O12476 +12477, O12477 +12478, O12478 +12479, O12479 +12480, O12480 +12481, O12481 +12482, O12482 +12483, O12483 +12484, O12484 +12485, O12485 +12486, O12486 +12487, O12487 +12488, O12488 +12489, O12489 +12490, O12490 +12491, O12491 +12492, O12492 +12493, O12493 +12494, O12494 +12495, O12495 +12496, O12496 +12497, O12497 +12498, O12498 +12499, O12499 +12500, O12500 +12501, O12501 +12502, O12502 +12503, O12503 +12504, O12504 +12505, O12505 +12506, O12506 +12507, O12507 +12508, O12508 +12509, O12509 +12510, O12510 +12511, O12511 +12512, O12512 +12513, O12513 +12514, O12514 +12515, O12515 +12516, O12516 +12517, O12517 +12518, O12518 +12519, O12519 +12520, O12520 +12521, O12521 +12522, O12522 +12523, O12523 +12524, O12524 +12525, O12525 +12526, O12526 +12527, O12527 +12528, O12528 +12529, O12529 +12530, O12530 +12531, O12531 +12532, O12532 +12533, O12533 +12534, O12534 +12535, O12535 +12536, O12536 +12537, O12537 +12538, O12538 +12539, O12539 +12540, O12540 +12541, O12541 +12542, O12542 +12543, O12543 +12544, O12544 +12545, O12545 +12546, O12546 +12547, O12547 +12548, O12548 +12549, O12549 +12550, O12550 +12551, O12551 +12552, O12552 +12553, O12553 +12554, O12554 +12555, O12555 +12556, O12556 +12557, O12557 +12558, O12558 +12559, O12559 +12560, O12560 +12561, O12561 +12562, O12562 +12563, O12563 +12564, O12564 +12565, O12565 +12566, O12566 +12567, O12567 +12568, O12568 +12569, O12569 +12570, O12570 +12571, O12571 +12572, O12572 +12573, O12573 +12574, O12574 +12575, O12575 +12576, O12576 +12577, O12577 +12578, O12578 +12579, O12579 +12580, O12580 +12581, O12581 +12582, O12582 +12583, O12583 +12584, O12584 +12585, O12585 +12586, O12586 +12587, O12587 +12588, O12588 +12589, O12589 +12590, O12590 +12591, O12591 +12592, O12592 +12593, O12593 +12594, O12594 +12595, O12595 +12596, O12596 +12597, O12597 +12598, O12598 +12599, O12599 +12600, O12600 +12601, O12601 +12602, O12602 +12603, O12603 +12604, O12604 +12605, O12605 +12606, O12606 +12607, O12607 +12608, O12608 +12609, O12609 +12610, O12610 +12611, O12611 +12612, O12612 +12613, O12613 +12614, O12614 +12615, O12615 +12616, O12616 +12617, O12617 +12618, O12618 +12619, O12619 +12620, O12620 +12621, O12621 +12622, O12622 +12623, O12623 +12624, O12624 +12625, O12625 +12626, O12626 +12627, O12627 +12628, O12628 +12629, O12629 +12630, O12630 +12631, O12631 +12632, O12632 +12633, O12633 +12634, O12634 +12635, O12635 +12636, O12636 +12637, O12637 +12638, O12638 +12639, O12639 +12640, O12640 +12641, O12641 +12642, O12642 +12643, O12643 +12644, O12644 +12645, O12645 +12646, O12646 +12647, O12647 +12648, O12648 +12649, O12649 +12650, O12650 +12651, O12651 +12652, O12652 +12653, O12653 +12654, O12654 +12655, O12655 +12656, O12656 +12657, O12657 +12658, O12658 +12659, O12659 +12660, O12660 +12661, O12661 +12662, O12662 +12663, O12663 +12664, O12664 +12665, O12665 +12666, O12666 +12667, O12667 +12668, O12668 +12669, O12669 +12670, O12670 +12671, O12671 +12672, O12672 +12673, O12673 +12674, O12674 +12675, O12675 +12676, O12676 +12677, O12677 +12678, O12678 +12679, O12679 +12680, O12680 +12681, O12681 +12682, O12682 +12683, O12683 +12684, O12684 +12685, O12685 +12686, O12686 +12687, O12687 +12688, O12688 +12689, O12689 +12690, O12690 +12691, O12691 +12692, O12692 +12693, O12693 +12694, O12694 +12695, O12695 +12696, O12696 +12697, O12697 +12698, O12698 +12699, O12699 +12700, O12700 +12701, O12701 +12702, O12702 +12703, O12703 +12704, O12704 +12705, O12705 +12706, O12706 +12707, O12707 +12708, O12708 +12709, O12709 +12710, O12710 +12711, O12711 +12712, O12712 +12713, O12713 +12714, O12714 +12715, O12715 +12716, O12716 +12717, O12717 +12718, O12718 +12719, O12719 +12720, O12720 +12721, O12721 +12722, O12722 +12723, O12723 +12724, O12724 +12725, O12725 +12726, O12726 +12727, O12727 +12728, O12728 +12729, O12729 +12730, O12730 +12731, O12731 +12732, O12732 +12733, O12733 +12734, O12734 +12735, O12735 +12736, O12736 +12737, O12737 +12738, O12738 +12739, O12739 +12740, O12740 +12741, O12741 +12742, O12742 +12743, O12743 +12744, O12744 +12745, O12745 +12746, O12746 +12747, O12747 +12748, O12748 +12749, O12749 +12750, O12750 +12751, O12751 +12752, O12752 +12753, O12753 +12754, O12754 +12755, O12755 +12756, O12756 +12757, O12757 +12758, O12758 +12759, O12759 +12760, O12760 +12761, O12761 +12762, O12762 +12763, O12763 +12764, O12764 +12765, O12765 +12766, O12766 +12767, O12767 +12768, O12768 +12769, O12769 +12770, O12770 +12771, O12771 +12772, O12772 +12773, O12773 +12774, O12774 +12775, O12775 +12776, O12776 +12777, O12777 +12778, O12778 +12779, O12779 +12780, O12780 +12781, O12781 +12782, O12782 +12783, O12783 +12784, O12784 +12785, O12785 +12786, O12786 +12787, O12787 +12788, O12788 +12789, O12789 +12790, O12790 +12791, O12791 +12792, O12792 +12793, O12793 +12794, O12794 +12795, O12795 +12796, O12796 +12797, O12797 +12798, O12798 +12799, O12799 +12800, O12800 +12801, O12801 +12802, O12802 +12803, O12803 +12804, O12804 +12805, O12805 +12806, O12806 +12807, O12807 +12808, O12808 +12809, O12809 +12810, O12810 +12811, O12811 +12812, O12812 +12813, O12813 +12814, O12814 +12815, O12815 +12816, O12816 +12817, O12817 +12818, O12818 +12819, O12819 +12820, O12820 +12821, O12821 +12822, O12822 +12823, O12823 +12824, O12824 +12825, O12825 +12826, O12826 +12827, O12827 +12828, O12828 +12829, O12829 +12830, O12830 +12831, O12831 +12832, O12832 +12833, O12833 +12834, O12834 +12835, O12835 +12836, O12836 +12837, O12837 +12838, O12838 +12839, O12839 +12840, O12840 +12841, O12841 +12842, O12842 +12843, O12843 +12844, O12844 +12845, O12845 +12846, O12846 +12847, O12847 +12848, O12848 +12849, O12849 +12850, O12850 +12851, O12851 +12852, O12852 +12853, O12853 +12854, O12854 +12855, O12855 +12856, O12856 +12857, O12857 +12858, O12858 +12859, O12859 +12860, O12860 +12861, O12861 +12862, O12862 +12863, O12863 +12864, O12864 +12865, O12865 +12866, O12866 +12867, O12867 +12868, O12868 +12869, O12869 +12870, O12870 +12871, O12871 +12872, O12872 +12873, O12873 +12874, O12874 +12875, O12875 +12876, O12876 +12877, O12877 +12878, O12878 +12879, O12879 +12880, O12880 +12881, O12881 +12882, O12882 +12883, O12883 +12884, O12884 +12885, O12885 +12886, O12886 +12887, O12887 +12888, O12888 +12889, O12889 +12890, O12890 +12891, O12891 +12892, O12892 +12893, O12893 +12894, O12894 +12895, O12895 +12896, O12896 +12897, O12897 +12898, O12898 +12899, O12899 +12900, O12900 +12901, O12901 +12902, O12902 +12903, O12903 +12904, O12904 +12905, O12905 +12906, O12906 +12907, O12907 +12908, O12908 +12909, O12909 +12910, O12910 +12911, O12911 +12912, O12912 +12913, O12913 +12914, O12914 +12915, O12915 +12916, O12916 +12917, O12917 +12918, O12918 +12919, O12919 +12920, O12920 +12921, O12921 +12922, O12922 +12923, O12923 +12924, O12924 +12925, O12925 +12926, O12926 +12927, O12927 +12928, O12928 +12929, O12929 +12930, O12930 +12931, O12931 +12932, O12932 +12933, O12933 +12934, O12934 +12935, O12935 +12936, O12936 +12937, O12937 +12938, O12938 +12939, O12939 +12940, O12940 +12941, O12941 +12942, O12942 +12943, O12943 +12944, O12944 +12945, O12945 +12946, O12946 +12947, O12947 +12948, O12948 +12949, O12949 +12950, O12950 +12951, O12951 +12952, O12952 +12953, O12953 +12954, O12954 +12955, O12955 +12956, O12956 +12957, O12957 +12958, O12958 +12959, O12959 +12960, O12960 +12961, O12961 +12962, O12962 +12963, O12963 +12964, O12964 +12965, O12965 +12966, O12966 +12967, O12967 +12968, O12968 +12969, O12969 +12970, O12970 +12971, O12971 +12972, O12972 +12973, O12973 +12974, O12974 +12975, O12975 +12976, O12976 +12977, O12977 +12978, O12978 +12979, O12979 +12980, O12980 +12981, O12981 +12982, O12982 +12983, O12983 +12984, O12984 +12985, O12985 +12986, O12986 +12987, O12987 +12988, O12988 +12989, O12989 +12990, O12990 +12991, O12991 +12992, O12992 +12993, O12993 +12994, O12994 +12995, O12995 +12996, O12996 +12997, O12997 +12998, O12998 +12999, O12999 +13000, O13000 +13001, O13001 +13002, O13002 +13003, O13003 +13004, O13004 +13005, O13005 +13006, O13006 +13007, O13007 +13008, O13008 +13009, O13009 +13010, O13010 +13011, O13011 +13012, O13012 +13013, O13013 +13014, O13014 +13015, O13015 +13016, O13016 +13017, O13017 +13018, O13018 +13019, O13019 +13020, O13020 +13021, O13021 +13022, O13022 +13023, O13023 +13024, O13024 +13025, O13025 +13026, O13026 +13027, O13027 +13028, O13028 +13029, O13029 +13030, O13030 +13031, O13031 +13032, O13032 +13033, O13033 +13034, O13034 +13035, O13035 +13036, O13036 +13037, O13037 +13038, O13038 +13039, O13039 +13040, O13040 +13041, O13041 +13042, O13042 +13043, O13043 +13044, O13044 +13045, O13045 +13046, O13046 +13047, O13047 +13048, O13048 +13049, O13049 +13050, O13050 +13051, O13051 +13052, O13052 +13053, O13053 +13054, O13054 +13055, O13055 +13056, O13056 +13057, O13057 +13058, O13058 +13059, O13059 +13060, O13060 +13061, O13061 +13062, O13062 +13063, O13063 +13064, O13064 +13065, O13065 +13066, O13066 +13067, O13067 +13068, O13068 +13069, O13069 +13070, O13070 +13071, O13071 +13072, O13072 +13073, O13073 +13074, O13074 +13075, O13075 +13076, O13076 +13077, O13077 +13078, O13078 +13079, O13079 +13080, O13080 +13081, O13081 +13082, O13082 +13083, O13083 +13084, O13084 +13085, O13085 +13086, O13086 +13087, O13087 +13088, O13088 +13089, O13089 +13090, O13090 +13091, O13091 +13092, O13092 +13093, O13093 +13094, O13094 +13095, O13095 +13096, O13096 +13097, O13097 +13098, O13098 +13099, O13099 +13100, O13100 +13101, O13101 +13102, O13102 +13103, O13103 +13104, O13104 +13105, O13105 +13106, O13106 +13107, O13107 +13108, O13108 +13109, O13109 +13110, O13110 +13111, O13111 +13112, O13112 +13113, O13113 +13114, O13114 +13115, O13115 +13116, O13116 +13117, O13117 +13118, O13118 +13119, O13119 +13120, O13120 +13121, O13121 +13122, O13122 +13123, O13123 +13124, O13124 +13125, O13125 +13126, O13126 +13127, O13127 +13128, O13128 +13129, O13129 +13130, O13130 +13131, O13131 +13132, O13132 +13133, O13133 +13134, O13134 +13135, O13135 +13136, O13136 +13137, O13137 +13138, O13138 +13139, O13139 +13140, O13140 +13141, O13141 +13142, O13142 +13143, O13143 +13144, O13144 +13145, O13145 +13146, O13146 +13147, O13147 +13148, O13148 +13149, O13149 +13150, O13150 +13151, O13151 +13152, O13152 +13153, O13153 +13154, O13154 +13155, O13155 +13156, O13156 +13157, O13157 +13158, O13158 +13159, O13159 +13160, O13160 +13161, O13161 +13162, O13162 +13163, O13163 +13164, O13164 +13165, O13165 +13166, O13166 +13167, O13167 +13168, O13168 +13169, O13169 +13170, O13170 +13171, O13171 +13172, O13172 +13173, O13173 +13174, O13174 +13175, O13175 +13176, O13176 +13177, O13177 +13178, O13178 +13179, O13179 +13180, O13180 +13181, O13181 +13182, O13182 +13183, O13183 +13184, O13184 +13185, O13185 +13186, O13186 +13187, O13187 +13188, O13188 +13189, O13189 +13190, O13190 +13191, O13191 +13192, O13192 +13193, O13193 +13194, O13194 +13195, O13195 +13196, O13196 +13197, O13197 +13198, O13198 +13199, O13199 +13200, O13200 +13201, O13201 +13202, O13202 +13203, O13203 +13204, O13204 +13205, O13205 +13206, O13206 +13207, O13207 +13208, O13208 +13209, O13209 +13210, O13210 +13211, O13211 +13212, O13212 +13213, O13213 +13214, O13214 +13215, O13215 +13216, O13216 +13217, O13217 +13218, O13218 +13219, O13219 +13220, O13220 +13221, O13221 +13222, O13222 +13223, O13223 +13224, O13224 +13225, O13225 +13226, O13226 +13227, O13227 +13228, O13228 +13229, O13229 +13230, O13230 +13231, O13231 +13232, O13232 +13233, O13233 +13234, O13234 +13235, O13235 +13236, O13236 +13237, O13237 +13238, O13238 +13239, O13239 +13240, O13240 +13241, O13241 +13242, O13242 +13243, O13243 +13244, O13244 +13245, O13245 +13246, O13246 +13247, O13247 +13248, O13248 +13249, O13249 +13250, O13250 +13251, O13251 +13252, O13252 +13253, O13253 +13254, O13254 +13255, O13255 +13256, O13256 +13257, O13257 +13258, O13258 +13259, O13259 +13260, O13260 +13261, O13261 +13262, O13262 +13263, O13263 +13264, O13264 +13265, O13265 +13266, O13266 +13267, O13267 +13268, O13268 +13269, O13269 +13270, O13270 +13271, O13271 +13272, O13272 +13273, O13273 +13274, O13274 +13275, O13275 +13276, O13276 +13277, O13277 +13278, O13278 +13279, O13279 +13280, O13280 +13281, O13281 +13282, O13282 +13283, O13283 +13284, O13284 +13285, O13285 +13286, O13286 +13287, O13287 +13288, O13288 +13289, O13289 +13290, O13290 +13291, O13291 +13292, O13292 +13293, O13293 +13294, O13294 +13295, O13295 +13296, O13296 +13297, O13297 +13298, O13298 +13299, O13299 +13300, O13300 +13301, O13301 +13302, O13302 +13303, O13303 +13304, O13304 +13305, O13305 +13306, O13306 +13307, O13307 +13308, O13308 +13309, O13309 +13310, O13310 +13311, O13311 +13312, O13312 +13313, O13313 +13314, O13314 +13315, O13315 +13316, O13316 +13317, O13317 +13318, O13318 +13319, O13319 +13320, O13320 +13321, O13321 +13322, O13322 +13323, O13323 +13324, O13324 +13325, O13325 +13326, O13326 +13327, O13327 +13328, O13328 +13329, O13329 +13330, O13330 +13331, O13331 +13332, O13332 +13333, O13333 +13334, O13334 +13335, O13335 +13336, O13336 +13337, O13337 +13338, O13338 +13339, O13339 +13340, O13340 +13341, O13341 +13342, O13342 +13343, O13343 +13344, O13344 +13345, O13345 +13346, O13346 +13347, O13347 +13348, O13348 +13349, O13349 +13350, O13350 +13351, O13351 +13352, O13352 +13353, O13353 +13354, O13354 +13355, O13355 +13356, O13356 +13357, O13357 +13358, O13358 +13359, O13359 +13360, O13360 +13361, O13361 +13362, O13362 +13363, O13363 +13364, O13364 +13365, O13365 +13366, O13366 +13367, O13367 +13368, O13368 +13369, O13369 +13370, O13370 +13371, O13371 +13372, O13372 +13373, O13373 +13374, O13374 +13375, O13375 +13376, O13376 +13377, O13377 +13378, O13378 +13379, O13379 +13380, O13380 +13381, O13381 +13382, O13382 +13383, O13383 +13384, O13384 +13385, O13385 +13386, O13386 +13387, O13387 +13388, O13388 +13389, O13389 +13390, O13390 +13391, O13391 +13392, O13392 +13393, O13393 +13394, O13394 +13395, O13395 +13396, O13396 +13397, O13397 +13398, O13398 +13399, O13399 +13400, O13400 +13401, O13401 +13402, O13402 +13403, O13403 +13404, O13404 +13405, O13405 +13406, O13406 +13407, O13407 +13408, O13408 +13409, O13409 +13410, O13410 +13411, O13411 +13412, O13412 +13413, O13413 +13414, O13414 +13415, O13415 +13416, O13416 +13417, O13417 +13418, O13418 +13419, O13419 +13420, O13420 +13421, O13421 +13422, O13422 +13423, O13423 +13424, O13424 +13425, O13425 +13426, O13426 +13427, O13427 +13428, O13428 +13429, O13429 +13430, O13430 +13431, O13431 +13432, O13432 +13433, O13433 +13434, O13434 +13435, O13435 +13436, O13436 +13437, O13437 +13438, O13438 +13439, O13439 +13440, O13440 +13441, O13441 +13442, O13442 +13443, O13443 +13444, O13444 +13445, O13445 +13446, O13446 +13447, O13447 +13448, O13448 +13449, O13449 +13450, O13450 +13451, O13451 +13452, O13452 +13453, O13453 +13454, O13454 +13455, O13455 +13456, O13456 +13457, O13457 +13458, O13458 +13459, O13459 +13460, O13460 +13461, O13461 +13462, O13462 +13463, O13463 +13464, O13464 +13465, O13465 +13466, O13466 +13467, O13467 +13468, O13468 +13469, O13469 +13470, O13470 +13471, O13471 +13472, O13472 +13473, O13473 +13474, O13474 +13475, O13475 +13476, O13476 +13477, O13477 +13478, O13478 +13479, O13479 +13480, O13480 +13481, O13481 +13482, O13482 +13483, O13483 +13484, O13484 +13485, O13485 +13486, O13486 +13487, O13487 +13488, O13488 +13489, O13489 +13490, O13490 +13491, O13491 +13492, O13492 +13493, O13493 +13494, O13494 +13495, O13495 +13496, O13496 +13497, O13497 +13498, O13498 +13499, O13499 +13500, O13500 +13501, O13501 +13502, O13502 +13503, O13503 +13504, O13504 +13505, O13505 +13506, O13506 +13507, O13507 +13508, O13508 +13509, O13509 +13510, O13510 +13511, O13511 +13512, O13512 +13513, O13513 +13514, O13514 +13515, O13515 +13516, O13516 +13517, O13517 +13518, O13518 +13519, O13519 +13520, O13520 +13521, O13521 +13522, O13522 +13523, O13523 +13524, O13524 +13525, O13525 +13526, O13526 +13527, O13527 +13528, O13528 +13529, O13529 +13530, O13530 +13531, O13531 +13532, O13532 +13533, O13533 +13534, O13534 +13535, O13535 +13536, O13536 +13537, O13537 +13538, O13538 +13539, O13539 +13540, O13540 +13541, O13541 +13542, O13542 +13543, O13543 +13544, O13544 +13545, O13545 +13546, O13546 +13547, O13547 +13548, O13548 +13549, O13549 +13550, O13550 +13551, O13551 +13552, O13552 +13553, O13553 +13554, O13554 +13555, O13555 +13556, O13556 +13557, O13557 +13558, O13558 +13559, O13559 +13560, O13560 +13561, O13561 +13562, O13562 +13563, O13563 +13564, O13564 +13565, O13565 +13566, O13566 +13567, O13567 +13568, O13568 +13569, O13569 +13570, O13570 +13571, O13571 +13572, O13572 +13573, O13573 +13574, O13574 +13575, O13575 +13576, O13576 +13577, O13577 +13578, O13578 +13579, O13579 +13580, O13580 +13581, O13581 +13582, O13582 +13583, O13583 +13584, O13584 +13585, O13585 +13586, O13586 +13587, O13587 +13588, O13588 +13589, O13589 +13590, O13590 +13591, O13591 +13592, O13592 +13593, O13593 +13594, O13594 +13595, O13595 +13596, O13596 +13597, O13597 +13598, O13598 +13599, O13599 +13600, O13600 +13601, O13601 +13602, O13602 +13603, O13603 +13604, O13604 +13605, O13605 +13606, O13606 +13607, O13607 +13608, O13608 +13609, O13609 +13610, O13610 +13611, O13611 +13612, O13612 +13613, O13613 +13614, O13614 +13615, O13615 +13616, O13616 +13617, O13617 +13618, O13618 +13619, O13619 +13620, O13620 +13621, O13621 +13622, O13622 +13623, O13623 +13624, O13624 +13625, O13625 +13626, O13626 +13627, O13627 +13628, O13628 +13629, O13629 +13630, O13630 +13631, O13631 +13632, O13632 +13633, O13633 +13634, O13634 +13635, O13635 +13636, O13636 +13637, O13637 +13638, O13638 +13639, O13639 +13640, O13640 +13641, O13641 +13642, O13642 +13643, O13643 +13644, O13644 +13645, O13645 +13646, O13646 +13647, O13647 +13648, O13648 +13649, O13649 +13650, O13650 +13651, O13651 +13652, O13652 +13653, O13653 +13654, O13654 +13655, O13655 +13656, O13656 +13657, O13657 +13658, O13658 +13659, O13659 +13660, O13660 +13661, O13661 +13662, O13662 +13663, O13663 +13664, O13664 +13665, O13665 +13666, O13666 +13667, O13667 +13668, O13668 +13669, O13669 +13670, O13670 +13671, O13671 +13672, O13672 +13673, O13673 +13674, O13674 +13675, O13675 +13676, O13676 +13677, O13677 +13678, O13678 +13679, O13679 +13680, O13680 +13681, O13681 +13682, O13682 +13683, O13683 +13684, O13684 +13685, O13685 +13686, O13686 +13687, O13687 +13688, O13688 +13689, O13689 +13690, O13690 +13691, O13691 +13692, O13692 +13693, O13693 +13694, O13694 +13695, O13695 +13696, O13696 +13697, O13697 +13698, O13698 +13699, O13699 +13700, O13700 +13701, O13701 +13702, O13702 +13703, O13703 +13704, O13704 +13705, O13705 +13706, O13706 +13707, O13707 +13708, O13708 +13709, O13709 +13710, O13710 +13711, O13711 +13712, O13712 +13713, O13713 +13714, O13714 +13715, O13715 +13716, O13716 +13717, O13717 +13718, O13718 +13719, O13719 +13720, O13720 +13721, O13721 +13722, O13722 +13723, O13723 +13724, O13724 +13725, O13725 +13726, O13726 +13727, O13727 +13728, O13728 +13729, O13729 +13730, O13730 +13731, O13731 +13732, O13732 +13733, O13733 +13734, O13734 +13735, O13735 +13736, O13736 +13737, O13737 +13738, O13738 +13739, O13739 +13740, O13740 +13741, O13741 +13742, O13742 +13743, O13743 +13744, O13744 +13745, O13745 +13746, O13746 +13747, O13747 +13748, O13748 +13749, O13749 +13750, O13750 +13751, O13751 +13752, O13752 +13753, O13753 +13754, O13754 +13755, O13755 +13756, O13756 +13757, O13757 +13758, O13758 +13759, O13759 +13760, O13760 +13761, O13761 +13762, O13762 +13763, O13763 +13764, O13764 +13765, O13765 +13766, O13766 +13767, O13767 +13768, O13768 +13769, O13769 +13770, O13770 +13771, O13771 +13772, O13772 +13773, O13773 +13774, O13774 +13775, O13775 +13776, O13776 +13777, O13777 +13778, O13778 +13779, O13779 +13780, O13780 +13781, O13781 +13782, O13782 +13783, O13783 +13784, O13784 +13785, O13785 +13786, O13786 +13787, O13787 +13788, O13788 +13789, O13789 +13790, O13790 +13791, O13791 +13792, O13792 +13793, O13793 +13794, O13794 +13795, O13795 +13796, O13796 +13797, O13797 +13798, O13798 +13799, O13799 +13800, O13800 +13801, O13801 +13802, O13802 +13803, O13803 +13804, O13804 +13805, O13805 +13806, O13806 +13807, O13807 +13808, O13808 +13809, O13809 +13810, O13810 +13811, O13811 +13812, O13812 +13813, O13813 +13814, O13814 +13815, O13815 +13816, O13816 +13817, O13817 +13818, O13818 +13819, O13819 +13820, O13820 +13821, O13821 +13822, O13822 +13823, O13823 +13824, O13824 +13825, O13825 +13826, O13826 +13827, O13827 +13828, O13828 +13829, O13829 +13830, O13830 +13831, O13831 +13832, O13832 +13833, O13833 +13834, O13834 +13835, O13835 +13836, O13836 +13837, O13837 +13838, O13838 +13839, O13839 +13840, O13840 +13841, O13841 +13842, O13842 +13843, O13843 +13844, O13844 +13845, O13845 +13846, O13846 +13847, O13847 +13848, O13848 +13849, O13849 +13850, O13850 +13851, O13851 +13852, O13852 +13853, O13853 +13854, O13854 +13855, O13855 +13856, O13856 +13857, O13857 +13858, O13858 +13859, O13859 +13860, O13860 +13861, O13861 +13862, O13862 +13863, O13863 +13864, O13864 +13865, O13865 +13866, O13866 +13867, O13867 +13868, O13868 +13869, O13869 +13870, O13870 +13871, O13871 +13872, O13872 +13873, O13873 +13874, O13874 +13875, O13875 +13876, O13876 +13877, O13877 +13878, O13878 +13879, O13879 +13880, O13880 +13881, O13881 +13882, O13882 +13883, O13883 +13884, O13884 +13885, O13885 +13886, O13886 +13887, O13887 +13888, O13888 +13889, O13889 +13890, O13890 +13891, O13891 +13892, O13892 +13893, O13893 +13894, O13894 +13895, O13895 +13896, O13896 +13897, O13897 +13898, O13898 +13899, O13899 +13900, O13900 +13901, O13901 +13902, O13902 +13903, O13903 +13904, O13904 +13905, O13905 +13906, O13906 +13907, O13907 +13908, O13908 +13909, O13909 +13910, O13910 +13911, O13911 +13912, O13912 +13913, O13913 +13914, O13914 +13915, O13915 +13916, O13916 +13917, O13917 +13918, O13918 +13919, O13919 +13920, O13920 +13921, O13921 +13922, O13922 +13923, O13923 +13924, O13924 +13925, O13925 +13926, O13926 +13927, O13927 +13928, O13928 +13929, O13929 +13930, O13930 +13931, O13931 +13932, O13932 +13933, O13933 +13934, O13934 +13935, O13935 +13936, O13936 +13937, O13937 +13938, O13938 +13939, O13939 +13940, O13940 +13941, O13941 +13942, O13942 +13943, O13943 +13944, O13944 +13945, O13945 +13946, O13946 +13947, O13947 +13948, O13948 +13949, O13949 +13950, O13950 +13951, O13951 +13952, O13952 +13953, O13953 +13954, O13954 +13955, O13955 +13956, O13956 +13957, O13957 +13958, O13958 +13959, O13959 +13960, O13960 +13961, O13961 +13962, O13962 +13963, O13963 +13964, O13964 +13965, O13965 +13966, O13966 +13967, O13967 +13968, O13968 +13969, O13969 +13970, O13970 +13971, O13971 +13972, O13972 +13973, O13973 +13974, O13974 +13975, O13975 +13976, O13976 +13977, O13977 +13978, O13978 +13979, O13979 +13980, O13980 +13981, O13981 +13982, O13982 +13983, O13983 +13984, O13984 +13985, O13985 +13986, O13986 +13987, O13987 +13988, O13988 +13989, O13989 +13990, O13990 +13991, O13991 +13992, O13992 +13993, O13993 +13994, O13994 +13995, O13995 +13996, O13996 +13997, O13997 +13998, O13998 +13999, O13999 +14000, O14000 +14001, O14001 +14002, O14002 +14003, O14003 +14004, O14004 +14005, O14005 +14006, O14006 +14007, O14007 +14008, O14008 +14009, O14009 +14010, O14010 +14011, O14011 +14012, O14012 +14013, O14013 +14014, O14014 +14015, O14015 +14016, O14016 +14017, O14017 +14018, O14018 +14019, O14019 +14020, O14020 +14021, O14021 +14022, O14022 +14023, O14023 +14024, O14024 +14025, O14025 +14026, O14026 +14027, O14027 +14028, O14028 +14029, O14029 +14030, O14030 +14031, O14031 +14032, O14032 +14033, O14033 +14034, O14034 +14035, O14035 +14036, O14036 +14037, O14037 +14038, O14038 +14039, O14039 +14040, O14040 +14041, O14041 +14042, O14042 +14043, O14043 +14044, O14044 +14045, O14045 +14046, O14046 +14047, O14047 +14048, O14048 +14049, O14049 +14050, O14050 +14051, O14051 +14052, O14052 +14053, O14053 +14054, O14054 +14055, O14055 +14056, O14056 +14057, O14057 +14058, O14058 +14059, O14059 +14060, O14060 +14061, O14061 +14062, O14062 +14063, O14063 +14064, O14064 +14065, O14065 +14066, O14066 +14067, O14067 +14068, O14068 +14069, O14069 +14070, O14070 +14071, O14071 +14072, O14072 +14073, O14073 +14074, O14074 +14075, O14075 +14076, O14076 +14077, O14077 +14078, O14078 +14079, O14079 +14080, O14080 +14081, O14081 +14082, O14082 +14083, O14083 +14084, O14084 +14085, O14085 +14086, O14086 +14087, O14087 +14088, O14088 +14089, O14089 +14090, O14090 +14091, O14091 +14092, O14092 +14093, O14093 +14094, O14094 +14095, O14095 +14096, O14096 +14097, O14097 +14098, O14098 +14099, O14099 +14100, O14100 +14101, O14101 +14102, O14102 +14103, O14103 +14104, O14104 +14105, O14105 +14106, O14106 +14107, O14107 +14108, O14108 +14109, O14109 +14110, O14110 +14111, O14111 +14112, O14112 +14113, O14113 +14114, O14114 +14115, O14115 +14116, O14116 +14117, O14117 +14118, O14118 +14119, O14119 +14120, O14120 +14121, O14121 +14122, O14122 +14123, O14123 +14124, O14124 +14125, O14125 +14126, O14126 +14127, O14127 +14128, O14128 +14129, O14129 +14130, O14130 +14131, O14131 +14132, O14132 +14133, O14133 +14134, O14134 +14135, O14135 +14136, O14136 +14137, O14137 +14138, O14138 +14139, O14139 +14140, O14140 +14141, O14141 +14142, O14142 +14143, O14143 +14144, O14144 +14145, O14145 +14146, O14146 +14147, O14147 +14148, O14148 +14149, O14149 +14150, O14150 +14151, O14151 +14152, O14152 +14153, O14153 +14154, O14154 +14155, O14155 +14156, O14156 +14157, O14157 +14158, O14158 +14159, O14159 +14160, O14160 +14161, O14161 +14162, O14162 +14163, O14163 +14164, O14164 +14165, O14165 +14166, O14166 +14167, O14167 +14168, O14168 +14169, O14169 +14170, O14170 +14171, O14171 +14172, O14172 +14173, O14173 +14174, O14174 +14175, O14175 +14176, O14176 +14177, O14177 +14178, O14178 +14179, O14179 +14180, O14180 +14181, O14181 +14182, O14182 +14183, O14183 +14184, O14184 +14185, O14185 +14186, O14186 +14187, O14187 +14188, O14188 +14189, O14189 +14190, O14190 +14191, O14191 +14192, O14192 +14193, O14193 +14194, O14194 +14195, O14195 +14196, O14196 +14197, O14197 +14198, O14198 +14199, O14199 +14200, O14200 +14201, O14201 +14202, O14202 +14203, O14203 +14204, O14204 +14205, O14205 +14206, O14206 +14207, O14207 +14208, O14208 +14209, O14209 +14210, O14210 +14211, O14211 +14212, O14212 +14213, O14213 +14214, O14214 +14215, O14215 +14216, O14216 +14217, O14217 +14218, O14218 +14219, O14219 +14220, O14220 +14221, O14221 +14222, O14222 +14223, O14223 +14224, O14224 +14225, O14225 +14226, O14226 +14227, O14227 +14228, O14228 +14229, O14229 +14230, O14230 +14231, O14231 +14232, O14232 +14233, O14233 +14234, O14234 +14235, O14235 +14236, O14236 +14237, O14237 +14238, O14238 +14239, O14239 +14240, O14240 +14241, O14241 +14242, O14242 +14243, O14243 +14244, O14244 +14245, O14245 +14246, O14246 +14247, O14247 +14248, O14248 +14249, O14249 +14250, O14250 +14251, O14251 +14252, O14252 +14253, O14253 +14254, O14254 +14255, O14255 +14256, O14256 +14257, O14257 +14258, O14258 +14259, O14259 +14260, O14260 +14261, O14261 +14262, O14262 +14263, O14263 +14264, O14264 +14265, O14265 +14266, O14266 +14267, O14267 +14268, O14268 +14269, O14269 +14270, O14270 +14271, O14271 +14272, O14272 +14273, O14273 +14274, O14274 +14275, O14275 +14276, O14276 +14277, O14277 +14278, O14278 +14279, O14279 +14280, O14280 +14281, O14281 +14282, O14282 +14283, O14283 +14284, O14284 +14285, O14285 +14286, O14286 +14287, O14287 +14288, O14288 +14289, O14289 +14290, O14290 +14291, O14291 +14292, O14292 +14293, O14293 +14294, O14294 +14295, O14295 +14296, O14296 +14297, O14297 +14298, O14298 +14299, O14299 +14300, O14300 +14301, O14301 +14302, O14302 +14303, O14303 +14304, O14304 +14305, O14305 +14306, O14306 +14307, O14307 +14308, O14308 +14309, O14309 +14310, O14310 +14311, O14311 +14312, O14312 +14313, O14313 +14314, O14314 +14315, O14315 +14316, O14316 +14317, O14317 +14318, O14318 +14319, O14319 +14320, O14320 +14321, O14321 +14322, O14322 +14323, O14323 +14324, O14324 +14325, O14325 +14326, O14326 +14327, O14327 +14328, O14328 +14329, O14329 +14330, O14330 +14331, O14331 +14332, O14332 +14333, O14333 +14334, O14334 +14335, O14335 +14336, O14336 +14337, O14337 +14338, O14338 +14339, O14339 +14340, O14340 +14341, O14341 +14342, O14342 +14343, O14343 +14344, O14344 +14345, O14345 +14346, O14346 +14347, O14347 +14348, O14348 +14349, O14349 +14350, O14350 +14351, O14351 +14352, O14352 +14353, O14353 +14354, O14354 +14355, O14355 +14356, O14356 +14357, O14357 +14358, O14358 +14359, O14359 +14360, O14360 +14361, O14361 +14362, O14362 +14363, O14363 +14364, O14364 +14365, O14365 +14366, O14366 +14367, O14367 +14368, O14368 +14369, O14369 +14370, O14370 +14371, O14371 +14372, O14372 +14373, O14373 +14374, O14374 +14375, O14375 +14376, O14376 +14377, O14377 +14378, O14378 +14379, O14379 +14380, O14380 +14381, O14381 +14382, O14382 +14383, O14383 +14384, O14384 +14385, O14385 +14386, O14386 +14387, O14387 +14388, O14388 +14389, O14389 +14390, O14390 +14391, O14391 +14392, O14392 +14393, O14393 +14394, O14394 +14395, O14395 +14396, O14396 +14397, O14397 +14398, O14398 +14399, O14399 +14400, O14400 +14401, O14401 +14402, O14402 +14403, O14403 +14404, O14404 +14405, O14405 +14406, O14406 +14407, O14407 +14408, O14408 +14409, O14409 +14410, O14410 +14411, O14411 +14412, O14412 +14413, O14413 +14414, O14414 +14415, O14415 +14416, O14416 +14417, O14417 +14418, O14418 +14419, O14419 +14420, O14420 +14421, O14421 +14422, O14422 +14423, O14423 +14424, O14424 +14425, O14425 +14426, O14426 +14427, O14427 +14428, O14428 +14429, O14429 +14430, O14430 +14431, O14431 +14432, O14432 +14433, O14433 +14434, O14434 +14435, O14435 +14436, O14436 +14437, O14437 +14438, O14438 +14439, O14439 +14440, O14440 +14441, O14441 +14442, O14442 +14443, O14443 +14444, O14444 +14445, O14445 +14446, O14446 +14447, O14447 +14448, O14448 +14449, O14449 +14450, O14450 +14451, O14451 +14452, O14452 +14453, O14453 +14454, O14454 +14455, O14455 +14456, O14456 +14457, O14457 +14458, O14458 +14459, O14459 +14460, O14460 +14461, O14461 +14462, O14462 +14463, O14463 +14464, O14464 +14465, O14465 +14466, O14466 +14467, O14467 +14468, O14468 +14469, O14469 +14470, O14470 +14471, O14471 +14472, O14472 +14473, O14473 +14474, O14474 +14475, O14475 +14476, O14476 +14477, O14477 +14478, O14478 +14479, O14479 +14480, O14480 +14481, O14481 +14482, O14482 +14483, O14483 +14484, O14484 +14485, O14485 +14486, O14486 +14487, O14487 +14488, O14488 +14489, O14489 +14490, O14490 +14491, O14491 +14492, O14492 +14493, O14493 +14494, O14494 +14495, O14495 +14496, O14496 +14497, O14497 +14498, O14498 +14499, O14499 +14500, O14500 +14501, O14501 +14502, O14502 +14503, O14503 +14504, O14504 +14505, O14505 +14506, O14506 +14507, O14507 +14508, O14508 +14509, O14509 +14510, O14510 +14511, O14511 +14512, O14512 +14513, O14513 +14514, O14514 +14515, O14515 +14516, O14516 +14517, O14517 +14518, O14518 +14519, O14519 +14520, O14520 +14521, O14521 +14522, O14522 +14523, O14523 +14524, O14524 +14525, O14525 +14526, O14526 +14527, O14527 +14528, O14528 +14529, O14529 +14530, O14530 +14531, O14531 +14532, O14532 +14533, O14533 +14534, O14534 +14535, O14535 +14536, O14536 +14537, O14537 +14538, O14538 +14539, O14539 +14540, O14540 +14541, O14541 +14542, O14542 +14543, O14543 +14544, O14544 +14545, O14545 +14546, O14546 +14547, O14547 +14548, O14548 +14549, O14549 +14550, O14550 +14551, O14551 +14552, O14552 +14553, O14553 +14554, O14554 +14555, O14555 +14556, O14556 +14557, O14557 +14558, O14558 +14559, O14559 +14560, O14560 +14561, O14561 +14562, O14562 +14563, O14563 +14564, O14564 +14565, O14565 +14566, O14566 +14567, O14567 +14568, O14568 +14569, O14569 +14570, O14570 +14571, O14571 +14572, O14572 +14573, O14573 +14574, O14574 +14575, O14575 +14576, O14576 +14577, O14577 +14578, O14578 +14579, O14579 +14580, O14580 +14581, O14581 +14582, O14582 +14583, O14583 +14584, O14584 +14585, O14585 +14586, O14586 +14587, O14587 +14588, O14588 +14589, O14589 +14590, O14590 +14591, O14591 +14592, O14592 +14593, O14593 +14594, O14594 +14595, O14595 +14596, O14596 +14597, O14597 +14598, O14598 +14599, O14599 +14600, O14600 +14601, O14601 +14602, O14602 +14603, O14603 +14604, O14604 +14605, O14605 +14606, O14606 +14607, O14607 +14608, O14608 +14609, O14609 +14610, O14610 +14611, O14611 +14612, O14612 +14613, O14613 +14614, O14614 +14615, O14615 +14616, O14616 +14617, O14617 +14618, O14618 +14619, O14619 +14620, O14620 +14621, O14621 +14622, O14622 +14623, O14623 +14624, O14624 +14625, O14625 +14626, O14626 +14627, O14627 +14628, O14628 +14629, O14629 +14630, O14630 +14631, O14631 +14632, O14632 +14633, O14633 +14634, O14634 +14635, O14635 +14636, O14636 +14637, O14637 +14638, O14638 +14639, O14639 +14640, O14640 +14641, O14641 +14642, O14642 +14643, O14643 +14644, O14644 +14645, O14645 +14646, O14646 +14647, O14647 +14648, O14648 +14649, O14649 +14650, O14650 +14651, O14651 +14652, O14652 +14653, O14653 +14654, O14654 +14655, O14655 +14656, O14656 +14657, O14657 +14658, O14658 +14659, O14659 +14660, O14660 +14661, O14661 +14662, O14662 +14663, O14663 +14664, O14664 +14665, O14665 +14666, O14666 +14667, O14667 +14668, O14668 +14669, O14669 +14670, O14670 +14671, O14671 +14672, O14672 +14673, O14673 +14674, O14674 +14675, O14675 +14676, O14676 +14677, O14677 +14678, O14678 +14679, O14679 +14680, O14680 +14681, O14681 +14682, O14682 +14683, O14683 +14684, O14684 +14685, O14685 +14686, O14686 +14687, O14687 +14688, O14688 +14689, O14689 +14690, O14690 +14691, O14691 +14692, O14692 +14693, O14693 +14694, O14694 +14695, O14695 +14696, O14696 +14697, O14697 +14698, O14698 +14699, O14699 +14700, O14700 +14701, O14701 +14702, O14702 +14703, O14703 +14704, O14704 +14705, O14705 +14706, O14706 +14707, O14707 +14708, O14708 +14709, O14709 +14710, O14710 +14711, O14711 +14712, O14712 +14713, O14713 +14714, O14714 +14715, O14715 +14716, O14716 +14717, O14717 +14718, O14718 +14719, O14719 +14720, O14720 +14721, O14721 +14722, O14722 +14723, O14723 +14724, O14724 +14725, O14725 +14726, O14726 +14727, O14727 +14728, O14728 +14729, O14729 +14730, O14730 +14731, O14731 +14732, O14732 +14733, O14733 +14734, O14734 +14735, O14735 +14736, O14736 +14737, O14737 +14738, O14738 +14739, O14739 +14740, O14740 +14741, O14741 +14742, O14742 +14743, O14743 +14744, O14744 +14745, O14745 +14746, O14746 +14747, O14747 +14748, O14748 +14749, O14749 +14750, O14750 +14751, O14751 +14752, O14752 +14753, O14753 +14754, O14754 +14755, O14755 +14756, O14756 +14757, O14757 +14758, O14758 +14759, O14759 +14760, O14760 +14761, O14761 +14762, O14762 +14763, O14763 +14764, O14764 +14765, O14765 +14766, O14766 +14767, O14767 +14768, O14768 +14769, O14769 +14770, O14770 +14771, O14771 +14772, O14772 +14773, O14773 +14774, O14774 +14775, O14775 +14776, O14776 +14777, O14777 +14778, O14778 +14779, O14779 +14780, O14780 +14781, O14781 +14782, O14782 +14783, O14783 +14784, O14784 +14785, O14785 +14786, O14786 +14787, O14787 +14788, O14788 +14789, O14789 +14790, O14790 +14791, O14791 +14792, O14792 +14793, O14793 +14794, O14794 +14795, O14795 +14796, O14796 +14797, O14797 +14798, O14798 +14799, O14799 +14800, O14800 +14801, O14801 +14802, O14802 +14803, O14803 +14804, O14804 +14805, O14805 +14806, O14806 +14807, O14807 +14808, O14808 +14809, O14809 +14810, O14810 +14811, O14811 +14812, O14812 +14813, O14813 +14814, O14814 +14815, O14815 +14816, O14816 +14817, O14817 +14818, O14818 +14819, O14819 +14820, O14820 +14821, O14821 +14822, O14822 +14823, O14823 +14824, O14824 +14825, O14825 +14826, O14826 +14827, O14827 +14828, O14828 +14829, O14829 +14830, O14830 +14831, O14831 +14832, O14832 +14833, O14833 +14834, O14834 +14835, O14835 +14836, O14836 +14837, O14837 +14838, O14838 +14839, O14839 +14840, O14840 +14841, O14841 +14842, O14842 +14843, O14843 +14844, O14844 +14845, O14845 +14846, O14846 +14847, O14847 +14848, O14848 +14849, O14849 +14850, O14850 +14851, O14851 +14852, O14852 +14853, O14853 +14854, O14854 +14855, O14855 +14856, O14856 +14857, O14857 +14858, O14858 +14859, O14859 +14860, O14860 +14861, O14861 +14862, O14862 +14863, O14863 +14864, O14864 +14865, O14865 +14866, O14866 +14867, O14867 +14868, O14868 +14869, O14869 +14870, O14870 +14871, O14871 +14872, O14872 +14873, O14873 +14874, O14874 +14875, O14875 +14876, O14876 +14877, O14877 +14878, O14878 +14879, O14879 +14880, O14880 +14881, O14881 +14882, O14882 +14883, O14883 +14884, O14884 +14885, O14885 +14886, O14886 +14887, O14887 +14888, O14888 +14889, O14889 +14890, O14890 +14891, O14891 +14892, O14892 +14893, O14893 +14894, O14894 +14895, O14895 +14896, O14896 +14897, O14897 +14898, O14898 +14899, O14899 +14900, O14900 +14901, O14901 +14902, O14902 +14903, O14903 +14904, O14904 +14905, O14905 +14906, O14906 +14907, O14907 +14908, O14908 +14909, O14909 +14910, O14910 +14911, O14911 +14912, O14912 +14913, O14913 +14914, O14914 +14915, O14915 +14916, O14916 +14917, O14917 +14918, O14918 +14919, O14919 +14920, O14920 +14921, O14921 +14922, O14922 +14923, O14923 +14924, O14924 +14925, O14925 +14926, O14926 +14927, O14927 +14928, O14928 +14929, O14929 +14930, O14930 +14931, O14931 +14932, O14932 +14933, O14933 +14934, O14934 +14935, O14935 +14936, O14936 +14937, O14937 +14938, O14938 +14939, O14939 +14940, O14940 +14941, O14941 +14942, O14942 +14943, O14943 +14944, O14944 +14945, O14945 +14946, O14946 +14947, O14947 +14948, O14948 +14949, O14949 +14950, O14950 +14951, O14951 +14952, O14952 +14953, O14953 +14954, O14954 +14955, O14955 +14956, O14956 +14957, O14957 +14958, O14958 +14959, O14959 +14960, O14960 +14961, O14961 +14962, O14962 +14963, O14963 +14964, O14964 +14965, O14965 +14966, O14966 +14967, O14967 +14968, O14968 +14969, O14969 +14970, O14970 +14971, O14971 +14972, O14972 +14973, O14973 +14974, O14974 +14975, O14975 +14976, O14976 +14977, O14977 +14978, O14978 +14979, O14979 +14980, O14980 +14981, O14981 +14982, O14982 +14983, O14983 +14984, O14984 +14985, O14985 +14986, O14986 +14987, O14987 +14988, O14988 +14989, O14989 +14990, O14990 +14991, O14991 +14992, O14992 +14993, O14993 +14994, O14994 +14995, O14995 +14996, O14996 +14997, O14997 +14998, O14998 +14999, O14999 +15000, O15000 +15001, O15001 +15002, O15002 +15003, O15003 +15004, O15004 +15005, O15005 +15006, O15006 +15007, O15007 +15008, O15008 +15009, O15009 +15010, O15010 +15011, O15011 +15012, O15012 +15013, O15013 +15014, O15014 +15015, O15015 +15016, O15016 +15017, O15017 +15018, O15018 +15019, O15019 +15020, O15020 +15021, O15021 +15022, O15022 +15023, O15023 +15024, O15024 +15025, O15025 +15026, O15026 +15027, O15027 +15028, O15028 +15029, O15029 +15030, O15030 +15031, O15031 +15032, O15032 +15033, O15033 +15034, O15034 +15035, O15035 +15036, O15036 +15037, O15037 +15038, O15038 +15039, O15039 +15040, O15040 +15041, O15041 +15042, O15042 +15043, O15043 +15044, O15044 +15045, O15045 +15046, O15046 +15047, O15047 +15048, O15048 +15049, O15049 +15050, O15050 +15051, O15051 +15052, O15052 +15053, O15053 +15054, O15054 +15055, O15055 +15056, O15056 +15057, O15057 +15058, O15058 +15059, O15059 +15060, O15060 +15061, O15061 +15062, O15062 +15063, O15063 +15064, O15064 +15065, O15065 +15066, O15066 +15067, O15067 +15068, O15068 +15069, O15069 +15070, O15070 +15071, O15071 +15072, O15072 +15073, O15073 +15074, O15074 +15075, O15075 +15076, O15076 +15077, O15077 +15078, O15078 +15079, O15079 +15080, O15080 +15081, O15081 +15082, O15082 +15083, O15083 +15084, O15084 +15085, O15085 +15086, O15086 +15087, O15087 +15088, O15088 +15089, O15089 +15090, O15090 +15091, O15091 +15092, O15092 +15093, O15093 +15094, O15094 +15095, O15095 +15096, O15096 +15097, O15097 +15098, O15098 +15099, O15099 +15100, O15100 +15101, O15101 +15102, O15102 +15103, O15103 +15104, O15104 +15105, O15105 +15106, O15106 +15107, O15107 +15108, O15108 +15109, O15109 +15110, O15110 +15111, O15111 +15112, O15112 +15113, O15113 +15114, O15114 +15115, O15115 +15116, O15116 +15117, O15117 +15118, O15118 +15119, O15119 +15120, O15120 +15121, O15121 +15122, O15122 +15123, O15123 +15124, O15124 +15125, O15125 +15126, O15126 +15127, O15127 +15128, O15128 +15129, O15129 +15130, O15130 +15131, O15131 +15132, O15132 +15133, O15133 +15134, O15134 +15135, O15135 +15136, O15136 +15137, O15137 +15138, O15138 +15139, O15139 +15140, O15140 +15141, O15141 +15142, O15142 +15143, O15143 +15144, O15144 +15145, O15145 +15146, O15146 +15147, O15147 +15148, O15148 +15149, O15149 +15150, O15150 +15151, O15151 +15152, O15152 +15153, O15153 +15154, O15154 +15155, O15155 +15156, O15156 +15157, O15157 +15158, O15158 +15159, O15159 +15160, O15160 +15161, O15161 +15162, O15162 +15163, O15163 +15164, O15164 +15165, O15165 +15166, O15166 +15167, O15167 +15168, O15168 +15169, O15169 +15170, O15170 +15171, O15171 +15172, O15172 +15173, O15173 +15174, O15174 +15175, O15175 +15176, O15176 +15177, O15177 +15178, O15178 +15179, O15179 +15180, O15180 +15181, O15181 +15182, O15182 +15183, O15183 +15184, O15184 +15185, O15185 +15186, O15186 +15187, O15187 +15188, O15188 +15189, O15189 +15190, O15190 +15191, O15191 +15192, O15192 +15193, O15193 +15194, O15194 +15195, O15195 +15196, O15196 +15197, O15197 +15198, O15198 +15199, O15199 +15200, O15200 +15201, O15201 +15202, O15202 +15203, O15203 +15204, O15204 +15205, O15205 +15206, O15206 +15207, O15207 +15208, O15208 +15209, O15209 +15210, O15210 +15211, O15211 +15212, O15212 +15213, O15213 +15214, O15214 +15215, O15215 +15216, O15216 +15217, O15217 +15218, O15218 +15219, O15219 +15220, O15220 +15221, O15221 +15222, O15222 +15223, O15223 +15224, O15224 +15225, O15225 +15226, O15226 +15227, O15227 +15228, O15228 +15229, O15229 +15230, O15230 +15231, O15231 +15232, O15232 +15233, O15233 +15234, O15234 +15235, O15235 +15236, O15236 +15237, O15237 +15238, O15238 +15239, O15239 +15240, O15240 +15241, O15241 +15242, O15242 +15243, O15243 +15244, O15244 +15245, O15245 +15246, O15246 +15247, O15247 +15248, O15248 +15249, O15249 +15250, O15250 +15251, O15251 +15252, O15252 +15253, O15253 +15254, O15254 +15255, O15255 +15256, O15256 +15257, O15257 +15258, O15258 +15259, O15259 +15260, O15260 +15261, O15261 +15262, O15262 +15263, O15263 +15264, O15264 +15265, O15265 +15266, O15266 +15267, O15267 +15268, O15268 +15269, O15269 +15270, O15270 +15271, O15271 +15272, O15272 +15273, O15273 +15274, O15274 +15275, O15275 +15276, O15276 +15277, O15277 +15278, O15278 +15279, O15279 +15280, O15280 +15281, O15281 +15282, O15282 +15283, O15283 +15284, O15284 +15285, O15285 +15286, O15286 +15287, O15287 +15288, O15288 +15289, O15289 +15290, O15290 +15291, O15291 +15292, O15292 +15293, O15293 +15294, O15294 +15295, O15295 +15296, O15296 +15297, O15297 +15298, O15298 +15299, O15299 +15300, O15300 +15301, O15301 +15302, O15302 +15303, O15303 +15304, O15304 +15305, O15305 +15306, O15306 +15307, O15307 +15308, O15308 +15309, O15309 +15310, O15310 +15311, O15311 +15312, O15312 +15313, O15313 +15314, O15314 +15315, O15315 +15316, O15316 +15317, O15317 +15318, O15318 +15319, O15319 +15320, O15320 +15321, O15321 +15322, O15322 +15323, O15323 +15324, O15324 +15325, O15325 +15326, O15326 +15327, O15327 +15328, O15328 +15329, O15329 +15330, O15330 +15331, O15331 +15332, O15332 +15333, O15333 +15334, O15334 +15335, O15335 +15336, O15336 +15337, O15337 +15338, O15338 +15339, O15339 +15340, O15340 +15341, O15341 +15342, O15342 +15343, O15343 +15344, O15344 +15345, O15345 +15346, O15346 +15347, O15347 +15348, O15348 +15349, O15349 +15350, O15350 +15351, O15351 +15352, O15352 +15353, O15353 +15354, O15354 +15355, O15355 +15356, O15356 +15357, O15357 +15358, O15358 +15359, O15359 +15360, O15360 +15361, O15361 +15362, O15362 +15363, O15363 +15364, O15364 +15365, O15365 +15366, O15366 +15367, O15367 +15368, O15368 +15369, O15369 +15370, O15370 +15371, O15371 +15372, O15372 +15373, O15373 +15374, O15374 +15375, O15375 +15376, O15376 +15377, O15377 +15378, O15378 +15379, O15379 +15380, O15380 +15381, O15381 +15382, O15382 +15383, O15383 +15384, O15384 +15385, O15385 +15386, O15386 +15387, O15387 +15388, O15388 +15389, O15389 +15390, O15390 +15391, O15391 +15392, O15392 +15393, O15393 +15394, O15394 +15395, O15395 +15396, O15396 +15397, O15397 +15398, O15398 +15399, O15399 +15400, O15400 +15401, O15401 +15402, O15402 +15403, O15403 +15404, O15404 +15405, O15405 +15406, O15406 +15407, O15407 +15408, O15408 +15409, O15409 +15410, O15410 +15411, O15411 +15412, O15412 +15413, O15413 +15414, O15414 +15415, O15415 +15416, O15416 +15417, O15417 +15418, O15418 +15419, O15419 +15420, O15420 +15421, O15421 +15422, O15422 +15423, O15423 +15424, O15424 +15425, O15425 +15426, O15426 +15427, O15427 +15428, O15428 +15429, O15429 +15430, O15430 +15431, O15431 +15432, O15432 +15433, O15433 +15434, O15434 +15435, O15435 +15436, O15436 +15437, O15437 +15438, O15438 +15439, O15439 +15440, O15440 +15441, O15441 +15442, O15442 +15443, O15443 +15444, O15444 +15445, O15445 +15446, O15446 +15447, O15447 +15448, O15448 +15449, O15449 +15450, O15450 +15451, O15451 +15452, O15452 +15453, O15453 +15454, O15454 +15455, O15455 +15456, O15456 +15457, O15457 +15458, O15458 +15459, O15459 +15460, O15460 +15461, O15461 +15462, O15462 +15463, O15463 +15464, O15464 +15465, O15465 +15466, O15466 +15467, O15467 +15468, O15468 +15469, O15469 +15470, O15470 +15471, O15471 +15472, O15472 +15473, O15473 +15474, O15474 +15475, O15475 +15476, O15476 +15477, O15477 +15478, O15478 +15479, O15479 +15480, O15480 +15481, O15481 +15482, O15482 +15483, O15483 +15484, O15484 +15485, O15485 +15486, O15486 +15487, O15487 +15488, O15488 +15489, O15489 +15490, O15490 +15491, O15491 +15492, O15492 +15493, O15493 +15494, O15494 +15495, O15495 +15496, O15496 +15497, O15497 +15498, O15498 +15499, O15499 +15500, O15500 +15501, O15501 +15502, O15502 +15503, O15503 +15504, O15504 +15505, O15505 +15506, O15506 +15507, O15507 +15508, O15508 +15509, O15509 +15510, O15510 +15511, O15511 +15512, O15512 +15513, O15513 +15514, O15514 +15515, O15515 +15516, O15516 +15517, O15517 +15518, O15518 +15519, O15519 +15520, O15520 +15521, O15521 +15522, O15522 +15523, O15523 +15524, O15524 +15525, O15525 +15526, O15526 +15527, O15527 +15528, O15528 +15529, O15529 +15530, O15530 +15531, O15531 +15532, O15532 +15533, O15533 +15534, O15534 +15535, O15535 +15536, O15536 +15537, O15537 +15538, O15538 +15539, O15539 +15540, O15540 +15541, O15541 +15542, O15542 +15543, O15543 +15544, O15544 +15545, O15545 +15546, O15546 +15547, O15547 +15548, O15548 +15549, O15549 +15550, O15550 +15551, O15551 +15552, O15552 +15553, O15553 +15554, O15554 +15555, O15555 +15556, O15556 +15557, O15557 +15558, O15558 +15559, O15559 +15560, O15560 +15561, O15561 +15562, O15562 +15563, O15563 +15564, O15564 +15565, O15565 +15566, O15566 +15567, O15567 +15568, O15568 +15569, O15569 +15570, O15570 +15571, O15571 +15572, O15572 +15573, O15573 +15574, O15574 +15575, O15575 +15576, O15576 +15577, O15577 +15578, O15578 +15579, O15579 +15580, O15580 +15581, O15581 +15582, O15582 +15583, O15583 +15584, O15584 +15585, O15585 +15586, O15586 +15587, O15587 +15588, O15588 +15589, O15589 +15590, O15590 +15591, O15591 +15592, O15592 +15593, O15593 +15594, O15594 +15595, O15595 +15596, O15596 +15597, O15597 +15598, O15598 +15599, O15599 +15600, O15600 +15601, O15601 +15602, O15602 +15603, O15603 +15604, O15604 +15605, O15605 +15606, O15606 +15607, O15607 +15608, O15608 +15609, O15609 +15610, O15610 +15611, O15611 +15612, O15612 +15613, O15613 +15614, O15614 +15615, O15615 +15616, O15616 +15617, O15617 +15618, O15618 +15619, O15619 +15620, O15620 +15621, O15621 +15622, O15622 +15623, O15623 +15624, O15624 +15625, O15625 +15626, O15626 +15627, O15627 +15628, O15628 +15629, O15629 +15630, O15630 +15631, O15631 +15632, O15632 +15633, O15633 +15634, O15634 +15635, O15635 +15636, O15636 +15637, O15637 +15638, O15638 +15639, O15639 +15640, O15640 +15641, O15641 +15642, O15642 +15643, O15643 +15644, O15644 +15645, O15645 +15646, O15646 +15647, O15647 +15648, O15648 +15649, O15649 +15650, O15650 +15651, O15651 +15652, O15652 +15653, O15653 +15654, O15654 +15655, O15655 +15656, O15656 +15657, O15657 +15658, O15658 +15659, O15659 +15660, O15660 +15661, O15661 +15662, O15662 +15663, O15663 +15664, O15664 +15665, O15665 +15666, O15666 +15667, O15667 +15668, O15668 +15669, O15669 +15670, O15670 +15671, O15671 +15672, O15672 +15673, O15673 +15674, O15674 +15675, O15675 +15676, O15676 +15677, O15677 +15678, O15678 +15679, O15679 +15680, O15680 +15681, O15681 +15682, O15682 +15683, O15683 +15684, O15684 +15685, O15685 +15686, O15686 +15687, O15687 +15688, O15688 +15689, O15689 +15690, O15690 +15691, O15691 +15692, O15692 +15693, O15693 +15694, O15694 +15695, O15695 +15696, O15696 +15697, O15697 +15698, O15698 +15699, O15699 +15700, O15700 +15701, O15701 +15702, O15702 +15703, O15703 +15704, O15704 +15705, O15705 +15706, O15706 +15707, O15707 +15708, O15708 +15709, O15709 +15710, O15710 +15711, O15711 +15712, O15712 +15713, O15713 +15714, O15714 +15715, O15715 +15716, O15716 +15717, O15717 +15718, O15718 +15719, O15719 +15720, O15720 +15721, O15721 +15722, O15722 +15723, O15723 +15724, O15724 +15725, O15725 +15726, O15726 +15727, O15727 +15728, O15728 +15729, O15729 +15730, O15730 +15731, O15731 +15732, O15732 +15733, O15733 +15734, O15734 +15735, O15735 +15736, O15736 +15737, O15737 +15738, O15738 +15739, O15739 +15740, O15740 +15741, O15741 +15742, O15742 +15743, O15743 +15744, O15744 +15745, O15745 +15746, O15746 +15747, O15747 +15748, O15748 +15749, O15749 +15750, O15750 +15751, O15751 +15752, O15752 +15753, O15753 +15754, O15754 +15755, O15755 +15756, O15756 +15757, O15757 +15758, O15758 +15759, O15759 +15760, O15760 +15761, O15761 +15762, O15762 +15763, O15763 +15764, O15764 +15765, O15765 +15766, O15766 +15767, O15767 +15768, O15768 +15769, O15769 +15770, O15770 +15771, O15771 +15772, O15772 +15773, O15773 +15774, O15774 +15775, O15775 +15776, O15776 +15777, O15777 +15778, O15778 +15779, O15779 +15780, O15780 +15781, O15781 +15782, O15782 +15783, O15783 +15784, O15784 +15785, O15785 +15786, O15786 +15787, O15787 +15788, O15788 +15789, O15789 +15790, O15790 +15791, O15791 +15792, O15792 +15793, O15793 +15794, O15794 +15795, O15795 +15796, O15796 +15797, O15797 +15798, O15798 +15799, O15799 +15800, O15800 +15801, O15801 +15802, O15802 +15803, O15803 +15804, O15804 +15805, O15805 +15806, O15806 +15807, O15807 +15808, O15808 +15809, O15809 +15810, O15810 +15811, O15811 +15812, O15812 +15813, O15813 +15814, O15814 +15815, O15815 +15816, O15816 +15817, O15817 +15818, O15818 +15819, O15819 +15820, O15820 +15821, O15821 +15822, O15822 +15823, O15823 +15824, O15824 +15825, O15825 +15826, O15826 +15827, O15827 +15828, O15828 +15829, O15829 +15830, O15830 +15831, O15831 +15832, O15832 +15833, O15833 +15834, O15834 +15835, O15835 +15836, O15836 +15837, O15837 +15838, O15838 +15839, O15839 +15840, O15840 +15841, O15841 +15842, O15842 +15843, O15843 +15844, O15844 +15845, O15845 +15846, O15846 +15847, O15847 +15848, O15848 +15849, O15849 +15850, O15850 +15851, O15851 +15852, O15852 +15853, O15853 +15854, O15854 +15855, O15855 +15856, O15856 +15857, O15857 +15858, O15858 +15859, O15859 +15860, O15860 +15861, O15861 +15862, O15862 +15863, O15863 +15864, O15864 +15865, O15865 +15866, O15866 +15867, O15867 +15868, O15868 +15869, O15869 +15870, O15870 +15871, O15871 +15872, O15872 +15873, O15873 +15874, O15874 +15875, O15875 +15876, O15876 +15877, O15877 +15878, O15878 +15879, O15879 +15880, O15880 +15881, O15881 +15882, O15882 +15883, O15883 +15884, O15884 +15885, O15885 +15886, O15886 +15887, O15887 +15888, O15888 +15889, O15889 +15890, O15890 +15891, O15891 +15892, O15892 +15893, O15893 +15894, O15894 +15895, O15895 +15896, O15896 +15897, O15897 +15898, O15898 +15899, O15899 +15900, O15900 +15901, O15901 +15902, O15902 +15903, O15903 +15904, O15904 +15905, O15905 +15906, O15906 +15907, O15907 +15908, O15908 +15909, O15909 +15910, O15910 +15911, O15911 +15912, O15912 +15913, O15913 +15914, O15914 +15915, O15915 +15916, O15916 +15917, O15917 +15918, O15918 +15919, O15919 +15920, O15920 +15921, O15921 +15922, O15922 +15923, O15923 +15924, O15924 +15925, O15925 +15926, O15926 +15927, O15927 +15928, O15928 +15929, O15929 +15930, O15930 +15931, O15931 +15932, O15932 +15933, O15933 +15934, O15934 +15935, O15935 +15936, O15936 +15937, O15937 +15938, O15938 +15939, O15939 +15940, O15940 +15941, O15941 +15942, O15942 +15943, O15943 +15944, O15944 +15945, O15945 +15946, O15946 +15947, O15947 +15948, O15948 +15949, O15949 +15950, O15950 +15951, O15951 +15952, O15952 +15953, O15953 +15954, O15954 +15955, O15955 +15956, O15956 +15957, O15957 +15958, O15958 +15959, O15959 +15960, O15960 +15961, O15961 +15962, O15962 +15963, O15963 +15964, O15964 +15965, O15965 +15966, O15966 +15967, O15967 +15968, O15968 +15969, O15969 +15970, O15970 +15971, O15971 +15972, O15972 +15973, O15973 +15974, O15974 +15975, O15975 +15976, O15976 +15977, O15977 +15978, O15978 +15979, O15979 +15980, O15980 +15981, O15981 +15982, O15982 +15983, O15983 +15984, O15984 +15985, O15985 +15986, O15986 +15987, O15987 +15988, O15988 +15989, O15989 +15990, O15990 +15991, O15991 +15992, O15992 +15993, O15993 +15994, O15994 +15995, O15995 +15996, O15996 +15997, O15997 +15998, O15998 +15999, O15999 +16000, O16000 +16001, O16001 +16002, O16002 +16003, O16003 +16004, O16004 +16005, O16005 +16006, O16006 +16007, O16007 +16008, O16008 +16009, O16009 +16010, O16010 +16011, O16011 +16012, O16012 +16013, O16013 +16014, O16014 +16015, O16015 +16016, O16016 +16017, O16017 +16018, O16018 +16019, O16019 +16020, O16020 +16021, O16021 +16022, O16022 +16023, O16023 +16024, O16024 +16025, O16025 +16026, O16026 +16027, O16027 +16028, O16028 +16029, O16029 +16030, O16030 +16031, O16031 +16032, O16032 +16033, O16033 +16034, O16034 +16035, O16035 +16036, O16036 +16037, O16037 +16038, O16038 +16039, O16039 +16040, O16040 +16041, O16041 +16042, O16042 +16043, O16043 +16044, O16044 +16045, O16045 +16046, O16046 +16047, O16047 +16048, O16048 +16049, O16049 +16050, O16050 +16051, O16051 +16052, O16052 +16053, O16053 +16054, O16054 +16055, O16055 +16056, O16056 +16057, O16057 +16058, O16058 +16059, O16059 +16060, O16060 +16061, O16061 +16062, O16062 +16063, O16063 +16064, O16064 +16065, O16065 +16066, O16066 +16067, O16067 +16068, O16068 +16069, O16069 +16070, O16070 +16071, O16071 +16072, O16072 +16073, O16073 +16074, O16074 +16075, O16075 +16076, O16076 +16077, O16077 +16078, O16078 +16079, O16079 +16080, O16080 +16081, O16081 +16082, O16082 +16083, O16083 +16084, O16084 +16085, O16085 +16086, O16086 +16087, O16087 +16088, O16088 +16089, O16089 +16090, O16090 +16091, O16091 +16092, O16092 +16093, O16093 +16094, O16094 +16095, O16095 +16096, O16096 +16097, O16097 +16098, O16098 +16099, O16099 +16100, O16100 +16101, O16101 +16102, O16102 +16103, O16103 +16104, O16104 +16105, O16105 +16106, O16106 +16107, O16107 +16108, O16108 +16109, O16109 +16110, O16110 +16111, O16111 +16112, O16112 +16113, O16113 +16114, O16114 +16115, O16115 +16116, O16116 +16117, O16117 +16118, O16118 +16119, O16119 +16120, O16120 +16121, O16121 +16122, O16122 +16123, O16123 +16124, O16124 +16125, O16125 +16126, O16126 +16127, O16127 +16128, O16128 +16129, O16129 +16130, O16130 +16131, O16131 +16132, O16132 +16133, O16133 +16134, O16134 +16135, O16135 +16136, O16136 +16137, O16137 +16138, O16138 +16139, O16139 +16140, O16140 +16141, O16141 +16142, O16142 +16143, O16143 +16144, O16144 +16145, O16145 +16146, O16146 +16147, O16147 +16148, O16148 +16149, O16149 +16150, O16150 +16151, O16151 +16152, O16152 +16153, O16153 +16154, O16154 +16155, O16155 +16156, O16156 +16157, O16157 +16158, O16158 +16159, O16159 +16160, O16160 +16161, O16161 +16162, O16162 +16163, O16163 +16164, O16164 +16165, O16165 +16166, O16166 +16167, O16167 +16168, O16168 +16169, O16169 +16170, O16170 +16171, O16171 +16172, O16172 +16173, O16173 +16174, O16174 +16175, O16175 +16176, O16176 +16177, O16177 +16178, O16178 +16179, O16179 +16180, O16180 +16181, O16181 +16182, O16182 +16183, O16183 +16184, O16184 +16185, O16185 +16186, O16186 +16187, O16187 +16188, O16188 +16189, O16189 +16190, O16190 +16191, O16191 +16192, O16192 +16193, O16193 +16194, O16194 +16195, O16195 +16196, O16196 +16197, O16197 +16198, O16198 +16199, O16199 +16200, O16200 +16201, O16201 +16202, O16202 +16203, O16203 +16204, O16204 +16205, O16205 +16206, O16206 +16207, O16207 +16208, O16208 +16209, O16209 +16210, O16210 +16211, O16211 +16212, O16212 +16213, O16213 +16214, O16214 +16215, O16215 +16216, O16216 +16217, O16217 +16218, O16218 +16219, O16219 +16220, O16220 +16221, O16221 +16222, O16222 +16223, O16223 +16224, O16224 +16225, O16225 +16226, O16226 +16227, O16227 +16228, O16228 +16229, O16229 +16230, O16230 +16231, O16231 +16232, O16232 +16233, O16233 +16234, O16234 +16235, O16235 +16236, O16236 +16237, O16237 +16238, O16238 +16239, O16239 +16240, O16240 +16241, O16241 +16242, O16242 +16243, O16243 +16244, O16244 +16245, O16245 +16246, O16246 +16247, O16247 +16248, O16248 +16249, O16249 +16250, O16250 +16251, O16251 +16252, O16252 +16253, O16253 +16254, O16254 +16255, O16255 +16256, O16256 +16257, O16257 +16258, O16258 +16259, O16259 +16260, O16260 +16261, O16261 +16262, O16262 +16263, O16263 +16264, O16264 +16265, O16265 +16266, O16266 +16267, O16267 +16268, O16268 +16269, O16269 +16270, O16270 +16271, O16271 +16272, O16272 +16273, O16273 +16274, O16274 +16275, O16275 +16276, O16276 +16277, O16277 +16278, O16278 +16279, O16279 +16280, O16280 +16281, O16281 +16282, O16282 +16283, O16283 +16284, O16284 +16285, O16285 +16286, O16286 +16287, O16287 +16288, O16288 +16289, O16289 +16290, O16290 +16291, O16291 +16292, O16292 +16293, O16293 +16294, O16294 +16295, O16295 +16296, O16296 +16297, O16297 +16298, O16298 +16299, O16299 +16300, O16300 +16301, O16301 +16302, O16302 +16303, O16303 +16304, O16304 +16305, O16305 +16306, O16306 +16307, O16307 +16308, O16308 +16309, O16309 +16310, O16310 +16311, O16311 +16312, O16312 +16313, O16313 +16314, O16314 +16315, O16315 +16316, O16316 +16317, O16317 +16318, O16318 +16319, O16319 +16320, O16320 +16321, O16321 +16322, O16322 +16323, O16323 +16324, O16324 +16325, O16325 +16326, O16326 +16327, O16327 +16328, O16328 +16329, O16329 +16330, O16330 +16331, O16331 +16332, O16332 +16333, O16333 +16334, O16334 +16335, O16335 +16336, O16336 +16337, O16337 +16338, O16338 +16339, O16339 +16340, O16340 +16341, O16341 +16342, O16342 +16343, O16343 +16344, O16344 +16345, O16345 +16346, O16346 +16347, O16347 +16348, O16348 +16349, O16349 +16350, O16350 +16351, O16351 +16352, O16352 +16353, O16353 +16354, O16354 +16355, O16355 +16356, O16356 +16357, O16357 +16358, O16358 +16359, O16359 +16360, O16360 +16361, O16361 +16362, O16362 +16363, O16363 +16364, O16364 +16365, O16365 +16366, O16366 +16367, O16367 +16368, O16368 +16369, O16369 +16370, O16370 +16371, O16371 +16372, O16372 +16373, O16373 +16374, O16374 +16375, O16375 +16376, O16376 +16377, O16377 +16378, O16378 +16379, O16379 +16380, O16380 +16381, O16381 +16382, O16382 +16383, O16383 +16384, O16384 +16385, O16385 +16386, O16386 +16387, O16387 +16388, O16388 +16389, O16389 +16390, O16390 +16391, O16391 +16392, O16392 +16393, O16393 +16394, O16394 +16395, O16395 +16396, O16396 +16397, O16397 +16398, O16398 +16399, O16399 +16400, O16400 +16401, O16401 +16402, O16402 +16403, O16403 +16404, O16404 +16405, O16405 +16406, O16406 +16407, O16407 +16408, O16408 +16409, O16409 +16410, O16410 +16411, O16411 +16412, O16412 +16413, O16413 +16414, O16414 +16415, O16415 +16416, O16416 +16417, O16417 +16418, O16418 +16419, O16419 +16420, O16420 +16421, O16421 +16422, O16422 +16423, O16423 +16424, O16424 +16425, O16425 +16426, O16426 +16427, O16427 +16428, O16428 +16429, O16429 +16430, O16430 +16431, O16431 +16432, O16432 +16433, O16433 +16434, O16434 +16435, O16435 +16436, O16436 +16437, O16437 +16438, O16438 +16439, O16439 +16440, O16440 +16441, O16441 +16442, O16442 +16443, O16443 +16444, O16444 +16445, O16445 +16446, O16446 +16447, O16447 +16448, O16448 +16449, O16449 +16450, O16450 +16451, O16451 +16452, O16452 +16453, O16453 +16454, O16454 +16455, O16455 +16456, O16456 +16457, O16457 +16458, O16458 +16459, O16459 +16460, O16460 +16461, O16461 +16462, O16462 +16463, O16463 +16464, O16464 +16465, O16465 +16466, O16466 +16467, O16467 +16468, O16468 +16469, O16469 +16470, O16470 +16471, O16471 +16472, O16472 +16473, O16473 +16474, O16474 +16475, O16475 +16476, O16476 +16477, O16477 +16478, O16478 +16479, O16479 +16480, O16480 +16481, O16481 +16482, O16482 +16483, O16483 +16484, O16484 +16485, O16485 +16486, O16486 +16487, O16487 +16488, O16488 +16489, O16489 +16490, O16490 +16491, O16491 +16492, O16492 +16493, O16493 +16494, O16494 +16495, O16495 +16496, O16496 +16497, O16497 +16498, O16498 +16499, O16499 +16500, O16500 +16501, O16501 +16502, O16502 +16503, O16503 +16504, O16504 +16505, O16505 +16506, O16506 +16507, O16507 +16508, O16508 +16509, O16509 +16510, O16510 +16511, O16511 +16512, O16512 +16513, O16513 +16514, O16514 +16515, O16515 +16516, O16516 +16517, O16517 +16518, O16518 +16519, O16519 +16520, O16520 +16521, O16521 +16522, O16522 +16523, O16523 +16524, O16524 +16525, O16525 +16526, O16526 +16527, O16527 +16528, O16528 +16529, O16529 +16530, O16530 +16531, O16531 +16532, O16532 +16533, O16533 +16534, O16534 +16535, O16535 +16536, O16536 +16537, O16537 +16538, O16538 +16539, O16539 +16540, O16540 +16541, O16541 +16542, O16542 +16543, O16543 +16544, O16544 +16545, O16545 +16546, O16546 +16547, O16547 +16548, O16548 +16549, O16549 +16550, O16550 +16551, O16551 +16552, O16552 +16553, O16553 +16554, O16554 +16555, O16555 +16556, O16556 +16557, O16557 +16558, O16558 +16559, O16559 +16560, O16560 +16561, O16561 +16562, O16562 +16563, O16563 +16564, O16564 +16565, O16565 +16566, O16566 +16567, O16567 +16568, O16568 +16569, O16569 +16570, O16570 +16571, O16571 +16572, O16572 +16573, O16573 +16574, O16574 +16575, O16575 +16576, O16576 +16577, O16577 +16578, O16578 +16579, O16579 +16580, O16580 +16581, O16581 +16582, O16582 +16583, O16583 +16584, O16584 +16585, O16585 +16586, O16586 +16587, O16587 +16588, O16588 +16589, O16589 +16590, O16590 +16591, O16591 +16592, O16592 +16593, O16593 +16594, O16594 +16595, O16595 +16596, O16596 +16597, O16597 +16598, O16598 +16599, O16599 +16600, O16600 +16601, O16601 +16602, O16602 +16603, O16603 +16604, O16604 +16605, O16605 +16606, O16606 +16607, O16607 +16608, O16608 +16609, O16609 +16610, O16610 +16611, O16611 +16612, O16612 +16613, O16613 +16614, O16614 +16615, O16615 +16616, O16616 +16617, O16617 +16618, O16618 +16619, O16619 +16620, O16620 +16621, O16621 +16622, O16622 +16623, O16623 +16624, O16624 +16625, O16625 +16626, O16626 +16627, O16627 +16628, O16628 +16629, O16629 +16630, O16630 +16631, O16631 +16632, O16632 +16633, O16633 +16634, O16634 +16635, O16635 +16636, O16636 +16637, O16637 +16638, O16638 +16639, O16639 +16640, O16640 +16641, O16641 +16642, O16642 +16643, O16643 +16644, O16644 +16645, O16645 +16646, O16646 +16647, O16647 +16648, O16648 +16649, O16649 +16650, O16650 +16651, O16651 +16652, O16652 +16653, O16653 +16654, O16654 +16655, O16655 +16656, O16656 +16657, O16657 +16658, O16658 +16659, O16659 +16660, O16660 +16661, O16661 +16662, O16662 +16663, O16663 +16664, O16664 +16665, O16665 +16666, O16666 +16667, O16667 +16668, O16668 +16669, O16669 +16670, O16670 +16671, O16671 +16672, O16672 +16673, O16673 +16674, O16674 +16675, O16675 +16676, O16676 +16677, O16677 +16678, O16678 +16679, O16679 +16680, O16680 +16681, O16681 +16682, O16682 +16683, O16683 +16684, O16684 +16685, O16685 +16686, O16686 +16687, O16687 +16688, O16688 +16689, O16689 +16690, O16690 +16691, O16691 +16692, O16692 +16693, O16693 +16694, O16694 +16695, O16695 +16696, O16696 +16697, O16697 +16698, O16698 +16699, O16699 +16700, O16700 +16701, O16701 +16702, O16702 +16703, O16703 +16704, O16704 +16705, O16705 +16706, O16706 +16707, O16707 +16708, O16708 +16709, O16709 +16710, O16710 +16711, O16711 +16712, O16712 +16713, O16713 +16714, O16714 +16715, O16715 +16716, O16716 +16717, O16717 +16718, O16718 +16719, O16719 +16720, O16720 +16721, O16721 +16722, O16722 +16723, O16723 +16724, O16724 +16725, O16725 +16726, O16726 +16727, O16727 +16728, O16728 +16729, O16729 +16730, O16730 +16731, O16731 +16732, O16732 +16733, O16733 +16734, O16734 +16735, O16735 +16736, O16736 +16737, O16737 +16738, O16738 +16739, O16739 +16740, O16740 +16741, O16741 +16742, O16742 +16743, O16743 +16744, O16744 +16745, O16745 +16746, O16746 +16747, O16747 +16748, O16748 +16749, O16749 +16750, O16750 +16751, O16751 +16752, O16752 +16753, O16753 +16754, O16754 +16755, O16755 +16756, O16756 +16757, O16757 +16758, O16758 +16759, O16759 +16760, O16760 +16761, O16761 +16762, O16762 +16763, O16763 +16764, O16764 +16765, O16765 +16766, O16766 +16767, O16767 +16768, O16768 +16769, O16769 +16770, O16770 +16771, O16771 +16772, O16772 +16773, O16773 +16774, O16774 +16775, O16775 +16776, O16776 +16777, O16777 +16778, O16778 +16779, O16779 +16780, O16780 +16781, O16781 +16782, O16782 +16783, O16783 +16784, O16784 +16785, O16785 +16786, O16786 +16787, O16787 +16788, O16788 +16789, O16789 +16790, O16790 +16791, O16791 +16792, O16792 +16793, O16793 +16794, O16794 +16795, O16795 +16796, O16796 +16797, O16797 +16798, O16798 +16799, O16799 +16800, O16800 +16801, O16801 +16802, O16802 +16803, O16803 +16804, O16804 +16805, O16805 +16806, O16806 +16807, O16807 +16808, O16808 +16809, O16809 +16810, O16810 +16811, O16811 +16812, O16812 +16813, O16813 +16814, O16814 +16815, O16815 +16816, O16816 +16817, O16817 +16818, O16818 +16819, O16819 +16820, O16820 +16821, O16821 +16822, O16822 +16823, O16823 +16824, O16824 +16825, O16825 +16826, O16826 +16827, O16827 +16828, O16828 +16829, O16829 +16830, O16830 +16831, O16831 +16832, O16832 +16833, O16833 +16834, O16834 +16835, O16835 +16836, O16836 +16837, O16837 +16838, O16838 +16839, O16839 +16840, O16840 +16841, O16841 +16842, O16842 +16843, O16843 +16844, O16844 +16845, O16845 +16846, O16846 +16847, O16847 +16848, O16848 +16849, O16849 +16850, O16850 +16851, O16851 +16852, O16852 +16853, O16853 +16854, O16854 +16855, O16855 +16856, O16856 +16857, O16857 +16858, O16858 +16859, O16859 +16860, O16860 +16861, O16861 +16862, O16862 +16863, O16863 +16864, O16864 +16865, O16865 +16866, O16866 +16867, O16867 +16868, O16868 +16869, O16869 +16870, O16870 +16871, O16871 +16872, O16872 +16873, O16873 +16874, O16874 +16875, O16875 +16876, O16876 +16877, O16877 +16878, O16878 +16879, O16879 +16880, O16880 +16881, O16881 +16882, O16882 +16883, O16883 +16884, O16884 +16885, O16885 +16886, O16886 +16887, O16887 +16888, O16888 +16889, O16889 +16890, O16890 +16891, O16891 +16892, O16892 +16893, O16893 +16894, O16894 +16895, O16895 +16896, O16896 +16897, O16897 +16898, O16898 +16899, O16899 +16900, O16900 +16901, O16901 +16902, O16902 +16903, O16903 +16904, O16904 +16905, O16905 +16906, O16906 +16907, O16907 +16908, O16908 +16909, O16909 +16910, O16910 +16911, O16911 +16912, O16912 +16913, O16913 +16914, O16914 +16915, O16915 +16916, O16916 +16917, O16917 +16918, O16918 +16919, O16919 +16920, O16920 +16921, O16921 +16922, O16922 +16923, O16923 +16924, O16924 +16925, O16925 +16926, O16926 +16927, O16927 +16928, O16928 +16929, O16929 +16930, O16930 +16931, O16931 +16932, O16932 +16933, O16933 +16934, O16934 +16935, O16935 +16936, O16936 +16937, O16937 +16938, O16938 +16939, O16939 +16940, O16940 +16941, O16941 +16942, O16942 +16943, O16943 +16944, O16944 +16945, O16945 +16946, O16946 +16947, O16947 +16948, O16948 +16949, O16949 +16950, O16950 +16951, O16951 +16952, O16952 +16953, O16953 +16954, O16954 +16955, O16955 +16956, O16956 +16957, O16957 +16958, O16958 +16959, O16959 +16960, O16960 +16961, O16961 +16962, O16962 +16963, O16963 +16964, O16964 +16965, O16965 +16966, O16966 +16967, O16967 +16968, O16968 +16969, O16969 +16970, O16970 +16971, O16971 +16972, O16972 +16973, O16973 +16974, O16974 +16975, O16975 +16976, O16976 +16977, O16977 +16978, O16978 +16979, O16979 +16980, O16980 +16981, O16981 +16982, O16982 +16983, O16983 +16984, O16984 +16985, O16985 +16986, O16986 +16987, O16987 +16988, O16988 +16989, O16989 +16990, O16990 +16991, O16991 +16992, O16992 +16993, O16993 +16994, O16994 +16995, O16995 +16996, O16996 +16997, O16997 +16998, O16998 +16999, O16999 +17000, O17000 +17001, O17001 +17002, O17002 +17003, O17003 +17004, O17004 +17005, O17005 +17006, O17006 +17007, O17007 +17008, O17008 +17009, O17009 +17010, O17010 +17011, O17011 +17012, O17012 +17013, O17013 +17014, O17014 +17015, O17015 +17016, O17016 +17017, O17017 +17018, O17018 +17019, O17019 +17020, O17020 +17021, O17021 +17022, O17022 +17023, O17023 +17024, O17024 +17025, O17025 +17026, O17026 +17027, O17027 +17028, O17028 +17029, O17029 +17030, O17030 +17031, O17031 +17032, O17032 +17033, O17033 +17034, O17034 +17035, O17035 +17036, O17036 +17037, O17037 +17038, O17038 +17039, O17039 +17040, O17040 +17041, O17041 +17042, O17042 +17043, O17043 +17044, O17044 +17045, O17045 +17046, O17046 +17047, O17047 +17048, O17048 +17049, O17049 +17050, O17050 +17051, O17051 +17052, O17052 +17053, O17053 +17054, O17054 +17055, O17055 +17056, O17056 +17057, O17057 +17058, O17058 +17059, O17059 +17060, O17060 +17061, O17061 +17062, O17062 +17063, O17063 +17064, O17064 +17065, O17065 +17066, O17066 +17067, O17067 +17068, O17068 +17069, O17069 +17070, O17070 +17071, O17071 +17072, O17072 +17073, O17073 +17074, O17074 +17075, O17075 +17076, O17076 +17077, O17077 +17078, O17078 +17079, O17079 +17080, O17080 +17081, O17081 +17082, O17082 +17083, O17083 +17084, O17084 +17085, O17085 +17086, O17086 +17087, O17087 +17088, O17088 +17089, O17089 +17090, O17090 +17091, O17091 +17092, O17092 +17093, O17093 +17094, O17094 +17095, O17095 +17096, O17096 +17097, O17097 +17098, O17098 +17099, O17099 +17100, O17100 +17101, O17101 +17102, O17102 +17103, O17103 +17104, O17104 +17105, O17105 +17106, O17106 +17107, O17107 +17108, O17108 +17109, O17109 +17110, O17110 +17111, O17111 +17112, O17112 +17113, O17113 +17114, O17114 +17115, O17115 +17116, O17116 +17117, O17117 +17118, O17118 +17119, O17119 +17120, O17120 +17121, O17121 +17122, O17122 +17123, O17123 +17124, O17124 +17125, O17125 +17126, O17126 +17127, O17127 +17128, O17128 +17129, O17129 +17130, O17130 +17131, O17131 +17132, O17132 +17133, O17133 +17134, O17134 +17135, O17135 +17136, O17136 +17137, O17137 +17138, O17138 +17139, O17139 +17140, O17140 +17141, O17141 +17142, O17142 +17143, O17143 +17144, O17144 +17145, O17145 +17146, O17146 +17147, O17147 +17148, O17148 +17149, O17149 +17150, O17150 +17151, O17151 +17152, O17152 +17153, O17153 +17154, O17154 +17155, O17155 +17156, O17156 +17157, O17157 +17158, O17158 +17159, O17159 +17160, O17160 +17161, O17161 +17162, O17162 +17163, O17163 +17164, O17164 +17165, O17165 +17166, O17166 +17167, O17167 +17168, O17168 +17169, O17169 +17170, O17170 +17171, O17171 +17172, O17172 +17173, O17173 +17174, O17174 +17175, O17175 +17176, O17176 +17177, O17177 +17178, O17178 +17179, O17179 +17180, O17180 +17181, O17181 +17182, O17182 +17183, O17183 +17184, O17184 +17185, O17185 +17186, O17186 +17187, O17187 +17188, O17188 +17189, O17189 +17190, O17190 +17191, O17191 +17192, O17192 +17193, O17193 +17194, O17194 +17195, O17195 +17196, O17196 +17197, O17197 +17198, O17198 +17199, O17199 +17200, O17200 +17201, O17201 +17202, O17202 +17203, O17203 +17204, O17204 +17205, O17205 +17206, O17206 +17207, O17207 +17208, O17208 +17209, O17209 +17210, O17210 +17211, O17211 +17212, O17212 +17213, O17213 +17214, O17214 +17215, O17215 +17216, O17216 +17217, O17217 +17218, O17218 +17219, O17219 +17220, O17220 +17221, O17221 +17222, O17222 +17223, O17223 +17224, O17224 +17225, O17225 +17226, O17226 +17227, O17227 +17228, O17228 +17229, O17229 +17230, O17230 +17231, O17231 +17232, O17232 +17233, O17233 +17234, O17234 +17235, O17235 +17236, O17236 +17237, O17237 +17238, O17238 +17239, O17239 +17240, O17240 +17241, O17241 +17242, O17242 +17243, O17243 +17244, O17244 +17245, O17245 +17246, O17246 +17247, O17247 +17248, O17248 +17249, O17249 +17250, O17250 +17251, O17251 +17252, O17252 +17253, O17253 +17254, O17254 +17255, O17255 +17256, O17256 +17257, O17257 +17258, O17258 +17259, O17259 +17260, O17260 +17261, O17261 +17262, O17262 +17263, O17263 +17264, O17264 +17265, O17265 +17266, O17266 +17267, O17267 +17268, O17268 +17269, O17269 +17270, O17270 +17271, O17271 +17272, O17272 +17273, O17273 +17274, O17274 +17275, O17275 +17276, O17276 +17277, O17277 +17278, O17278 +17279, O17279 +17280, O17280 +17281, O17281 +17282, O17282 +17283, O17283 +17284, O17284 +17285, O17285 +17286, O17286 +17287, O17287 +17288, O17288 +17289, O17289 +17290, O17290 +17291, O17291 +17292, O17292 +17293, O17293 +17294, O17294 +17295, O17295 +17296, O17296 +17297, O17297 +17298, O17298 +17299, O17299 +17300, O17300 +17301, O17301 +17302, O17302 +17303, O17303 +17304, O17304 +17305, O17305 +17306, O17306 +17307, O17307 +17308, O17308 +17309, O17309 +17310, O17310 +17311, O17311 +17312, O17312 +17313, O17313 +17314, O17314 +17315, O17315 +17316, O17316 +17317, O17317 +17318, O17318 +17319, O17319 +17320, O17320 +17321, O17321 +17322, O17322 +17323, O17323 +17324, O17324 +17325, O17325 +17326, O17326 +17327, O17327 +17328, O17328 +17329, O17329 +17330, O17330 +17331, O17331 +17332, O17332 +17333, O17333 +17334, O17334 +17335, O17335 +17336, O17336 +17337, O17337 +17338, O17338 +17339, O17339 +17340, O17340 +17341, O17341 +17342, O17342 +17343, O17343 +17344, O17344 +17345, O17345 +17346, O17346 +17347, O17347 +17348, O17348 +17349, O17349 +17350, O17350 +17351, O17351 +17352, O17352 +17353, O17353 +17354, O17354 +17355, O17355 +17356, O17356 +17357, O17357 +17358, O17358 +17359, O17359 +17360, O17360 +17361, O17361 +17362, O17362 +17363, O17363 +17364, O17364 +17365, O17365 +17366, O17366 +17367, O17367 +17368, O17368 +17369, O17369 +17370, O17370 +17371, O17371 +17372, O17372 +17373, O17373 +17374, O17374 +17375, O17375 +17376, O17376 +17377, O17377 +17378, O17378 +17379, O17379 +17380, O17380 +17381, O17381 +17382, O17382 +17383, O17383 +17384, O17384 +17385, O17385 +17386, O17386 +17387, O17387 +17388, O17388 +17389, O17389 +17390, O17390 +17391, O17391 +17392, O17392 +17393, O17393 +17394, O17394 +17395, O17395 +17396, O17396 +17397, O17397 +17398, O17398 +17399, O17399 +17400, O17400 +17401, O17401 +17402, O17402 +17403, O17403 +17404, O17404 +17405, O17405 +17406, O17406 +17407, O17407 +17408, O17408 +17409, O17409 +17410, O17410 +17411, O17411 +17412, O17412 +17413, O17413 +17414, O17414 +17415, O17415 +17416, O17416 +17417, O17417 +17418, O17418 +17419, O17419 +17420, O17420 +17421, O17421 +17422, O17422 +17423, O17423 +17424, O17424 +17425, O17425 +17426, O17426 +17427, O17427 +17428, O17428 +17429, O17429 +17430, O17430 +17431, O17431 +17432, O17432 +17433, O17433 +17434, O17434 +17435, O17435 +17436, O17436 +17437, O17437 +17438, O17438 +17439, O17439 +17440, O17440 +17441, O17441 +17442, O17442 +17443, O17443 +17444, O17444 +17445, O17445 +17446, O17446 +17447, O17447 +17448, O17448 +17449, O17449 +17450, O17450 +17451, O17451 +17452, O17452 +17453, O17453 +17454, O17454 +17455, O17455 +17456, O17456 +17457, O17457 +17458, O17458 +17459, O17459 +17460, O17460 +17461, O17461 +17462, O17462 +17463, O17463 +17464, O17464 +17465, O17465 +17466, O17466 +17467, O17467 +17468, O17468 +17469, O17469 +17470, O17470 +17471, O17471 +17472, O17472 +17473, O17473 +17474, O17474 +17475, O17475 +17476, O17476 +17477, O17477 +17478, O17478 +17479, O17479 +17480, O17480 +17481, O17481 +17482, O17482 +17483, O17483 +17484, O17484 +17485, O17485 +17486, O17486 +17487, O17487 +17488, O17488 +17489, O17489 +17490, O17490 +17491, O17491 +17492, O17492 +17493, O17493 +17494, O17494 +17495, O17495 +17496, O17496 +17497, O17497 +17498, O17498 +17499, O17499 +17500, O17500 +17501, O17501 +17502, O17502 +17503, O17503 +17504, O17504 +17505, O17505 +17506, O17506 +17507, O17507 +17508, O17508 +17509, O17509 +17510, O17510 +17511, O17511 +17512, O17512 +17513, O17513 +17514, O17514 +17515, O17515 +17516, O17516 +17517, O17517 +17518, O17518 +17519, O17519 +17520, O17520 +17521, O17521 +17522, O17522 +17523, O17523 +17524, O17524 +17525, O17525 +17526, O17526 +17527, O17527 +17528, O17528 +17529, O17529 +17530, O17530 +17531, O17531 +17532, O17532 +17533, O17533 +17534, O17534 +17535, O17535 +17536, O17536 +17537, O17537 +17538, O17538 +17539, O17539 +17540, O17540 +17541, O17541 +17542, O17542 +17543, O17543 +17544, O17544 +17545, O17545 +17546, O17546 +17547, O17547 +17548, O17548 +17549, O17549 +17550, O17550 +17551, O17551 +17552, O17552 +17553, O17553 +17554, O17554 +17555, O17555 +17556, O17556 +17557, O17557 +17558, O17558 +17559, O17559 +17560, O17560 +17561, O17561 +17562, O17562 +17563, O17563 +17564, O17564 +17565, O17565 +17566, O17566 +17567, O17567 +17568, O17568 +17569, O17569 +17570, O17570 +17571, O17571 +17572, O17572 +17573, O17573 +17574, O17574 +17575, O17575 +17576, O17576 +17577, O17577 +17578, O17578 +17579, O17579 +17580, O17580 +17581, O17581 +17582, O17582 +17583, O17583 +17584, O17584 +17585, O17585 +17586, O17586 +17587, O17587 +17588, O17588 +17589, O17589 +17590, O17590 +17591, O17591 +17592, O17592 +17593, O17593 +17594, O17594 +17595, O17595 +17596, O17596 +17597, O17597 +17598, O17598 +17599, O17599 +17600, O17600 +17601, O17601 +17602, O17602 +17603, O17603 +17604, O17604 +17605, O17605 +17606, O17606 +17607, O17607 +17608, O17608 +17609, O17609 +17610, O17610 +17611, O17611 +17612, O17612 +17613, O17613 +17614, O17614 +17615, O17615 +17616, O17616 +17617, O17617 +17618, O17618 +17619, O17619 +17620, O17620 +17621, O17621 +17622, O17622 +17623, O17623 +17624, O17624 +17625, O17625 +17626, O17626 +17627, O17627 +17628, O17628 +17629, O17629 +17630, O17630 +17631, O17631 +17632, O17632 +17633, O17633 +17634, O17634 +17635, O17635 +17636, O17636 +17637, O17637 +17638, O17638 +17639, O17639 +17640, O17640 +17641, O17641 +17642, O17642 +17643, O17643 +17644, O17644 +17645, O17645 +17646, O17646 +17647, O17647 +17648, O17648 +17649, O17649 +17650, O17650 +17651, O17651 +17652, O17652 +17653, O17653 +17654, O17654 +17655, O17655 +17656, O17656 +17657, O17657 +17658, O17658 +17659, O17659 +17660, O17660 +17661, O17661 +17662, O17662 +17663, O17663 +17664, O17664 +17665, O17665 +17666, O17666 +17667, O17667 +17668, O17668 +17669, O17669 +17670, O17670 +17671, O17671 +17672, O17672 +17673, O17673 +17674, O17674 +17675, O17675 +17676, O17676 +17677, O17677 +17678, O17678 +17679, O17679 +17680, O17680 +17681, O17681 +17682, O17682 +17683, O17683 +17684, O17684 +17685, O17685 +17686, O17686 +17687, O17687 +17688, O17688 +17689, O17689 +17690, O17690 +17691, O17691 +17692, O17692 +17693, O17693 +17694, O17694 +17695, O17695 +17696, O17696 +17697, O17697 +17698, O17698 +17699, O17699 +17700, O17700 +17701, O17701 +17702, O17702 +17703, O17703 +17704, O17704 +17705, O17705 +17706, O17706 +17707, O17707 +17708, O17708 +17709, O17709 +17710, O17710 +17711, O17711 +17712, O17712 +17713, O17713 +17714, O17714 +17715, O17715 +17716, O17716 +17717, O17717 +17718, O17718 +17719, O17719 +17720, O17720 +17721, O17721 +17722, O17722 +17723, O17723 +17724, O17724 +17725, O17725 +17726, O17726 +17727, O17727 +17728, O17728 +17729, O17729 +17730, O17730 +17731, O17731 +17732, O17732 +17733, O17733 +17734, O17734 +17735, O17735 +17736, O17736 +17737, O17737 +17738, O17738 +17739, O17739 +17740, O17740 +17741, O17741 +17742, O17742 +17743, O17743 +17744, O17744 +17745, O17745 +17746, O17746 +17747, O17747 +17748, O17748 +17749, O17749 +17750, O17750 +17751, O17751 +17752, O17752 +17753, O17753 +17754, O17754 +17755, O17755 +17756, O17756 +17757, O17757 +17758, O17758 +17759, O17759 +17760, O17760 +17761, O17761 +17762, O17762 +17763, O17763 +17764, O17764 +17765, O17765 +17766, O17766 +17767, O17767 +17768, O17768 +17769, O17769 +17770, O17770 +17771, O17771 +17772, O17772 +17773, O17773 +17774, O17774 +17775, O17775 +17776, O17776 +17777, O17777 +17778, O17778 +17779, O17779 +17780, O17780 +17781, O17781 +17782, O17782 +17783, O17783 +17784, O17784 +17785, O17785 +17786, O17786 +17787, O17787 +17788, O17788 +17789, O17789 +17790, O17790 +17791, O17791 +17792, O17792 +17793, O17793 +17794, O17794 +17795, O17795 +17796, O17796 +17797, O17797 +17798, O17798 +17799, O17799 +17800, O17800 +17801, O17801 +17802, O17802 +17803, O17803 +17804, O17804 +17805, O17805 +17806, O17806 +17807, O17807 +17808, O17808 +17809, O17809 +17810, O17810 +17811, O17811 +17812, O17812 +17813, O17813 +17814, O17814 +17815, O17815 +17816, O17816 +17817, O17817 +17818, O17818 +17819, O17819 +17820, O17820 +17821, O17821 +17822, O17822 +17823, O17823 +17824, O17824 +17825, O17825 +17826, O17826 +17827, O17827 +17828, O17828 +17829, O17829 +17830, O17830 +17831, O17831 +17832, O17832 +17833, O17833 +17834, O17834 +17835, O17835 +17836, O17836 +17837, O17837 +17838, O17838 +17839, O17839 +17840, O17840 +17841, O17841 +17842, O17842 +17843, O17843 +17844, O17844 +17845, O17845 +17846, O17846 +17847, O17847 +17848, O17848 +17849, O17849 +17850, O17850 +17851, O17851 +17852, O17852 +17853, O17853 +17854, O17854 +17855, O17855 +17856, O17856 +17857, O17857 +17858, O17858 +17859, O17859 +17860, O17860 +17861, O17861 +17862, O17862 +17863, O17863 +17864, O17864 +17865, O17865 +17866, O17866 +17867, O17867 +17868, O17868 +17869, O17869 +17870, O17870 +17871, O17871 +17872, O17872 +17873, O17873 +17874, O17874 +17875, O17875 +17876, O17876 +17877, O17877 +17878, O17878 +17879, O17879 +17880, O17880 +17881, O17881 +17882, O17882 +17883, O17883 +17884, O17884 +17885, O17885 +17886, O17886 +17887, O17887 +17888, O17888 +17889, O17889 +17890, O17890 +17891, O17891 +17892, O17892 +17893, O17893 +17894, O17894 +17895, O17895 +17896, O17896 +17897, O17897 +17898, O17898 +17899, O17899 +17900, O17900 +17901, O17901 +17902, O17902 +17903, O17903 +17904, O17904 +17905, O17905 +17906, O17906 +17907, O17907 +17908, O17908 +17909, O17909 +17910, O17910 +17911, O17911 +17912, O17912 +17913, O17913 +17914, O17914 +17915, O17915 +17916, O17916 +17917, O17917 +17918, O17918 +17919, O17919 +17920, O17920 +17921, O17921 +17922, O17922 +17923, O17923 +17924, O17924 +17925, O17925 +17926, O17926 +17927, O17927 +17928, O17928 +17929, O17929 +17930, O17930 +17931, O17931 +17932, O17932 +17933, O17933 +17934, O17934 +17935, O17935 +17936, O17936 +17937, O17937 +17938, O17938 +17939, O17939 +17940, O17940 +17941, O17941 +17942, O17942 +17943, O17943 +17944, O17944 +17945, O17945 +17946, O17946 +17947, O17947 +17948, O17948 +17949, O17949 +17950, O17950 +17951, O17951 +17952, O17952 +17953, O17953 +17954, O17954 +17955, O17955 +17956, O17956 +17957, O17957 +17958, O17958 +17959, O17959 +17960, O17960 +17961, O17961 +17962, O17962 +17963, O17963 +17964, O17964 +17965, O17965 +17966, O17966 +17967, O17967 +17968, O17968 +17969, O17969 +17970, O17970 +17971, O17971 +17972, O17972 +17973, O17973 +17974, O17974 +17975, O17975 +17976, O17976 +17977, O17977 +17978, O17978 +17979, O17979 +17980, O17980 +17981, O17981 +17982, O17982 +17983, O17983 +17984, O17984 +17985, O17985 +17986, O17986 +17987, O17987 +17988, O17988 +17989, O17989 +17990, O17990 +17991, O17991 +17992, O17992 +17993, O17993 +17994, O17994 +17995, O17995 +17996, O17996 +17997, O17997 +17998, O17998 +17999, O17999 +18000, O18000 +18001, O18001 +18002, O18002 +18003, O18003 +18004, O18004 +18005, O18005 +18006, O18006 +18007, O18007 +18008, O18008 +18009, O18009 +18010, O18010 +18011, O18011 +18012, O18012 +18013, O18013 +18014, O18014 +18015, O18015 +18016, O18016 +18017, O18017 +18018, O18018 +18019, O18019 +18020, O18020 +18021, O18021 +18022, O18022 +18023, O18023 +18024, O18024 +18025, O18025 +18026, O18026 +18027, O18027 +18028, O18028 +18029, O18029 +18030, O18030 +18031, O18031 +18032, O18032 +18033, O18033 +18034, O18034 +18035, O18035 +18036, O18036 +18037, O18037 +18038, O18038 +18039, O18039 +18040, O18040 +18041, O18041 +18042, O18042 +18043, O18043 +18044, O18044 +18045, O18045 +18046, O18046 +18047, O18047 +18048, O18048 +18049, O18049 +18050, O18050 +18051, O18051 +18052, O18052 +18053, O18053 +18054, O18054 +18055, O18055 +18056, O18056 +18057, O18057 +18058, O18058 +18059, O18059 +18060, O18060 +18061, O18061 +18062, O18062 +18063, O18063 +18064, O18064 +18065, O18065 +18066, O18066 +18067, O18067 +18068, O18068 +18069, O18069 +18070, O18070 +18071, O18071 +18072, O18072 +18073, O18073 +18074, O18074 +18075, O18075 +18076, O18076 +18077, O18077 +18078, O18078 +18079, O18079 +18080, O18080 +18081, O18081 +18082, O18082 +18083, O18083 +18084, O18084 +18085, O18085 +18086, O18086 +18087, O18087 +18088, O18088 +18089, O18089 +18090, O18090 +18091, O18091 +18092, O18092 +18093, O18093 +18094, O18094 +18095, O18095 +18096, O18096 +18097, O18097 +18098, O18098 +18099, O18099 +18100, O18100 +18101, O18101 +18102, O18102 +18103, O18103 +18104, O18104 +18105, O18105 +18106, O18106 +18107, O18107 +18108, O18108 +18109, O18109 +18110, O18110 +18111, O18111 +18112, O18112 +18113, O18113 +18114, O18114 +18115, O18115 +18116, O18116 +18117, O18117 +18118, O18118 +18119, O18119 +18120, O18120 +18121, O18121 +18122, O18122 +18123, O18123 +18124, O18124 +18125, O18125 +18126, O18126 +18127, O18127 +18128, O18128 +18129, O18129 +18130, O18130 +18131, O18131 +18132, O18132 +18133, O18133 +18134, O18134 +18135, O18135 +18136, O18136 +18137, O18137 +18138, O18138 +18139, O18139 +18140, O18140 +18141, O18141 +18142, O18142 +18143, O18143 +18144, O18144 +18145, O18145 +18146, O18146 +18147, O18147 +18148, O18148 +18149, O18149 +18150, O18150 +18151, O18151 +18152, O18152 +18153, O18153 +18154, O18154 +18155, O18155 +18156, O18156 +18157, O18157 +18158, O18158 +18159, O18159 +18160, O18160 +18161, O18161 +18162, O18162 +18163, O18163 +18164, O18164 +18165, O18165 +18166, O18166 +18167, O18167 +18168, O18168 +18169, O18169 +18170, O18170 +18171, O18171 +18172, O18172 +18173, O18173 +18174, O18174 +18175, O18175 +18176, O18176 +18177, O18177 +18178, O18178 +18179, O18179 +18180, O18180 +18181, O18181 +18182, O18182 +18183, O18183 +18184, O18184 +18185, O18185 +18186, O18186 +18187, O18187 +18188, O18188 +18189, O18189 +18190, O18190 +18191, O18191 +18192, O18192 +18193, O18193 +18194, O18194 +18195, O18195 +18196, O18196 +18197, O18197 +18198, O18198 +18199, O18199 +18200, O18200 +18201, O18201 +18202, O18202 +18203, O18203 +18204, O18204 +18205, O18205 +18206, O18206 +18207, O18207 +18208, O18208 +18209, O18209 +18210, O18210 +18211, O18211 +18212, O18212 +18213, O18213 +18214, O18214 +18215, O18215 +18216, O18216 +18217, O18217 +18218, O18218 +18219, O18219 +18220, O18220 +18221, O18221 +18222, O18222 +18223, O18223 +18224, O18224 +18225, O18225 +18226, O18226 +18227, O18227 +18228, O18228 +18229, O18229 +18230, O18230 +18231, O18231 +18232, O18232 +18233, O18233 +18234, O18234 +18235, O18235 +18236, O18236 +18237, O18237 +18238, O18238 +18239, O18239 +18240, O18240 +18241, O18241 +18242, O18242 +18243, O18243 +18244, O18244 +18245, O18245 +18246, O18246 +18247, O18247 +18248, O18248 +18249, O18249 +18250, O18250 +18251, O18251 +18252, O18252 +18253, O18253 +18254, O18254 +18255, O18255 +18256, O18256 +18257, O18257 +18258, O18258 +18259, O18259 +18260, O18260 +18261, O18261 +18262, O18262 +18263, O18263 +18264, O18264 +18265, O18265 +18266, O18266 +18267, O18267 +18268, O18268 +18269, O18269 +18270, O18270 +18271, O18271 +18272, O18272 +18273, O18273 +18274, O18274 +18275, O18275 +18276, O18276 +18277, O18277 +18278, O18278 +18279, O18279 +18280, O18280 +18281, O18281 +18282, O18282 +18283, O18283 +18284, O18284 +18285, O18285 +18286, O18286 +18287, O18287 +18288, O18288 +18289, O18289 +18290, O18290 +18291, O18291 +18292, O18292 +18293, O18293 +18294, O18294 +18295, O18295 +18296, O18296 +18297, O18297 +18298, O18298 +18299, O18299 +18300, O18300 +18301, O18301 +18302, O18302 +18303, O18303 +18304, O18304 +18305, O18305 +18306, O18306 +18307, O18307 +18308, O18308 +18309, O18309 +18310, O18310 +18311, O18311 +18312, O18312 +18313, O18313 +18314, O18314 +18315, O18315 +18316, O18316 +18317, O18317 +18318, O18318 +18319, O18319 +18320, O18320 +18321, O18321 +18322, O18322 +18323, O18323 +18324, O18324 +18325, O18325 +18326, O18326 +18327, O18327 +18328, O18328 +18329, O18329 +18330, O18330 +18331, O18331 +18332, O18332 +18333, O18333 +18334, O18334 +18335, O18335 +18336, O18336 +18337, O18337 +18338, O18338 +18339, O18339 +18340, O18340 +18341, O18341 +18342, O18342 +18343, O18343 +18344, O18344 +18345, O18345 +18346, O18346 +18347, O18347 +18348, O18348 +18349, O18349 +18350, O18350 +18351, O18351 +18352, O18352 +18353, O18353 +18354, O18354 +18355, O18355 +18356, O18356 +18357, O18357 +18358, O18358 +18359, O18359 +18360, O18360 +18361, O18361 +18362, O18362 +18363, O18363 +18364, O18364 +18365, O18365 +18366, O18366 +18367, O18367 +18368, O18368 +18369, O18369 +18370, O18370 +18371, O18371 +18372, O18372 +18373, O18373 +18374, O18374 +18375, O18375 +18376, O18376 +18377, O18377 +18378, O18378 +18379, O18379 +18380, O18380 +18381, O18381 +18382, O18382 +18383, O18383 +18384, O18384 +18385, O18385 +18386, O18386 +18387, O18387 +18388, O18388 +18389, O18389 +18390, O18390 +18391, O18391 +18392, O18392 +18393, O18393 +18394, O18394 +18395, O18395 +18396, O18396 +18397, O18397 +18398, O18398 +18399, O18399 +18400, O18400 +18401, O18401 +18402, O18402 +18403, O18403 +18404, O18404 +18405, O18405 +18406, O18406 +18407, O18407 +18408, O18408 +18409, O18409 +18410, O18410 +18411, O18411 +18412, O18412 +18413, O18413 +18414, O18414 +18415, O18415 +18416, O18416 +18417, O18417 +18418, O18418 +18419, O18419 +18420, O18420 +18421, O18421 +18422, O18422 +18423, O18423 +18424, O18424 +18425, O18425 +18426, O18426 +18427, O18427 +18428, O18428 +18429, O18429 +18430, O18430 +18431, O18431 +18432, O18432 +18433, O18433 +18434, O18434 +18435, O18435 +18436, O18436 +18437, O18437 +18438, O18438 +18439, O18439 +18440, O18440 +18441, O18441 +18442, O18442 +18443, O18443 +18444, O18444 +18445, O18445 +18446, O18446 +18447, O18447 +18448, O18448 +18449, O18449 +18450, O18450 +18451, O18451 +18452, O18452 +18453, O18453 +18454, O18454 +18455, O18455 +18456, O18456 +18457, O18457 +18458, O18458 +18459, O18459 +18460, O18460 +18461, O18461 +18462, O18462 +18463, O18463 +18464, O18464 +18465, O18465 +18466, O18466 +18467, O18467 +18468, O18468 +18469, O18469 +18470, O18470 +18471, O18471 +18472, O18472 +18473, O18473 +18474, O18474 +18475, O18475 +18476, O18476 +18477, O18477 +18478, O18478 +18479, O18479 +18480, O18480 +18481, O18481 +18482, O18482 +18483, O18483 +18484, O18484 +18485, O18485 +18486, O18486 +18487, O18487 +18488, O18488 +18489, O18489 +18490, O18490 +18491, O18491 +18492, O18492 +18493, O18493 +18494, O18494 +18495, O18495 +18496, O18496 +18497, O18497 +18498, O18498 +18499, O18499 +18500, O18500 +18501, O18501 +18502, O18502 +18503, O18503 +18504, O18504 +18505, O18505 +18506, O18506 +18507, O18507 +18508, O18508 +18509, O18509 +18510, O18510 +18511, O18511 +18512, O18512 +18513, O18513 +18514, O18514 +18515, O18515 +18516, O18516 +18517, O18517 +18518, O18518 +18519, O18519 +18520, O18520 +18521, O18521 +18522, O18522 +18523, O18523 +18524, O18524 +18525, O18525 +18526, O18526 +18527, O18527 +18528, O18528 +18529, O18529 +18530, O18530 +18531, O18531 +18532, O18532 +18533, O18533 +18534, O18534 +18535, O18535 +18536, O18536 +18537, O18537 +18538, O18538 +18539, O18539 +18540, O18540 +18541, O18541 +18542, O18542 +18543, O18543 +18544, O18544 +18545, O18545 +18546, O18546 +18547, O18547 +18548, O18548 +18549, O18549 +18550, O18550 +18551, O18551 +18552, O18552 +18553, O18553 +18554, O18554 +18555, O18555 +18556, O18556 +18557, O18557 +18558, O18558 +18559, O18559 +18560, O18560 +18561, O18561 +18562, O18562 +18563, O18563 +18564, O18564 +18565, O18565 +18566, O18566 +18567, O18567 +18568, O18568 +18569, O18569 +18570, O18570 +18571, O18571 +18572, O18572 +18573, O18573 +18574, O18574 +18575, O18575 +18576, O18576 +18577, O18577 +18578, O18578 +18579, O18579 +18580, O18580 +18581, O18581 +18582, O18582 +18583, O18583 +18584, O18584 +18585, O18585 +18586, O18586 +18587, O18587 +18588, O18588 +18589, O18589 +18590, O18590 +18591, O18591 +18592, O18592 +18593, O18593 +18594, O18594 +18595, O18595 +18596, O18596 +18597, O18597 +18598, O18598 +18599, O18599 +18600, O18600 +18601, O18601 +18602, O18602 +18603, O18603 +18604, O18604 +18605, O18605 +18606, O18606 +18607, O18607 +18608, O18608 +18609, O18609 +18610, O18610 +18611, O18611 +18612, O18612 +18613, O18613 +18614, O18614 +18615, O18615 +18616, O18616 +18617, O18617 +18618, O18618 +18619, O18619 +18620, O18620 +18621, O18621 +18622, O18622 +18623, O18623 +18624, O18624 +18625, O18625 +18626, O18626 +18627, O18627 +18628, O18628 +18629, O18629 +18630, O18630 +18631, O18631 +18632, O18632 +18633, O18633 +18634, O18634 +18635, O18635 +18636, O18636 +18637, O18637 +18638, O18638 +18639, O18639 +18640, O18640 +18641, O18641 +18642, O18642 +18643, O18643 +18644, O18644 +18645, O18645 +18646, O18646 +18647, O18647 +18648, O18648 +18649, O18649 +18650, O18650 +18651, O18651 +18652, O18652 +18653, O18653 +18654, O18654 +18655, O18655 +18656, O18656 +18657, O18657 +18658, O18658 +18659, O18659 +18660, O18660 +18661, O18661 +18662, O18662 +18663, O18663 +18664, O18664 +18665, O18665 +18666, O18666 +18667, O18667 +18668, O18668 +18669, O18669 +18670, O18670 +18671, O18671 +18672, O18672 +18673, O18673 +18674, O18674 +18675, O18675 +18676, O18676 +18677, O18677 +18678, O18678 +18679, O18679 +18680, O18680 +18681, O18681 +18682, O18682 +18683, O18683 +18684, O18684 +18685, O18685 +18686, O18686 +18687, O18687 +18688, O18688 +18689, O18689 +18690, O18690 +18691, O18691 +18692, O18692 +18693, O18693 +18694, O18694 +18695, O18695 +18696, O18696 +18697, O18697 +18698, O18698 +18699, O18699 +18700, O18700 +18701, O18701 +18702, O18702 +18703, O18703 +18704, O18704 +18705, O18705 +18706, O18706 +18707, O18707 +18708, O18708 +18709, O18709 +18710, O18710 +18711, O18711 +18712, O18712 +18713, O18713 +18714, O18714 +18715, O18715 +18716, O18716 +18717, O18717 +18718, O18718 +18719, O18719 +18720, O18720 +18721, O18721 +18722, O18722 +18723, O18723 +18724, O18724 +18725, O18725 +18726, O18726 +18727, O18727 +18728, O18728 +18729, O18729 +18730, O18730 +18731, O18731 +18732, O18732 +18733, O18733 +18734, O18734 +18735, O18735 +18736, O18736 +18737, O18737 +18738, O18738 +18739, O18739 +18740, O18740 +18741, O18741 +18742, O18742 +18743, O18743 +18744, O18744 +18745, O18745 +18746, O18746 +18747, O18747 +18748, O18748 +18749, O18749 +18750, O18750 +18751, O18751 +18752, O18752 +18753, O18753 +18754, O18754 +18755, O18755 +18756, O18756 +18757, O18757 +18758, O18758 +18759, O18759 +18760, O18760 +18761, O18761 +18762, O18762 +18763, O18763 +18764, O18764 +18765, O18765 +18766, O18766 +18767, O18767 +18768, O18768 +18769, O18769 +18770, O18770 +18771, O18771 +18772, O18772 +18773, O18773 +18774, O18774 +18775, O18775 +18776, O18776 +18777, O18777 +18778, O18778 +18779, O18779 +18780, O18780 +18781, O18781 +18782, O18782 +18783, O18783 +18784, O18784 +18785, O18785 +18786, O18786 +18787, O18787 +18788, O18788 +18789, O18789 +18790, O18790 +18791, O18791 +18792, O18792 +18793, O18793 +18794, O18794 +18795, O18795 +18796, O18796 +18797, O18797 +18798, O18798 +18799, O18799 +18800, O18800 +18801, O18801 +18802, O18802 +18803, O18803 +18804, O18804 +18805, O18805 +18806, O18806 +18807, O18807 +18808, O18808 +18809, O18809 +18810, O18810 +18811, O18811 +18812, O18812 +18813, O18813 +18814, O18814 +18815, O18815 +18816, O18816 +18817, O18817 +18818, O18818 +18819, O18819 +18820, O18820 +18821, O18821 +18822, O18822 +18823, O18823 +18824, O18824 +18825, O18825 +18826, O18826 +18827, O18827 +18828, O18828 +18829, O18829 +18830, O18830 +18831, O18831 +18832, O18832 +18833, O18833 +18834, O18834 +18835, O18835 +18836, O18836 +18837, O18837 +18838, O18838 +18839, O18839 +18840, O18840 +18841, O18841 +18842, O18842 +18843, O18843 +18844, O18844 +18845, O18845 +18846, O18846 +18847, O18847 +18848, O18848 +18849, O18849 +18850, O18850 +18851, O18851 +18852, O18852 +18853, O18853 +18854, O18854 +18855, O18855 +18856, O18856 +18857, O18857 +18858, O18858 +18859, O18859 +18860, O18860 +18861, O18861 +18862, O18862 +18863, O18863 +18864, O18864 +18865, O18865 +18866, O18866 +18867, O18867 +18868, O18868 +18869, O18869 +18870, O18870 +18871, O18871 +18872, O18872 +18873, O18873 +18874, O18874 +18875, O18875 +18876, O18876 +18877, O18877 +18878, O18878 +18879, O18879 +18880, O18880 +18881, O18881 +18882, O18882 +18883, O18883 +18884, O18884 +18885, O18885 +18886, O18886 +18887, O18887 +18888, O18888 +18889, O18889 +18890, O18890 +18891, O18891 +18892, O18892 +18893, O18893 +18894, O18894 +18895, O18895 +18896, O18896 +18897, O18897 +18898, O18898 +18899, O18899 +18900, O18900 +18901, O18901 +18902, O18902 +18903, O18903 +18904, O18904 +18905, O18905 +18906, O18906 +18907, O18907 +18908, O18908 +18909, O18909 +18910, O18910 +18911, O18911 +18912, O18912 +18913, O18913 +18914, O18914 +18915, O18915 +18916, O18916 +18917, O18917 +18918, O18918 +18919, O18919 +18920, O18920 +18921, O18921 +18922, O18922 +18923, O18923 +18924, O18924 +18925, O18925 +18926, O18926 +18927, O18927 +18928, O18928 +18929, O18929 +18930, O18930 +18931, O18931 +18932, O18932 +18933, O18933 +18934, O18934 +18935, O18935 +18936, O18936 +18937, O18937 +18938, O18938 +18939, O18939 +18940, O18940 +18941, O18941 +18942, O18942 +18943, O18943 +18944, O18944 +18945, O18945 +18946, O18946 +18947, O18947 +18948, O18948 +18949, O18949 +18950, O18950 +18951, O18951 +18952, O18952 +18953, O18953 +18954, O18954 +18955, O18955 +18956, O18956 +18957, O18957 +18958, O18958 +18959, O18959 +18960, O18960 +18961, O18961 +18962, O18962 +18963, O18963 +18964, O18964 +18965, O18965 +18966, O18966 +18967, O18967 +18968, O18968 +18969, O18969 +18970, O18970 +18971, O18971 +18972, O18972 +18973, O18973 +18974, O18974 +18975, O18975 +18976, O18976 +18977, O18977 +18978, O18978 +18979, O18979 +18980, O18980 +18981, O18981 +18982, O18982 +18983, O18983 +18984, O18984 +18985, O18985 +18986, O18986 +18987, O18987 +18988, O18988 +18989, O18989 +18990, O18990 +18991, O18991 +18992, O18992 +18993, O18993 +18994, O18994 +18995, O18995 +18996, O18996 +18997, O18997 +18998, O18998 +18999, O18999 +19000, O19000 +19001, O19001 +19002, O19002 +19003, O19003 +19004, O19004 +19005, O19005 +19006, O19006 +19007, O19007 +19008, O19008 +19009, O19009 +19010, O19010 +19011, O19011 +19012, O19012 +19013, O19013 +19014, O19014 +19015, O19015 +19016, O19016 +19017, O19017 +19018, O19018 +19019, O19019 +19020, O19020 +19021, O19021 +19022, O19022 +19023, O19023 +19024, O19024 +19025, O19025 +19026, O19026 +19027, O19027 +19028, O19028 +19029, O19029 +19030, O19030 +19031, O19031 +19032, O19032 +19033, O19033 +19034, O19034 +19035, O19035 +19036, O19036 +19037, O19037 +19038, O19038 +19039, O19039 +19040, O19040 +19041, O19041 +19042, O19042 +19043, O19043 +19044, O19044 +19045, O19045 +19046, O19046 +19047, O19047 +19048, O19048 +19049, O19049 +19050, O19050 +19051, O19051 +19052, O19052 +19053, O19053 +19054, O19054 +19055, O19055 +19056, O19056 +19057, O19057 +19058, O19058 +19059, O19059 +19060, O19060 +19061, O19061 +19062, O19062 +19063, O19063 +19064, O19064 +19065, O19065 +19066, O19066 +19067, O19067 +19068, O19068 +19069, O19069 +19070, O19070 +19071, O19071 +19072, O19072 +19073, O19073 +19074, O19074 +19075, O19075 +19076, O19076 +19077, O19077 +19078, O19078 +19079, O19079 +19080, O19080 +19081, O19081 +19082, O19082 +19083, O19083 +19084, O19084 +19085, O19085 +19086, O19086 +19087, O19087 +19088, O19088 +19089, O19089 +19090, O19090 +19091, O19091 +19092, O19092 +19093, O19093 +19094, O19094 +19095, O19095 +19096, O19096 +19097, O19097 +19098, O19098 +19099, O19099 +19100, O19100 +19101, O19101 +19102, O19102 +19103, O19103 +19104, O19104 +19105, O19105 +19106, O19106 +19107, O19107 +19108, O19108 +19109, O19109 +19110, O19110 +19111, O19111 +19112, O19112 +19113, O19113 +19114, O19114 +19115, O19115 +19116, O19116 +19117, O19117 +19118, O19118 +19119, O19119 +19120, O19120 +19121, O19121 +19122, O19122 +19123, O19123 +19124, O19124 +19125, O19125 +19126, O19126 +19127, O19127 +19128, O19128 +19129, O19129 +19130, O19130 +19131, O19131 +19132, O19132 +19133, O19133 +19134, O19134 +19135, O19135 +19136, O19136 +19137, O19137 +19138, O19138 +19139, O19139 +19140, O19140 +19141, O19141 +19142, O19142 +19143, O19143 +19144, O19144 +19145, O19145 +19146, O19146 +19147, O19147 +19148, O19148 +19149, O19149 +19150, O19150 +19151, O19151 +19152, O19152 +19153, O19153 +19154, O19154 +19155, O19155 +19156, O19156 +19157, O19157 +19158, O19158 +19159, O19159 +19160, O19160 +19161, O19161 +19162, O19162 +19163, O19163 +19164, O19164 +19165, O19165 +19166, O19166 +19167, O19167 +19168, O19168 +19169, O19169 +19170, O19170 +19171, O19171 +19172, O19172 +19173, O19173 +19174, O19174 +19175, O19175 +19176, O19176 +19177, O19177 +19178, O19178 +19179, O19179 +19180, O19180 +19181, O19181 +19182, O19182 +19183, O19183 +19184, O19184 +19185, O19185 +19186, O19186 +19187, O19187 +19188, O19188 +19189, O19189 +19190, O19190 +19191, O19191 +19192, O19192 +19193, O19193 +19194, O19194 +19195, O19195 +19196, O19196 +19197, O19197 +19198, O19198 +19199, O19199 +19200, O19200 +19201, O19201 +19202, O19202 +19203, O19203 +19204, O19204 +19205, O19205 +19206, O19206 +19207, O19207 +19208, O19208 +19209, O19209 +19210, O19210 +19211, O19211 +19212, O19212 +19213, O19213 +19214, O19214 +19215, O19215 +19216, O19216 +19217, O19217 +19218, O19218 +19219, O19219 +19220, O19220 +19221, O19221 +19222, O19222 +19223, O19223 +19224, O19224 +19225, O19225 +19226, O19226 +19227, O19227 +19228, O19228 +19229, O19229 +19230, O19230 +19231, O19231 +19232, O19232 +19233, O19233 +19234, O19234 +19235, O19235 +19236, O19236 +19237, O19237 +19238, O19238 +19239, O19239 +19240, O19240 +19241, O19241 +19242, O19242 +19243, O19243 +19244, O19244 +19245, O19245 +19246, O19246 +19247, O19247 +19248, O19248 +19249, O19249 +19250, O19250 +19251, O19251 +19252, O19252 +19253, O19253 +19254, O19254 +19255, O19255 +19256, O19256 +19257, O19257 +19258, O19258 +19259, O19259 +19260, O19260 +19261, O19261 +19262, O19262 +19263, O19263 +19264, O19264 +19265, O19265 +19266, O19266 +19267, O19267 +19268, O19268 +19269, O19269 +19270, O19270 +19271, O19271 +19272, O19272 +19273, O19273 +19274, O19274 +19275, O19275 +19276, O19276 +19277, O19277 +19278, O19278 +19279, O19279 +19280, O19280 +19281, O19281 +19282, O19282 +19283, O19283 +19284, O19284 +19285, O19285 +19286, O19286 +19287, O19287 +19288, O19288 +19289, O19289 +19290, O19290 +19291, O19291 +19292, O19292 +19293, O19293 +19294, O19294 +19295, O19295 +19296, O19296 +19297, O19297 +19298, O19298 +19299, O19299 +19300, O19300 +19301, O19301 +19302, O19302 +19303, O19303 +19304, O19304 +19305, O19305 +19306, O19306 +19307, O19307 +19308, O19308 +19309, O19309 +19310, O19310 +19311, O19311 +19312, O19312 +19313, O19313 +19314, O19314 +19315, O19315 +19316, O19316 +19317, O19317 +19318, O19318 +19319, O19319 +19320, O19320 +19321, O19321 +19322, O19322 +19323, O19323 +19324, O19324 +19325, O19325 +19326, O19326 +19327, O19327 +19328, O19328 +19329, O19329 +19330, O19330 +19331, O19331 +19332, O19332 +19333, O19333 +19334, O19334 +19335, O19335 +19336, O19336 +19337, O19337 +19338, O19338 +19339, O19339 +19340, O19340 +19341, O19341 +19342, O19342 +19343, O19343 +19344, O19344 +19345, O19345 +19346, O19346 +19347, O19347 +19348, O19348 +19349, O19349 +19350, O19350 +19351, O19351 +19352, O19352 +19353, O19353 +19354, O19354 +19355, O19355 +19356, O19356 +19357, O19357 +19358, O19358 +19359, O19359 +19360, O19360 +19361, O19361 +19362, O19362 +19363, O19363 +19364, O19364 +19365, O19365 +19366, O19366 +19367, O19367 +19368, O19368 +19369, O19369 +19370, O19370 +19371, O19371 +19372, O19372 +19373, O19373 +19374, O19374 +19375, O19375 +19376, O19376 +19377, O19377 +19378, O19378 +19379, O19379 +19380, O19380 +19381, O19381 +19382, O19382 +19383, O19383 +19384, O19384 +19385, O19385 +19386, O19386 +19387, O19387 +19388, O19388 +19389, O19389 +19390, O19390 +19391, O19391 +19392, O19392 +19393, O19393 +19394, O19394 +19395, O19395 +19396, O19396 +19397, O19397 +19398, O19398 +19399, O19399 +19400, O19400 +19401, O19401 +19402, O19402 +19403, O19403 +19404, O19404 +19405, O19405 +19406, O19406 +19407, O19407 +19408, O19408 +19409, O19409 +19410, O19410 +19411, O19411 +19412, O19412 +19413, O19413 +19414, O19414 +19415, O19415 +19416, O19416 +19417, O19417 +19418, O19418 +19419, O19419 +19420, O19420 +19421, O19421 +19422, O19422 +19423, O19423 +19424, O19424 +19425, O19425 +19426, O19426 +19427, O19427 +19428, O19428 +19429, O19429 +19430, O19430 +19431, O19431 +19432, O19432 +19433, O19433 +19434, O19434 +19435, O19435 +19436, O19436 +19437, O19437 +19438, O19438 +19439, O19439 +19440, O19440 +19441, O19441 +19442, O19442 +19443, O19443 +19444, O19444 +19445, O19445 +19446, O19446 +19447, O19447 +19448, O19448 +19449, O19449 +19450, O19450 +19451, O19451 +19452, O19452 +19453, O19453 +19454, O19454 +19455, O19455 +19456, O19456 +19457, O19457 +19458, O19458 +19459, O19459 +19460, O19460 +19461, O19461 +19462, O19462 +19463, O19463 +19464, O19464 +19465, O19465 +19466, O19466 +19467, O19467 +19468, O19468 +19469, O19469 +19470, O19470 +19471, O19471 +19472, O19472 +19473, O19473 +19474, O19474 +19475, O19475 +19476, O19476 +19477, O19477 +19478, O19478 +19479, O19479 +19480, O19480 +19481, O19481 +19482, O19482 +19483, O19483 +19484, O19484 +19485, O19485 +19486, O19486 +19487, O19487 +19488, O19488 +19489, O19489 +19490, O19490 +19491, O19491 +19492, O19492 +19493, O19493 +19494, O19494 +19495, O19495 +19496, O19496 +19497, O19497 +19498, O19498 +19499, O19499 +19500, O19500 +19501, O19501 +19502, O19502 +19503, O19503 +19504, O19504 +19505, O19505 +19506, O19506 +19507, O19507 +19508, O19508 +19509, O19509 +19510, O19510 +19511, O19511 +19512, O19512 +19513, O19513 +19514, O19514 +19515, O19515 +19516, O19516 +19517, O19517 +19518, O19518 +19519, O19519 +19520, O19520 +19521, O19521 +19522, O19522 +19523, O19523 +19524, O19524 +19525, O19525 +19526, O19526 +19527, O19527 +19528, O19528 +19529, O19529 +19530, O19530 +19531, O19531 +19532, O19532 +19533, O19533 +19534, O19534 +19535, O19535 +19536, O19536 +19537, O19537 +19538, O19538 +19539, O19539 +19540, O19540 +19541, O19541 +19542, O19542 +19543, O19543 +19544, O19544 +19545, O19545 +19546, O19546 +19547, O19547 +19548, O19548 +19549, O19549 +19550, O19550 +19551, O19551 +19552, O19552 +19553, O19553 +19554, O19554 +19555, O19555 +19556, O19556 +19557, O19557 +19558, O19558 +19559, O19559 +19560, O19560 +19561, O19561 +19562, O19562 +19563, O19563 +19564, O19564 +19565, O19565 +19566, O19566 +19567, O19567 +19568, O19568 +19569, O19569 +19570, O19570 +19571, O19571 +19572, O19572 +19573, O19573 +19574, O19574 +19575, O19575 +19576, O19576 +19577, O19577 +19578, O19578 +19579, O19579 +19580, O19580 +19581, O19581 +19582, O19582 +19583, O19583 +19584, O19584 +19585, O19585 +19586, O19586 +19587, O19587 +19588, O19588 +19589, O19589 +19590, O19590 +19591, O19591 +19592, O19592 +19593, O19593 +19594, O19594 +19595, O19595 +19596, O19596 +19597, O19597 +19598, O19598 +19599, O19599 +19600, O19600 +19601, O19601 +19602, O19602 +19603, O19603 +19604, O19604 +19605, O19605 +19606, O19606 +19607, O19607 +19608, O19608 +19609, O19609 +19610, O19610 +19611, O19611 +19612, O19612 +19613, O19613 +19614, O19614 +19615, O19615 +19616, O19616 +19617, O19617 +19618, O19618 +19619, O19619 +19620, O19620 +19621, O19621 +19622, O19622 +19623, O19623 +19624, O19624 +19625, O19625 +19626, O19626 +19627, O19627 +19628, O19628 +19629, O19629 +19630, O19630 +19631, O19631 +19632, O19632 +19633, O19633 +19634, O19634 +19635, O19635 +19636, O19636 +19637, O19637 +19638, O19638 +19639, O19639 +19640, O19640 +19641, O19641 +19642, O19642 +19643, O19643 +19644, O19644 +19645, O19645 +19646, O19646 +19647, O19647 +19648, O19648 +19649, O19649 +19650, O19650 +19651, O19651 +19652, O19652 +19653, O19653 +19654, O19654 +19655, O19655 +19656, O19656 +19657, O19657 +19658, O19658 +19659, O19659 +19660, O19660 +19661, O19661 +19662, O19662 +19663, O19663 +19664, O19664 +19665, O19665 +19666, O19666 +19667, O19667 +19668, O19668 +19669, O19669 +19670, O19670 +19671, O19671 +19672, O19672 +19673, O19673 +19674, O19674 +19675, O19675 +19676, O19676 +19677, O19677 +19678, O19678 +19679, O19679 +19680, O19680 +19681, O19681 +19682, O19682 +19683, O19683 +19684, O19684 +19685, O19685 +19686, O19686 +19687, O19687 +19688, O19688 +19689, O19689 +19690, O19690 +19691, O19691 +19692, O19692 +19693, O19693 +19694, O19694 +19695, O19695 +19696, O19696 +19697, O19697 +19698, O19698 +19699, O19699 +19700, O19700 +19701, O19701 +19702, O19702 +19703, O19703 +19704, O19704 +19705, O19705 +19706, O19706 +19707, O19707 +19708, O19708 +19709, O19709 +19710, O19710 +19711, O19711 +19712, O19712 +19713, O19713 +19714, O19714 +19715, O19715 +19716, O19716 +19717, O19717 +19718, O19718 +19719, O19719 +19720, O19720 +19721, O19721 +19722, O19722 +19723, O19723 +19724, O19724 +19725, O19725 +19726, O19726 +19727, O19727 +19728, O19728 +19729, O19729 +19730, O19730 +19731, O19731 +19732, O19732 +19733, O19733 +19734, O19734 +19735, O19735 +19736, O19736 +19737, O19737 +19738, O19738 +19739, O19739 +19740, O19740 +19741, O19741 +19742, O19742 +19743, O19743 +19744, O19744 +19745, O19745 +19746, O19746 +19747, O19747 +19748, O19748 +19749, O19749 +19750, O19750 +19751, O19751 +19752, O19752 +19753, O19753 +19754, O19754 +19755, O19755 +19756, O19756 +19757, O19757 +19758, O19758 +19759, O19759 +19760, O19760 +19761, O19761 +19762, O19762 +19763, O19763 +19764, O19764 +19765, O19765 +19766, O19766 +19767, O19767 +19768, O19768 +19769, O19769 +19770, O19770 +19771, O19771 +19772, O19772 +19773, O19773 +19774, O19774 +19775, O19775 +19776, O19776 +19777, O19777 +19778, O19778 +19779, O19779 +19780, O19780 +19781, O19781 +19782, O19782 +19783, O19783 +19784, O19784 +19785, O19785 +19786, O19786 +19787, O19787 +19788, O19788 +19789, O19789 +19790, O19790 +19791, O19791 +19792, O19792 +19793, O19793 +19794, O19794 +19795, O19795 +19796, O19796 +19797, O19797 +19798, O19798 +19799, O19799 +19800, O19800 +19801, O19801 +19802, O19802 +19803, O19803 +19804, O19804 +19805, O19805 +19806, O19806 +19807, O19807 +19808, O19808 +19809, O19809 +19810, O19810 +19811, O19811 +19812, O19812 +19813, O19813 +19814, O19814 +19815, O19815 +19816, O19816 +19817, O19817 +19818, O19818 +19819, O19819 +19820, O19820 +19821, O19821 +19822, O19822 +19823, O19823 +19824, O19824 +19825, O19825 +19826, O19826 +19827, O19827 +19828, O19828 +19829, O19829 +19830, O19830 +19831, O19831 +19832, O19832 +19833, O19833 +19834, O19834 +19835, O19835 +19836, O19836 +19837, O19837 +19838, O19838 +19839, O19839 +19840, O19840 +19841, O19841 +19842, O19842 +19843, O19843 +19844, O19844 +19845, O19845 +19846, O19846 +19847, O19847 +19848, O19848 +19849, O19849 +19850, O19850 +19851, O19851 +19852, O19852 +19853, O19853 +19854, O19854 +19855, O19855 +19856, O19856 +19857, O19857 +19858, O19858 +19859, O19859 +19860, O19860 +19861, O19861 +19862, O19862 +19863, O19863 +19864, O19864 +19865, O19865 +19866, O19866 +19867, O19867 +19868, O19868 +19869, O19869 +19870, O19870 +19871, O19871 +19872, O19872 +19873, O19873 +19874, O19874 +19875, O19875 +19876, O19876 +19877, O19877 +19878, O19878 +19879, O19879 +19880, O19880 +19881, O19881 +19882, O19882 +19883, O19883 +19884, O19884 +19885, O19885 +19886, O19886 +19887, O19887 +19888, O19888 +19889, O19889 +19890, O19890 +19891, O19891 +19892, O19892 +19893, O19893 +19894, O19894 +19895, O19895 +19896, O19896 +19897, O19897 +19898, O19898 +19899, O19899 +19900, O19900 +19901, O19901 +19902, O19902 +19903, O19903 +19904, O19904 +19905, O19905 +19906, O19906 +19907, O19907 +19908, O19908 +19909, O19909 +19910, O19910 +19911, O19911 +19912, O19912 +19913, O19913 +19914, O19914 +19915, O19915 +19916, O19916 +19917, O19917 +19918, O19918 +19919, O19919 +19920, O19920 +19921, O19921 +19922, O19922 +19923, O19923 +19924, O19924 +19925, O19925 +19926, O19926 +19927, O19927 +19928, O19928 +19929, O19929 +19930, O19930 +19931, O19931 +19932, O19932 +19933, O19933 +19934, O19934 +19935, O19935 +19936, O19936 +19937, O19937 +19938, O19938 +19939, O19939 +19940, O19940 +19941, O19941 +19942, O19942 +19943, O19943 +19944, O19944 +19945, O19945 +19946, O19946 +19947, O19947 +19948, O19948 +19949, O19949 +19950, O19950 +19951, O19951 +19952, O19952 +19953, O19953 +19954, O19954 +19955, O19955 +19956, O19956 +19957, O19957 +19958, O19958 +19959, O19959 +19960, O19960 +19961, O19961 +19962, O19962 +19963, O19963 +19964, O19964 +19965, O19965 +19966, O19966 +19967, O19967 +19968, O19968 +19969, O19969 +19970, O19970 +19971, O19971 +19972, O19972 +19973, O19973 +19974, O19974 +19975, O19975 +19976, O19976 +19977, O19977 +19978, O19978 +19979, O19979 +19980, O19980 +19981, O19981 +19982, O19982 +19983, O19983 +19984, O19984 +19985, O19985 +19986, O19986 +19987, O19987 +19988, O19988 +19989, O19989 +19990, O19990 +19991, O19991 +19992, O19992 +19993, O19993 +19994, O19994 +19995, O19995 +19996, O19996 +19997, O19997 +19998, O19998 +19999, O19999 +20000, O20000 +20001, O20001 +20002, O20002 +20003, O20003 +20004, O20004 +20005, O20005 +20006, O20006 +20007, O20007 +20008, O20008 +20009, O20009 +20010, O20010 +20011, O20011 +20012, O20012 +20013, O20013 +20014, O20014 +20015, O20015 +20016, O20016 +20017, O20017 +20018, O20018 +20019, O20019 +20020, O20020 +20021, O20021 +20022, O20022 +20023, O20023 +20024, O20024 +20025, O20025 +20026, O20026 +20027, O20027 +20028, O20028 +20029, O20029 +20030, O20030 +20031, O20031 +20032, O20032 +20033, O20033 +20034, O20034 +20035, O20035 +20036, O20036 +20037, O20037 +20038, O20038 +20039, O20039 +20040, O20040 +20041, O20041 +20042, O20042 +20043, O20043 +20044, O20044 +20045, O20045 +20046, O20046 +20047, O20047 +20048, O20048 +20049, O20049 +20050, O20050 +20051, O20051 +20052, O20052 +20053, O20053 +20054, O20054 +20055, O20055 +20056, O20056 +20057, O20057 +20058, O20058 +20059, O20059 +20060, O20060 +20061, O20061 +20062, O20062 +20063, O20063 +20064, O20064 +20065, O20065 +20066, O20066 +20067, O20067 +20068, O20068 +20069, O20069 +20070, O20070 +20071, O20071 +20072, O20072 +20073, O20073 +20074, O20074 +20075, O20075 +20076, O20076 +20077, O20077 +20078, O20078 +20079, O20079 +20080, O20080 +20081, O20081 +20082, O20082 +20083, O20083 +20084, O20084 +20085, O20085 +20086, O20086 +20087, O20087 +20088, O20088 +20089, O20089 +20090, O20090 +20091, O20091 +20092, O20092 +20093, O20093 +20094, O20094 +20095, O20095 +20096, O20096 +20097, O20097 +20098, O20098 +20099, O20099 +20100, O20100 +20101, O20101 +20102, O20102 +20103, O20103 +20104, O20104 +20105, O20105 +20106, O20106 +20107, O20107 +20108, O20108 +20109, O20109 +20110, O20110 +20111, O20111 +20112, O20112 +20113, O20113 +20114, O20114 +20115, O20115 +20116, O20116 +20117, O20117 +20118, O20118 +20119, O20119 +20120, O20120 +20121, O20121 +20122, O20122 +20123, O20123 +20124, O20124 +20125, O20125 +20126, O20126 +20127, O20127 +20128, O20128 +20129, O20129 +20130, O20130 +20131, O20131 +20132, O20132 +20133, O20133 +20134, O20134 +20135, O20135 +20136, O20136 +20137, O20137 +20138, O20138 +20139, O20139 +20140, O20140 +20141, O20141 +20142, O20142 +20143, O20143 +20144, O20144 +20145, O20145 +20146, O20146 +20147, O20147 +20148, O20148 +20149, O20149 +20150, O20150 +20151, O20151 +20152, O20152 +20153, O20153 +20154, O20154 +20155, O20155 +20156, O20156 +20157, O20157 +20158, O20158 +20159, O20159 +20160, O20160 +20161, O20161 +20162, O20162 +20163, O20163 +20164, O20164 +20165, O20165 +20166, O20166 +20167, O20167 +20168, O20168 +20169, O20169 +20170, O20170 +20171, O20171 +20172, O20172 +20173, O20173 +20174, O20174 +20175, O20175 +20176, O20176 +20177, O20177 +20178, O20178 +20179, O20179 +20180, O20180 +20181, O20181 +20182, O20182 +20183, O20183 +20184, O20184 +20185, O20185 +20186, O20186 +20187, O20187 +20188, O20188 +20189, O20189 +20190, O20190 +20191, O20191 +20192, O20192 +20193, O20193 +20194, O20194 +20195, O20195 +20196, O20196 +20197, O20197 +20198, O20198 +20199, O20199 +20200, O20200 +20201, O20201 +20202, O20202 +20203, O20203 +20204, O20204 +20205, O20205 +20206, O20206 +20207, O20207 +20208, O20208 +20209, O20209 +20210, O20210 +20211, O20211 +20212, O20212 +20213, O20213 +20214, O20214 +20215, O20215 +20216, O20216 +20217, O20217 +20218, O20218 +20219, O20219 +20220, O20220 +20221, O20221 +20222, O20222 +20223, O20223 +20224, O20224 +20225, O20225 +20226, O20226 +20227, O20227 +20228, O20228 +20229, O20229 +20230, O20230 +20231, O20231 +20232, O20232 +20233, O20233 +20234, O20234 +20235, O20235 +20236, O20236 +20237, O20237 +20238, O20238 +20239, O20239 +20240, O20240 +20241, O20241 +20242, O20242 +20243, O20243 +20244, O20244 +20245, O20245 +20246, O20246 +20247, O20247 +20248, O20248 +20249, O20249 +20250, O20250 +20251, O20251 +20252, O20252 +20253, O20253 +20254, O20254 +20255, O20255 +20256, O20256 +20257, O20257 +20258, O20258 +20259, O20259 +20260, O20260 +20261, O20261 +20262, O20262 +20263, O20263 +20264, O20264 +20265, O20265 +20266, O20266 +20267, O20267 +20268, O20268 +20269, O20269 +20270, O20270 +20271, O20271 +20272, O20272 +20273, O20273 +20274, O20274 +20275, O20275 +20276, O20276 +20277, O20277 +20278, O20278 +20279, O20279 +20280, O20280 +20281, O20281 +20282, O20282 +20283, O20283 +20284, O20284 +20285, O20285 +20286, O20286 +20287, O20287 +20288, O20288 +20289, O20289 +20290, O20290 +20291, O20291 +20292, O20292 +20293, O20293 +20294, O20294 +20295, O20295 +20296, O20296 +20297, O20297 +20298, O20298 +20299, O20299 +20300, O20300 +20301, O20301 +20302, O20302 +20303, O20303 +20304, O20304 +20305, O20305 +20306, O20306 +20307, O20307 +20308, O20308 +20309, O20309 +20310, O20310 +20311, O20311 +20312, O20312 +20313, O20313 +20314, O20314 +20315, O20315 +20316, O20316 +20317, O20317 +20318, O20318 +20319, O20319 +20320, O20320 +20321, O20321 +20322, O20322 +20323, O20323 +20324, O20324 +20325, O20325 +20326, O20326 +20327, O20327 +20328, O20328 +20329, O20329 +20330, O20330 +20331, O20331 +20332, O20332 +20333, O20333 +20334, O20334 +20335, O20335 +20336, O20336 +20337, O20337 +20338, O20338 +20339, O20339 +20340, O20340 +20341, O20341 +20342, O20342 +20343, O20343 +20344, O20344 +20345, O20345 +20346, O20346 +20347, O20347 +20348, O20348 +20349, O20349 +20350, O20350 +20351, O20351 +20352, O20352 +20353, O20353 +20354, O20354 +20355, O20355 +20356, O20356 +20357, O20357 +20358, O20358 +20359, O20359 +20360, O20360 +20361, O20361 +20362, O20362 +20363, O20363 +20364, O20364 +20365, O20365 +20366, O20366 +20367, O20367 +20368, O20368 +20369, O20369 +20370, O20370 +20371, O20371 +20372, O20372 +20373, O20373 +20374, O20374 +20375, O20375 +20376, O20376 +20377, O20377 +20378, O20378 +20379, O20379 +20380, O20380 +20381, O20381 +20382, O20382 +20383, O20383 +20384, O20384 +20385, O20385 +20386, O20386 +20387, O20387 +20388, O20388 +20389, O20389 +20390, O20390 +20391, O20391 +20392, O20392 +20393, O20393 +20394, O20394 +20395, O20395 +20396, O20396 +20397, O20397 +20398, O20398 +20399, O20399 +20400, O20400 +20401, O20401 +20402, O20402 +20403, O20403 +20404, O20404 +20405, O20405 +20406, O20406 +20407, O20407 +20408, O20408 +20409, O20409 +20410, O20410 +20411, O20411 +20412, O20412 +20413, O20413 +20414, O20414 +20415, O20415 +20416, O20416 +20417, O20417 +20418, O20418 +20419, O20419 +20420, O20420 +20421, O20421 +20422, O20422 +20423, O20423 +20424, O20424 +20425, O20425 +20426, O20426 +20427, O20427 +20428, O20428 +20429, O20429 +20430, O20430 +20431, O20431 +20432, O20432 +20433, O20433 +20434, O20434 +20435, O20435 +20436, O20436 +20437, O20437 +20438, O20438 +20439, O20439 +20440, O20440 +20441, O20441 +20442, O20442 +20443, O20443 +20444, O20444 +20445, O20445 +20446, O20446 +20447, O20447 +20448, O20448 +20449, O20449 +20450, O20450 +20451, O20451 +20452, O20452 +20453, O20453 +20454, O20454 +20455, O20455 +20456, O20456 +20457, O20457 +20458, O20458 +20459, O20459 +20460, O20460 +20461, O20461 +20462, O20462 +20463, O20463 +20464, O20464 +20465, O20465 +20466, O20466 +20467, O20467 +20468, O20468 +20469, O20469 +20470, O20470 +20471, O20471 +20472, O20472 +20473, O20473 +20474, O20474 +20475, O20475 +20476, O20476 +20477, O20477 +20478, O20478 +20479, O20479 +20480, O20480 +20481, O20481 +20482, O20482 +20483, O20483 +20484, O20484 +20485, O20485 +20486, O20486 +20487, O20487 +20488, O20488 +20489, O20489 +20490, O20490 +20491, O20491 +20492, O20492 +20493, O20493 +20494, O20494 +20495, O20495 +20496, O20496 +20497, O20497 +20498, O20498 +20499, O20499 +20500, O20500 +20501, O20501 +20502, O20502 +20503, O20503 +20504, O20504 +20505, O20505 +20506, O20506 +20507, O20507 +20508, O20508 +20509, O20509 +20510, O20510 +20511, O20511 +20512, O20512 +20513, O20513 +20514, O20514 +20515, O20515 +20516, O20516 +20517, O20517 +20518, O20518 +20519, O20519 +20520, O20520 +20521, O20521 +20522, O20522 +20523, O20523 +20524, O20524 +20525, O20525 +20526, O20526 +20527, O20527 +20528, O20528 +20529, O20529 +20530, O20530 +20531, O20531 +20532, O20532 +20533, O20533 +20534, O20534 +20535, O20535 +20536, O20536 +20537, O20537 +20538, O20538 +20539, O20539 +20540, O20540 +20541, O20541 +20542, O20542 +20543, O20543 +20544, O20544 +20545, O20545 +20546, O20546 +20547, O20547 +20548, O20548 +20549, O20549 +20550, O20550 +20551, O20551 +20552, O20552 +20553, O20553 +20554, O20554 +20555, O20555 +20556, O20556 +20557, O20557 +20558, O20558 +20559, O20559 +20560, O20560 +20561, O20561 +20562, O20562 +20563, O20563 +20564, O20564 +20565, O20565 +20566, O20566 +20567, O20567 +20568, O20568 +20569, O20569 +20570, O20570 +20571, O20571 +20572, O20572 +20573, O20573 +20574, O20574 +20575, O20575 +20576, O20576 +20577, O20577 +20578, O20578 +20579, O20579 +20580, O20580 +20581, O20581 +20582, O20582 +20583, O20583 +20584, O20584 +20585, O20585 +20586, O20586 +20587, O20587 +20588, O20588 +20589, O20589 +20590, O20590 +20591, O20591 +20592, O20592 +20593, O20593 +20594, O20594 +20595, O20595 +20596, O20596 +20597, O20597 +20598, O20598 +20599, O20599 +20600, O20600 +20601, O20601 +20602, O20602 +20603, O20603 +20604, O20604 +20605, O20605 +20606, O20606 +20607, O20607 +20608, O20608 +20609, O20609 +20610, O20610 +20611, O20611 +20612, O20612 +20613, O20613 +20614, O20614 +20615, O20615 +20616, O20616 +20617, O20617 +20618, O20618 +20619, O20619 +20620, O20620 +20621, O20621 +20622, O20622 +20623, O20623 +20624, O20624 +20625, O20625 +20626, O20626 +20627, O20627 +20628, O20628 +20629, O20629 +20630, O20630 +20631, O20631 +20632, O20632 +20633, O20633 +20634, O20634 +20635, O20635 +20636, O20636 +20637, O20637 +20638, O20638 +20639, O20639 +20640, O20640 +20641, O20641 +20642, O20642 +20643, O20643 +20644, O20644 +20645, O20645 +20646, O20646 +20647, O20647 +20648, O20648 +20649, O20649 +20650, O20650 +20651, O20651 +20652, O20652 +20653, O20653 +20654, O20654 +20655, O20655 +20656, O20656 +20657, O20657 +20658, O20658 +20659, O20659 +20660, O20660 +20661, O20661 +20662, O20662 +20663, O20663 +20664, O20664 +20665, O20665 +20666, O20666 +20667, O20667 +20668, O20668 +20669, O20669 +20670, O20670 +20671, O20671 +20672, O20672 +20673, O20673 +20674, O20674 +20675, O20675 +20676, O20676 +20677, O20677 +20678, O20678 +20679, O20679 +20680, O20680 +20681, O20681 +20682, O20682 +20683, O20683 +20684, O20684 +20685, O20685 +20686, O20686 +20687, O20687 +20688, O20688 +20689, O20689 +20690, O20690 +20691, O20691 +20692, O20692 +20693, O20693 +20694, O20694 +20695, O20695 +20696, O20696 +20697, O20697 +20698, O20698 +20699, O20699 +20700, O20700 +20701, O20701 +20702, O20702 +20703, O20703 +20704, O20704 +20705, O20705 +20706, O20706 +20707, O20707 +20708, O20708 +20709, O20709 +20710, O20710 +20711, O20711 +20712, O20712 +20713, O20713 +20714, O20714 +20715, O20715 +20716, O20716 +20717, O20717 +20718, O20718 +20719, O20719 +20720, O20720 +20721, O20721 +20722, O20722 +20723, O20723 +20724, O20724 +20725, O20725 +20726, O20726 +20727, O20727 +20728, O20728 +20729, O20729 +20730, O20730 +20731, O20731 +20732, O20732 +20733, O20733 +20734, O20734 +20735, O20735 +20736, O20736 +20737, O20737 +20738, O20738 +20739, O20739 +20740, O20740 +20741, O20741 +20742, O20742 +20743, O20743 +20744, O20744 +20745, O20745 +20746, O20746 +20747, O20747 +20748, O20748 +20749, O20749 +20750, O20750 +20751, O20751 +20752, O20752 +20753, O20753 +20754, O20754 +20755, O20755 +20756, O20756 +20757, O20757 +20758, O20758 +20759, O20759 +20760, O20760 +20761, O20761 +20762, O20762 +20763, O20763 +20764, O20764 +20765, O20765 +20766, O20766 +20767, O20767 +20768, O20768 +20769, O20769 +20770, O20770 +20771, O20771 +20772, O20772 +20773, O20773 +20774, O20774 +20775, O20775 +20776, O20776 +20777, O20777 +20778, O20778 +20779, O20779 +20780, O20780 +20781, O20781 +20782, O20782 +20783, O20783 +20784, O20784 +20785, O20785 +20786, O20786 +20787, O20787 +20788, O20788 +20789, O20789 +20790, O20790 +20791, O20791 +20792, O20792 +20793, O20793 +20794, O20794 +20795, O20795 +20796, O20796 +20797, O20797 +20798, O20798 +20799, O20799 +20800, O20800 +20801, O20801 +20802, O20802 +20803, O20803 +20804, O20804 +20805, O20805 +20806, O20806 +20807, O20807 +20808, O20808 +20809, O20809 +20810, O20810 +20811, O20811 +20812, O20812 +20813, O20813 +20814, O20814 +20815, O20815 +20816, O20816 +20817, O20817 +20818, O20818 +20819, O20819 +20820, O20820 +20821, O20821 +20822, O20822 +20823, O20823 +20824, O20824 +20825, O20825 +20826, O20826 +20827, O20827 +20828, O20828 +20829, O20829 +20830, O20830 +20831, O20831 +20832, O20832 +20833, O20833 +20834, O20834 +20835, O20835 +20836, O20836 +20837, O20837 +20838, O20838 +20839, O20839 +20840, O20840 +20841, O20841 +20842, O20842 +20843, O20843 +20844, O20844 +20845, O20845 +20846, O20846 +20847, O20847 +20848, O20848 +20849, O20849 +20850, O20850 +20851, O20851 +20852, O20852 +20853, O20853 +20854, O20854 +20855, O20855 +20856, O20856 +20857, O20857 +20858, O20858 +20859, O20859 +20860, O20860 +20861, O20861 +20862, O20862 +20863, O20863 +20864, O20864 +20865, O20865 +20866, O20866 +20867, O20867 +20868, O20868 +20869, O20869 +20870, O20870 +20871, O20871 +20872, O20872 +20873, O20873 +20874, O20874 +20875, O20875 +20876, O20876 +20877, O20877 +20878, O20878 +20879, O20879 +20880, O20880 +20881, O20881 +20882, O20882 +20883, O20883 +20884, O20884 +20885, O20885 +20886, O20886 +20887, O20887 +20888, O20888 +20889, O20889 +20890, O20890 +20891, O20891 +20892, O20892 +20893, O20893 +20894, O20894 +20895, O20895 +20896, O20896 +20897, O20897 +20898, O20898 +20899, O20899 +20900, O20900 +20901, O20901 +20902, O20902 +20903, O20903 +20904, O20904 +20905, O20905 +20906, O20906 +20907, O20907 +20908, O20908 +20909, O20909 +20910, O20910 +20911, O20911 +20912, O20912 +20913, O20913 +20914, O20914 +20915, O20915 +20916, O20916 +20917, O20917 +20918, O20918 +20919, O20919 +20920, O20920 +20921, O20921 +20922, O20922 +20923, O20923 +20924, O20924 +20925, O20925 +20926, O20926 +20927, O20927 +20928, O20928 +20929, O20929 +20930, O20930 +20931, O20931 +20932, O20932 +20933, O20933 +20934, O20934 +20935, O20935 +20936, O20936 +20937, O20937 +20938, O20938 +20939, O20939 +20940, O20940 +20941, O20941 +20942, O20942 +20943, O20943 +20944, O20944 +20945, O20945 +20946, O20946 +20947, O20947 +20948, O20948 +20949, O20949 +20950, O20950 +20951, O20951 +20952, O20952 +20953, O20953 +20954, O20954 +20955, O20955 +20956, O20956 +20957, O20957 +20958, O20958 +20959, O20959 +20960, O20960 +20961, O20961 +20962, O20962 +20963, O20963 +20964, O20964 +20965, O20965 +20966, O20966 +20967, O20967 +20968, O20968 +20969, O20969 +20970, O20970 +20971, O20971 +20972, O20972 +20973, O20973 +20974, O20974 +20975, O20975 +20976, O20976 +20977, O20977 +20978, O20978 +20979, O20979 +20980, O20980 +20981, O20981 +20982, O20982 +20983, O20983 +20984, O20984 +20985, O20985 +20986, O20986 +20987, O20987 +20988, O20988 +20989, O20989 +20990, O20990 +20991, O20991 +20992, O20992 +20993, O20993 +20994, O20994 +20995, O20995 +20996, O20996 +20997, O20997 +20998, O20998 +20999, O20999 +21000, O21000 +21001, O21001 +21002, O21002 +21003, O21003 +21004, O21004 +21005, O21005 +21006, O21006 +21007, O21007 +21008, O21008 +21009, O21009 +21010, O21010 +21011, O21011 +21012, O21012 +21013, O21013 +21014, O21014 +21015, O21015 +21016, O21016 +21017, O21017 +21018, O21018 +21019, O21019 +21020, O21020 +21021, O21021 +21022, O21022 +21023, O21023 +21024, O21024 +21025, O21025 +21026, O21026 +21027, O21027 +21028, O21028 +21029, O21029 +21030, O21030 +21031, O21031 +21032, O21032 +21033, O21033 +21034, O21034 +21035, O21035 +21036, O21036 +21037, O21037 +21038, O21038 +21039, O21039 +21040, O21040 +21041, O21041 +21042, O21042 +21043, O21043 +21044, O21044 +21045, O21045 +21046, O21046 +21047, O21047 +21048, O21048 +21049, O21049 +21050, O21050 +21051, O21051 +21052, O21052 +21053, O21053 +21054, O21054 +21055, O21055 +21056, O21056 +21057, O21057 +21058, O21058 +21059, O21059 +21060, O21060 +21061, O21061 +21062, O21062 +21063, O21063 +21064, O21064 +21065, O21065 +21066, O21066 +21067, O21067 +21068, O21068 +21069, O21069 +21070, O21070 +21071, O21071 +21072, O21072 +21073, O21073 +21074, O21074 +21075, O21075 +21076, O21076 +21077, O21077 +21078, O21078 +21079, O21079 +21080, O21080 +21081, O21081 +21082, O21082 +21083, O21083 +21084, O21084 +21085, O21085 +21086, O21086 +21087, O21087 +21088, O21088 +21089, O21089 +21090, O21090 +21091, O21091 +21092, O21092 +21093, O21093 +21094, O21094 +21095, O21095 +21096, O21096 +21097, O21097 +21098, O21098 +21099, O21099 +21100, O21100 +21101, O21101 +21102, O21102 +21103, O21103 +21104, O21104 +21105, O21105 +21106, O21106 +21107, O21107 +21108, O21108 +21109, O21109 +21110, O21110 +21111, O21111 +21112, O21112 +21113, O21113 +21114, O21114 +21115, O21115 +21116, O21116 +21117, O21117 +21118, O21118 +21119, O21119 +21120, O21120 +21121, O21121 +21122, O21122 +21123, O21123 +21124, O21124 +21125, O21125 +21126, O21126 +21127, O21127 +21128, O21128 +21129, O21129 +21130, O21130 +21131, O21131 +21132, O21132 +21133, O21133 +21134, O21134 +21135, O21135 +21136, O21136 +21137, O21137 +21138, O21138 +21139, O21139 +21140, O21140 +21141, O21141 +21142, O21142 +21143, O21143 +21144, O21144 +21145, O21145 +21146, O21146 +21147, O21147 +21148, O21148 +21149, O21149 +21150, O21150 +21151, O21151 +21152, O21152 +21153, O21153 +21154, O21154 +21155, O21155 +21156, O21156 +21157, O21157 +21158, O21158 +21159, O21159 +21160, O21160 +21161, O21161 +21162, O21162 +21163, O21163 +21164, O21164 +21165, O21165 +21166, O21166 +21167, O21167 +21168, O21168 +21169, O21169 +21170, O21170 +21171, O21171 +21172, O21172 +21173, O21173 +21174, O21174 +21175, O21175 +21176, O21176 +21177, O21177 +21178, O21178 +21179, O21179 +21180, O21180 +21181, O21181 +21182, O21182 +21183, O21183 +21184, O21184 +21185, O21185 +21186, O21186 +21187, O21187 +21188, O21188 +21189, O21189 +21190, O21190 +21191, O21191 +21192, O21192 +21193, O21193 +21194, O21194 +21195, O21195 +21196, O21196 +21197, O21197 +21198, O21198 +21199, O21199 +21200, O21200 +21201, O21201 +21202, O21202 +21203, O21203 +21204, O21204 +21205, O21205 +21206, O21206 +21207, O21207 +21208, O21208 +21209, O21209 +21210, O21210 +21211, O21211 +21212, O21212 +21213, O21213 +21214, O21214 +21215, O21215 +21216, O21216 +21217, O21217 +21218, O21218 +21219, O21219 +21220, O21220 +21221, O21221 +21222, O21222 +21223, O21223 +21224, O21224 +21225, O21225 +21226, O21226 +21227, O21227 +21228, O21228 +21229, O21229 +21230, O21230 +21231, O21231 +21232, O21232 +21233, O21233 +21234, O21234 +21235, O21235 +21236, O21236 +21237, O21237 +21238, O21238 +21239, O21239 +21240, O21240 +21241, O21241 +21242, O21242 +21243, O21243 +21244, O21244 +21245, O21245 +21246, O21246 +21247, O21247 +21248, O21248 +21249, O21249 +21250, O21250 +21251, O21251 +21252, O21252 +21253, O21253 +21254, O21254 +21255, O21255 +21256, O21256 +21257, O21257 +21258, O21258 +21259, O21259 +21260, O21260 +21261, O21261 +21262, O21262 +21263, O21263 +21264, O21264 +21265, O21265 +21266, O21266 +21267, O21267 +21268, O21268 +21269, O21269 +21270, O21270 +21271, O21271 +21272, O21272 +21273, O21273 +21274, O21274 +21275, O21275 +21276, O21276 +21277, O21277 +21278, O21278 +21279, O21279 +21280, O21280 +21281, O21281 +21282, O21282 +21283, O21283 +21284, O21284 +21285, O21285 +21286, O21286 +21287, O21287 +21288, O21288 +21289, O21289 +21290, O21290 +21291, O21291 +21292, O21292 +21293, O21293 +21294, O21294 +21295, O21295 +21296, O21296 +21297, O21297 +21298, O21298 +21299, O21299 +21300, O21300 +21301, O21301 +21302, O21302 +21303, O21303 +21304, O21304 +21305, O21305 +21306, O21306 +21307, O21307 +21308, O21308 +21309, O21309 +21310, O21310 +21311, O21311 +21312, O21312 +21313, O21313 +21314, O21314 +21315, O21315 +21316, O21316 +21317, O21317 +21318, O21318 +21319, O21319 +21320, O21320 +21321, O21321 +21322, O21322 +21323, O21323 +21324, O21324 +21325, O21325 +21326, O21326 +21327, O21327 +21328, O21328 +21329, O21329 +21330, O21330 +21331, O21331 +21332, O21332 +21333, O21333 +21334, O21334 +21335, O21335 +21336, O21336 +21337, O21337 +21338, O21338 +21339, O21339 +21340, O21340 +21341, O21341 +21342, O21342 +21343, O21343 +21344, O21344 +21345, O21345 +21346, O21346 +21347, O21347 +21348, O21348 +21349, O21349 +21350, O21350 +21351, O21351 +21352, O21352 +21353, O21353 +21354, O21354 +21355, O21355 +21356, O21356 +21357, O21357 +21358, O21358 +21359, O21359 +21360, O21360 +21361, O21361 +21362, O21362 +21363, O21363 +21364, O21364 +21365, O21365 +21366, O21366 +21367, O21367 +21368, O21368 +21369, O21369 +21370, O21370 +21371, O21371 +21372, O21372 +21373, O21373 +21374, O21374 +21375, O21375 +21376, O21376 +21377, O21377 +21378, O21378 +21379, O21379 +21380, O21380 +21381, O21381 +21382, O21382 +21383, O21383 +21384, O21384 +21385, O21385 +21386, O21386 +21387, O21387 +21388, O21388 +21389, O21389 +21390, O21390 +21391, O21391 +21392, O21392 +21393, O21393 +21394, O21394 +21395, O21395 +21396, O21396 +21397, O21397 +21398, O21398 +21399, O21399 +21400, O21400 +21401, O21401 +21402, O21402 +21403, O21403 +21404, O21404 +21405, O21405 +21406, O21406 +21407, O21407 +21408, O21408 +21409, O21409 +21410, O21410 +21411, O21411 +21412, O21412 +21413, O21413 +21414, O21414 +21415, O21415 +21416, O21416 +21417, O21417 +21418, O21418 +21419, O21419 +21420, O21420 +21421, O21421 +21422, O21422 +21423, O21423 +21424, O21424 +21425, O21425 +21426, O21426 +21427, O21427 +21428, O21428 +21429, O21429 +21430, O21430 +21431, O21431 +21432, O21432 +21433, O21433 +21434, O21434 +21435, O21435 +21436, O21436 +21437, O21437 +21438, O21438 +21439, O21439 +21440, O21440 +21441, O21441 +21442, O21442 +21443, O21443 +21444, O21444 +21445, O21445 +21446, O21446 +21447, O21447 +21448, O21448 +21449, O21449 +21450, O21450 +21451, O21451 +21452, O21452 +21453, O21453 +21454, O21454 +21455, O21455 +21456, O21456 +21457, O21457 +21458, O21458 +21459, O21459 +21460, O21460 +21461, O21461 +21462, O21462 +21463, O21463 +21464, O21464 +21465, O21465 +21466, O21466 +21467, O21467 +21468, O21468 +21469, O21469 +21470, O21470 +21471, O21471 +21472, O21472 +21473, O21473 +21474, O21474 +21475, O21475 +21476, O21476 +21477, O21477 +21478, O21478 +21479, O21479 +21480, O21480 +21481, O21481 +21482, O21482 +21483, O21483 +21484, O21484 +21485, O21485 +21486, O21486 +21487, O21487 +21488, O21488 +21489, O21489 +21490, O21490 +21491, O21491 +21492, O21492 +21493, O21493 +21494, O21494 +21495, O21495 +21496, O21496 +21497, O21497 +21498, O21498 +21499, O21499 +21500, O21500 +21501, O21501 +21502, O21502 +21503, O21503 +21504, O21504 +21505, O21505 +21506, O21506 +21507, O21507 +21508, O21508 +21509, O21509 +21510, O21510 +21511, O21511 +21512, O21512 +21513, O21513 +21514, O21514 +21515, O21515 +21516, O21516 +21517, O21517 +21518, O21518 +21519, O21519 +21520, O21520 +21521, O21521 +21522, O21522 +21523, O21523 +21524, O21524 +21525, O21525 +21526, O21526 +21527, O21527 +21528, O21528 +21529, O21529 +21530, O21530 +21531, O21531 +21532, O21532 +21533, O21533 +21534, O21534 +21535, O21535 +21536, O21536 +21537, O21537 +21538, O21538 +21539, O21539 +21540, O21540 +21541, O21541 +21542, O21542 +21543, O21543 +21544, O21544 +21545, O21545 +21546, O21546 +21547, O21547 +21548, O21548 +21549, O21549 +21550, O21550 +21551, O21551 +21552, O21552 +21553, O21553 +21554, O21554 +21555, O21555 +21556, O21556 +21557, O21557 +21558, O21558 +21559, O21559 +21560, O21560 +21561, O21561 +21562, O21562 +21563, O21563 +21564, O21564 +21565, O21565 +21566, O21566 +21567, O21567 +21568, O21568 +21569, O21569 +21570, O21570 +21571, O21571 +21572, O21572 +21573, O21573 +21574, O21574 +21575, O21575 +21576, O21576 +21577, O21577 +21578, O21578 +21579, O21579 +21580, O21580 +21581, O21581 +21582, O21582 +21583, O21583 +21584, O21584 +21585, O21585 +21586, O21586 +21587, O21587 +21588, O21588 +21589, O21589 +21590, O21590 +21591, O21591 +21592, O21592 +21593, O21593 +21594, O21594 +21595, O21595 +21596, O21596 +21597, O21597 +21598, O21598 +21599, O21599 +21600, O21600 +21601, O21601 +21602, O21602 +21603, O21603 +21604, O21604 +21605, O21605 +21606, O21606 +21607, O21607 +21608, O21608 +21609, O21609 +21610, O21610 +21611, O21611 +21612, O21612 +21613, O21613 +21614, O21614 +21615, O21615 +21616, O21616 +21617, O21617 +21618, O21618 +21619, O21619 +21620, O21620 +21621, O21621 +21622, O21622 +21623, O21623 +21624, O21624 +21625, O21625 +21626, O21626 +21627, O21627 +21628, O21628 +21629, O21629 +21630, O21630 +21631, O21631 +21632, O21632 +21633, O21633 +21634, O21634 +21635, O21635 +21636, O21636 +21637, O21637 +21638, O21638 +21639, O21639 +21640, O21640 +21641, O21641 +21642, O21642 +21643, O21643 +21644, O21644 +21645, O21645 +21646, O21646 +21647, O21647 +21648, O21648 +21649, O21649 +21650, O21650 +21651, O21651 +21652, O21652 +21653, O21653 +21654, O21654 +21655, O21655 +21656, O21656 +21657, O21657 +21658, O21658 +21659, O21659 +21660, O21660 +21661, O21661 +21662, O21662 +21663, O21663 +21664, O21664 +21665, O21665 +21666, O21666 +21667, O21667 +21668, O21668 +21669, O21669 +21670, O21670 +21671, O21671 +21672, O21672 +21673, O21673 +21674, O21674 +21675, O21675 +21676, O21676 +21677, O21677 +21678, O21678 +21679, O21679 +21680, O21680 +21681, O21681 +21682, O21682 +21683, O21683 +21684, O21684 +21685, O21685 +21686, O21686 +21687, O21687 +21688, O21688 +21689, O21689 +21690, O21690 +21691, O21691 +21692, O21692 +21693, O21693 +21694, O21694 +21695, O21695 +21696, O21696 +21697, O21697 +21698, O21698 +21699, O21699 +21700, O21700 +21701, O21701 +21702, O21702 +21703, O21703 +21704, O21704 +21705, O21705 +21706, O21706 +21707, O21707 +21708, O21708 +21709, O21709 +21710, O21710 +21711, O21711 +21712, O21712 +21713, O21713 +21714, O21714 +21715, O21715 +21716, O21716 +21717, O21717 +21718, O21718 +21719, O21719 +21720, O21720 +21721, O21721 +21722, O21722 +21723, O21723 +21724, O21724 +21725, O21725 +21726, O21726 +21727, O21727 +21728, O21728 +21729, O21729 +21730, O21730 +21731, O21731 +21732, O21732 +21733, O21733 +21734, O21734 +21735, O21735 +21736, O21736 +21737, O21737 +21738, O21738 +21739, O21739 +21740, O21740 +21741, O21741 +21742, O21742 +21743, O21743 +21744, O21744 +21745, O21745 +21746, O21746 +21747, O21747 +21748, O21748 +21749, O21749 +21750, O21750 +21751, O21751 +21752, O21752 +21753, O21753 +21754, O21754 +21755, O21755 +21756, O21756 +21757, O21757 +21758, O21758 +21759, O21759 +21760, O21760 +21761, O21761 +21762, O21762 +21763, O21763 +21764, O21764 +21765, O21765 +21766, O21766 +21767, O21767 +21768, O21768 +21769, O21769 +21770, O21770 +21771, O21771 +21772, O21772 +21773, O21773 +21774, O21774 +21775, O21775 +21776, O21776 +21777, O21777 +21778, O21778 +21779, O21779 +21780, O21780 +21781, O21781 +21782, O21782 +21783, O21783 +21784, O21784 +21785, O21785 +21786, O21786 +21787, O21787 +21788, O21788 +21789, O21789 +21790, O21790 +21791, O21791 +21792, O21792 +21793, O21793 +21794, O21794 +21795, O21795 +21796, O21796 +21797, O21797 +21798, O21798 +21799, O21799 +21800, O21800 +21801, O21801 +21802, O21802 +21803, O21803 +21804, O21804 +21805, O21805 +21806, O21806 +21807, O21807 +21808, O21808 +21809, O21809 +21810, O21810 +21811, O21811 +21812, O21812 +21813, O21813 +21814, O21814 +21815, O21815 +21816, O21816 +21817, O21817 +21818, O21818 +21819, O21819 +21820, O21820 +21821, O21821 +21822, O21822 +21823, O21823 +21824, O21824 +21825, O21825 +21826, O21826 +21827, O21827 +21828, O21828 +21829, O21829 +21830, O21830 +21831, O21831 +21832, O21832 +21833, O21833 +21834, O21834 +21835, O21835 +21836, O21836 +21837, O21837 +21838, O21838 +21839, O21839 +21840, O21840 +21841, O21841 +21842, O21842 +21843, O21843 +21844, O21844 +21845, O21845 +21846, O21846 +21847, O21847 +21848, O21848 +21849, O21849 +21850, O21850 +21851, O21851 +21852, O21852 +21853, O21853 +21854, O21854 +21855, O21855 +21856, O21856 +21857, O21857 +21858, O21858 +21859, O21859 +21860, O21860 +21861, O21861 +21862, O21862 +21863, O21863 +21864, O21864 +21865, O21865 +21866, O21866 +21867, O21867 +21868, O21868 +21869, O21869 +21870, O21870 +21871, O21871 +21872, O21872 +21873, O21873 +21874, O21874 +21875, O21875 +21876, O21876 +21877, O21877 +21878, O21878 +21879, O21879 +21880, O21880 +21881, O21881 +21882, O21882 +21883, O21883 +21884, O21884 +21885, O21885 +21886, O21886 +21887, O21887 +21888, O21888 +21889, O21889 +21890, O21890 +21891, O21891 +21892, O21892 +21893, O21893 +21894, O21894 +21895, O21895 +21896, O21896 +21897, O21897 +21898, O21898 +21899, O21899 +21900, O21900 +21901, O21901 +21902, O21902 +21903, O21903 +21904, O21904 +21905, O21905 +21906, O21906 +21907, O21907 +21908, O21908 +21909, O21909 +21910, O21910 +21911, O21911 +21912, O21912 +21913, O21913 +21914, O21914 +21915, O21915 +21916, O21916 +21917, O21917 +21918, O21918 +21919, O21919 +21920, O21920 +21921, O21921 +21922, O21922 +21923, O21923 +21924, O21924 +21925, O21925 +21926, O21926 +21927, O21927 +21928, O21928 +21929, O21929 +21930, O21930 +21931, O21931 +21932, O21932 +21933, O21933 +21934, O21934 +21935, O21935 +21936, O21936 +21937, O21937 +21938, O21938 +21939, O21939 +21940, O21940 +21941, O21941 +21942, O21942 +21943, O21943 +21944, O21944 +21945, O21945 +21946, O21946 +21947, O21947 +21948, O21948 +21949, O21949 +21950, O21950 +21951, O21951 +21952, O21952 +21953, O21953 +21954, O21954 +21955, O21955 +21956, O21956 +21957, O21957 +21958, O21958 +21959, O21959 +21960, O21960 +21961, O21961 +21962, O21962 +21963, O21963 +21964, O21964 +21965, O21965 +21966, O21966 +21967, O21967 +21968, O21968 +21969, O21969 +21970, O21970 +21971, O21971 +21972, O21972 +21973, O21973 +21974, O21974 +21975, O21975 +21976, O21976 +21977, O21977 +21978, O21978 +21979, O21979 +21980, O21980 +21981, O21981 +21982, O21982 +21983, O21983 +21984, O21984 +21985, O21985 +21986, O21986 +21987, O21987 +21988, O21988 +21989, O21989 +21990, O21990 +21991, O21991 +21992, O21992 +21993, O21993 +21994, O21994 +21995, O21995 +21996, O21996 +21997, O21997 +21998, O21998 +21999, O21999 +22000, O22000 +22001, O22001 +22002, O22002 +22003, O22003 +22004, O22004 +22005, O22005 +22006, O22006 +22007, O22007 +22008, O22008 +22009, O22009 +22010, O22010 +22011, O22011 +22012, O22012 +22013, O22013 +22014, O22014 +22015, O22015 +22016, O22016 +22017, O22017 +22018, O22018 +22019, O22019 +22020, O22020 +22021, O22021 +22022, O22022 +22023, O22023 +22024, O22024 +22025, O22025 +22026, O22026 +22027, O22027 +22028, O22028 +22029, O22029 +22030, O22030 +22031, O22031 +22032, O22032 +22033, O22033 +22034, O22034 +22035, O22035 +22036, O22036 +22037, O22037 +22038, O22038 +22039, O22039 +22040, O22040 +22041, O22041 +22042, O22042 +22043, O22043 +22044, O22044 +22045, O22045 +22046, O22046 +22047, O22047 +22048, O22048 +22049, O22049 +22050, O22050 +22051, O22051 +22052, O22052 +22053, O22053 +22054, O22054 +22055, O22055 +22056, O22056 +22057, O22057 +22058, O22058 +22059, O22059 +22060, O22060 +22061, O22061 +22062, O22062 +22063, O22063 +22064, O22064 +22065, O22065 +22066, O22066 +22067, O22067 +22068, O22068 +22069, O22069 +22070, O22070 +22071, O22071 +22072, O22072 +22073, O22073 +22074, O22074 +22075, O22075 +22076, O22076 +22077, O22077 +22078, O22078 +22079, O22079 +22080, O22080 +22081, O22081 +22082, O22082 +22083, O22083 +22084, O22084 +22085, O22085 +22086, O22086 +22087, O22087 +22088, O22088 +22089, O22089 +22090, O22090 +22091, O22091 +22092, O22092 +22093, O22093 +22094, O22094 +22095, O22095 +22096, O22096 +22097, O22097 +22098, O22098 +22099, O22099 +22100, O22100 +22101, O22101 +22102, O22102 +22103, O22103 +22104, O22104 +22105, O22105 +22106, O22106 +22107, O22107 +22108, O22108 +22109, O22109 +22110, O22110 +22111, O22111 +22112, O22112 +22113, O22113 +22114, O22114 +22115, O22115 +22116, O22116 +22117, O22117 +22118, O22118 +22119, O22119 +22120, O22120 +22121, O22121 +22122, O22122 +22123, O22123 +22124, O22124 +22125, O22125 +22126, O22126 +22127, O22127 +22128, O22128 +22129, O22129 +22130, O22130 +22131, O22131 +22132, O22132 +22133, O22133 +22134, O22134 +22135, O22135 +22136, O22136 +22137, O22137 +22138, O22138 +22139, O22139 +22140, O22140 +22141, O22141 +22142, O22142 +22143, O22143 +22144, O22144 +22145, O22145 +22146, O22146 +22147, O22147 +22148, O22148 +22149, O22149 +22150, O22150 +22151, O22151 +22152, O22152 +22153, O22153 +22154, O22154 +22155, O22155 +22156, O22156 +22157, O22157 +22158, O22158 +22159, O22159 +22160, O22160 +22161, O22161 +22162, O22162 +22163, O22163 +22164, O22164 +22165, O22165 +22166, O22166 +22167, O22167 +22168, O22168 +22169, O22169 +22170, O22170 +22171, O22171 +22172, O22172 +22173, O22173 +22174, O22174 +22175, O22175 +22176, O22176 +22177, O22177 +22178, O22178 +22179, O22179 +22180, O22180 +22181, O22181 +22182, O22182 +22183, O22183 +22184, O22184 +22185, O22185 +22186, O22186 +22187, O22187 +22188, O22188 +22189, O22189 +22190, O22190 +22191, O22191 +22192, O22192 +22193, O22193 +22194, O22194 +22195, O22195 +22196, O22196 +22197, O22197 +22198, O22198 +22199, O22199 +22200, O22200 +22201, O22201 +22202, O22202 +22203, O22203 +22204, O22204 +22205, O22205 +22206, O22206 +22207, O22207 +22208, O22208 +22209, O22209 +22210, O22210 +22211, O22211 +22212, O22212 +22213, O22213 +22214, O22214 +22215, O22215 +22216, O22216 +22217, O22217 +22218, O22218 +22219, O22219 +22220, O22220 +22221, O22221 +22222, O22222 +22223, O22223 +22224, O22224 +22225, O22225 +22226, O22226 +22227, O22227 +22228, O22228 +22229, O22229 +22230, O22230 +22231, O22231 +22232, O22232 +22233, O22233 +22234, O22234 +22235, O22235 +22236, O22236 +22237, O22237 +22238, O22238 +22239, O22239 +22240, O22240 +22241, O22241 +22242, O22242 +22243, O22243 +22244, O22244 +22245, O22245 +22246, O22246 +22247, O22247 +22248, O22248 +22249, O22249 +22250, O22250 +22251, O22251 +22252, O22252 +22253, O22253 +22254, O22254 +22255, O22255 +22256, O22256 +22257, O22257 +22258, O22258 +22259, O22259 +22260, O22260 +22261, O22261 +22262, O22262 +22263, O22263 +22264, O22264 +22265, O22265 +22266, O22266 +22267, O22267 +22268, O22268 +22269, O22269 +22270, O22270 +22271, O22271 +22272, O22272 +22273, O22273 +22274, O22274 +22275, O22275 +22276, O22276 +22277, O22277 +22278, O22278 +22279, O22279 +22280, O22280 +22281, O22281 +22282, O22282 +22283, O22283 +22284, O22284 +22285, O22285 +22286, O22286 +22287, O22287 +22288, O22288 +22289, O22289 +22290, O22290 +22291, O22291 +22292, O22292 +22293, O22293 +22294, O22294 +22295, O22295 +22296, O22296 +22297, O22297 +22298, O22298 +22299, O22299 +22300, O22300 +22301, O22301 +22302, O22302 +22303, O22303 +22304, O22304 +22305, O22305 +22306, O22306 +22307, O22307 +22308, O22308 +22309, O22309 +22310, O22310 +22311, O22311 +22312, O22312 +22313, O22313 +22314, O22314 +22315, O22315 +22316, O22316 +22317, O22317 +22318, O22318 +22319, O22319 +22320, O22320 +22321, O22321 +22322, O22322 +22323, O22323 +22324, O22324 +22325, O22325 +22326, O22326 +22327, O22327 +22328, O22328 +22329, O22329 +22330, O22330 +22331, O22331 +22332, O22332 +22333, O22333 +22334, O22334 +22335, O22335 +22336, O22336 +22337, O22337 +22338, O22338 +22339, O22339 +22340, O22340 +22341, O22341 +22342, O22342 +22343, O22343 +22344, O22344 +22345, O22345 +22346, O22346 +22347, O22347 +22348, O22348 +22349, O22349 +22350, O22350 +22351, O22351 +22352, O22352 +22353, O22353 +22354, O22354 +22355, O22355 +22356, O22356 +22357, O22357 +22358, O22358 +22359, O22359 +22360, O22360 +22361, O22361 +22362, O22362 +22363, O22363 +22364, O22364 +22365, O22365 +22366, O22366 +22367, O22367 +22368, O22368 +22369, O22369 +22370, O22370 +22371, O22371 +22372, O22372 +22373, O22373 +22374, O22374 +22375, O22375 +22376, O22376 +22377, O22377 +22378, O22378 +22379, O22379 +22380, O22380 +22381, O22381 +22382, O22382 +22383, O22383 +22384, O22384 +22385, O22385 +22386, O22386 +22387, O22387 +22388, O22388 +22389, O22389 +22390, O22390 +22391, O22391 +22392, O22392 +22393, O22393 +22394, O22394 +22395, O22395 +22396, O22396 +22397, O22397 +22398, O22398 +22399, O22399 +22400, O22400 +22401, O22401 +22402, O22402 +22403, O22403 +22404, O22404 +22405, O22405 +22406, O22406 +22407, O22407 +22408, O22408 +22409, O22409 +22410, O22410 +22411, O22411 +22412, O22412 +22413, O22413 +22414, O22414 +22415, O22415 +22416, O22416 +22417, O22417 +22418, O22418 +22419, O22419 +22420, O22420 +22421, O22421 +22422, O22422 +22423, O22423 +22424, O22424 +22425, O22425 +22426, O22426 +22427, O22427 +22428, O22428 +22429, O22429 +22430, O22430 +22431, O22431 +22432, O22432 +22433, O22433 +22434, O22434 +22435, O22435 +22436, O22436 +22437, O22437 +22438, O22438 +22439, O22439 +22440, O22440 +22441, O22441 +22442, O22442 +22443, O22443 +22444, O22444 +22445, O22445 +22446, O22446 +22447, O22447 +22448, O22448 +22449, O22449 +22450, O22450 +22451, O22451 +22452, O22452 +22453, O22453 +22454, O22454 +22455, O22455 +22456, O22456 +22457, O22457 +22458, O22458 +22459, O22459 +22460, O22460 +22461, O22461 +22462, O22462 +22463, O22463 +22464, O22464 +22465, O22465 +22466, O22466 +22467, O22467 +22468, O22468 +22469, O22469 +22470, O22470 +22471, O22471 +22472, O22472 +22473, O22473 +22474, O22474 +22475, O22475 +22476, O22476 +22477, O22477 +22478, O22478 +22479, O22479 +22480, O22480 +22481, O22481 +22482, O22482 +22483, O22483 +22484, O22484 +22485, O22485 +22486, O22486 +22487, O22487 +22488, O22488 +22489, O22489 +22490, O22490 +22491, O22491 +22492, O22492 +22493, O22493 +22494, O22494 +22495, O22495 +22496, O22496 +22497, O22497 +22498, O22498 +22499, O22499 +22500, O22500 +22501, O22501 +22502, O22502 +22503, O22503 +22504, O22504 +22505, O22505 +22506, O22506 +22507, O22507 +22508, O22508 +22509, O22509 +22510, O22510 +22511, O22511 +22512, O22512 +22513, O22513 +22514, O22514 +22515, O22515 +22516, O22516 +22517, O22517 +22518, O22518 +22519, O22519 +22520, O22520 +22521, O22521 +22522, O22522 +22523, O22523 +22524, O22524 +22525, O22525 +22526, O22526 +22527, O22527 +22528, O22528 +22529, O22529 +22530, O22530 +22531, O22531 +22532, O22532 +22533, O22533 +22534, O22534 +22535, O22535 +22536, O22536 +22537, O22537 +22538, O22538 +22539, O22539 +22540, O22540 +22541, O22541 +22542, O22542 +22543, O22543 +22544, O22544 +22545, O22545 +22546, O22546 +22547, O22547 +22548, O22548 +22549, O22549 +22550, O22550 +22551, O22551 +22552, O22552 +22553, O22553 +22554, O22554 +22555, O22555 +22556, O22556 +22557, O22557 +22558, O22558 +22559, O22559 +22560, O22560 +22561, O22561 +22562, O22562 +22563, O22563 +22564, O22564 +22565, O22565 +22566, O22566 +22567, O22567 +22568, O22568 +22569, O22569 +22570, O22570 +22571, O22571 +22572, O22572 +22573, O22573 +22574, O22574 +22575, O22575 +22576, O22576 +22577, O22577 +22578, O22578 +22579, O22579 +22580, O22580 +22581, O22581 +22582, O22582 +22583, O22583 +22584, O22584 +22585, O22585 +22586, O22586 +22587, O22587 +22588, O22588 +22589, O22589 +22590, O22590 +22591, O22591 +22592, O22592 +22593, O22593 +22594, O22594 +22595, O22595 +22596, O22596 +22597, O22597 +22598, O22598 +22599, O22599 +22600, O22600 +22601, O22601 +22602, O22602 +22603, O22603 +22604, O22604 +22605, O22605 +22606, O22606 +22607, O22607 +22608, O22608 +22609, O22609 +22610, O22610 +22611, O22611 +22612, O22612 +22613, O22613 +22614, O22614 +22615, O22615 +22616, O22616 +22617, O22617 +22618, O22618 +22619, O22619 +22620, O22620 +22621, O22621 +22622, O22622 +22623, O22623 +22624, O22624 +22625, O22625 +22626, O22626 +22627, O22627 +22628, O22628 +22629, O22629 +22630, O22630 +22631, O22631 +22632, O22632 +22633, O22633 +22634, O22634 +22635, O22635 +22636, O22636 +22637, O22637 +22638, O22638 +22639, O22639 +22640, O22640 +22641, O22641 +22642, O22642 +22643, O22643 +22644, O22644 +22645, O22645 +22646, O22646 +22647, O22647 +22648, O22648 +22649, O22649 +22650, O22650 +22651, O22651 +22652, O22652 +22653, O22653 +22654, O22654 +22655, O22655 +22656, O22656 +22657, O22657 +22658, O22658 +22659, O22659 +22660, O22660 +22661, O22661 +22662, O22662 +22663, O22663 +22664, O22664 +22665, O22665 +22666, O22666 +22667, O22667 +22668, O22668 +22669, O22669 +22670, O22670 +22671, O22671 +22672, O22672 +22673, O22673 +22674, O22674 +22675, O22675 +22676, O22676 +22677, O22677 +22678, O22678 +22679, O22679 +22680, O22680 +22681, O22681 +22682, O22682 +22683, O22683 +22684, O22684 +22685, O22685 +22686, O22686 +22687, O22687 +22688, O22688 +22689, O22689 +22690, O22690 +22691, O22691 +22692, O22692 +22693, O22693 +22694, O22694 +22695, O22695 +22696, O22696 +22697, O22697 +22698, O22698 +22699, O22699 +22700, O22700 +22701, O22701 +22702, O22702 +22703, O22703 +22704, O22704 +22705, O22705 +22706, O22706 +22707, O22707 +22708, O22708 +22709, O22709 +22710, O22710 +22711, O22711 +22712, O22712 +22713, O22713 +22714, O22714 +22715, O22715 +22716, O22716 +22717, O22717 +22718, O22718 +22719, O22719 +22720, O22720 +22721, O22721 +22722, O22722 +22723, O22723 +22724, O22724 +22725, O22725 +22726, O22726 +22727, O22727 +22728, O22728 +22729, O22729 +22730, O22730 +22731, O22731 +22732, O22732 +22733, O22733 +22734, O22734 +22735, O22735 +22736, O22736 +22737, O22737 +22738, O22738 +22739, O22739 +22740, O22740 +22741, O22741 +22742, O22742 +22743, O22743 +22744, O22744 +22745, O22745 +22746, O22746 +22747, O22747 +22748, O22748 +22749, O22749 +22750, O22750 +22751, O22751 +22752, O22752 +22753, O22753 +22754, O22754 +22755, O22755 +22756, O22756 +22757, O22757 +22758, O22758 +22759, O22759 +22760, O22760 +22761, O22761 +22762, O22762 +22763, O22763 +22764, O22764 +22765, O22765 +22766, O22766 +22767, O22767 +22768, O22768 +22769, O22769 +22770, O22770 +22771, O22771 +22772, O22772 +22773, O22773 +22774, O22774 +22775, O22775 +22776, O22776 +22777, O22777 +22778, O22778 +22779, O22779 +22780, O22780 +22781, O22781 +22782, O22782 +22783, O22783 +22784, O22784 +22785, O22785 +22786, O22786 +22787, O22787 +22788, O22788 +22789, O22789 +22790, O22790 +22791, O22791 +22792, O22792 +22793, O22793 +22794, O22794 +22795, O22795 +22796, O22796 +22797, O22797 +22798, O22798 +22799, O22799 +22800, O22800 +22801, O22801 +22802, O22802 +22803, O22803 +22804, O22804 +22805, O22805 +22806, O22806 +22807, O22807 +22808, O22808 +22809, O22809 +22810, O22810 +22811, O22811 +22812, O22812 +22813, O22813 +22814, O22814 +22815, O22815 +22816, O22816 +22817, O22817 +22818, O22818 +22819, O22819 +22820, O22820 +22821, O22821 +22822, O22822 +22823, O22823 +22824, O22824 +22825, O22825 +22826, O22826 +22827, O22827 +22828, O22828 +22829, O22829 +22830, O22830 +22831, O22831 +22832, O22832 +22833, O22833 +22834, O22834 +22835, O22835 +22836, O22836 +22837, O22837 +22838, O22838 +22839, O22839 +22840, O22840 +22841, O22841 +22842, O22842 +22843, O22843 +22844, O22844 +22845, O22845 +22846, O22846 +22847, O22847 +22848, O22848 +22849, O22849 +22850, O22850 +22851, O22851 +22852, O22852 +22853, O22853 +22854, O22854 +22855, O22855 +22856, O22856 +22857, O22857 +22858, O22858 +22859, O22859 +22860, O22860 +22861, O22861 +22862, O22862 +22863, O22863 +22864, O22864 +22865, O22865 +22866, O22866 +22867, O22867 +22868, O22868 +22869, O22869 +22870, O22870 +22871, O22871 +22872, O22872 +22873, O22873 +22874, O22874 +22875, O22875 +22876, O22876 +22877, O22877 +22878, O22878 +22879, O22879 +22880, O22880 +22881, O22881 +22882, O22882 +22883, O22883 +22884, O22884 +22885, O22885 +22886, O22886 +22887, O22887 +22888, O22888 +22889, O22889 +22890, O22890 +22891, O22891 +22892, O22892 +22893, O22893 +22894, O22894 +22895, O22895 +22896, O22896 +22897, O22897 +22898, O22898 +22899, O22899 +22900, O22900 +22901, O22901 +22902, O22902 +22903, O22903 +22904, O22904 +22905, O22905 +22906, O22906 +22907, O22907 +22908, O22908 +22909, O22909 +22910, O22910 +22911, O22911 +22912, O22912 +22913, O22913 +22914, O22914 +22915, O22915 +22916, O22916 +22917, O22917 +22918, O22918 +22919, O22919 +22920, O22920 +22921, O22921 +22922, O22922 +22923, O22923 +22924, O22924 +22925, O22925 +22926, O22926 +22927, O22927 +22928, O22928 +22929, O22929 +22930, O22930 +22931, O22931 +22932, O22932 +22933, O22933 +22934, O22934 +22935, O22935 +22936, O22936 +22937, O22937 +22938, O22938 +22939, O22939 +22940, O22940 +22941, O22941 +22942, O22942 +22943, O22943 +22944, O22944 +22945, O22945 +22946, O22946 +22947, O22947 +22948, O22948 +22949, O22949 +22950, O22950 +22951, O22951 +22952, O22952 +22953, O22953 +22954, O22954 +22955, O22955 +22956, O22956 +22957, O22957 +22958, O22958 +22959, O22959 +22960, O22960 +22961, O22961 +22962, O22962 +22963, O22963 +22964, O22964 +22965, O22965 +22966, O22966 +22967, O22967 +22968, O22968 +22969, O22969 +22970, O22970 +22971, O22971 +22972, O22972 +22973, O22973 +22974, O22974 +22975, O22975 +22976, O22976 +22977, O22977 +22978, O22978 +22979, O22979 +22980, O22980 +22981, O22981 +22982, O22982 +22983, O22983 +22984, O22984 +22985, O22985 +22986, O22986 +22987, O22987 +22988, O22988 +22989, O22989 +22990, O22990 +22991, O22991 +22992, O22992 +22993, O22993 +22994, O22994 +22995, O22995 +22996, O22996 +22997, O22997 +22998, O22998 +22999, O22999 +23000, O23000 +23001, O23001 +23002, O23002 +23003, O23003 +23004, O23004 +23005, O23005 +23006, O23006 +23007, O23007 +23008, O23008 +23009, O23009 +23010, O23010 +23011, O23011 +23012, O23012 +23013, O23013 +23014, O23014 +23015, O23015 +23016, O23016 +23017, O23017 +23018, O23018 +23019, O23019 +23020, O23020 +23021, O23021 +23022, O23022 +23023, O23023 +23024, O23024 +23025, O23025 +23026, O23026 +23027, O23027 +23028, O23028 +23029, O23029 +23030, O23030 +23031, O23031 +23032, O23032 +23033, O23033 +23034, O23034 +23035, O23035 +23036, O23036 +23037, O23037 +23038, O23038 +23039, O23039 +23040, O23040 +23041, O23041 +23042, O23042 +23043, O23043 +23044, O23044 +23045, O23045 +23046, O23046 +23047, O23047 +23048, O23048 +23049, O23049 +23050, O23050 +23051, O23051 +23052, O23052 +23053, O23053 +23054, O23054 +23055, O23055 +23056, O23056 +23057, O23057 +23058, O23058 +23059, O23059 +23060, O23060 +23061, O23061 +23062, O23062 +23063, O23063 +23064, O23064 +23065, O23065 +23066, O23066 +23067, O23067 +23068, O23068 +23069, O23069 +23070, O23070 +23071, O23071 +23072, O23072 +23073, O23073 +23074, O23074 +23075, O23075 +23076, O23076 +23077, O23077 +23078, O23078 +23079, O23079 +23080, O23080 +23081, O23081 +23082, O23082 +23083, O23083 +23084, O23084 +23085, O23085 +23086, O23086 +23087, O23087 +23088, O23088 +23089, O23089 +23090, O23090 +23091, O23091 +23092, O23092 +23093, O23093 +23094, O23094 +23095, O23095 +23096, O23096 +23097, O23097 +23098, O23098 +23099, O23099 +23100, O23100 +23101, O23101 +23102, O23102 +23103, O23103 +23104, O23104 +23105, O23105 +23106, O23106 +23107, O23107 +23108, O23108 +23109, O23109 +23110, O23110 +23111, O23111 +23112, O23112 +23113, O23113 +23114, O23114 +23115, O23115 +23116, O23116 +23117, O23117 +23118, O23118 +23119, O23119 +23120, O23120 +23121, O23121 +23122, O23122 +23123, O23123 +23124, O23124 +23125, O23125 +23126, O23126 +23127, O23127 +23128, O23128 +23129, O23129 +23130, O23130 +23131, O23131 +23132, O23132 +23133, O23133 +23134, O23134 +23135, O23135 +23136, O23136 +23137, O23137 +23138, O23138 +23139, O23139 +23140, O23140 +23141, O23141 +23142, O23142 +23143, O23143 +23144, O23144 +23145, O23145 +23146, O23146 +23147, O23147 +23148, O23148 +23149, O23149 +23150, O23150 +23151, O23151 +23152, O23152 +23153, O23153 +23154, O23154 +23155, O23155 +23156, O23156 +23157, O23157 +23158, O23158 +23159, O23159 +23160, O23160 +23161, O23161 +23162, O23162 +23163, O23163 +23164, O23164 +23165, O23165 +23166, O23166 +23167, O23167 +23168, O23168 +23169, O23169 +23170, O23170 +23171, O23171 +23172, O23172 +23173, O23173 +23174, O23174 +23175, O23175 +23176, O23176 +23177, O23177 +23178, O23178 +23179, O23179 +23180, O23180 +23181, O23181 +23182, O23182 +23183, O23183 +23184, O23184 +23185, O23185 +23186, O23186 +23187, O23187 +23188, O23188 +23189, O23189 +23190, O23190 +23191, O23191 +23192, O23192 +23193, O23193 +23194, O23194 +23195, O23195 +23196, O23196 +23197, O23197 +23198, O23198 +23199, O23199 +23200, O23200 +23201, O23201 +23202, O23202 +23203, O23203 +23204, O23204 +23205, O23205 +23206, O23206 +23207, O23207 +23208, O23208 +23209, O23209 +23210, O23210 +23211, O23211 +23212, O23212 +23213, O23213 +23214, O23214 +23215, O23215 +23216, O23216 +23217, O23217 +23218, O23218 +23219, O23219 +23220, O23220 +23221, O23221 +23222, O23222 +23223, O23223 +23224, O23224 +23225, O23225 +23226, O23226 +23227, O23227 +23228, O23228 +23229, O23229 +23230, O23230 +23231, O23231 +23232, O23232 +23233, O23233 +23234, O23234 +23235, O23235 +23236, O23236 +23237, O23237 +23238, O23238 +23239, O23239 +23240, O23240 +23241, O23241 +23242, O23242 +23243, O23243 +23244, O23244 +23245, O23245 +23246, O23246 +23247, O23247 +23248, O23248 +23249, O23249 +23250, O23250 +23251, O23251 +23252, O23252 +23253, O23253 +23254, O23254 +23255, O23255 +23256, O23256 +23257, O23257 +23258, O23258 +23259, O23259 +23260, O23260 +23261, O23261 +23262, O23262 +23263, O23263 +23264, O23264 +23265, O23265 +23266, O23266 +23267, O23267 +23268, O23268 +23269, O23269 +23270, O23270 +23271, O23271 +23272, O23272 +23273, O23273 +23274, O23274 +23275, O23275 +23276, O23276 +23277, O23277 +23278, O23278 +23279, O23279 +23280, O23280 +23281, O23281 +23282, O23282 +23283, O23283 +23284, O23284 +23285, O23285 +23286, O23286 +23287, O23287 +23288, O23288 +23289, O23289 +23290, O23290 +23291, O23291 +23292, O23292 +23293, O23293 +23294, O23294 +23295, O23295 +23296, O23296 +23297, O23297 +23298, O23298 +23299, O23299 +23300, O23300 +23301, O23301 +23302, O23302 +23303, O23303 +23304, O23304 +23305, O23305 +23306, O23306 +23307, O23307 +23308, O23308 +23309, O23309 +23310, O23310 +23311, O23311 +23312, O23312 +23313, O23313 +23314, O23314 +23315, O23315 +23316, O23316 +23317, O23317 +23318, O23318 +23319, O23319 +23320, O23320 +23321, O23321 +23322, O23322 +23323, O23323 +23324, O23324 +23325, O23325 +23326, O23326 +23327, O23327 +23328, O23328 +23329, O23329 +23330, O23330 +23331, O23331 +23332, O23332 +23333, O23333 +23334, O23334 +23335, O23335 +23336, O23336 +23337, O23337 +23338, O23338 +23339, O23339 +23340, O23340 +23341, O23341 +23342, O23342 +23343, O23343 +23344, O23344 +23345, O23345 +23346, O23346 +23347, O23347 +23348, O23348 +23349, O23349 +23350, O23350 +23351, O23351 +23352, O23352 +23353, O23353 +23354, O23354 +23355, O23355 +23356, O23356 +23357, O23357 +23358, O23358 +23359, O23359 +23360, O23360 +23361, O23361 +23362, O23362 +23363, O23363 +23364, O23364 +23365, O23365 +23366, O23366 +23367, O23367 +23368, O23368 +23369, O23369 +23370, O23370 +23371, O23371 +23372, O23372 +23373, O23373 +23374, O23374 +23375, O23375 +23376, O23376 +23377, O23377 +23378, O23378 +23379, O23379 +23380, O23380 +23381, O23381 +23382, O23382 +23383, O23383 +23384, O23384 +23385, O23385 +23386, O23386 +23387, O23387 +23388, O23388 +23389, O23389 +23390, O23390 +23391, O23391 +23392, O23392 +23393, O23393 +23394, O23394 +23395, O23395 +23396, O23396 +23397, O23397 +23398, O23398 +23399, O23399 +23400, O23400 +23401, O23401 +23402, O23402 +23403, O23403 +23404, O23404 +23405, O23405 +23406, O23406 +23407, O23407 +23408, O23408 +23409, O23409 +23410, O23410 +23411, O23411 +23412, O23412 +23413, O23413 +23414, O23414 +23415, O23415 +23416, O23416 +23417, O23417 +23418, O23418 +23419, O23419 +23420, O23420 +23421, O23421 +23422, O23422 +23423, O23423 +23424, O23424 +23425, O23425 +23426, O23426 +23427, O23427 +23428, O23428 +23429, O23429 +23430, O23430 +23431, O23431 +23432, O23432 +23433, O23433 +23434, O23434 +23435, O23435 +23436, O23436 +23437, O23437 +23438, O23438 +23439, O23439 +23440, O23440 +23441, O23441 +23442, O23442 +23443, O23443 +23444, O23444 +23445, O23445 +23446, O23446 +23447, O23447 +23448, O23448 +23449, O23449 +23450, O23450 +23451, O23451 +23452, O23452 +23453, O23453 +23454, O23454 +23455, O23455 +23456, O23456 +23457, O23457 +23458, O23458 +23459, O23459 +23460, O23460 +23461, O23461 +23462, O23462 +23463, O23463 +23464, O23464 +23465, O23465 +23466, O23466 +23467, O23467 +23468, O23468 +23469, O23469 +23470, O23470 +23471, O23471 +23472, O23472 +23473, O23473 +23474, O23474 +23475, O23475 +23476, O23476 +23477, O23477 +23478, O23478 +23479, O23479 +23480, O23480 +23481, O23481 +23482, O23482 +23483, O23483 +23484, O23484 +23485, O23485 +23486, O23486 +23487, O23487 +23488, O23488 +23489, O23489 +23490, O23490 +23491, O23491 +23492, O23492 +23493, O23493 +23494, O23494 +23495, O23495 +23496, O23496 +23497, O23497 +23498, O23498 +23499, O23499 +23500, O23500 +23501, O23501 +23502, O23502 +23503, O23503 +23504, O23504 +23505, O23505 +23506, O23506 +23507, O23507 +23508, O23508 +23509, O23509 +23510, O23510 +23511, O23511 +23512, O23512 +23513, O23513 +23514, O23514 +23515, O23515 +23516, O23516 +23517, O23517 +23518, O23518 +23519, O23519 +23520, O23520 +23521, O23521 +23522, O23522 +23523, O23523 +23524, O23524 +23525, O23525 +23526, O23526 +23527, O23527 +23528, O23528 +23529, O23529 +23530, O23530 +23531, O23531 +23532, O23532 +23533, O23533 +23534, O23534 +23535, O23535 +23536, O23536 +23537, O23537 +23538, O23538 +23539, O23539 +23540, O23540 +23541, O23541 +23542, O23542 +23543, O23543 +23544, O23544 +23545, O23545 +23546, O23546 +23547, O23547 +23548, O23548 +23549, O23549 +23550, O23550 +23551, O23551 +23552, O23552 +23553, O23553 +23554, O23554 +23555, O23555 +23556, O23556 +23557, O23557 +23558, O23558 +23559, O23559 +23560, O23560 +23561, O23561 +23562, O23562 +23563, O23563 +23564, O23564 +23565, O23565 +23566, O23566 +23567, O23567 +23568, O23568 +23569, O23569 +23570, O23570 +23571, O23571 +23572, O23572 +23573, O23573 +23574, O23574 +23575, O23575 +23576, O23576 +23577, O23577 +23578, O23578 +23579, O23579 +23580, O23580 +23581, O23581 +23582, O23582 +23583, O23583 +23584, O23584 +23585, O23585 +23586, O23586 +23587, O23587 +23588, O23588 +23589, O23589 +23590, O23590 +23591, O23591 +23592, O23592 +23593, O23593 +23594, O23594 +23595, O23595 +23596, O23596 +23597, O23597 +23598, O23598 +23599, O23599 +23600, O23600 +23601, O23601 +23602, O23602 +23603, O23603 +23604, O23604 +23605, O23605 +23606, O23606 +23607, O23607 +23608, O23608 +23609, O23609 +23610, O23610 +23611, O23611 +23612, O23612 +23613, O23613 +23614, O23614 +23615, O23615 +23616, O23616 +23617, O23617 +23618, O23618 +23619, O23619 +23620, O23620 +23621, O23621 +23622, O23622 +23623, O23623 +23624, O23624 +23625, O23625 +23626, O23626 +23627, O23627 +23628, O23628 +23629, O23629 +23630, O23630 +23631, O23631 +23632, O23632 +23633, O23633 +23634, O23634 +23635, O23635 +23636, O23636 +23637, O23637 +23638, O23638 +23639, O23639 +23640, O23640 +23641, O23641 +23642, O23642 +23643, O23643 +23644, O23644 +23645, O23645 +23646, O23646 +23647, O23647 +23648, O23648 +23649, O23649 +23650, O23650 +23651, O23651 +23652, O23652 +23653, O23653 +23654, O23654 +23655, O23655 +23656, O23656 +23657, O23657 +23658, O23658 +23659, O23659 +23660, O23660 +23661, O23661 +23662, O23662 +23663, O23663 +23664, O23664 +23665, O23665 +23666, O23666 +23667, O23667 +23668, O23668 +23669, O23669 +23670, O23670 +23671, O23671 +23672, O23672 +23673, O23673 +23674, O23674 +23675, O23675 +23676, O23676 +23677, O23677 +23678, O23678 +23679, O23679 +23680, O23680 +23681, O23681 +23682, O23682 +23683, O23683 +23684, O23684 +23685, O23685 +23686, O23686 +23687, O23687 +23688, O23688 +23689, O23689 +23690, O23690 +23691, O23691 +23692, O23692 +23693, O23693 +23694, O23694 +23695, O23695 +23696, O23696 +23697, O23697 +23698, O23698 +23699, O23699 +23700, O23700 +23701, O23701 +23702, O23702 +23703, O23703 +23704, O23704 +23705, O23705 +23706, O23706 +23707, O23707 +23708, O23708 +23709, O23709 +23710, O23710 +23711, O23711 +23712, O23712 +23713, O23713 +23714, O23714 +23715, O23715 +23716, O23716 +23717, O23717 +23718, O23718 +23719, O23719 +23720, O23720 +23721, O23721 +23722, O23722 +23723, O23723 +23724, O23724 +23725, O23725 +23726, O23726 +23727, O23727 +23728, O23728 +23729, O23729 +23730, O23730 +23731, O23731 +23732, O23732 +23733, O23733 +23734, O23734 +23735, O23735 +23736, O23736 +23737, O23737 +23738, O23738 +23739, O23739 +23740, O23740 +23741, O23741 +23742, O23742 +23743, O23743 +23744, O23744 +23745, O23745 +23746, O23746 +23747, O23747 +23748, O23748 +23749, O23749 +23750, O23750 +23751, O23751 +23752, O23752 +23753, O23753 +23754, O23754 +23755, O23755 +23756, O23756 +23757, O23757 +23758, O23758 +23759, O23759 +23760, O23760 +23761, O23761 +23762, O23762 +23763, O23763 +23764, O23764 +23765, O23765 +23766, O23766 +23767, O23767 +23768, O23768 +23769, O23769 +23770, O23770 +23771, O23771 +23772, O23772 +23773, O23773 +23774, O23774 +23775, O23775 +23776, O23776 +23777, O23777 +23778, O23778 +23779, O23779 +23780, O23780 +23781, O23781 +23782, O23782 +23783, O23783 +23784, O23784 +23785, O23785 +23786, O23786 +23787, O23787 +23788, O23788 +23789, O23789 +23790, O23790 +23791, O23791 +23792, O23792 +23793, O23793 +23794, O23794 +23795, O23795 +23796, O23796 +23797, O23797 +23798, O23798 +23799, O23799 +23800, O23800 +23801, O23801 +23802, O23802 +23803, O23803 +23804, O23804 +23805, O23805 +23806, O23806 +23807, O23807 +23808, O23808 +23809, O23809 +23810, O23810 +23811, O23811 +23812, O23812 +23813, O23813 +23814, O23814 +23815, O23815 +23816, O23816 +23817, O23817 +23818, O23818 +23819, O23819 +23820, O23820 +23821, O23821 +23822, O23822 +23823, O23823 +23824, O23824 +23825, O23825 +23826, O23826 +23827, O23827 +23828, O23828 +23829, O23829 +23830, O23830 +23831, O23831 +23832, O23832 +23833, O23833 +23834, O23834 +23835, O23835 +23836, O23836 +23837, O23837 +23838, O23838 +23839, O23839 +23840, O23840 +23841, O23841 +23842, O23842 +23843, O23843 +23844, O23844 +23845, O23845 +23846, O23846 +23847, O23847 +23848, O23848 +23849, O23849 +23850, O23850 +23851, O23851 +23852, O23852 +23853, O23853 +23854, O23854 +23855, O23855 +23856, O23856 +23857, O23857 +23858, O23858 +23859, O23859 +23860, O23860 +23861, O23861 +23862, O23862 +23863, O23863 +23864, O23864 +23865, O23865 +23866, O23866 +23867, O23867 +23868, O23868 +23869, O23869 +23870, O23870 +23871, O23871 +23872, O23872 +23873, O23873 +23874, O23874 +23875, O23875 +23876, O23876 +23877, O23877 +23878, O23878 +23879, O23879 +23880, O23880 +23881, O23881 +23882, O23882 +23883, O23883 +23884, O23884 +23885, O23885 +23886, O23886 +23887, O23887 +23888, O23888 +23889, O23889 +23890, O23890 +23891, O23891 +23892, O23892 +23893, O23893 +23894, O23894 +23895, O23895 +23896, O23896 +23897, O23897 +23898, O23898 +23899, O23899 +23900, O23900 +23901, O23901 +23902, O23902 +23903, O23903 +23904, O23904 +23905, O23905 +23906, O23906 +23907, O23907 +23908, O23908 +23909, O23909 +23910, O23910 +23911, O23911 +23912, O23912 +23913, O23913 +23914, O23914 +23915, O23915 +23916, O23916 +23917, O23917 +23918, O23918 +23919, O23919 +23920, O23920 +23921, O23921 +23922, O23922 +23923, O23923 +23924, O23924 +23925, O23925 +23926, O23926 +23927, O23927 +23928, O23928 +23929, O23929 +23930, O23930 +23931, O23931 +23932, O23932 +23933, O23933 +23934, O23934 +23935, O23935 +23936, O23936 +23937, O23937 +23938, O23938 +23939, O23939 +23940, O23940 +23941, O23941 +23942, O23942 +23943, O23943 +23944, O23944 +23945, O23945 +23946, O23946 +23947, O23947 +23948, O23948 +23949, O23949 +23950, O23950 +23951, O23951 +23952, O23952 +23953, O23953 +23954, O23954 +23955, O23955 +23956, O23956 +23957, O23957 +23958, O23958 +23959, O23959 +23960, O23960 +23961, O23961 +23962, O23962 +23963, O23963 +23964, O23964 +23965, O23965 +23966, O23966 +23967, O23967 +23968, O23968 +23969, O23969 +23970, O23970 +23971, O23971 +23972, O23972 +23973, O23973 +23974, O23974 +23975, O23975 +23976, O23976 +23977, O23977 +23978, O23978 +23979, O23979 +23980, O23980 +23981, O23981 +23982, O23982 +23983, O23983 +23984, O23984 +23985, O23985 +23986, O23986 +23987, O23987 +23988, O23988 +23989, O23989 +23990, O23990 +23991, O23991 +23992, O23992 +23993, O23993 +23994, O23994 +23995, O23995 +23996, O23996 +23997, O23997 +23998, O23998 +23999, O23999 +24000, O24000 +24001, O24001 +24002, O24002 +24003, O24003 +24004, O24004 +24005, O24005 +24006, O24006 +24007, O24007 +24008, O24008 +24009, O24009 +24010, O24010 +24011, O24011 +24012, O24012 +24013, O24013 +24014, O24014 +24015, O24015 +24016, O24016 +24017, O24017 +24018, O24018 +24019, O24019 +24020, O24020 +24021, O24021 +24022, O24022 +24023, O24023 +24024, O24024 +24025, O24025 +24026, O24026 +24027, O24027 +24028, O24028 +24029, O24029 +24030, O24030 +24031, O24031 +24032, O24032 +24033, O24033 +24034, O24034 +24035, O24035 +24036, O24036 +24037, O24037 +24038, O24038 +24039, O24039 +24040, O24040 +24041, O24041 +24042, O24042 +24043, O24043 +24044, O24044 +24045, O24045 +24046, O24046 +24047, O24047 +24048, O24048 +24049, O24049 +24050, O24050 +24051, O24051 +24052, O24052 +24053, O24053 +24054, O24054 +24055, O24055 +24056, O24056 +24057, O24057 +24058, O24058 +24059, O24059 +24060, O24060 +24061, O24061 +24062, O24062 +24063, O24063 +24064, O24064 +24065, O24065 +24066, O24066 +24067, O24067 +24068, O24068 +24069, O24069 +24070, O24070 +24071, O24071 +24072, O24072 +24073, O24073 +24074, O24074 +24075, O24075 +24076, O24076 +24077, O24077 +24078, O24078 +24079, O24079 +24080, O24080 +24081, O24081 +24082, O24082 +24083, O24083 +24084, O24084 +24085, O24085 +24086, O24086 +24087, O24087 +24088, O24088 +24089, O24089 +24090, O24090 +24091, O24091 +24092, O24092 +24093, O24093 +24094, O24094 +24095, O24095 +24096, O24096 +24097, O24097 +24098, O24098 +24099, O24099 +24100, O24100 +24101, O24101 +24102, O24102 +24103, O24103 +24104, O24104 +24105, O24105 +24106, O24106 +24107, O24107 +24108, O24108 +24109, O24109 +24110, O24110 +24111, O24111 +24112, O24112 +24113, O24113 +24114, O24114 +24115, O24115 +24116, O24116 +24117, O24117 +24118, O24118 +24119, O24119 +24120, O24120 +24121, O24121 +24122, O24122 +24123, O24123 +24124, O24124 +24125, O24125 +24126, O24126 +24127, O24127 +24128, O24128 +24129, O24129 +24130, O24130 +24131, O24131 +24132, O24132 +24133, O24133 +24134, O24134 +24135, O24135 +24136, O24136 +24137, O24137 +24138, O24138 +24139, O24139 +24140, O24140 +24141, O24141 +24142, O24142 +24143, O24143 +24144, O24144 +24145, O24145 +24146, O24146 +24147, O24147 +24148, O24148 +24149, O24149 +24150, O24150 +24151, O24151 +24152, O24152 +24153, O24153 +24154, O24154 +24155, O24155 +24156, O24156 +24157, O24157 +24158, O24158 +24159, O24159 +24160, O24160 +24161, O24161 +24162, O24162 +24163, O24163 +24164, O24164 +24165, O24165 +24166, O24166 +24167, O24167 +24168, O24168 +24169, O24169 +24170, O24170 +24171, O24171 +24172, O24172 +24173, O24173 +24174, O24174 +24175, O24175 +24176, O24176 +24177, O24177 +24178, O24178 +24179, O24179 +24180, O24180 +24181, O24181 +24182, O24182 +24183, O24183 +24184, O24184 +24185, O24185 +24186, O24186 +24187, O24187 +24188, O24188 +24189, O24189 +24190, O24190 +24191, O24191 +24192, O24192 +24193, O24193 +24194, O24194 +24195, O24195 +24196, O24196 +24197, O24197 +24198, O24198 +24199, O24199 +24200, O24200 +24201, O24201 +24202, O24202 +24203, O24203 +24204, O24204 +24205, O24205 +24206, O24206 +24207, O24207 +24208, O24208 +24209, O24209 +24210, O24210 +24211, O24211 +24212, O24212 +24213, O24213 +24214, O24214 +24215, O24215 +24216, O24216 +24217, O24217 +24218, O24218 +24219, O24219 +24220, O24220 +24221, O24221 +24222, O24222 +24223, O24223 +24224, O24224 +24225, O24225 +24226, O24226 +24227, O24227 +24228, O24228 +24229, O24229 +24230, O24230 +24231, O24231 +24232, O24232 +24233, O24233 +24234, O24234 +24235, O24235 +24236, O24236 +24237, O24237 +24238, O24238 +24239, O24239 +24240, O24240 +24241, O24241 +24242, O24242 +24243, O24243 +24244, O24244 +24245, O24245 +24246, O24246 +24247, O24247 +24248, O24248 +24249, O24249 +24250, O24250 +24251, O24251 +24252, O24252 +24253, O24253 +24254, O24254 +24255, O24255 +24256, O24256 +24257, O24257 +24258, O24258 +24259, O24259 +24260, O24260 +24261, O24261 +24262, O24262 +24263, O24263 +24264, O24264 +24265, O24265 +24266, O24266 +24267, O24267 +24268, O24268 +24269, O24269 +24270, O24270 +24271, O24271 +24272, O24272 +24273, O24273 +24274, O24274 +24275, O24275 +24276, O24276 +24277, O24277 +24278, O24278 +24279, O24279 +24280, O24280 +24281, O24281 +24282, O24282 +24283, O24283 +24284, O24284 +24285, O24285 +24286, O24286 +24287, O24287 +24288, O24288 +24289, O24289 +24290, O24290 +24291, O24291 +24292, O24292 +24293, O24293 +24294, O24294 +24295, O24295 +24296, O24296 +24297, O24297 +24298, O24298 +24299, O24299 +24300, O24300 +24301, O24301 +24302, O24302 +24303, O24303 +24304, O24304 +24305, O24305 +24306, O24306 +24307, O24307 +24308, O24308 +24309, O24309 +24310, O24310 +24311, O24311 +24312, O24312 +24313, O24313 +24314, O24314 +24315, O24315 +24316, O24316 +24317, O24317 +24318, O24318 +24319, O24319 +24320, O24320 +24321, O24321 +24322, O24322 +24323, O24323 +24324, O24324 +24325, O24325 +24326, O24326 +24327, O24327 +24328, O24328 +24329, O24329 +24330, O24330 +24331, O24331 +24332, O24332 +24333, O24333 +24334, O24334 +24335, O24335 +24336, O24336 +24337, O24337 +24338, O24338 +24339, O24339 +24340, O24340 +24341, O24341 +24342, O24342 +24343, O24343 +24344, O24344 +24345, O24345 +24346, O24346 +24347, O24347 +24348, O24348 +24349, O24349 +24350, O24350 +24351, O24351 +24352, O24352 +24353, O24353 +24354, O24354 +24355, O24355 +24356, O24356 +24357, O24357 +24358, O24358 +24359, O24359 +24360, O24360 +24361, O24361 +24362, O24362 +24363, O24363 +24364, O24364 +24365, O24365 +24366, O24366 +24367, O24367 +24368, O24368 +24369, O24369 +24370, O24370 +24371, O24371 +24372, O24372 +24373, O24373 +24374, O24374 +24375, O24375 +24376, O24376 +24377, O24377 +24378, O24378 +24379, O24379 +24380, O24380 +24381, O24381 +24382, O24382 +24383, O24383 +24384, O24384 +24385, O24385 +24386, O24386 +24387, O24387 +24388, O24388 +24389, O24389 +24390, O24390 +24391, O24391 +24392, O24392 +24393, O24393 +24394, O24394 +24395, O24395 +24396, O24396 +24397, O24397 +24398, O24398 +24399, O24399 +24400, O24400 +24401, O24401 +24402, O24402 +24403, O24403 +24404, O24404 +24405, O24405 +24406, O24406 +24407, O24407 +24408, O24408 +24409, O24409 +24410, O24410 +24411, O24411 +24412, O24412 +24413, O24413 +24414, O24414 +24415, O24415 +24416, O24416 +24417, O24417 +24418, O24418 +24419, O24419 +24420, O24420 +24421, O24421 +24422, O24422 +24423, O24423 +24424, O24424 +24425, O24425 +24426, O24426 +24427, O24427 +24428, O24428 +24429, O24429 +24430, O24430 +24431, O24431 +24432, O24432 +24433, O24433 +24434, O24434 +24435, O24435 +24436, O24436 +24437, O24437 +24438, O24438 +24439, O24439 +24440, O24440 +24441, O24441 +24442, O24442 +24443, O24443 +24444, O24444 +24445, O24445 +24446, O24446 +24447, O24447 +24448, O24448 +24449, O24449 +24450, O24450 +24451, O24451 +24452, O24452 +24453, O24453 +24454, O24454 +24455, O24455 +24456, O24456 +24457, O24457 +24458, O24458 +24459, O24459 +24460, O24460 +24461, O24461 +24462, O24462 +24463, O24463 +24464, O24464 +24465, O24465 +24466, O24466 +24467, O24467 +24468, O24468 +24469, O24469 +24470, O24470 +24471, O24471 +24472, O24472 +24473, O24473 +24474, O24474 +24475, O24475 +24476, O24476 +24477, O24477 +24478, O24478 +24479, O24479 +24480, O24480 +24481, O24481 +24482, O24482 +24483, O24483 +24484, O24484 +24485, O24485 +24486, O24486 +24487, O24487 +24488, O24488 +24489, O24489 +24490, O24490 +24491, O24491 +24492, O24492 +24493, O24493 +24494, O24494 +24495, O24495 +24496, O24496 +24497, O24497 +24498, O24498 +24499, O24499 +24500, O24500 +24501, O24501 +24502, O24502 +24503, O24503 +24504, O24504 +24505, O24505 +24506, O24506 +24507, O24507 +24508, O24508 +24509, O24509 +24510, O24510 +24511, O24511 +24512, O24512 +24513, O24513 +24514, O24514 +24515, O24515 +24516, O24516 +24517, O24517 +24518, O24518 +24519, O24519 +24520, O24520 +24521, O24521 +24522, O24522 +24523, O24523 +24524, O24524 +24525, O24525 +24526, O24526 +24527, O24527 +24528, O24528 +24529, O24529 +24530, O24530 +24531, O24531 +24532, O24532 +24533, O24533 +24534, O24534 +24535, O24535 +24536, O24536 +24537, O24537 +24538, O24538 +24539, O24539 +24540, O24540 +24541, O24541 +24542, O24542 +24543, O24543 +24544, O24544 +24545, O24545 +24546, O24546 +24547, O24547 +24548, O24548 +24549, O24549 +24550, O24550 +24551, O24551 +24552, O24552 +24553, O24553 +24554, O24554 +24555, O24555 +24556, O24556 +24557, O24557 +24558, O24558 +24559, O24559 +24560, O24560 +24561, O24561 +24562, O24562 +24563, O24563 +24564, O24564 +24565, O24565 +24566, O24566 +24567, O24567 +24568, O24568 +24569, O24569 +24570, O24570 +24571, O24571 +24572, O24572 +24573, O24573 +24574, O24574 +24575, O24575 +24576, O24576 +24577, O24577 +24578, O24578 +24579, O24579 +24580, O24580 +24581, O24581 +24582, O24582 +24583, O24583 +24584, O24584 +24585, O24585 +24586, O24586 +24587, O24587 +24588, O24588 +24589, O24589 +24590, O24590 +24591, O24591 +24592, O24592 +24593, O24593 +24594, O24594 +24595, O24595 +24596, O24596 +24597, O24597 +24598, O24598 +24599, O24599 +24600, O24600 +24601, O24601 +24602, O24602 +24603, O24603 +24604, O24604 +24605, O24605 +24606, O24606 +24607, O24607 +24608, O24608 +24609, O24609 +24610, O24610 +24611, O24611 +24612, O24612 +24613, O24613 +24614, O24614 +24615, O24615 +24616, O24616 +24617, O24617 +24618, O24618 +24619, O24619 +24620, O24620 +24621, O24621 +24622, O24622 +24623, O24623 +24624, O24624 +24625, O24625 +24626, O24626 +24627, O24627 +24628, O24628 +24629, O24629 +24630, O24630 +24631, O24631 +24632, O24632 +24633, O24633 +24634, O24634 +24635, O24635 +24636, O24636 +24637, O24637 +24638, O24638 +24639, O24639 +24640, O24640 +24641, O24641 +24642, O24642 +24643, O24643 +24644, O24644 +24645, O24645 +24646, O24646 +24647, O24647 +24648, O24648 +24649, O24649 +24650, O24650 +24651, O24651 +24652, O24652 +24653, O24653 +24654, O24654 +24655, O24655 +24656, O24656 +24657, O24657 +24658, O24658 +24659, O24659 +24660, O24660 +24661, O24661 +24662, O24662 +24663, O24663 +24664, O24664 +24665, O24665 +24666, O24666 +24667, O24667 +24668, O24668 +24669, O24669 +24670, O24670 +24671, O24671 +24672, O24672 +24673, O24673 +24674, O24674 +24675, O24675 +24676, O24676 +24677, O24677 +24678, O24678 +24679, O24679 +24680, O24680 +24681, O24681 +24682, O24682 +24683, O24683 +24684, O24684 +24685, O24685 +24686, O24686 +24687, O24687 +24688, O24688 +24689, O24689 +24690, O24690 +24691, O24691 +24692, O24692 +24693, O24693 +24694, O24694 +24695, O24695 +24696, O24696 +24697, O24697 +24698, O24698 +24699, O24699 +24700, O24700 +24701, O24701 +24702, O24702 +24703, O24703 +24704, O24704 +24705, O24705 +24706, O24706 +24707, O24707 +24708, O24708 +24709, O24709 +24710, O24710 +24711, O24711 +24712, O24712 +24713, O24713 +24714, O24714 +24715, O24715 +24716, O24716 +24717, O24717 +24718, O24718 +24719, O24719 +24720, O24720 +24721, O24721 +24722, O24722 +24723, O24723 +24724, O24724 +24725, O24725 +24726, O24726 +24727, O24727 +24728, O24728 +24729, O24729 +24730, O24730 +24731, O24731 +24732, O24732 +24733, O24733 +24734, O24734 +24735, O24735 +24736, O24736 +24737, O24737 +24738, O24738 +24739, O24739 +24740, O24740 +24741, O24741 +24742, O24742 +24743, O24743 +24744, O24744 +24745, O24745 +24746, O24746 +24747, O24747 +24748, O24748 +24749, O24749 +24750, O24750 +24751, O24751 +24752, O24752 +24753, O24753 +24754, O24754 +24755, O24755 +24756, O24756 +24757, O24757 +24758, O24758 +24759, O24759 +24760, O24760 +24761, O24761 +24762, O24762 +24763, O24763 +24764, O24764 +24765, O24765 +24766, O24766 +24767, O24767 +24768, O24768 +24769, O24769 +24770, O24770 +24771, O24771 +24772, O24772 +24773, O24773 +24774, O24774 +24775, O24775 +24776, O24776 +24777, O24777 +24778, O24778 +24779, O24779 +24780, O24780 +24781, O24781 +24782, O24782 +24783, O24783 +24784, O24784 +24785, O24785 +24786, O24786 +24787, O24787 +24788, O24788 +24789, O24789 +24790, O24790 +24791, O24791 +24792, O24792 +24793, O24793 +24794, O24794 +24795, O24795 +24796, O24796 +24797, O24797 +24798, O24798 +24799, O24799 +24800, O24800 +24801, O24801 +24802, O24802 +24803, O24803 +24804, O24804 +24805, O24805 +24806, O24806 +24807, O24807 +24808, O24808 +24809, O24809 +24810, O24810 +24811, O24811 +24812, O24812 +24813, O24813 +24814, O24814 +24815, O24815 +24816, O24816 +24817, O24817 +24818, O24818 +24819, O24819 +24820, O24820 +24821, O24821 +24822, O24822 +24823, O24823 +24824, O24824 +24825, O24825 +24826, O24826 +24827, O24827 +24828, O24828 +24829, O24829 +24830, O24830 +24831, O24831 +24832, O24832 +24833, O24833 +24834, O24834 +24835, O24835 +24836, O24836 +24837, O24837 +24838, O24838 +24839, O24839 +24840, O24840 +24841, O24841 +24842, O24842 +24843, O24843 +24844, O24844 +24845, O24845 +24846, O24846 +24847, O24847 +24848, O24848 +24849, O24849 +24850, O24850 +24851, O24851 +24852, O24852 +24853, O24853 +24854, O24854 +24855, O24855 +24856, O24856 +24857, O24857 +24858, O24858 +24859, O24859 +24860, O24860 +24861, O24861 +24862, O24862 +24863, O24863 +24864, O24864 +24865, O24865 +24866, O24866 +24867, O24867 +24868, O24868 +24869, O24869 +24870, O24870 +24871, O24871 +24872, O24872 +24873, O24873 +24874, O24874 +24875, O24875 +24876, O24876 +24877, O24877 +24878, O24878 +24879, O24879 +24880, O24880 +24881, O24881 +24882, O24882 +24883, O24883 +24884, O24884 +24885, O24885 +24886, O24886 +24887, O24887 +24888, O24888 +24889, O24889 +24890, O24890 +24891, O24891 +24892, O24892 +24893, O24893 +24894, O24894 +24895, O24895 +24896, O24896 +24897, O24897 +24898, O24898 +24899, O24899 +24900, O24900 +24901, O24901 +24902, O24902 +24903, O24903 +24904, O24904 +24905, O24905 +24906, O24906 +24907, O24907 +24908, O24908 +24909, O24909 +24910, O24910 +24911, O24911 +24912, O24912 +24913, O24913 +24914, O24914 +24915, O24915 +24916, O24916 +24917, O24917 +24918, O24918 +24919, O24919 +24920, O24920 +24921, O24921 +24922, O24922 +24923, O24923 +24924, O24924 +24925, O24925 +24926, O24926 +24927, O24927 +24928, O24928 +24929, O24929 +24930, O24930 +24931, O24931 +24932, O24932 +24933, O24933 +24934, O24934 +24935, O24935 +24936, O24936 +24937, O24937 +24938, O24938 +24939, O24939 +24940, O24940 +24941, O24941 +24942, O24942 +24943, O24943 +24944, O24944 +24945, O24945 +24946, O24946 +24947, O24947 +24948, O24948 +24949, O24949 +24950, O24950 +24951, O24951 +24952, O24952 +24953, O24953 +24954, O24954 +24955, O24955 +24956, O24956 +24957, O24957 +24958, O24958 +24959, O24959 +24960, O24960 +24961, O24961 +24962, O24962 +24963, O24963 +24964, O24964 +24965, O24965 +24966, O24966 +24967, O24967 +24968, O24968 +24969, O24969 +24970, O24970 +24971, O24971 +24972, O24972 +24973, O24973 +24974, O24974 +24975, O24975 +24976, O24976 +24977, O24977 +24978, O24978 +24979, O24979 +24980, O24980 +24981, O24981 +24982, O24982 +24983, O24983 +24984, O24984 +24985, O24985 +24986, O24986 +24987, O24987 +24988, O24988 +24989, O24989 +24990, O24990 +24991, O24991 +24992, O24992 +24993, O24993 +24994, O24994 +24995, O24995 +24996, O24996 +24997, O24997 +24998, O24998 +24999, O24999 +25000, O25000 +25001, O25001 +25002, O25002 +25003, O25003 +25004, O25004 +25005, O25005 +25006, O25006 +25007, O25007 +25008, O25008 +25009, O25009 +25010, O25010 +25011, O25011 +25012, O25012 +25013, O25013 +25014, O25014 +25015, O25015 +25016, O25016 +25017, O25017 +25018, O25018 +25019, O25019 +25020, O25020 +25021, O25021 +25022, O25022 +25023, O25023 +25024, O25024 +25025, O25025 +25026, O25026 +25027, O25027 +25028, O25028 +25029, O25029 +25030, O25030 +25031, O25031 +25032, O25032 +25033, O25033 +25034, O25034 +25035, O25035 +25036, O25036 +25037, O25037 +25038, O25038 +25039, O25039 +25040, O25040 +25041, O25041 +25042, O25042 +25043, O25043 +25044, O25044 +25045, O25045 +25046, O25046 +25047, O25047 +25048, O25048 +25049, O25049 +25050, O25050 +25051, O25051 +25052, O25052 +25053, O25053 +25054, O25054 +25055, O25055 +25056, O25056 +25057, O25057 +25058, O25058 +25059, O25059 +25060, O25060 +25061, O25061 +25062, O25062 +25063, O25063 +25064, O25064 +25065, O25065 +25066, O25066 +25067, O25067 +25068, O25068 +25069, O25069 +25070, O25070 +25071, O25071 +25072, O25072 +25073, O25073 +25074, O25074 +25075, O25075 +25076, O25076 +25077, O25077 +25078, O25078 +25079, O25079 +25080, O25080 +25081, O25081 +25082, O25082 +25083, O25083 +25084, O25084 +25085, O25085 +25086, O25086 +25087, O25087 +25088, O25088 +25089, O25089 +25090, O25090 +25091, O25091 +25092, O25092 +25093, O25093 +25094, O25094 +25095, O25095 +25096, O25096 +25097, O25097 +25098, O25098 +25099, O25099 +25100, O25100 +25101, O25101 +25102, O25102 +25103, O25103 +25104, O25104 +25105, O25105 +25106, O25106 +25107, O25107 +25108, O25108 +25109, O25109 +25110, O25110 +25111, O25111 +25112, O25112 +25113, O25113 +25114, O25114 +25115, O25115 +25116, O25116 +25117, O25117 +25118, O25118 +25119, O25119 +25120, O25120 +25121, O25121 +25122, O25122 +25123, O25123 +25124, O25124 +25125, O25125 +25126, O25126 +25127, O25127 +25128, O25128 +25129, O25129 +25130, O25130 +25131, O25131 +25132, O25132 +25133, O25133 +25134, O25134 +25135, O25135 +25136, O25136 +25137, O25137 +25138, O25138 +25139, O25139 +25140, O25140 +25141, O25141 +25142, O25142 +25143, O25143 +25144, O25144 +25145, O25145 +25146, O25146 +25147, O25147 +25148, O25148 +25149, O25149 +25150, O25150 +25151, O25151 +25152, O25152 +25153, O25153 +25154, O25154 +25155, O25155 +25156, O25156 +25157, O25157 +25158, O25158 +25159, O25159 +25160, O25160 +25161, O25161 +25162, O25162 +25163, O25163 +25164, O25164 +25165, O25165 +25166, O25166 +25167, O25167 +25168, O25168 +25169, O25169 +25170, O25170 +25171, O25171 +25172, O25172 +25173, O25173 +25174, O25174 +25175, O25175 +25176, O25176 +25177, O25177 +25178, O25178 +25179, O25179 +25180, O25180 +25181, O25181 +25182, O25182 +25183, O25183 +25184, O25184 +25185, O25185 +25186, O25186 +25187, O25187 +25188, O25188 +25189, O25189 +25190, O25190 +25191, O25191 +25192, O25192 +25193, O25193 +25194, O25194 +25195, O25195 +25196, O25196 +25197, O25197 +25198, O25198 +25199, O25199 +25200, O25200 +25201, O25201 +25202, O25202 +25203, O25203 +25204, O25204 +25205, O25205 +25206, O25206 +25207, O25207 +25208, O25208 +25209, O25209 +25210, O25210 +25211, O25211 +25212, O25212 +25213, O25213 +25214, O25214 +25215, O25215 +25216, O25216 +25217, O25217 +25218, O25218 +25219, O25219 +25220, O25220 +25221, O25221 +25222, O25222 +25223, O25223 +25224, O25224 +25225, O25225 +25226, O25226 +25227, O25227 +25228, O25228 +25229, O25229 +25230, O25230 +25231, O25231 +25232, O25232 +25233, O25233 +25234, O25234 +25235, O25235 +25236, O25236 +25237, O25237 +25238, O25238 +25239, O25239 +25240, O25240 +25241, O25241 +25242, O25242 +25243, O25243 +25244, O25244 +25245, O25245 +25246, O25246 +25247, O25247 +25248, O25248 +25249, O25249 +25250, O25250 +25251, O25251 +25252, O25252 +25253, O25253 +25254, O25254 +25255, O25255 +25256, O25256 +25257, O25257 +25258, O25258 +25259, O25259 +25260, O25260 +25261, O25261 +25262, O25262 +25263, O25263 +25264, O25264 +25265, O25265 +25266, O25266 +25267, O25267 +25268, O25268 +25269, O25269 +25270, O25270 +25271, O25271 +25272, O25272 +25273, O25273 +25274, O25274 +25275, O25275 +25276, O25276 +25277, O25277 +25278, O25278 +25279, O25279 +25280, O25280 +25281, O25281 +25282, O25282 +25283, O25283 +25284, O25284 +25285, O25285 +25286, O25286 +25287, O25287 +25288, O25288 +25289, O25289 +25290, O25290 +25291, O25291 +25292, O25292 +25293, O25293 +25294, O25294 +25295, O25295 +25296, O25296 +25297, O25297 +25298, O25298 +25299, O25299 +25300, O25300 +25301, O25301 +25302, O25302 +25303, O25303 +25304, O25304 +25305, O25305 +25306, O25306 +25307, O25307 +25308, O25308 +25309, O25309 +25310, O25310 +25311, O25311 +25312, O25312 +25313, O25313 +25314, O25314 +25315, O25315 +25316, O25316 +25317, O25317 +25318, O25318 +25319, O25319 +25320, O25320 +25321, O25321 +25322, O25322 +25323, O25323 +25324, O25324 +25325, O25325 +25326, O25326 +25327, O25327 +25328, O25328 +25329, O25329 +25330, O25330 +25331, O25331 +25332, O25332 +25333, O25333 +25334, O25334 +25335, O25335 +25336, O25336 +25337, O25337 +25338, O25338 +25339, O25339 +25340, O25340 +25341, O25341 +25342, O25342 +25343, O25343 +25344, O25344 +25345, O25345 +25346, O25346 +25347, O25347 +25348, O25348 +25349, O25349 +25350, O25350 +25351, O25351 +25352, O25352 +25353, O25353 +25354, O25354 +25355, O25355 +25356, O25356 +25357, O25357 +25358, O25358 +25359, O25359 +25360, O25360 +25361, O25361 +25362, O25362 +25363, O25363 +25364, O25364 +25365, O25365 +25366, O25366 +25367, O25367 +25368, O25368 +25369, O25369 +25370, O25370 +25371, O25371 +25372, O25372 +25373, O25373 +25374, O25374 +25375, O25375 +25376, O25376 +25377, O25377 +25378, O25378 +25379, O25379 +25380, O25380 +25381, O25381 +25382, O25382 +25383, O25383 +25384, O25384 +25385, O25385 +25386, O25386 +25387, O25387 +25388, O25388 +25389, O25389 +25390, O25390 +25391, O25391 +25392, O25392 +25393, O25393 +25394, O25394 +25395, O25395 +25396, O25396 +25397, O25397 +25398, O25398 +25399, O25399 +25400, O25400 +25401, O25401 +25402, O25402 +25403, O25403 +25404, O25404 +25405, O25405 +25406, O25406 +25407, O25407 +25408, O25408 +25409, O25409 +25410, O25410 +25411, O25411 +25412, O25412 +25413, O25413 +25414, O25414 +25415, O25415 +25416, O25416 +25417, O25417 +25418, O25418 +25419, O25419 +25420, O25420 +25421, O25421 +25422, O25422 +25423, O25423 +25424, O25424 +25425, O25425 +25426, O25426 +25427, O25427 +25428, O25428 +25429, O25429 +25430, O25430 +25431, O25431 +25432, O25432 +25433, O25433 +25434, O25434 +25435, O25435 +25436, O25436 +25437, O25437 +25438, O25438 +25439, O25439 +25440, O25440 +25441, O25441 +25442, O25442 +25443, O25443 +25444, O25444 +25445, O25445 +25446, O25446 +25447, O25447 +25448, O25448 +25449, O25449 +25450, O25450 +25451, O25451 +25452, O25452 +25453, O25453 +25454, O25454 +25455, O25455 +25456, O25456 +25457, O25457 +25458, O25458 +25459, O25459 +25460, O25460 +25461, O25461 +25462, O25462 +25463, O25463 +25464, O25464 +25465, O25465 +25466, O25466 +25467, O25467 +25468, O25468 +25469, O25469 +25470, O25470 +25471, O25471 +25472, O25472 +25473, O25473 +25474, O25474 +25475, O25475 +25476, O25476 +25477, O25477 +25478, O25478 +25479, O25479 +25480, O25480 +25481, O25481 +25482, O25482 +25483, O25483 +25484, O25484 +25485, O25485 +25486, O25486 +25487, O25487 +25488, O25488 +25489, O25489 +25490, O25490 +25491, O25491 +25492, O25492 +25493, O25493 +25494, O25494 +25495, O25495 +25496, O25496 +25497, O25497 +25498, O25498 +25499, O25499 +25500, O25500 +25501, O25501 +25502, O25502 +25503, O25503 +25504, O25504 +25505, O25505 +25506, O25506 +25507, O25507 +25508, O25508 +25509, O25509 +25510, O25510 +25511, O25511 +25512, O25512 +25513, O25513 +25514, O25514 +25515, O25515 +25516, O25516 +25517, O25517 +25518, O25518 +25519, O25519 +25520, O25520 +25521, O25521 +25522, O25522 +25523, O25523 +25524, O25524 +25525, O25525 +25526, O25526 +25527, O25527 +25528, O25528 +25529, O25529 +25530, O25530 +25531, O25531 +25532, O25532 +25533, O25533 +25534, O25534 +25535, O25535 +25536, O25536 +25537, O25537 +25538, O25538 +25539, O25539 +25540, O25540 +25541, O25541 +25542, O25542 +25543, O25543 +25544, O25544 +25545, O25545 +25546, O25546 +25547, O25547 +25548, O25548 +25549, O25549 +25550, O25550 +25551, O25551 +25552, O25552 +25553, O25553 +25554, O25554 +25555, O25555 +25556, O25556 +25557, O25557 +25558, O25558 +25559, O25559 +25560, O25560 +25561, O25561 +25562, O25562 +25563, O25563 +25564, O25564 +25565, O25565 +25566, O25566 +25567, O25567 +25568, O25568 +25569, O25569 +25570, O25570 +25571, O25571 +25572, O25572 +25573, O25573 +25574, O25574 +25575, O25575 +25576, O25576 +25577, O25577 +25578, O25578 +25579, O25579 +25580, O25580 +25581, O25581 +25582, O25582 +25583, O25583 +25584, O25584 +25585, O25585 +25586, O25586 +25587, O25587 +25588, O25588 +25589, O25589 +25590, O25590 +25591, O25591 +25592, O25592 +25593, O25593 +25594, O25594 +25595, O25595 +25596, O25596 +25597, O25597 +25598, O25598 +25599, O25599 +25600, O25600 +25601, O25601 +25602, O25602 +25603, O25603 +25604, O25604 +25605, O25605 +25606, O25606 +25607, O25607 +25608, O25608 +25609, O25609 +25610, O25610 +25611, O25611 +25612, O25612 +25613, O25613 +25614, O25614 +25615, O25615 +25616, O25616 +25617, O25617 +25618, O25618 +25619, O25619 +25620, O25620 +25621, O25621 +25622, O25622 +25623, O25623 +25624, O25624 +25625, O25625 +25626, O25626 +25627, O25627 +25628, O25628 +25629, O25629 +25630, O25630 +25631, O25631 +25632, O25632 +25633, O25633 +25634, O25634 +25635, O25635 +25636, O25636 +25637, O25637 +25638, O25638 +25639, O25639 +25640, O25640 +25641, O25641 +25642, O25642 +25643, O25643 +25644, O25644 +25645, O25645 +25646, O25646 +25647, O25647 +25648, O25648 +25649, O25649 +25650, O25650 +25651, O25651 +25652, O25652 +25653, O25653 +25654, O25654 +25655, O25655 +25656, O25656 +25657, O25657 +25658, O25658 +25659, O25659 +25660, O25660 +25661, O25661 +25662, O25662 +25663, O25663 +25664, O25664 +25665, O25665 +25666, O25666 +25667, O25667 +25668, O25668 +25669, O25669 +25670, O25670 +25671, O25671 +25672, O25672 +25673, O25673 +25674, O25674 +25675, O25675 +25676, O25676 +25677, O25677 +25678, O25678 +25679, O25679 +25680, O25680 +25681, O25681 +25682, O25682 +25683, O25683 +25684, O25684 +25685, O25685 +25686, O25686 +25687, O25687 +25688, O25688 +25689, O25689 +25690, O25690 +25691, O25691 +25692, O25692 +25693, O25693 +25694, O25694 +25695, O25695 +25696, O25696 +25697, O25697 +25698, O25698 +25699, O25699 +25700, O25700 +25701, O25701 +25702, O25702 +25703, O25703 +25704, O25704 +25705, O25705 +25706, O25706 +25707, O25707 +25708, O25708 +25709, O25709 +25710, O25710 +25711, O25711 +25712, O25712 +25713, O25713 +25714, O25714 +25715, O25715 +25716, O25716 +25717, O25717 +25718, O25718 +25719, O25719 +25720, O25720 +25721, O25721 +25722, O25722 +25723, O25723 +25724, O25724 +25725, O25725 +25726, O25726 +25727, O25727 +25728, O25728 +25729, O25729 +25730, O25730 +25731, O25731 +25732, O25732 +25733, O25733 +25734, O25734 +25735, O25735 +25736, O25736 +25737, O25737 +25738, O25738 +25739, O25739 +25740, O25740 +25741, O25741 +25742, O25742 +25743, O25743 +25744, O25744 +25745, O25745 +25746, O25746 +25747, O25747 +25748, O25748 +25749, O25749 +25750, O25750 +25751, O25751 +25752, O25752 +25753, O25753 +25754, O25754 +25755, O25755 +25756, O25756 +25757, O25757 +25758, O25758 +25759, O25759 +25760, O25760 +25761, O25761 +25762, O25762 +25763, O25763 +25764, O25764 +25765, O25765 +25766, O25766 +25767, O25767 +25768, O25768 +25769, O25769 +25770, O25770 +25771, O25771 +25772, O25772 +25773, O25773 +25774, O25774 +25775, O25775 +25776, O25776 +25777, O25777 +25778, O25778 +25779, O25779 +25780, O25780 +25781, O25781 +25782, O25782 +25783, O25783 +25784, O25784 +25785, O25785 +25786, O25786 +25787, O25787 +25788, O25788 +25789, O25789 +25790, O25790 +25791, O25791 +25792, O25792 +25793, O25793 +25794, O25794 +25795, O25795 +25796, O25796 +25797, O25797 +25798, O25798 +25799, O25799 +25800, O25800 +25801, O25801 +25802, O25802 +25803, O25803 +25804, O25804 +25805, O25805 +25806, O25806 +25807, O25807 +25808, O25808 +25809, O25809 +25810, O25810 +25811, O25811 +25812, O25812 +25813, O25813 +25814, O25814 +25815, O25815 +25816, O25816 +25817, O25817 +25818, O25818 +25819, O25819 +25820, O25820 +25821, O25821 +25822, O25822 +25823, O25823 +25824, O25824 +25825, O25825 +25826, O25826 +25827, O25827 +25828, O25828 +25829, O25829 +25830, O25830 +25831, O25831 +25832, O25832 +25833, O25833 +25834, O25834 +25835, O25835 +25836, O25836 +25837, O25837 +25838, O25838 +25839, O25839 +25840, O25840 +25841, O25841 +25842, O25842 +25843, O25843 +25844, O25844 +25845, O25845 +25846, O25846 +25847, O25847 +25848, O25848 +25849, O25849 +25850, O25850 +25851, O25851 +25852, O25852 +25853, O25853 +25854, O25854 +25855, O25855 +25856, O25856 +25857, O25857 +25858, O25858 +25859, O25859 +25860, O25860 +25861, O25861 +25862, O25862 +25863, O25863 +25864, O25864 +25865, O25865 +25866, O25866 +25867, O25867 +25868, O25868 +25869, O25869 +25870, O25870 +25871, O25871 +25872, O25872 +25873, O25873 +25874, O25874 +25875, O25875 +25876, O25876 +25877, O25877 +25878, O25878 +25879, O25879 +25880, O25880 +25881, O25881 +25882, O25882 +25883, O25883 +25884, O25884 +25885, O25885 +25886, O25886 +25887, O25887 +25888, O25888 +25889, O25889 +25890, O25890 +25891, O25891 +25892, O25892 +25893, O25893 +25894, O25894 +25895, O25895 +25896, O25896 +25897, O25897 +25898, O25898 +25899, O25899 +25900, O25900 +25901, O25901 +25902, O25902 +25903, O25903 +25904, O25904 +25905, O25905 +25906, O25906 +25907, O25907 +25908, O25908 +25909, O25909 +25910, O25910 +25911, O25911 +25912, O25912 +25913, O25913 +25914, O25914 +25915, O25915 +25916, O25916 +25917, O25917 +25918, O25918 +25919, O25919 +25920, O25920 +25921, O25921 +25922, O25922 +25923, O25923 +25924, O25924 +25925, O25925 +25926, O25926 +25927, O25927 +25928, O25928 +25929, O25929 +25930, O25930 +25931, O25931 +25932, O25932 +25933, O25933 +25934, O25934 +25935, O25935 +25936, O25936 +25937, O25937 +25938, O25938 +25939, O25939 +25940, O25940 +25941, O25941 +25942, O25942 +25943, O25943 +25944, O25944 +25945, O25945 +25946, O25946 +25947, O25947 +25948, O25948 +25949, O25949 +25950, O25950 +25951, O25951 +25952, O25952 +25953, O25953 +25954, O25954 +25955, O25955 +25956, O25956 +25957, O25957 +25958, O25958 +25959, O25959 +25960, O25960 +25961, O25961 +25962, O25962 +25963, O25963 +25964, O25964 +25965, O25965 +25966, O25966 +25967, O25967 +25968, O25968 +25969, O25969 +25970, O25970 +25971, O25971 +25972, O25972 +25973, O25973 +25974, O25974 +25975, O25975 +25976, O25976 +25977, O25977 +25978, O25978 +25979, O25979 +25980, O25980 +25981, O25981 +25982, O25982 +25983, O25983 +25984, O25984 +25985, O25985 +25986, O25986 +25987, O25987 +25988, O25988 +25989, O25989 +25990, O25990 +25991, O25991 +25992, O25992 +25993, O25993 +25994, O25994 +25995, O25995 +25996, O25996 +25997, O25997 +25998, O25998 +25999, O25999 +26000, O26000 +26001, O26001 +26002, O26002 +26003, O26003 +26004, O26004 +26005, O26005 +26006, O26006 +26007, O26007 +26008, O26008 +26009, O26009 +26010, O26010 +26011, O26011 +26012, O26012 +26013, O26013 +26014, O26014 +26015, O26015 +26016, O26016 +26017, O26017 +26018, O26018 +26019, O26019 +26020, O26020 +26021, O26021 +26022, O26022 +26023, O26023 +26024, O26024 +26025, O26025 +26026, O26026 +26027, O26027 +26028, O26028 +26029, O26029 +26030, O26030 +26031, O26031 +26032, O26032 +26033, O26033 +26034, O26034 +26035, O26035 +26036, O26036 +26037, O26037 +26038, O26038 +26039, O26039 +26040, O26040 +26041, O26041 +26042, O26042 +26043, O26043 +26044, O26044 +26045, O26045 +26046, O26046 +26047, O26047 +26048, O26048 +26049, O26049 +26050, O26050 +26051, O26051 +26052, O26052 +26053, O26053 +26054, O26054 +26055, O26055 +26056, O26056 +26057, O26057 +26058, O26058 +26059, O26059 +26060, O26060 +26061, O26061 +26062, O26062 +26063, O26063 +26064, O26064 +26065, O26065 +26066, O26066 +26067, O26067 +26068, O26068 +26069, O26069 +26070, O26070 +26071, O26071 +26072, O26072 +26073, O26073 +26074, O26074 +26075, O26075 +26076, O26076 +26077, O26077 +26078, O26078 +26079, O26079 +26080, O26080 +26081, O26081 +26082, O26082 +26083, O26083 +26084, O26084 +26085, O26085 +26086, O26086 +26087, O26087 +26088, O26088 +26089, O26089 +26090, O26090 +26091, O26091 +26092, O26092 +26093, O26093 +26094, O26094 +26095, O26095 +26096, O26096 +26097, O26097 +26098, O26098 +26099, O26099 +26100, O26100 +26101, O26101 +26102, O26102 +26103, O26103 +26104, O26104 +26105, O26105 +26106, O26106 +26107, O26107 +26108, O26108 +26109, O26109 +26110, O26110 +26111, O26111 +26112, O26112 +26113, O26113 +26114, O26114 +26115, O26115 +26116, O26116 +26117, O26117 +26118, O26118 +26119, O26119 +26120, O26120 +26121, O26121 +26122, O26122 +26123, O26123 +26124, O26124 +26125, O26125 +26126, O26126 +26127, O26127 +26128, O26128 +26129, O26129 +26130, O26130 +26131, O26131 +26132, O26132 +26133, O26133 +26134, O26134 +26135, O26135 +26136, O26136 +26137, O26137 +26138, O26138 +26139, O26139 +26140, O26140 +26141, O26141 +26142, O26142 +26143, O26143 +26144, O26144 +26145, O26145 +26146, O26146 +26147, O26147 +26148, O26148 +26149, O26149 +26150, O26150 +26151, O26151 +26152, O26152 +26153, O26153 +26154, O26154 +26155, O26155 +26156, O26156 +26157, O26157 +26158, O26158 +26159, O26159 +26160, O26160 +26161, O26161 +26162, O26162 +26163, O26163 +26164, O26164 +26165, O26165 +26166, O26166 +26167, O26167 +26168, O26168 +26169, O26169 +26170, O26170 +26171, O26171 +26172, O26172 +26173, O26173 +26174, O26174 +26175, O26175 +26176, O26176 +26177, O26177 +26178, O26178 +26179, O26179 +26180, O26180 +26181, O26181 +26182, O26182 +26183, O26183 +26184, O26184 +26185, O26185 +26186, O26186 +26187, O26187 +26188, O26188 +26189, O26189 +26190, O26190 +26191, O26191 +26192, O26192 +26193, O26193 +26194, O26194 +26195, O26195 +26196, O26196 +26197, O26197 +26198, O26198 +26199, O26199 +26200, O26200 +26201, O26201 +26202, O26202 +26203, O26203 +26204, O26204 +26205, O26205 +26206, O26206 +26207, O26207 +26208, O26208 +26209, O26209 +26210, O26210 +26211, O26211 +26212, O26212 +26213, O26213 +26214, O26214 +26215, O26215 +26216, O26216 +26217, O26217 +26218, O26218 +26219, O26219 +26220, O26220 +26221, O26221 +26222, O26222 +26223, O26223 +26224, O26224 +26225, O26225 +26226, O26226 +26227, O26227 +26228, O26228 +26229, O26229 +26230, O26230 +26231, O26231 +26232, O26232 +26233, O26233 +26234, O26234 +26235, O26235 +26236, O26236 +26237, O26237 +26238, O26238 +26239, O26239 +26240, O26240 +26241, O26241 +26242, O26242 +26243, O26243 +26244, O26244 +26245, O26245 +26246, O26246 +26247, O26247 +26248, O26248 +26249, O26249 +26250, O26250 +26251, O26251 +26252, O26252 +26253, O26253 +26254, O26254 +26255, O26255 +26256, O26256 +26257, O26257 +26258, O26258 +26259, O26259 +26260, O26260 +26261, O26261 +26262, O26262 +26263, O26263 +26264, O26264 +26265, O26265 +26266, O26266 +26267, O26267 +26268, O26268 +26269, O26269 +26270, O26270 +26271, O26271 +26272, O26272 +26273, O26273 +26274, O26274 +26275, O26275 +26276, O26276 +26277, O26277 +26278, O26278 +26279, O26279 +26280, O26280 +26281, O26281 +26282, O26282 +26283, O26283 +26284, O26284 +26285, O26285 +26286, O26286 +26287, O26287 +26288, O26288 +26289, O26289 +26290, O26290 +26291, O26291 +26292, O26292 +26293, O26293 +26294, O26294 +26295, O26295 +26296, O26296 +26297, O26297 +26298, O26298 +26299, O26299 +26300, O26300 +26301, O26301 +26302, O26302 +26303, O26303 +26304, O26304 +26305, O26305 +26306, O26306 +26307, O26307 +26308, O26308 +26309, O26309 +26310, O26310 +26311, O26311 +26312, O26312 +26313, O26313 +26314, O26314 +26315, O26315 +26316, O26316 +26317, O26317 +26318, O26318 +26319, O26319 +26320, O26320 +26321, O26321 +26322, O26322 +26323, O26323 +26324, O26324 +26325, O26325 +26326, O26326 +26327, O26327 +26328, O26328 +26329, O26329 +26330, O26330 +26331, O26331 +26332, O26332 +26333, O26333 +26334, O26334 +26335, O26335 +26336, O26336 +26337, O26337 +26338, O26338 +26339, O26339 +26340, O26340 +26341, O26341 +26342, O26342 +26343, O26343 +26344, O26344 +26345, O26345 +26346, O26346 +26347, O26347 +26348, O26348 +26349, O26349 +26350, O26350 +26351, O26351 +26352, O26352 +26353, O26353 +26354, O26354 +26355, O26355 +26356, O26356 +26357, O26357 +26358, O26358 +26359, O26359 +26360, O26360 +26361, O26361 +26362, O26362 +26363, O26363 +26364, O26364 +26365, O26365 +26366, O26366 +26367, O26367 +26368, O26368 +26369, O26369 +26370, O26370 +26371, O26371 +26372, O26372 +26373, O26373 +26374, O26374 +26375, O26375 +26376, O26376 +26377, O26377 +26378, O26378 +26379, O26379 +26380, O26380 +26381, O26381 +26382, O26382 +26383, O26383 +26384, O26384 +26385, O26385 +26386, O26386 +26387, O26387 +26388, O26388 +26389, O26389 +26390, O26390 +26391, O26391 +26392, O26392 +26393, O26393 +26394, O26394 +26395, O26395 +26396, O26396 +26397, O26397 +26398, O26398 +26399, O26399 +26400, O26400 +26401, O26401 +26402, O26402 +26403, O26403 +26404, O26404 +26405, O26405 +26406, O26406 +26407, O26407 +26408, O26408 +26409, O26409 +26410, O26410 +26411, O26411 +26412, O26412 +26413, O26413 +26414, O26414 +26415, O26415 +26416, O26416 +26417, O26417 +26418, O26418 +26419, O26419 +26420, O26420 +26421, O26421 +26422, O26422 +26423, O26423 +26424, O26424 +26425, O26425 +26426, O26426 +26427, O26427 +26428, O26428 +26429, O26429 +26430, O26430 +26431, O26431 +26432, O26432 +26433, O26433 +26434, O26434 +26435, O26435 +26436, O26436 +26437, O26437 +26438, O26438 +26439, O26439 +26440, O26440 +26441, O26441 +26442, O26442 +26443, O26443 +26444, O26444 +26445, O26445 +26446, O26446 +26447, O26447 +26448, O26448 +26449, O26449 +26450, O26450 +26451, O26451 +26452, O26452 +26453, O26453 +26454, O26454 +26455, O26455 +26456, O26456 +26457, O26457 +26458, O26458 +26459, O26459 +26460, O26460 +26461, O26461 +26462, O26462 +26463, O26463 +26464, O26464 +26465, O26465 +26466, O26466 +26467, O26467 +26468, O26468 +26469, O26469 +26470, O26470 +26471, O26471 +26472, O26472 +26473, O26473 +26474, O26474 +26475, O26475 +26476, O26476 +26477, O26477 +26478, O26478 +26479, O26479 +26480, O26480 +26481, O26481 +26482, O26482 +26483, O26483 +26484, O26484 +26485, O26485 +26486, O26486 +26487, O26487 +26488, O26488 +26489, O26489 +26490, O26490 +26491, O26491 +26492, O26492 +26493, O26493 +26494, O26494 +26495, O26495 +26496, O26496 +26497, O26497 +26498, O26498 +26499, O26499 +26500, O26500 +26501, O26501 +26502, O26502 +26503, O26503 +26504, O26504 +26505, O26505 +26506, O26506 +26507, O26507 +26508, O26508 +26509, O26509 +26510, O26510 +26511, O26511 +26512, O26512 +26513, O26513 +26514, O26514 +26515, O26515 +26516, O26516 +26517, O26517 +26518, O26518 +26519, O26519 +26520, O26520 +26521, O26521 +26522, O26522 +26523, O26523 +26524, O26524 +26525, O26525 +26526, O26526 +26527, O26527 +26528, O26528 +26529, O26529 +26530, O26530 +26531, O26531 +26532, O26532 +26533, O26533 +26534, O26534 +26535, O26535 +26536, O26536 +26537, O26537 +26538, O26538 +26539, O26539 +26540, O26540 +26541, O26541 +26542, O26542 +26543, O26543 +26544, O26544 +26545, O26545 +26546, O26546 +26547, O26547 +26548, O26548 +26549, O26549 +26550, O26550 +26551, O26551 +26552, O26552 +26553, O26553 +26554, O26554 +26555, O26555 +26556, O26556 +26557, O26557 +26558, O26558 +26559, O26559 +26560, O26560 +26561, O26561 +26562, O26562 +26563, O26563 +26564, O26564 +26565, O26565 +26566, O26566 +26567, O26567 +26568, O26568 +26569, O26569 +26570, O26570 +26571, O26571 +26572, O26572 +26573, O26573 +26574, O26574 +26575, O26575 +26576, O26576 +26577, O26577 +26578, O26578 +26579, O26579 +26580, O26580 +26581, O26581 +26582, O26582 +26583, O26583 +26584, O26584 +26585, O26585 +26586, O26586 +26587, O26587 +26588, O26588 +26589, O26589 +26590, O26590 +26591, O26591 +26592, O26592 +26593, O26593 +26594, O26594 +26595, O26595 +26596, O26596 +26597, O26597 +26598, O26598 +26599, O26599 +26600, O26600 +26601, O26601 +26602, O26602 +26603, O26603 +26604, O26604 +26605, O26605 +26606, O26606 +26607, O26607 +26608, O26608 +26609, O26609 +26610, O26610 +26611, O26611 +26612, O26612 +26613, O26613 +26614, O26614 +26615, O26615 +26616, O26616 +26617, O26617 +26618, O26618 +26619, O26619 +26620, O26620 +26621, O26621 +26622, O26622 +26623, O26623 +26624, O26624 +26625, O26625 +26626, O26626 +26627, O26627 +26628, O26628 +26629, O26629 +26630, O26630 +26631, O26631 +26632, O26632 +26633, O26633 +26634, O26634 +26635, O26635 +26636, O26636 +26637, O26637 +26638, O26638 +26639, O26639 +26640, O26640 +26641, O26641 +26642, O26642 +26643, O26643 +26644, O26644 +26645, O26645 +26646, O26646 +26647, O26647 +26648, O26648 +26649, O26649 +26650, O26650 +26651, O26651 +26652, O26652 +26653, O26653 +26654, O26654 +26655, O26655 +26656, O26656 +26657, O26657 +26658, O26658 +26659, O26659 +26660, O26660 +26661, O26661 +26662, O26662 +26663, O26663 +26664, O26664 +26665, O26665 +26666, O26666 +26667, O26667 +26668, O26668 +26669, O26669 +26670, O26670 +26671, O26671 +26672, O26672 +26673, O26673 +26674, O26674 +26675, O26675 +26676, O26676 +26677, O26677 +26678, O26678 +26679, O26679 +26680, O26680 +26681, O26681 +26682, O26682 +26683, O26683 +26684, O26684 +26685, O26685 +26686, O26686 +26687, O26687 +26688, O26688 +26689, O26689 +26690, O26690 +26691, O26691 +26692, O26692 +26693, O26693 +26694, O26694 +26695, O26695 +26696, O26696 +26697, O26697 +26698, O26698 +26699, O26699 +26700, O26700 +26701, O26701 +26702, O26702 +26703, O26703 +26704, O26704 +26705, O26705 +26706, O26706 +26707, O26707 +26708, O26708 +26709, O26709 +26710, O26710 +26711, O26711 +26712, O26712 +26713, O26713 +26714, O26714 +26715, O26715 +26716, O26716 +26717, O26717 +26718, O26718 +26719, O26719 +26720, O26720 +26721, O26721 +26722, O26722 +26723, O26723 +26724, O26724 +26725, O26725 +26726, O26726 +26727, O26727 +26728, O26728 +26729, O26729 +26730, O26730 +26731, O26731 +26732, O26732 +26733, O26733 +26734, O26734 +26735, O26735 +26736, O26736 +26737, O26737 +26738, O26738 +26739, O26739 +26740, O26740 +26741, O26741 +26742, O26742 +26743, O26743 +26744, O26744 +26745, O26745 +26746, O26746 +26747, O26747 +26748, O26748 +26749, O26749 +26750, O26750 +26751, O26751 +26752, O26752 +26753, O26753 +26754, O26754 +26755, O26755 +26756, O26756 +26757, O26757 +26758, O26758 +26759, O26759 +26760, O26760 +26761, O26761 +26762, O26762 +26763, O26763 +26764, O26764 +26765, O26765 +26766, O26766 +26767, O26767 +26768, O26768 +26769, O26769 +26770, O26770 +26771, O26771 +26772, O26772 +26773, O26773 +26774, O26774 +26775, O26775 +26776, O26776 +26777, O26777 +26778, O26778 +26779, O26779 +26780, O26780 +26781, O26781 +26782, O26782 +26783, O26783 +26784, O26784 +26785, O26785 +26786, O26786 +26787, O26787 +26788, O26788 +26789, O26789 +26790, O26790 +26791, O26791 +26792, O26792 +26793, O26793 +26794, O26794 +26795, O26795 +26796, O26796 +26797, O26797 +26798, O26798 +26799, O26799 +26800, O26800 +26801, O26801 +26802, O26802 +26803, O26803 +26804, O26804 +26805, O26805 +26806, O26806 +26807, O26807 +26808, O26808 +26809, O26809 +26810, O26810 +26811, O26811 +26812, O26812 +26813, O26813 +26814, O26814 +26815, O26815 +26816, O26816 +26817, O26817 +26818, O26818 +26819, O26819 +26820, O26820 +26821, O26821 +26822, O26822 +26823, O26823 +26824, O26824 +26825, O26825 +26826, O26826 +26827, O26827 +26828, O26828 +26829, O26829 +26830, O26830 +26831, O26831 +26832, O26832 +26833, O26833 +26834, O26834 +26835, O26835 +26836, O26836 +26837, O26837 +26838, O26838 +26839, O26839 +26840, O26840 +26841, O26841 +26842, O26842 +26843, O26843 +26844, O26844 +26845, O26845 +26846, O26846 +26847, O26847 +26848, O26848 +26849, O26849 +26850, O26850 +26851, O26851 +26852, O26852 +26853, O26853 +26854, O26854 +26855, O26855 +26856, O26856 +26857, O26857 +26858, O26858 +26859, O26859 +26860, O26860 +26861, O26861 +26862, O26862 +26863, O26863 +26864, O26864 +26865, O26865 +26866, O26866 +26867, O26867 +26868, O26868 +26869, O26869 +26870, O26870 +26871, O26871 +26872, O26872 +26873, O26873 +26874, O26874 +26875, O26875 +26876, O26876 +26877, O26877 +26878, O26878 +26879, O26879 +26880, O26880 +26881, O26881 +26882, O26882 +26883, O26883 +26884, O26884 +26885, O26885 +26886, O26886 +26887, O26887 +26888, O26888 +26889, O26889 +26890, O26890 +26891, O26891 +26892, O26892 +26893, O26893 +26894, O26894 +26895, O26895 +26896, O26896 +26897, O26897 +26898, O26898 +26899, O26899 +26900, O26900 +26901, O26901 +26902, O26902 +26903, O26903 +26904, O26904 +26905, O26905 +26906, O26906 +26907, O26907 +26908, O26908 +26909, O26909 +26910, O26910 +26911, O26911 +26912, O26912 +26913, O26913 +26914, O26914 +26915, O26915 +26916, O26916 +26917, O26917 +26918, O26918 +26919, O26919 +26920, O26920 +26921, O26921 +26922, O26922 +26923, O26923 +26924, O26924 +26925, O26925 +26926, O26926 +26927, O26927 +26928, O26928 +26929, O26929 +26930, O26930 +26931, O26931 +26932, O26932 +26933, O26933 +26934, O26934 +26935, O26935 +26936, O26936 +26937, O26937 +26938, O26938 +26939, O26939 +26940, O26940 +26941, O26941 +26942, O26942 +26943, O26943 +26944, O26944 +26945, O26945 +26946, O26946 +26947, O26947 +26948, O26948 +26949, O26949 +26950, O26950 +26951, O26951 +26952, O26952 +26953, O26953 +26954, O26954 +26955, O26955 +26956, O26956 +26957, O26957 +26958, O26958 +26959, O26959 +26960, O26960 +26961, O26961 +26962, O26962 +26963, O26963 +26964, O26964 +26965, O26965 +26966, O26966 +26967, O26967 +26968, O26968 +26969, O26969 +26970, O26970 +26971, O26971 +26972, O26972 +26973, O26973 +26974, O26974 +26975, O26975 +26976, O26976 +26977, O26977 +26978, O26978 +26979, O26979 +26980, O26980 +26981, O26981 +26982, O26982 +26983, O26983 +26984, O26984 +26985, O26985 +26986, O26986 +26987, O26987 +26988, O26988 +26989, O26989 +26990, O26990 +26991, O26991 +26992, O26992 +26993, O26993 +26994, O26994 +26995, O26995 +26996, O26996 +26997, O26997 +26998, O26998 +26999, O26999 +27000, O27000 +27001, O27001 +27002, O27002 +27003, O27003 +27004, O27004 +27005, O27005 +27006, O27006 +27007, O27007 +27008, O27008 +27009, O27009 +27010, O27010 +27011, O27011 +27012, O27012 +27013, O27013 +27014, O27014 +27015, O27015 +27016, O27016 +27017, O27017 +27018, O27018 +27019, O27019 +27020, O27020 +27021, O27021 +27022, O27022 +27023, O27023 +27024, O27024 +27025, O27025 +27026, O27026 +27027, O27027 +27028, O27028 +27029, O27029 +27030, O27030 +27031, O27031 +27032, O27032 +27033, O27033 +27034, O27034 +27035, O27035 +27036, O27036 +27037, O27037 +27038, O27038 +27039, O27039 +27040, O27040 +27041, O27041 +27042, O27042 +27043, O27043 +27044, O27044 +27045, O27045 +27046, O27046 +27047, O27047 +27048, O27048 +27049, O27049 +27050, O27050 +27051, O27051 +27052, O27052 +27053, O27053 +27054, O27054 +27055, O27055 +27056, O27056 +27057, O27057 +27058, O27058 +27059, O27059 +27060, O27060 +27061, O27061 +27062, O27062 +27063, O27063 +27064, O27064 +27065, O27065 +27066, O27066 +27067, O27067 +27068, O27068 +27069, O27069 +27070, O27070 +27071, O27071 +27072, O27072 +27073, O27073 +27074, O27074 +27075, O27075 +27076, O27076 +27077, O27077 +27078, O27078 +27079, O27079 +27080, O27080 +27081, O27081 +27082, O27082 +27083, O27083 +27084, O27084 +27085, O27085 +27086, O27086 +27087, O27087 +27088, O27088 +27089, O27089 +27090, O27090 +27091, O27091 +27092, O27092 +27093, O27093 +27094, O27094 +27095, O27095 +27096, O27096 +27097, O27097 +27098, O27098 +27099, O27099 +27100, O27100 +27101, O27101 +27102, O27102 +27103, O27103 +27104, O27104 +27105, O27105 +27106, O27106 +27107, O27107 +27108, O27108 +27109, O27109 +27110, O27110 +27111, O27111 +27112, O27112 +27113, O27113 +27114, O27114 +27115, O27115 +27116, O27116 +27117, O27117 +27118, O27118 +27119, O27119 +27120, O27120 +27121, O27121 +27122, O27122 +27123, O27123 +27124, O27124 +27125, O27125 +27126, O27126 +27127, O27127 +27128, O27128 +27129, O27129 +27130, O27130 +27131, O27131 +27132, O27132 +27133, O27133 +27134, O27134 +27135, O27135 +27136, O27136 +27137, O27137 +27138, O27138 +27139, O27139 +27140, O27140 +27141, O27141 +27142, O27142 +27143, O27143 +27144, O27144 +27145, O27145 +27146, O27146 +27147, O27147 +27148, O27148 +27149, O27149 +27150, O27150 +27151, O27151 +27152, O27152 +27153, O27153 +27154, O27154 +27155, O27155 +27156, O27156 +27157, O27157 +27158, O27158 +27159, O27159 +27160, O27160 +27161, O27161 +27162, O27162 +27163, O27163 +27164, O27164 +27165, O27165 +27166, O27166 +27167, O27167 +27168, O27168 +27169, O27169 +27170, O27170 +27171, O27171 +27172, O27172 +27173, O27173 +27174, O27174 +27175, O27175 +27176, O27176 +27177, O27177 +27178, O27178 +27179, O27179 +27180, O27180 +27181, O27181 +27182, O27182 +27183, O27183 +27184, O27184 +27185, O27185 +27186, O27186 +27187, O27187 +27188, O27188 +27189, O27189 +27190, O27190 +27191, O27191 +27192, O27192 +27193, O27193 +27194, O27194 +27195, O27195 +27196, O27196 +27197, O27197 +27198, O27198 +27199, O27199 +27200, O27200 +27201, O27201 +27202, O27202 +27203, O27203 +27204, O27204 +27205, O27205 +27206, O27206 +27207, O27207 +27208, O27208 +27209, O27209 +27210, O27210 +27211, O27211 +27212, O27212 +27213, O27213 +27214, O27214 +27215, O27215 +27216, O27216 +27217, O27217 +27218, O27218 +27219, O27219 +27220, O27220 +27221, O27221 +27222, O27222 +27223, O27223 +27224, O27224 +27225, O27225 +27226, O27226 +27227, O27227 +27228, O27228 +27229, O27229 +27230, O27230 +27231, O27231 +27232, O27232 +27233, O27233 +27234, O27234 +27235, O27235 +27236, O27236 +27237, O27237 +27238, O27238 +27239, O27239 +27240, O27240 +27241, O27241 +27242, O27242 +27243, O27243 +27244, O27244 +27245, O27245 +27246, O27246 +27247, O27247 +27248, O27248 +27249, O27249 +27250, O27250 +27251, O27251 +27252, O27252 +27253, O27253 +27254, O27254 +27255, O27255 +27256, O27256 +27257, O27257 +27258, O27258 +27259, O27259 +27260, O27260 +27261, O27261 +27262, O27262 +27263, O27263 +27264, O27264 +27265, O27265 +27266, O27266 +27267, O27267 +27268, O27268 +27269, O27269 +27270, O27270 +27271, O27271 +27272, O27272 +27273, O27273 +27274, O27274 +27275, O27275 +27276, O27276 +27277, O27277 +27278, O27278 +27279, O27279 +27280, O27280 +27281, O27281 +27282, O27282 +27283, O27283 +27284, O27284 +27285, O27285 +27286, O27286 +27287, O27287 +27288, O27288 +27289, O27289 +27290, O27290 +27291, O27291 +27292, O27292 +27293, O27293 +27294, O27294 +27295, O27295 +27296, O27296 +27297, O27297 +27298, O27298 +27299, O27299 +27300, O27300 +27301, O27301 +27302, O27302 +27303, O27303 +27304, O27304 +27305, O27305 +27306, O27306 +27307, O27307 +27308, O27308 +27309, O27309 +27310, O27310 +27311, O27311 +27312, O27312 +27313, O27313 +27314, O27314 +27315, O27315 +27316, O27316 +27317, O27317 +27318, O27318 +27319, O27319 +27320, O27320 +27321, O27321 +27322, O27322 +27323, O27323 +27324, O27324 +27325, O27325 +27326, O27326 +27327, O27327 +27328, O27328 +27329, O27329 +27330, O27330 +27331, O27331 +27332, O27332 +27333, O27333 +27334, O27334 +27335, O27335 +27336, O27336 +27337, O27337 +27338, O27338 +27339, O27339 +27340, O27340 +27341, O27341 +27342, O27342 +27343, O27343 +27344, O27344 +27345, O27345 +27346, O27346 +27347, O27347 +27348, O27348 +27349, O27349 +27350, O27350 +27351, O27351 +27352, O27352 +27353, O27353 +27354, O27354 +27355, O27355 +27356, O27356 +27357, O27357 +27358, O27358 +27359, O27359 +27360, O27360 +27361, O27361 +27362, O27362 +27363, O27363 +27364, O27364 +27365, O27365 +27366, O27366 +27367, O27367 +27368, O27368 +27369, O27369 +27370, O27370 +27371, O27371 +27372, O27372 +27373, O27373 +27374, O27374 +27375, O27375 +27376, O27376 +27377, O27377 +27378, O27378 +27379, O27379 +27380, O27380 +27381, O27381 +27382, O27382 +27383, O27383 +27384, O27384 +27385, O27385 +27386, O27386 +27387, O27387 +27388, O27388 +27389, O27389 +27390, O27390 +27391, O27391 +27392, O27392 +27393, O27393 +27394, O27394 +27395, O27395 +27396, O27396 +27397, O27397 +27398, O27398 +27399, O27399 +27400, O27400 +27401, O27401 +27402, O27402 +27403, O27403 +27404, O27404 +27405, O27405 +27406, O27406 +27407, O27407 +27408, O27408 +27409, O27409 +27410, O27410 +27411, O27411 +27412, O27412 +27413, O27413 +27414, O27414 +27415, O27415 +27416, O27416 +27417, O27417 +27418, O27418 +27419, O27419 +27420, O27420 +27421, O27421 +27422, O27422 +27423, O27423 +27424, O27424 +27425, O27425 +27426, O27426 +27427, O27427 +27428, O27428 +27429, O27429 +27430, O27430 +27431, O27431 +27432, O27432 +27433, O27433 +27434, O27434 +27435, O27435 +27436, O27436 +27437, O27437 +27438, O27438 +27439, O27439 +27440, O27440 +27441, O27441 +27442, O27442 +27443, O27443 +27444, O27444 +27445, O27445 +27446, O27446 +27447, O27447 +27448, O27448 +27449, O27449 +27450, O27450 +27451, O27451 +27452, O27452 +27453, O27453 +27454, O27454 +27455, O27455 +27456, O27456 +27457, O27457 +27458, O27458 +27459, O27459 +27460, O27460 +27461, O27461 +27462, O27462 +27463, O27463 +27464, O27464 +27465, O27465 +27466, O27466 +27467, O27467 +27468, O27468 +27469, O27469 +27470, O27470 +27471, O27471 +27472, O27472 +27473, O27473 +27474, O27474 +27475, O27475 +27476, O27476 +27477, O27477 +27478, O27478 +27479, O27479 +27480, O27480 +27481, O27481 +27482, O27482 +27483, O27483 +27484, O27484 +27485, O27485 +27486, O27486 +27487, O27487 +27488, O27488 +27489, O27489 +27490, O27490 +27491, O27491 +27492, O27492 +27493, O27493 +27494, O27494 +27495, O27495 +27496, O27496 +27497, O27497 +27498, O27498 +27499, O27499 +27500, O27500 +27501, O27501 +27502, O27502 +27503, O27503 +27504, O27504 +27505, O27505 +27506, O27506 +27507, O27507 +27508, O27508 +27509, O27509 +27510, O27510 +27511, O27511 +27512, O27512 +27513, O27513 +27514, O27514 +27515, O27515 +27516, O27516 +27517, O27517 +27518, O27518 +27519, O27519 +27520, O27520 +27521, O27521 +27522, O27522 +27523, O27523 +27524, O27524 +27525, O27525 +27526, O27526 +27527, O27527 +27528, O27528 +27529, O27529 +27530, O27530 +27531, O27531 +27532, O27532 +27533, O27533 +27534, O27534 +27535, O27535 +27536, O27536 +27537, O27537 +27538, O27538 +27539, O27539 +27540, O27540 +27541, O27541 +27542, O27542 +27543, O27543 +27544, O27544 +27545, O27545 +27546, O27546 +27547, O27547 +27548, O27548 +27549, O27549 +27550, O27550 +27551, O27551 +27552, O27552 +27553, O27553 +27554, O27554 +27555, O27555 +27556, O27556 +27557, O27557 +27558, O27558 +27559, O27559 +27560, O27560 +27561, O27561 +27562, O27562 +27563, O27563 +27564, O27564 +27565, O27565 +27566, O27566 +27567, O27567 +27568, O27568 +27569, O27569 +27570, O27570 +27571, O27571 +27572, O27572 +27573, O27573 +27574, O27574 +27575, O27575 +27576, O27576 +27577, O27577 +27578, O27578 +27579, O27579 +27580, O27580 +27581, O27581 +27582, O27582 +27583, O27583 +27584, O27584 +27585, O27585 +27586, O27586 +27587, O27587 +27588, O27588 +27589, O27589 +27590, O27590 +27591, O27591 +27592, O27592 +27593, O27593 +27594, O27594 +27595, O27595 +27596, O27596 +27597, O27597 +27598, O27598 +27599, O27599 +27600, O27600 +27601, O27601 +27602, O27602 +27603, O27603 +27604, O27604 +27605, O27605 +27606, O27606 +27607, O27607 +27608, O27608 +27609, O27609 +27610, O27610 +27611, O27611 +27612, O27612 +27613, O27613 +27614, O27614 +27615, O27615 +27616, O27616 +27617, O27617 +27618, O27618 +27619, O27619 +27620, O27620 +27621, O27621 +27622, O27622 +27623, O27623 +27624, O27624 +27625, O27625 +27626, O27626 +27627, O27627 +27628, O27628 +27629, O27629 +27630, O27630 +27631, O27631 +27632, O27632 +27633, O27633 +27634, O27634 +27635, O27635 +27636, O27636 +27637, O27637 +27638, O27638 +27639, O27639 +27640, O27640 +27641, O27641 +27642, O27642 +27643, O27643 +27644, O27644 +27645, O27645 +27646, O27646 +27647, O27647 +27648, O27648 +27649, O27649 +27650, O27650 +27651, O27651 +27652, O27652 +27653, O27653 +27654, O27654 +27655, O27655 +27656, O27656 +27657, O27657 +27658, O27658 +27659, O27659 +27660, O27660 +27661, O27661 +27662, O27662 +27663, O27663 +27664, O27664 +27665, O27665 +27666, O27666 +27667, O27667 +27668, O27668 +27669, O27669 +27670, O27670 +27671, O27671 +27672, O27672 +27673, O27673 +27674, O27674 +27675, O27675 +27676, O27676 +27677, O27677 +27678, O27678 +27679, O27679 +27680, O27680 +27681, O27681 +27682, O27682 +27683, O27683 +27684, O27684 +27685, O27685 +27686, O27686 +27687, O27687 +27688, O27688 +27689, O27689 +27690, O27690 +27691, O27691 +27692, O27692 +27693, O27693 +27694, O27694 +27695, O27695 +27696, O27696 +27697, O27697 +27698, O27698 +27699, O27699 +27700, O27700 +27701, O27701 +27702, O27702 +27703, O27703 +27704, O27704 +27705, O27705 +27706, O27706 +27707, O27707 +27708, O27708 +27709, O27709 +27710, O27710 +27711, O27711 +27712, O27712 +27713, O27713 +27714, O27714 +27715, O27715 +27716, O27716 +27717, O27717 +27718, O27718 +27719, O27719 +27720, O27720 +27721, O27721 +27722, O27722 +27723, O27723 +27724, O27724 +27725, O27725 +27726, O27726 +27727, O27727 +27728, O27728 +27729, O27729 +27730, O27730 +27731, O27731 +27732, O27732 +27733, O27733 +27734, O27734 +27735, O27735 +27736, O27736 +27737, O27737 +27738, O27738 +27739, O27739 +27740, O27740 +27741, O27741 +27742, O27742 +27743, O27743 +27744, O27744 +27745, O27745 +27746, O27746 +27747, O27747 +27748, O27748 +27749, O27749 +27750, O27750 +27751, O27751 +27752, O27752 +27753, O27753 +27754, O27754 +27755, O27755 +27756, O27756 +27757, O27757 +27758, O27758 +27759, O27759 +27760, O27760 +27761, O27761 +27762, O27762 +27763, O27763 +27764, O27764 +27765, O27765 +27766, O27766 +27767, O27767 +27768, O27768 +27769, O27769 +27770, O27770 +27771, O27771 +27772, O27772 +27773, O27773 +27774, O27774 +27775, O27775 +27776, O27776 +27777, O27777 +27778, O27778 +27779, O27779 +27780, O27780 +27781, O27781 +27782, O27782 +27783, O27783 +27784, O27784 +27785, O27785 +27786, O27786 +27787, O27787 +27788, O27788 +27789, O27789 +27790, O27790 +27791, O27791 +27792, O27792 +27793, O27793 +27794, O27794 +27795, O27795 +27796, O27796 +27797, O27797 +27798, O27798 +27799, O27799 +27800, O27800 +27801, O27801 +27802, O27802 +27803, O27803 +27804, O27804 +27805, O27805 +27806, O27806 +27807, O27807 +27808, O27808 +27809, O27809 +27810, O27810 +27811, O27811 +27812, O27812 +27813, O27813 +27814, O27814 +27815, O27815 +27816, O27816 +27817, O27817 +27818, O27818 +27819, O27819 +27820, O27820 +27821, O27821 +27822, O27822 +27823, O27823 +27824, O27824 +27825, O27825 +27826, O27826 +27827, O27827 +27828, O27828 +27829, O27829 +27830, O27830 +27831, O27831 +27832, O27832 +27833, O27833 +27834, O27834 +27835, O27835 +27836, O27836 +27837, O27837 +27838, O27838 +27839, O27839 +27840, O27840 +27841, O27841 +27842, O27842 +27843, O27843 +27844, O27844 +27845, O27845 +27846, O27846 +27847, O27847 +27848, O27848 +27849, O27849 +27850, O27850 +27851, O27851 +27852, O27852 +27853, O27853 +27854, O27854 +27855, O27855 +27856, O27856 +27857, O27857 +27858, O27858 +27859, O27859 +27860, O27860 +27861, O27861 +27862, O27862 +27863, O27863 +27864, O27864 +27865, O27865 +27866, O27866 +27867, O27867 +27868, O27868 +27869, O27869 +27870, O27870 +27871, O27871 +27872, O27872 +27873, O27873 +27874, O27874 +27875, O27875 +27876, O27876 +27877, O27877 +27878, O27878 +27879, O27879 +27880, O27880 +27881, O27881 +27882, O27882 +27883, O27883 +27884, O27884 +27885, O27885 +27886, O27886 +27887, O27887 +27888, O27888 +27889, O27889 +27890, O27890 +27891, O27891 +27892, O27892 +27893, O27893 +27894, O27894 +27895, O27895 +27896, O27896 +27897, O27897 +27898, O27898 +27899, O27899 +27900, O27900 +27901, O27901 +27902, O27902 +27903, O27903 +27904, O27904 +27905, O27905 +27906, O27906 +27907, O27907 +27908, O27908 +27909, O27909 +27910, O27910 +27911, O27911 +27912, O27912 +27913, O27913 +27914, O27914 +27915, O27915 +27916, O27916 +27917, O27917 +27918, O27918 +27919, O27919 +27920, O27920 +27921, O27921 +27922, O27922 +27923, O27923 +27924, O27924 +27925, O27925 +27926, O27926 +27927, O27927 +27928, O27928 +27929, O27929 +27930, O27930 +27931, O27931 +27932, O27932 +27933, O27933 +27934, O27934 +27935, O27935 +27936, O27936 +27937, O27937 +27938, O27938 +27939, O27939 +27940, O27940 +27941, O27941 +27942, O27942 +27943, O27943 +27944, O27944 +27945, O27945 +27946, O27946 +27947, O27947 +27948, O27948 +27949, O27949 +27950, O27950 +27951, O27951 +27952, O27952 +27953, O27953 +27954, O27954 +27955, O27955 +27956, O27956 +27957, O27957 +27958, O27958 +27959, O27959 +27960, O27960 +27961, O27961 +27962, O27962 +27963, O27963 +27964, O27964 +27965, O27965 +27966, O27966 +27967, O27967 +27968, O27968 +27969, O27969 +27970, O27970 +27971, O27971 +27972, O27972 +27973, O27973 +27974, O27974 +27975, O27975 +27976, O27976 +27977, O27977 +27978, O27978 +27979, O27979 +27980, O27980 +27981, O27981 +27982, O27982 +27983, O27983 +27984, O27984 +27985, O27985 +27986, O27986 +27987, O27987 +27988, O27988 +27989, O27989 +27990, O27990 +27991, O27991 +27992, O27992 +27993, O27993 +27994, O27994 +27995, O27995 +27996, O27996 +27997, O27997 +27998, O27998 +27999, O27999 +28000, O28000 +28001, O28001 +28002, O28002 +28003, O28003 +28004, O28004 +28005, O28005 +28006, O28006 +28007, O28007 +28008, O28008 +28009, O28009 +28010, O28010 +28011, O28011 +28012, O28012 +28013, O28013 +28014, O28014 +28015, O28015 +28016, O28016 +28017, O28017 +28018, O28018 +28019, O28019 +28020, O28020 +28021, O28021 +28022, O28022 +28023, O28023 +28024, O28024 +28025, O28025 +28026, O28026 +28027, O28027 +28028, O28028 +28029, O28029 +28030, O28030 +28031, O28031 +28032, O28032 +28033, O28033 +28034, O28034 +28035, O28035 +28036, O28036 +28037, O28037 +28038, O28038 +28039, O28039 +28040, O28040 +28041, O28041 +28042, O28042 +28043, O28043 +28044, O28044 +28045, O28045 +28046, O28046 +28047, O28047 +28048, O28048 +28049, O28049 +28050, O28050 +28051, O28051 +28052, O28052 +28053, O28053 +28054, O28054 +28055, O28055 +28056, O28056 +28057, O28057 +28058, O28058 +28059, O28059 +28060, O28060 +28061, O28061 +28062, O28062 +28063, O28063 +28064, O28064 +28065, O28065 +28066, O28066 +28067, O28067 +28068, O28068 +28069, O28069 +28070, O28070 +28071, O28071 +28072, O28072 +28073, O28073 +28074, O28074 +28075, O28075 +28076, O28076 +28077, O28077 +28078, O28078 +28079, O28079 +28080, O28080 +28081, O28081 +28082, O28082 +28083, O28083 +28084, O28084 +28085, O28085 +28086, O28086 +28087, O28087 +28088, O28088 +28089, O28089 +28090, O28090 +28091, O28091 +28092, O28092 +28093, O28093 +28094, O28094 +28095, O28095 +28096, O28096 +28097, O28097 +28098, O28098 +28099, O28099 +28100, O28100 +28101, O28101 +28102, O28102 +28103, O28103 +28104, O28104 +28105, O28105 +28106, O28106 +28107, O28107 +28108, O28108 +28109, O28109 +28110, O28110 +28111, O28111 +28112, O28112 +28113, O28113 +28114, O28114 +28115, O28115 +28116, O28116 +28117, O28117 +28118, O28118 +28119, O28119 +28120, O28120 +28121, O28121 +28122, O28122 +28123, O28123 +28124, O28124 +28125, O28125 +28126, O28126 +28127, O28127 +28128, O28128 +28129, O28129 +28130, O28130 +28131, O28131 +28132, O28132 +28133, O28133 +28134, O28134 +28135, O28135 +28136, O28136 +28137, O28137 +28138, O28138 +28139, O28139 +28140, O28140 +28141, O28141 +28142, O28142 +28143, O28143 +28144, O28144 +28145, O28145 +28146, O28146 +28147, O28147 +28148, O28148 +28149, O28149 +28150, O28150 +28151, O28151 +28152, O28152 +28153, O28153 +28154, O28154 +28155, O28155 +28156, O28156 +28157, O28157 +28158, O28158 +28159, O28159 +28160, O28160 +28161, O28161 +28162, O28162 +28163, O28163 +28164, O28164 +28165, O28165 +28166, O28166 +28167, O28167 +28168, O28168 +28169, O28169 +28170, O28170 +28171, O28171 +28172, O28172 +28173, O28173 +28174, O28174 +28175, O28175 +28176, O28176 +28177, O28177 +28178, O28178 +28179, O28179 +28180, O28180 +28181, O28181 +28182, O28182 +28183, O28183 +28184, O28184 +28185, O28185 +28186, O28186 +28187, O28187 +28188, O28188 +28189, O28189 +28190, O28190 +28191, O28191 +28192, O28192 +28193, O28193 +28194, O28194 +28195, O28195 +28196, O28196 +28197, O28197 +28198, O28198 +28199, O28199 +28200, O28200 +28201, O28201 +28202, O28202 +28203, O28203 +28204, O28204 +28205, O28205 +28206, O28206 +28207, O28207 +28208, O28208 +28209, O28209 +28210, O28210 +28211, O28211 +28212, O28212 +28213, O28213 +28214, O28214 +28215, O28215 +28216, O28216 +28217, O28217 +28218, O28218 +28219, O28219 +28220, O28220 +28221, O28221 +28222, O28222 +28223, O28223 +28224, O28224 +28225, O28225 +28226, O28226 +28227, O28227 +28228, O28228 +28229, O28229 +28230, O28230 +28231, O28231 +28232, O28232 +28233, O28233 +28234, O28234 +28235, O28235 +28236, O28236 +28237, O28237 +28238, O28238 +28239, O28239 +28240, O28240 +28241, O28241 +28242, O28242 +28243, O28243 +28244, O28244 +28245, O28245 +28246, O28246 +28247, O28247 +28248, O28248 +28249, O28249 +28250, O28250 +28251, O28251 +28252, O28252 +28253, O28253 +28254, O28254 +28255, O28255 +28256, O28256 +28257, O28257 +28258, O28258 +28259, O28259 +28260, O28260 +28261, O28261 +28262, O28262 +28263, O28263 +28264, O28264 +28265, O28265 +28266, O28266 +28267, O28267 +28268, O28268 +28269, O28269 +28270, O28270 +28271, O28271 +28272, O28272 +28273, O28273 +28274, O28274 +28275, O28275 +28276, O28276 +28277, O28277 +28278, O28278 +28279, O28279 +28280, O28280 +28281, O28281 +28282, O28282 +28283, O28283 +28284, O28284 +28285, O28285 +28286, O28286 +28287, O28287 +28288, O28288 +28289, O28289 +28290, O28290 +28291, O28291 +28292, O28292 +28293, O28293 +28294, O28294 +28295, O28295 +28296, O28296 +28297, O28297 +28298, O28298 +28299, O28299 +28300, O28300 +28301, O28301 +28302, O28302 +28303, O28303 +28304, O28304 +28305, O28305 +28306, O28306 +28307, O28307 +28308, O28308 +28309, O28309 +28310, O28310 +28311, O28311 +28312, O28312 +28313, O28313 +28314, O28314 +28315, O28315 +28316, O28316 +28317, O28317 +28318, O28318 +28319, O28319 +28320, O28320 +28321, O28321 +28322, O28322 +28323, O28323 +28324, O28324 +28325, O28325 +28326, O28326 +28327, O28327 +28328, O28328 +28329, O28329 +28330, O28330 +28331, O28331 +28332, O28332 +28333, O28333 +28334, O28334 +28335, O28335 +28336, O28336 +28337, O28337 +28338, O28338 +28339, O28339 +28340, O28340 +28341, O28341 +28342, O28342 +28343, O28343 +28344, O28344 +28345, O28345 +28346, O28346 +28347, O28347 +28348, O28348 +28349, O28349 +28350, O28350 +28351, O28351 +28352, O28352 +28353, O28353 +28354, O28354 +28355, O28355 +28356, O28356 +28357, O28357 +28358, O28358 +28359, O28359 +28360, O28360 +28361, O28361 +28362, O28362 +28363, O28363 +28364, O28364 +28365, O28365 +28366, O28366 +28367, O28367 +28368, O28368 +28369, O28369 +28370, O28370 +28371, O28371 +28372, O28372 +28373, O28373 +28374, O28374 +28375, O28375 +28376, O28376 +28377, O28377 +28378, O28378 +28379, O28379 +28380, O28380 +28381, O28381 +28382, O28382 +28383, O28383 +28384, O28384 +28385, O28385 +28386, O28386 +28387, O28387 +28388, O28388 +28389, O28389 +28390, O28390 +28391, O28391 +28392, O28392 +28393, O28393 +28394, O28394 +28395, O28395 +28396, O28396 +28397, O28397 +28398, O28398 +28399, O28399 +28400, O28400 +28401, O28401 +28402, O28402 +28403, O28403 +28404, O28404 +28405, O28405 +28406, O28406 +28407, O28407 +28408, O28408 +28409, O28409 +28410, O28410 +28411, O28411 +28412, O28412 +28413, O28413 +28414, O28414 +28415, O28415 +28416, O28416 +28417, O28417 +28418, O28418 +28419, O28419 +28420, O28420 +28421, O28421 +28422, O28422 +28423, O28423 +28424, O28424 +28425, O28425 +28426, O28426 +28427, O28427 +28428, O28428 +28429, O28429 +28430, O28430 +28431, O28431 +28432, O28432 +28433, O28433 +28434, O28434 +28435, O28435 +28436, O28436 +28437, O28437 +28438, O28438 +28439, O28439 +28440, O28440 +28441, O28441 +28442, O28442 +28443, O28443 +28444, O28444 +28445, O28445 +28446, O28446 +28447, O28447 +28448, O28448 +28449, O28449 +28450, O28450 +28451, O28451 +28452, O28452 +28453, O28453 +28454, O28454 +28455, O28455 +28456, O28456 +28457, O28457 +28458, O28458 +28459, O28459 +28460, O28460 +28461, O28461 +28462, O28462 +28463, O28463 +28464, O28464 +28465, O28465 +28466, O28466 +28467, O28467 +28468, O28468 +28469, O28469 +28470, O28470 +28471, O28471 +28472, O28472 +28473, O28473 +28474, O28474 +28475, O28475 +28476, O28476 +28477, O28477 +28478, O28478 +28479, O28479 +28480, O28480 +28481, O28481 +28482, O28482 +28483, O28483 +28484, O28484 +28485, O28485 +28486, O28486 +28487, O28487 +28488, O28488 +28489, O28489 +28490, O28490 +28491, O28491 +28492, O28492 +28493, O28493 +28494, O28494 +28495, O28495 +28496, O28496 +28497, O28497 +28498, O28498 +28499, O28499 +28500, O28500 +28501, O28501 +28502, O28502 +28503, O28503 +28504, O28504 +28505, O28505 +28506, O28506 +28507, O28507 +28508, O28508 +28509, O28509 +28510, O28510 +28511, O28511 +28512, O28512 +28513, O28513 +28514, O28514 +28515, O28515 +28516, O28516 +28517, O28517 +28518, O28518 +28519, O28519 +28520, O28520 +28521, O28521 +28522, O28522 +28523, O28523 +28524, O28524 +28525, O28525 +28526, O28526 +28527, O28527 +28528, O28528 +28529, O28529 +28530, O28530 +28531, O28531 +28532, O28532 +28533, O28533 +28534, O28534 +28535, O28535 +28536, O28536 +28537, O28537 +28538, O28538 +28539, O28539 +28540, O28540 +28541, O28541 +28542, O28542 +28543, O28543 +28544, O28544 +28545, O28545 +28546, O28546 +28547, O28547 +28548, O28548 +28549, O28549 +28550, O28550 +28551, O28551 +28552, O28552 +28553, O28553 +28554, O28554 +28555, O28555 +28556, O28556 +28557, O28557 +28558, O28558 +28559, O28559 +28560, O28560 +28561, O28561 +28562, O28562 +28563, O28563 +28564, O28564 +28565, O28565 +28566, O28566 +28567, O28567 +28568, O28568 +28569, O28569 +28570, O28570 +28571, O28571 +28572, O28572 +28573, O28573 +28574, O28574 +28575, O28575 +28576, O28576 +28577, O28577 +28578, O28578 +28579, O28579 +28580, O28580 +28581, O28581 +28582, O28582 +28583, O28583 +28584, O28584 +28585, O28585 +28586, O28586 +28587, O28587 +28588, O28588 +28589, O28589 +28590, O28590 +28591, O28591 +28592, O28592 +28593, O28593 +28594, O28594 +28595, O28595 +28596, O28596 +28597, O28597 +28598, O28598 +28599, O28599 +28600, O28600 +28601, O28601 +28602, O28602 +28603, O28603 +28604, O28604 +28605, O28605 +28606, O28606 +28607, O28607 +28608, O28608 +28609, O28609 +28610, O28610 +28611, O28611 +28612, O28612 +28613, O28613 +28614, O28614 +28615, O28615 +28616, O28616 +28617, O28617 +28618, O28618 +28619, O28619 +28620, O28620 +28621, O28621 +28622, O28622 +28623, O28623 +28624, O28624 +28625, O28625 +28626, O28626 +28627, O28627 +28628, O28628 +28629, O28629 +28630, O28630 +28631, O28631 +28632, O28632 +28633, O28633 +28634, O28634 +28635, O28635 +28636, O28636 +28637, O28637 +28638, O28638 +28639, O28639 +28640, O28640 +28641, O28641 +28642, O28642 +28643, O28643 +28644, O28644 +28645, O28645 +28646, O28646 +28647, O28647 +28648, O28648 +28649, O28649 +28650, O28650 +28651, O28651 +28652, O28652 +28653, O28653 +28654, O28654 +28655, O28655 +28656, O28656 +28657, O28657 +28658, O28658 +28659, O28659 +28660, O28660 +28661, O28661 +28662, O28662 +28663, O28663 +28664, O28664 +28665, O28665 +28666, O28666 +28667, O28667 +28668, O28668 +28669, O28669 +28670, O28670 +28671, O28671 +28672, O28672 +28673, O28673 +28674, O28674 +28675, O28675 +28676, O28676 +28677, O28677 +28678, O28678 +28679, O28679 +28680, O28680 +28681, O28681 +28682, O28682 +28683, O28683 +28684, O28684 +28685, O28685 +28686, O28686 +28687, O28687 +28688, O28688 +28689, O28689 +28690, O28690 +28691, O28691 +28692, O28692 +28693, O28693 +28694, O28694 +28695, O28695 +28696, O28696 +28697, O28697 +28698, O28698 +28699, O28699 +28700, O28700 +28701, O28701 +28702, O28702 +28703, O28703 +28704, O28704 +28705, O28705 +28706, O28706 +28707, O28707 +28708, O28708 +28709, O28709 +28710, O28710 +28711, O28711 +28712, O28712 +28713, O28713 +28714, O28714 +28715, O28715 +28716, O28716 +28717, O28717 +28718, O28718 +28719, O28719 +28720, O28720 +28721, O28721 +28722, O28722 +28723, O28723 +28724, O28724 +28725, O28725 +28726, O28726 +28727, O28727 +28728, O28728 +28729, O28729 +28730, O28730 +28731, O28731 +28732, O28732 +28733, O28733 +28734, O28734 +28735, O28735 +28736, O28736 +28737, O28737 +28738, O28738 +28739, O28739 +28740, O28740 +28741, O28741 +28742, O28742 +28743, O28743 +28744, O28744 +28745, O28745 +28746, O28746 +28747, O28747 +28748, O28748 +28749, O28749 +28750, O28750 +28751, O28751 +28752, O28752 +28753, O28753 +28754, O28754 +28755, O28755 +28756, O28756 +28757, O28757 +28758, O28758 +28759, O28759 +28760, O28760 +28761, O28761 +28762, O28762 +28763, O28763 +28764, O28764 +28765, O28765 +28766, O28766 +28767, O28767 +28768, O28768 +28769, O28769 +28770, O28770 +28771, O28771 +28772, O28772 +28773, O28773 +28774, O28774 +28775, O28775 +28776, O28776 +28777, O28777 +28778, O28778 +28779, O28779 +28780, O28780 +28781, O28781 +28782, O28782 +28783, O28783 +28784, O28784 +28785, O28785 +28786, O28786 +28787, O28787 +28788, O28788 +28789, O28789 +28790, O28790 +28791, O28791 +28792, O28792 +28793, O28793 +28794, O28794 +28795, O28795 +28796, O28796 +28797, O28797 +28798, O28798 +28799, O28799 +28800, O28800 +28801, O28801 +28802, O28802 +28803, O28803 +28804, O28804 +28805, O28805 +28806, O28806 +28807, O28807 +28808, O28808 +28809, O28809 +28810, O28810 +28811, O28811 +28812, O28812 +28813, O28813 +28814, O28814 +28815, O28815 +28816, O28816 +28817, O28817 +28818, O28818 +28819, O28819 +28820, O28820 +28821, O28821 +28822, O28822 +28823, O28823 +28824, O28824 +28825, O28825 +28826, O28826 +28827, O28827 +28828, O28828 +28829, O28829 +28830, O28830 +28831, O28831 +28832, O28832 +28833, O28833 +28834, O28834 +28835, O28835 +28836, O28836 +28837, O28837 +28838, O28838 +28839, O28839 +28840, O28840 +28841, O28841 +28842, O28842 +28843, O28843 +28844, O28844 +28845, O28845 +28846, O28846 +28847, O28847 +28848, O28848 +28849, O28849 +28850, O28850 +28851, O28851 +28852, O28852 +28853, O28853 +28854, O28854 +28855, O28855 +28856, O28856 +28857, O28857 +28858, O28858 +28859, O28859 +28860, O28860 +28861, O28861 +28862, O28862 +28863, O28863 +28864, O28864 +28865, O28865 +28866, O28866 +28867, O28867 +28868, O28868 +28869, O28869 +28870, O28870 +28871, O28871 +28872, O28872 +28873, O28873 +28874, O28874 +28875, O28875 +28876, O28876 +28877, O28877 +28878, O28878 +28879, O28879 +28880, O28880 +28881, O28881 +28882, O28882 +28883, O28883 +28884, O28884 +28885, O28885 +28886, O28886 +28887, O28887 +28888, O28888 +28889, O28889 +28890, O28890 +28891, O28891 +28892, O28892 +28893, O28893 +28894, O28894 +28895, O28895 +28896, O28896 +28897, O28897 +28898, O28898 +28899, O28899 +28900, O28900 +28901, O28901 +28902, O28902 +28903, O28903 +28904, O28904 +28905, O28905 +28906, O28906 +28907, O28907 +28908, O28908 +28909, O28909 +28910, O28910 +28911, O28911 +28912, O28912 +28913, O28913 +28914, O28914 +28915, O28915 +28916, O28916 +28917, O28917 +28918, O28918 +28919, O28919 +28920, O28920 +28921, O28921 +28922, O28922 +28923, O28923 +28924, O28924 +28925, O28925 +28926, O28926 +28927, O28927 +28928, O28928 +28929, O28929 +28930, O28930 +28931, O28931 +28932, O28932 +28933, O28933 +28934, O28934 +28935, O28935 +28936, O28936 +28937, O28937 +28938, O28938 +28939, O28939 +28940, O28940 +28941, O28941 +28942, O28942 +28943, O28943 +28944, O28944 +28945, O28945 +28946, O28946 +28947, O28947 +28948, O28948 +28949, O28949 +28950, O28950 +28951, O28951 +28952, O28952 +28953, O28953 +28954, O28954 +28955, O28955 +28956, O28956 +28957, O28957 +28958, O28958 +28959, O28959 +28960, O28960 +28961, O28961 +28962, O28962 +28963, O28963 +28964, O28964 +28965, O28965 +28966, O28966 +28967, O28967 +28968, O28968 +28969, O28969 +28970, O28970 +28971, O28971 +28972, O28972 +28973, O28973 +28974, O28974 +28975, O28975 +28976, O28976 +28977, O28977 +28978, O28978 +28979, O28979 +28980, O28980 +28981, O28981 +28982, O28982 +28983, O28983 +28984, O28984 +28985, O28985 +28986, O28986 +28987, O28987 +28988, O28988 +28989, O28989 +28990, O28990 +28991, O28991 +28992, O28992 +28993, O28993 +28994, O28994 +28995, O28995 +28996, O28996 +28997, O28997 +28998, O28998 +28999, O28999 +29000, O29000 +29001, O29001 +29002, O29002 +29003, O29003 +29004, O29004 +29005, O29005 +29006, O29006 +29007, O29007 +29008, O29008 +29009, O29009 +29010, O29010 +29011, O29011 +29012, O29012 +29013, O29013 +29014, O29014 +29015, O29015 +29016, O29016 +29017, O29017 +29018, O29018 +29019, O29019 +29020, O29020 +29021, O29021 +29022, O29022 +29023, O29023 +29024, O29024 +29025, O29025 +29026, O29026 +29027, O29027 +29028, O29028 +29029, O29029 +29030, O29030 +29031, O29031 +29032, O29032 +29033, O29033 +29034, O29034 +29035, O29035 +29036, O29036 +29037, O29037 +29038, O29038 +29039, O29039 +29040, O29040 +29041, O29041 +29042, O29042 +29043, O29043 +29044, O29044 +29045, O29045 +29046, O29046 +29047, O29047 +29048, O29048 +29049, O29049 +29050, O29050 +29051, O29051 +29052, O29052 +29053, O29053 +29054, O29054 +29055, O29055 +29056, O29056 +29057, O29057 +29058, O29058 +29059, O29059 +29060, O29060 +29061, O29061 +29062, O29062 +29063, O29063 +29064, O29064 +29065, O29065 +29066, O29066 +29067, O29067 +29068, O29068 +29069, O29069 +29070, O29070 +29071, O29071 +29072, O29072 +29073, O29073 +29074, O29074 +29075, O29075 +29076, O29076 +29077, O29077 +29078, O29078 +29079, O29079 +29080, O29080 +29081, O29081 +29082, O29082 +29083, O29083 +29084, O29084 +29085, O29085 +29086, O29086 +29087, O29087 +29088, O29088 +29089, O29089 +29090, O29090 +29091, O29091 +29092, O29092 +29093, O29093 +29094, O29094 +29095, O29095 +29096, O29096 +29097, O29097 +29098, O29098 +29099, O29099 +29100, O29100 +29101, O29101 +29102, O29102 +29103, O29103 +29104, O29104 +29105, O29105 +29106, O29106 +29107, O29107 +29108, O29108 +29109, O29109 +29110, O29110 +29111, O29111 +29112, O29112 +29113, O29113 +29114, O29114 +29115, O29115 +29116, O29116 +29117, O29117 +29118, O29118 +29119, O29119 +29120, O29120 +29121, O29121 +29122, O29122 +29123, O29123 +29124, O29124 +29125, O29125 +29126, O29126 +29127, O29127 +29128, O29128 +29129, O29129 +29130, O29130 +29131, O29131 +29132, O29132 +29133, O29133 +29134, O29134 +29135, O29135 +29136, O29136 +29137, O29137 +29138, O29138 +29139, O29139 +29140, O29140 +29141, O29141 +29142, O29142 +29143, O29143 +29144, O29144 +29145, O29145 +29146, O29146 +29147, O29147 +29148, O29148 +29149, O29149 +29150, O29150 +29151, O29151 +29152, O29152 +29153, O29153 +29154, O29154 +29155, O29155 +29156, O29156 +29157, O29157 +29158, O29158 +29159, O29159 +29160, O29160 +29161, O29161 +29162, O29162 +29163, O29163 +29164, O29164 +29165, O29165 +29166, O29166 +29167, O29167 +29168, O29168 +29169, O29169 +29170, O29170 +29171, O29171 +29172, O29172 +29173, O29173 +29174, O29174 +29175, O29175 +29176, O29176 +29177, O29177 +29178, O29178 +29179, O29179 +29180, O29180 +29181, O29181 +29182, O29182 +29183, O29183 +29184, O29184 +29185, O29185 +29186, O29186 +29187, O29187 +29188, O29188 +29189, O29189 +29190, O29190 +29191, O29191 +29192, O29192 +29193, O29193 +29194, O29194 +29195, O29195 +29196, O29196 +29197, O29197 +29198, O29198 +29199, O29199 +29200, O29200 +29201, O29201 +29202, O29202 +29203, O29203 +29204, O29204 +29205, O29205 +29206, O29206 +29207, O29207 +29208, O29208 +29209, O29209 +29210, O29210 +29211, O29211 +29212, O29212 +29213, O29213 +29214, O29214 +29215, O29215 +29216, O29216 +29217, O29217 +29218, O29218 +29219, O29219 +29220, O29220 +29221, O29221 +29222, O29222 +29223, O29223 +29224, O29224 +29225, O29225 +29226, O29226 +29227, O29227 +29228, O29228 +29229, O29229 +29230, O29230 +29231, O29231 +29232, O29232 +29233, O29233 +29234, O29234 +29235, O29235 +29236, O29236 +29237, O29237 +29238, O29238 +29239, O29239 +29240, O29240 +29241, O29241 +29242, O29242 +29243, O29243 +29244, O29244 +29245, O29245 +29246, O29246 +29247, O29247 +29248, O29248 +29249, O29249 +29250, O29250 +29251, O29251 +29252, O29252 +29253, O29253 +29254, O29254 +29255, O29255 +29256, O29256 +29257, O29257 +29258, O29258 +29259, O29259 +29260, O29260 +29261, O29261 +29262, O29262 +29263, O29263 +29264, O29264 +29265, O29265 +29266, O29266 +29267, O29267 +29268, O29268 +29269, O29269 +29270, O29270 +29271, O29271 +29272, O29272 +29273, O29273 +29274, O29274 +29275, O29275 +29276, O29276 +29277, O29277 +29278, O29278 +29279, O29279 +29280, O29280 +29281, O29281 +29282, O29282 +29283, O29283 +29284, O29284 +29285, O29285 +29286, O29286 +29287, O29287 +29288, O29288 +29289, O29289 +29290, O29290 +29291, O29291 +29292, O29292 +29293, O29293 +29294, O29294 +29295, O29295 +29296, O29296 +29297, O29297 +29298, O29298 +29299, O29299 +29300, O29300 +29301, O29301 +29302, O29302 +29303, O29303 +29304, O29304 +29305, O29305 +29306, O29306 +29307, O29307 +29308, O29308 +29309, O29309 +29310, O29310 +29311, O29311 +29312, O29312 +29313, O29313 +29314, O29314 +29315, O29315 +29316, O29316 +29317, O29317 +29318, O29318 +29319, O29319 +29320, O29320 +29321, O29321 +29322, O29322 +29323, O29323 +29324, O29324 +29325, O29325 +29326, O29326 +29327, O29327 +29328, O29328 +29329, O29329 +29330, O29330 +29331, O29331 +29332, O29332 +29333, O29333 +29334, O29334 +29335, O29335 +29336, O29336 +29337, O29337 +29338, O29338 +29339, O29339 +29340, O29340 +29341, O29341 +29342, O29342 +29343, O29343 +29344, O29344 +29345, O29345 +29346, O29346 +29347, O29347 +29348, O29348 +29349, O29349 +29350, O29350 +29351, O29351 +29352, O29352 +29353, O29353 +29354, O29354 +29355, O29355 +29356, O29356 +29357, O29357 +29358, O29358 +29359, O29359 +29360, O29360 +29361, O29361 +29362, O29362 +29363, O29363 +29364, O29364 +29365, O29365 +29366, O29366 +29367, O29367 +29368, O29368 +29369, O29369 +29370, O29370 +29371, O29371 +29372, O29372 +29373, O29373 +29374, O29374 +29375, O29375 +29376, O29376 +29377, O29377 +29378, O29378 +29379, O29379 +29380, O29380 +29381, O29381 +29382, O29382 +29383, O29383 +29384, O29384 +29385, O29385 +29386, O29386 +29387, O29387 +29388, O29388 +29389, O29389 +29390, O29390 +29391, O29391 +29392, O29392 +29393, O29393 +29394, O29394 +29395, O29395 +29396, O29396 +29397, O29397 +29398, O29398 +29399, O29399 +29400, O29400 +29401, O29401 +29402, O29402 +29403, O29403 +29404, O29404 +29405, O29405 +29406, O29406 +29407, O29407 +29408, O29408 +29409, O29409 +29410, O29410 +29411, O29411 +29412, O29412 +29413, O29413 +29414, O29414 +29415, O29415 +29416, O29416 +29417, O29417 +29418, O29418 +29419, O29419 +29420, O29420 +29421, O29421 +29422, O29422 +29423, O29423 +29424, O29424 +29425, O29425 +29426, O29426 +29427, O29427 +29428, O29428 +29429, O29429 +29430, O29430 +29431, O29431 +29432, O29432 +29433, O29433 +29434, O29434 +29435, O29435 +29436, O29436 +29437, O29437 +29438, O29438 +29439, O29439 +29440, O29440 +29441, O29441 +29442, O29442 +29443, O29443 +29444, O29444 +29445, O29445 +29446, O29446 +29447, O29447 +29448, O29448 +29449, O29449 +29450, O29450 +29451, O29451 +29452, O29452 +29453, O29453 +29454, O29454 +29455, O29455 +29456, O29456 +29457, O29457 +29458, O29458 +29459, O29459 +29460, O29460 +29461, O29461 +29462, O29462 +29463, O29463 +29464, O29464 +29465, O29465 +29466, O29466 +29467, O29467 +29468, O29468 +29469, O29469 +29470, O29470 +29471, O29471 +29472, O29472 +29473, O29473 +29474, O29474 +29475, O29475 +29476, O29476 +29477, O29477 +29478, O29478 +29479, O29479 +29480, O29480 +29481, O29481 +29482, O29482 +29483, O29483 +29484, O29484 +29485, O29485 +29486, O29486 +29487, O29487 +29488, O29488 +29489, O29489 +29490, O29490 +29491, O29491 +29492, O29492 +29493, O29493 +29494, O29494 +29495, O29495 +29496, O29496 +29497, O29497 +29498, O29498 +29499, O29499 +29500, O29500 +29501, O29501 +29502, O29502 +29503, O29503 +29504, O29504 +29505, O29505 +29506, O29506 +29507, O29507 +29508, O29508 +29509, O29509 +29510, O29510 +29511, O29511 +29512, O29512 +29513, O29513 +29514, O29514 +29515, O29515 +29516, O29516 +29517, O29517 +29518, O29518 +29519, O29519 +29520, O29520 +29521, O29521 +29522, O29522 +29523, O29523 +29524, O29524 +29525, O29525 +29526, O29526 +29527, O29527 +29528, O29528 +29529, O29529 +29530, O29530 +29531, O29531 +29532, O29532 +29533, O29533 +29534, O29534 +29535, O29535 +29536, O29536 +29537, O29537 +29538, O29538 +29539, O29539 +29540, O29540 +29541, O29541 +29542, O29542 +29543, O29543 +29544, O29544 +29545, O29545 +29546, O29546 +29547, O29547 +29548, O29548 +29549, O29549 +29550, O29550 +29551, O29551 +29552, O29552 +29553, O29553 +29554, O29554 +29555, O29555 +29556, O29556 +29557, O29557 +29558, O29558 +29559, O29559 +29560, O29560 +29561, O29561 +29562, O29562 +29563, O29563 +29564, O29564 +29565, O29565 +29566, O29566 +29567, O29567 +29568, O29568 +29569, O29569 +29570, O29570 +29571, O29571 +29572, O29572 +29573, O29573 +29574, O29574 +29575, O29575 +29576, O29576 +29577, O29577 +29578, O29578 +29579, O29579 +29580, O29580 +29581, O29581 +29582, O29582 +29583, O29583 +29584, O29584 +29585, O29585 +29586, O29586 +29587, O29587 +29588, O29588 +29589, O29589 +29590, O29590 +29591, O29591 +29592, O29592 +29593, O29593 +29594, O29594 +29595, O29595 +29596, O29596 +29597, O29597 +29598, O29598 +29599, O29599 +29600, O29600 +29601, O29601 +29602, O29602 +29603, O29603 +29604, O29604 +29605, O29605 +29606, O29606 +29607, O29607 +29608, O29608 +29609, O29609 +29610, O29610 +29611, O29611 +29612, O29612 +29613, O29613 +29614, O29614 +29615, O29615 +29616, O29616 +29617, O29617 +29618, O29618 +29619, O29619 +29620, O29620 +29621, O29621 +29622, O29622 +29623, O29623 +29624, O29624 +29625, O29625 +29626, O29626 +29627, O29627 +29628, O29628 +29629, O29629 +29630, O29630 +29631, O29631 +29632, O29632 +29633, O29633 +29634, O29634 +29635, O29635 +29636, O29636 +29637, O29637 +29638, O29638 +29639, O29639 +29640, O29640 +29641, O29641 +29642, O29642 +29643, O29643 +29644, O29644 +29645, O29645 +29646, O29646 +29647, O29647 +29648, O29648 +29649, O29649 +29650, O29650 +29651, O29651 +29652, O29652 +29653, O29653 +29654, O29654 +29655, O29655 +29656, O29656 +29657, O29657 +29658, O29658 +29659, O29659 +29660, O29660 +29661, O29661 +29662, O29662 +29663, O29663 +29664, O29664 +29665, O29665 +29666, O29666 +29667, O29667 +29668, O29668 +29669, O29669 +29670, O29670 +29671, O29671 +29672, O29672 +29673, O29673 +29674, O29674 +29675, O29675 +29676, O29676 +29677, O29677 +29678, O29678 +29679, O29679 +29680, O29680 +29681, O29681 +29682, O29682 +29683, O29683 +29684, O29684 +29685, O29685 +29686, O29686 +29687, O29687 +29688, O29688 +29689, O29689 +29690, O29690 +29691, O29691 +29692, O29692 +29693, O29693 +29694, O29694 +29695, O29695 +29696, O29696 +29697, O29697 +29698, O29698 +29699, O29699 +29700, O29700 +29701, O29701 +29702, O29702 +29703, O29703 +29704, O29704 +29705, O29705 +29706, O29706 +29707, O29707 +29708, O29708 +29709, O29709 +29710, O29710 +29711, O29711 +29712, O29712 +29713, O29713 +29714, O29714 +29715, O29715 +29716, O29716 +29717, O29717 +29718, O29718 +29719, O29719 +29720, O29720 +29721, O29721 +29722, O29722 +29723, O29723 +29724, O29724 +29725, O29725 +29726, O29726 +29727, O29727 +29728, O29728 +29729, O29729 +29730, O29730 +29731, O29731 +29732, O29732 +29733, O29733 +29734, O29734 +29735, O29735 +29736, O29736 +29737, O29737 +29738, O29738 +29739, O29739 +29740, O29740 +29741, O29741 +29742, O29742 +29743, O29743 +29744, O29744 +29745, O29745 +29746, O29746 +29747, O29747 +29748, O29748 +29749, O29749 +29750, O29750 +29751, O29751 +29752, O29752 +29753, O29753 +29754, O29754 +29755, O29755 +29756, O29756 +29757, O29757 +29758, O29758 +29759, O29759 +29760, O29760 +29761, O29761 +29762, O29762 +29763, O29763 +29764, O29764 +29765, O29765 +29766, O29766 +29767, O29767 +29768, O29768 +29769, O29769 +29770, O29770 +29771, O29771 +29772, O29772 +29773, O29773 +29774, O29774 +29775, O29775 +29776, O29776 +29777, O29777 +29778, O29778 +29779, O29779 +29780, O29780 +29781, O29781 +29782, O29782 +29783, O29783 +29784, O29784 +29785, O29785 +29786, O29786 +29787, O29787 +29788, O29788 +29789, O29789 +29790, O29790 +29791, O29791 +29792, O29792 +29793, O29793 +29794, O29794 +29795, O29795 +29796, O29796 +29797, O29797 +29798, O29798 +29799, O29799 +29800, O29800 +29801, O29801 +29802, O29802 +29803, O29803 +29804, O29804 +29805, O29805 +29806, O29806 +29807, O29807 +29808, O29808 +29809, O29809 +29810, O29810 +29811, O29811 +29812, O29812 +29813, O29813 +29814, O29814 +29815, O29815 +29816, O29816 +29817, O29817 +29818, O29818 +29819, O29819 +29820, O29820 +29821, O29821 +29822, O29822 +29823, O29823 +29824, O29824 +29825, O29825 +29826, O29826 +29827, O29827 +29828, O29828 +29829, O29829 +29830, O29830 +29831, O29831 +29832, O29832 +29833, O29833 +29834, O29834 +29835, O29835 +29836, O29836 +29837, O29837 +29838, O29838 +29839, O29839 +29840, O29840 +29841, O29841 +29842, O29842 +29843, O29843 +29844, O29844 +29845, O29845 +29846, O29846 +29847, O29847 +29848, O29848 +29849, O29849 +29850, O29850 +29851, O29851 +29852, O29852 +29853, O29853 +29854, O29854 +29855, O29855 +29856, O29856 +29857, O29857 +29858, O29858 +29859, O29859 +29860, O29860 +29861, O29861 +29862, O29862 +29863, O29863 +29864, O29864 +29865, O29865 +29866, O29866 +29867, O29867 +29868, O29868 +29869, O29869 +29870, O29870 +29871, O29871 +29872, O29872 +29873, O29873 +29874, O29874 +29875, O29875 +29876, O29876 +29877, O29877 +29878, O29878 +29879, O29879 +29880, O29880 +29881, O29881 +29882, O29882 +29883, O29883 +29884, O29884 +29885, O29885 +29886, O29886 +29887, O29887 +29888, O29888 +29889, O29889 +29890, O29890 +29891, O29891 +29892, O29892 +29893, O29893 +29894, O29894 +29895, O29895 +29896, O29896 +29897, O29897 +29898, O29898 +29899, O29899 +29900, O29900 +29901, O29901 +29902, O29902 +29903, O29903 +29904, O29904 +29905, O29905 +29906, O29906 +29907, O29907 +29908, O29908 +29909, O29909 +29910, O29910 +29911, O29911 +29912, O29912 +29913, O29913 +29914, O29914 +29915, O29915 +29916, O29916 +29917, O29917 +29918, O29918 +29919, O29919 +29920, O29920 +29921, O29921 +29922, O29922 +29923, O29923 +29924, O29924 +29925, O29925 +29926, O29926 +29927, O29927 +29928, O29928 +29929, O29929 +29930, O29930 +29931, O29931 +29932, O29932 +29933, O29933 +29934, O29934 +29935, O29935 +29936, O29936 +29937, O29937 +29938, O29938 +29939, O29939 +29940, O29940 +29941, O29941 +29942, O29942 +29943, O29943 +29944, O29944 +29945, O29945 +29946, O29946 +29947, O29947 +29948, O29948 +29949, O29949 +29950, O29950 +29951, O29951 +29952, O29952 +29953, O29953 +29954, O29954 +29955, O29955 +29956, O29956 +29957, O29957 +29958, O29958 +29959, O29959 +29960, O29960 +29961, O29961 +29962, O29962 +29963, O29963 +29964, O29964 +29965, O29965 +29966, O29966 +29967, O29967 +29968, O29968 +29969, O29969 +29970, O29970 +29971, O29971 +29972, O29972 +29973, O29973 +29974, O29974 +29975, O29975 +29976, O29976 +29977, O29977 +29978, O29978 +29979, O29979 +29980, O29980 +29981, O29981 +29982, O29982 +29983, O29983 +29984, O29984 +29985, O29985 +29986, O29986 +29987, O29987 +29988, O29988 +29989, O29989 +29990, O29990 +29991, O29991 +29992, O29992 +29993, O29993 +29994, O29994 +29995, O29995 +29996, O29996 +29997, O29997 +29998, O29998 +29999, O29999 +30000, O30000 +30001, O30001 +30002, O30002 +30003, O30003 +30004, O30004 +30005, O30005 +30006, O30006 +30007, O30007 +30008, O30008 +30009, O30009 +30010, O30010 +30011, O30011 +30012, O30012 +30013, O30013 +30014, O30014 +30015, O30015 +30016, O30016 +30017, O30017 +30018, O30018 +30019, O30019 +30020, O30020 +30021, O30021 +30022, O30022 +30023, O30023 +30024, O30024 +30025, O30025 +30026, O30026 +30027, O30027 +30028, O30028 +30029, O30029 +30030, O30030 +30031, O30031 +30032, O30032 +30033, O30033 +30034, O30034 +30035, O30035 +30036, O30036 +30037, O30037 +30038, O30038 +30039, O30039 +30040, O30040 +30041, O30041 +30042, O30042 +30043, O30043 +30044, O30044 +30045, O30045 +30046, O30046 +30047, O30047 +30048, O30048 +30049, O30049 +30050, O30050 +30051, O30051 +30052, O30052 +30053, O30053 +30054, O30054 +30055, O30055 +30056, O30056 +30057, O30057 +30058, O30058 +30059, O30059 +30060, O30060 +30061, O30061 +30062, O30062 +30063, O30063 +30064, O30064 +30065, O30065 +30066, O30066 +30067, O30067 +30068, O30068 +30069, O30069 +30070, O30070 +30071, O30071 +30072, O30072 +30073, O30073 +30074, O30074 +30075, O30075 +30076, O30076 +30077, O30077 +30078, O30078 +30079, O30079 +30080, O30080 +30081, O30081 +30082, O30082 +30083, O30083 +30084, O30084 +30085, O30085 +30086, O30086 +30087, O30087 +30088, O30088 +30089, O30089 +30090, O30090 +30091, O30091 +30092, O30092 +30093, O30093 +30094, O30094 +30095, O30095 +30096, O30096 +30097, O30097 +30098, O30098 +30099, O30099 +30100, O30100 +30101, O30101 +30102, O30102 +30103, O30103 +30104, O30104 +30105, O30105 +30106, O30106 +30107, O30107 +30108, O30108 +30109, O30109 +30110, O30110 +30111, O30111 +30112, O30112 +30113, O30113 +30114, O30114 +30115, O30115 +30116, O30116 +30117, O30117 +30118, O30118 +30119, O30119 +30120, O30120 +30121, O30121 +30122, O30122 +30123, O30123 +30124, O30124 +30125, O30125 +30126, O30126 +30127, O30127 +30128, O30128 +30129, O30129 +30130, O30130 +30131, O30131 +30132, O30132 +30133, O30133 +30134, O30134 +30135, O30135 +30136, O30136 +30137, O30137 +30138, O30138 +30139, O30139 +30140, O30140 +30141, O30141 +30142, O30142 +30143, O30143 +30144, O30144 +30145, O30145 +30146, O30146 +30147, O30147 +30148, O30148 +30149, O30149 +30150, O30150 +30151, O30151 +30152, O30152 +30153, O30153 +30154, O30154 +30155, O30155 +30156, O30156 +30157, O30157 +30158, O30158 +30159, O30159 +30160, O30160 +30161, O30161 +30162, O30162 +30163, O30163 +30164, O30164 +30165, O30165 +30166, O30166 +30167, O30167 +30168, O30168 +30169, O30169 +30170, O30170 +30171, O30171 +30172, O30172 +30173, O30173 +30174, O30174 +30175, O30175 +30176, O30176 +30177, O30177 +30178, O30178 +30179, O30179 +30180, O30180 +30181, O30181 +30182, O30182 +30183, O30183 +30184, O30184 +30185, O30185 +30186, O30186 +30187, O30187 +30188, O30188 +30189, O30189 +30190, O30190 +30191, O30191 +30192, O30192 +30193, O30193 +30194, O30194 +30195, O30195 +30196, O30196 +30197, O30197 +30198, O30198 +30199, O30199 +30200, O30200 +30201, O30201 +30202, O30202 +30203, O30203 +30204, O30204 +30205, O30205 +30206, O30206 +30207, O30207 +30208, O30208 +30209, O30209 +30210, O30210 +30211, O30211 +30212, O30212 +30213, O30213 +30214, O30214 +30215, O30215 +30216, O30216 +30217, O30217 +30218, O30218 +30219, O30219 +30220, O30220 +30221, O30221 +30222, O30222 +30223, O30223 +30224, O30224 +30225, O30225 +30226, O30226 +30227, O30227 +30228, O30228 +30229, O30229 +30230, O30230 +30231, O30231 +30232, O30232 +30233, O30233 +30234, O30234 +30235, O30235 +30236, O30236 +30237, O30237 +30238, O30238 +30239, O30239 +30240, O30240 +30241, O30241 +30242, O30242 +30243, O30243 +30244, O30244 +30245, O30245 +30246, O30246 +30247, O30247 +30248, O30248 +30249, O30249 +30250, O30250 +30251, O30251 +30252, O30252 +30253, O30253 +30254, O30254 +30255, O30255 +30256, O30256 +30257, O30257 +30258, O30258 +30259, O30259 +30260, O30260 +30261, O30261 +30262, O30262 +30263, O30263 +30264, O30264 +30265, O30265 +30266, O30266 +30267, O30267 +30268, O30268 +30269, O30269 +30270, O30270 +30271, O30271 +30272, O30272 +30273, O30273 +30274, O30274 +30275, O30275 +30276, O30276 +30277, O30277 +30278, O30278 +30279, O30279 +30280, O30280 +30281, O30281 +30282, O30282 +30283, O30283 +30284, O30284 +30285, O30285 +30286, O30286 +30287, O30287 +30288, O30288 +30289, O30289 +30290, O30290 +30291, O30291 +30292, O30292 +30293, O30293 +30294, O30294 +30295, O30295 +30296, O30296 +30297, O30297 +30298, O30298 +30299, O30299 +30300, O30300 +30301, O30301 +30302, O30302 +30303, O30303 +30304, O30304 +30305, O30305 +30306, O30306 +30307, O30307 +30308, O30308 +30309, O30309 +30310, O30310 +30311, O30311 +30312, O30312 +30313, O30313 +30314, O30314 +30315, O30315 +30316, O30316 +30317, O30317 +30318, O30318 +30319, O30319 +30320, O30320 +30321, O30321 +30322, O30322 +30323, O30323 +30324, O30324 +30325, O30325 +30326, O30326 +30327, O30327 +30328, O30328 +30329, O30329 +30330, O30330 +30331, O30331 +30332, O30332 +30333, O30333 +30334, O30334 +30335, O30335 +30336, O30336 +30337, O30337 +30338, O30338 +30339, O30339 +30340, O30340 +30341, O30341 +30342, O30342 +30343, O30343 +30344, O30344 +30345, O30345 +30346, O30346 +30347, O30347 +30348, O30348 +30349, O30349 +30350, O30350 +30351, O30351 +30352, O30352 +30353, O30353 +30354, O30354 +30355, O30355 +30356, O30356 +30357, O30357 +30358, O30358 +30359, O30359 +30360, O30360 +30361, O30361 +30362, O30362 +30363, O30363 +30364, O30364 +30365, O30365 +30366, O30366 +30367, O30367 +30368, O30368 +30369, O30369 +30370, O30370 +30371, O30371 +30372, O30372 +30373, O30373 +30374, O30374 +30375, O30375 +30376, O30376 +30377, O30377 +30378, O30378 +30379, O30379 +30380, O30380 +30381, O30381 +30382, O30382 +30383, O30383 +30384, O30384 +30385, O30385 +30386, O30386 +30387, O30387 +30388, O30388 +30389, O30389 +30390, O30390 +30391, O30391 +30392, O30392 +30393, O30393 +30394, O30394 +30395, O30395 +30396, O30396 +30397, O30397 +30398, O30398 +30399, O30399 +30400, O30400 +30401, O30401 +30402, O30402 +30403, O30403 +30404, O30404 +30405, O30405 +30406, O30406 +30407, O30407 +30408, O30408 +30409, O30409 +30410, O30410 +30411, O30411 +30412, O30412 +30413, O30413 +30414, O30414 +30415, O30415 +30416, O30416 +30417, O30417 +30418, O30418 +30419, O30419 +30420, O30420 +30421, O30421 +30422, O30422 +30423, O30423 +30424, O30424 +30425, O30425 +30426, O30426 +30427, O30427 +30428, O30428 +30429, O30429 +30430, O30430 +30431, O30431 +30432, O30432 +30433, O30433 +30434, O30434 +30435, O30435 +30436, O30436 +30437, O30437 +30438, O30438 +30439, O30439 +30440, O30440 +30441, O30441 +30442, O30442 +30443, O30443 +30444, O30444 +30445, O30445 +30446, O30446 +30447, O30447 +30448, O30448 +30449, O30449 +30450, O30450 +30451, O30451 +30452, O30452 +30453, O30453 +30454, O30454 +30455, O30455 +30456, O30456 +30457, O30457 +30458, O30458 +30459, O30459 +30460, O30460 +30461, O30461 +30462, O30462 +30463, O30463 +30464, O30464 +30465, O30465 +30466, O30466 +30467, O30467 +30468, O30468 +30469, O30469 +30470, O30470 +30471, O30471 +30472, O30472 +30473, O30473 +30474, O30474 +30475, O30475 +30476, O30476 +30477, O30477 +30478, O30478 +30479, O30479 +30480, O30480 +30481, O30481 +30482, O30482 +30483, O30483 +30484, O30484 +30485, O30485 +30486, O30486 +30487, O30487 +30488, O30488 +30489, O30489 +30490, O30490 +30491, O30491 +30492, O30492 +30493, O30493 +30494, O30494 +30495, O30495 +30496, O30496 +30497, O30497 +30498, O30498 +30499, O30499 +30500, O30500 +30501, O30501 +30502, O30502 +30503, O30503 +30504, O30504 +30505, O30505 +30506, O30506 +30507, O30507 +30508, O30508 +30509, O30509 +30510, O30510 +30511, O30511 +30512, O30512 +30513, O30513 +30514, O30514 +30515, O30515 +30516, O30516 +30517, O30517 +30518, O30518 +30519, O30519 +30520, O30520 +30521, O30521 +30522, O30522 +30523, O30523 +30524, O30524 +30525, O30525 +30526, O30526 +30527, O30527 +30528, O30528 +30529, O30529 +30530, O30530 +30531, O30531 +30532, O30532 +30533, O30533 +30534, O30534 +30535, O30535 +30536, O30536 +30537, O30537 +30538, O30538 +30539, O30539 +30540, O30540 +30541, O30541 +30542, O30542 +30543, O30543 +30544, O30544 +30545, O30545 +30546, O30546 +30547, O30547 +30548, O30548 +30549, O30549 +30550, O30550 +30551, O30551 +30552, O30552 +30553, O30553 +30554, O30554 +30555, O30555 +30556, O30556 +30557, O30557 +30558, O30558 +30559, O30559 +30560, O30560 +30561, O30561 +30562, O30562 +30563, O30563 +30564, O30564 +30565, O30565 +30566, O30566 +30567, O30567 +30568, O30568 +30569, O30569 +30570, O30570 +30571, O30571 +30572, O30572 +30573, O30573 +30574, O30574 +30575, O30575 +30576, O30576 +30577, O30577 +30578, O30578 +30579, O30579 +30580, O30580 +30581, O30581 +30582, O30582 +30583, O30583 +30584, O30584 +30585, O30585 +30586, O30586 +30587, O30587 +30588, O30588 +30589, O30589 +30590, O30590 +30591, O30591 +30592, O30592 +30593, O30593 +30594, O30594 +30595, O30595 +30596, O30596 +30597, O30597 +30598, O30598 +30599, O30599 +30600, O30600 +30601, O30601 +30602, O30602 +30603, O30603 +30604, O30604 +30605, O30605 +30606, O30606 +30607, O30607 +30608, O30608 +30609, O30609 +30610, O30610 +30611, O30611 +30612, O30612 +30613, O30613 +30614, O30614 +30615, O30615 +30616, O30616 +30617, O30617 +30618, O30618 +30619, O30619 +30620, O30620 +30621, O30621 +30622, O30622 +30623, O30623 +30624, O30624 +30625, O30625 +30626, O30626 +30627, O30627 +30628, O30628 +30629, O30629 +30630, O30630 +30631, O30631 +30632, O30632 +30633, O30633 +30634, O30634 +30635, O30635 +30636, O30636 +30637, O30637 +30638, O30638 +30639, O30639 +30640, O30640 +30641, O30641 +30642, O30642 +30643, O30643 +30644, O30644 +30645, O30645 +30646, O30646 +30647, O30647 +30648, O30648 +30649, O30649 +30650, O30650 +30651, O30651 +30652, O30652 +30653, O30653 +30654, O30654 +30655, O30655 +30656, O30656 +30657, O30657 +30658, O30658 +30659, O30659 +30660, O30660 +30661, O30661 +30662, O30662 +30663, O30663 +30664, O30664 +30665, O30665 +30666, O30666 +30667, O30667 +30668, O30668 +30669, O30669 +30670, O30670 +30671, O30671 +30672, O30672 +30673, O30673 +30674, O30674 +30675, O30675 +30676, O30676 +30677, O30677 +30678, O30678 +30679, O30679 +30680, O30680 +30681, O30681 +30682, O30682 +30683, O30683 +30684, O30684 +30685, O30685 +30686, O30686 +30687, O30687 +30688, O30688 +30689, O30689 +30690, O30690 +30691, O30691 +30692, O30692 +30693, O30693 +30694, O30694 +30695, O30695 +30696, O30696 +30697, O30697 +30698, O30698 +30699, O30699 +30700, O30700 +30701, O30701 +30702, O30702 +30703, O30703 +30704, O30704 +30705, O30705 +30706, O30706 +30707, O30707 +30708, O30708 +30709, O30709 +30710, O30710 +30711, O30711 +30712, O30712 +30713, O30713 +30714, O30714 +30715, O30715 +30716, O30716 +30717, O30717 +30718, O30718 +30719, O30719 +30720, O30720 +30721, O30721 +30722, O30722 +30723, O30723 +30724, O30724 +30725, O30725 +30726, O30726 +30727, O30727 +30728, O30728 +30729, O30729 +30730, O30730 +30731, O30731 +30732, O30732 +30733, O30733 +30734, O30734 +30735, O30735 +30736, O30736 +30737, O30737 +30738, O30738 +30739, O30739 +30740, O30740 +30741, O30741 +30742, O30742 +30743, O30743 +30744, O30744 +30745, O30745 +30746, O30746 +30747, O30747 +30748, O30748 +30749, O30749 +30750, O30750 +30751, O30751 +30752, O30752 +30753, O30753 +30754, O30754 +30755, O30755 +30756, O30756 +30757, O30757 +30758, O30758 +30759, O30759 +30760, O30760 +30761, O30761 +30762, O30762 +30763, O30763 +30764, O30764 +30765, O30765 +30766, O30766 +30767, O30767 +30768, O30768 +30769, O30769 +30770, O30770 +30771, O30771 +30772, O30772 +30773, O30773 +30774, O30774 +30775, O30775 +30776, O30776 +30777, O30777 +30778, O30778 +30779, O30779 +30780, O30780 +30781, O30781 +30782, O30782 +30783, O30783 +30784, O30784 +30785, O30785 +30786, O30786 +30787, O30787 +30788, O30788 +30789, O30789 +30790, O30790 +30791, O30791 +30792, O30792 +30793, O30793 +30794, O30794 +30795, O30795 +30796, O30796 +30797, O30797 +30798, O30798 +30799, O30799 +30800, O30800 +30801, O30801 +30802, O30802 +30803, O30803 +30804, O30804 +30805, O30805 +30806, O30806 +30807, O30807 +30808, O30808 +30809, O30809 +30810, O30810 +30811, O30811 +30812, O30812 +30813, O30813 +30814, O30814 +30815, O30815 +30816, O30816 +30817, O30817 +30818, O30818 +30819, O30819 +30820, O30820 +30821, O30821 +30822, O30822 +30823, O30823 +30824, O30824 +30825, O30825 +30826, O30826 +30827, O30827 +30828, O30828 +30829, O30829 +30830, O30830 +30831, O30831 +30832, O30832 +30833, O30833 +30834, O30834 +30835, O30835 +30836, O30836 +30837, O30837 +30838, O30838 +30839, O30839 +30840, O30840 +30841, O30841 +30842, O30842 +30843, O30843 +30844, O30844 +30845, O30845 +30846, O30846 +30847, O30847 +30848, O30848 +30849, O30849 +30850, O30850 +30851, O30851 +30852, O30852 +30853, O30853 +30854, O30854 +30855, O30855 +30856, O30856 +30857, O30857 +30858, O30858 +30859, O30859 +30860, O30860 +30861, O30861 +30862, O30862 +30863, O30863 +30864, O30864 +30865, O30865 +30866, O30866 +30867, O30867 +30868, O30868 +30869, O30869 +30870, O30870 +30871, O30871 +30872, O30872 +30873, O30873 +30874, O30874 +30875, O30875 +30876, O30876 +30877, O30877 +30878, O30878 +30879, O30879 +30880, O30880 +30881, O30881 +30882, O30882 +30883, O30883 +30884, O30884 +30885, O30885 +30886, O30886 +30887, O30887 +30888, O30888 +30889, O30889 +30890, O30890 +30891, O30891 +30892, O30892 +30893, O30893 +30894, O30894 +30895, O30895 +30896, O30896 +30897, O30897 +30898, O30898 +30899, O30899 +30900, O30900 +30901, O30901 +30902, O30902 +30903, O30903 +30904, O30904 +30905, O30905 +30906, O30906 +30907, O30907 +30908, O30908 +30909, O30909 +30910, O30910 +30911, O30911 +30912, O30912 +30913, O30913 +30914, O30914 +30915, O30915 +30916, O30916 +30917, O30917 +30918, O30918 +30919, O30919 +30920, O30920 +30921, O30921 +30922, O30922 +30923, O30923 +30924, O30924 +30925, O30925 +30926, O30926 +30927, O30927 +30928, O30928 +30929, O30929 +30930, O30930 +30931, O30931 +30932, O30932 +30933, O30933 +30934, O30934 +30935, O30935 +30936, O30936 +30937, O30937 +30938, O30938 +30939, O30939 +30940, O30940 +30941, O30941 +30942, O30942 +30943, O30943 +30944, O30944 +30945, O30945 +30946, O30946 +30947, O30947 +30948, O30948 +30949, O30949 +30950, O30950 +30951, O30951 +30952, O30952 +30953, O30953 +30954, O30954 +30955, O30955 +30956, O30956 +30957, O30957 +30958, O30958 +30959, O30959 +30960, O30960 +30961, O30961 +30962, O30962 +30963, O30963 +30964, O30964 +30965, O30965 +30966, O30966 +30967, O30967 +30968, O30968 +30969, O30969 +30970, O30970 +30971, O30971 +30972, O30972 +30973, O30973 +30974, O30974 +30975, O30975 +30976, O30976 +30977, O30977 +30978, O30978 +30979, O30979 +30980, O30980 +30981, O30981 +30982, O30982 +30983, O30983 +30984, O30984 +30985, O30985 +30986, O30986 +30987, O30987 +30988, O30988 +30989, O30989 +30990, O30990 +30991, O30991 +30992, O30992 +30993, O30993 +30994, O30994 +30995, O30995 +30996, O30996 +30997, O30997 +30998, O30998 +30999, O30999 +31000, O31000 +31001, O31001 +31002, O31002 +31003, O31003 +31004, O31004 +31005, O31005 +31006, O31006 +31007, O31007 +31008, O31008 +31009, O31009 +31010, O31010 +31011, O31011 +31012, O31012 +31013, O31013 +31014, O31014 +31015, O31015 +31016, O31016 +31017, O31017 +31018, O31018 +31019, O31019 +31020, O31020 +31021, O31021 +31022, O31022 +31023, O31023 +31024, O31024 +31025, O31025 +31026, O31026 +31027, O31027 +31028, O31028 +31029, O31029 +31030, O31030 +31031, O31031 +31032, O31032 +31033, O31033 +31034, O31034 +31035, O31035 +31036, O31036 +31037, O31037 +31038, O31038 +31039, O31039 +31040, O31040 +31041, O31041 +31042, O31042 +31043, O31043 +31044, O31044 +31045, O31045 +31046, O31046 +31047, O31047 +31048, O31048 +31049, O31049 +31050, O31050 +31051, O31051 +31052, O31052 +31053, O31053 +31054, O31054 +31055, O31055 +31056, O31056 +31057, O31057 +31058, O31058 +31059, O31059 +31060, O31060 +31061, O31061 +31062, O31062 +31063, O31063 +31064, O31064 +31065, O31065 +31066, O31066 +31067, O31067 +31068, O31068 +31069, O31069 +31070, O31070 +31071, O31071 +31072, O31072 +31073, O31073 +31074, O31074 +31075, O31075 +31076, O31076 +31077, O31077 +31078, O31078 +31079, O31079 +31080, O31080 +31081, O31081 +31082, O31082 +31083, O31083 +31084, O31084 +31085, O31085 +31086, O31086 +31087, O31087 +31088, O31088 +31089, O31089 +31090, O31090 +31091, O31091 +31092, O31092 +31093, O31093 +31094, O31094 +31095, O31095 +31096, O31096 +31097, O31097 +31098, O31098 +31099, O31099 +31100, O31100 +31101, O31101 +31102, O31102 +31103, O31103 +31104, O31104 +31105, O31105 +31106, O31106 +31107, O31107 +31108, O31108 +31109, O31109 +31110, O31110 +31111, O31111 +31112, O31112 +31113, O31113 +31114, O31114 +31115, O31115 +31116, O31116 +31117, O31117 +31118, O31118 +31119, O31119 +31120, O31120 +31121, O31121 +31122, O31122 +31123, O31123 +31124, O31124 +31125, O31125 +31126, O31126 +31127, O31127 +31128, O31128 +31129, O31129 +31130, O31130 +31131, O31131 +31132, O31132 +31133, O31133 +31134, O31134 +31135, O31135 +31136, O31136 +31137, O31137 +31138, O31138 +31139, O31139 +31140, O31140 +31141, O31141 +31142, O31142 +31143, O31143 +31144, O31144 +31145, O31145 +31146, O31146 +31147, O31147 +31148, O31148 +31149, O31149 +31150, O31150 +31151, O31151 +31152, O31152 +31153, O31153 +31154, O31154 +31155, O31155 +31156, O31156 +31157, O31157 +31158, O31158 +31159, O31159 +31160, O31160 +31161, O31161 +31162, O31162 +31163, O31163 +31164, O31164 +31165, O31165 +31166, O31166 +31167, O31167 +31168, O31168 +31169, O31169 +31170, O31170 +31171, O31171 +31172, O31172 +31173, O31173 +31174, O31174 +31175, O31175 +31176, O31176 +31177, O31177 +31178, O31178 +31179, O31179 +31180, O31180 +31181, O31181 +31182, O31182 +31183, O31183 +31184, O31184 +31185, O31185 +31186, O31186 +31187, O31187 +31188, O31188 +31189, O31189 +31190, O31190 +31191, O31191 +31192, O31192 +31193, O31193 +31194, O31194 +31195, O31195 +31196, O31196 +31197, O31197 +31198, O31198 +31199, O31199 +31200, O31200 +31201, O31201 +31202, O31202 +31203, O31203 +31204, O31204 +31205, O31205 +31206, O31206 +31207, O31207 +31208, O31208 +31209, O31209 +31210, O31210 +31211, O31211 +31212, O31212 +31213, O31213 +31214, O31214 +31215, O31215 +31216, O31216 +31217, O31217 +31218, O31218 +31219, O31219 +31220, O31220 +31221, O31221 +31222, O31222 +31223, O31223 +31224, O31224 +31225, O31225 +31226, O31226 +31227, O31227 +31228, O31228 +31229, O31229 +31230, O31230 +31231, O31231 +31232, O31232 +31233, O31233 +31234, O31234 +31235, O31235 +31236, O31236 +31237, O31237 +31238, O31238 +31239, O31239 +31240, O31240 +31241, O31241 +31242, O31242 +31243, O31243 +31244, O31244 +31245, O31245 +31246, O31246 +31247, O31247 +31248, O31248 +31249, O31249 +31250, O31250 +31251, O31251 +31252, O31252 +31253, O31253 +31254, O31254 +31255, O31255 +31256, O31256 +31257, O31257 +31258, O31258 +31259, O31259 +31260, O31260 +31261, O31261 +31262, O31262 +31263, O31263 +31264, O31264 +31265, O31265 +31266, O31266 +31267, O31267 +31268, O31268 +31269, O31269 +31270, O31270 +31271, O31271 +31272, O31272 +31273, O31273 +31274, O31274 +31275, O31275 +31276, O31276 +31277, O31277 +31278, O31278 +31279, O31279 +31280, O31280 +31281, O31281 +31282, O31282 +31283, O31283 +31284, O31284 +31285, O31285 +31286, O31286 +31287, O31287 +31288, O31288 +31289, O31289 +31290, O31290 +31291, O31291 +31292, O31292 +31293, O31293 +31294, O31294 +31295, O31295 +31296, O31296 +31297, O31297 +31298, O31298 +31299, O31299 +31300, O31300 +31301, O31301 +31302, O31302 +31303, O31303 +31304, O31304 +31305, O31305 +31306, O31306 +31307, O31307 +31308, O31308 +31309, O31309 +31310, O31310 +31311, O31311 +31312, O31312 +31313, O31313 +31314, O31314 +31315, O31315 +31316, O31316 +31317, O31317 +31318, O31318 +31319, O31319 +31320, O31320 +31321, O31321 +31322, O31322 +31323, O31323 +31324, O31324 +31325, O31325 +31326, O31326 +31327, O31327 +31328, O31328 +31329, O31329 +31330, O31330 +31331, O31331 +31332, O31332 +31333, O31333 +31334, O31334 +31335, O31335 +31336, O31336 +31337, O31337 +31338, O31338 +31339, O31339 +31340, O31340 +31341, O31341 +31342, O31342 +31343, O31343 +31344, O31344 +31345, O31345 +31346, O31346 +31347, O31347 +31348, O31348 +31349, O31349 +31350, O31350 +31351, O31351 +31352, O31352 +31353, O31353 +31354, O31354 +31355, O31355 +31356, O31356 +31357, O31357 +31358, O31358 +31359, O31359 +31360, O31360 +31361, O31361 +31362, O31362 +31363, O31363 +31364, O31364 +31365, O31365 +31366, O31366 +31367, O31367 +31368, O31368 +31369, O31369 +31370, O31370 +31371, O31371 +31372, O31372 +31373, O31373 +31374, O31374 +31375, O31375 +31376, O31376 +31377, O31377 +31378, O31378 +31379, O31379 +31380, O31380 +31381, O31381 +31382, O31382 +31383, O31383 +31384, O31384 +31385, O31385 +31386, O31386 +31387, O31387 +31388, O31388 +31389, O31389 +31390, O31390 +31391, O31391 +31392, O31392 +31393, O31393 +31394, O31394 +31395, O31395 +31396, O31396 +31397, O31397 +31398, O31398 +31399, O31399 +31400, O31400 +31401, O31401 +31402, O31402 +31403, O31403 +31404, O31404 +31405, O31405 +31406, O31406 +31407, O31407 +31408, O31408 +31409, O31409 +31410, O31410 +31411, O31411 +31412, O31412 +31413, O31413 +31414, O31414 +31415, O31415 +31416, O31416 +31417, O31417 +31418, O31418 +31419, O31419 +31420, O31420 +31421, O31421 +31422, O31422 +31423, O31423 +31424, O31424 +31425, O31425 +31426, O31426 +31427, O31427 +31428, O31428 +31429, O31429 +31430, O31430 +31431, O31431 +31432, O31432 +31433, O31433 +31434, O31434 +31435, O31435 +31436, O31436 +31437, O31437 +31438, O31438 +31439, O31439 +31440, O31440 +31441, O31441 +31442, O31442 +31443, O31443 +31444, O31444 +31445, O31445 +31446, O31446 +31447, O31447 +31448, O31448 +31449, O31449 +31450, O31450 +31451, O31451 +31452, O31452 +31453, O31453 +31454, O31454 +31455, O31455 +31456, O31456 +31457, O31457 +31458, O31458 +31459, O31459 +31460, O31460 +31461, O31461 +31462, O31462 +31463, O31463 +31464, O31464 +31465, O31465 +31466, O31466 +31467, O31467 +31468, O31468 +31469, O31469 +31470, O31470 +31471, O31471 +31472, O31472 +31473, O31473 +31474, O31474 +31475, O31475 +31476, O31476 +31477, O31477 +31478, O31478 +31479, O31479 +31480, O31480 +31481, O31481 +31482, O31482 +31483, O31483 +31484, O31484 +31485, O31485 +31486, O31486 +31487, O31487 +31488, O31488 +31489, O31489 +31490, O31490 +31491, O31491 +31492, O31492 +31493, O31493 +31494, O31494 +31495, O31495 +31496, O31496 +31497, O31497 +31498, O31498 +31499, O31499 +31500, O31500 +31501, O31501 +31502, O31502 +31503, O31503 +31504, O31504 +31505, O31505 +31506, O31506 +31507, O31507 +31508, O31508 +31509, O31509 +31510, O31510 +31511, O31511 +31512, O31512 +31513, O31513 +31514, O31514 +31515, O31515 +31516, O31516 +31517, O31517 +31518, O31518 +31519, O31519 +31520, O31520 +31521, O31521 +31522, O31522 +31523, O31523 +31524, O31524 +31525, O31525 +31526, O31526 +31527, O31527 +31528, O31528 +31529, O31529 +31530, O31530 +31531, O31531 +31532, O31532 +31533, O31533 +31534, O31534 +31535, O31535 +31536, O31536 +31537, O31537 +31538, O31538 +31539, O31539 +31540, O31540 +31541, O31541 +31542, O31542 +31543, O31543 +31544, O31544 +31545, O31545 +31546, O31546 +31547, O31547 +31548, O31548 +31549, O31549 +31550, O31550 +31551, O31551 +31552, O31552 +31553, O31553 +31554, O31554 +31555, O31555 +31556, O31556 +31557, O31557 +31558, O31558 +31559, O31559 +31560, O31560 +31561, O31561 +31562, O31562 +31563, O31563 +31564, O31564 +31565, O31565 +31566, O31566 +31567, O31567 +31568, O31568 +31569, O31569 +31570, O31570 +31571, O31571 +31572, O31572 +31573, O31573 +31574, O31574 +31575, O31575 +31576, O31576 +31577, O31577 +31578, O31578 +31579, O31579 +31580, O31580 +31581, O31581 +31582, O31582 +31583, O31583 +31584, O31584 +31585, O31585 +31586, O31586 +31587, O31587 +31588, O31588 +31589, O31589 +31590, O31590 +31591, O31591 +31592, O31592 +31593, O31593 +31594, O31594 +31595, O31595 +31596, O31596 +31597, O31597 +31598, O31598 +31599, O31599 +31600, O31600 +31601, O31601 +31602, O31602 +31603, O31603 +31604, O31604 +31605, O31605 +31606, O31606 +31607, O31607 +31608, O31608 +31609, O31609 +31610, O31610 +31611, O31611 +31612, O31612 +31613, O31613 +31614, O31614 +31615, O31615 +31616, O31616 +31617, O31617 +31618, O31618 +31619, O31619 +31620, O31620 +31621, O31621 +31622, O31622 +31623, O31623 +31624, O31624 +31625, O31625 +31626, O31626 +31627, O31627 +31628, O31628 +31629, O31629 +31630, O31630 +31631, O31631 +31632, O31632 +31633, O31633 +31634, O31634 +31635, O31635 +31636, O31636 +31637, O31637 +31638, O31638 +31639, O31639 +31640, O31640 +31641, O31641 +31642, O31642 +31643, O31643 +31644, O31644 +31645, O31645 +31646, O31646 +31647, O31647 +31648, O31648 +31649, O31649 +31650, O31650 +31651, O31651 +31652, O31652 +31653, O31653 +31654, O31654 +31655, O31655 +31656, O31656 +31657, O31657 +31658, O31658 +31659, O31659 +31660, O31660 +31661, O31661 +31662, O31662 +31663, O31663 +31664, O31664 +31665, O31665 +31666, O31666 +31667, O31667 +31668, O31668 +31669, O31669 +31670, O31670 +31671, O31671 +31672, O31672 +31673, O31673 +31674, O31674 +31675, O31675 +31676, O31676 +31677, O31677 +31678, O31678 +31679, O31679 +31680, O31680 +31681, O31681 +31682, O31682 +31683, O31683 +31684, O31684 +31685, O31685 +31686, O31686 +31687, O31687 +31688, O31688 +31689, O31689 +31690, O31690 +31691, O31691 +31692, O31692 +31693, O31693 +31694, O31694 +31695, O31695 +31696, O31696 +31697, O31697 +31698, O31698 +31699, O31699 +31700, O31700 +31701, O31701 +31702, O31702 +31703, O31703 +31704, O31704 +31705, O31705 +31706, O31706 +31707, O31707 +31708, O31708 +31709, O31709 +31710, O31710 +31711, O31711 +31712, O31712 +31713, O31713 +31714, O31714 +31715, O31715 +31716, O31716 +31717, O31717 +31718, O31718 +31719, O31719 +31720, O31720 +31721, O31721 +31722, O31722 +31723, O31723 +31724, O31724 +31725, O31725 +31726, O31726 +31727, O31727 +31728, O31728 +31729, O31729 +31730, O31730 +31731, O31731 +31732, O31732 +31733, O31733 +31734, O31734 +31735, O31735 +31736, O31736 +31737, O31737 +31738, O31738 +31739, O31739 +31740, O31740 +31741, O31741 +31742, O31742 +31743, O31743 +31744, O31744 +31745, O31745 +31746, O31746 +31747, O31747 +31748, O31748 +31749, O31749 +31750, O31750 +31751, O31751 +31752, O31752 +31753, O31753 +31754, O31754 +31755, O31755 +31756, O31756 +31757, O31757 +31758, O31758 +31759, O31759 +31760, O31760 +31761, O31761 +31762, O31762 +31763, O31763 +31764, O31764 +31765, O31765 +31766, O31766 +31767, O31767 +31768, O31768 +31769, O31769 +31770, O31770 +31771, O31771 +31772, O31772 +31773, O31773 +31774, O31774 +31775, O31775 +31776, O31776 +31777, O31777 +31778, O31778 +31779, O31779 +31780, O31780 +31781, O31781 +31782, O31782 +31783, O31783 +31784, O31784 +31785, O31785 +31786, O31786 +31787, O31787 +31788, O31788 +31789, O31789 +31790, O31790 +31791, O31791 +31792, O31792 +31793, O31793 +31794, O31794 +31795, O31795 +31796, O31796 +31797, O31797 +31798, O31798 +31799, O31799 +31800, O31800 +31801, O31801 +31802, O31802 +31803, O31803 +31804, O31804 +31805, O31805 +31806, O31806 +31807, O31807 +31808, O31808 +31809, O31809 +31810, O31810 +31811, O31811 +31812, O31812 +31813, O31813 +31814, O31814 +31815, O31815 +31816, O31816 +31817, O31817 +31818, O31818 +31819, O31819 +31820, O31820 +31821, O31821 +31822, O31822 +31823, O31823 +31824, O31824 +31825, O31825 +31826, O31826 +31827, O31827 +31828, O31828 +31829, O31829 +31830, O31830 +31831, O31831 +31832, O31832 +31833, O31833 +31834, O31834 +31835, O31835 +31836, O31836 +31837, O31837 +31838, O31838 +31839, O31839 +31840, O31840 +31841, O31841 +31842, O31842 +31843, O31843 +31844, O31844 +31845, O31845 +31846, O31846 +31847, O31847 +31848, O31848 +31849, O31849 +31850, O31850 +31851, O31851 +31852, O31852 +31853, O31853 +31854, O31854 +31855, O31855 +31856, O31856 +31857, O31857 +31858, O31858 +31859, O31859 +31860, O31860 +31861, O31861 +31862, O31862 +31863, O31863 +31864, O31864 +31865, O31865 +31866, O31866 +31867, O31867 +31868, O31868 +31869, O31869 +31870, O31870 +31871, O31871 +31872, O31872 +31873, O31873 +31874, O31874 +31875, O31875 +31876, O31876 +31877, O31877 +31878, O31878 +31879, O31879 +31880, O31880 +31881, O31881 +31882, O31882 +31883, O31883 +31884, O31884 +31885, O31885 +31886, O31886 +31887, O31887 +31888, O31888 +31889, O31889 +31890, O31890 +31891, O31891 +31892, O31892 +31893, O31893 +31894, O31894 +31895, O31895 +31896, O31896 +31897, O31897 +31898, O31898 +31899, O31899 +31900, O31900 +31901, O31901 +31902, O31902 +31903, O31903 +31904, O31904 +31905, O31905 +31906, O31906 +31907, O31907 +31908, O31908 +31909, O31909 +31910, O31910 +31911, O31911 +31912, O31912 +31913, O31913 +31914, O31914 +31915, O31915 +31916, O31916 +31917, O31917 +31918, O31918 +31919, O31919 +31920, O31920 +31921, O31921 +31922, O31922 +31923, O31923 +31924, O31924 +31925, O31925 +31926, O31926 +31927, O31927 +31928, O31928 +31929, O31929 +31930, O31930 +31931, O31931 +31932, O31932 +31933, O31933 +31934, O31934 +31935, O31935 +31936, O31936 +31937, O31937 +31938, O31938 +31939, O31939 +31940, O31940 +31941, O31941 +31942, O31942 +31943, O31943 +31944, O31944 +31945, O31945 +31946, O31946 +31947, O31947 +31948, O31948 +31949, O31949 +31950, O31950 +31951, O31951 +31952, O31952 +31953, O31953 +31954, O31954 +31955, O31955 +31956, O31956 +31957, O31957 +31958, O31958 +31959, O31959 +31960, O31960 +31961, O31961 +31962, O31962 +31963, O31963 +31964, O31964 +31965, O31965 +31966, O31966 +31967, O31967 +31968, O31968 +31969, O31969 +31970, O31970 +31971, O31971 +31972, O31972 +31973, O31973 +31974, O31974 +31975, O31975 +31976, O31976 +31977, O31977 +31978, O31978 +31979, O31979 +31980, O31980 +31981, O31981 +31982, O31982 +31983, O31983 +31984, O31984 +31985, O31985 +31986, O31986 +31987, O31987 +31988, O31988 +31989, O31989 +31990, O31990 +31991, O31991 +31992, O31992 +31993, O31993 +31994, O31994 +31995, O31995 +31996, O31996 +31997, O31997 +31998, O31998 +31999, O31999 +32000, O32000 +32001, O32001 +32002, O32002 +32003, O32003 +32004, O32004 +32005, O32005 +32006, O32006 +32007, O32007 +32008, O32008 +32009, O32009 +32010, O32010 +32011, O32011 +32012, O32012 +32013, O32013 +32014, O32014 +32015, O32015 +32016, O32016 +32017, O32017 +32018, O32018 +32019, O32019 +32020, O32020 +32021, O32021 +32022, O32022 +32023, O32023 +32024, O32024 +32025, O32025 +32026, O32026 +32027, O32027 +32028, O32028 +32029, O32029 +32030, O32030 +32031, O32031 +32032, O32032 +32033, O32033 +32034, O32034 +32035, O32035 +32036, O32036 +32037, O32037 +32038, O32038 +32039, O32039 +32040, O32040 +32041, O32041 +32042, O32042 +32043, O32043 +32044, O32044 +32045, O32045 +32046, O32046 +32047, O32047 +32048, O32048 +32049, O32049 +32050, O32050 +32051, O32051 +32052, O32052 +32053, O32053 +32054, O32054 +32055, O32055 +32056, O32056 +32057, O32057 +32058, O32058 +32059, O32059 +32060, O32060 +32061, O32061 +32062, O32062 +32063, O32063 +32064, O32064 +32065, O32065 +32066, O32066 +32067, O32067 +32068, O32068 +32069, O32069 +32070, O32070 +32071, O32071 +32072, O32072 +32073, O32073 +32074, O32074 +32075, O32075 +32076, O32076 +32077, O32077 +32078, O32078 +32079, O32079 +32080, O32080 +32081, O32081 +32082, O32082 +32083, O32083 +32084, O32084 +32085, O32085 +32086, O32086 +32087, O32087 +32088, O32088 +32089, O32089 +32090, O32090 +32091, O32091 +32092, O32092 +32093, O32093 +32094, O32094 +32095, O32095 +32096, O32096 +32097, O32097 +32098, O32098 +32099, O32099 +32100, O32100 +32101, O32101 +32102, O32102 +32103, O32103 +32104, O32104 +32105, O32105 +32106, O32106 +32107, O32107 +32108, O32108 +32109, O32109 +32110, O32110 +32111, O32111 +32112, O32112 +32113, O32113 +32114, O32114 +32115, O32115 +32116, O32116 +32117, O32117 +32118, O32118 +32119, O32119 +32120, O32120 +32121, O32121 +32122, O32122 +32123, O32123 +32124, O32124 +32125, O32125 +32126, O32126 +32127, O32127 +32128, O32128 +32129, O32129 +32130, O32130 +32131, O32131 +32132, O32132 +32133, O32133 +32134, O32134 +32135, O32135 +32136, O32136 +32137, O32137 +32138, O32138 +32139, O32139 +32140, O32140 +32141, O32141 +32142, O32142 +32143, O32143 +32144, O32144 +32145, O32145 +32146, O32146 +32147, O32147 +32148, O32148 +32149, O32149 +32150, O32150 +32151, O32151 +32152, O32152 +32153, O32153 +32154, O32154 +32155, O32155 +32156, O32156 +32157, O32157 +32158, O32158 +32159, O32159 +32160, O32160 +32161, O32161 +32162, O32162 +32163, O32163 +32164, O32164 +32165, O32165 +32166, O32166 +32167, O32167 +32168, O32168 +32169, O32169 +32170, O32170 +32171, O32171 +32172, O32172 +32173, O32173 +32174, O32174 +32175, O32175 +32176, O32176 +32177, O32177 +32178, O32178 +32179, O32179 +32180, O32180 +32181, O32181 +32182, O32182 +32183, O32183 +32184, O32184 +32185, O32185 +32186, O32186 +32187, O32187 +32188, O32188 +32189, O32189 +32190, O32190 +32191, O32191 +32192, O32192 +32193, O32193 +32194, O32194 +32195, O32195 +32196, O32196 +32197, O32197 +32198, O32198 +32199, O32199 +32200, O32200 +32201, O32201 +32202, O32202 +32203, O32203 +32204, O32204 +32205, O32205 +32206, O32206 +32207, O32207 +32208, O32208 +32209, O32209 +32210, O32210 +32211, O32211 +32212, O32212 +32213, O32213 +32214, O32214 +32215, O32215 +32216, O32216 +32217, O32217 +32218, O32218 +32219, O32219 +32220, O32220 +32221, O32221 +32222, O32222 +32223, O32223 +32224, O32224 +32225, O32225 +32226, O32226 +32227, O32227 +32228, O32228 +32229, O32229 +32230, O32230 +32231, O32231 +32232, O32232 +32233, O32233 +32234, O32234 +32235, O32235 +32236, O32236 +32237, O32237 +32238, O32238 +32239, O32239 +32240, O32240 +32241, O32241 +32242, O32242 +32243, O32243 +32244, O32244 +32245, O32245 +32246, O32246 +32247, O32247 +32248, O32248 +32249, O32249 +32250, O32250 +32251, O32251 +32252, O32252 +32253, O32253 +32254, O32254 +32255, O32255 +32256, O32256 +32257, O32257 +32258, O32258 +32259, O32259 +32260, O32260 +32261, O32261 +32262, O32262 +32263, O32263 +32264, O32264 +32265, O32265 +32266, O32266 +32267, O32267 +32268, O32268 +32269, O32269 +32270, O32270 +32271, O32271 +32272, O32272 +32273, O32273 +32274, O32274 +32275, O32275 +32276, O32276 +32277, O32277 +32278, O32278 +32279, O32279 +32280, O32280 +32281, O32281 +32282, O32282 +32283, O32283 +32284, O32284 +32285, O32285 +32286, O32286 +32287, O32287 +32288, O32288 +32289, O32289 +32290, O32290 +32291, O32291 +32292, O32292 +32293, O32293 +32294, O32294 +32295, O32295 +32296, O32296 +32297, O32297 +32298, O32298 +32299, O32299 +32300, O32300 +32301, O32301 +32302, O32302 +32303, O32303 +32304, O32304 +32305, O32305 +32306, O32306 +32307, O32307 +32308, O32308 +32309, O32309 +32310, O32310 +32311, O32311 +32312, O32312 +32313, O32313 +32314, O32314 +32315, O32315 +32316, O32316 +32317, O32317 +32318, O32318 +32319, O32319 +32320, O32320 +32321, O32321 +32322, O32322 +32323, O32323 +32324, O32324 +32325, O32325 +32326, O32326 +32327, O32327 +32328, O32328 +32329, O32329 +32330, O32330 +32331, O32331 +32332, O32332 +32333, O32333 +32334, O32334 +32335, O32335 +32336, O32336 +32337, O32337 +32338, O32338 +32339, O32339 +32340, O32340 +32341, O32341 +32342, O32342 +32343, O32343 +32344, O32344 +32345, O32345 +32346, O32346 +32347, O32347 +32348, O32348 +32349, O32349 +32350, O32350 +32351, O32351 +32352, O32352 +32353, O32353 +32354, O32354 +32355, O32355 +32356, O32356 +32357, O32357 +32358, O32358 +32359, O32359 +32360, O32360 +32361, O32361 +32362, O32362 +32363, O32363 +32364, O32364 +32365, O32365 +32366, O32366 +32367, O32367 +32368, O32368 +32369, O32369 +32370, O32370 +32371, O32371 +32372, O32372 +32373, O32373 +32374, O32374 +32375, O32375 +32376, O32376 +32377, O32377 +32378, O32378 +32379, O32379 +32380, O32380 +32381, O32381 +32382, O32382 +32383, O32383 +32384, O32384 +32385, O32385 +32386, O32386 +32387, O32387 +32388, O32388 +32389, O32389 +32390, O32390 +32391, O32391 +32392, O32392 +32393, O32393 +32394, O32394 +32395, O32395 +32396, O32396 +32397, O32397 +32398, O32398 +32399, O32399 +32400, O32400 +32401, O32401 +32402, O32402 +32403, O32403 +32404, O32404 +32405, O32405 +32406, O32406 +32407, O32407 +32408, O32408 +32409, O32409 +32410, O32410 +32411, O32411 +32412, O32412 +32413, O32413 +32414, O32414 +32415, O32415 +32416, O32416 +32417, O32417 +32418, O32418 +32419, O32419 +32420, O32420 +32421, O32421 +32422, O32422 +32423, O32423 +32424, O32424 +32425, O32425 +32426, O32426 +32427, O32427 +32428, O32428 +32429, O32429 +32430, O32430 +32431, O32431 +32432, O32432 +32433, O32433 +32434, O32434 +32435, O32435 +32436, O32436 +32437, O32437 +32438, O32438 +32439, O32439 +32440, O32440 +32441, O32441 +32442, O32442 +32443, O32443 +32444, O32444 +32445, O32445 +32446, O32446 +32447, O32447 +32448, O32448 +32449, O32449 +32450, O32450 +32451, O32451 +32452, O32452 +32453, O32453 +32454, O32454 +32455, O32455 +32456, O32456 +32457, O32457 +32458, O32458 +32459, O32459 +32460, O32460 +32461, O32461 +32462, O32462 +32463, O32463 +32464, O32464 +32465, O32465 +32466, O32466 +32467, O32467 +32468, O32468 +32469, O32469 +32470, O32470 +32471, O32471 +32472, O32472 +32473, O32473 +32474, O32474 +32475, O32475 +32476, O32476 +32477, O32477 +32478, O32478 +32479, O32479 +32480, O32480 +32481, O32481 +32482, O32482 +32483, O32483 +32484, O32484 +32485, O32485 +32486, O32486 +32487, O32487 +32488, O32488 +32489, O32489 +32490, O32490 +32491, O32491 +32492, O32492 +32493, O32493 +32494, O32494 +32495, O32495 +32496, O32496 +32497, O32497 +32498, O32498 +32499, O32499 +32500, O32500 +32501, O32501 +32502, O32502 +32503, O32503 +32504, O32504 +32505, O32505 +32506, O32506 +32507, O32507 +32508, O32508 +32509, O32509 +32510, O32510 +32511, O32511 +32512, O32512 +32513, O32513 +32514, O32514 +32515, O32515 +32516, O32516 +32517, O32517 +32518, O32518 +32519, O32519 +32520, O32520 +32521, O32521 +32522, O32522 +32523, O32523 +32524, O32524 +32525, O32525 +32526, O32526 +32527, O32527 +32528, O32528 +32529, O32529 +32530, O32530 +32531, O32531 +32532, O32532 +32533, O32533 +32534, O32534 +32535, O32535 +32536, O32536 +32537, O32537 +32538, O32538 +32539, O32539 +32540, O32540 +32541, O32541 +32542, O32542 +32543, O32543 +32544, O32544 +32545, O32545 +32546, O32546 +32547, O32547 +32548, O32548 +32549, O32549 +32550, O32550 +32551, O32551 +32552, O32552 +32553, O32553 +32554, O32554 +32555, O32555 +32556, O32556 +32557, O32557 +32558, O32558 +32559, O32559 +32560, O32560 +32561, O32561 +32562, O32562 +32563, O32563 +32564, O32564 +32565, O32565 +32566, O32566 +32567, O32567 +32568, O32568 +32569, O32569 +32570, O32570 +32571, O32571 +32572, O32572 +32573, O32573 +32574, O32574 +32575, O32575 +32576, O32576 +32577, O32577 +32578, O32578 +32579, O32579 +32580, O32580 +32581, O32581 +32582, O32582 +32583, O32583 +32584, O32584 +32585, O32585 +32586, O32586 +32587, O32587 +32588, O32588 +32589, O32589 +32590, O32590 +32591, O32591 +32592, O32592 +32593, O32593 +32594, O32594 +32595, O32595 +32596, O32596 +32597, O32597 +32598, O32598 +32599, O32599 +32600, O32600 +32601, O32601 +32602, O32602 +32603, O32603 +32604, O32604 +32605, O32605 +32606, O32606 +32607, O32607 +32608, O32608 +32609, O32609 +32610, O32610 +32611, O32611 +32612, O32612 +32613, O32613 +32614, O32614 +32615, O32615 +32616, O32616 +32617, O32617 +32618, O32618 +32619, O32619 +32620, O32620 +32621, O32621 +32622, O32622 +32623, O32623 +32624, O32624 +32625, O32625 +32626, O32626 +32627, O32627 +32628, O32628 +32629, O32629 +32630, O32630 +32631, O32631 +32632, O32632 +32633, O32633 +32634, O32634 +32635, O32635 +32636, O32636 +32637, O32637 +32638, O32638 +32639, O32639 +32640, O32640 +32641, O32641 +32642, O32642 +32643, O32643 +32644, O32644 +32645, O32645 +32646, O32646 +32647, O32647 +32648, O32648 +32649, O32649 +32650, O32650 +32651, O32651 +32652, O32652 +32653, O32653 +32654, O32654 +32655, O32655 +32656, O32656 +32657, O32657 +32658, O32658 +32659, O32659 +32660, O32660 +32661, O32661 +32662, O32662 +32663, O32663 +32664, O32664 +32665, O32665 +32666, O32666 +32667, O32667 +32668, O32668 +32669, O32669 +32670, O32670 +32671, O32671 +32672, O32672 +32673, O32673 +32674, O32674 +32675, O32675 +32676, O32676 +32677, O32677 +32678, O32678 +32679, O32679 +32680, O32680 +32681, O32681 +32682, O32682 +32683, O32683 +32684, O32684 +32685, O32685 +32686, O32686 +32687, O32687 +32688, O32688 +32689, O32689 +32690, O32690 +32691, O32691 +32692, O32692 +32693, O32693 +32694, O32694 +32695, O32695 +32696, O32696 +32697, O32697 +32698, O32698 +32699, O32699 +32700, O32700 +32701, O32701 +32702, O32702 +32703, O32703 +32704, O32704 +32705, O32705 +32706, O32706 +32707, O32707 +32708, O32708 +32709, O32709 +32710, O32710 +32711, O32711 +32712, O32712 +32713, O32713 +32714, O32714 +32715, O32715 +32716, O32716 +32717, O32717 +32718, O32718 +32719, O32719 +32720, O32720 +32721, O32721 +32722, O32722 +32723, O32723 +32724, O32724 +32725, O32725 +32726, O32726 +32727, O32727 +32728, O32728 +32729, O32729 +32730, O32730 +32731, O32731 +32732, O32732 +32733, O32733 +32734, O32734 +32735, O32735 +32736, O32736 +32737, O32737 +32738, O32738 +32739, O32739 +32740, O32740 +32741, O32741 +32742, O32742 +32743, O32743 +32744, O32744 +32745, O32745 +32746, O32746 +32747, O32747 +32748, O32748 +32749, O32749 +32750, O32750 +32751, O32751 +32752, O32752 +32753, O32753 +32754, O32754 +32755, O32755 +32756, O32756 +32757, O32757 +32758, O32758 +32759, O32759 +32760, O32760 +32761, O32761 +32762, O32762 +32763, O32763 +32764, O32764 +32765, O32765 +32766, O32766 +32767, O32767 +32768, O32768 +32769, O32769 +32770, O32770 +32771, O32771 +32772, O32772 +32773, O32773 +32774, O32774 +32775, O32775 +32776, O32776 +32777, O32777 +32778, O32778 +32779, O32779 +32780, O32780 +32781, O32781 +32782, O32782 +32783, O32783 +32784, O32784 +32785, O32785 +32786, O32786 +32787, O32787 +32788, O32788 +32789, O32789 +32790, O32790 +32791, O32791 +32792, O32792 +32793, O32793 +32794, O32794 +32795, O32795 +32796, O32796 +32797, O32797 +32798, O32798 +32799, O32799 +32800, O32800 +32801, O32801 +32802, O32802 +32803, O32803 +32804, O32804 +32805, O32805 +32806, O32806 +32807, O32807 +32808, O32808 +32809, O32809 +32810, O32810 +32811, O32811 +32812, O32812 +32813, O32813 +32814, O32814 +32815, O32815 +32816, O32816 +32817, O32817 +32818, O32818 +32819, O32819 +32820, O32820 +32821, O32821 +32822, O32822 +32823, O32823 +32824, O32824 +32825, O32825 +32826, O32826 +32827, O32827 +32828, O32828 +32829, O32829 +32830, O32830 +32831, O32831 +32832, O32832 +32833, O32833 +32834, O32834 +32835, O32835 +32836, O32836 +32837, O32837 +32838, O32838 +32839, O32839 +32840, O32840 +32841, O32841 +32842, O32842 +32843, O32843 +32844, O32844 +32845, O32845 +32846, O32846 +32847, O32847 +32848, O32848 +32849, O32849 +32850, O32850 +32851, O32851 +32852, O32852 +32853, O32853 +32854, O32854 +32855, O32855 +32856, O32856 +32857, O32857 +32858, O32858 +32859, O32859 +32860, O32860 +32861, O32861 +32862, O32862 +32863, O32863 +32864, O32864 +32865, O32865 +32866, O32866 +32867, O32867 +32868, O32868 +32869, O32869 +32870, O32870 +32871, O32871 +32872, O32872 +32873, O32873 +32874, O32874 +32875, O32875 +32876, O32876 +32877, O32877 +32878, O32878 +32879, O32879 +32880, O32880 +32881, O32881 +32882, O32882 +32883, O32883 +32884, O32884 +32885, O32885 +32886, O32886 +32887, O32887 +32888, O32888 +32889, O32889 +32890, O32890 +32891, O32891 +32892, O32892 +32893, O32893 +32894, O32894 +32895, O32895 +32896, O32896 +32897, O32897 +32898, O32898 +32899, O32899 +32900, O32900 +32901, O32901 +32902, O32902 +32903, O32903 +32904, O32904 +32905, O32905 +32906, O32906 +32907, O32907 +32908, O32908 +32909, O32909 +32910, O32910 +32911, O32911 +32912, O32912 +32913, O32913 +32914, O32914 +32915, O32915 +32916, O32916 +32917, O32917 +32918, O32918 +32919, O32919 +32920, O32920 +32921, O32921 +32922, O32922 +32923, O32923 +32924, O32924 +32925, O32925 +32926, O32926 +32927, O32927 +32928, O32928 +32929, O32929 +32930, O32930 +32931, O32931 +32932, O32932 +32933, O32933 +32934, O32934 +32935, O32935 +32936, O32936 +32937, O32937 +32938, O32938 +32939, O32939 +32940, O32940 +32941, O32941 +32942, O32942 +32943, O32943 +32944, O32944 +32945, O32945 +32946, O32946 +32947, O32947 +32948, O32948 +32949, O32949 +32950, O32950 +32951, O32951 +32952, O32952 +32953, O32953 +32954, O32954 +32955, O32955 +32956, O32956 +32957, O32957 +32958, O32958 +32959, O32959 +32960, O32960 +32961, O32961 +32962, O32962 +32963, O32963 +32964, O32964 +32965, O32965 +32966, O32966 +32967, O32967 +32968, O32968 +32969, O32969 +32970, O32970 +32971, O32971 +32972, O32972 +32973, O32973 +32974, O32974 +32975, O32975 +32976, O32976 +32977, O32977 +32978, O32978 +32979, O32979 +32980, O32980 +32981, O32981 +32982, O32982 +32983, O32983 +32984, O32984 +32985, O32985 +32986, O32986 +32987, O32987 +32988, O32988 +32989, O32989 +32990, O32990 +32991, O32991 +32992, O32992 +32993, O32993 +32994, O32994 +32995, O32995 +32996, O32996 +32997, O32997 +32998, O32998 +32999, O32999 +33000, O33000 +33001, O33001 +33002, O33002 +33003, O33003 +33004, O33004 +33005, O33005 +33006, O33006 +33007, O33007 +33008, O33008 +33009, O33009 +33010, O33010 +33011, O33011 +33012, O33012 +33013, O33013 +33014, O33014 +33015, O33015 +33016, O33016 +33017, O33017 +33018, O33018 +33019, O33019 +33020, O33020 +33021, O33021 +33022, O33022 +33023, O33023 +33024, O33024 +33025, O33025 +33026, O33026 +33027, O33027 +33028, O33028 +33029, O33029 +33030, O33030 +33031, O33031 +33032, O33032 +33033, O33033 +33034, O33034 +33035, O33035 +33036, O33036 +33037, O33037 +33038, O33038 +33039, O33039 +33040, O33040 +33041, O33041 +33042, O33042 +33043, O33043 +33044, O33044 +33045, O33045 +33046, O33046 +33047, O33047 +33048, O33048 +33049, O33049 +33050, O33050 +33051, O33051 +33052, O33052 +33053, O33053 +33054, O33054 +33055, O33055 +33056, O33056 +33057, O33057 +33058, O33058 +33059, O33059 +33060, O33060 +33061, O33061 +33062, O33062 +33063, O33063 +33064, O33064 +33065, O33065 +33066, O33066 +33067, O33067 +33068, O33068 +33069, O33069 +33070, O33070 +33071, O33071 +33072, O33072 +33073, O33073 +33074, O33074 +33075, O33075 +33076, O33076 +33077, O33077 +33078, O33078 +33079, O33079 +33080, O33080 +33081, O33081 +33082, O33082 +33083, O33083 +33084, O33084 +33085, O33085 +33086, O33086 +33087, O33087 +33088, O33088 +33089, O33089 +33090, O33090 +33091, O33091 +33092, O33092 +33093, O33093 +33094, O33094 +33095, O33095 +33096, O33096 +33097, O33097 +33098, O33098 +33099, O33099 +33100, O33100 +33101, O33101 +33102, O33102 +33103, O33103 +33104, O33104 +33105, O33105 +33106, O33106 +33107, O33107 +33108, O33108 +33109, O33109 +33110, O33110 +33111, O33111 +33112, O33112 +33113, O33113 +33114, O33114 +33115, O33115 +33116, O33116 +33117, O33117 +33118, O33118 +33119, O33119 +33120, O33120 +33121, O33121 +33122, O33122 +33123, O33123 +33124, O33124 +33125, O33125 +33126, O33126 +33127, O33127 +33128, O33128 +33129, O33129 +33130, O33130 +33131, O33131 +33132, O33132 +33133, O33133 +33134, O33134 +33135, O33135 +33136, O33136 +33137, O33137 +33138, O33138 +33139, O33139 +33140, O33140 +33141, O33141 +33142, O33142 +33143, O33143 +33144, O33144 +33145, O33145 +33146, O33146 +33147, O33147 +33148, O33148 +33149, O33149 +33150, O33150 +33151, O33151 +33152, O33152 +33153, O33153 +33154, O33154 +33155, O33155 +33156, O33156 +33157, O33157 +33158, O33158 +33159, O33159 +33160, O33160 +33161, O33161 +33162, O33162 +33163, O33163 +33164, O33164 +33165, O33165 +33166, O33166 +33167, O33167 +33168, O33168 +33169, O33169 +33170, O33170 +33171, O33171 +33172, O33172 +33173, O33173 +33174, O33174 +33175, O33175 +33176, O33176 +33177, O33177 +33178, O33178 +33179, O33179 +33180, O33180 +33181, O33181 +33182, O33182 +33183, O33183 +33184, O33184 +33185, O33185 +33186, O33186 +33187, O33187 +33188, O33188 +33189, O33189 +33190, O33190 +33191, O33191 +33192, O33192 +33193, O33193 +33194, O33194 +33195, O33195 +33196, O33196 +33197, O33197 +33198, O33198 +33199, O33199 +33200, O33200 +33201, O33201 +33202, O33202 +33203, O33203 +33204, O33204 +33205, O33205 +33206, O33206 +33207, O33207 +33208, O33208 +33209, O33209 +33210, O33210 +33211, O33211 +33212, O33212 +33213, O33213 +33214, O33214 +33215, O33215 +33216, O33216 +33217, O33217 +33218, O33218 +33219, O33219 +33220, O33220 +33221, O33221 +33222, O33222 +33223, O33223 +33224, O33224 +33225, O33225 +33226, O33226 +33227, O33227 +33228, O33228 +33229, O33229 +33230, O33230 +33231, O33231 +33232, O33232 +33233, O33233 +33234, O33234 +33235, O33235 +33236, O33236 +33237, O33237 +33238, O33238 +33239, O33239 +33240, O33240 +33241, O33241 +33242, O33242 +33243, O33243 +33244, O33244 +33245, O33245 +33246, O33246 +33247, O33247 +33248, O33248 +33249, O33249 +33250, O33250 +33251, O33251 +33252, O33252 +33253, O33253 +33254, O33254 +33255, O33255 +33256, O33256 +33257, O33257 +33258, O33258 +33259, O33259 +33260, O33260 +33261, O33261 +33262, O33262 +33263, O33263 +33264, O33264 +33265, O33265 +33266, O33266 +33267, O33267 +33268, O33268 +33269, O33269 +33270, O33270 +33271, O33271 +33272, O33272 +33273, O33273 +33274, O33274 +33275, O33275 +33276, O33276 +33277, O33277 +33278, O33278 +33279, O33279 +33280, O33280 +33281, O33281 +33282, O33282 +33283, O33283 +33284, O33284 +33285, O33285 +33286, O33286 +33287, O33287 +33288, O33288 +33289, O33289 +33290, O33290 +33291, O33291 +33292, O33292 +33293, O33293 +33294, O33294 +33295, O33295 +33296, O33296 +33297, O33297 +33298, O33298 +33299, O33299 +33300, O33300 +33301, O33301 +33302, O33302 +33303, O33303 +33304, O33304 +33305, O33305 +33306, O33306 +33307, O33307 +33308, O33308 +33309, O33309 +33310, O33310 +33311, O33311 +33312, O33312 +33313, O33313 +33314, O33314 +33315, O33315 +33316, O33316 +33317, O33317 +33318, O33318 +33319, O33319 +33320, O33320 +33321, O33321 +33322, O33322 +33323, O33323 +33324, O33324 +33325, O33325 +33326, O33326 +33327, O33327 +33328, O33328 +33329, O33329 +33330, O33330 +33331, O33331 +33332, O33332 +33333, O33333 +33334, O33334 +33335, O33335 +33336, O33336 +33337, O33337 +33338, O33338 +33339, O33339 +33340, O33340 +33341, O33341 +33342, O33342 +33343, O33343 +33344, O33344 +33345, O33345 +33346, O33346 +33347, O33347 +33348, O33348 +33349, O33349 +33350, O33350 +33351, O33351 +33352, O33352 +33353, O33353 +33354, O33354 +33355, O33355 +33356, O33356 +33357, O33357 +33358, O33358 +33359, O33359 +33360, O33360 +33361, O33361 +33362, O33362 +33363, O33363 +33364, O33364 +33365, O33365 +33366, O33366 +33367, O33367 +33368, O33368 +33369, O33369 +33370, O33370 +33371, O33371 +33372, O33372 +33373, O33373 +33374, O33374 +33375, O33375 +33376, O33376 +33377, O33377 +33378, O33378 +33379, O33379 +33380, O33380 +33381, O33381 +33382, O33382 +33383, O33383 +33384, O33384 +33385, O33385 +33386, O33386 +33387, O33387 +33388, O33388 +33389, O33389 +33390, O33390 +33391, O33391 +33392, O33392 +33393, O33393 +33394, O33394 +33395, O33395 +33396, O33396 +33397, O33397 +33398, O33398 +33399, O33399 +33400, O33400 +33401, O33401 +33402, O33402 +33403, O33403 +33404, O33404 +33405, O33405 +33406, O33406 +33407, O33407 +33408, O33408 +33409, O33409 +33410, O33410 +33411, O33411 +33412, O33412 +33413, O33413 +33414, O33414 +33415, O33415 +33416, O33416 +33417, O33417 +33418, O33418 +33419, O33419 +33420, O33420 +33421, O33421 +33422, O33422 +33423, O33423 +33424, O33424 +33425, O33425 +33426, O33426 +33427, O33427 +33428, O33428 +33429, O33429 +33430, O33430 +33431, O33431 +33432, O33432 +33433, O33433 +33434, O33434 +33435, O33435 +33436, O33436 +33437, O33437 +33438, O33438 +33439, O33439 +33440, O33440 +33441, O33441 +33442, O33442 +33443, O33443 +33444, O33444 +33445, O33445 +33446, O33446 +33447, O33447 +33448, O33448 +33449, O33449 +33450, O33450 +33451, O33451 +33452, O33452 +33453, O33453 +33454, O33454 +33455, O33455 +33456, O33456 +33457, O33457 +33458, O33458 +33459, O33459 +33460, O33460 +33461, O33461 +33462, O33462 +33463, O33463 +33464, O33464 +33465, O33465 +33466, O33466 +33467, O33467 +33468, O33468 +33469, O33469 +33470, O33470 +33471, O33471 +33472, O33472 +33473, O33473 +33474, O33474 +33475, O33475 +33476, O33476 +33477, O33477 +33478, O33478 +33479, O33479 +33480, O33480 +33481, O33481 +33482, O33482 +33483, O33483 +33484, O33484 +33485, O33485 +33486, O33486 +33487, O33487 +33488, O33488 +33489, O33489 +33490, O33490 +33491, O33491 +33492, O33492 +33493, O33493 +33494, O33494 +33495, O33495 +33496, O33496 +33497, O33497 +33498, O33498 +33499, O33499 +33500, O33500 +33501, O33501 +33502, O33502 +33503, O33503 +33504, O33504 +33505, O33505 +33506, O33506 +33507, O33507 +33508, O33508 +33509, O33509 +33510, O33510 +33511, O33511 +33512, O33512 +33513, O33513 +33514, O33514 +33515, O33515 +33516, O33516 +33517, O33517 +33518, O33518 +33519, O33519 +33520, O33520 +33521, O33521 +33522, O33522 +33523, O33523 +33524, O33524 +33525, O33525 +33526, O33526 +33527, O33527 +33528, O33528 +33529, O33529 +33530, O33530 +33531, O33531 +33532, O33532 +33533, O33533 +33534, O33534 +33535, O33535 +33536, O33536 +33537, O33537 +33538, O33538 +33539, O33539 +33540, O33540 +33541, O33541 +33542, O33542 +33543, O33543 +33544, O33544 +33545, O33545 +33546, O33546 +33547, O33547 +33548, O33548 +33549, O33549 +33550, O33550 +33551, O33551 +33552, O33552 +33553, O33553 +33554, O33554 +33555, O33555 +33556, O33556 +33557, O33557 +33558, O33558 +33559, O33559 +33560, O33560 +33561, O33561 +33562, O33562 +33563, O33563 +33564, O33564 +33565, O33565 +33566, O33566 +33567, O33567 +33568, O33568 +33569, O33569 +33570, O33570 +33571, O33571 +33572, O33572 +33573, O33573 +33574, O33574 +33575, O33575 +33576, O33576 +33577, O33577 +33578, O33578 +33579, O33579 +33580, O33580 +33581, O33581 +33582, O33582 +33583, O33583 +33584, O33584 +33585, O33585 +33586, O33586 +33587, O33587 +33588, O33588 +33589, O33589 +33590, O33590 +33591, O33591 +33592, O33592 +33593, O33593 +33594, O33594 +33595, O33595 +33596, O33596 +33597, O33597 +33598, O33598 +33599, O33599 +33600, O33600 +33601, O33601 +33602, O33602 +33603, O33603 +33604, O33604 +33605, O33605 +33606, O33606 +33607, O33607 +33608, O33608 +33609, O33609 +33610, O33610 +33611, O33611 +33612, O33612 +33613, O33613 +33614, O33614 +33615, O33615 +33616, O33616 +33617, O33617 +33618, O33618 +33619, O33619 +33620, O33620 +33621, O33621 +33622, O33622 +33623, O33623 +33624, O33624 +33625, O33625 +33626, O33626 +33627, O33627 +33628, O33628 +33629, O33629 +33630, O33630 +33631, O33631 +33632, O33632 +33633, O33633 +33634, O33634 +33635, O33635 +33636, O33636 +33637, O33637 +33638, O33638 +33639, O33639 +33640, O33640 +33641, O33641 +33642, O33642 +33643, O33643 +33644, O33644 +33645, O33645 +33646, O33646 +33647, O33647 +33648, O33648 +33649, O33649 +33650, O33650 +33651, O33651 +33652, O33652 +33653, O33653 +33654, O33654 +33655, O33655 +33656, O33656 +33657, O33657 +33658, O33658 +33659, O33659 +33660, O33660 +33661, O33661 +33662, O33662 +33663, O33663 +33664, O33664 +33665, O33665 +33666, O33666 +33667, O33667 +33668, O33668 +33669, O33669 +33670, O33670 +33671, O33671 +33672, O33672 +33673, O33673 +33674, O33674 +33675, O33675 +33676, O33676 +33677, O33677 +33678, O33678 +33679, O33679 +33680, O33680 +33681, O33681 +33682, O33682 +33683, O33683 +33684, O33684 +33685, O33685 +33686, O33686 +33687, O33687 +33688, O33688 +33689, O33689 +33690, O33690 +33691, O33691 +33692, O33692 +33693, O33693 +33694, O33694 +33695, O33695 +33696, O33696 +33697, O33697 +33698, O33698 +33699, O33699 +33700, O33700 +33701, O33701 +33702, O33702 +33703, O33703 +33704, O33704 +33705, O33705 +33706, O33706 +33707, O33707 +33708, O33708 +33709, O33709 +33710, O33710 +33711, O33711 +33712, O33712 +33713, O33713 +33714, O33714 +33715, O33715 +33716, O33716 +33717, O33717 +33718, O33718 +33719, O33719 +33720, O33720 +33721, O33721 +33722, O33722 +33723, O33723 +33724, O33724 +33725, O33725 +33726, O33726 +33727, O33727 +33728, O33728 +33729, O33729 +33730, O33730 +33731, O33731 +33732, O33732 +33733, O33733 +33734, O33734 +33735, O33735 +33736, O33736 +33737, O33737 +33738, O33738 +33739, O33739 +33740, O33740 +33741, O33741 +33742, O33742 +33743, O33743 +33744, O33744 +33745, O33745 +33746, O33746 +33747, O33747 +33748, O33748 +33749, O33749 +33750, O33750 +33751, O33751 +33752, O33752 +33753, O33753 +33754, O33754 +33755, O33755 +33756, O33756 +33757, O33757 +33758, O33758 +33759, O33759 +33760, O33760 +33761, O33761 +33762, O33762 +33763, O33763 +33764, O33764 +33765, O33765 +33766, O33766 +33767, O33767 +33768, O33768 +33769, O33769 +33770, O33770 +33771, O33771 +33772, O33772 +33773, O33773 +33774, O33774 +33775, O33775 +33776, O33776 +33777, O33777 +33778, O33778 +33779, O33779 +33780, O33780 +33781, O33781 +33782, O33782 +33783, O33783 +33784, O33784 +33785, O33785 +33786, O33786 +33787, O33787 +33788, O33788 +33789, O33789 +33790, O33790 +33791, O33791 +33792, O33792 +33793, O33793 +33794, O33794 +33795, O33795 +33796, O33796 +33797, O33797 +33798, O33798 +33799, O33799 +33800, O33800 +33801, O33801 +33802, O33802 +33803, O33803 +33804, O33804 +33805, O33805 +33806, O33806 +33807, O33807 +33808, O33808 +33809, O33809 +33810, O33810 +33811, O33811 +33812, O33812 +33813, O33813 +33814, O33814 +33815, O33815 +33816, O33816 +33817, O33817 +33818, O33818 +33819, O33819 +33820, O33820 +33821, O33821 +33822, O33822 +33823, O33823 +33824, O33824 +33825, O33825 +33826, O33826 +33827, O33827 +33828, O33828 +33829, O33829 +33830, O33830 +33831, O33831 +33832, O33832 +33833, O33833 +33834, O33834 +33835, O33835 +33836, O33836 +33837, O33837 +33838, O33838 +33839, O33839 +33840, O33840 +33841, O33841 +33842, O33842 +33843, O33843 +33844, O33844 +33845, O33845 +33846, O33846 +33847, O33847 +33848, O33848 +33849, O33849 +33850, O33850 +33851, O33851 +33852, O33852 +33853, O33853 +33854, O33854 +33855, O33855 +33856, O33856 +33857, O33857 +33858, O33858 +33859, O33859 +33860, O33860 +33861, O33861 +33862, O33862 +33863, O33863 +33864, O33864 +33865, O33865 +33866, O33866 +33867, O33867 +33868, O33868 +33869, O33869 +33870, O33870 +33871, O33871 +33872, O33872 +33873, O33873 +33874, O33874 +33875, O33875 +33876, O33876 +33877, O33877 +33878, O33878 +33879, O33879 +33880, O33880 +33881, O33881 +33882, O33882 +33883, O33883 +33884, O33884 +33885, O33885 +33886, O33886 +33887, O33887 +33888, O33888 +33889, O33889 +33890, O33890 +33891, O33891 +33892, O33892 +33893, O33893 +33894, O33894 +33895, O33895 +33896, O33896 +33897, O33897 +33898, O33898 +33899, O33899 +33900, O33900 +33901, O33901 +33902, O33902 +33903, O33903 +33904, O33904 +33905, O33905 +33906, O33906 +33907, O33907 +33908, O33908 +33909, O33909 +33910, O33910 +33911, O33911 +33912, O33912 +33913, O33913 +33914, O33914 +33915, O33915 +33916, O33916 +33917, O33917 +33918, O33918 +33919, O33919 +33920, O33920 +33921, O33921 +33922, O33922 +33923, O33923 +33924, O33924 +33925, O33925 +33926, O33926 +33927, O33927 +33928, O33928 +33929, O33929 +33930, O33930 +33931, O33931 +33932, O33932 +33933, O33933 +33934, O33934 +33935, O33935 +33936, O33936 +33937, O33937 +33938, O33938 +33939, O33939 +33940, O33940 +33941, O33941 +33942, O33942 +33943, O33943 +33944, O33944 +33945, O33945 +33946, O33946 +33947, O33947 +33948, O33948 +33949, O33949 +33950, O33950 +33951, O33951 +33952, O33952 +33953, O33953 +33954, O33954 +33955, O33955 +33956, O33956 +33957, O33957 +33958, O33958 +33959, O33959 +33960, O33960 +33961, O33961 +33962, O33962 +33963, O33963 +33964, O33964 +33965, O33965 +33966, O33966 +33967, O33967 +33968, O33968 +33969, O33969 +33970, O33970 +33971, O33971 +33972, O33972 +33973, O33973 +33974, O33974 +33975, O33975 +33976, O33976 +33977, O33977 +33978, O33978 +33979, O33979 +33980, O33980 +33981, O33981 +33982, O33982 +33983, O33983 +33984, O33984 +33985, O33985 +33986, O33986 +33987, O33987 +33988, O33988 +33989, O33989 +33990, O33990 +33991, O33991 +33992, O33992 +33993, O33993 +33994, O33994 +33995, O33995 +33996, O33996 +33997, O33997 +33998, O33998 +33999, O33999 +34000, O34000 +34001, O34001 +34002, O34002 +34003, O34003 +34004, O34004 +34005, O34005 +34006, O34006 +34007, O34007 +34008, O34008 +34009, O34009 +34010, O34010 +34011, O34011 +34012, O34012 +34013, O34013 +34014, O34014 +34015, O34015 +34016, O34016 +34017, O34017 +34018, O34018 +34019, O34019 +34020, O34020 +34021, O34021 +34022, O34022 +34023, O34023 +34024, O34024 +34025, O34025 +34026, O34026 +34027, O34027 +34028, O34028 +34029, O34029 +34030, O34030 +34031, O34031 +34032, O34032 +34033, O34033 +34034, O34034 +34035, O34035 +34036, O34036 +34037, O34037 +34038, O34038 +34039, O34039 +34040, O34040 +34041, O34041 +34042, O34042 +34043, O34043 +34044, O34044 +34045, O34045 +34046, O34046 +34047, O34047 +34048, O34048 +34049, O34049 +34050, O34050 +34051, O34051 +34052, O34052 +34053, O34053 +34054, O34054 +34055, O34055 +34056, O34056 +34057, O34057 +34058, O34058 +34059, O34059 +34060, O34060 +34061, O34061 +34062, O34062 +34063, O34063 +34064, O34064 +34065, O34065 +34066, O34066 +34067, O34067 +34068, O34068 +34069, O34069 +34070, O34070 +34071, O34071 +34072, O34072 +34073, O34073 +34074, O34074 +34075, O34075 +34076, O34076 +34077, O34077 +34078, O34078 +34079, O34079 +34080, O34080 +34081, O34081 +34082, O34082 +34083, O34083 +34084, O34084 +34085, O34085 +34086, O34086 +34087, O34087 +34088, O34088 +34089, O34089 +34090, O34090 +34091, O34091 +34092, O34092 +34093, O34093 +34094, O34094 +34095, O34095 +34096, O34096 +34097, O34097 +34098, O34098 +34099, O34099 +34100, O34100 +34101, O34101 +34102, O34102 +34103, O34103 +34104, O34104 +34105, O34105 +34106, O34106 +34107, O34107 +34108, O34108 +34109, O34109 +34110, O34110 +34111, O34111 +34112, O34112 +34113, O34113 +34114, O34114 +34115, O34115 +34116, O34116 +34117, O34117 +34118, O34118 +34119, O34119 +34120, O34120 +34121, O34121 +34122, O34122 +34123, O34123 +34124, O34124 +34125, O34125 +34126, O34126 +34127, O34127 +34128, O34128 +34129, O34129 +34130, O34130 +34131, O34131 +34132, O34132 +34133, O34133 +34134, O34134 +34135, O34135 +34136, O34136 +34137, O34137 +34138, O34138 +34139, O34139 +34140, O34140 +34141, O34141 +34142, O34142 +34143, O34143 +34144, O34144 +34145, O34145 +34146, O34146 +34147, O34147 +34148, O34148 +34149, O34149 +34150, O34150 +34151, O34151 +34152, O34152 +34153, O34153 +34154, O34154 +34155, O34155 +34156, O34156 +34157, O34157 +34158, O34158 +34159, O34159 +34160, O34160 +34161, O34161 +34162, O34162 +34163, O34163 +34164, O34164 +34165, O34165 +34166, O34166 +34167, O34167 +34168, O34168 +34169, O34169 +34170, O34170 +34171, O34171 +34172, O34172 +34173, O34173 +34174, O34174 +34175, O34175 +34176, O34176 +34177, O34177 +34178, O34178 +34179, O34179 +34180, O34180 +34181, O34181 +34182, O34182 +34183, O34183 +34184, O34184 +34185, O34185 +34186, O34186 +34187, O34187 +34188, O34188 +34189, O34189 +34190, O34190 +34191, O34191 +34192, O34192 +34193, O34193 +34194, O34194 +34195, O34195 +34196, O34196 +34197, O34197 +34198, O34198 +34199, O34199 +34200, O34200 +34201, O34201 +34202, O34202 +34203, O34203 +34204, O34204 +34205, O34205 +34206, O34206 +34207, O34207 +34208, O34208 +34209, O34209 +34210, O34210 +34211, O34211 +34212, O34212 +34213, O34213 +34214, O34214 +34215, O34215 +34216, O34216 +34217, O34217 +34218, O34218 +34219, O34219 +34220, O34220 +34221, O34221 +34222, O34222 +34223, O34223 +34224, O34224 +34225, O34225 +34226, O34226 +34227, O34227 +34228, O34228 +34229, O34229 +34230, O34230 +34231, O34231 +34232, O34232 +34233, O34233 +34234, O34234 +34235, O34235 +34236, O34236 +34237, O34237 +34238, O34238 +34239, O34239 +34240, O34240 +34241, O34241 +34242, O34242 +34243, O34243 +34244, O34244 +34245, O34245 +34246, O34246 +34247, O34247 +34248, O34248 +34249, O34249 +34250, O34250 +34251, O34251 +34252, O34252 +34253, O34253 +34254, O34254 +34255, O34255 +34256, O34256 +34257, O34257 +34258, O34258 +34259, O34259 +34260, O34260 +34261, O34261 +34262, O34262 +34263, O34263 +34264, O34264 +34265, O34265 +34266, O34266 +34267, O34267 +34268, O34268 +34269, O34269 +34270, O34270 +34271, O34271 +34272, O34272 +34273, O34273 +34274, O34274 +34275, O34275 +34276, O34276 +34277, O34277 +34278, O34278 +34279, O34279 +34280, O34280 +34281, O34281 +34282, O34282 +34283, O34283 +34284, O34284 +34285, O34285 +34286, O34286 +34287, O34287 +34288, O34288 +34289, O34289 +34290, O34290 +34291, O34291 +34292, O34292 +34293, O34293 +34294, O34294 +34295, O34295 +34296, O34296 +34297, O34297 +34298, O34298 +34299, O34299 +34300, O34300 +34301, O34301 +34302, O34302 +34303, O34303 +34304, O34304 +34305, O34305 +34306, O34306 +34307, O34307 +34308, O34308 +34309, O34309 +34310, O34310 +34311, O34311 +34312, O34312 +34313, O34313 +34314, O34314 +34315, O34315 +34316, O34316 +34317, O34317 +34318, O34318 +34319, O34319 +34320, O34320 +34321, O34321 +34322, O34322 +34323, O34323 +34324, O34324 +34325, O34325 +34326, O34326 +34327, O34327 +34328, O34328 +34329, O34329 +34330, O34330 +34331, O34331 +34332, O34332 +34333, O34333 +34334, O34334 +34335, O34335 +34336, O34336 +34337, O34337 +34338, O34338 +34339, O34339 +34340, O34340 +34341, O34341 +34342, O34342 +34343, O34343 +34344, O34344 +34345, O34345 +34346, O34346 +34347, O34347 +34348, O34348 +34349, O34349 +34350, O34350 +34351, O34351 +34352, O34352 +34353, O34353 +34354, O34354 +34355, O34355 +34356, O34356 +34357, O34357 +34358, O34358 +34359, O34359 +34360, O34360 +34361, O34361 +34362, O34362 +34363, O34363 +34364, O34364 +34365, O34365 +34366, O34366 +34367, O34367 +34368, O34368 +34369, O34369 +34370, O34370 +34371, O34371 +34372, O34372 +34373, O34373 +34374, O34374 +34375, O34375 +34376, O34376 +34377, O34377 +34378, O34378 +34379, O34379 +34380, O34380 +34381, O34381 +34382, O34382 +34383, O34383 +34384, O34384 +34385, O34385 +34386, O34386 +34387, O34387 +34388, O34388 +34389, O34389 +34390, O34390 +34391, O34391 +34392, O34392 +34393, O34393 +34394, O34394 +34395, O34395 +34396, O34396 +34397, O34397 +34398, O34398 +34399, O34399 +34400, O34400 +34401, O34401 +34402, O34402 +34403, O34403 +34404, O34404 +34405, O34405 +34406, O34406 +34407, O34407 +34408, O34408 +34409, O34409 +34410, O34410 +34411, O34411 +34412, O34412 +34413, O34413 +34414, O34414 +34415, O34415 +34416, O34416 +34417, O34417 +34418, O34418 +34419, O34419 +34420, O34420 +34421, O34421 +34422, O34422 +34423, O34423 +34424, O34424 +34425, O34425 +34426, O34426 +34427, O34427 +34428, O34428 +34429, O34429 +34430, O34430 +34431, O34431 +34432, O34432 +34433, O34433 +34434, O34434 +34435, O34435 +34436, O34436 +34437, O34437 +34438, O34438 +34439, O34439 +34440, O34440 +34441, O34441 +34442, O34442 +34443, O34443 +34444, O34444 +34445, O34445 +34446, O34446 +34447, O34447 +34448, O34448 +34449, O34449 +34450, O34450 +34451, O34451 +34452, O34452 +34453, O34453 +34454, O34454 +34455, O34455 +34456, O34456 +34457, O34457 +34458, O34458 +34459, O34459 +34460, O34460 +34461, O34461 +34462, O34462 +34463, O34463 +34464, O34464 +34465, O34465 +34466, O34466 +34467, O34467 +34468, O34468 +34469, O34469 +34470, O34470 +34471, O34471 +34472, O34472 +34473, O34473 +34474, O34474 +34475, O34475 +34476, O34476 +34477, O34477 +34478, O34478 +34479, O34479 +34480, O34480 +34481, O34481 +34482, O34482 +34483, O34483 +34484, O34484 +34485, O34485 +34486, O34486 +34487, O34487 +34488, O34488 +34489, O34489 +34490, O34490 +34491, O34491 +34492, O34492 +34493, O34493 +34494, O34494 +34495, O34495 +34496, O34496 +34497, O34497 +34498, O34498 +34499, O34499 +34500, O34500 +34501, O34501 +34502, O34502 +34503, O34503 +34504, O34504 +34505, O34505 +34506, O34506 +34507, O34507 +34508, O34508 +34509, O34509 +34510, O34510 +34511, O34511 +34512, O34512 +34513, O34513 +34514, O34514 +34515, O34515 +34516, O34516 +34517, O34517 +34518, O34518 +34519, O34519 +34520, O34520 +34521, O34521 +34522, O34522 +34523, O34523 +34524, O34524 +34525, O34525 +34526, O34526 +34527, O34527 +34528, O34528 +34529, O34529 +34530, O34530 +34531, O34531 +34532, O34532 +34533, O34533 +34534, O34534 +34535, O34535 +34536, O34536 +34537, O34537 +34538, O34538 +34539, O34539 +34540, O34540 +34541, O34541 +34542, O34542 +34543, O34543 +34544, O34544 +34545, O34545 +34546, O34546 +34547, O34547 +34548, O34548 +34549, O34549 +34550, O34550 +34551, O34551 +34552, O34552 +34553, O34553 +34554, O34554 +34555, O34555 +34556, O34556 +34557, O34557 +34558, O34558 +34559, O34559 +34560, O34560 +34561, O34561 +34562, O34562 +34563, O34563 +34564, O34564 +34565, O34565 +34566, O34566 +34567, O34567 +34568, O34568 +34569, O34569 +34570, O34570 +34571, O34571 +34572, O34572 +34573, O34573 +34574, O34574 +34575, O34575 +34576, O34576 +34577, O34577 +34578, O34578 +34579, O34579 +34580, O34580 +34581, O34581 +34582, O34582 +34583, O34583 +34584, O34584 +34585, O34585 +34586, O34586 +34587, O34587 +34588, O34588 +34589, O34589 +34590, O34590 +34591, O34591 +34592, O34592 +34593, O34593 +34594, O34594 +34595, O34595 +34596, O34596 +34597, O34597 +34598, O34598 +34599, O34599 +34600, O34600 +34601, O34601 +34602, O34602 +34603, O34603 +34604, O34604 +34605, O34605 +34606, O34606 +34607, O34607 +34608, O34608 +34609, O34609 +34610, O34610 +34611, O34611 +34612, O34612 +34613, O34613 +34614, O34614 +34615, O34615 +34616, O34616 +34617, O34617 +34618, O34618 +34619, O34619 +34620, O34620 +34621, O34621 +34622, O34622 +34623, O34623 +34624, O34624 +34625, O34625 +34626, O34626 +34627, O34627 +34628, O34628 +34629, O34629 +34630, O34630 +34631, O34631 +34632, O34632 +34633, O34633 +34634, O34634 +34635, O34635 +34636, O34636 +34637, O34637 +34638, O34638 +34639, O34639 +34640, O34640 +34641, O34641 +34642, O34642 +34643, O34643 +34644, O34644 +34645, O34645 +34646, O34646 +34647, O34647 +34648, O34648 +34649, O34649 +34650, O34650 +34651, O34651 +34652, O34652 +34653, O34653 +34654, O34654 +34655, O34655 +34656, O34656 +34657, O34657 +34658, O34658 +34659, O34659 +34660, O34660 +34661, O34661 +34662, O34662 +34663, O34663 +34664, O34664 +34665, O34665 +34666, O34666 +34667, O34667 +34668, O34668 +34669, O34669 +34670, O34670 +34671, O34671 +34672, O34672 +34673, O34673 +34674, O34674 +34675, O34675 +34676, O34676 +34677, O34677 +34678, O34678 +34679, O34679 +34680, O34680 +34681, O34681 +34682, O34682 +34683, O34683 +34684, O34684 +34685, O34685 +34686, O34686 +34687, O34687 +34688, O34688 +34689, O34689 +34690, O34690 +34691, O34691 +34692, O34692 +34693, O34693 +34694, O34694 +34695, O34695 +34696, O34696 +34697, O34697 +34698, O34698 +34699, O34699 +34700, O34700 +34701, O34701 +34702, O34702 +34703, O34703 +34704, O34704 +34705, O34705 +34706, O34706 +34707, O34707 +34708, O34708 +34709, O34709 +34710, O34710 +34711, O34711 +34712, O34712 +34713, O34713 +34714, O34714 +34715, O34715 +34716, O34716 +34717, O34717 +34718, O34718 +34719, O34719 +34720, O34720 +34721, O34721 +34722, O34722 +34723, O34723 +34724, O34724 +34725, O34725 +34726, O34726 +34727, O34727 +34728, O34728 +34729, O34729 +34730, O34730 +34731, O34731 +34732, O34732 +34733, O34733 +34734, O34734 +34735, O34735 +34736, O34736 +34737, O34737 +34738, O34738 +34739, O34739 +34740, O34740 +34741, O34741 +34742, O34742 +34743, O34743 +34744, O34744 +34745, O34745 +34746, O34746 +34747, O34747 +34748, O34748 +34749, O34749 +34750, O34750 +34751, O34751 +34752, O34752 +34753, O34753 +34754, O34754 +34755, O34755 +34756, O34756 +34757, O34757 +34758, O34758 +34759, O34759 +34760, O34760 +34761, O34761 +34762, O34762 +34763, O34763 +34764, O34764 +34765, O34765 +34766, O34766 +34767, O34767 +34768, O34768 +34769, O34769 +34770, O34770 +34771, O34771 +34772, O34772 +34773, O34773 +34774, O34774 +34775, O34775 +34776, O34776 +34777, O34777 +34778, O34778 +34779, O34779 +34780, O34780 +34781, O34781 +34782, O34782 +34783, O34783 +34784, O34784 +34785, O34785 +34786, O34786 +34787, O34787 +34788, O34788 +34789, O34789 +34790, O34790 +34791, O34791 +34792, O34792 +34793, O34793 +34794, O34794 +34795, O34795 +34796, O34796 +34797, O34797 +34798, O34798 +34799, O34799 +34800, O34800 +34801, O34801 +34802, O34802 +34803, O34803 +34804, O34804 +34805, O34805 +34806, O34806 +34807, O34807 +34808, O34808 +34809, O34809 +34810, O34810 +34811, O34811 +34812, O34812 +34813, O34813 +34814, O34814 +34815, O34815 +34816, O34816 +34817, O34817 +34818, O34818 +34819, O34819 +34820, O34820 +34821, O34821 +34822, O34822 +34823, O34823 +34824, O34824 +34825, O34825 +34826, O34826 +34827, O34827 +34828, O34828 +34829, O34829 +34830, O34830 +34831, O34831 +34832, O34832 +34833, O34833 +34834, O34834 +34835, O34835 +34836, O34836 +34837, O34837 +34838, O34838 +34839, O34839 +34840, O34840 +34841, O34841 +34842, O34842 +34843, O34843 +34844, O34844 +34845, O34845 +34846, O34846 +34847, O34847 +34848, O34848 +34849, O34849 +34850, O34850 +34851, O34851 +34852, O34852 +34853, O34853 +34854, O34854 +34855, O34855 +34856, O34856 +34857, O34857 +34858, O34858 +34859, O34859 +34860, O34860 +34861, O34861 +34862, O34862 +34863, O34863 +34864, O34864 +34865, O34865 +34866, O34866 +34867, O34867 +34868, O34868 +34869, O34869 +34870, O34870 +34871, O34871 +34872, O34872 +34873, O34873 +34874, O34874 +34875, O34875 +34876, O34876 +34877, O34877 +34878, O34878 +34879, O34879 +34880, O34880 +34881, O34881 +34882, O34882 +34883, O34883 +34884, O34884 +34885, O34885 +34886, O34886 +34887, O34887 +34888, O34888 +34889, O34889 +34890, O34890 +34891, O34891 +34892, O34892 +34893, O34893 +34894, O34894 +34895, O34895 +34896, O34896 +34897, O34897 +34898, O34898 +34899, O34899 +34900, O34900 +34901, O34901 +34902, O34902 +34903, O34903 +34904, O34904 +34905, O34905 +34906, O34906 +34907, O34907 +34908, O34908 +34909, O34909 +34910, O34910 +34911, O34911 +34912, O34912 +34913, O34913 +34914, O34914 +34915, O34915 +34916, O34916 +34917, O34917 +34918, O34918 +34919, O34919 +34920, O34920 +34921, O34921 +34922, O34922 +34923, O34923 +34924, O34924 +34925, O34925 +34926, O34926 +34927, O34927 +34928, O34928 +34929, O34929 +34930, O34930 +34931, O34931 +34932, O34932 +34933, O34933 +34934, O34934 +34935, O34935 +34936, O34936 +34937, O34937 +34938, O34938 +34939, O34939 +34940, O34940 +34941, O34941 +34942, O34942 +34943, O34943 +34944, O34944 +34945, O34945 +34946, O34946 +34947, O34947 +34948, O34948 +34949, O34949 +34950, O34950 +34951, O34951 +34952, O34952 +34953, O34953 +34954, O34954 +34955, O34955 +34956, O34956 +34957, O34957 +34958, O34958 +34959, O34959 +34960, O34960 +34961, O34961 +34962, O34962 +34963, O34963 +34964, O34964 +34965, O34965 +34966, O34966 +34967, O34967 +34968, O34968 +34969, O34969 +34970, O34970 +34971, O34971 +34972, O34972 +34973, O34973 +34974, O34974 +34975, O34975 +34976, O34976 +34977, O34977 +34978, O34978 +34979, O34979 +34980, O34980 +34981, O34981 +34982, O34982 +34983, O34983 +34984, O34984 +34985, O34985 +34986, O34986 +34987, O34987 +34988, O34988 +34989, O34989 +34990, O34990 +34991, O34991 +34992, O34992 +34993, O34993 +34994, O34994 +34995, O34995 +34996, O34996 +34997, O34997 +34998, O34998 +34999, O34999 +35000, O35000 +35001, O35001 +35002, O35002 +35003, O35003 +35004, O35004 +35005, O35005 +35006, O35006 +35007, O35007 +35008, O35008 +35009, O35009 +35010, O35010 +35011, O35011 +35012, O35012 +35013, O35013 +35014, O35014 +35015, O35015 +35016, O35016 +35017, O35017 +35018, O35018 +35019, O35019 +35020, O35020 +35021, O35021 +35022, O35022 +35023, O35023 +35024, O35024 +35025, O35025 +35026, O35026 +35027, O35027 +35028, O35028 +35029, O35029 +35030, O35030 +35031, O35031 +35032, O35032 +35033, O35033 +35034, O35034 +35035, O35035 +35036, O35036 +35037, O35037 +35038, O35038 +35039, O35039 +35040, O35040 +35041, O35041 +35042, O35042 +35043, O35043 +35044, O35044 +35045, O35045 +35046, O35046 +35047, O35047 +35048, O35048 +35049, O35049 +35050, O35050 +35051, O35051 +35052, O35052 +35053, O35053 +35054, O35054 +35055, O35055 +35056, O35056 +35057, O35057 +35058, O35058 +35059, O35059 +35060, O35060 +35061, O35061 +35062, O35062 +35063, O35063 +35064, O35064 +35065, O35065 +35066, O35066 +35067, O35067 +35068, O35068 +35069, O35069 +35070, O35070 +35071, O35071 +35072, O35072 +35073, O35073 +35074, O35074 +35075, O35075 +35076, O35076 +35077, O35077 +35078, O35078 +35079, O35079 +35080, O35080 +35081, O35081 +35082, O35082 +35083, O35083 +35084, O35084 +35085, O35085 +35086, O35086 +35087, O35087 +35088, O35088 +35089, O35089 +35090, O35090 +35091, O35091 +35092, O35092 +35093, O35093 +35094, O35094 +35095, O35095 +35096, O35096 +35097, O35097 +35098, O35098 +35099, O35099 +35100, O35100 +35101, O35101 +35102, O35102 +35103, O35103 +35104, O35104 +35105, O35105 +35106, O35106 +35107, O35107 +35108, O35108 +35109, O35109 +35110, O35110 +35111, O35111 +35112, O35112 +35113, O35113 +35114, O35114 +35115, O35115 +35116, O35116 +35117, O35117 +35118, O35118 +35119, O35119 +35120, O35120 +35121, O35121 +35122, O35122 +35123, O35123 +35124, O35124 +35125, O35125 +35126, O35126 +35127, O35127 +35128, O35128 +35129, O35129 +35130, O35130 +35131, O35131 +35132, O35132 +35133, O35133 +35134, O35134 +35135, O35135 +35136, O35136 +35137, O35137 +35138, O35138 +35139, O35139 +35140, O35140 +35141, O35141 +35142, O35142 +35143, O35143 +35144, O35144 +35145, O35145 +35146, O35146 +35147, O35147 +35148, O35148 +35149, O35149 +35150, O35150 +35151, O35151 +35152, O35152 +35153, O35153 +35154, O35154 +35155, O35155 +35156, O35156 +35157, O35157 +35158, O35158 +35159, O35159 +35160, O35160 +35161, O35161 +35162, O35162 +35163, O35163 +35164, O35164 +35165, O35165 +35166, O35166 +35167, O35167 +35168, O35168 +35169, O35169 +35170, O35170 +35171, O35171 +35172, O35172 +35173, O35173 +35174, O35174 +35175, O35175 +35176, O35176 +35177, O35177 +35178, O35178 +35179, O35179 +35180, O35180 +35181, O35181 +35182, O35182 +35183, O35183 +35184, O35184 +35185, O35185 +35186, O35186 +35187, O35187 +35188, O35188 +35189, O35189 +35190, O35190 +35191, O35191 +35192, O35192 +35193, O35193 +35194, O35194 +35195, O35195 +35196, O35196 +35197, O35197 +35198, O35198 +35199, O35199 +35200, O35200 +35201, O35201 +35202, O35202 +35203, O35203 +35204, O35204 +35205, O35205 +35206, O35206 +35207, O35207 +35208, O35208 +35209, O35209 +35210, O35210 +35211, O35211 +35212, O35212 +35213, O35213 +35214, O35214 +35215, O35215 +35216, O35216 +35217, O35217 +35218, O35218 +35219, O35219 +35220, O35220 +35221, O35221 +35222, O35222 +35223, O35223 +35224, O35224 +35225, O35225 +35226, O35226 +35227, O35227 +35228, O35228 +35229, O35229 +35230, O35230 +35231, O35231 +35232, O35232 +35233, O35233 +35234, O35234 +35235, O35235 +35236, O35236 +35237, O35237 +35238, O35238 +35239, O35239 +35240, O35240 +35241, O35241 +35242, O35242 +35243, O35243 +35244, O35244 +35245, O35245 +35246, O35246 +35247, O35247 +35248, O35248 +35249, O35249 +35250, O35250 +35251, O35251 +35252, O35252 +35253, O35253 +35254, O35254 +35255, O35255 +35256, O35256 +35257, O35257 +35258, O35258 +35259, O35259 +35260, O35260 +35261, O35261 +35262, O35262 +35263, O35263 +35264, O35264 +35265, O35265 +35266, O35266 +35267, O35267 +35268, O35268 +35269, O35269 +35270, O35270 +35271, O35271 +35272, O35272 +35273, O35273 +35274, O35274 +35275, O35275 +35276, O35276 +35277, O35277 +35278, O35278 +35279, O35279 +35280, O35280 +35281, O35281 +35282, O35282 +35283, O35283 +35284, O35284 +35285, O35285 +35286, O35286 +35287, O35287 +35288, O35288 +35289, O35289 +35290, O35290 +35291, O35291 +35292, O35292 +35293, O35293 +35294, O35294 +35295, O35295 +35296, O35296 +35297, O35297 +35298, O35298 +35299, O35299 +35300, O35300 +35301, O35301 +35302, O35302 +35303, O35303 +35304, O35304 +35305, O35305 +35306, O35306 +35307, O35307 +35308, O35308 +35309, O35309 +35310, O35310 +35311, O35311 +35312, O35312 +35313, O35313 +35314, O35314 +35315, O35315 +35316, O35316 +35317, O35317 +35318, O35318 +35319, O35319 +35320, O35320 +35321, O35321 +35322, O35322 +35323, O35323 +35324, O35324 +35325, O35325 +35326, O35326 +35327, O35327 +35328, O35328 +35329, O35329 +35330, O35330 +35331, O35331 +35332, O35332 +35333, O35333 +35334, O35334 +35335, O35335 +35336, O35336 +35337, O35337 +35338, O35338 +35339, O35339 +35340, O35340 +35341, O35341 +35342, O35342 +35343, O35343 +35344, O35344 +35345, O35345 +35346, O35346 +35347, O35347 +35348, O35348 +35349, O35349 +35350, O35350 +35351, O35351 +35352, O35352 +35353, O35353 +35354, O35354 +35355, O35355 +35356, O35356 +35357, O35357 +35358, O35358 +35359, O35359 +35360, O35360 +35361, O35361 +35362, O35362 +35363, O35363 +35364, O35364 +35365, O35365 +35366, O35366 +35367, O35367 +35368, O35368 +35369, O35369 +35370, O35370 +35371, O35371 +35372, O35372 +35373, O35373 +35374, O35374 +35375, O35375 +35376, O35376 +35377, O35377 +35378, O35378 +35379, O35379 +35380, O35380 +35381, O35381 +35382, O35382 +35383, O35383 +35384, O35384 +35385, O35385 +35386, O35386 +35387, O35387 +35388, O35388 +35389, O35389 +35390, O35390 +35391, O35391 +35392, O35392 +35393, O35393 +35394, O35394 +35395, O35395 +35396, O35396 +35397, O35397 +35398, O35398 +35399, O35399 +35400, O35400 +35401, O35401 +35402, O35402 +35403, O35403 +35404, O35404 +35405, O35405 +35406, O35406 +35407, O35407 +35408, O35408 +35409, O35409 +35410, O35410 +35411, O35411 +35412, O35412 +35413, O35413 +35414, O35414 +35415, O35415 +35416, O35416 +35417, O35417 +35418, O35418 +35419, O35419 +35420, O35420 +35421, O35421 +35422, O35422 +35423, O35423 +35424, O35424 +35425, O35425 +35426, O35426 +35427, O35427 +35428, O35428 +35429, O35429 +35430, O35430 +35431, O35431 +35432, O35432 +35433, O35433 +35434, O35434 +35435, O35435 +35436, O35436 +35437, O35437 +35438, O35438 +35439, O35439 +35440, O35440 +35441, O35441 +35442, O35442 +35443, O35443 +35444, O35444 +35445, O35445 +35446, O35446 +35447, O35447 +35448, O35448 +35449, O35449 +35450, O35450 +35451, O35451 +35452, O35452 +35453, O35453 +35454, O35454 +35455, O35455 +35456, O35456 +35457, O35457 +35458, O35458 +35459, O35459 +35460, O35460 +35461, O35461 +35462, O35462 +35463, O35463 +35464, O35464 +35465, O35465 +35466, O35466 +35467, O35467 +35468, O35468 +35469, O35469 +35470, O35470 +35471, O35471 +35472, O35472 +35473, O35473 +35474, O35474 +35475, O35475 +35476, O35476 +35477, O35477 +35478, O35478 +35479, O35479 +35480, O35480 +35481, O35481 +35482, O35482 +35483, O35483 +35484, O35484 +35485, O35485 +35486, O35486 +35487, O35487 +35488, O35488 +35489, O35489 +35490, O35490 +35491, O35491 +35492, O35492 +35493, O35493 +35494, O35494 +35495, O35495 +35496, O35496 +35497, O35497 +35498, O35498 +35499, O35499 +35500, O35500 +35501, O35501 +35502, O35502 +35503, O35503 +35504, O35504 +35505, O35505 +35506, O35506 +35507, O35507 +35508, O35508 +35509, O35509 +35510, O35510 +35511, O35511 +35512, O35512 +35513, O35513 +35514, O35514 +35515, O35515 +35516, O35516 +35517, O35517 +35518, O35518 +35519, O35519 +35520, O35520 +35521, O35521 +35522, O35522 +35523, O35523 +35524, O35524 +35525, O35525 +35526, O35526 +35527, O35527 +35528, O35528 +35529, O35529 +35530, O35530 +35531, O35531 +35532, O35532 +35533, O35533 +35534, O35534 +35535, O35535 +35536, O35536 +35537, O35537 +35538, O35538 +35539, O35539 +35540, O35540 +35541, O35541 +35542, O35542 +35543, O35543 +35544, O35544 +35545, O35545 +35546, O35546 +35547, O35547 +35548, O35548 +35549, O35549 +35550, O35550 +35551, O35551 +35552, O35552 +35553, O35553 +35554, O35554 +35555, O35555 +35556, O35556 +35557, O35557 +35558, O35558 +35559, O35559 +35560, O35560 +35561, O35561 +35562, O35562 +35563, O35563 +35564, O35564 +35565, O35565 +35566, O35566 +35567, O35567 +35568, O35568 +35569, O35569 +35570, O35570 +35571, O35571 +35572, O35572 +35573, O35573 +35574, O35574 +35575, O35575 +35576, O35576 +35577, O35577 +35578, O35578 +35579, O35579 +35580, O35580 +35581, O35581 +35582, O35582 +35583, O35583 +35584, O35584 +35585, O35585 +35586, O35586 +35587, O35587 +35588, O35588 +35589, O35589 +35590, O35590 +35591, O35591 +35592, O35592 +35593, O35593 +35594, O35594 +35595, O35595 +35596, O35596 +35597, O35597 +35598, O35598 +35599, O35599 +35600, O35600 +35601, O35601 +35602, O35602 +35603, O35603 +35604, O35604 +35605, O35605 +35606, O35606 +35607, O35607 +35608, O35608 +35609, O35609 +35610, O35610 +35611, O35611 +35612, O35612 +35613, O35613 +35614, O35614 +35615, O35615 +35616, O35616 +35617, O35617 +35618, O35618 +35619, O35619 +35620, O35620 +35621, O35621 +35622, O35622 +35623, O35623 +35624, O35624 +35625, O35625 +35626, O35626 +35627, O35627 +35628, O35628 +35629, O35629 +35630, O35630 +35631, O35631 +35632, O35632 +35633, O35633 +35634, O35634 +35635, O35635 +35636, O35636 +35637, O35637 +35638, O35638 +35639, O35639 +35640, O35640 +35641, O35641 +35642, O35642 +35643, O35643 +35644, O35644 +35645, O35645 +35646, O35646 +35647, O35647 +35648, O35648 +35649, O35649 +35650, O35650 +35651, O35651 +35652, O35652 +35653, O35653 +35654, O35654 +35655, O35655 +35656, O35656 +35657, O35657 +35658, O35658 +35659, O35659 +35660, O35660 +35661, O35661 +35662, O35662 +35663, O35663 +35664, O35664 +35665, O35665 +35666, O35666 +35667, O35667 +35668, O35668 +35669, O35669 +35670, O35670 +35671, O35671 +35672, O35672 +35673, O35673 +35674, O35674 +35675, O35675 +35676, O35676 +35677, O35677 +35678, O35678 +35679, O35679 +35680, O35680 +35681, O35681 +35682, O35682 +35683, O35683 +35684, O35684 +35685, O35685 +35686, O35686 +35687, O35687 +35688, O35688 +35689, O35689 +35690, O35690 +35691, O35691 +35692, O35692 +35693, O35693 +35694, O35694 +35695, O35695 +35696, O35696 +35697, O35697 +35698, O35698 +35699, O35699 +35700, O35700 +35701, O35701 +35702, O35702 +35703, O35703 +35704, O35704 +35705, O35705 +35706, O35706 +35707, O35707 +35708, O35708 +35709, O35709 +35710, O35710 +35711, O35711 +35712, O35712 +35713, O35713 +35714, O35714 +35715, O35715 +35716, O35716 +35717, O35717 +35718, O35718 +35719, O35719 +35720, O35720 +35721, O35721 +35722, O35722 +35723, O35723 +35724, O35724 +35725, O35725 +35726, O35726 +35727, O35727 +35728, O35728 +35729, O35729 +35730, O35730 +35731, O35731 +35732, O35732 +35733, O35733 +35734, O35734 +35735, O35735 +35736, O35736 +35737, O35737 +35738, O35738 +35739, O35739 +35740, O35740 +35741, O35741 +35742, O35742 +35743, O35743 +35744, O35744 +35745, O35745 +35746, O35746 +35747, O35747 +35748, O35748 +35749, O35749 +35750, O35750 +35751, O35751 +35752, O35752 +35753, O35753 +35754, O35754 +35755, O35755 +35756, O35756 +35757, O35757 +35758, O35758 +35759, O35759 +35760, O35760 +35761, O35761 +35762, O35762 +35763, O35763 +35764, O35764 +35765, O35765 +35766, O35766 +35767, O35767 +35768, O35768 +35769, O35769 +35770, O35770 +35771, O35771 +35772, O35772 +35773, O35773 +35774, O35774 +35775, O35775 +35776, O35776 +35777, O35777 +35778, O35778 +35779, O35779 +35780, O35780 +35781, O35781 +35782, O35782 +35783, O35783 +35784, O35784 +35785, O35785 +35786, O35786 +35787, O35787 +35788, O35788 +35789, O35789 +35790, O35790 +35791, O35791 +35792, O35792 +35793, O35793 +35794, O35794 +35795, O35795 +35796, O35796 +35797, O35797 +35798, O35798 +35799, O35799 +35800, O35800 +35801, O35801 +35802, O35802 +35803, O35803 +35804, O35804 +35805, O35805 +35806, O35806 +35807, O35807 +35808, O35808 +35809, O35809 +35810, O35810 +35811, O35811 +35812, O35812 +35813, O35813 +35814, O35814 +35815, O35815 +35816, O35816 +35817, O35817 +35818, O35818 +35819, O35819 +35820, O35820 +35821, O35821 +35822, O35822 +35823, O35823 +35824, O35824 +35825, O35825 +35826, O35826 +35827, O35827 +35828, O35828 +35829, O35829 +35830, O35830 +35831, O35831 +35832, O35832 +35833, O35833 +35834, O35834 +35835, O35835 +35836, O35836 +35837, O35837 +35838, O35838 +35839, O35839 +35840, O35840 +35841, O35841 +35842, O35842 +35843, O35843 +35844, O35844 +35845, O35845 +35846, O35846 +35847, O35847 +35848, O35848 +35849, O35849 +35850, O35850 +35851, O35851 +35852, O35852 +35853, O35853 +35854, O35854 +35855, O35855 +35856, O35856 +35857, O35857 +35858, O35858 +35859, O35859 +35860, O35860 +35861, O35861 +35862, O35862 +35863, O35863 +35864, O35864 +35865, O35865 +35866, O35866 +35867, O35867 +35868, O35868 +35869, O35869 +35870, O35870 +35871, O35871 +35872, O35872 +35873, O35873 +35874, O35874 +35875, O35875 +35876, O35876 +35877, O35877 +35878, O35878 +35879, O35879 +35880, O35880 +35881, O35881 +35882, O35882 +35883, O35883 +35884, O35884 +35885, O35885 +35886, O35886 +35887, O35887 +35888, O35888 +35889, O35889 +35890, O35890 +35891, O35891 +35892, O35892 +35893, O35893 +35894, O35894 +35895, O35895 +35896, O35896 +35897, O35897 +35898, O35898 +35899, O35899 +35900, O35900 +35901, O35901 +35902, O35902 +35903, O35903 +35904, O35904 +35905, O35905 +35906, O35906 +35907, O35907 +35908, O35908 +35909, O35909 +35910, O35910 +35911, O35911 +35912, O35912 +35913, O35913 +35914, O35914 +35915, O35915 +35916, O35916 +35917, O35917 +35918, O35918 +35919, O35919 +35920, O35920 +35921, O35921 +35922, O35922 +35923, O35923 +35924, O35924 +35925, O35925 +35926, O35926 +35927, O35927 +35928, O35928 +35929, O35929 +35930, O35930 +35931, O35931 +35932, O35932 +35933, O35933 +35934, O35934 +35935, O35935 +35936, O35936 +35937, O35937 +35938, O35938 +35939, O35939 +35940, O35940 +35941, O35941 +35942, O35942 +35943, O35943 +35944, O35944 +35945, O35945 +35946, O35946 +35947, O35947 +35948, O35948 +35949, O35949 +35950, O35950 +35951, O35951 +35952, O35952 +35953, O35953 +35954, O35954 +35955, O35955 +35956, O35956 +35957, O35957 +35958, O35958 +35959, O35959 +35960, O35960 +35961, O35961 +35962, O35962 +35963, O35963 +35964, O35964 +35965, O35965 +35966, O35966 +35967, O35967 +35968, O35968 +35969, O35969 +35970, O35970 +35971, O35971 +35972, O35972 +35973, O35973 +35974, O35974 +35975, O35975 +35976, O35976 +35977, O35977 +35978, O35978 +35979, O35979 +35980, O35980 +35981, O35981 +35982, O35982 +35983, O35983 +35984, O35984 +35985, O35985 +35986, O35986 +35987, O35987 +35988, O35988 +35989, O35989 +35990, O35990 +35991, O35991 +35992, O35992 +35993, O35993 +35994, O35994 +35995, O35995 +35996, O35996 +35997, O35997 +35998, O35998 +35999, O35999 +36000, O36000 +36001, O36001 +36002, O36002 +36003, O36003 +36004, O36004 +36005, O36005 +36006, O36006 +36007, O36007 +36008, O36008 +36009, O36009 +36010, O36010 +36011, O36011 +36012, O36012 +36013, O36013 +36014, O36014 +36015, O36015 +36016, O36016 +36017, O36017 +36018, O36018 +36019, O36019 +36020, O36020 +36021, O36021 +36022, O36022 +36023, O36023 +36024, O36024 +36025, O36025 +36026, O36026 +36027, O36027 +36028, O36028 +36029, O36029 +36030, O36030 +36031, O36031 +36032, O36032 +36033, O36033 +36034, O36034 +36035, O36035 +36036, O36036 +36037, O36037 +36038, O36038 +36039, O36039 +36040, O36040 +36041, O36041 +36042, O36042 +36043, O36043 +36044, O36044 +36045, O36045 +36046, O36046 +36047, O36047 +36048, O36048 +36049, O36049 +36050, O36050 +36051, O36051 +36052, O36052 +36053, O36053 +36054, O36054 +36055, O36055 +36056, O36056 +36057, O36057 +36058, O36058 +36059, O36059 +36060, O36060 +36061, O36061 +36062, O36062 +36063, O36063 +36064, O36064 +36065, O36065 +36066, O36066 +36067, O36067 +36068, O36068 +36069, O36069 +36070, O36070 +36071, O36071 +36072, O36072 +36073, O36073 +36074, O36074 +36075, O36075 +36076, O36076 +36077, O36077 +36078, O36078 +36079, O36079 +36080, O36080 +36081, O36081 +36082, O36082 +36083, O36083 +36084, O36084 +36085, O36085 +36086, O36086 +36087, O36087 +36088, O36088 +36089, O36089 +36090, O36090 +36091, O36091 +36092, O36092 +36093, O36093 +36094, O36094 +36095, O36095 +36096, O36096 +36097, O36097 +36098, O36098 +36099, O36099 +36100, O36100 +36101, O36101 +36102, O36102 +36103, O36103 +36104, O36104 +36105, O36105 +36106, O36106 +36107, O36107 +36108, O36108 +36109, O36109 +36110, O36110 +36111, O36111 +36112, O36112 +36113, O36113 +36114, O36114 +36115, O36115 +36116, O36116 +36117, O36117 +36118, O36118 +36119, O36119 +36120, O36120 +36121, O36121 +36122, O36122 +36123, O36123 +36124, O36124 +36125, O36125 +36126, O36126 +36127, O36127 +36128, O36128 +36129, O36129 +36130, O36130 +36131, O36131 +36132, O36132 +36133, O36133 +36134, O36134 +36135, O36135 +36136, O36136 +36137, O36137 +36138, O36138 +36139, O36139 +36140, O36140 +36141, O36141 +36142, O36142 +36143, O36143 +36144, O36144 +36145, O36145 +36146, O36146 +36147, O36147 +36148, O36148 +36149, O36149 +36150, O36150 +36151, O36151 +36152, O36152 +36153, O36153 +36154, O36154 +36155, O36155 +36156, O36156 +36157, O36157 +36158, O36158 +36159, O36159 +36160, O36160 +36161, O36161 +36162, O36162 +36163, O36163 +36164, O36164 +36165, O36165 +36166, O36166 +36167, O36167 +36168, O36168 +36169, O36169 +36170, O36170 +36171, O36171 +36172, O36172 +36173, O36173 +36174, O36174 +36175, O36175 +36176, O36176 +36177, O36177 +36178, O36178 +36179, O36179 +36180, O36180 +36181, O36181 +36182, O36182 +36183, O36183 +36184, O36184 +36185, O36185 +36186, O36186 +36187, O36187 +36188, O36188 +36189, O36189 +36190, O36190 +36191, O36191 +36192, O36192 +36193, O36193 +36194, O36194 +36195, O36195 +36196, O36196 +36197, O36197 +36198, O36198 +36199, O36199 +36200, O36200 +36201, O36201 +36202, O36202 +36203, O36203 +36204, O36204 +36205, O36205 +36206, O36206 +36207, O36207 +36208, O36208 +36209, O36209 +36210, O36210 +36211, O36211 +36212, O36212 +36213, O36213 +36214, O36214 +36215, O36215 +36216, O36216 +36217, O36217 +36218, O36218 +36219, O36219 +36220, O36220 +36221, O36221 +36222, O36222 +36223, O36223 +36224, O36224 +36225, O36225 +36226, O36226 +36227, O36227 +36228, O36228 +36229, O36229 +36230, O36230 +36231, O36231 +36232, O36232 +36233, O36233 +36234, O36234 +36235, O36235 +36236, O36236 +36237, O36237 +36238, O36238 +36239, O36239 +36240, O36240 +36241, O36241 +36242, O36242 +36243, O36243 +36244, O36244 +36245, O36245 +36246, O36246 +36247, O36247 +36248, O36248 +36249, O36249 +36250, O36250 +36251, O36251 +36252, O36252 +36253, O36253 +36254, O36254 +36255, O36255 +36256, O36256 +36257, O36257 +36258, O36258 +36259, O36259 +36260, O36260 +36261, O36261 +36262, O36262 +36263, O36263 +36264, O36264 +36265, O36265 +36266, O36266 +36267, O36267 +36268, O36268 +36269, O36269 +36270, O36270 +36271, O36271 +36272, O36272 +36273, O36273 +36274, O36274 +36275, O36275 +36276, O36276 +36277, O36277 +36278, O36278 +36279, O36279 +36280, O36280 +36281, O36281 +36282, O36282 +36283, O36283 +36284, O36284 +36285, O36285 +36286, O36286 +36287, O36287 +36288, O36288 +36289, O36289 +36290, O36290 +36291, O36291 +36292, O36292 +36293, O36293 +36294, O36294 +36295, O36295 +36296, O36296 +36297, O36297 +36298, O36298 +36299, O36299 +36300, O36300 +36301, O36301 +36302, O36302 +36303, O36303 +36304, O36304 +36305, O36305 +36306, O36306 +36307, O36307 +36308, O36308 +36309, O36309 +36310, O36310 +36311, O36311 +36312, O36312 +36313, O36313 +36314, O36314 +36315, O36315 +36316, O36316 +36317, O36317 +36318, O36318 +36319, O36319 +36320, O36320 +36321, O36321 +36322, O36322 +36323, O36323 +36324, O36324 +36325, O36325 +36326, O36326 +36327, O36327 +36328, O36328 +36329, O36329 +36330, O36330 +36331, O36331 +36332, O36332 +36333, O36333 +36334, O36334 +36335, O36335 +36336, O36336 +36337, O36337 +36338, O36338 +36339, O36339 +36340, O36340 +36341, O36341 +36342, O36342 +36343, O36343 +36344, O36344 +36345, O36345 +36346, O36346 +36347, O36347 +36348, O36348 +36349, O36349 +36350, O36350 +36351, O36351 +36352, O36352 +36353, O36353 +36354, O36354 +36355, O36355 +36356, O36356 +36357, O36357 +36358, O36358 +36359, O36359 +36360, O36360 +36361, O36361 +36362, O36362 +36363, O36363 +36364, O36364 +36365, O36365 +36366, O36366 +36367, O36367 +36368, O36368 +36369, O36369 +36370, O36370 +36371, O36371 +36372, O36372 +36373, O36373 +36374, O36374 +36375, O36375 +36376, O36376 +36377, O36377 +36378, O36378 +36379, O36379 +36380, O36380 +36381, O36381 +36382, O36382 +36383, O36383 +36384, O36384 +36385, O36385 +36386, O36386 +36387, O36387 +36388, O36388 +36389, O36389 +36390, O36390 +36391, O36391 +36392, O36392 +36393, O36393 +36394, O36394 +36395, O36395 +36396, O36396 +36397, O36397 +36398, O36398 +36399, O36399 +36400, O36400 +36401, O36401 +36402, O36402 +36403, O36403 +36404, O36404 +36405, O36405 +36406, O36406 +36407, O36407 +36408, O36408 +36409, O36409 +36410, O36410 +36411, O36411 +36412, O36412 +36413, O36413 +36414, O36414 +36415, O36415 +36416, O36416 +36417, O36417 +36418, O36418 +36419, O36419 +36420, O36420 +36421, O36421 +36422, O36422 +36423, O36423 +36424, O36424 +36425, O36425 +36426, O36426 +36427, O36427 +36428, O36428 +36429, O36429 +36430, O36430 +36431, O36431 +36432, O36432 +36433, O36433 +36434, O36434 +36435, O36435 +36436, O36436 +36437, O36437 +36438, O36438 +36439, O36439 +36440, O36440 +36441, O36441 +36442, O36442 +36443, O36443 +36444, O36444 +36445, O36445 +36446, O36446 +36447, O36447 +36448, O36448 +36449, O36449 +36450, O36450 +36451, O36451 +36452, O36452 +36453, O36453 +36454, O36454 +36455, O36455 +36456, O36456 +36457, O36457 +36458, O36458 +36459, O36459 +36460, O36460 +36461, O36461 +36462, O36462 +36463, O36463 +36464, O36464 +36465, O36465 +36466, O36466 +36467, O36467 +36468, O36468 +36469, O36469 +36470, O36470 +36471, O36471 +36472, O36472 +36473, O36473 +36474, O36474 +36475, O36475 +36476, O36476 +36477, O36477 +36478, O36478 +36479, O36479 +36480, O36480 +36481, O36481 +36482, O36482 +36483, O36483 +36484, O36484 +36485, O36485 +36486, O36486 +36487, O36487 +36488, O36488 +36489, O36489 +36490, O36490 +36491, O36491 +36492, O36492 +36493, O36493 +36494, O36494 +36495, O36495 +36496, O36496 +36497, O36497 +36498, O36498 +36499, O36499 +36500, O36500 +36501, O36501 +36502, O36502 +36503, O36503 +36504, O36504 +36505, O36505 +36506, O36506 +36507, O36507 +36508, O36508 +36509, O36509 +36510, O36510 +36511, O36511 +36512, O36512 +36513, O36513 +36514, O36514 +36515, O36515 +36516, O36516 +36517, O36517 +36518, O36518 +36519, O36519 +36520, O36520 +36521, O36521 +36522, O36522 +36523, O36523 +36524, O36524 +36525, O36525 +36526, O36526 +36527, O36527 +36528, O36528 +36529, O36529 +36530, O36530 +36531, O36531 +36532, O36532 +36533, O36533 +36534, O36534 +36535, O36535 +36536, O36536 +36537, O36537 +36538, O36538 +36539, O36539 +36540, O36540 +36541, O36541 +36542, O36542 +36543, O36543 +36544, O36544 +36545, O36545 +36546, O36546 +36547, O36547 +36548, O36548 +36549, O36549 +36550, O36550 +36551, O36551 +36552, O36552 +36553, O36553 +36554, O36554 +36555, O36555 +36556, O36556 +36557, O36557 +36558, O36558 +36559, O36559 +36560, O36560 +36561, O36561 +36562, O36562 +36563, O36563 +36564, O36564 +36565, O36565 +36566, O36566 +36567, O36567 +36568, O36568 +36569, O36569 +36570, O36570 +36571, O36571 +36572, O36572 +36573, O36573 +36574, O36574 +36575, O36575 +36576, O36576 +36577, O36577 +36578, O36578 +36579, O36579 +36580, O36580 +36581, O36581 +36582, O36582 +36583, O36583 +36584, O36584 +36585, O36585 +36586, O36586 +36587, O36587 +36588, O36588 +36589, O36589 +36590, O36590 +36591, O36591 +36592, O36592 +36593, O36593 +36594, O36594 +36595, O36595 +36596, O36596 +36597, O36597 +36598, O36598 +36599, O36599 +36600, O36600 +36601, O36601 +36602, O36602 +36603, O36603 +36604, O36604 +36605, O36605 +36606, O36606 +36607, O36607 +36608, O36608 +36609, O36609 +36610, O36610 +36611, O36611 +36612, O36612 +36613, O36613 +36614, O36614 +36615, O36615 +36616, O36616 +36617, O36617 +36618, O36618 +36619, O36619 +36620, O36620 +36621, O36621 +36622, O36622 +36623, O36623 +36624, O36624 +36625, O36625 +36626, O36626 +36627, O36627 +36628, O36628 +36629, O36629 +36630, O36630 +36631, O36631 +36632, O36632 +36633, O36633 +36634, O36634 +36635, O36635 +36636, O36636 +36637, O36637 +36638, O36638 +36639, O36639 +36640, O36640 +36641, O36641 +36642, O36642 +36643, O36643 +36644, O36644 +36645, O36645 +36646, O36646 +36647, O36647 +36648, O36648 +36649, O36649 +36650, O36650 +36651, O36651 +36652, O36652 +36653, O36653 +36654, O36654 +36655, O36655 +36656, O36656 +36657, O36657 +36658, O36658 +36659, O36659 +36660, O36660 +36661, O36661 +36662, O36662 +36663, O36663 +36664, O36664 +36665, O36665 +36666, O36666 +36667, O36667 +36668, O36668 +36669, O36669 +36670, O36670 +36671, O36671 +36672, O36672 +36673, O36673 +36674, O36674 +36675, O36675 +36676, O36676 +36677, O36677 +36678, O36678 +36679, O36679 +36680, O36680 +36681, O36681 +36682, O36682 +36683, O36683 +36684, O36684 +36685, O36685 +36686, O36686 +36687, O36687 +36688, O36688 +36689, O36689 +36690, O36690 +36691, O36691 +36692, O36692 +36693, O36693 +36694, O36694 +36695, O36695 +36696, O36696 +36697, O36697 +36698, O36698 +36699, O36699 +36700, O36700 +36701, O36701 +36702, O36702 +36703, O36703 +36704, O36704 +36705, O36705 +36706, O36706 +36707, O36707 +36708, O36708 +36709, O36709 +36710, O36710 +36711, O36711 +36712, O36712 +36713, O36713 +36714, O36714 +36715, O36715 +36716, O36716 +36717, O36717 +36718, O36718 +36719, O36719 +36720, O36720 +36721, O36721 +36722, O36722 +36723, O36723 +36724, O36724 +36725, O36725 +36726, O36726 +36727, O36727 +36728, O36728 +36729, O36729 +36730, O36730 +36731, O36731 +36732, O36732 +36733, O36733 +36734, O36734 +36735, O36735 +36736, O36736 +36737, O36737 +36738, O36738 +36739, O36739 +36740, O36740 +36741, O36741 +36742, O36742 +36743, O36743 +36744, O36744 +36745, O36745 +36746, O36746 +36747, O36747 +36748, O36748 +36749, O36749 +36750, O36750 +36751, O36751 +36752, O36752 +36753, O36753 +36754, O36754 +36755, O36755 +36756, O36756 +36757, O36757 +36758, O36758 +36759, O36759 +36760, O36760 +36761, O36761 +36762, O36762 +36763, O36763 +36764, O36764 +36765, O36765 +36766, O36766 +36767, O36767 +36768, O36768 +36769, O36769 +36770, O36770 +36771, O36771 +36772, O36772 +36773, O36773 +36774, O36774 +36775, O36775 +36776, O36776 +36777, O36777 +36778, O36778 +36779, O36779 +36780, O36780 +36781, O36781 +36782, O36782 +36783, O36783 +36784, O36784 +36785, O36785 +36786, O36786 +36787, O36787 +36788, O36788 +36789, O36789 +36790, O36790 +36791, O36791 +36792, O36792 +36793, O36793 +36794, O36794 +36795, O36795 +36796, O36796 +36797, O36797 +36798, O36798 +36799, O36799 +36800, O36800 +36801, O36801 +36802, O36802 +36803, O36803 +36804, O36804 +36805, O36805 +36806, O36806 +36807, O36807 +36808, O36808 +36809, O36809 +36810, O36810 +36811, O36811 +36812, O36812 +36813, O36813 +36814, O36814 +36815, O36815 +36816, O36816 +36817, O36817 +36818, O36818 +36819, O36819 +36820, O36820 +36821, O36821 +36822, O36822 +36823, O36823 +36824, O36824 +36825, O36825 +36826, O36826 +36827, O36827 +36828, O36828 +36829, O36829 +36830, O36830 +36831, O36831 +36832, O36832 +36833, O36833 +36834, O36834 +36835, O36835 +36836, O36836 +36837, O36837 +36838, O36838 +36839, O36839 +36840, O36840 +36841, O36841 +36842, O36842 +36843, O36843 +36844, O36844 +36845, O36845 +36846, O36846 +36847, O36847 +36848, O36848 +36849, O36849 +36850, O36850 +36851, O36851 +36852, O36852 +36853, O36853 +36854, O36854 +36855, O36855 +36856, O36856 +36857, O36857 +36858, O36858 +36859, O36859 +36860, O36860 +36861, O36861 +36862, O36862 +36863, O36863 +36864, O36864 +36865, O36865 +36866, O36866 +36867, O36867 +36868, O36868 +36869, O36869 +36870, O36870 +36871, O36871 +36872, O36872 +36873, O36873 +36874, O36874 +36875, O36875 +36876, O36876 +36877, O36877 +36878, O36878 +36879, O36879 +36880, O36880 +36881, O36881 +36882, O36882 +36883, O36883 +36884, O36884 +36885, O36885 +36886, O36886 +36887, O36887 +36888, O36888 +36889, O36889 +36890, O36890 +36891, O36891 +36892, O36892 +36893, O36893 +36894, O36894 +36895, O36895 +36896, O36896 +36897, O36897 +36898, O36898 +36899, O36899 +36900, O36900 +36901, O36901 +36902, O36902 +36903, O36903 +36904, O36904 +36905, O36905 +36906, O36906 +36907, O36907 +36908, O36908 +36909, O36909 +36910, O36910 +36911, O36911 +36912, O36912 +36913, O36913 +36914, O36914 +36915, O36915 +36916, O36916 +36917, O36917 +36918, O36918 +36919, O36919 +36920, O36920 +36921, O36921 +36922, O36922 +36923, O36923 +36924, O36924 +36925, O36925 +36926, O36926 +36927, O36927 +36928, O36928 +36929, O36929 +36930, O36930 +36931, O36931 +36932, O36932 +36933, O36933 +36934, O36934 +36935, O36935 +36936, O36936 +36937, O36937 +36938, O36938 +36939, O36939 +36940, O36940 +36941, O36941 +36942, O36942 +36943, O36943 +36944, O36944 +36945, O36945 +36946, O36946 +36947, O36947 +36948, O36948 +36949, O36949 +36950, O36950 +36951, O36951 +36952, O36952 +36953, O36953 +36954, O36954 +36955, O36955 +36956, O36956 +36957, O36957 +36958, O36958 +36959, O36959 +36960, O36960 +36961, O36961 +36962, O36962 +36963, O36963 +36964, O36964 +36965, O36965 +36966, O36966 +36967, O36967 +36968, O36968 +36969, O36969 +36970, O36970 +36971, O36971 +36972, O36972 +36973, O36973 +36974, O36974 +36975, O36975 +36976, O36976 +36977, O36977 +36978, O36978 +36979, O36979 +36980, O36980 +36981, O36981 +36982, O36982 +36983, O36983 +36984, O36984 +36985, O36985 +36986, O36986 +36987, O36987 +36988, O36988 +36989, O36989 +36990, O36990 +36991, O36991 +36992, O36992 +36993, O36993 +36994, O36994 +36995, O36995 +36996, O36996 +36997, O36997 +36998, O36998 +36999, O36999 +37000, O37000 +37001, O37001 +37002, O37002 +37003, O37003 +37004, O37004 +37005, O37005 +37006, O37006 +37007, O37007 +37008, O37008 +37009, O37009 +37010, O37010 +37011, O37011 +37012, O37012 +37013, O37013 +37014, O37014 +37015, O37015 +37016, O37016 +37017, O37017 +37018, O37018 +37019, O37019 +37020, O37020 +37021, O37021 +37022, O37022 +37023, O37023 +37024, O37024 +37025, O37025 +37026, O37026 +37027, O37027 +37028, O37028 +37029, O37029 +37030, O37030 +37031, O37031 +37032, O37032 +37033, O37033 +37034, O37034 +37035, O37035 +37036, O37036 +37037, O37037 +37038, O37038 +37039, O37039 +37040, O37040 +37041, O37041 +37042, O37042 +37043, O37043 +37044, O37044 +37045, O37045 +37046, O37046 +37047, O37047 +37048, O37048 +37049, O37049 +37050, O37050 +37051, O37051 +37052, O37052 +37053, O37053 +37054, O37054 +37055, O37055 +37056, O37056 +37057, O37057 +37058, O37058 +37059, O37059 +37060, O37060 +37061, O37061 +37062, O37062 +37063, O37063 +37064, O37064 +37065, O37065 +37066, O37066 +37067, O37067 +37068, O37068 +37069, O37069 +37070, O37070 +37071, O37071 +37072, O37072 +37073, O37073 +37074, O37074 +37075, O37075 +37076, O37076 +37077, O37077 +37078, O37078 +37079, O37079 +37080, O37080 +37081, O37081 +37082, O37082 +37083, O37083 +37084, O37084 +37085, O37085 +37086, O37086 +37087, O37087 +37088, O37088 +37089, O37089 +37090, O37090 +37091, O37091 +37092, O37092 +37093, O37093 +37094, O37094 +37095, O37095 +37096, O37096 +37097, O37097 +37098, O37098 +37099, O37099 +37100, O37100 +37101, O37101 +37102, O37102 +37103, O37103 +37104, O37104 +37105, O37105 +37106, O37106 +37107, O37107 +37108, O37108 +37109, O37109 +37110, O37110 +37111, O37111 +37112, O37112 +37113, O37113 +37114, O37114 +37115, O37115 +37116, O37116 +37117, O37117 +37118, O37118 +37119, O37119 +37120, O37120 +37121, O37121 +37122, O37122 +37123, O37123 +37124, O37124 +37125, O37125 +37126, O37126 +37127, O37127 +37128, O37128 +37129, O37129 +37130, O37130 +37131, O37131 +37132, O37132 +37133, O37133 +37134, O37134 +37135, O37135 +37136, O37136 +37137, O37137 +37138, O37138 +37139, O37139 +37140, O37140 +37141, O37141 +37142, O37142 +37143, O37143 +37144, O37144 +37145, O37145 +37146, O37146 +37147, O37147 +37148, O37148 +37149, O37149 +37150, O37150 +37151, O37151 +37152, O37152 +37153, O37153 +37154, O37154 +37155, O37155 +37156, O37156 +37157, O37157 +37158, O37158 +37159, O37159 +37160, O37160 +37161, O37161 +37162, O37162 +37163, O37163 +37164, O37164 +37165, O37165 +37166, O37166 +37167, O37167 +37168, O37168 +37169, O37169 +37170, O37170 +37171, O37171 +37172, O37172 +37173, O37173 +37174, O37174 +37175, O37175 +37176, O37176 +37177, O37177 +37178, O37178 +37179, O37179 +37180, O37180 +37181, O37181 +37182, O37182 +37183, O37183 +37184, O37184 +37185, O37185 +37186, O37186 +37187, O37187 +37188, O37188 +37189, O37189 +37190, O37190 +37191, O37191 +37192, O37192 +37193, O37193 +37194, O37194 +37195, O37195 +37196, O37196 +37197, O37197 +37198, O37198 +37199, O37199 +37200, O37200 +37201, O37201 +37202, O37202 +37203, O37203 +37204, O37204 +37205, O37205 +37206, O37206 +37207, O37207 +37208, O37208 +37209, O37209 +37210, O37210 +37211, O37211 +37212, O37212 +37213, O37213 +37214, O37214 +37215, O37215 +37216, O37216 +37217, O37217 +37218, O37218 +37219, O37219 +37220, O37220 +37221, O37221 +37222, O37222 +37223, O37223 +37224, O37224 +37225, O37225 +37226, O37226 +37227, O37227 +37228, O37228 +37229, O37229 +37230, O37230 +37231, O37231 +37232, O37232 +37233, O37233 +37234, O37234 +37235, O37235 +37236, O37236 +37237, O37237 +37238, O37238 +37239, O37239 +37240, O37240 +37241, O37241 +37242, O37242 +37243, O37243 +37244, O37244 +37245, O37245 +37246, O37246 +37247, O37247 +37248, O37248 +37249, O37249 +37250, O37250 +37251, O37251 +37252, O37252 +37253, O37253 +37254, O37254 +37255, O37255 +37256, O37256 +37257, O37257 +37258, O37258 +37259, O37259 +37260, O37260 +37261, O37261 +37262, O37262 +37263, O37263 +37264, O37264 +37265, O37265 +37266, O37266 +37267, O37267 +37268, O37268 +37269, O37269 +37270, O37270 +37271, O37271 +37272, O37272 +37273, O37273 +37274, O37274 +37275, O37275 +37276, O37276 +37277, O37277 +37278, O37278 +37279, O37279 +37280, O37280 +37281, O37281 +37282, O37282 +37283, O37283 +37284, O37284 +37285, O37285 +37286, O37286 +37287, O37287 +37288, O37288 +37289, O37289 +37290, O37290 +37291, O37291 +37292, O37292 +37293, O37293 +37294, O37294 +37295, O37295 +37296, O37296 +37297, O37297 +37298, O37298 +37299, O37299 +37300, O37300 +37301, O37301 +37302, O37302 +37303, O37303 +37304, O37304 +37305, O37305 +37306, O37306 +37307, O37307 +37308, O37308 +37309, O37309 +37310, O37310 +37311, O37311 +37312, O37312 +37313, O37313 +37314, O37314 +37315, O37315 +37316, O37316 +37317, O37317 +37318, O37318 +37319, O37319 +37320, O37320 +37321, O37321 +37322, O37322 +37323, O37323 +37324, O37324 +37325, O37325 +37326, O37326 +37327, O37327 +37328, O37328 +37329, O37329 +37330, O37330 +37331, O37331 +37332, O37332 +37333, O37333 +37334, O37334 +37335, O37335 +37336, O37336 +37337, O37337 +37338, O37338 +37339, O37339 +37340, O37340 +37341, O37341 +37342, O37342 +37343, O37343 +37344, O37344 +37345, O37345 +37346, O37346 +37347, O37347 +37348, O37348 +37349, O37349 +37350, O37350 +37351, O37351 +37352, O37352 +37353, O37353 +37354, O37354 +37355, O37355 +37356, O37356 +37357, O37357 +37358, O37358 +37359, O37359 +37360, O37360 +37361, O37361 +37362, O37362 +37363, O37363 +37364, O37364 +37365, O37365 +37366, O37366 +37367, O37367 +37368, O37368 +37369, O37369 +37370, O37370 +37371, O37371 +37372, O37372 +37373, O37373 +37374, O37374 +37375, O37375 +37376, O37376 +37377, O37377 +37378, O37378 +37379, O37379 +37380, O37380 +37381, O37381 +37382, O37382 +37383, O37383 +37384, O37384 +37385, O37385 +37386, O37386 +37387, O37387 +37388, O37388 +37389, O37389 +37390, O37390 +37391, O37391 +37392, O37392 +37393, O37393 +37394, O37394 +37395, O37395 +37396, O37396 +37397, O37397 +37398, O37398 +37399, O37399 +37400, O37400 +37401, O37401 +37402, O37402 +37403, O37403 +37404, O37404 +37405, O37405 +37406, O37406 +37407, O37407 +37408, O37408 +37409, O37409 +37410, O37410 +37411, O37411 +37412, O37412 +37413, O37413 +37414, O37414 +37415, O37415 +37416, O37416 +37417, O37417 +37418, O37418 +37419, O37419 +37420, O37420 +37421, O37421 +37422, O37422 +37423, O37423 +37424, O37424 +37425, O37425 +37426, O37426 +37427, O37427 +37428, O37428 +37429, O37429 +37430, O37430 +37431, O37431 +37432, O37432 +37433, O37433 +37434, O37434 +37435, O37435 +37436, O37436 +37437, O37437 +37438, O37438 +37439, O37439 +37440, O37440 +37441, O37441 +37442, O37442 +37443, O37443 +37444, O37444 +37445, O37445 +37446, O37446 +37447, O37447 +37448, O37448 +37449, O37449 +37450, O37450 +37451, O37451 +37452, O37452 +37453, O37453 +37454, O37454 +37455, O37455 +37456, O37456 +37457, O37457 +37458, O37458 +37459, O37459 +37460, O37460 +37461, O37461 +37462, O37462 +37463, O37463 +37464, O37464 +37465, O37465 +37466, O37466 +37467, O37467 +37468, O37468 +37469, O37469 +37470, O37470 +37471, O37471 +37472, O37472 +37473, O37473 +37474, O37474 +37475, O37475 +37476, O37476 +37477, O37477 +37478, O37478 +37479, O37479 +37480, O37480 +37481, O37481 +37482, O37482 +37483, O37483 +37484, O37484 +37485, O37485 +37486, O37486 +37487, O37487 +37488, O37488 +37489, O37489 +37490, O37490 +37491, O37491 +37492, O37492 +37493, O37493 +37494, O37494 +37495, O37495 +37496, O37496 +37497, O37497 +37498, O37498 +37499, O37499 +37500, O37500 +37501, O37501 +37502, O37502 +37503, O37503 +37504, O37504 +37505, O37505 +37506, O37506 +37507, O37507 +37508, O37508 +37509, O37509 +37510, O37510 +37511, O37511 +37512, O37512 +37513, O37513 +37514, O37514 +37515, O37515 +37516, O37516 +37517, O37517 +37518, O37518 +37519, O37519 +37520, O37520 +37521, O37521 +37522, O37522 +37523, O37523 +37524, O37524 +37525, O37525 +37526, O37526 +37527, O37527 +37528, O37528 +37529, O37529 +37530, O37530 +37531, O37531 +37532, O37532 +37533, O37533 +37534, O37534 +37535, O37535 +37536, O37536 +37537, O37537 +37538, O37538 +37539, O37539 +37540, O37540 +37541, O37541 +37542, O37542 +37543, O37543 +37544, O37544 +37545, O37545 +37546, O37546 +37547, O37547 +37548, O37548 +37549, O37549 +37550, O37550 +37551, O37551 +37552, O37552 +37553, O37553 +37554, O37554 +37555, O37555 +37556, O37556 +37557, O37557 +37558, O37558 +37559, O37559 +37560, O37560 +37561, O37561 +37562, O37562 +37563, O37563 +37564, O37564 +37565, O37565 +37566, O37566 +37567, O37567 +37568, O37568 +37569, O37569 +37570, O37570 +37571, O37571 +37572, O37572 +37573, O37573 +37574, O37574 +37575, O37575 +37576, O37576 +37577, O37577 +37578, O37578 +37579, O37579 +37580, O37580 +37581, O37581 +37582, O37582 +37583, O37583 +37584, O37584 +37585, O37585 +37586, O37586 +37587, O37587 +37588, O37588 +37589, O37589 +37590, O37590 +37591, O37591 +37592, O37592 +37593, O37593 +37594, O37594 +37595, O37595 +37596, O37596 +37597, O37597 +37598, O37598 +37599, O37599 +37600, O37600 +37601, O37601 +37602, O37602 +37603, O37603 +37604, O37604 +37605, O37605 +37606, O37606 +37607, O37607 +37608, O37608 +37609, O37609 +37610, O37610 +37611, O37611 +37612, O37612 +37613, O37613 +37614, O37614 +37615, O37615 +37616, O37616 +37617, O37617 +37618, O37618 +37619, O37619 +37620, O37620 +37621, O37621 +37622, O37622 +37623, O37623 +37624, O37624 +37625, O37625 +37626, O37626 +37627, O37627 +37628, O37628 +37629, O37629 +37630, O37630 +37631, O37631 +37632, O37632 +37633, O37633 +37634, O37634 +37635, O37635 +37636, O37636 +37637, O37637 +37638, O37638 +37639, O37639 +37640, O37640 +37641, O37641 +37642, O37642 +37643, O37643 +37644, O37644 +37645, O37645 +37646, O37646 +37647, O37647 +37648, O37648 +37649, O37649 +37650, O37650 +37651, O37651 +37652, O37652 +37653, O37653 +37654, O37654 +37655, O37655 +37656, O37656 +37657, O37657 +37658, O37658 +37659, O37659 +37660, O37660 +37661, O37661 +37662, O37662 +37663, O37663 +37664, O37664 +37665, O37665 +37666, O37666 +37667, O37667 +37668, O37668 +37669, O37669 +37670, O37670 +37671, O37671 +37672, O37672 +37673, O37673 +37674, O37674 +37675, O37675 +37676, O37676 +37677, O37677 +37678, O37678 +37679, O37679 +37680, O37680 +37681, O37681 +37682, O37682 +37683, O37683 +37684, O37684 +37685, O37685 +37686, O37686 +37687, O37687 +37688, O37688 +37689, O37689 +37690, O37690 +37691, O37691 +37692, O37692 +37693, O37693 +37694, O37694 +37695, O37695 +37696, O37696 +37697, O37697 +37698, O37698 +37699, O37699 +37700, O37700 +37701, O37701 +37702, O37702 +37703, O37703 +37704, O37704 +37705, O37705 +37706, O37706 +37707, O37707 +37708, O37708 +37709, O37709 +37710, O37710 +37711, O37711 +37712, O37712 +37713, O37713 +37714, O37714 +37715, O37715 +37716, O37716 +37717, O37717 +37718, O37718 +37719, O37719 +37720, O37720 +37721, O37721 +37722, O37722 +37723, O37723 +37724, O37724 +37725, O37725 +37726, O37726 +37727, O37727 +37728, O37728 +37729, O37729 +37730, O37730 +37731, O37731 +37732, O37732 +37733, O37733 +37734, O37734 +37735, O37735 +37736, O37736 +37737, O37737 +37738, O37738 +37739, O37739 +37740, O37740 +37741, O37741 +37742, O37742 +37743, O37743 +37744, O37744 +37745, O37745 +37746, O37746 +37747, O37747 +37748, O37748 +37749, O37749 +37750, O37750 +37751, O37751 +37752, O37752 +37753, O37753 +37754, O37754 +37755, O37755 +37756, O37756 +37757, O37757 +37758, O37758 +37759, O37759 +37760, O37760 +37761, O37761 +37762, O37762 +37763, O37763 +37764, O37764 +37765, O37765 +37766, O37766 +37767, O37767 +37768, O37768 +37769, O37769 +37770, O37770 +37771, O37771 +37772, O37772 +37773, O37773 +37774, O37774 +37775, O37775 +37776, O37776 +37777, O37777 +37778, O37778 +37779, O37779 +37780, O37780 +37781, O37781 +37782, O37782 +37783, O37783 +37784, O37784 +37785, O37785 +37786, O37786 +37787, O37787 +37788, O37788 +37789, O37789 +37790, O37790 +37791, O37791 +37792, O37792 +37793, O37793 +37794, O37794 +37795, O37795 +37796, O37796 +37797, O37797 +37798, O37798 +37799, O37799 +37800, O37800 +37801, O37801 +37802, O37802 +37803, O37803 +37804, O37804 +37805, O37805 +37806, O37806 +37807, O37807 +37808, O37808 +37809, O37809 +37810, O37810 +37811, O37811 +37812, O37812 +37813, O37813 +37814, O37814 +37815, O37815 +37816, O37816 +37817, O37817 +37818, O37818 +37819, O37819 +37820, O37820 +37821, O37821 +37822, O37822 +37823, O37823 +37824, O37824 +37825, O37825 +37826, O37826 +37827, O37827 +37828, O37828 +37829, O37829 +37830, O37830 +37831, O37831 +37832, O37832 +37833, O37833 +37834, O37834 +37835, O37835 +37836, O37836 +37837, O37837 +37838, O37838 +37839, O37839 +37840, O37840 +37841, O37841 +37842, O37842 +37843, O37843 +37844, O37844 +37845, O37845 +37846, O37846 +37847, O37847 +37848, O37848 +37849, O37849 +37850, O37850 +37851, O37851 +37852, O37852 +37853, O37853 +37854, O37854 +37855, O37855 +37856, O37856 +37857, O37857 +37858, O37858 +37859, O37859 +37860, O37860 +37861, O37861 +37862, O37862 +37863, O37863 +37864, O37864 +37865, O37865 +37866, O37866 +37867, O37867 +37868, O37868 +37869, O37869 +37870, O37870 +37871, O37871 +37872, O37872 +37873, O37873 +37874, O37874 +37875, O37875 +37876, O37876 +37877, O37877 +37878, O37878 +37879, O37879 +37880, O37880 +37881, O37881 +37882, O37882 +37883, O37883 +37884, O37884 +37885, O37885 +37886, O37886 +37887, O37887 +37888, O37888 +37889, O37889 +37890, O37890 +37891, O37891 +37892, O37892 +37893, O37893 +37894, O37894 +37895, O37895 +37896, O37896 +37897, O37897 +37898, O37898 +37899, O37899 +37900, O37900 +37901, O37901 +37902, O37902 +37903, O37903 +37904, O37904 +37905, O37905 +37906, O37906 +37907, O37907 +37908, O37908 +37909, O37909 +37910, O37910 +37911, O37911 +37912, O37912 +37913, O37913 +37914, O37914 +37915, O37915 +37916, O37916 +37917, O37917 +37918, O37918 +37919, O37919 +37920, O37920 +37921, O37921 +37922, O37922 +37923, O37923 +37924, O37924 +37925, O37925 +37926, O37926 +37927, O37927 +37928, O37928 +37929, O37929 +37930, O37930 +37931, O37931 +37932, O37932 +37933, O37933 +37934, O37934 +37935, O37935 +37936, O37936 +37937, O37937 +37938, O37938 +37939, O37939 +37940, O37940 +37941, O37941 +37942, O37942 +37943, O37943 +37944, O37944 +37945, O37945 +37946, O37946 +37947, O37947 +37948, O37948 +37949, O37949 +37950, O37950 +37951, O37951 +37952, O37952 +37953, O37953 +37954, O37954 +37955, O37955 +37956, O37956 +37957, O37957 +37958, O37958 +37959, O37959 +37960, O37960 +37961, O37961 +37962, O37962 +37963, O37963 +37964, O37964 +37965, O37965 +37966, O37966 +37967, O37967 +37968, O37968 +37969, O37969 +37970, O37970 +37971, O37971 +37972, O37972 +37973, O37973 +37974, O37974 +37975, O37975 +37976, O37976 +37977, O37977 +37978, O37978 +37979, O37979 +37980, O37980 +37981, O37981 +37982, O37982 +37983, O37983 +37984, O37984 +37985, O37985 +37986, O37986 +37987, O37987 +37988, O37988 +37989, O37989 +37990, O37990 +37991, O37991 +37992, O37992 +37993, O37993 +37994, O37994 +37995, O37995 +37996, O37996 +37997, O37997 +37998, O37998 +37999, O37999 +38000, O38000 +38001, O38001 +38002, O38002 +38003, O38003 +38004, O38004 +38005, O38005 +38006, O38006 +38007, O38007 +38008, O38008 +38009, O38009 +38010, O38010 +38011, O38011 +38012, O38012 +38013, O38013 +38014, O38014 +38015, O38015 +38016, O38016 +38017, O38017 +38018, O38018 +38019, O38019 +38020, O38020 +38021, O38021 +38022, O38022 +38023, O38023 +38024, O38024 +38025, O38025 +38026, O38026 +38027, O38027 +38028, O38028 +38029, O38029 +38030, O38030 +38031, O38031 +38032, O38032 +38033, O38033 +38034, O38034 +38035, O38035 +38036, O38036 +38037, O38037 +38038, O38038 +38039, O38039 +38040, O38040 +38041, O38041 +38042, O38042 +38043, O38043 +38044, O38044 +38045, O38045 +38046, O38046 +38047, O38047 +38048, O38048 +38049, O38049 +38050, O38050 +38051, O38051 +38052, O38052 +38053, O38053 +38054, O38054 +38055, O38055 +38056, O38056 +38057, O38057 +38058, O38058 +38059, O38059 +38060, O38060 +38061, O38061 +38062, O38062 +38063, O38063 +38064, O38064 +38065, O38065 +38066, O38066 +38067, O38067 +38068, O38068 +38069, O38069 +38070, O38070 +38071, O38071 +38072, O38072 +38073, O38073 +38074, O38074 +38075, O38075 +38076, O38076 +38077, O38077 +38078, O38078 +38079, O38079 +38080, O38080 +38081, O38081 +38082, O38082 +38083, O38083 +38084, O38084 +38085, O38085 +38086, O38086 +38087, O38087 +38088, O38088 +38089, O38089 +38090, O38090 +38091, O38091 +38092, O38092 +38093, O38093 +38094, O38094 +38095, O38095 +38096, O38096 +38097, O38097 +38098, O38098 +38099, O38099 +38100, O38100 +38101, O38101 +38102, O38102 +38103, O38103 +38104, O38104 +38105, O38105 +38106, O38106 +38107, O38107 +38108, O38108 +38109, O38109 +38110, O38110 +38111, O38111 +38112, O38112 +38113, O38113 +38114, O38114 +38115, O38115 +38116, O38116 +38117, O38117 +38118, O38118 +38119, O38119 +38120, O38120 +38121, O38121 +38122, O38122 +38123, O38123 +38124, O38124 +38125, O38125 +38126, O38126 +38127, O38127 +38128, O38128 +38129, O38129 +38130, O38130 +38131, O38131 +38132, O38132 +38133, O38133 +38134, O38134 +38135, O38135 +38136, O38136 +38137, O38137 +38138, O38138 +38139, O38139 +38140, O38140 +38141, O38141 +38142, O38142 +38143, O38143 +38144, O38144 +38145, O38145 +38146, O38146 +38147, O38147 +38148, O38148 +38149, O38149 +38150, O38150 +38151, O38151 +38152, O38152 +38153, O38153 +38154, O38154 +38155, O38155 +38156, O38156 +38157, O38157 +38158, O38158 +38159, O38159 +38160, O38160 +38161, O38161 +38162, O38162 +38163, O38163 +38164, O38164 +38165, O38165 +38166, O38166 +38167, O38167 +38168, O38168 +38169, O38169 +38170, O38170 +38171, O38171 +38172, O38172 +38173, O38173 +38174, O38174 +38175, O38175 +38176, O38176 +38177, O38177 +38178, O38178 +38179, O38179 +38180, O38180 +38181, O38181 +38182, O38182 +38183, O38183 +38184, O38184 +38185, O38185 +38186, O38186 +38187, O38187 +38188, O38188 +38189, O38189 +38190, O38190 +38191, O38191 +38192, O38192 +38193, O38193 +38194, O38194 +38195, O38195 +38196, O38196 +38197, O38197 +38198, O38198 +38199, O38199 +38200, O38200 +38201, O38201 +38202, O38202 +38203, O38203 +38204, O38204 +38205, O38205 +38206, O38206 +38207, O38207 +38208, O38208 +38209, O38209 +38210, O38210 +38211, O38211 +38212, O38212 +38213, O38213 +38214, O38214 +38215, O38215 +38216, O38216 +38217, O38217 +38218, O38218 +38219, O38219 +38220, O38220 +38221, O38221 +38222, O38222 +38223, O38223 +38224, O38224 +38225, O38225 +38226, O38226 +38227, O38227 +38228, O38228 +38229, O38229 +38230, O38230 +38231, O38231 +38232, O38232 +38233, O38233 +38234, O38234 +38235, O38235 +38236, O38236 +38237, O38237 +38238, O38238 +38239, O38239 +38240, O38240 +38241, O38241 +38242, O38242 +38243, O38243 +38244, O38244 +38245, O38245 +38246, O38246 +38247, O38247 +38248, O38248 +38249, O38249 +38250, O38250 +38251, O38251 +38252, O38252 +38253, O38253 +38254, O38254 +38255, O38255 +38256, O38256 +38257, O38257 +38258, O38258 +38259, O38259 +38260, O38260 +38261, O38261 +38262, O38262 +38263, O38263 +38264, O38264 +38265, O38265 +38266, O38266 +38267, O38267 +38268, O38268 +38269, O38269 +38270, O38270 +38271, O38271 +38272, O38272 +38273, O38273 +38274, O38274 +38275, O38275 +38276, O38276 +38277, O38277 +38278, O38278 +38279, O38279 +38280, O38280 +38281, O38281 +38282, O38282 +38283, O38283 +38284, O38284 +38285, O38285 +38286, O38286 +38287, O38287 +38288, O38288 +38289, O38289 +38290, O38290 +38291, O38291 +38292, O38292 +38293, O38293 +38294, O38294 +38295, O38295 +38296, O38296 +38297, O38297 +38298, O38298 +38299, O38299 +38300, O38300 +38301, O38301 +38302, O38302 +38303, O38303 +38304, O38304 +38305, O38305 +38306, O38306 +38307, O38307 +38308, O38308 +38309, O38309 +38310, O38310 +38311, O38311 +38312, O38312 +38313, O38313 +38314, O38314 +38315, O38315 +38316, O38316 +38317, O38317 +38318, O38318 +38319, O38319 +38320, O38320 +38321, O38321 +38322, O38322 +38323, O38323 +38324, O38324 +38325, O38325 +38326, O38326 +38327, O38327 +38328, O38328 +38329, O38329 +38330, O38330 +38331, O38331 +38332, O38332 +38333, O38333 +38334, O38334 +38335, O38335 +38336, O38336 +38337, O38337 +38338, O38338 +38339, O38339 +38340, O38340 +38341, O38341 +38342, O38342 +38343, O38343 +38344, O38344 +38345, O38345 +38346, O38346 +38347, O38347 +38348, O38348 +38349, O38349 +38350, O38350 +38351, O38351 +38352, O38352 +38353, O38353 +38354, O38354 +38355, O38355 +38356, O38356 +38357, O38357 +38358, O38358 +38359, O38359 +38360, O38360 +38361, O38361 +38362, O38362 +38363, O38363 +38364, O38364 +38365, O38365 +38366, O38366 +38367, O38367 +38368, O38368 +38369, O38369 +38370, O38370 +38371, O38371 +38372, O38372 +38373, O38373 +38374, O38374 +38375, O38375 +38376, O38376 +38377, O38377 +38378, O38378 +38379, O38379 +38380, O38380 +38381, O38381 +38382, O38382 +38383, O38383 +38384, O38384 +38385, O38385 +38386, O38386 +38387, O38387 +38388, O38388 +38389, O38389 +38390, O38390 +38391, O38391 +38392, O38392 +38393, O38393 +38394, O38394 +38395, O38395 +38396, O38396 +38397, O38397 +38398, O38398 +38399, O38399 +38400, O38400 +38401, O38401 +38402, O38402 +38403, O38403 +38404, O38404 +38405, O38405 +38406, O38406 +38407, O38407 +38408, O38408 +38409, O38409 +38410, O38410 +38411, O38411 +38412, O38412 +38413, O38413 +38414, O38414 +38415, O38415 +38416, O38416 +38417, O38417 +38418, O38418 +38419, O38419 +38420, O38420 +38421, O38421 +38422, O38422 +38423, O38423 +38424, O38424 +38425, O38425 +38426, O38426 +38427, O38427 +38428, O38428 +38429, O38429 +38430, O38430 +38431, O38431 +38432, O38432 +38433, O38433 +38434, O38434 +38435, O38435 +38436, O38436 +38437, O38437 +38438, O38438 +38439, O38439 +38440, O38440 +38441, O38441 +38442, O38442 +38443, O38443 +38444, O38444 +38445, O38445 +38446, O38446 +38447, O38447 +38448, O38448 +38449, O38449 +38450, O38450 +38451, O38451 +38452, O38452 +38453, O38453 +38454, O38454 +38455, O38455 +38456, O38456 +38457, O38457 +38458, O38458 +38459, O38459 +38460, O38460 +38461, O38461 +38462, O38462 +38463, O38463 +38464, O38464 +38465, O38465 +38466, O38466 +38467, O38467 +38468, O38468 +38469, O38469 +38470, O38470 +38471, O38471 +38472, O38472 +38473, O38473 +38474, O38474 +38475, O38475 +38476, O38476 +38477, O38477 +38478, O38478 +38479, O38479 +38480, O38480 +38481, O38481 +38482, O38482 +38483, O38483 +38484, O38484 +38485, O38485 +38486, O38486 +38487, O38487 +38488, O38488 +38489, O38489 +38490, O38490 +38491, O38491 +38492, O38492 +38493, O38493 +38494, O38494 +38495, O38495 +38496, O38496 +38497, O38497 +38498, O38498 +38499, O38499 +38500, O38500 +38501, O38501 +38502, O38502 +38503, O38503 +38504, O38504 +38505, O38505 +38506, O38506 +38507, O38507 +38508, O38508 +38509, O38509 +38510, O38510 +38511, O38511 +38512, O38512 +38513, O38513 +38514, O38514 +38515, O38515 +38516, O38516 +38517, O38517 +38518, O38518 +38519, O38519 +38520, O38520 +38521, O38521 +38522, O38522 +38523, O38523 +38524, O38524 +38525, O38525 +38526, O38526 +38527, O38527 +38528, O38528 +38529, O38529 +38530, O38530 +38531, O38531 +38532, O38532 +38533, O38533 +38534, O38534 +38535, O38535 +38536, O38536 +38537, O38537 +38538, O38538 +38539, O38539 +38540, O38540 +38541, O38541 +38542, O38542 +38543, O38543 +38544, O38544 +38545, O38545 +38546, O38546 +38547, O38547 +38548, O38548 +38549, O38549 +38550, O38550 +38551, O38551 +38552, O38552 +38553, O38553 +38554, O38554 +38555, O38555 +38556, O38556 +38557, O38557 +38558, O38558 +38559, O38559 +38560, O38560 +38561, O38561 +38562, O38562 +38563, O38563 +38564, O38564 +38565, O38565 +38566, O38566 +38567, O38567 +38568, O38568 +38569, O38569 +38570, O38570 +38571, O38571 +38572, O38572 +38573, O38573 +38574, O38574 +38575, O38575 +38576, O38576 +38577, O38577 +38578, O38578 +38579, O38579 +38580, O38580 +38581, O38581 +38582, O38582 +38583, O38583 +38584, O38584 +38585, O38585 +38586, O38586 +38587, O38587 +38588, O38588 +38589, O38589 +38590, O38590 +38591, O38591 +38592, O38592 +38593, O38593 +38594, O38594 +38595, O38595 +38596, O38596 +38597, O38597 +38598, O38598 +38599, O38599 +38600, O38600 +38601, O38601 +38602, O38602 +38603, O38603 +38604, O38604 +38605, O38605 +38606, O38606 +38607, O38607 +38608, O38608 +38609, O38609 +38610, O38610 +38611, O38611 +38612, O38612 +38613, O38613 +38614, O38614 +38615, O38615 +38616, O38616 +38617, O38617 +38618, O38618 +38619, O38619 +38620, O38620 +38621, O38621 +38622, O38622 +38623, O38623 +38624, O38624 +38625, O38625 +38626, O38626 +38627, O38627 +38628, O38628 +38629, O38629 +38630, O38630 +38631, O38631 +38632, O38632 +38633, O38633 +38634, O38634 +38635, O38635 +38636, O38636 +38637, O38637 +38638, O38638 +38639, O38639 +38640, O38640 +38641, O38641 +38642, O38642 +38643, O38643 +38644, O38644 +38645, O38645 +38646, O38646 +38647, O38647 +38648, O38648 +38649, O38649 +38650, O38650 +38651, O38651 +38652, O38652 +38653, O38653 +38654, O38654 +38655, O38655 +38656, O38656 +38657, O38657 +38658, O38658 +38659, O38659 +38660, O38660 +38661, O38661 +38662, O38662 +38663, O38663 +38664, O38664 +38665, O38665 +38666, O38666 +38667, O38667 +38668, O38668 +38669, O38669 +38670, O38670 +38671, O38671 +38672, O38672 +38673, O38673 +38674, O38674 +38675, O38675 +38676, O38676 +38677, O38677 +38678, O38678 +38679, O38679 +38680, O38680 +38681, O38681 +38682, O38682 +38683, O38683 +38684, O38684 +38685, O38685 +38686, O38686 +38687, O38687 +38688, O38688 +38689, O38689 +38690, O38690 +38691, O38691 +38692, O38692 +38693, O38693 +38694, O38694 +38695, O38695 +38696, O38696 +38697, O38697 +38698, O38698 +38699, O38699 +38700, O38700 +38701, O38701 +38702, O38702 +38703, O38703 +38704, O38704 +38705, O38705 +38706, O38706 +38707, O38707 +38708, O38708 +38709, O38709 +38710, O38710 +38711, O38711 +38712, O38712 +38713, O38713 +38714, O38714 +38715, O38715 +38716, O38716 +38717, O38717 +38718, O38718 +38719, O38719 +38720, O38720 +38721, O38721 +38722, O38722 +38723, O38723 +38724, O38724 +38725, O38725 +38726, O38726 +38727, O38727 +38728, O38728 +38729, O38729 +38730, O38730 +38731, O38731 +38732, O38732 +38733, O38733 +38734, O38734 +38735, O38735 +38736, O38736 +38737, O38737 +38738, O38738 +38739, O38739 +38740, O38740 +38741, O38741 +38742, O38742 +38743, O38743 +38744, O38744 +38745, O38745 +38746, O38746 +38747, O38747 +38748, O38748 +38749, O38749 +38750, O38750 +38751, O38751 +38752, O38752 +38753, O38753 +38754, O38754 +38755, O38755 +38756, O38756 +38757, O38757 +38758, O38758 +38759, O38759 +38760, O38760 +38761, O38761 +38762, O38762 +38763, O38763 +38764, O38764 +38765, O38765 +38766, O38766 +38767, O38767 +38768, O38768 +38769, O38769 +38770, O38770 +38771, O38771 +38772, O38772 +38773, O38773 +38774, O38774 +38775, O38775 +38776, O38776 +38777, O38777 +38778, O38778 +38779, O38779 +38780, O38780 +38781, O38781 +38782, O38782 +38783, O38783 +38784, O38784 +38785, O38785 +38786, O38786 +38787, O38787 +38788, O38788 +38789, O38789 +38790, O38790 +38791, O38791 +38792, O38792 +38793, O38793 +38794, O38794 +38795, O38795 +38796, O38796 +38797, O38797 +38798, O38798 +38799, O38799 +38800, O38800 +38801, O38801 +38802, O38802 +38803, O38803 +38804, O38804 +38805, O38805 +38806, O38806 +38807, O38807 +38808, O38808 +38809, O38809 +38810, O38810 +38811, O38811 +38812, O38812 +38813, O38813 +38814, O38814 +38815, O38815 +38816, O38816 +38817, O38817 +38818, O38818 +38819, O38819 +38820, O38820 +38821, O38821 +38822, O38822 +38823, O38823 +38824, O38824 +38825, O38825 +38826, O38826 +38827, O38827 +38828, O38828 +38829, O38829 +38830, O38830 +38831, O38831 +38832, O38832 +38833, O38833 +38834, O38834 +38835, O38835 +38836, O38836 +38837, O38837 +38838, O38838 +38839, O38839 +38840, O38840 +38841, O38841 +38842, O38842 +38843, O38843 +38844, O38844 +38845, O38845 +38846, O38846 +38847, O38847 +38848, O38848 +38849, O38849 +38850, O38850 +38851, O38851 +38852, O38852 +38853, O38853 +38854, O38854 +38855, O38855 +38856, O38856 +38857, O38857 +38858, O38858 +38859, O38859 +38860, O38860 +38861, O38861 +38862, O38862 +38863, O38863 +38864, O38864 +38865, O38865 +38866, O38866 +38867, O38867 +38868, O38868 +38869, O38869 +38870, O38870 +38871, O38871 +38872, O38872 +38873, O38873 +38874, O38874 +38875, O38875 +38876, O38876 +38877, O38877 +38878, O38878 +38879, O38879 +38880, O38880 +38881, O38881 +38882, O38882 +38883, O38883 +38884, O38884 +38885, O38885 +38886, O38886 +38887, O38887 +38888, O38888 +38889, O38889 +38890, O38890 +38891, O38891 +38892, O38892 +38893, O38893 +38894, O38894 +38895, O38895 +38896, O38896 +38897, O38897 +38898, O38898 +38899, O38899 +38900, O38900 +38901, O38901 +38902, O38902 +38903, O38903 +38904, O38904 +38905, O38905 +38906, O38906 +38907, O38907 +38908, O38908 +38909, O38909 +38910, O38910 +38911, O38911 +38912, O38912 +38913, O38913 +38914, O38914 +38915, O38915 +38916, O38916 +38917, O38917 +38918, O38918 +38919, O38919 +38920, O38920 +38921, O38921 +38922, O38922 +38923, O38923 +38924, O38924 +38925, O38925 +38926, O38926 +38927, O38927 +38928, O38928 +38929, O38929 +38930, O38930 +38931, O38931 +38932, O38932 +38933, O38933 +38934, O38934 +38935, O38935 +38936, O38936 +38937, O38937 +38938, O38938 +38939, O38939 +38940, O38940 +38941, O38941 +38942, O38942 +38943, O38943 +38944, O38944 +38945, O38945 +38946, O38946 +38947, O38947 +38948, O38948 +38949, O38949 +38950, O38950 +38951, O38951 +38952, O38952 +38953, O38953 +38954, O38954 +38955, O38955 +38956, O38956 +38957, O38957 +38958, O38958 +38959, O38959 +38960, O38960 +38961, O38961 +38962, O38962 +38963, O38963 +38964, O38964 +38965, O38965 +38966, O38966 +38967, O38967 +38968, O38968 +38969, O38969 +38970, O38970 +38971, O38971 +38972, O38972 +38973, O38973 +38974, O38974 +38975, O38975 +38976, O38976 +38977, O38977 +38978, O38978 +38979, O38979 +38980, O38980 +38981, O38981 +38982, O38982 +38983, O38983 +38984, O38984 +38985, O38985 +38986, O38986 +38987, O38987 +38988, O38988 +38989, O38989 +38990, O38990 +38991, O38991 +38992, O38992 +38993, O38993 +38994, O38994 +38995, O38995 +38996, O38996 +38997, O38997 +38998, O38998 +38999, O38999 +39000, O39000 +39001, O39001 +39002, O39002 +39003, O39003 +39004, O39004 +39005, O39005 +39006, O39006 +39007, O39007 +39008, O39008 +39009, O39009 +39010, O39010 +39011, O39011 +39012, O39012 +39013, O39013 +39014, O39014 +39015, O39015 +39016, O39016 +39017, O39017 +39018, O39018 +39019, O39019 +39020, O39020 +39021, O39021 +39022, O39022 +39023, O39023 +39024, O39024 +39025, O39025 +39026, O39026 +39027, O39027 +39028, O39028 +39029, O39029 +39030, O39030 +39031, O39031 +39032, O39032 +39033, O39033 +39034, O39034 +39035, O39035 +39036, O39036 +39037, O39037 +39038, O39038 +39039, O39039 +39040, O39040 +39041, O39041 +39042, O39042 +39043, O39043 +39044, O39044 +39045, O39045 +39046, O39046 +39047, O39047 +39048, O39048 +39049, O39049 +39050, O39050 +39051, O39051 +39052, O39052 +39053, O39053 +39054, O39054 +39055, O39055 +39056, O39056 +39057, O39057 +39058, O39058 +39059, O39059 +39060, O39060 +39061, O39061 +39062, O39062 +39063, O39063 +39064, O39064 +39065, O39065 +39066, O39066 +39067, O39067 +39068, O39068 +39069, O39069 +39070, O39070 +39071, O39071 +39072, O39072 +39073, O39073 +39074, O39074 +39075, O39075 +39076, O39076 +39077, O39077 +39078, O39078 +39079, O39079 +39080, O39080 +39081, O39081 +39082, O39082 +39083, O39083 +39084, O39084 +39085, O39085 +39086, O39086 +39087, O39087 +39088, O39088 +39089, O39089 +39090, O39090 +39091, O39091 +39092, O39092 +39093, O39093 +39094, O39094 +39095, O39095 +39096, O39096 +39097, O39097 +39098, O39098 +39099, O39099 +39100, O39100 +39101, O39101 +39102, O39102 +39103, O39103 +39104, O39104 +39105, O39105 +39106, O39106 +39107, O39107 +39108, O39108 +39109, O39109 +39110, O39110 +39111, O39111 +39112, O39112 +39113, O39113 +39114, O39114 +39115, O39115 +39116, O39116 +39117, O39117 +39118, O39118 +39119, O39119 +39120, O39120 +39121, O39121 +39122, O39122 +39123, O39123 +39124, O39124 +39125, O39125 +39126, O39126 +39127, O39127 +39128, O39128 +39129, O39129 +39130, O39130 +39131, O39131 +39132, O39132 +39133, O39133 +39134, O39134 +39135, O39135 +39136, O39136 +39137, O39137 +39138, O39138 +39139, O39139 +39140, O39140 +39141, O39141 +39142, O39142 +39143, O39143 +39144, O39144 +39145, O39145 +39146, O39146 +39147, O39147 +39148, O39148 +39149, O39149 +39150, O39150 +39151, O39151 +39152, O39152 +39153, O39153 +39154, O39154 +39155, O39155 +39156, O39156 +39157, O39157 +39158, O39158 +39159, O39159 +39160, O39160 +39161, O39161 +39162, O39162 +39163, O39163 +39164, O39164 +39165, O39165 +39166, O39166 +39167, O39167 +39168, O39168 +39169, O39169 +39170, O39170 +39171, O39171 +39172, O39172 +39173, O39173 +39174, O39174 +39175, O39175 +39176, O39176 +39177, O39177 +39178, O39178 +39179, O39179 +39180, O39180 +39181, O39181 +39182, O39182 +39183, O39183 +39184, O39184 +39185, O39185 +39186, O39186 +39187, O39187 +39188, O39188 +39189, O39189 +39190, O39190 +39191, O39191 +39192, O39192 +39193, O39193 +39194, O39194 +39195, O39195 +39196, O39196 +39197, O39197 +39198, O39198 +39199, O39199 +39200, O39200 +39201, O39201 +39202, O39202 +39203, O39203 +39204, O39204 +39205, O39205 +39206, O39206 +39207, O39207 +39208, O39208 +39209, O39209 +39210, O39210 +39211, O39211 +39212, O39212 +39213, O39213 +39214, O39214 +39215, O39215 +39216, O39216 +39217, O39217 +39218, O39218 +39219, O39219 +39220, O39220 +39221, O39221 +39222, O39222 +39223, O39223 +39224, O39224 +39225, O39225 +39226, O39226 +39227, O39227 +39228, O39228 +39229, O39229 +39230, O39230 +39231, O39231 +39232, O39232 +39233, O39233 +39234, O39234 +39235, O39235 +39236, O39236 +39237, O39237 +39238, O39238 +39239, O39239 +39240, O39240 +39241, O39241 +39242, O39242 +39243, O39243 +39244, O39244 +39245, O39245 +39246, O39246 +39247, O39247 +39248, O39248 +39249, O39249 +39250, O39250 +39251, O39251 +39252, O39252 +39253, O39253 +39254, O39254 +39255, O39255 +39256, O39256 +39257, O39257 +39258, O39258 +39259, O39259 +39260, O39260 +39261, O39261 +39262, O39262 +39263, O39263 +39264, O39264 +39265, O39265 +39266, O39266 +39267, O39267 +39268, O39268 +39269, O39269 +39270, O39270 +39271, O39271 +39272, O39272 +39273, O39273 +39274, O39274 +39275, O39275 +39276, O39276 +39277, O39277 +39278, O39278 +39279, O39279 +39280, O39280 +39281, O39281 +39282, O39282 +39283, O39283 +39284, O39284 +39285, O39285 +39286, O39286 +39287, O39287 +39288, O39288 +39289, O39289 +39290, O39290 +39291, O39291 +39292, O39292 +39293, O39293 +39294, O39294 +39295, O39295 +39296, O39296 +39297, O39297 +39298, O39298 +39299, O39299 +39300, O39300 +39301, O39301 +39302, O39302 +39303, O39303 +39304, O39304 +39305, O39305 +39306, O39306 +39307, O39307 +39308, O39308 +39309, O39309 +39310, O39310 +39311, O39311 +39312, O39312 +39313, O39313 +39314, O39314 +39315, O39315 +39316, O39316 +39317, O39317 +39318, O39318 +39319, O39319 +39320, O39320 +39321, O39321 +39322, O39322 +39323, O39323 +39324, O39324 +39325, O39325 +39326, O39326 +39327, O39327 +39328, O39328 +39329, O39329 +39330, O39330 +39331, O39331 +39332, O39332 +39333, O39333 +39334, O39334 +39335, O39335 +39336, O39336 +39337, O39337 +39338, O39338 +39339, O39339 +39340, O39340 +39341, O39341 +39342, O39342 +39343, O39343 +39344, O39344 +39345, O39345 +39346, O39346 +39347, O39347 +39348, O39348 +39349, O39349 +39350, O39350 +39351, O39351 +39352, O39352 +39353, O39353 +39354, O39354 +39355, O39355 +39356, O39356 +39357, O39357 +39358, O39358 +39359, O39359 +39360, O39360 +39361, O39361 +39362, O39362 +39363, O39363 +39364, O39364 +39365, O39365 +39366, O39366 +39367, O39367 +39368, O39368 +39369, O39369 +39370, O39370 +39371, O39371 +39372, O39372 +39373, O39373 +39374, O39374 +39375, O39375 +39376, O39376 +39377, O39377 +39378, O39378 +39379, O39379 +39380, O39380 +39381, O39381 +39382, O39382 +39383, O39383 +39384, O39384 +39385, O39385 +39386, O39386 +39387, O39387 +39388, O39388 +39389, O39389 +39390, O39390 +39391, O39391 +39392, O39392 +39393, O39393 +39394, O39394 +39395, O39395 +39396, O39396 +39397, O39397 +39398, O39398 +39399, O39399 +39400, O39400 +39401, O39401 +39402, O39402 +39403, O39403 +39404, O39404 +39405, O39405 +39406, O39406 +39407, O39407 +39408, O39408 +39409, O39409 +39410, O39410 +39411, O39411 +39412, O39412 +39413, O39413 +39414, O39414 +39415, O39415 +39416, O39416 +39417, O39417 +39418, O39418 +39419, O39419 +39420, O39420 +39421, O39421 +39422, O39422 +39423, O39423 +39424, O39424 +39425, O39425 +39426, O39426 +39427, O39427 +39428, O39428 +39429, O39429 +39430, O39430 +39431, O39431 +39432, O39432 +39433, O39433 +39434, O39434 +39435, O39435 +39436, O39436 +39437, O39437 +39438, O39438 +39439, O39439 +39440, O39440 +39441, O39441 +39442, O39442 +39443, O39443 +39444, O39444 +39445, O39445 +39446, O39446 +39447, O39447 +39448, O39448 +39449, O39449 +39450, O39450 +39451, O39451 +39452, O39452 +39453, O39453 +39454, O39454 +39455, O39455 +39456, O39456 +39457, O39457 +39458, O39458 +39459, O39459 +39460, O39460 +39461, O39461 +39462, O39462 +39463, O39463 +39464, O39464 +39465, O39465 +39466, O39466 +39467, O39467 +39468, O39468 +39469, O39469 +39470, O39470 +39471, O39471 +39472, O39472 +39473, O39473 +39474, O39474 +39475, O39475 +39476, O39476 +39477, O39477 +39478, O39478 +39479, O39479 +39480, O39480 +39481, O39481 +39482, O39482 +39483, O39483 +39484, O39484 +39485, O39485 +39486, O39486 +39487, O39487 +39488, O39488 +39489, O39489 +39490, O39490 +39491, O39491 +39492, O39492 +39493, O39493 +39494, O39494 +39495, O39495 +39496, O39496 +39497, O39497 +39498, O39498 +39499, O39499 +39500, O39500 +39501, O39501 +39502, O39502 +39503, O39503 +39504, O39504 +39505, O39505 +39506, O39506 +39507, O39507 +39508, O39508 +39509, O39509 +39510, O39510 +39511, O39511 +39512, O39512 +39513, O39513 +39514, O39514 +39515, O39515 +39516, O39516 +39517, O39517 +39518, O39518 +39519, O39519 +39520, O39520 +39521, O39521 +39522, O39522 +39523, O39523 +39524, O39524 +39525, O39525 +39526, O39526 +39527, O39527 +39528, O39528 +39529, O39529 +39530, O39530 +39531, O39531 +39532, O39532 +39533, O39533 +39534, O39534 +39535, O39535 +39536, O39536 +39537, O39537 +39538, O39538 +39539, O39539 +39540, O39540 +39541, O39541 +39542, O39542 +39543, O39543 +39544, O39544 +39545, O39545 +39546, O39546 +39547, O39547 +39548, O39548 +39549, O39549 +39550, O39550 +39551, O39551 +39552, O39552 +39553, O39553 +39554, O39554 +39555, O39555 +39556, O39556 +39557, O39557 +39558, O39558 +39559, O39559 +39560, O39560 +39561, O39561 +39562, O39562 +39563, O39563 +39564, O39564 +39565, O39565 +39566, O39566 +39567, O39567 +39568, O39568 +39569, O39569 +39570, O39570 +39571, O39571 +39572, O39572 +39573, O39573 +39574, O39574 +39575, O39575 +39576, O39576 +39577, O39577 +39578, O39578 +39579, O39579 +39580, O39580 +39581, O39581 +39582, O39582 +39583, O39583 +39584, O39584 +39585, O39585 +39586, O39586 +39587, O39587 +39588, O39588 +39589, O39589 +39590, O39590 +39591, O39591 +39592, O39592 +39593, O39593 +39594, O39594 +39595, O39595 +39596, O39596 +39597, O39597 +39598, O39598 +39599, O39599 +39600, O39600 +39601, O39601 +39602, O39602 +39603, O39603 +39604, O39604 +39605, O39605 +39606, O39606 +39607, O39607 +39608, O39608 +39609, O39609 +39610, O39610 +39611, O39611 +39612, O39612 +39613, O39613 +39614, O39614 +39615, O39615 +39616, O39616 +39617, O39617 +39618, O39618 +39619, O39619 +39620, O39620 +39621, O39621 +39622, O39622 +39623, O39623 +39624, O39624 +39625, O39625 +39626, O39626 +39627, O39627 +39628, O39628 +39629, O39629 +39630, O39630 +39631, O39631 +39632, O39632 +39633, O39633 +39634, O39634 +39635, O39635 +39636, O39636 +39637, O39637 +39638, O39638 +39639, O39639 +39640, O39640 +39641, O39641 +39642, O39642 +39643, O39643 +39644, O39644 +39645, O39645 +39646, O39646 +39647, O39647 +39648, O39648 +39649, O39649 +39650, O39650 +39651, O39651 +39652, O39652 +39653, O39653 +39654, O39654 +39655, O39655 +39656, O39656 +39657, O39657 +39658, O39658 +39659, O39659 +39660, O39660 +39661, O39661 +39662, O39662 +39663, O39663 +39664, O39664 +39665, O39665 +39666, O39666 +39667, O39667 +39668, O39668 +39669, O39669 +39670, O39670 +39671, O39671 +39672, O39672 +39673, O39673 +39674, O39674 +39675, O39675 +39676, O39676 +39677, O39677 +39678, O39678 +39679, O39679 +39680, O39680 +39681, O39681 +39682, O39682 +39683, O39683 +39684, O39684 +39685, O39685 +39686, O39686 +39687, O39687 +39688, O39688 +39689, O39689 +39690, O39690 +39691, O39691 +39692, O39692 +39693, O39693 +39694, O39694 +39695, O39695 +39696, O39696 +39697, O39697 +39698, O39698 +39699, O39699 +39700, O39700 +39701, O39701 +39702, O39702 +39703, O39703 +39704, O39704 +39705, O39705 +39706, O39706 +39707, O39707 +39708, O39708 +39709, O39709 +39710, O39710 +39711, O39711 +39712, O39712 +39713, O39713 +39714, O39714 +39715, O39715 +39716, O39716 +39717, O39717 +39718, O39718 +39719, O39719 +39720, O39720 +39721, O39721 +39722, O39722 +39723, O39723 +39724, O39724 +39725, O39725 +39726, O39726 +39727, O39727 +39728, O39728 +39729, O39729 +39730, O39730 +39731, O39731 +39732, O39732 +39733, O39733 +39734, O39734 +39735, O39735 +39736, O39736 +39737, O39737 +39738, O39738 +39739, O39739 +39740, O39740 +39741, O39741 +39742, O39742 +39743, O39743 +39744, O39744 +39745, O39745 +39746, O39746 +39747, O39747 +39748, O39748 +39749, O39749 +39750, O39750 +39751, O39751 +39752, O39752 +39753, O39753 +39754, O39754 +39755, O39755 +39756, O39756 +39757, O39757 +39758, O39758 +39759, O39759 +39760, O39760 +39761, O39761 +39762, O39762 +39763, O39763 +39764, O39764 +39765, O39765 +39766, O39766 +39767, O39767 +39768, O39768 +39769, O39769 +39770, O39770 +39771, O39771 +39772, O39772 +39773, O39773 +39774, O39774 +39775, O39775 +39776, O39776 +39777, O39777 +39778, O39778 +39779, O39779 +39780, O39780 +39781, O39781 +39782, O39782 +39783, O39783 +39784, O39784 +39785, O39785 +39786, O39786 +39787, O39787 +39788, O39788 +39789, O39789 +39790, O39790 +39791, O39791 +39792, O39792 +39793, O39793 +39794, O39794 +39795, O39795 +39796, O39796 +39797, O39797 +39798, O39798 +39799, O39799 +39800, O39800 +39801, O39801 +39802, O39802 +39803, O39803 +39804, O39804 +39805, O39805 +39806, O39806 +39807, O39807 +39808, O39808 +39809, O39809 +39810, O39810 +39811, O39811 +39812, O39812 +39813, O39813 +39814, O39814 +39815, O39815 +39816, O39816 +39817, O39817 +39818, O39818 +39819, O39819 +39820, O39820 +39821, O39821 +39822, O39822 +39823, O39823 +39824, O39824 +39825, O39825 +39826, O39826 +39827, O39827 +39828, O39828 +39829, O39829 +39830, O39830 +39831, O39831 +39832, O39832 +39833, O39833 +39834, O39834 +39835, O39835 +39836, O39836 +39837, O39837 +39838, O39838 +39839, O39839 +39840, O39840 +39841, O39841 +39842, O39842 +39843, O39843 +39844, O39844 +39845, O39845 +39846, O39846 +39847, O39847 +39848, O39848 +39849, O39849 +39850, O39850 +39851, O39851 +39852, O39852 +39853, O39853 +39854, O39854 +39855, O39855 +39856, O39856 +39857, O39857 +39858, O39858 +39859, O39859 +39860, O39860 +39861, O39861 +39862, O39862 +39863, O39863 +39864, O39864 +39865, O39865 +39866, O39866 +39867, O39867 +39868, O39868 +39869, O39869 +39870, O39870 +39871, O39871 +39872, O39872 +39873, O39873 +39874, O39874 +39875, O39875 +39876, O39876 +39877, O39877 +39878, O39878 +39879, O39879 +39880, O39880 +39881, O39881 +39882, O39882 +39883, O39883 +39884, O39884 +39885, O39885 +39886, O39886 +39887, O39887 +39888, O39888 +39889, O39889 +39890, O39890 +39891, O39891 +39892, O39892 +39893, O39893 +39894, O39894 +39895, O39895 +39896, O39896 +39897, O39897 +39898, O39898 +39899, O39899 +39900, O39900 +39901, O39901 +39902, O39902 +39903, O39903 +39904, O39904 +39905, O39905 +39906, O39906 +39907, O39907 +39908, O39908 +39909, O39909 +39910, O39910 +39911, O39911 +39912, O39912 +39913, O39913 +39914, O39914 +39915, O39915 +39916, O39916 +39917, O39917 +39918, O39918 +39919, O39919 +39920, O39920 +39921, O39921 +39922, O39922 +39923, O39923 +39924, O39924 +39925, O39925 +39926, O39926 +39927, O39927 +39928, O39928 +39929, O39929 +39930, O39930 +39931, O39931 +39932, O39932 +39933, O39933 +39934, O39934 +39935, O39935 +39936, O39936 +39937, O39937 +39938, O39938 +39939, O39939 +39940, O39940 +39941, O39941 +39942, O39942 +39943, O39943 +39944, O39944 +39945, O39945 +39946, O39946 +39947, O39947 +39948, O39948 +39949, O39949 +39950, O39950 +39951, O39951 +39952, O39952 +39953, O39953 +39954, O39954 +39955, O39955 +39956, O39956 +39957, O39957 +39958, O39958 +39959, O39959 +39960, O39960 +39961, O39961 +39962, O39962 +39963, O39963 +39964, O39964 +39965, O39965 +39966, O39966 +39967, O39967 +39968, O39968 +39969, O39969 +39970, O39970 +39971, O39971 +39972, O39972 +39973, O39973 +39974, O39974 +39975, O39975 +39976, O39976 +39977, O39977 +39978, O39978 +39979, O39979 +39980, O39980 +39981, O39981 +39982, O39982 +39983, O39983 +39984, O39984 +39985, O39985 +39986, O39986 +39987, O39987 +39988, O39988 +39989, O39989 +39990, O39990 +39991, O39991 +39992, O39992 +39993, O39993 +39994, O39994 +39995, O39995 +39996, O39996 +39997, O39997 +39998, O39998 +39999, O39999 +40000, O40000 +40001, O40001 +40002, O40002 +40003, O40003 +40004, O40004 +40005, O40005 +40006, O40006 +40007, O40007 +40008, O40008 +40009, O40009 +40010, O40010 +40011, O40011 +40012, O40012 +40013, O40013 +40014, O40014 +40015, O40015 +40016, O40016 +40017, O40017 +40018, O40018 +40019, O40019 +40020, O40020 +40021, O40021 +40022, O40022 +40023, O40023 +40024, O40024 +40025, O40025 +40026, O40026 +40027, O40027 +40028, O40028 +40029, O40029 +40030, O40030 +40031, O40031 +40032, O40032 +40033, O40033 +40034, O40034 +40035, O40035 +40036, O40036 +40037, O40037 +40038, O40038 +40039, O40039 +40040, O40040 +40041, O40041 +40042, O40042 +40043, O40043 +40044, O40044 +40045, O40045 +40046, O40046 +40047, O40047 +40048, O40048 +40049, O40049 +40050, O40050 +40051, O40051 +40052, O40052 +40053, O40053 +40054, O40054 +40055, O40055 +40056, O40056 +40057, O40057 +40058, O40058 +40059, O40059 +40060, O40060 +40061, O40061 +40062, O40062 +40063, O40063 +40064, O40064 +40065, O40065 +40066, O40066 +40067, O40067 +40068, O40068 +40069, O40069 +40070, O40070 +40071, O40071 +40072, O40072 +40073, O40073 +40074, O40074 +40075, O40075 +40076, O40076 +40077, O40077 +40078, O40078 +40079, O40079 +40080, O40080 +40081, O40081 +40082, O40082 +40083, O40083 +40084, O40084 +40085, O40085 +40086, O40086 +40087, O40087 +40088, O40088 +40089, O40089 +40090, O40090 +40091, O40091 +40092, O40092 +40093, O40093 +40094, O40094 +40095, O40095 +40096, O40096 +40097, O40097 +40098, O40098 +40099, O40099 +40100, O40100 +40101, O40101 +40102, O40102 +40103, O40103 +40104, O40104 +40105, O40105 +40106, O40106 +40107, O40107 +40108, O40108 +40109, O40109 +40110, O40110 +40111, O40111 +40112, O40112 +40113, O40113 +40114, O40114 +40115, O40115 +40116, O40116 +40117, O40117 +40118, O40118 +40119, O40119 +40120, O40120 +40121, O40121 +40122, O40122 +40123, O40123 +40124, O40124 +40125, O40125 +40126, O40126 +40127, O40127 +40128, O40128 +40129, O40129 +40130, O40130 +40131, O40131 +40132, O40132 +40133, O40133 +40134, O40134 +40135, O40135 +40136, O40136 +40137, O40137 +40138, O40138 +40139, O40139 +40140, O40140 +40141, O40141 +40142, O40142 +40143, O40143 +40144, O40144 +40145, O40145 +40146, O40146 +40147, O40147 +40148, O40148 +40149, O40149 +40150, O40150 +40151, O40151 +40152, O40152 +40153, O40153 +40154, O40154 +40155, O40155 +40156, O40156 +40157, O40157 +40158, O40158 +40159, O40159 +40160, O40160 +40161, O40161 +40162, O40162 +40163, O40163 +40164, O40164 +40165, O40165 +40166, O40166 +40167, O40167 +40168, O40168 +40169, O40169 +40170, O40170 +40171, O40171 +40172, O40172 +40173, O40173 +40174, O40174 +40175, O40175 +40176, O40176 +40177, O40177 +40178, O40178 +40179, O40179 +40180, O40180 +40181, O40181 +40182, O40182 +40183, O40183 +40184, O40184 +40185, O40185 +40186, O40186 +40187, O40187 +40188, O40188 +40189, O40189 +40190, O40190 +40191, O40191 +40192, O40192 +40193, O40193 +40194, O40194 +40195, O40195 +40196, O40196 +40197, O40197 +40198, O40198 +40199, O40199 +40200, O40200 +40201, O40201 +40202, O40202 +40203, O40203 +40204, O40204 +40205, O40205 +40206, O40206 +40207, O40207 +40208, O40208 +40209, O40209 +40210, O40210 +40211, O40211 +40212, O40212 +40213, O40213 +40214, O40214 +40215, O40215 +40216, O40216 +40217, O40217 +40218, O40218 +40219, O40219 +40220, O40220 +40221, O40221 +40222, O40222 +40223, O40223 +40224, O40224 +40225, O40225 +40226, O40226 +40227, O40227 +40228, O40228 +40229, O40229 +40230, O40230 +40231, O40231 +40232, O40232 +40233, O40233 +40234, O40234 +40235, O40235 +40236, O40236 +40237, O40237 +40238, O40238 +40239, O40239 +40240, O40240 +40241, O40241 +40242, O40242 +40243, O40243 +40244, O40244 +40245, O40245 +40246, O40246 +40247, O40247 +40248, O40248 +40249, O40249 +40250, O40250 +40251, O40251 +40252, O40252 +40253, O40253 +40254, O40254 +40255, O40255 +40256, O40256 +40257, O40257 +40258, O40258 +40259, O40259 +40260, O40260 +40261, O40261 +40262, O40262 +40263, O40263 +40264, O40264 +40265, O40265 +40266, O40266 +40267, O40267 +40268, O40268 +40269, O40269 +40270, O40270 +40271, O40271 +40272, O40272 +40273, O40273 +40274, O40274 +40275, O40275 +40276, O40276 +40277, O40277 +40278, O40278 +40279, O40279 +40280, O40280 +40281, O40281 +40282, O40282 +40283, O40283 +40284, O40284 +40285, O40285 +40286, O40286 +40287, O40287 +40288, O40288 +40289, O40289 +40290, O40290 +40291, O40291 +40292, O40292 +40293, O40293 +40294, O40294 +40295, O40295 +40296, O40296 +40297, O40297 +40298, O40298 +40299, O40299 +40300, O40300 +40301, O40301 +40302, O40302 +40303, O40303 +40304, O40304 +40305, O40305 +40306, O40306 +40307, O40307 +40308, O40308 +40309, O40309 +40310, O40310 +40311, O40311 +40312, O40312 +40313, O40313 +40314, O40314 +40315, O40315 +40316, O40316 +40317, O40317 +40318, O40318 +40319, O40319 +40320, O40320 +40321, O40321 +40322, O40322 +40323, O40323 +40324, O40324 +40325, O40325 +40326, O40326 +40327, O40327 +40328, O40328 +40329, O40329 +40330, O40330 +40331, O40331 +40332, O40332 +40333, O40333 +40334, O40334 +40335, O40335 +40336, O40336 +40337, O40337 +40338, O40338 +40339, O40339 +40340, O40340 +40341, O40341 +40342, O40342 +40343, O40343 +40344, O40344 +40345, O40345 +40346, O40346 +40347, O40347 +40348, O40348 +40349, O40349 +40350, O40350 +40351, O40351 +40352, O40352 +40353, O40353 +40354, O40354 +40355, O40355 +40356, O40356 +40357, O40357 +40358, O40358 +40359, O40359 +40360, O40360 +40361, O40361 +40362, O40362 +40363, O40363 +40364, O40364 +40365, O40365 +40366, O40366 +40367, O40367 +40368, O40368 +40369, O40369 +40370, O40370 +40371, O40371 +40372, O40372 +40373, O40373 +40374, O40374 +40375, O40375 +40376, O40376 +40377, O40377 +40378, O40378 +40379, O40379 +40380, O40380 +40381, O40381 +40382, O40382 +40383, O40383 +40384, O40384 +40385, O40385 +40386, O40386 +40387, O40387 +40388, O40388 +40389, O40389 +40390, O40390 +40391, O40391 +40392, O40392 +40393, O40393 +40394, O40394 +40395, O40395 +40396, O40396 +40397, O40397 +40398, O40398 +40399, O40399 +40400, O40400 +40401, O40401 +40402, O40402 +40403, O40403 +40404, O40404 +40405, O40405 +40406, O40406 +40407, O40407 +40408, O40408 +40409, O40409 +40410, O40410 +40411, O40411 +40412, O40412 +40413, O40413 +40414, O40414 +40415, O40415 +40416, O40416 +40417, O40417 +40418, O40418 +40419, O40419 +40420, O40420 +40421, O40421 +40422, O40422 +40423, O40423 +40424, O40424 +40425, O40425 +40426, O40426 +40427, O40427 +40428, O40428 +40429, O40429 +40430, O40430 +40431, O40431 +40432, O40432 +40433, O40433 +40434, O40434 +40435, O40435 +40436, O40436 +40437, O40437 +40438, O40438 +40439, O40439 +40440, O40440 +40441, O40441 +40442, O40442 +40443, O40443 +40444, O40444 +40445, O40445 +40446, O40446 +40447, O40447 +40448, O40448 +40449, O40449 +40450, O40450 +40451, O40451 +40452, O40452 +40453, O40453 +40454, O40454 +40455, O40455 +40456, O40456 +40457, O40457 +40458, O40458 +40459, O40459 +40460, O40460 +40461, O40461 +40462, O40462 +40463, O40463 +40464, O40464 +40465, O40465 +40466, O40466 +40467, O40467 +40468, O40468 +40469, O40469 +40470, O40470 +40471, O40471 +40472, O40472 +40473, O40473 +40474, O40474 +40475, O40475 +40476, O40476 +40477, O40477 +40478, O40478 +40479, O40479 +40480, O40480 +40481, O40481 +40482, O40482 +40483, O40483 +40484, O40484 +40485, O40485 +40486, O40486 +40487, O40487 +40488, O40488 +40489, O40489 +40490, O40490 +40491, O40491 +40492, O40492 +40493, O40493 +40494, O40494 +40495, O40495 +40496, O40496 +40497, O40497 +40498, O40498 +40499, O40499 +40500, O40500 +40501, O40501 +40502, O40502 +40503, O40503 +40504, O40504 +40505, O40505 +40506, O40506 +40507, O40507 +40508, O40508 +40509, O40509 +40510, O40510 +40511, O40511 +40512, O40512 +40513, O40513 +40514, O40514 +40515, O40515 +40516, O40516 +40517, O40517 +40518, O40518 +40519, O40519 +40520, O40520 +40521, O40521 +40522, O40522 +40523, O40523 +40524, O40524 +40525, O40525 +40526, O40526 +40527, O40527 +40528, O40528 +40529, O40529 +40530, O40530 +40531, O40531 +40532, O40532 +40533, O40533 +40534, O40534 +40535, O40535 +40536, O40536 +40537, O40537 +40538, O40538 +40539, O40539 +40540, O40540 +40541, O40541 +40542, O40542 +40543, O40543 +40544, O40544 +40545, O40545 +40546, O40546 +40547, O40547 +40548, O40548 +40549, O40549 +40550, O40550 +40551, O40551 +40552, O40552 +40553, O40553 +40554, O40554 +40555, O40555 +40556, O40556 +40557, O40557 +40558, O40558 +40559, O40559 +40560, O40560 +40561, O40561 +40562, O40562 +40563, O40563 +40564, O40564 +40565, O40565 +40566, O40566 +40567, O40567 +40568, O40568 +40569, O40569 +40570, O40570 +40571, O40571 +40572, O40572 +40573, O40573 +40574, O40574 +40575, O40575 +40576, O40576 +40577, O40577 +40578, O40578 +40579, O40579 +40580, O40580 +40581, O40581 +40582, O40582 +40583, O40583 +40584, O40584 +40585, O40585 +40586, O40586 +40587, O40587 +40588, O40588 +40589, O40589 +40590, O40590 +40591, O40591 +40592, O40592 +40593, O40593 +40594, O40594 +40595, O40595 +40596, O40596 +40597, O40597 +40598, O40598 +40599, O40599 +40600, O40600 +40601, O40601 +40602, O40602 +40603, O40603 +40604, O40604 +40605, O40605 +40606, O40606 +40607, O40607 +40608, O40608 +40609, O40609 +40610, O40610 +40611, O40611 +40612, O40612 +40613, O40613 +40614, O40614 +40615, O40615 +40616, O40616 +40617, O40617 +40618, O40618 +40619, O40619 +40620, O40620 +40621, O40621 +40622, O40622 +40623, O40623 +40624, O40624 +40625, O40625 +40626, O40626 +40627, O40627 +40628, O40628 +40629, O40629 +40630, O40630 +40631, O40631 +40632, O40632 +40633, O40633 +40634, O40634 +40635, O40635 +40636, O40636 +40637, O40637 +40638, O40638 +40639, O40639 +40640, O40640 +40641, O40641 +40642, O40642 +40643, O40643 +40644, O40644 +40645, O40645 +40646, O40646 +40647, O40647 +40648, O40648 +40649, O40649 +40650, O40650 +40651, O40651 +40652, O40652 +40653, O40653 +40654, O40654 +40655, O40655 +40656, O40656 +40657, O40657 +40658, O40658 +40659, O40659 +40660, O40660 +40661, O40661 +40662, O40662 +40663, O40663 +40664, O40664 +40665, O40665 +40666, O40666 +40667, O40667 +40668, O40668 +40669, O40669 +40670, O40670 +40671, O40671 +40672, O40672 +40673, O40673 +40674, O40674 +40675, O40675 +40676, O40676 +40677, O40677 +40678, O40678 +40679, O40679 +40680, O40680 +40681, O40681 +40682, O40682 +40683, O40683 +40684, O40684 +40685, O40685 +40686, O40686 +40687, O40687 +40688, O40688 +40689, O40689 +40690, O40690 +40691, O40691 +40692, O40692 +40693, O40693 +40694, O40694 +40695, O40695 +40696, O40696 +40697, O40697 +40698, O40698 +40699, O40699 +40700, O40700 +40701, O40701 +40702, O40702 +40703, O40703 +40704, O40704 +40705, O40705 +40706, O40706 +40707, O40707 +40708, O40708 +40709, O40709 +40710, O40710 +40711, O40711 +40712, O40712 +40713, O40713 +40714, O40714 +40715, O40715 +40716, O40716 +40717, O40717 +40718, O40718 +40719, O40719 +40720, O40720 +40721, O40721 +40722, O40722 +40723, O40723 +40724, O40724 +40725, O40725 +40726, O40726 +40727, O40727 +40728, O40728 +40729, O40729 +40730, O40730 +40731, O40731 +40732, O40732 +40733, O40733 +40734, O40734 +40735, O40735 +40736, O40736 +40737, O40737 +40738, O40738 +40739, O40739 +40740, O40740 +40741, O40741 +40742, O40742 +40743, O40743 +40744, O40744 +40745, O40745 +40746, O40746 +40747, O40747 +40748, O40748 +40749, O40749 +40750, O40750 +40751, O40751 +40752, O40752 +40753, O40753 +40754, O40754 +40755, O40755 +40756, O40756 +40757, O40757 +40758, O40758 +40759, O40759 +40760, O40760 +40761, O40761 +40762, O40762 +40763, O40763 +40764, O40764 +40765, O40765 +40766, O40766 +40767, O40767 +40768, O40768 +40769, O40769 +40770, O40770 +40771, O40771 +40772, O40772 +40773, O40773 +40774, O40774 +40775, O40775 +40776, O40776 +40777, O40777 +40778, O40778 +40779, O40779 +40780, O40780 +40781, O40781 +40782, O40782 +40783, O40783 +40784, O40784 +40785, O40785 +40786, O40786 +40787, O40787 +40788, O40788 +40789, O40789 +40790, O40790 +40791, O40791 +40792, O40792 +40793, O40793 +40794, O40794 +40795, O40795 +40796, O40796 +40797, O40797 +40798, O40798 +40799, O40799 +40800, O40800 +40801, O40801 +40802, O40802 +40803, O40803 +40804, O40804 +40805, O40805 +40806, O40806 +40807, O40807 +40808, O40808 +40809, O40809 +40810, O40810 +40811, O40811 +40812, O40812 +40813, O40813 +40814, O40814 +40815, O40815 +40816, O40816 +40817, O40817 +40818, O40818 +40819, O40819 +40820, O40820 +40821, O40821 +40822, O40822 +40823, O40823 +40824, O40824 +40825, O40825 +40826, O40826 +40827, O40827 +40828, O40828 +40829, O40829 +40830, O40830 +40831, O40831 +40832, O40832 +40833, O40833 +40834, O40834 +40835, O40835 +40836, O40836 +40837, O40837 +40838, O40838 +40839, O40839 +40840, O40840 +40841, O40841 +40842, O40842 +40843, O40843 +40844, O40844 +40845, O40845 +40846, O40846 +40847, O40847 +40848, O40848 +40849, O40849 +40850, O40850 +40851, O40851 +40852, O40852 +40853, O40853 +40854, O40854 +40855, O40855 +40856, O40856 +40857, O40857 +40858, O40858 +40859, O40859 +40860, O40860 +40861, O40861 +40862, O40862 +40863, O40863 +40864, O40864 +40865, O40865 +40866, O40866 +40867, O40867 +40868, O40868 +40869, O40869 +40870, O40870 +40871, O40871 +40872, O40872 +40873, O40873 +40874, O40874 +40875, O40875 +40876, O40876 +40877, O40877 +40878, O40878 +40879, O40879 +40880, O40880 +40881, O40881 +40882, O40882 +40883, O40883 +40884, O40884 +40885, O40885 +40886, O40886 +40887, O40887 +40888, O40888 +40889, O40889 +40890, O40890 +40891, O40891 +40892, O40892 +40893, O40893 +40894, O40894 +40895, O40895 +40896, O40896 +40897, O40897 +40898, O40898 +40899, O40899 +40900, O40900 +40901, O40901 +40902, O40902 +40903, O40903 +40904, O40904 +40905, O40905 +40906, O40906 +40907, O40907 +40908, O40908 +40909, O40909 +40910, O40910 +40911, O40911 +40912, O40912 +40913, O40913 +40914, O40914 +40915, O40915 +40916, O40916 +40917, O40917 +40918, O40918 +40919, O40919 +40920, O40920 +40921, O40921 +40922, O40922 +40923, O40923 +40924, O40924 +40925, O40925 +40926, O40926 +40927, O40927 +40928, O40928 +40929, O40929 +40930, O40930 +40931, O40931 +40932, O40932 +40933, O40933 +40934, O40934 +40935, O40935 +40936, O40936 +40937, O40937 +40938, O40938 +40939, O40939 +40940, O40940 +40941, O40941 +40942, O40942 +40943, O40943 +40944, O40944 +40945, O40945 +40946, O40946 +40947, O40947 +40948, O40948 +40949, O40949 +40950, O40950 +40951, O40951 +40952, O40952 +40953, O40953 +40954, O40954 +40955, O40955 +40956, O40956 +40957, O40957 +40958, O40958 +40959, O40959 +40960, O40960 +40961, O40961 +40962, O40962 +40963, O40963 +40964, O40964 +40965, O40965 +40966, O40966 +40967, O40967 +40968, O40968 +40969, O40969 +40970, O40970 +40971, O40971 +40972, O40972 +40973, O40973 +40974, O40974 +40975, O40975 +40976, O40976 +40977, O40977 +40978, O40978 +40979, O40979 +40980, O40980 +40981, O40981 +40982, O40982 +40983, O40983 +40984, O40984 +40985, O40985 +40986, O40986 +40987, O40987 +40988, O40988 +40989, O40989 +40990, O40990 +40991, O40991 +40992, O40992 +40993, O40993 +40994, O40994 +40995, O40995 +40996, O40996 +40997, O40997 +40998, O40998 +40999, O40999 +41000, O41000 +41001, O41001 +41002, O41002 +41003, O41003 +41004, O41004 +41005, O41005 +41006, O41006 +41007, O41007 +41008, O41008 +41009, O41009 +41010, O41010 +41011, O41011 +41012, O41012 +41013, O41013 +41014, O41014 +41015, O41015 +41016, O41016 +41017, O41017 +41018, O41018 +41019, O41019 +41020, O41020 +41021, O41021 +41022, O41022 +41023, O41023 +41024, O41024 +41025, O41025 +41026, O41026 +41027, O41027 +41028, O41028 +41029, O41029 +41030, O41030 +41031, O41031 +41032, O41032 +41033, O41033 +41034, O41034 +41035, O41035 +41036, O41036 +41037, O41037 +41038, O41038 +41039, O41039 +41040, O41040 +41041, O41041 +41042, O41042 +41043, O41043 +41044, O41044 +41045, O41045 +41046, O41046 +41047, O41047 +41048, O41048 +41049, O41049 +41050, O41050 +41051, O41051 +41052, O41052 +41053, O41053 +41054, O41054 +41055, O41055 +41056, O41056 +41057, O41057 +41058, O41058 +41059, O41059 +41060, O41060 +41061, O41061 +41062, O41062 +41063, O41063 +41064, O41064 +41065, O41065 +41066, O41066 +41067, O41067 +41068, O41068 +41069, O41069 +41070, O41070 +41071, O41071 +41072, O41072 +41073, O41073 +41074, O41074 +41075, O41075 +41076, O41076 +41077, O41077 +41078, O41078 +41079, O41079 +41080, O41080 +41081, O41081 +41082, O41082 +41083, O41083 +41084, O41084 +41085, O41085 +41086, O41086 +41087, O41087 +41088, O41088 +41089, O41089 +41090, O41090 +41091, O41091 +41092, O41092 +41093, O41093 +41094, O41094 +41095, O41095 +41096, O41096 +41097, O41097 +41098, O41098 +41099, O41099 +41100, O41100 +41101, O41101 +41102, O41102 +41103, O41103 +41104, O41104 +41105, O41105 +41106, O41106 +41107, O41107 +41108, O41108 +41109, O41109 +41110, O41110 +41111, O41111 +41112, O41112 +41113, O41113 +41114, O41114 +41115, O41115 +41116, O41116 +41117, O41117 +41118, O41118 +41119, O41119 +41120, O41120 +41121, O41121 +41122, O41122 +41123, O41123 +41124, O41124 +41125, O41125 +41126, O41126 +41127, O41127 +41128, O41128 +41129, O41129 +41130, O41130 +41131, O41131 +41132, O41132 +41133, O41133 +41134, O41134 +41135, O41135 +41136, O41136 +41137, O41137 +41138, O41138 +41139, O41139 +41140, O41140 +41141, O41141 +41142, O41142 +41143, O41143 +41144, O41144 +41145, O41145 +41146, O41146 +41147, O41147 +41148, O41148 +41149, O41149 +41150, O41150 +41151, O41151 +41152, O41152 +41153, O41153 +41154, O41154 +41155, O41155 +41156, O41156 +41157, O41157 +41158, O41158 +41159, O41159 +41160, O41160 +41161, O41161 +41162, O41162 +41163, O41163 +41164, O41164 +41165, O41165 +41166, O41166 +41167, O41167 +41168, O41168 +41169, O41169 +41170, O41170 +41171, O41171 +41172, O41172 +41173, O41173 +41174, O41174 +41175, O41175 +41176, O41176 +41177, O41177 +41178, O41178 +41179, O41179 +41180, O41180 +41181, O41181 +41182, O41182 +41183, O41183 +41184, O41184 +41185, O41185 +41186, O41186 +41187, O41187 +41188, O41188 +41189, O41189 +41190, O41190 +41191, O41191 +41192, O41192 +41193, O41193 +41194, O41194 +41195, O41195 +41196, O41196 +41197, O41197 +41198, O41198 +41199, O41199 +41200, O41200 +41201, O41201 +41202, O41202 +41203, O41203 +41204, O41204 +41205, O41205 +41206, O41206 +41207, O41207 +41208, O41208 +41209, O41209 +41210, O41210 +41211, O41211 +41212, O41212 +41213, O41213 +41214, O41214 +41215, O41215 +41216, O41216 +41217, O41217 +41218, O41218 +41219, O41219 +41220, O41220 +41221, O41221 +41222, O41222 +41223, O41223 +41224, O41224 +41225, O41225 +41226, O41226 +41227, O41227 +41228, O41228 +41229, O41229 +41230, O41230 +41231, O41231 +41232, O41232 +41233, O41233 +41234, O41234 +41235, O41235 +41236, O41236 +41237, O41237 +41238, O41238 +41239, O41239 +41240, O41240 +41241, O41241 +41242, O41242 +41243, O41243 +41244, O41244 +41245, O41245 +41246, O41246 +41247, O41247 +41248, O41248 +41249, O41249 +41250, O41250 +41251, O41251 +41252, O41252 +41253, O41253 +41254, O41254 +41255, O41255 +41256, O41256 +41257, O41257 +41258, O41258 +41259, O41259 +41260, O41260 +41261, O41261 +41262, O41262 +41263, O41263 +41264, O41264 +41265, O41265 +41266, O41266 +41267, O41267 +41268, O41268 +41269, O41269 +41270, O41270 +41271, O41271 +41272, O41272 +41273, O41273 +41274, O41274 +41275, O41275 +41276, O41276 +41277, O41277 +41278, O41278 +41279, O41279 +41280, O41280 +41281, O41281 +41282, O41282 +41283, O41283 +41284, O41284 +41285, O41285 +41286, O41286 +41287, O41287 +41288, O41288 +41289, O41289 +41290, O41290 +41291, O41291 +41292, O41292 +41293, O41293 +41294, O41294 +41295, O41295 +41296, O41296 +41297, O41297 +41298, O41298 +41299, O41299 +41300, O41300 +41301, O41301 +41302, O41302 +41303, O41303 +41304, O41304 +41305, O41305 +41306, O41306 +41307, O41307 +41308, O41308 +41309, O41309 +41310, O41310 +41311, O41311 +41312, O41312 +41313, O41313 +41314, O41314 +41315, O41315 +41316, O41316 +41317, O41317 +41318, O41318 +41319, O41319 +41320, O41320 +41321, O41321 +41322, O41322 +41323, O41323 +41324, O41324 +41325, O41325 +41326, O41326 +41327, O41327 +41328, O41328 +41329, O41329 +41330, O41330 +41331, O41331 +41332, O41332 +41333, O41333 +41334, O41334 +41335, O41335 +41336, O41336 +41337, O41337 +41338, O41338 +41339, O41339 +41340, O41340 +41341, O41341 +41342, O41342 +41343, O41343 +41344, O41344 +41345, O41345 +41346, O41346 +41347, O41347 +41348, O41348 +41349, O41349 +41350, O41350 +41351, O41351 +41352, O41352 +41353, O41353 +41354, O41354 +41355, O41355 +41356, O41356 +41357, O41357 +41358, O41358 +41359, O41359 +41360, O41360 +41361, O41361 +41362, O41362 +41363, O41363 +41364, O41364 +41365, O41365 +41366, O41366 +41367, O41367 +41368, O41368 +41369, O41369 +41370, O41370 +41371, O41371 +41372, O41372 +41373, O41373 +41374, O41374 +41375, O41375 +41376, O41376 +41377, O41377 +41378, O41378 +41379, O41379 +41380, O41380 +41381, O41381 +41382, O41382 +41383, O41383 +41384, O41384 +41385, O41385 +41386, O41386 +41387, O41387 +41388, O41388 +41389, O41389 +41390, O41390 +41391, O41391 +41392, O41392 +41393, O41393 +41394, O41394 +41395, O41395 +41396, O41396 +41397, O41397 +41398, O41398 +41399, O41399 +41400, O41400 +41401, O41401 +41402, O41402 +41403, O41403 +41404, O41404 +41405, O41405 +41406, O41406 +41407, O41407 +41408, O41408 +41409, O41409 +41410, O41410 +41411, O41411 +41412, O41412 +41413, O41413 +41414, O41414 +41415, O41415 +41416, O41416 +41417, O41417 +41418, O41418 +41419, O41419 +41420, O41420 +41421, O41421 +41422, O41422 +41423, O41423 +41424, O41424 +41425, O41425 +41426, O41426 +41427, O41427 +41428, O41428 +41429, O41429 +41430, O41430 +41431, O41431 +41432, O41432 +41433, O41433 +41434, O41434 +41435, O41435 +41436, O41436 +41437, O41437 +41438, O41438 +41439, O41439 +41440, O41440 +41441, O41441 +41442, O41442 +41443, O41443 +41444, O41444 +41445, O41445 +41446, O41446 +41447, O41447 +41448, O41448 +41449, O41449 +41450, O41450 +41451, O41451 +41452, O41452 +41453, O41453 +41454, O41454 +41455, O41455 +41456, O41456 +41457, O41457 +41458, O41458 +41459, O41459 +41460, O41460 +41461, O41461 +41462, O41462 +41463, O41463 +41464, O41464 +41465, O41465 +41466, O41466 +41467, O41467 +41468, O41468 +41469, O41469 +41470, O41470 +41471, O41471 +41472, O41472 +41473, O41473 +41474, O41474 +41475, O41475 +41476, O41476 +41477, O41477 +41478, O41478 +41479, O41479 +41480, O41480 +41481, O41481 +41482, O41482 +41483, O41483 +41484, O41484 +41485, O41485 +41486, O41486 +41487, O41487 +41488, O41488 +41489, O41489 +41490, O41490 +41491, O41491 +41492, O41492 +41493, O41493 +41494, O41494 +41495, O41495 +41496, O41496 +41497, O41497 +41498, O41498 +41499, O41499 +41500, O41500 +41501, O41501 +41502, O41502 +41503, O41503 +41504, O41504 +41505, O41505 +41506, O41506 +41507, O41507 +41508, O41508 +41509, O41509 +41510, O41510 +41511, O41511 +41512, O41512 +41513, O41513 +41514, O41514 +41515, O41515 +41516, O41516 +41517, O41517 +41518, O41518 +41519, O41519 +41520, O41520 +41521, O41521 +41522, O41522 +41523, O41523 +41524, O41524 +41525, O41525 +41526, O41526 +41527, O41527 +41528, O41528 +41529, O41529 +41530, O41530 +41531, O41531 +41532, O41532 +41533, O41533 +41534, O41534 +41535, O41535 +41536, O41536 +41537, O41537 +41538, O41538 +41539, O41539 +41540, O41540 +41541, O41541 +41542, O41542 +41543, O41543 +41544, O41544 +41545, O41545 +41546, O41546 +41547, O41547 +41548, O41548 +41549, O41549 +41550, O41550 +41551, O41551 +41552, O41552 +41553, O41553 +41554, O41554 +41555, O41555 +41556, O41556 +41557, O41557 +41558, O41558 +41559, O41559 +41560, O41560 +41561, O41561 +41562, O41562 +41563, O41563 +41564, O41564 +41565, O41565 +41566, O41566 +41567, O41567 +41568, O41568 +41569, O41569 +41570, O41570 +41571, O41571 +41572, O41572 +41573, O41573 +41574, O41574 +41575, O41575 +41576, O41576 +41577, O41577 +41578, O41578 +41579, O41579 +41580, O41580 +41581, O41581 +41582, O41582 +41583, O41583 +41584, O41584 +41585, O41585 +41586, O41586 +41587, O41587 +41588, O41588 +41589, O41589 +41590, O41590 +41591, O41591 +41592, O41592 +41593, O41593 +41594, O41594 +41595, O41595 +41596, O41596 +41597, O41597 +41598, O41598 +41599, O41599 +41600, O41600 +41601, O41601 +41602, O41602 +41603, O41603 +41604, O41604 +41605, O41605 +41606, O41606 +41607, O41607 +41608, O41608 +41609, O41609 +41610, O41610 +41611, O41611 +41612, O41612 +41613, O41613 +41614, O41614 +41615, O41615 +41616, O41616 +41617, O41617 +41618, O41618 +41619, O41619 +41620, O41620 +41621, O41621 +41622, O41622 +41623, O41623 +41624, O41624 +41625, O41625 +41626, O41626 +41627, O41627 +41628, O41628 +41629, O41629 +41630, O41630 +41631, O41631 +41632, O41632 +41633, O41633 +41634, O41634 +41635, O41635 +41636, O41636 +41637, O41637 +41638, O41638 +41639, O41639 +41640, O41640 +41641, O41641 +41642, O41642 +41643, O41643 +41644, O41644 +41645, O41645 +41646, O41646 +41647, O41647 +41648, O41648 +41649, O41649 +41650, O41650 +41651, O41651 +41652, O41652 +41653, O41653 +41654, O41654 +41655, O41655 +41656, O41656 +41657, O41657 +41658, O41658 +41659, O41659 +41660, O41660 +41661, O41661 +41662, O41662 +41663, O41663 +41664, O41664 +41665, O41665 +41666, O41666 +41667, O41667 +41668, O41668 +41669, O41669 +41670, O41670 +41671, O41671 +41672, O41672 +41673, O41673 +41674, O41674 +41675, O41675 +41676, O41676 +41677, O41677 +41678, O41678 +41679, O41679 +41680, O41680 +41681, O41681 +41682, O41682 +41683, O41683 +41684, O41684 +41685, O41685 +41686, O41686 +41687, O41687 +41688, O41688 +41689, O41689 +41690, O41690 +41691, O41691 +41692, O41692 +41693, O41693 +41694, O41694 +41695, O41695 +41696, O41696 +41697, O41697 +41698, O41698 +41699, O41699 +41700, O41700 +41701, O41701 +41702, O41702 +41703, O41703 +41704, O41704 +41705, O41705 +41706, O41706 +41707, O41707 +41708, O41708 +41709, O41709 +41710, O41710 +41711, O41711 +41712, O41712 +41713, O41713 +41714, O41714 +41715, O41715 +41716, O41716 +41717, O41717 +41718, O41718 +41719, O41719 +41720, O41720 +41721, O41721 +41722, O41722 +41723, O41723 +41724, O41724 +41725, O41725 +41726, O41726 +41727, O41727 +41728, O41728 +41729, O41729 +41730, O41730 +41731, O41731 +41732, O41732 +41733, O41733 +41734, O41734 +41735, O41735 +41736, O41736 +41737, O41737 +41738, O41738 +41739, O41739 +41740, O41740 +41741, O41741 +41742, O41742 +41743, O41743 +41744, O41744 +41745, O41745 +41746, O41746 +41747, O41747 +41748, O41748 +41749, O41749 +41750, O41750 +41751, O41751 +41752, O41752 +41753, O41753 +41754, O41754 +41755, O41755 +41756, O41756 +41757, O41757 +41758, O41758 +41759, O41759 +41760, O41760 +41761, O41761 +41762, O41762 +41763, O41763 +41764, O41764 +41765, O41765 +41766, O41766 +41767, O41767 +41768, O41768 +41769, O41769 +41770, O41770 +41771, O41771 +41772, O41772 +41773, O41773 +41774, O41774 +41775, O41775 +41776, O41776 +41777, O41777 +41778, O41778 +41779, O41779 +41780, O41780 +41781, O41781 +41782, O41782 +41783, O41783 +41784, O41784 +41785, O41785 +41786, O41786 +41787, O41787 +41788, O41788 +41789, O41789 +41790, O41790 +41791, O41791 +41792, O41792 +41793, O41793 +41794, O41794 +41795, O41795 +41796, O41796 +41797, O41797 +41798, O41798 +41799, O41799 +41800, O41800 +41801, O41801 +41802, O41802 +41803, O41803 +41804, O41804 +41805, O41805 +41806, O41806 +41807, O41807 +41808, O41808 +41809, O41809 +41810, O41810 +41811, O41811 +41812, O41812 +41813, O41813 +41814, O41814 +41815, O41815 +41816, O41816 +41817, O41817 +41818, O41818 +41819, O41819 +41820, O41820 +41821, O41821 +41822, O41822 +41823, O41823 +41824, O41824 +41825, O41825 +41826, O41826 +41827, O41827 +41828, O41828 +41829, O41829 +41830, O41830 +41831, O41831 +41832, O41832 +41833, O41833 +41834, O41834 +41835, O41835 +41836, O41836 +41837, O41837 +41838, O41838 +41839, O41839 +41840, O41840 +41841, O41841 +41842, O41842 +41843, O41843 +41844, O41844 +41845, O41845 +41846, O41846 +41847, O41847 +41848, O41848 +41849, O41849 +41850, O41850 +41851, O41851 +41852, O41852 +41853, O41853 +41854, O41854 +41855, O41855 +41856, O41856 +41857, O41857 +41858, O41858 +41859, O41859 +41860, O41860 +41861, O41861 +41862, O41862 +41863, O41863 +41864, O41864 +41865, O41865 +41866, O41866 +41867, O41867 +41868, O41868 +41869, O41869 +41870, O41870 +41871, O41871 +41872, O41872 +41873, O41873 +41874, O41874 +41875, O41875 +41876, O41876 +41877, O41877 +41878, O41878 +41879, O41879 +41880, O41880 +41881, O41881 +41882, O41882 +41883, O41883 +41884, O41884 +41885, O41885 +41886, O41886 +41887, O41887 +41888, O41888 +41889, O41889 +41890, O41890 +41891, O41891 +41892, O41892 +41893, O41893 +41894, O41894 +41895, O41895 +41896, O41896 +41897, O41897 +41898, O41898 +41899, O41899 +41900, O41900 +41901, O41901 +41902, O41902 +41903, O41903 +41904, O41904 +41905, O41905 +41906, O41906 +41907, O41907 +41908, O41908 +41909, O41909 +41910, O41910 +41911, O41911 +41912, O41912 +41913, O41913 +41914, O41914 +41915, O41915 +41916, O41916 +41917, O41917 +41918, O41918 +41919, O41919 +41920, O41920 +41921, O41921 +41922, O41922 +41923, O41923 +41924, O41924 +41925, O41925 +41926, O41926 +41927, O41927 +41928, O41928 +41929, O41929 +41930, O41930 +41931, O41931 +41932, O41932 +41933, O41933 +41934, O41934 +41935, O41935 +41936, O41936 +41937, O41937 +41938, O41938 +41939, O41939 +41940, O41940 +41941, O41941 +41942, O41942 +41943, O41943 +41944, O41944 +41945, O41945 +41946, O41946 +41947, O41947 +41948, O41948 +41949, O41949 +41950, O41950 +41951, O41951 +41952, O41952 +41953, O41953 +41954, O41954 +41955, O41955 +41956, O41956 +41957, O41957 +41958, O41958 +41959, O41959 +41960, O41960 +41961, O41961 +41962, O41962 +41963, O41963 +41964, O41964 +41965, O41965 +41966, O41966 +41967, O41967 +41968, O41968 +41969, O41969 +41970, O41970 +41971, O41971 +41972, O41972 +41973, O41973 +41974, O41974 +41975, O41975 +41976, O41976 +41977, O41977 +41978, O41978 +41979, O41979 +41980, O41980 +41981, O41981 +41982, O41982 +41983, O41983 +41984, O41984 +41985, O41985 +41986, O41986 +41987, O41987 +41988, O41988 +41989, O41989 +41990, O41990 +41991, O41991 +41992, O41992 +41993, O41993 +41994, O41994 +41995, O41995 +41996, O41996 +41997, O41997 +41998, O41998 +41999, O41999 +42000, O42000 +42001, O42001 +42002, O42002 +42003, O42003 +42004, O42004 +42005, O42005 +42006, O42006 +42007, O42007 +42008, O42008 +42009, O42009 +42010, O42010 +42011, O42011 +42012, O42012 +42013, O42013 +42014, O42014 +42015, O42015 +42016, O42016 +42017, O42017 +42018, O42018 +42019, O42019 +42020, O42020 +42021, O42021 +42022, O42022 +42023, O42023 +42024, O42024 +42025, O42025 +42026, O42026 +42027, O42027 +42028, O42028 +42029, O42029 +42030, O42030 +42031, O42031 +42032, O42032 +42033, O42033 +42034, O42034 +42035, O42035 +42036, O42036 +42037, O42037 +42038, O42038 +42039, O42039 +42040, O42040 +42041, O42041 +42042, O42042 +42043, O42043 +42044, O42044 +42045, O42045 +42046, O42046 +42047, O42047 +42048, O42048 +42049, O42049 +42050, O42050 +42051, O42051 +42052, O42052 +42053, O42053 +42054, O42054 +42055, O42055 +42056, O42056 +42057, O42057 +42058, O42058 +42059, O42059 +42060, O42060 +42061, O42061 +42062, O42062 +42063, O42063 +42064, O42064 +42065, O42065 +42066, O42066 +42067, O42067 +42068, O42068 +42069, O42069 +42070, O42070 +42071, O42071 +42072, O42072 +42073, O42073 +42074, O42074 +42075, O42075 +42076, O42076 +42077, O42077 +42078, O42078 +42079, O42079 +42080, O42080 +42081, O42081 +42082, O42082 +42083, O42083 +42084, O42084 +42085, O42085 +42086, O42086 +42087, O42087 +42088, O42088 +42089, O42089 +42090, O42090 +42091, O42091 +42092, O42092 +42093, O42093 +42094, O42094 +42095, O42095 +42096, O42096 +42097, O42097 +42098, O42098 +42099, O42099 +42100, O42100 +42101, O42101 +42102, O42102 +42103, O42103 +42104, O42104 +42105, O42105 +42106, O42106 +42107, O42107 +42108, O42108 +42109, O42109 +42110, O42110 +42111, O42111 +42112, O42112 +42113, O42113 +42114, O42114 +42115, O42115 +42116, O42116 +42117, O42117 +42118, O42118 +42119, O42119 +42120, O42120 +42121, O42121 +42122, O42122 +42123, O42123 +42124, O42124 +42125, O42125 +42126, O42126 +42127, O42127 +42128, O42128 +42129, O42129 +42130, O42130 +42131, O42131 +42132, O42132 +42133, O42133 +42134, O42134 +42135, O42135 +42136, O42136 +42137, O42137 +42138, O42138 +42139, O42139 +42140, O42140 +42141, O42141 +42142, O42142 +42143, O42143 +42144, O42144 +42145, O42145 +42146, O42146 +42147, O42147 +42148, O42148 +42149, O42149 +42150, O42150 +42151, O42151 +42152, O42152 +42153, O42153 +42154, O42154 +42155, O42155 +42156, O42156 +42157, O42157 +42158, O42158 +42159, O42159 +42160, O42160 +42161, O42161 +42162, O42162 +42163, O42163 +42164, O42164 +42165, O42165 +42166, O42166 +42167, O42167 +42168, O42168 +42169, O42169 +42170, O42170 +42171, O42171 +42172, O42172 +42173, O42173 +42174, O42174 +42175, O42175 +42176, O42176 +42177, O42177 +42178, O42178 +42179, O42179 +42180, O42180 +42181, O42181 +42182, O42182 +42183, O42183 +42184, O42184 +42185, O42185 +42186, O42186 +42187, O42187 +42188, O42188 +42189, O42189 +42190, O42190 +42191, O42191 +42192, O42192 +42193, O42193 +42194, O42194 +42195, O42195 +42196, O42196 +42197, O42197 +42198, O42198 +42199, O42199 +42200, O42200 +42201, O42201 +42202, O42202 +42203, O42203 +42204, O42204 +42205, O42205 +42206, O42206 +42207, O42207 +42208, O42208 +42209, O42209 +42210, O42210 +42211, O42211 +42212, O42212 +42213, O42213 +42214, O42214 +42215, O42215 +42216, O42216 +42217, O42217 +42218, O42218 +42219, O42219 +42220, O42220 +42221, O42221 +42222, O42222 +42223, O42223 +42224, O42224 +42225, O42225 +42226, O42226 +42227, O42227 +42228, O42228 +42229, O42229 +42230, O42230 +42231, O42231 +42232, O42232 +42233, O42233 +42234, O42234 +42235, O42235 +42236, O42236 +42237, O42237 +42238, O42238 +42239, O42239 +42240, O42240 +42241, O42241 +42242, O42242 +42243, O42243 +42244, O42244 +42245, O42245 +42246, O42246 +42247, O42247 +42248, O42248 +42249, O42249 +42250, O42250 +42251, O42251 +42252, O42252 +42253, O42253 +42254, O42254 +42255, O42255 +42256, O42256 +42257, O42257 +42258, O42258 +42259, O42259 +42260, O42260 +42261, O42261 +42262, O42262 +42263, O42263 +42264, O42264 +42265, O42265 +42266, O42266 +42267, O42267 +42268, O42268 +42269, O42269 +42270, O42270 +42271, O42271 +42272, O42272 +42273, O42273 +42274, O42274 +42275, O42275 +42276, O42276 +42277, O42277 +42278, O42278 +42279, O42279 +42280, O42280 +42281, O42281 +42282, O42282 +42283, O42283 +42284, O42284 +42285, O42285 +42286, O42286 +42287, O42287 +42288, O42288 +42289, O42289 +42290, O42290 +42291, O42291 +42292, O42292 +42293, O42293 +42294, O42294 +42295, O42295 +42296, O42296 +42297, O42297 +42298, O42298 +42299, O42299 +42300, O42300 +42301, O42301 +42302, O42302 +42303, O42303 +42304, O42304 +42305, O42305 +42306, O42306 +42307, O42307 +42308, O42308 +42309, O42309 +42310, O42310 +42311, O42311 +42312, O42312 +42313, O42313 +42314, O42314 +42315, O42315 +42316, O42316 +42317, O42317 +42318, O42318 +42319, O42319 +42320, O42320 +42321, O42321 +42322, O42322 +42323, O42323 +42324, O42324 +42325, O42325 +42326, O42326 +42327, O42327 +42328, O42328 +42329, O42329 +42330, O42330 +42331, O42331 +42332, O42332 +42333, O42333 +42334, O42334 +42335, O42335 +42336, O42336 +42337, O42337 +42338, O42338 +42339, O42339 +42340, O42340 +42341, O42341 +42342, O42342 +42343, O42343 +42344, O42344 +42345, O42345 +42346, O42346 +42347, O42347 +42348, O42348 +42349, O42349 +42350, O42350 +42351, O42351 +42352, O42352 +42353, O42353 +42354, O42354 +42355, O42355 +42356, O42356 +42357, O42357 +42358, O42358 +42359, O42359 +42360, O42360 +42361, O42361 +42362, O42362 +42363, O42363 +42364, O42364 +42365, O42365 +42366, O42366 +42367, O42367 +42368, O42368 +42369, O42369 +42370, O42370 +42371, O42371 +42372, O42372 +42373, O42373 +42374, O42374 +42375, O42375 +42376, O42376 +42377, O42377 +42378, O42378 +42379, O42379 +42380, O42380 +42381, O42381 +42382, O42382 +42383, O42383 +42384, O42384 +42385, O42385 +42386, O42386 +42387, O42387 +42388, O42388 +42389, O42389 +42390, O42390 +42391, O42391 +42392, O42392 +42393, O42393 +42394, O42394 +42395, O42395 +42396, O42396 +42397, O42397 +42398, O42398 +42399, O42399 +42400, O42400 +42401, O42401 +42402, O42402 +42403, O42403 +42404, O42404 +42405, O42405 +42406, O42406 +42407, O42407 +42408, O42408 +42409, O42409 +42410, O42410 +42411, O42411 +42412, O42412 +42413, O42413 +42414, O42414 +42415, O42415 +42416, O42416 +42417, O42417 +42418, O42418 +42419, O42419 +42420, O42420 +42421, O42421 +42422, O42422 +42423, O42423 +42424, O42424 +42425, O42425 +42426, O42426 +42427, O42427 +42428, O42428 +42429, O42429 +42430, O42430 +42431, O42431 +42432, O42432 +42433, O42433 +42434, O42434 +42435, O42435 +42436, O42436 +42437, O42437 +42438, O42438 +42439, O42439 +42440, O42440 +42441, O42441 +42442, O42442 +42443, O42443 +42444, O42444 +42445, O42445 +42446, O42446 +42447, O42447 +42448, O42448 +42449, O42449 +42450, O42450 +42451, O42451 +42452, O42452 +42453, O42453 +42454, O42454 +42455, O42455 +42456, O42456 +42457, O42457 +42458, O42458 +42459, O42459 +42460, O42460 +42461, O42461 +42462, O42462 +42463, O42463 +42464, O42464 +42465, O42465 +42466, O42466 +42467, O42467 +42468, O42468 +42469, O42469 +42470, O42470 +42471, O42471 +42472, O42472 +42473, O42473 +42474, O42474 +42475, O42475 +42476, O42476 +42477, O42477 +42478, O42478 +42479, O42479 +42480, O42480 +42481, O42481 +42482, O42482 +42483, O42483 +42484, O42484 +42485, O42485 +42486, O42486 +42487, O42487 +42488, O42488 +42489, O42489 +42490, O42490 +42491, O42491 +42492, O42492 +42493, O42493 +42494, O42494 +42495, O42495 +42496, O42496 +42497, O42497 +42498, O42498 +42499, O42499 +42500, O42500 +42501, O42501 +42502, O42502 +42503, O42503 +42504, O42504 +42505, O42505 +42506, O42506 +42507, O42507 +42508, O42508 +42509, O42509 +42510, O42510 +42511, O42511 +42512, O42512 +42513, O42513 +42514, O42514 +42515, O42515 +42516, O42516 +42517, O42517 +42518, O42518 +42519, O42519 +42520, O42520 +42521, O42521 +42522, O42522 +42523, O42523 +42524, O42524 +42525, O42525 +42526, O42526 +42527, O42527 +42528, O42528 +42529, O42529 +42530, O42530 +42531, O42531 +42532, O42532 +42533, O42533 +42534, O42534 +42535, O42535 +42536, O42536 +42537, O42537 +42538, O42538 +42539, O42539 +42540, O42540 +42541, O42541 +42542, O42542 +42543, O42543 +42544, O42544 +42545, O42545 +42546, O42546 +42547, O42547 +42548, O42548 +42549, O42549 +42550, O42550 +42551, O42551 +42552, O42552 +42553, O42553 +42554, O42554 +42555, O42555 +42556, O42556 +42557, O42557 +42558, O42558 +42559, O42559 +42560, O42560 +42561, O42561 +42562, O42562 +42563, O42563 +42564, O42564 +42565, O42565 +42566, O42566 +42567, O42567 +42568, O42568 +42569, O42569 +42570, O42570 +42571, O42571 +42572, O42572 +42573, O42573 +42574, O42574 +42575, O42575 +42576, O42576 +42577, O42577 +42578, O42578 +42579, O42579 +42580, O42580 +42581, O42581 +42582, O42582 +42583, O42583 +42584, O42584 +42585, O42585 +42586, O42586 +42587, O42587 +42588, O42588 +42589, O42589 +42590, O42590 +42591, O42591 +42592, O42592 +42593, O42593 +42594, O42594 +42595, O42595 +42596, O42596 +42597, O42597 +42598, O42598 +42599, O42599 +42600, O42600 +42601, O42601 +42602, O42602 +42603, O42603 +42604, O42604 +42605, O42605 +42606, O42606 +42607, O42607 +42608, O42608 +42609, O42609 +42610, O42610 +42611, O42611 +42612, O42612 +42613, O42613 +42614, O42614 +42615, O42615 +42616, O42616 +42617, O42617 +42618, O42618 +42619, O42619 +42620, O42620 +42621, O42621 +42622, O42622 +42623, O42623 +42624, O42624 +42625, O42625 +42626, O42626 +42627, O42627 +42628, O42628 +42629, O42629 +42630, O42630 +42631, O42631 +42632, O42632 +42633, O42633 +42634, O42634 +42635, O42635 +42636, O42636 +42637, O42637 +42638, O42638 +42639, O42639 +42640, O42640 +42641, O42641 +42642, O42642 +42643, O42643 +42644, O42644 +42645, O42645 +42646, O42646 +42647, O42647 +42648, O42648 +42649, O42649 +42650, O42650 +42651, O42651 +42652, O42652 +42653, O42653 +42654, O42654 +42655, O42655 +42656, O42656 +42657, O42657 +42658, O42658 +42659, O42659 +42660, O42660 +42661, O42661 +42662, O42662 +42663, O42663 +42664, O42664 +42665, O42665 +42666, O42666 +42667, O42667 +42668, O42668 +42669, O42669 +42670, O42670 +42671, O42671 +42672, O42672 +42673, O42673 +42674, O42674 +42675, O42675 +42676, O42676 +42677, O42677 +42678, O42678 +42679, O42679 +42680, O42680 +42681, O42681 +42682, O42682 +42683, O42683 +42684, O42684 +42685, O42685 +42686, O42686 +42687, O42687 +42688, O42688 +42689, O42689 +42690, O42690 +42691, O42691 +42692, O42692 +42693, O42693 +42694, O42694 +42695, O42695 +42696, O42696 +42697, O42697 +42698, O42698 +42699, O42699 +42700, O42700 +42701, O42701 +42702, O42702 +42703, O42703 +42704, O42704 +42705, O42705 +42706, O42706 +42707, O42707 +42708, O42708 +42709, O42709 +42710, O42710 +42711, O42711 +42712, O42712 +42713, O42713 +42714, O42714 +42715, O42715 +42716, O42716 +42717, O42717 +42718, O42718 +42719, O42719 +42720, O42720 +42721, O42721 +42722, O42722 +42723, O42723 +42724, O42724 +42725, O42725 +42726, O42726 +42727, O42727 +42728, O42728 +42729, O42729 +42730, O42730 +42731, O42731 +42732, O42732 +42733, O42733 +42734, O42734 +42735, O42735 +42736, O42736 +42737, O42737 +42738, O42738 +42739, O42739 +42740, O42740 +42741, O42741 +42742, O42742 +42743, O42743 +42744, O42744 +42745, O42745 +42746, O42746 +42747, O42747 +42748, O42748 +42749, O42749 +42750, O42750 +42751, O42751 +42752, O42752 +42753, O42753 +42754, O42754 +42755, O42755 +42756, O42756 +42757, O42757 +42758, O42758 +42759, O42759 +42760, O42760 +42761, O42761 +42762, O42762 +42763, O42763 +42764, O42764 +42765, O42765 +42766, O42766 +42767, O42767 +42768, O42768 +42769, O42769 +42770, O42770 +42771, O42771 +42772, O42772 +42773, O42773 +42774, O42774 +42775, O42775 +42776, O42776 +42777, O42777 +42778, O42778 +42779, O42779 +42780, O42780 +42781, O42781 +42782, O42782 +42783, O42783 +42784, O42784 +42785, O42785 +42786, O42786 +42787, O42787 +42788, O42788 +42789, O42789 +42790, O42790 +42791, O42791 +42792, O42792 +42793, O42793 +42794, O42794 +42795, O42795 +42796, O42796 +42797, O42797 +42798, O42798 +42799, O42799 +42800, O42800 +42801, O42801 +42802, O42802 +42803, O42803 +42804, O42804 +42805, O42805 +42806, O42806 +42807, O42807 +42808, O42808 +42809, O42809 +42810, O42810 +42811, O42811 +42812, O42812 +42813, O42813 +42814, O42814 +42815, O42815 +42816, O42816 +42817, O42817 +42818, O42818 +42819, O42819 +42820, O42820 +42821, O42821 +42822, O42822 +42823, O42823 +42824, O42824 +42825, O42825 +42826, O42826 +42827, O42827 +42828, O42828 +42829, O42829 +42830, O42830 +42831, O42831 +42832, O42832 +42833, O42833 +42834, O42834 +42835, O42835 +42836, O42836 +42837, O42837 +42838, O42838 +42839, O42839 +42840, O42840 +42841, O42841 +42842, O42842 +42843, O42843 +42844, O42844 +42845, O42845 +42846, O42846 +42847, O42847 +42848, O42848 +42849, O42849 +42850, O42850 +42851, O42851 +42852, O42852 +42853, O42853 +42854, O42854 +42855, O42855 +42856, O42856 +42857, O42857 +42858, O42858 +42859, O42859 +42860, O42860 +42861, O42861 +42862, O42862 +42863, O42863 +42864, O42864 +42865, O42865 +42866, O42866 +42867, O42867 +42868, O42868 +42869, O42869 +42870, O42870 +42871, O42871 +42872, O42872 +42873, O42873 +42874, O42874 +42875, O42875 +42876, O42876 +42877, O42877 +42878, O42878 +42879, O42879 +42880, O42880 +42881, O42881 +42882, O42882 +42883, O42883 +42884, O42884 +42885, O42885 +42886, O42886 +42887, O42887 +42888, O42888 +42889, O42889 +42890, O42890 +42891, O42891 +42892, O42892 +42893, O42893 +42894, O42894 +42895, O42895 +42896, O42896 +42897, O42897 +42898, O42898 +42899, O42899 +42900, O42900 +42901, O42901 +42902, O42902 +42903, O42903 +42904, O42904 +42905, O42905 +42906, O42906 +42907, O42907 +42908, O42908 +42909, O42909 +42910, O42910 +42911, O42911 +42912, O42912 +42913, O42913 +42914, O42914 +42915, O42915 +42916, O42916 +42917, O42917 +42918, O42918 +42919, O42919 +42920, O42920 +42921, O42921 +42922, O42922 +42923, O42923 +42924, O42924 +42925, O42925 +42926, O42926 +42927, O42927 +42928, O42928 +42929, O42929 +42930, O42930 +42931, O42931 +42932, O42932 +42933, O42933 +42934, O42934 +42935, O42935 +42936, O42936 +42937, O42937 +42938, O42938 +42939, O42939 +42940, O42940 +42941, O42941 +42942, O42942 +42943, O42943 +42944, O42944 +42945, O42945 +42946, O42946 +42947, O42947 +42948, O42948 +42949, O42949 +42950, O42950 +42951, O42951 +42952, O42952 +42953, O42953 +42954, O42954 +42955, O42955 +42956, O42956 +42957, O42957 +42958, O42958 +42959, O42959 +42960, O42960 +42961, O42961 +42962, O42962 +42963, O42963 +42964, O42964 +42965, O42965 +42966, O42966 +42967, O42967 +42968, O42968 +42969, O42969 +42970, O42970 +42971, O42971 +42972, O42972 +42973, O42973 +42974, O42974 +42975, O42975 +42976, O42976 +42977, O42977 +42978, O42978 +42979, O42979 +42980, O42980 +42981, O42981 +42982, O42982 +42983, O42983 +42984, O42984 +42985, O42985 +42986, O42986 +42987, O42987 +42988, O42988 +42989, O42989 +42990, O42990 +42991, O42991 +42992, O42992 +42993, O42993 +42994, O42994 +42995, O42995 +42996, O42996 +42997, O42997 +42998, O42998 +42999, O42999 +43000, O43000 +43001, O43001 +43002, O43002 +43003, O43003 +43004, O43004 +43005, O43005 +43006, O43006 +43007, O43007 +43008, O43008 +43009, O43009 +43010, O43010 +43011, O43011 +43012, O43012 +43013, O43013 +43014, O43014 +43015, O43015 +43016, O43016 +43017, O43017 +43018, O43018 +43019, O43019 +43020, O43020 +43021, O43021 +43022, O43022 +43023, O43023 +43024, O43024 +43025, O43025 +43026, O43026 +43027, O43027 +43028, O43028 +43029, O43029 +43030, O43030 +43031, O43031 +43032, O43032 +43033, O43033 +43034, O43034 +43035, O43035 +43036, O43036 +43037, O43037 +43038, O43038 +43039, O43039 +43040, O43040 +43041, O43041 +43042, O43042 +43043, O43043 +43044, O43044 +43045, O43045 +43046, O43046 +43047, O43047 +43048, O43048 +43049, O43049 +43050, O43050 +43051, O43051 +43052, O43052 +43053, O43053 +43054, O43054 +43055, O43055 +43056, O43056 +43057, O43057 +43058, O43058 +43059, O43059 +43060, O43060 +43061, O43061 +43062, O43062 +43063, O43063 +43064, O43064 +43065, O43065 +43066, O43066 +43067, O43067 +43068, O43068 +43069, O43069 +43070, O43070 +43071, O43071 +43072, O43072 +43073, O43073 +43074, O43074 +43075, O43075 +43076, O43076 +43077, O43077 +43078, O43078 +43079, O43079 +43080, O43080 +43081, O43081 +43082, O43082 +43083, O43083 +43084, O43084 +43085, O43085 +43086, O43086 +43087, O43087 +43088, O43088 +43089, O43089 +43090, O43090 +43091, O43091 +43092, O43092 +43093, O43093 +43094, O43094 +43095, O43095 +43096, O43096 +43097, O43097 +43098, O43098 +43099, O43099 +43100, O43100 +43101, O43101 +43102, O43102 +43103, O43103 +43104, O43104 +43105, O43105 +43106, O43106 +43107, O43107 +43108, O43108 +43109, O43109 +43110, O43110 +43111, O43111 +43112, O43112 +43113, O43113 +43114, O43114 +43115, O43115 +43116, O43116 +43117, O43117 +43118, O43118 +43119, O43119 +43120, O43120 +43121, O43121 +43122, O43122 +43123, O43123 +43124, O43124 +43125, O43125 +43126, O43126 +43127, O43127 +43128, O43128 +43129, O43129 +43130, O43130 +43131, O43131 +43132, O43132 +43133, O43133 +43134, O43134 +43135, O43135 +43136, O43136 +43137, O43137 +43138, O43138 +43139, O43139 +43140, O43140 +43141, O43141 +43142, O43142 +43143, O43143 +43144, O43144 +43145, O43145 +43146, O43146 +43147, O43147 +43148, O43148 +43149, O43149 +43150, O43150 +43151, O43151 +43152, O43152 +43153, O43153 +43154, O43154 +43155, O43155 +43156, O43156 +43157, O43157 +43158, O43158 +43159, O43159 +43160, O43160 +43161, O43161 +43162, O43162 +43163, O43163 +43164, O43164 +43165, O43165 +43166, O43166 +43167, O43167 +43168, O43168 +43169, O43169 +43170, O43170 +43171, O43171 +43172, O43172 +43173, O43173 +43174, O43174 +43175, O43175 +43176, O43176 +43177, O43177 +43178, O43178 +43179, O43179 +43180, O43180 +43181, O43181 +43182, O43182 +43183, O43183 +43184, O43184 +43185, O43185 +43186, O43186 +43187, O43187 +43188, O43188 +43189, O43189 +43190, O43190 +43191, O43191 +43192, O43192 +43193, O43193 +43194, O43194 +43195, O43195 +43196, O43196 +43197, O43197 +43198, O43198 +43199, O43199 +43200, O43200 +43201, O43201 +43202, O43202 +43203, O43203 +43204, O43204 +43205, O43205 +43206, O43206 +43207, O43207 +43208, O43208 +43209, O43209 +43210, O43210 +43211, O43211 +43212, O43212 +43213, O43213 +43214, O43214 +43215, O43215 +43216, O43216 +43217, O43217 +43218, O43218 +43219, O43219 +43220, O43220 +43221, O43221 +43222, O43222 +43223, O43223 +43224, O43224 +43225, O43225 +43226, O43226 +43227, O43227 +43228, O43228 +43229, O43229 +43230, O43230 +43231, O43231 +43232, O43232 +43233, O43233 +43234, O43234 +43235, O43235 +43236, O43236 +43237, O43237 +43238, O43238 +43239, O43239 +43240, O43240 +43241, O43241 +43242, O43242 +43243, O43243 +43244, O43244 +43245, O43245 +43246, O43246 +43247, O43247 +43248, O43248 +43249, O43249 +43250, O43250 +43251, O43251 +43252, O43252 +43253, O43253 +43254, O43254 +43255, O43255 +43256, O43256 +43257, O43257 +43258, O43258 +43259, O43259 +43260, O43260 +43261, O43261 +43262, O43262 +43263, O43263 +43264, O43264 +43265, O43265 +43266, O43266 +43267, O43267 +43268, O43268 +43269, O43269 +43270, O43270 +43271, O43271 +43272, O43272 +43273, O43273 +43274, O43274 +43275, O43275 +43276, O43276 +43277, O43277 +43278, O43278 +43279, O43279 +43280, O43280 +43281, O43281 +43282, O43282 +43283, O43283 +43284, O43284 +43285, O43285 +43286, O43286 +43287, O43287 +43288, O43288 +43289, O43289 +43290, O43290 +43291, O43291 +43292, O43292 +43293, O43293 +43294, O43294 +43295, O43295 +43296, O43296 +43297, O43297 +43298, O43298 +43299, O43299 +43300, O43300 +43301, O43301 +43302, O43302 +43303, O43303 +43304, O43304 +43305, O43305 +43306, O43306 +43307, O43307 +43308, O43308 +43309, O43309 +43310, O43310 +43311, O43311 +43312, O43312 +43313, O43313 +43314, O43314 +43315, O43315 +43316, O43316 +43317, O43317 +43318, O43318 +43319, O43319 +43320, O43320 +43321, O43321 +43322, O43322 +43323, O43323 +43324, O43324 +43325, O43325 +43326, O43326 +43327, O43327 +43328, O43328 +43329, O43329 +43330, O43330 +43331, O43331 +43332, O43332 +43333, O43333 +43334, O43334 +43335, O43335 +43336, O43336 +43337, O43337 +43338, O43338 +43339, O43339 +43340, O43340 +43341, O43341 +43342, O43342 +43343, O43343 +43344, O43344 +43345, O43345 +43346, O43346 +43347, O43347 +43348, O43348 +43349, O43349 +43350, O43350 +43351, O43351 +43352, O43352 +43353, O43353 +43354, O43354 +43355, O43355 +43356, O43356 +43357, O43357 +43358, O43358 +43359, O43359 +43360, O43360 +43361, O43361 +43362, O43362 +43363, O43363 +43364, O43364 +43365, O43365 +43366, O43366 +43367, O43367 +43368, O43368 +43369, O43369 +43370, O43370 +43371, O43371 +43372, O43372 +43373, O43373 +43374, O43374 +43375, O43375 +43376, O43376 +43377, O43377 +43378, O43378 +43379, O43379 +43380, O43380 +43381, O43381 +43382, O43382 +43383, O43383 +43384, O43384 +43385, O43385 +43386, O43386 +43387, O43387 +43388, O43388 +43389, O43389 +43390, O43390 +43391, O43391 +43392, O43392 +43393, O43393 +43394, O43394 +43395, O43395 +43396, O43396 +43397, O43397 +43398, O43398 +43399, O43399 +43400, O43400 +43401, O43401 +43402, O43402 +43403, O43403 +43404, O43404 +43405, O43405 +43406, O43406 +43407, O43407 +43408, O43408 +43409, O43409 +43410, O43410 +43411, O43411 +43412, O43412 +43413, O43413 +43414, O43414 +43415, O43415 +43416, O43416 +43417, O43417 +43418, O43418 +43419, O43419 +43420, O43420 +43421, O43421 +43422, O43422 +43423, O43423 +43424, O43424 +43425, O43425 +43426, O43426 +43427, O43427 +43428, O43428 +43429, O43429 +43430, O43430 +43431, O43431 +43432, O43432 +43433, O43433 +43434, O43434 +43435, O43435 +43436, O43436 +43437, O43437 +43438, O43438 +43439, O43439 +43440, O43440 +43441, O43441 +43442, O43442 +43443, O43443 +43444, O43444 +43445, O43445 +43446, O43446 +43447, O43447 +43448, O43448 +43449, O43449 +43450, O43450 +43451, O43451 +43452, O43452 +43453, O43453 +43454, O43454 +43455, O43455 +43456, O43456 +43457, O43457 +43458, O43458 +43459, O43459 +43460, O43460 +43461, O43461 +43462, O43462 +43463, O43463 +43464, O43464 +43465, O43465 +43466, O43466 +43467, O43467 +43468, O43468 +43469, O43469 +43470, O43470 +43471, O43471 +43472, O43472 +43473, O43473 +43474, O43474 +43475, O43475 +43476, O43476 +43477, O43477 +43478, O43478 +43479, O43479 +43480, O43480 +43481, O43481 +43482, O43482 +43483, O43483 +43484, O43484 +43485, O43485 +43486, O43486 +43487, O43487 +43488, O43488 +43489, O43489 +43490, O43490 +43491, O43491 +43492, O43492 +43493, O43493 +43494, O43494 +43495, O43495 +43496, O43496 +43497, O43497 +43498, O43498 +43499, O43499 +43500, O43500 +43501, O43501 +43502, O43502 +43503, O43503 +43504, O43504 +43505, O43505 +43506, O43506 +43507, O43507 +43508, O43508 +43509, O43509 +43510, O43510 +43511, O43511 +43512, O43512 +43513, O43513 +43514, O43514 +43515, O43515 +43516, O43516 +43517, O43517 +43518, O43518 +43519, O43519 +43520, O43520 +43521, O43521 +43522, O43522 +43523, O43523 +43524, O43524 +43525, O43525 +43526, O43526 +43527, O43527 +43528, O43528 +43529, O43529 +43530, O43530 +43531, O43531 +43532, O43532 +43533, O43533 +43534, O43534 +43535, O43535 +43536, O43536 +43537, O43537 +43538, O43538 +43539, O43539 +43540, O43540 +43541, O43541 +43542, O43542 +43543, O43543 +43544, O43544 +43545, O43545 +43546, O43546 +43547, O43547 +43548, O43548 +43549, O43549 +43550, O43550 +43551, O43551 +43552, O43552 +43553, O43553 +43554, O43554 +43555, O43555 +43556, O43556 +43557, O43557 +43558, O43558 +43559, O43559 +43560, O43560 +43561, O43561 +43562, O43562 +43563, O43563 +43564, O43564 +43565, O43565 +43566, O43566 +43567, O43567 +43568, O43568 +43569, O43569 +43570, O43570 +43571, O43571 +43572, O43572 +43573, O43573 +43574, O43574 +43575, O43575 +43576, O43576 +43577, O43577 +43578, O43578 +43579, O43579 +43580, O43580 +43581, O43581 +43582, O43582 +43583, O43583 +43584, O43584 +43585, O43585 +43586, O43586 +43587, O43587 +43588, O43588 +43589, O43589 +43590, O43590 +43591, O43591 +43592, O43592 +43593, O43593 +43594, O43594 +43595, O43595 +43596, O43596 +43597, O43597 +43598, O43598 +43599, O43599 +43600, O43600 +43601, O43601 +43602, O43602 +43603, O43603 +43604, O43604 +43605, O43605 +43606, O43606 +43607, O43607 +43608, O43608 +43609, O43609 +43610, O43610 +43611, O43611 +43612, O43612 +43613, O43613 +43614, O43614 +43615, O43615 +43616, O43616 +43617, O43617 +43618, O43618 +43619, O43619 +43620, O43620 +43621, O43621 +43622, O43622 +43623, O43623 +43624, O43624 +43625, O43625 +43626, O43626 +43627, O43627 +43628, O43628 +43629, O43629 +43630, O43630 +43631, O43631 +43632, O43632 +43633, O43633 +43634, O43634 +43635, O43635 +43636, O43636 +43637, O43637 +43638, O43638 +43639, O43639 +43640, O43640 +43641, O43641 +43642, O43642 +43643, O43643 +43644, O43644 +43645, O43645 +43646, O43646 +43647, O43647 +43648, O43648 +43649, O43649 +43650, O43650 +43651, O43651 +43652, O43652 +43653, O43653 +43654, O43654 +43655, O43655 +43656, O43656 +43657, O43657 +43658, O43658 +43659, O43659 +43660, O43660 +43661, O43661 +43662, O43662 +43663, O43663 +43664, O43664 +43665, O43665 +43666, O43666 +43667, O43667 +43668, O43668 +43669, O43669 +43670, O43670 +43671, O43671 +43672, O43672 +43673, O43673 +43674, O43674 +43675, O43675 +43676, O43676 +43677, O43677 +43678, O43678 +43679, O43679 +43680, O43680 +43681, O43681 +43682, O43682 +43683, O43683 +43684, O43684 +43685, O43685 +43686, O43686 +43687, O43687 +43688, O43688 +43689, O43689 +43690, O43690 +43691, O43691 +43692, O43692 +43693, O43693 +43694, O43694 +43695, O43695 +43696, O43696 +43697, O43697 +43698, O43698 +43699, O43699 +43700, O43700 +43701, O43701 +43702, O43702 +43703, O43703 +43704, O43704 +43705, O43705 +43706, O43706 +43707, O43707 +43708, O43708 +43709, O43709 +43710, O43710 +43711, O43711 +43712, O43712 +43713, O43713 +43714, O43714 +43715, O43715 +43716, O43716 +43717, O43717 +43718, O43718 +43719, O43719 +43720, O43720 +43721, O43721 +43722, O43722 +43723, O43723 +43724, O43724 +43725, O43725 +43726, O43726 +43727, O43727 +43728, O43728 +43729, O43729 +43730, O43730 +43731, O43731 +43732, O43732 +43733, O43733 +43734, O43734 +43735, O43735 +43736, O43736 +43737, O43737 +43738, O43738 +43739, O43739 +43740, O43740 +43741, O43741 +43742, O43742 +43743, O43743 +43744, O43744 +43745, O43745 +43746, O43746 +43747, O43747 +43748, O43748 +43749, O43749 +43750, O43750 +43751, O43751 +43752, O43752 +43753, O43753 +43754, O43754 +43755, O43755 +43756, O43756 +43757, O43757 +43758, O43758 +43759, O43759 +43760, O43760 +43761, O43761 +43762, O43762 +43763, O43763 +43764, O43764 +43765, O43765 +43766, O43766 +43767, O43767 +43768, O43768 +43769, O43769 +43770, O43770 +43771, O43771 +43772, O43772 +43773, O43773 +43774, O43774 +43775, O43775 +43776, O43776 +43777, O43777 +43778, O43778 +43779, O43779 +43780, O43780 +43781, O43781 +43782, O43782 +43783, O43783 +43784, O43784 +43785, O43785 +43786, O43786 +43787, O43787 +43788, O43788 +43789, O43789 +43790, O43790 +43791, O43791 +43792, O43792 +43793, O43793 +43794, O43794 +43795, O43795 +43796, O43796 +43797, O43797 +43798, O43798 +43799, O43799 +43800, O43800 +43801, O43801 +43802, O43802 +43803, O43803 +43804, O43804 +43805, O43805 +43806, O43806 +43807, O43807 +43808, O43808 +43809, O43809 +43810, O43810 +43811, O43811 +43812, O43812 +43813, O43813 +43814, O43814 +43815, O43815 +43816, O43816 +43817, O43817 +43818, O43818 +43819, O43819 +43820, O43820 +43821, O43821 +43822, O43822 +43823, O43823 +43824, O43824 +43825, O43825 +43826, O43826 +43827, O43827 +43828, O43828 +43829, O43829 +43830, O43830 +43831, O43831 +43832, O43832 +43833, O43833 +43834, O43834 +43835, O43835 +43836, O43836 +43837, O43837 +43838, O43838 +43839, O43839 +43840, O43840 +43841, O43841 +43842, O43842 +43843, O43843 +43844, O43844 +43845, O43845 +43846, O43846 +43847, O43847 +43848, O43848 +43849, O43849 +43850, O43850 +43851, O43851 +43852, O43852 +43853, O43853 +43854, O43854 +43855, O43855 +43856, O43856 +43857, O43857 +43858, O43858 +43859, O43859 +43860, O43860 +43861, O43861 +43862, O43862 +43863, O43863 +43864, O43864 +43865, O43865 +43866, O43866 +43867, O43867 +43868, O43868 +43869, O43869 +43870, O43870 +43871, O43871 +43872, O43872 +43873, O43873 +43874, O43874 +43875, O43875 +43876, O43876 +43877, O43877 +43878, O43878 +43879, O43879 +43880, O43880 +43881, O43881 +43882, O43882 +43883, O43883 +43884, O43884 +43885, O43885 +43886, O43886 +43887, O43887 +43888, O43888 +43889, O43889 +43890, O43890 +43891, O43891 +43892, O43892 +43893, O43893 +43894, O43894 +43895, O43895 +43896, O43896 +43897, O43897 +43898, O43898 +43899, O43899 +43900, O43900 +43901, O43901 +43902, O43902 +43903, O43903 +43904, O43904 +43905, O43905 +43906, O43906 +43907, O43907 +43908, O43908 +43909, O43909 +43910, O43910 +43911, O43911 +43912, O43912 +43913, O43913 +43914, O43914 +43915, O43915 +43916, O43916 +43917, O43917 +43918, O43918 +43919, O43919 +43920, O43920 +43921, O43921 +43922, O43922 +43923, O43923 +43924, O43924 +43925, O43925 +43926, O43926 +43927, O43927 +43928, O43928 +43929, O43929 +43930, O43930 +43931, O43931 +43932, O43932 +43933, O43933 +43934, O43934 +43935, O43935 +43936, O43936 +43937, O43937 +43938, O43938 +43939, O43939 +43940, O43940 +43941, O43941 +43942, O43942 +43943, O43943 +43944, O43944 +43945, O43945 +43946, O43946 +43947, O43947 +43948, O43948 +43949, O43949 +43950, O43950 +43951, O43951 +43952, O43952 +43953, O43953 +43954, O43954 +43955, O43955 +43956, O43956 +43957, O43957 +43958, O43958 +43959, O43959 +43960, O43960 +43961, O43961 +43962, O43962 +43963, O43963 +43964, O43964 +43965, O43965 +43966, O43966 +43967, O43967 +43968, O43968 +43969, O43969 +43970, O43970 +43971, O43971 +43972, O43972 +43973, O43973 +43974, O43974 +43975, O43975 +43976, O43976 +43977, O43977 +43978, O43978 +43979, O43979 +43980, O43980 +43981, O43981 +43982, O43982 +43983, O43983 +43984, O43984 +43985, O43985 +43986, O43986 +43987, O43987 +43988, O43988 +43989, O43989 +43990, O43990 +43991, O43991 +43992, O43992 +43993, O43993 +43994, O43994 +43995, O43995 +43996, O43996 +43997, O43997 +43998, O43998 +43999, O43999 +44000, O44000 +44001, O44001 +44002, O44002 +44003, O44003 +44004, O44004 +44005, O44005 +44006, O44006 +44007, O44007 +44008, O44008 +44009, O44009 +44010, O44010 +44011, O44011 +44012, O44012 +44013, O44013 +44014, O44014 +44015, O44015 +44016, O44016 +44017, O44017 +44018, O44018 +44019, O44019 +44020, O44020 +44021, O44021 +44022, O44022 +44023, O44023 +44024, O44024 +44025, O44025 +44026, O44026 +44027, O44027 +44028, O44028 +44029, O44029 +44030, O44030 +44031, O44031 +44032, O44032 +44033, O44033 +44034, O44034 +44035, O44035 +44036, O44036 +44037, O44037 +44038, O44038 +44039, O44039 +44040, O44040 +44041, O44041 +44042, O44042 +44043, O44043 +44044, O44044 +44045, O44045 +44046, O44046 +44047, O44047 +44048, O44048 +44049, O44049 +44050, O44050 +44051, O44051 +44052, O44052 +44053, O44053 +44054, O44054 +44055, O44055 +44056, O44056 +44057, O44057 +44058, O44058 +44059, O44059 +44060, O44060 +44061, O44061 +44062, O44062 +44063, O44063 +44064, O44064 +44065, O44065 +44066, O44066 +44067, O44067 +44068, O44068 +44069, O44069 +44070, O44070 +44071, O44071 +44072, O44072 +44073, O44073 +44074, O44074 +44075, O44075 +44076, O44076 +44077, O44077 +44078, O44078 +44079, O44079 +44080, O44080 +44081, O44081 +44082, O44082 +44083, O44083 +44084, O44084 +44085, O44085 +44086, O44086 +44087, O44087 +44088, O44088 +44089, O44089 +44090, O44090 +44091, O44091 +44092, O44092 +44093, O44093 +44094, O44094 +44095, O44095 +44096, O44096 +44097, O44097 +44098, O44098 +44099, O44099 +44100, O44100 +44101, O44101 +44102, O44102 +44103, O44103 +44104, O44104 +44105, O44105 +44106, O44106 +44107, O44107 +44108, O44108 +44109, O44109 +44110, O44110 +44111, O44111 +44112, O44112 +44113, O44113 +44114, O44114 +44115, O44115 +44116, O44116 +44117, O44117 +44118, O44118 +44119, O44119 +44120, O44120 +44121, O44121 +44122, O44122 +44123, O44123 +44124, O44124 +44125, O44125 +44126, O44126 +44127, O44127 +44128, O44128 +44129, O44129 +44130, O44130 +44131, O44131 +44132, O44132 +44133, O44133 +44134, O44134 +44135, O44135 +44136, O44136 +44137, O44137 +44138, O44138 +44139, O44139 +44140, O44140 +44141, O44141 +44142, O44142 +44143, O44143 +44144, O44144 +44145, O44145 +44146, O44146 +44147, O44147 +44148, O44148 +44149, O44149 +44150, O44150 +44151, O44151 +44152, O44152 +44153, O44153 +44154, O44154 +44155, O44155 +44156, O44156 +44157, O44157 +44158, O44158 +44159, O44159 +44160, O44160 +44161, O44161 +44162, O44162 +44163, O44163 +44164, O44164 +44165, O44165 +44166, O44166 +44167, O44167 +44168, O44168 +44169, O44169 +44170, O44170 +44171, O44171 +44172, O44172 +44173, O44173 +44174, O44174 +44175, O44175 +44176, O44176 +44177, O44177 +44178, O44178 +44179, O44179 +44180, O44180 +44181, O44181 +44182, O44182 +44183, O44183 +44184, O44184 +44185, O44185 +44186, O44186 +44187, O44187 +44188, O44188 +44189, O44189 +44190, O44190 +44191, O44191 +44192, O44192 +44193, O44193 +44194, O44194 +44195, O44195 +44196, O44196 +44197, O44197 +44198, O44198 +44199, O44199 +44200, O44200 +44201, O44201 +44202, O44202 +44203, O44203 +44204, O44204 +44205, O44205 +44206, O44206 +44207, O44207 +44208, O44208 +44209, O44209 +44210, O44210 +44211, O44211 +44212, O44212 +44213, O44213 +44214, O44214 +44215, O44215 +44216, O44216 +44217, O44217 +44218, O44218 +44219, O44219 +44220, O44220 +44221, O44221 +44222, O44222 +44223, O44223 +44224, O44224 +44225, O44225 +44226, O44226 +44227, O44227 +44228, O44228 +44229, O44229 +44230, O44230 +44231, O44231 +44232, O44232 +44233, O44233 +44234, O44234 +44235, O44235 +44236, O44236 +44237, O44237 +44238, O44238 +44239, O44239 +44240, O44240 +44241, O44241 +44242, O44242 +44243, O44243 +44244, O44244 +44245, O44245 +44246, O44246 +44247, O44247 +44248, O44248 +44249, O44249 +44250, O44250 +44251, O44251 +44252, O44252 +44253, O44253 +44254, O44254 +44255, O44255 +44256, O44256 +44257, O44257 +44258, O44258 +44259, O44259 +44260, O44260 +44261, O44261 +44262, O44262 +44263, O44263 +44264, O44264 +44265, O44265 +44266, O44266 +44267, O44267 +44268, O44268 +44269, O44269 +44270, O44270 +44271, O44271 +44272, O44272 +44273, O44273 +44274, O44274 +44275, O44275 +44276, O44276 +44277, O44277 +44278, O44278 +44279, O44279 +44280, O44280 +44281, O44281 +44282, O44282 +44283, O44283 +44284, O44284 +44285, O44285 +44286, O44286 +44287, O44287 +44288, O44288 +44289, O44289 +44290, O44290 +44291, O44291 +44292, O44292 +44293, O44293 +44294, O44294 +44295, O44295 +44296, O44296 +44297, O44297 +44298, O44298 +44299, O44299 +44300, O44300 +44301, O44301 +44302, O44302 +44303, O44303 +44304, O44304 +44305, O44305 +44306, O44306 +44307, O44307 +44308, O44308 +44309, O44309 +44310, O44310 +44311, O44311 +44312, O44312 +44313, O44313 +44314, O44314 +44315, O44315 +44316, O44316 +44317, O44317 +44318, O44318 +44319, O44319 +44320, O44320 +44321, O44321 +44322, O44322 +44323, O44323 +44324, O44324 +44325, O44325 +44326, O44326 +44327, O44327 +44328, O44328 +44329, O44329 +44330, O44330 +44331, O44331 +44332, O44332 +44333, O44333 +44334, O44334 +44335, O44335 +44336, O44336 +44337, O44337 +44338, O44338 +44339, O44339 +44340, O44340 +44341, O44341 +44342, O44342 +44343, O44343 +44344, O44344 +44345, O44345 +44346, O44346 +44347, O44347 +44348, O44348 +44349, O44349 +44350, O44350 +44351, O44351 +44352, O44352 +44353, O44353 +44354, O44354 +44355, O44355 +44356, O44356 +44357, O44357 +44358, O44358 +44359, O44359 +44360, O44360 +44361, O44361 +44362, O44362 +44363, O44363 +44364, O44364 +44365, O44365 +44366, O44366 +44367, O44367 +44368, O44368 +44369, O44369 +44370, O44370 +44371, O44371 +44372, O44372 +44373, O44373 +44374, O44374 +44375, O44375 +44376, O44376 +44377, O44377 +44378, O44378 +44379, O44379 +44380, O44380 +44381, O44381 +44382, O44382 +44383, O44383 +44384, O44384 +44385, O44385 +44386, O44386 +44387, O44387 +44388, O44388 +44389, O44389 +44390, O44390 +44391, O44391 +44392, O44392 +44393, O44393 +44394, O44394 +44395, O44395 +44396, O44396 +44397, O44397 +44398, O44398 +44399, O44399 +44400, O44400 +44401, O44401 +44402, O44402 +44403, O44403 +44404, O44404 +44405, O44405 +44406, O44406 +44407, O44407 +44408, O44408 +44409, O44409 +44410, O44410 +44411, O44411 +44412, O44412 +44413, O44413 +44414, O44414 +44415, O44415 +44416, O44416 +44417, O44417 +44418, O44418 +44419, O44419 +44420, O44420 +44421, O44421 +44422, O44422 +44423, O44423 +44424, O44424 +44425, O44425 +44426, O44426 +44427, O44427 +44428, O44428 +44429, O44429 +44430, O44430 +44431, O44431 +44432, O44432 +44433, O44433 +44434, O44434 +44435, O44435 +44436, O44436 +44437, O44437 +44438, O44438 +44439, O44439 +44440, O44440 +44441, O44441 +44442, O44442 +44443, O44443 +44444, O44444 +44445, O44445 +44446, O44446 +44447, O44447 +44448, O44448 +44449, O44449 +44450, O44450 +44451, O44451 +44452, O44452 +44453, O44453 +44454, O44454 +44455, O44455 +44456, O44456 +44457, O44457 +44458, O44458 +44459, O44459 +44460, O44460 +44461, O44461 +44462, O44462 +44463, O44463 +44464, O44464 +44465, O44465 +44466, O44466 +44467, O44467 +44468, O44468 +44469, O44469 +44470, O44470 +44471, O44471 +44472, O44472 +44473, O44473 +44474, O44474 +44475, O44475 +44476, O44476 +44477, O44477 +44478, O44478 +44479, O44479 +44480, O44480 +44481, O44481 +44482, O44482 +44483, O44483 +44484, O44484 +44485, O44485 +44486, O44486 +44487, O44487 +44488, O44488 +44489, O44489 +44490, O44490 +44491, O44491 +44492, O44492 +44493, O44493 +44494, O44494 +44495, O44495 +44496, O44496 +44497, O44497 +44498, O44498 +44499, O44499 +44500, O44500 +44501, O44501 +44502, O44502 +44503, O44503 +44504, O44504 +44505, O44505 +44506, O44506 +44507, O44507 +44508, O44508 +44509, O44509 +44510, O44510 +44511, O44511 +44512, O44512 +44513, O44513 +44514, O44514 +44515, O44515 +44516, O44516 +44517, O44517 +44518, O44518 +44519, O44519 +44520, O44520 +44521, O44521 +44522, O44522 +44523, O44523 +44524, O44524 +44525, O44525 +44526, O44526 +44527, O44527 +44528, O44528 +44529, O44529 +44530, O44530 +44531, O44531 +44532, O44532 +44533, O44533 +44534, O44534 +44535, O44535 +44536, O44536 +44537, O44537 +44538, O44538 +44539, O44539 +44540, O44540 +44541, O44541 +44542, O44542 +44543, O44543 +44544, O44544 +44545, O44545 +44546, O44546 +44547, O44547 +44548, O44548 +44549, O44549 +44550, O44550 +44551, O44551 +44552, O44552 +44553, O44553 +44554, O44554 +44555, O44555 +44556, O44556 +44557, O44557 +44558, O44558 +44559, O44559 +44560, O44560 +44561, O44561 +44562, O44562 +44563, O44563 +44564, O44564 +44565, O44565 +44566, O44566 +44567, O44567 +44568, O44568 +44569, O44569 +44570, O44570 +44571, O44571 +44572, O44572 +44573, O44573 +44574, O44574 +44575, O44575 +44576, O44576 +44577, O44577 +44578, O44578 +44579, O44579 +44580, O44580 +44581, O44581 +44582, O44582 +44583, O44583 +44584, O44584 +44585, O44585 +44586, O44586 +44587, O44587 +44588, O44588 +44589, O44589 +44590, O44590 +44591, O44591 +44592, O44592 +44593, O44593 +44594, O44594 +44595, O44595 +44596, O44596 +44597, O44597 +44598, O44598 +44599, O44599 +44600, O44600 +44601, O44601 +44602, O44602 +44603, O44603 +44604, O44604 +44605, O44605 +44606, O44606 +44607, O44607 +44608, O44608 +44609, O44609 +44610, O44610 +44611, O44611 +44612, O44612 +44613, O44613 +44614, O44614 +44615, O44615 +44616, O44616 +44617, O44617 +44618, O44618 +44619, O44619 +44620, O44620 +44621, O44621 +44622, O44622 +44623, O44623 +44624, O44624 +44625, O44625 +44626, O44626 +44627, O44627 +44628, O44628 +44629, O44629 +44630, O44630 +44631, O44631 +44632, O44632 +44633, O44633 +44634, O44634 +44635, O44635 +44636, O44636 +44637, O44637 +44638, O44638 +44639, O44639 +44640, O44640 +44641, O44641 +44642, O44642 +44643, O44643 +44644, O44644 +44645, O44645 +44646, O44646 +44647, O44647 +44648, O44648 +44649, O44649 +44650, O44650 +44651, O44651 +44652, O44652 +44653, O44653 +44654, O44654 +44655, O44655 +44656, O44656 +44657, O44657 +44658, O44658 +44659, O44659 +44660, O44660 +44661, O44661 +44662, O44662 +44663, O44663 +44664, O44664 +44665, O44665 +44666, O44666 +44667, O44667 +44668, O44668 +44669, O44669 +44670, O44670 +44671, O44671 +44672, O44672 +44673, O44673 +44674, O44674 +44675, O44675 +44676, O44676 +44677, O44677 +44678, O44678 +44679, O44679 +44680, O44680 +44681, O44681 +44682, O44682 +44683, O44683 +44684, O44684 +44685, O44685 +44686, O44686 +44687, O44687 +44688, O44688 +44689, O44689 +44690, O44690 +44691, O44691 +44692, O44692 +44693, O44693 +44694, O44694 +44695, O44695 +44696, O44696 +44697, O44697 +44698, O44698 +44699, O44699 +44700, O44700 +44701, O44701 +44702, O44702 +44703, O44703 +44704, O44704 +44705, O44705 +44706, O44706 +44707, O44707 +44708, O44708 +44709, O44709 +44710, O44710 +44711, O44711 +44712, O44712 +44713, O44713 +44714, O44714 +44715, O44715 +44716, O44716 +44717, O44717 +44718, O44718 +44719, O44719 +44720, O44720 +44721, O44721 +44722, O44722 +44723, O44723 +44724, O44724 +44725, O44725 +44726, O44726 +44727, O44727 +44728, O44728 +44729, O44729 +44730, O44730 +44731, O44731 +44732, O44732 +44733, O44733 +44734, O44734 +44735, O44735 +44736, O44736 +44737, O44737 +44738, O44738 +44739, O44739 +44740, O44740 +44741, O44741 +44742, O44742 +44743, O44743 +44744, O44744 +44745, O44745 +44746, O44746 +44747, O44747 +44748, O44748 +44749, O44749 +44750, O44750 +44751, O44751 +44752, O44752 +44753, O44753 +44754, O44754 +44755, O44755 +44756, O44756 +44757, O44757 +44758, O44758 +44759, O44759 +44760, O44760 +44761, O44761 +44762, O44762 +44763, O44763 +44764, O44764 +44765, O44765 +44766, O44766 +44767, O44767 +44768, O44768 +44769, O44769 +44770, O44770 +44771, O44771 +44772, O44772 +44773, O44773 +44774, O44774 +44775, O44775 +44776, O44776 +44777, O44777 +44778, O44778 +44779, O44779 +44780, O44780 +44781, O44781 +44782, O44782 +44783, O44783 +44784, O44784 +44785, O44785 +44786, O44786 +44787, O44787 +44788, O44788 +44789, O44789 +44790, O44790 +44791, O44791 +44792, O44792 +44793, O44793 +44794, O44794 +44795, O44795 +44796, O44796 +44797, O44797 +44798, O44798 +44799, O44799 +44800, O44800 +44801, O44801 +44802, O44802 +44803, O44803 +44804, O44804 +44805, O44805 +44806, O44806 +44807, O44807 +44808, O44808 +44809, O44809 +44810, O44810 +44811, O44811 +44812, O44812 +44813, O44813 +44814, O44814 +44815, O44815 +44816, O44816 +44817, O44817 +44818, O44818 +44819, O44819 +44820, O44820 +44821, O44821 +44822, O44822 +44823, O44823 +44824, O44824 +44825, O44825 +44826, O44826 +44827, O44827 +44828, O44828 +44829, O44829 +44830, O44830 +44831, O44831 +44832, O44832 +44833, O44833 +44834, O44834 +44835, O44835 +44836, O44836 +44837, O44837 +44838, O44838 +44839, O44839 +44840, O44840 +44841, O44841 +44842, O44842 +44843, O44843 +44844, O44844 +44845, O44845 +44846, O44846 +44847, O44847 +44848, O44848 +44849, O44849 +44850, O44850 +44851, O44851 +44852, O44852 +44853, O44853 +44854, O44854 +44855, O44855 +44856, O44856 +44857, O44857 +44858, O44858 +44859, O44859 +44860, O44860 +44861, O44861 +44862, O44862 +44863, O44863 +44864, O44864 +44865, O44865 +44866, O44866 +44867, O44867 +44868, O44868 +44869, O44869 +44870, O44870 +44871, O44871 +44872, O44872 +44873, O44873 +44874, O44874 +44875, O44875 +44876, O44876 +44877, O44877 +44878, O44878 +44879, O44879 +44880, O44880 +44881, O44881 +44882, O44882 +44883, O44883 +44884, O44884 +44885, O44885 +44886, O44886 +44887, O44887 +44888, O44888 +44889, O44889 +44890, O44890 +44891, O44891 +44892, O44892 +44893, O44893 +44894, O44894 +44895, O44895 +44896, O44896 +44897, O44897 +44898, O44898 +44899, O44899 +44900, O44900 +44901, O44901 +44902, O44902 +44903, O44903 +44904, O44904 +44905, O44905 +44906, O44906 +44907, O44907 +44908, O44908 +44909, O44909 +44910, O44910 +44911, O44911 +44912, O44912 +44913, O44913 +44914, O44914 +44915, O44915 +44916, O44916 +44917, O44917 +44918, O44918 +44919, O44919 +44920, O44920 +44921, O44921 +44922, O44922 +44923, O44923 +44924, O44924 +44925, O44925 +44926, O44926 +44927, O44927 +44928, O44928 +44929, O44929 +44930, O44930 +44931, O44931 +44932, O44932 +44933, O44933 +44934, O44934 +44935, O44935 +44936, O44936 +44937, O44937 +44938, O44938 +44939, O44939 +44940, O44940 +44941, O44941 +44942, O44942 +44943, O44943 +44944, O44944 +44945, O44945 +44946, O44946 +44947, O44947 +44948, O44948 +44949, O44949 +44950, O44950 +44951, O44951 +44952, O44952 +44953, O44953 +44954, O44954 +44955, O44955 +44956, O44956 +44957, O44957 +44958, O44958 +44959, O44959 +44960, O44960 +44961, O44961 +44962, O44962 +44963, O44963 +44964, O44964 +44965, O44965 +44966, O44966 +44967, O44967 +44968, O44968 +44969, O44969 +44970, O44970 +44971, O44971 +44972, O44972 +44973, O44973 +44974, O44974 +44975, O44975 +44976, O44976 +44977, O44977 +44978, O44978 +44979, O44979 +44980, O44980 +44981, O44981 +44982, O44982 +44983, O44983 +44984, O44984 +44985, O44985 +44986, O44986 +44987, O44987 +44988, O44988 +44989, O44989 +44990, O44990 +44991, O44991 +44992, O44992 +44993, O44993 +44994, O44994 +44995, O44995 +44996, O44996 +44997, O44997 +44998, O44998 +44999, O44999 +45000, O45000 +45001, O45001 +45002, O45002 +45003, O45003 +45004, O45004 +45005, O45005 +45006, O45006 +45007, O45007 +45008, O45008 +45009, O45009 +45010, O45010 +45011, O45011 +45012, O45012 +45013, O45013 +45014, O45014 +45015, O45015 +45016, O45016 +45017, O45017 +45018, O45018 +45019, O45019 +45020, O45020 +45021, O45021 +45022, O45022 +45023, O45023 +45024, O45024 +45025, O45025 +45026, O45026 +45027, O45027 +45028, O45028 +45029, O45029 +45030, O45030 +45031, O45031 +45032, O45032 +45033, O45033 +45034, O45034 +45035, O45035 +45036, O45036 +45037, O45037 +45038, O45038 +45039, O45039 +45040, O45040 +45041, O45041 +45042, O45042 +45043, O45043 +45044, O45044 +45045, O45045 +45046, O45046 +45047, O45047 +45048, O45048 +45049, O45049 +45050, O45050 +45051, O45051 +45052, O45052 +45053, O45053 +45054, O45054 +45055, O45055 +45056, O45056 +45057, O45057 +45058, O45058 +45059, O45059 +45060, O45060 +45061, O45061 +45062, O45062 +45063, O45063 +45064, O45064 +45065, O45065 +45066, O45066 +45067, O45067 +45068, O45068 +45069, O45069 +45070, O45070 +45071, O45071 +45072, O45072 +45073, O45073 +45074, O45074 +45075, O45075 +45076, O45076 +45077, O45077 +45078, O45078 +45079, O45079 +45080, O45080 +45081, O45081 +45082, O45082 +45083, O45083 +45084, O45084 +45085, O45085 +45086, O45086 +45087, O45087 +45088, O45088 +45089, O45089 +45090, O45090 +45091, O45091 +45092, O45092 +45093, O45093 +45094, O45094 +45095, O45095 +45096, O45096 +45097, O45097 +45098, O45098 +45099, O45099 +45100, O45100 +45101, O45101 +45102, O45102 +45103, O45103 +45104, O45104 +45105, O45105 +45106, O45106 +45107, O45107 +45108, O45108 +45109, O45109 +45110, O45110 +45111, O45111 +45112, O45112 +45113, O45113 +45114, O45114 +45115, O45115 +45116, O45116 +45117, O45117 +45118, O45118 +45119, O45119 +45120, O45120 +45121, O45121 +45122, O45122 +45123, O45123 +45124, O45124 +45125, O45125 +45126, O45126 +45127, O45127 +45128, O45128 +45129, O45129 +45130, O45130 +45131, O45131 +45132, O45132 +45133, O45133 +45134, O45134 +45135, O45135 +45136, O45136 +45137, O45137 +45138, O45138 +45139, O45139 +45140, O45140 +45141, O45141 +45142, O45142 +45143, O45143 +45144, O45144 +45145, O45145 +45146, O45146 +45147, O45147 +45148, O45148 +45149, O45149 +45150, O45150 +45151, O45151 +45152, O45152 +45153, O45153 +45154, O45154 +45155, O45155 +45156, O45156 +45157, O45157 +45158, O45158 +45159, O45159 +45160, O45160 +45161, O45161 +45162, O45162 +45163, O45163 +45164, O45164 +45165, O45165 +45166, O45166 +45167, O45167 +45168, O45168 +45169, O45169 +45170, O45170 +45171, O45171 +45172, O45172 +45173, O45173 +45174, O45174 +45175, O45175 +45176, O45176 +45177, O45177 +45178, O45178 +45179, O45179 +45180, O45180 +45181, O45181 +45182, O45182 +45183, O45183 +45184, O45184 +45185, O45185 +45186, O45186 +45187, O45187 +45188, O45188 +45189, O45189 +45190, O45190 +45191, O45191 +45192, O45192 +45193, O45193 +45194, O45194 +45195, O45195 +45196, O45196 +45197, O45197 +45198, O45198 +45199, O45199 +45200, O45200 +45201, O45201 +45202, O45202 +45203, O45203 +45204, O45204 +45205, O45205 +45206, O45206 +45207, O45207 +45208, O45208 +45209, O45209 +45210, O45210 +45211, O45211 +45212, O45212 +45213, O45213 +45214, O45214 +45215, O45215 +45216, O45216 +45217, O45217 +45218, O45218 +45219, O45219 +45220, O45220 +45221, O45221 +45222, O45222 +45223, O45223 +45224, O45224 +45225, O45225 +45226, O45226 +45227, O45227 +45228, O45228 +45229, O45229 +45230, O45230 +45231, O45231 +45232, O45232 +45233, O45233 +45234, O45234 +45235, O45235 +45236, O45236 +45237, O45237 +45238, O45238 +45239, O45239 +45240, O45240 +45241, O45241 +45242, O45242 +45243, O45243 +45244, O45244 +45245, O45245 +45246, O45246 +45247, O45247 +45248, O45248 +45249, O45249 +45250, O45250 +45251, O45251 +45252, O45252 +45253, O45253 +45254, O45254 +45255, O45255 +45256, O45256 +45257, O45257 +45258, O45258 +45259, O45259 +45260, O45260 +45261, O45261 +45262, O45262 +45263, O45263 +45264, O45264 +45265, O45265 +45266, O45266 +45267, O45267 +45268, O45268 +45269, O45269 +45270, O45270 +45271, O45271 +45272, O45272 +45273, O45273 +45274, O45274 +45275, O45275 +45276, O45276 +45277, O45277 +45278, O45278 +45279, O45279 +45280, O45280 +45281, O45281 +45282, O45282 +45283, O45283 +45284, O45284 +45285, O45285 +45286, O45286 +45287, O45287 +45288, O45288 +45289, O45289 +45290, O45290 +45291, O45291 +45292, O45292 +45293, O45293 +45294, O45294 +45295, O45295 +45296, O45296 +45297, O45297 +45298, O45298 +45299, O45299 +45300, O45300 +45301, O45301 +45302, O45302 +45303, O45303 +45304, O45304 +45305, O45305 +45306, O45306 +45307, O45307 +45308, O45308 +45309, O45309 +45310, O45310 +45311, O45311 +45312, O45312 +45313, O45313 +45314, O45314 +45315, O45315 +45316, O45316 +45317, O45317 +45318, O45318 +45319, O45319 +45320, O45320 +45321, O45321 +45322, O45322 +45323, O45323 +45324, O45324 +45325, O45325 +45326, O45326 +45327, O45327 +45328, O45328 +45329, O45329 +45330, O45330 +45331, O45331 +45332, O45332 +45333, O45333 +45334, O45334 +45335, O45335 +45336, O45336 +45337, O45337 +45338, O45338 +45339, O45339 +45340, O45340 +45341, O45341 +45342, O45342 +45343, O45343 +45344, O45344 +45345, O45345 +45346, O45346 +45347, O45347 +45348, O45348 +45349, O45349 +45350, O45350 +45351, O45351 +45352, O45352 +45353, O45353 +45354, O45354 +45355, O45355 +45356, O45356 +45357, O45357 +45358, O45358 +45359, O45359 +45360, O45360 +45361, O45361 +45362, O45362 +45363, O45363 +45364, O45364 +45365, O45365 +45366, O45366 +45367, O45367 +45368, O45368 +45369, O45369 +45370, O45370 +45371, O45371 +45372, O45372 +45373, O45373 +45374, O45374 +45375, O45375 +45376, O45376 +45377, O45377 +45378, O45378 +45379, O45379 +45380, O45380 +45381, O45381 +45382, O45382 +45383, O45383 +45384, O45384 +45385, O45385 +45386, O45386 +45387, O45387 +45388, O45388 +45389, O45389 +45390, O45390 +45391, O45391 +45392, O45392 +45393, O45393 +45394, O45394 +45395, O45395 +45396, O45396 +45397, O45397 +45398, O45398 +45399, O45399 +45400, O45400 +45401, O45401 +45402, O45402 +45403, O45403 +45404, O45404 +45405, O45405 +45406, O45406 +45407, O45407 +45408, O45408 +45409, O45409 +45410, O45410 +45411, O45411 +45412, O45412 +45413, O45413 +45414, O45414 +45415, O45415 +45416, O45416 +45417, O45417 +45418, O45418 +45419, O45419 +45420, O45420 +45421, O45421 +45422, O45422 +45423, O45423 +45424, O45424 +45425, O45425 +45426, O45426 +45427, O45427 +45428, O45428 +45429, O45429 +45430, O45430 +45431, O45431 +45432, O45432 +45433, O45433 +45434, O45434 +45435, O45435 +45436, O45436 +45437, O45437 +45438, O45438 +45439, O45439 +45440, O45440 +45441, O45441 +45442, O45442 +45443, O45443 +45444, O45444 +45445, O45445 +45446, O45446 +45447, O45447 +45448, O45448 +45449, O45449 +45450, O45450 +45451, O45451 +45452, O45452 +45453, O45453 +45454, O45454 +45455, O45455 +45456, O45456 +45457, O45457 +45458, O45458 +45459, O45459 +45460, O45460 +45461, O45461 +45462, O45462 +45463, O45463 +45464, O45464 +45465, O45465 +45466, O45466 +45467, O45467 +45468, O45468 +45469, O45469 +45470, O45470 +45471, O45471 +45472, O45472 +45473, O45473 +45474, O45474 +45475, O45475 +45476, O45476 +45477, O45477 +45478, O45478 +45479, O45479 +45480, O45480 +45481, O45481 +45482, O45482 +45483, O45483 +45484, O45484 +45485, O45485 +45486, O45486 +45487, O45487 +45488, O45488 +45489, O45489 +45490, O45490 +45491, O45491 +45492, O45492 +45493, O45493 +45494, O45494 +45495, O45495 +45496, O45496 +45497, O45497 +45498, O45498 +45499, O45499 +45500, O45500 +45501, O45501 +45502, O45502 +45503, O45503 +45504, O45504 +45505, O45505 +45506, O45506 +45507, O45507 +45508, O45508 +45509, O45509 +45510, O45510 +45511, O45511 +45512, O45512 +45513, O45513 +45514, O45514 +45515, O45515 +45516, O45516 +45517, O45517 +45518, O45518 +45519, O45519 +45520, O45520 +45521, O45521 +45522, O45522 +45523, O45523 +45524, O45524 +45525, O45525 +45526, O45526 +45527, O45527 +45528, O45528 +45529, O45529 +45530, O45530 +45531, O45531 +45532, O45532 +45533, O45533 +45534, O45534 +45535, O45535 +45536, O45536 +45537, O45537 +45538, O45538 +45539, O45539 +45540, O45540 +45541, O45541 +45542, O45542 +45543, O45543 +45544, O45544 +45545, O45545 +45546, O45546 +45547, O45547 +45548, O45548 +45549, O45549 +45550, O45550 +45551, O45551 +45552, O45552 +45553, O45553 +45554, O45554 +45555, O45555 +45556, O45556 +45557, O45557 +45558, O45558 +45559, O45559 +45560, O45560 +45561, O45561 +45562, O45562 +45563, O45563 +45564, O45564 +45565, O45565 +45566, O45566 +45567, O45567 +45568, O45568 +45569, O45569 +45570, O45570 +45571, O45571 +45572, O45572 +45573, O45573 +45574, O45574 +45575, O45575 +45576, O45576 +45577, O45577 +45578, O45578 +45579, O45579 +45580, O45580 +45581, O45581 +45582, O45582 +45583, O45583 +45584, O45584 +45585, O45585 +45586, O45586 +45587, O45587 +45588, O45588 +45589, O45589 +45590, O45590 +45591, O45591 +45592, O45592 +45593, O45593 +45594, O45594 +45595, O45595 +45596, O45596 +45597, O45597 +45598, O45598 +45599, O45599 +45600, O45600 +45601, O45601 +45602, O45602 +45603, O45603 +45604, O45604 +45605, O45605 +45606, O45606 +45607, O45607 +45608, O45608 +45609, O45609 +45610, O45610 +45611, O45611 +45612, O45612 +45613, O45613 +45614, O45614 +45615, O45615 +45616, O45616 +45617, O45617 +45618, O45618 +45619, O45619 +45620, O45620 +45621, O45621 +45622, O45622 +45623, O45623 +45624, O45624 +45625, O45625 +45626, O45626 +45627, O45627 +45628, O45628 +45629, O45629 +45630, O45630 +45631, O45631 +45632, O45632 +45633, O45633 +45634, O45634 +45635, O45635 +45636, O45636 +45637, O45637 +45638, O45638 +45639, O45639 +45640, O45640 +45641, O45641 +45642, O45642 +45643, O45643 +45644, O45644 +45645, O45645 +45646, O45646 +45647, O45647 +45648, O45648 +45649, O45649 +45650, O45650 +45651, O45651 +45652, O45652 +45653, O45653 +45654, O45654 +45655, O45655 +45656, O45656 +45657, O45657 +45658, O45658 +45659, O45659 +45660, O45660 +45661, O45661 +45662, O45662 +45663, O45663 +45664, O45664 +45665, O45665 +45666, O45666 +45667, O45667 +45668, O45668 +45669, O45669 +45670, O45670 +45671, O45671 +45672, O45672 +45673, O45673 +45674, O45674 +45675, O45675 +45676, O45676 +45677, O45677 +45678, O45678 +45679, O45679 +45680, O45680 +45681, O45681 +45682, O45682 +45683, O45683 +45684, O45684 +45685, O45685 +45686, O45686 +45687, O45687 +45688, O45688 +45689, O45689 +45690, O45690 +45691, O45691 +45692, O45692 +45693, O45693 +45694, O45694 +45695, O45695 +45696, O45696 +45697, O45697 +45698, O45698 +45699, O45699 +45700, O45700 +45701, O45701 +45702, O45702 +45703, O45703 +45704, O45704 +45705, O45705 +45706, O45706 +45707, O45707 +45708, O45708 +45709, O45709 +45710, O45710 +45711, O45711 +45712, O45712 +45713, O45713 +45714, O45714 +45715, O45715 +45716, O45716 +45717, O45717 +45718, O45718 +45719, O45719 +45720, O45720 +45721, O45721 +45722, O45722 +45723, O45723 +45724, O45724 +45725, O45725 +45726, O45726 +45727, O45727 +45728, O45728 +45729, O45729 +45730, O45730 +45731, O45731 +45732, O45732 +45733, O45733 +45734, O45734 +45735, O45735 +45736, O45736 +45737, O45737 +45738, O45738 +45739, O45739 +45740, O45740 +45741, O45741 +45742, O45742 +45743, O45743 +45744, O45744 +45745, O45745 +45746, O45746 +45747, O45747 +45748, O45748 +45749, O45749 +45750, O45750 +45751, O45751 +45752, O45752 +45753, O45753 +45754, O45754 +45755, O45755 +45756, O45756 +45757, O45757 +45758, O45758 +45759, O45759 +45760, O45760 +45761, O45761 +45762, O45762 +45763, O45763 +45764, O45764 +45765, O45765 +45766, O45766 +45767, O45767 +45768, O45768 +45769, O45769 +45770, O45770 +45771, O45771 +45772, O45772 +45773, O45773 +45774, O45774 +45775, O45775 +45776, O45776 +45777, O45777 +45778, O45778 +45779, O45779 +45780, O45780 +45781, O45781 +45782, O45782 +45783, O45783 +45784, O45784 +45785, O45785 +45786, O45786 +45787, O45787 +45788, O45788 +45789, O45789 +45790, O45790 +45791, O45791 +45792, O45792 +45793, O45793 +45794, O45794 +45795, O45795 +45796, O45796 +45797, O45797 +45798, O45798 +45799, O45799 +45800, O45800 +45801, O45801 +45802, O45802 +45803, O45803 +45804, O45804 +45805, O45805 +45806, O45806 +45807, O45807 +45808, O45808 +45809, O45809 +45810, O45810 +45811, O45811 +45812, O45812 +45813, O45813 +45814, O45814 +45815, O45815 +45816, O45816 +45817, O45817 +45818, O45818 +45819, O45819 +45820, O45820 +45821, O45821 +45822, O45822 +45823, O45823 +45824, O45824 +45825, O45825 +45826, O45826 +45827, O45827 +45828, O45828 +45829, O45829 +45830, O45830 +45831, O45831 +45832, O45832 +45833, O45833 +45834, O45834 +45835, O45835 +45836, O45836 +45837, O45837 +45838, O45838 +45839, O45839 +45840, O45840 +45841, O45841 +45842, O45842 +45843, O45843 +45844, O45844 +45845, O45845 +45846, O45846 +45847, O45847 +45848, O45848 +45849, O45849 +45850, O45850 +45851, O45851 +45852, O45852 +45853, O45853 +45854, O45854 +45855, O45855 +45856, O45856 +45857, O45857 +45858, O45858 +45859, O45859 +45860, O45860 +45861, O45861 +45862, O45862 +45863, O45863 +45864, O45864 +45865, O45865 +45866, O45866 +45867, O45867 +45868, O45868 +45869, O45869 +45870, O45870 +45871, O45871 +45872, O45872 +45873, O45873 +45874, O45874 +45875, O45875 +45876, O45876 +45877, O45877 +45878, O45878 +45879, O45879 +45880, O45880 +45881, O45881 +45882, O45882 +45883, O45883 +45884, O45884 +45885, O45885 +45886, O45886 +45887, O45887 +45888, O45888 +45889, O45889 +45890, O45890 +45891, O45891 +45892, O45892 +45893, O45893 +45894, O45894 +45895, O45895 +45896, O45896 +45897, O45897 +45898, O45898 +45899, O45899 +45900, O45900 +45901, O45901 +45902, O45902 +45903, O45903 +45904, O45904 +45905, O45905 +45906, O45906 +45907, O45907 +45908, O45908 +45909, O45909 +45910, O45910 +45911, O45911 +45912, O45912 +45913, O45913 +45914, O45914 +45915, O45915 +45916, O45916 +45917, O45917 +45918, O45918 +45919, O45919 +45920, O45920 +45921, O45921 +45922, O45922 +45923, O45923 +45924, O45924 +45925, O45925 +45926, O45926 +45927, O45927 +45928, O45928 +45929, O45929 +45930, O45930 +45931, O45931 +45932, O45932 +45933, O45933 +45934, O45934 +45935, O45935 +45936, O45936 +45937, O45937 +45938, O45938 +45939, O45939 +45940, O45940 +45941, O45941 +45942, O45942 +45943, O45943 +45944, O45944 +45945, O45945 +45946, O45946 +45947, O45947 +45948, O45948 +45949, O45949 +45950, O45950 +45951, O45951 +45952, O45952 +45953, O45953 +45954, O45954 +45955, O45955 +45956, O45956 +45957, O45957 +45958, O45958 +45959, O45959 +45960, O45960 +45961, O45961 +45962, O45962 +45963, O45963 +45964, O45964 +45965, O45965 +45966, O45966 +45967, O45967 +45968, O45968 +45969, O45969 +45970, O45970 +45971, O45971 +45972, O45972 +45973, O45973 +45974, O45974 +45975, O45975 +45976, O45976 +45977, O45977 +45978, O45978 +45979, O45979 +45980, O45980 +45981, O45981 +45982, O45982 +45983, O45983 +45984, O45984 +45985, O45985 +45986, O45986 +45987, O45987 +45988, O45988 +45989, O45989 +45990, O45990 +45991, O45991 +45992, O45992 +45993, O45993 +45994, O45994 +45995, O45995 +45996, O45996 +45997, O45997 +45998, O45998 +45999, O45999 +46000, O46000 +46001, O46001 +46002, O46002 +46003, O46003 +46004, O46004 +46005, O46005 +46006, O46006 +46007, O46007 +46008, O46008 +46009, O46009 +46010, O46010 +46011, O46011 +46012, O46012 +46013, O46013 +46014, O46014 +46015, O46015 +46016, O46016 +46017, O46017 +46018, O46018 +46019, O46019 +46020, O46020 +46021, O46021 +46022, O46022 +46023, O46023 +46024, O46024 +46025, O46025 +46026, O46026 +46027, O46027 +46028, O46028 +46029, O46029 +46030, O46030 +46031, O46031 +46032, O46032 +46033, O46033 +46034, O46034 +46035, O46035 +46036, O46036 +46037, O46037 +46038, O46038 +46039, O46039 +46040, O46040 +46041, O46041 +46042, O46042 +46043, O46043 +46044, O46044 +46045, O46045 +46046, O46046 +46047, O46047 +46048, O46048 +46049, O46049 +46050, O46050 +46051, O46051 +46052, O46052 +46053, O46053 +46054, O46054 +46055, O46055 +46056, O46056 +46057, O46057 +46058, O46058 +46059, O46059 +46060, O46060 +46061, O46061 +46062, O46062 +46063, O46063 +46064, O46064 +46065, O46065 +46066, O46066 +46067, O46067 +46068, O46068 +46069, O46069 +46070, O46070 +46071, O46071 +46072, O46072 +46073, O46073 +46074, O46074 +46075, O46075 +46076, O46076 +46077, O46077 +46078, O46078 +46079, O46079 +46080, O46080 +46081, O46081 +46082, O46082 +46083, O46083 +46084, O46084 +46085, O46085 +46086, O46086 +46087, O46087 +46088, O46088 +46089, O46089 +46090, O46090 +46091, O46091 +46092, O46092 +46093, O46093 +46094, O46094 +46095, O46095 +46096, O46096 +46097, O46097 +46098, O46098 +46099, O46099 +46100, O46100 +46101, O46101 +46102, O46102 +46103, O46103 +46104, O46104 +46105, O46105 +46106, O46106 +46107, O46107 +46108, O46108 +46109, O46109 +46110, O46110 +46111, O46111 +46112, O46112 +46113, O46113 +46114, O46114 +46115, O46115 +46116, O46116 +46117, O46117 +46118, O46118 +46119, O46119 +46120, O46120 +46121, O46121 +46122, O46122 +46123, O46123 +46124, O46124 +46125, O46125 +46126, O46126 +46127, O46127 +46128, O46128 +46129, O46129 +46130, O46130 +46131, O46131 +46132, O46132 +46133, O46133 +46134, O46134 +46135, O46135 +46136, O46136 +46137, O46137 +46138, O46138 +46139, O46139 +46140, O46140 +46141, O46141 +46142, O46142 +46143, O46143 +46144, O46144 +46145, O46145 +46146, O46146 +46147, O46147 +46148, O46148 +46149, O46149 +46150, O46150 +46151, O46151 +46152, O46152 +46153, O46153 +46154, O46154 +46155, O46155 +46156, O46156 +46157, O46157 +46158, O46158 +46159, O46159 +46160, O46160 +46161, O46161 +46162, O46162 +46163, O46163 +46164, O46164 +46165, O46165 +46166, O46166 +46167, O46167 +46168, O46168 +46169, O46169 +46170, O46170 +46171, O46171 +46172, O46172 +46173, O46173 +46174, O46174 +46175, O46175 +46176, O46176 +46177, O46177 +46178, O46178 +46179, O46179 +46180, O46180 +46181, O46181 +46182, O46182 +46183, O46183 +46184, O46184 +46185, O46185 +46186, O46186 +46187, O46187 +46188, O46188 +46189, O46189 +46190, O46190 +46191, O46191 +46192, O46192 +46193, O46193 +46194, O46194 +46195, O46195 +46196, O46196 +46197, O46197 +46198, O46198 +46199, O46199 +46200, O46200 +46201, O46201 +46202, O46202 +46203, O46203 +46204, O46204 +46205, O46205 +46206, O46206 +46207, O46207 +46208, O46208 +46209, O46209 +46210, O46210 +46211, O46211 +46212, O46212 +46213, O46213 +46214, O46214 +46215, O46215 +46216, O46216 +46217, O46217 +46218, O46218 +46219, O46219 +46220, O46220 +46221, O46221 +46222, O46222 +46223, O46223 +46224, O46224 +46225, O46225 +46226, O46226 +46227, O46227 +46228, O46228 +46229, O46229 +46230, O46230 +46231, O46231 +46232, O46232 +46233, O46233 +46234, O46234 +46235, O46235 +46236, O46236 +46237, O46237 +46238, O46238 +46239, O46239 +46240, O46240 +46241, O46241 +46242, O46242 +46243, O46243 +46244, O46244 +46245, O46245 +46246, O46246 +46247, O46247 +46248, O46248 +46249, O46249 +46250, O46250 +46251, O46251 +46252, O46252 +46253, O46253 +46254, O46254 +46255, O46255 +46256, O46256 +46257, O46257 +46258, O46258 +46259, O46259 +46260, O46260 +46261, O46261 +46262, O46262 +46263, O46263 +46264, O46264 +46265, O46265 +46266, O46266 +46267, O46267 +46268, O46268 +46269, O46269 +46270, O46270 +46271, O46271 +46272, O46272 +46273, O46273 +46274, O46274 +46275, O46275 +46276, O46276 +46277, O46277 +46278, O46278 +46279, O46279 +46280, O46280 +46281, O46281 +46282, O46282 +46283, O46283 +46284, O46284 +46285, O46285 +46286, O46286 +46287, O46287 +46288, O46288 +46289, O46289 +46290, O46290 +46291, O46291 +46292, O46292 +46293, O46293 +46294, O46294 +46295, O46295 +46296, O46296 +46297, O46297 +46298, O46298 +46299, O46299 +46300, O46300 +46301, O46301 +46302, O46302 +46303, O46303 +46304, O46304 +46305, O46305 +46306, O46306 +46307, O46307 +46308, O46308 +46309, O46309 +46310, O46310 +46311, O46311 +46312, O46312 +46313, O46313 +46314, O46314 +46315, O46315 +46316, O46316 +46317, O46317 +46318, O46318 +46319, O46319 +46320, O46320 +46321, O46321 +46322, O46322 +46323, O46323 +46324, O46324 +46325, O46325 +46326, O46326 +46327, O46327 +46328, O46328 +46329, O46329 +46330, O46330 +46331, O46331 +46332, O46332 +46333, O46333 +46334, O46334 +46335, O46335 +46336, O46336 +46337, O46337 +46338, O46338 +46339, O46339 +46340, O46340 +46341, O46341 +46342, O46342 +46343, O46343 +46344, O46344 +46345, O46345 +46346, O46346 +46347, O46347 +46348, O46348 +46349, O46349 +46350, O46350 +46351, O46351 +46352, O46352 +46353, O46353 +46354, O46354 +46355, O46355 +46356, O46356 +46357, O46357 +46358, O46358 +46359, O46359 +46360, O46360 +46361, O46361 +46362, O46362 +46363, O46363 +46364, O46364 +46365, O46365 +46366, O46366 +46367, O46367 +46368, O46368 +46369, O46369 +46370, O46370 +46371, O46371 +46372, O46372 +46373, O46373 +46374, O46374 +46375, O46375 +46376, O46376 +46377, O46377 +46378, O46378 +46379, O46379 +46380, O46380 +46381, O46381 +46382, O46382 +46383, O46383 +46384, O46384 +46385, O46385 +46386, O46386 +46387, O46387 +46388, O46388 +46389, O46389 +46390, O46390 +46391, O46391 +46392, O46392 +46393, O46393 +46394, O46394 +46395, O46395 +46396, O46396 +46397, O46397 +46398, O46398 +46399, O46399 +46400, O46400 +46401, O46401 +46402, O46402 +46403, O46403 +46404, O46404 +46405, O46405 +46406, O46406 +46407, O46407 +46408, O46408 +46409, O46409 +46410, O46410 +46411, O46411 +46412, O46412 +46413, O46413 +46414, O46414 +46415, O46415 +46416, O46416 +46417, O46417 +46418, O46418 +46419, O46419 +46420, O46420 +46421, O46421 +46422, O46422 +46423, O46423 +46424, O46424 +46425, O46425 +46426, O46426 +46427, O46427 +46428, O46428 +46429, O46429 +46430, O46430 +46431, O46431 +46432, O46432 +46433, O46433 +46434, O46434 +46435, O46435 +46436, O46436 +46437, O46437 +46438, O46438 +46439, O46439 +46440, O46440 +46441, O46441 +46442, O46442 +46443, O46443 +46444, O46444 +46445, O46445 +46446, O46446 +46447, O46447 +46448, O46448 +46449, O46449 +46450, O46450 +46451, O46451 +46452, O46452 +46453, O46453 +46454, O46454 +46455, O46455 +46456, O46456 +46457, O46457 +46458, O46458 +46459, O46459 +46460, O46460 +46461, O46461 +46462, O46462 +46463, O46463 +46464, O46464 +46465, O46465 +46466, O46466 +46467, O46467 +46468, O46468 +46469, O46469 +46470, O46470 +46471, O46471 +46472, O46472 +46473, O46473 +46474, O46474 +46475, O46475 +46476, O46476 +46477, O46477 +46478, O46478 +46479, O46479 +46480, O46480 +46481, O46481 +46482, O46482 +46483, O46483 +46484, O46484 +46485, O46485 +46486, O46486 +46487, O46487 +46488, O46488 +46489, O46489 +46490, O46490 +46491, O46491 +46492, O46492 +46493, O46493 +46494, O46494 +46495, O46495 +46496, O46496 +46497, O46497 +46498, O46498 +46499, O46499 +46500, O46500 +46501, O46501 +46502, O46502 +46503, O46503 +46504, O46504 +46505, O46505 +46506, O46506 +46507, O46507 +46508, O46508 +46509, O46509 +46510, O46510 +46511, O46511 +46512, O46512 +46513, O46513 +46514, O46514 +46515, O46515 +46516, O46516 +46517, O46517 +46518, O46518 +46519, O46519 +46520, O46520 +46521, O46521 +46522, O46522 +46523, O46523 +46524, O46524 +46525, O46525 +46526, O46526 +46527, O46527 +46528, O46528 +46529, O46529 +46530, O46530 +46531, O46531 +46532, O46532 +46533, O46533 +46534, O46534 +46535, O46535 +46536, O46536 +46537, O46537 +46538, O46538 +46539, O46539 +46540, O46540 +46541, O46541 +46542, O46542 +46543, O46543 +46544, O46544 +46545, O46545 +46546, O46546 +46547, O46547 +46548, O46548 +46549, O46549 +46550, O46550 +46551, O46551 +46552, O46552 +46553, O46553 +46554, O46554 +46555, O46555 +46556, O46556 +46557, O46557 +46558, O46558 +46559, O46559 +46560, O46560 +46561, O46561 +46562, O46562 +46563, O46563 +46564, O46564 +46565, O46565 +46566, O46566 +46567, O46567 +46568, O46568 +46569, O46569 +46570, O46570 +46571, O46571 +46572, O46572 +46573, O46573 +46574, O46574 +46575, O46575 +46576, O46576 +46577, O46577 +46578, O46578 +46579, O46579 +46580, O46580 +46581, O46581 +46582, O46582 +46583, O46583 +46584, O46584 +46585, O46585 +46586, O46586 +46587, O46587 +46588, O46588 +46589, O46589 +46590, O46590 +46591, O46591 +46592, O46592 +46593, O46593 +46594, O46594 +46595, O46595 +46596, O46596 +46597, O46597 +46598, O46598 +46599, O46599 +46600, O46600 +46601, O46601 +46602, O46602 +46603, O46603 +46604, O46604 +46605, O46605 +46606, O46606 +46607, O46607 +46608, O46608 +46609, O46609 +46610, O46610 +46611, O46611 +46612, O46612 +46613, O46613 +46614, O46614 +46615, O46615 +46616, O46616 +46617, O46617 +46618, O46618 +46619, O46619 +46620, O46620 +46621, O46621 +46622, O46622 +46623, O46623 +46624, O46624 +46625, O46625 +46626, O46626 +46627, O46627 +46628, O46628 +46629, O46629 +46630, O46630 +46631, O46631 +46632, O46632 +46633, O46633 +46634, O46634 +46635, O46635 +46636, O46636 +46637, O46637 +46638, O46638 +46639, O46639 +46640, O46640 +46641, O46641 +46642, O46642 +46643, O46643 +46644, O46644 +46645, O46645 +46646, O46646 +46647, O46647 +46648, O46648 +46649, O46649 +46650, O46650 +46651, O46651 +46652, O46652 +46653, O46653 +46654, O46654 +46655, O46655 +46656, O46656 +46657, O46657 +46658, O46658 +46659, O46659 +46660, O46660 +46661, O46661 +46662, O46662 +46663, O46663 +46664, O46664 +46665, O46665 +46666, O46666 +46667, O46667 +46668, O46668 +46669, O46669 +46670, O46670 +46671, O46671 +46672, O46672 +46673, O46673 +46674, O46674 +46675, O46675 +46676, O46676 +46677, O46677 +46678, O46678 +46679, O46679 +46680, O46680 +46681, O46681 +46682, O46682 +46683, O46683 +46684, O46684 +46685, O46685 +46686, O46686 +46687, O46687 +46688, O46688 +46689, O46689 +46690, O46690 +46691, O46691 +46692, O46692 +46693, O46693 +46694, O46694 +46695, O46695 +46696, O46696 +46697, O46697 +46698, O46698 +46699, O46699 +46700, O46700 +46701, O46701 +46702, O46702 +46703, O46703 +46704, O46704 +46705, O46705 +46706, O46706 +46707, O46707 +46708, O46708 +46709, O46709 +46710, O46710 +46711, O46711 +46712, O46712 +46713, O46713 +46714, O46714 +46715, O46715 +46716, O46716 +46717, O46717 +46718, O46718 +46719, O46719 +46720, O46720 +46721, O46721 +46722, O46722 +46723, O46723 +46724, O46724 +46725, O46725 +46726, O46726 +46727, O46727 +46728, O46728 +46729, O46729 +46730, O46730 +46731, O46731 +46732, O46732 +46733, O46733 +46734, O46734 +46735, O46735 +46736, O46736 +46737, O46737 +46738, O46738 +46739, O46739 +46740, O46740 +46741, O46741 +46742, O46742 +46743, O46743 +46744, O46744 +46745, O46745 +46746, O46746 +46747, O46747 +46748, O46748 +46749, O46749 +46750, O46750 +46751, O46751 +46752, O46752 +46753, O46753 +46754, O46754 +46755, O46755 +46756, O46756 +46757, O46757 +46758, O46758 +46759, O46759 +46760, O46760 +46761, O46761 +46762, O46762 +46763, O46763 +46764, O46764 +46765, O46765 +46766, O46766 +46767, O46767 +46768, O46768 +46769, O46769 +46770, O46770 +46771, O46771 +46772, O46772 +46773, O46773 +46774, O46774 +46775, O46775 +46776, O46776 +46777, O46777 +46778, O46778 +46779, O46779 +46780, O46780 +46781, O46781 +46782, O46782 +46783, O46783 +46784, O46784 +46785, O46785 +46786, O46786 +46787, O46787 +46788, O46788 +46789, O46789 +46790, O46790 +46791, O46791 +46792, O46792 +46793, O46793 +46794, O46794 +46795, O46795 +46796, O46796 +46797, O46797 +46798, O46798 +46799, O46799 +46800, O46800 +46801, O46801 +46802, O46802 +46803, O46803 +46804, O46804 +46805, O46805 +46806, O46806 +46807, O46807 +46808, O46808 +46809, O46809 +46810, O46810 +46811, O46811 +46812, O46812 +46813, O46813 +46814, O46814 +46815, O46815 +46816, O46816 +46817, O46817 +46818, O46818 +46819, O46819 +46820, O46820 +46821, O46821 +46822, O46822 +46823, O46823 +46824, O46824 +46825, O46825 +46826, O46826 +46827, O46827 +46828, O46828 +46829, O46829 +46830, O46830 +46831, O46831 +46832, O46832 +46833, O46833 +46834, O46834 +46835, O46835 +46836, O46836 +46837, O46837 +46838, O46838 +46839, O46839 +46840, O46840 +46841, O46841 +46842, O46842 +46843, O46843 +46844, O46844 +46845, O46845 +46846, O46846 +46847, O46847 +46848, O46848 +46849, O46849 +46850, O46850 +46851, O46851 +46852, O46852 +46853, O46853 +46854, O46854 +46855, O46855 +46856, O46856 +46857, O46857 +46858, O46858 +46859, O46859 +46860, O46860 +46861, O46861 +46862, O46862 +46863, O46863 +46864, O46864 +46865, O46865 +46866, O46866 +46867, O46867 +46868, O46868 +46869, O46869 +46870, O46870 +46871, O46871 +46872, O46872 +46873, O46873 +46874, O46874 +46875, O46875 +46876, O46876 +46877, O46877 +46878, O46878 +46879, O46879 +46880, O46880 +46881, O46881 +46882, O46882 +46883, O46883 +46884, O46884 +46885, O46885 +46886, O46886 +46887, O46887 +46888, O46888 +46889, O46889 +46890, O46890 +46891, O46891 +46892, O46892 +46893, O46893 +46894, O46894 +46895, O46895 +46896, O46896 +46897, O46897 +46898, O46898 +46899, O46899 +46900, O46900 +46901, O46901 +46902, O46902 +46903, O46903 +46904, O46904 +46905, O46905 +46906, O46906 +46907, O46907 +46908, O46908 +46909, O46909 +46910, O46910 +46911, O46911 +46912, O46912 +46913, O46913 +46914, O46914 +46915, O46915 +46916, O46916 +46917, O46917 +46918, O46918 +46919, O46919 +46920, O46920 +46921, O46921 +46922, O46922 +46923, O46923 +46924, O46924 +46925, O46925 +46926, O46926 +46927, O46927 +46928, O46928 +46929, O46929 +46930, O46930 +46931, O46931 +46932, O46932 +46933, O46933 +46934, O46934 +46935, O46935 +46936, O46936 +46937, O46937 +46938, O46938 +46939, O46939 +46940, O46940 +46941, O46941 +46942, O46942 +46943, O46943 +46944, O46944 +46945, O46945 +46946, O46946 +46947, O46947 +46948, O46948 +46949, O46949 +46950, O46950 +46951, O46951 +46952, O46952 +46953, O46953 +46954, O46954 +46955, O46955 +46956, O46956 +46957, O46957 +46958, O46958 +46959, O46959 +46960, O46960 +46961, O46961 +46962, O46962 +46963, O46963 +46964, O46964 +46965, O46965 +46966, O46966 +46967, O46967 +46968, O46968 +46969, O46969 +46970, O46970 +46971, O46971 +46972, O46972 +46973, O46973 +46974, O46974 +46975, O46975 +46976, O46976 +46977, O46977 +46978, O46978 +46979, O46979 +46980, O46980 +46981, O46981 +46982, O46982 +46983, O46983 +46984, O46984 +46985, O46985 +46986, O46986 +46987, O46987 +46988, O46988 +46989, O46989 +46990, O46990 +46991, O46991 +46992, O46992 +46993, O46993 +46994, O46994 +46995, O46995 +46996, O46996 +46997, O46997 +46998, O46998 +46999, O46999 +47000, O47000 +47001, O47001 +47002, O47002 +47003, O47003 +47004, O47004 +47005, O47005 +47006, O47006 +47007, O47007 +47008, O47008 +47009, O47009 +47010, O47010 +47011, O47011 +47012, O47012 +47013, O47013 +47014, O47014 +47015, O47015 +47016, O47016 +47017, O47017 +47018, O47018 +47019, O47019 +47020, O47020 +47021, O47021 +47022, O47022 +47023, O47023 +47024, O47024 +47025, O47025 +47026, O47026 +47027, O47027 +47028, O47028 +47029, O47029 +47030, O47030 +47031, O47031 +47032, O47032 +47033, O47033 +47034, O47034 +47035, O47035 +47036, O47036 +47037, O47037 +47038, O47038 +47039, O47039 +47040, O47040 +47041, O47041 +47042, O47042 +47043, O47043 +47044, O47044 +47045, O47045 +47046, O47046 +47047, O47047 +47048, O47048 +47049, O47049 +47050, O47050 +47051, O47051 +47052, O47052 +47053, O47053 +47054, O47054 +47055, O47055 +47056, O47056 +47057, O47057 +47058, O47058 +47059, O47059 +47060, O47060 +47061, O47061 +47062, O47062 +47063, O47063 +47064, O47064 +47065, O47065 +47066, O47066 +47067, O47067 +47068, O47068 +47069, O47069 +47070, O47070 +47071, O47071 +47072, O47072 +47073, O47073 +47074, O47074 +47075, O47075 +47076, O47076 +47077, O47077 +47078, O47078 +47079, O47079 +47080, O47080 +47081, O47081 +47082, O47082 +47083, O47083 +47084, O47084 +47085, O47085 +47086, O47086 +47087, O47087 +47088, O47088 +47089, O47089 +47090, O47090 +47091, O47091 +47092, O47092 +47093, O47093 +47094, O47094 +47095, O47095 +47096, O47096 +47097, O47097 +47098, O47098 +47099, O47099 +47100, O47100 +47101, O47101 +47102, O47102 +47103, O47103 +47104, O47104 +47105, O47105 +47106, O47106 +47107, O47107 +47108, O47108 +47109, O47109 +47110, O47110 +47111, O47111 +47112, O47112 +47113, O47113 +47114, O47114 +47115, O47115 +47116, O47116 +47117, O47117 +47118, O47118 +47119, O47119 +47120, O47120 +47121, O47121 +47122, O47122 +47123, O47123 +47124, O47124 +47125, O47125 +47126, O47126 +47127, O47127 +47128, O47128 +47129, O47129 +47130, O47130 +47131, O47131 +47132, O47132 +47133, O47133 +47134, O47134 +47135, O47135 +47136, O47136 +47137, O47137 +47138, O47138 +47139, O47139 +47140, O47140 +47141, O47141 +47142, O47142 +47143, O47143 +47144, O47144 +47145, O47145 +47146, O47146 +47147, O47147 +47148, O47148 +47149, O47149 +47150, O47150 +47151, O47151 +47152, O47152 +47153, O47153 +47154, O47154 +47155, O47155 +47156, O47156 +47157, O47157 +47158, O47158 +47159, O47159 +47160, O47160 +47161, O47161 +47162, O47162 +47163, O47163 +47164, O47164 +47165, O47165 +47166, O47166 +47167, O47167 +47168, O47168 +47169, O47169 +47170, O47170 +47171, O47171 +47172, O47172 +47173, O47173 +47174, O47174 +47175, O47175 +47176, O47176 +47177, O47177 +47178, O47178 +47179, O47179 +47180, O47180 +47181, O47181 +47182, O47182 +47183, O47183 +47184, O47184 +47185, O47185 +47186, O47186 +47187, O47187 +47188, O47188 +47189, O47189 +47190, O47190 +47191, O47191 +47192, O47192 +47193, O47193 +47194, O47194 +47195, O47195 +47196, O47196 +47197, O47197 +47198, O47198 +47199, O47199 +47200, O47200 +47201, O47201 +47202, O47202 +47203, O47203 +47204, O47204 +47205, O47205 +47206, O47206 +47207, O47207 +47208, O47208 +47209, O47209 +47210, O47210 +47211, O47211 +47212, O47212 +47213, O47213 +47214, O47214 +47215, O47215 +47216, O47216 +47217, O47217 +47218, O47218 +47219, O47219 +47220, O47220 +47221, O47221 +47222, O47222 +47223, O47223 +47224, O47224 +47225, O47225 +47226, O47226 +47227, O47227 +47228, O47228 +47229, O47229 +47230, O47230 +47231, O47231 +47232, O47232 +47233, O47233 +47234, O47234 +47235, O47235 +47236, O47236 +47237, O47237 +47238, O47238 +47239, O47239 +47240, O47240 +47241, O47241 +47242, O47242 +47243, O47243 +47244, O47244 +47245, O47245 +47246, O47246 +47247, O47247 +47248, O47248 +47249, O47249 +47250, O47250 +47251, O47251 +47252, O47252 +47253, O47253 +47254, O47254 +47255, O47255 +47256, O47256 +47257, O47257 +47258, O47258 +47259, O47259 +47260, O47260 +47261, O47261 +47262, O47262 +47263, O47263 +47264, O47264 +47265, O47265 +47266, O47266 +47267, O47267 +47268, O47268 +47269, O47269 +47270, O47270 +47271, O47271 +47272, O47272 +47273, O47273 +47274, O47274 +47275, O47275 +47276, O47276 +47277, O47277 +47278, O47278 +47279, O47279 +47280, O47280 +47281, O47281 +47282, O47282 +47283, O47283 +47284, O47284 +47285, O47285 +47286, O47286 +47287, O47287 +47288, O47288 +47289, O47289 +47290, O47290 +47291, O47291 +47292, O47292 +47293, O47293 +47294, O47294 +47295, O47295 +47296, O47296 +47297, O47297 +47298, O47298 +47299, O47299 +47300, O47300 +47301, O47301 +47302, O47302 +47303, O47303 +47304, O47304 +47305, O47305 +47306, O47306 +47307, O47307 +47308, O47308 +47309, O47309 +47310, O47310 +47311, O47311 +47312, O47312 +47313, O47313 +47314, O47314 +47315, O47315 +47316, O47316 +47317, O47317 +47318, O47318 +47319, O47319 +47320, O47320 +47321, O47321 +47322, O47322 +47323, O47323 +47324, O47324 +47325, O47325 +47326, O47326 +47327, O47327 +47328, O47328 +47329, O47329 +47330, O47330 +47331, O47331 +47332, O47332 +47333, O47333 +47334, O47334 +47335, O47335 +47336, O47336 +47337, O47337 +47338, O47338 +47339, O47339 +47340, O47340 +47341, O47341 +47342, O47342 +47343, O47343 +47344, O47344 +47345, O47345 +47346, O47346 +47347, O47347 +47348, O47348 +47349, O47349 +47350, O47350 +47351, O47351 +47352, O47352 +47353, O47353 +47354, O47354 +47355, O47355 +47356, O47356 +47357, O47357 +47358, O47358 +47359, O47359 +47360, O47360 +47361, O47361 +47362, O47362 +47363, O47363 +47364, O47364 +47365, O47365 +47366, O47366 +47367, O47367 +47368, O47368 +47369, O47369 +47370, O47370 +47371, O47371 +47372, O47372 +47373, O47373 +47374, O47374 +47375, O47375 +47376, O47376 +47377, O47377 +47378, O47378 +47379, O47379 +47380, O47380 +47381, O47381 +47382, O47382 +47383, O47383 +47384, O47384 +47385, O47385 +47386, O47386 +47387, O47387 +47388, O47388 +47389, O47389 +47390, O47390 +47391, O47391 +47392, O47392 +47393, O47393 +47394, O47394 +47395, O47395 +47396, O47396 +47397, O47397 +47398, O47398 +47399, O47399 +47400, O47400 +47401, O47401 +47402, O47402 +47403, O47403 +47404, O47404 +47405, O47405 +47406, O47406 +47407, O47407 +47408, O47408 +47409, O47409 +47410, O47410 +47411, O47411 +47412, O47412 +47413, O47413 +47414, O47414 +47415, O47415 +47416, O47416 +47417, O47417 +47418, O47418 +47419, O47419 +47420, O47420 +47421, O47421 +47422, O47422 +47423, O47423 +47424, O47424 +47425, O47425 +47426, O47426 +47427, O47427 +47428, O47428 +47429, O47429 +47430, O47430 +47431, O47431 +47432, O47432 +47433, O47433 +47434, O47434 +47435, O47435 +47436, O47436 +47437, O47437 +47438, O47438 +47439, O47439 +47440, O47440 +47441, O47441 +47442, O47442 +47443, O47443 +47444, O47444 +47445, O47445 +47446, O47446 +47447, O47447 +47448, O47448 +47449, O47449 +47450, O47450 +47451, O47451 +47452, O47452 +47453, O47453 +47454, O47454 +47455, O47455 +47456, O47456 +47457, O47457 +47458, O47458 +47459, O47459 +47460, O47460 +47461, O47461 +47462, O47462 +47463, O47463 +47464, O47464 +47465, O47465 +47466, O47466 +47467, O47467 +47468, O47468 +47469, O47469 +47470, O47470 +47471, O47471 +47472, O47472 +47473, O47473 +47474, O47474 +47475, O47475 +47476, O47476 +47477, O47477 +47478, O47478 +47479, O47479 +47480, O47480 +47481, O47481 +47482, O47482 +47483, O47483 +47484, O47484 +47485, O47485 +47486, O47486 +47487, O47487 +47488, O47488 +47489, O47489 +47490, O47490 +47491, O47491 +47492, O47492 +47493, O47493 +47494, O47494 +47495, O47495 +47496, O47496 +47497, O47497 +47498, O47498 +47499, O47499 +47500, O47500 +47501, O47501 +47502, O47502 +47503, O47503 +47504, O47504 +47505, O47505 +47506, O47506 +47507, O47507 +47508, O47508 +47509, O47509 +47510, O47510 +47511, O47511 +47512, O47512 +47513, O47513 +47514, O47514 +47515, O47515 +47516, O47516 +47517, O47517 +47518, O47518 +47519, O47519 +47520, O47520 +47521, O47521 +47522, O47522 +47523, O47523 +47524, O47524 +47525, O47525 +47526, O47526 +47527, O47527 +47528, O47528 +47529, O47529 +47530, O47530 +47531, O47531 +47532, O47532 +47533, O47533 +47534, O47534 +47535, O47535 +47536, O47536 +47537, O47537 +47538, O47538 +47539, O47539 +47540, O47540 +47541, O47541 +47542, O47542 +47543, O47543 +47544, O47544 +47545, O47545 +47546, O47546 +47547, O47547 +47548, O47548 +47549, O47549 +47550, O47550 +47551, O47551 +47552, O47552 +47553, O47553 +47554, O47554 +47555, O47555 +47556, O47556 +47557, O47557 +47558, O47558 +47559, O47559 +47560, O47560 +47561, O47561 +47562, O47562 +47563, O47563 +47564, O47564 +47565, O47565 +47566, O47566 +47567, O47567 +47568, O47568 +47569, O47569 +47570, O47570 +47571, O47571 +47572, O47572 +47573, O47573 +47574, O47574 +47575, O47575 +47576, O47576 +47577, O47577 +47578, O47578 +47579, O47579 +47580, O47580 +47581, O47581 +47582, O47582 +47583, O47583 +47584, O47584 +47585, O47585 +47586, O47586 +47587, O47587 +47588, O47588 +47589, O47589 +47590, O47590 +47591, O47591 +47592, O47592 +47593, O47593 +47594, O47594 +47595, O47595 +47596, O47596 +47597, O47597 +47598, O47598 +47599, O47599 +47600, O47600 +47601, O47601 +47602, O47602 +47603, O47603 +47604, O47604 +47605, O47605 +47606, O47606 +47607, O47607 +47608, O47608 +47609, O47609 +47610, O47610 +47611, O47611 +47612, O47612 +47613, O47613 +47614, O47614 +47615, O47615 +47616, O47616 +47617, O47617 +47618, O47618 +47619, O47619 +47620, O47620 +47621, O47621 +47622, O47622 +47623, O47623 +47624, O47624 +47625, O47625 +47626, O47626 +47627, O47627 +47628, O47628 +47629, O47629 +47630, O47630 +47631, O47631 +47632, O47632 +47633, O47633 +47634, O47634 +47635, O47635 +47636, O47636 +47637, O47637 +47638, O47638 +47639, O47639 +47640, O47640 +47641, O47641 +47642, O47642 +47643, O47643 +47644, O47644 +47645, O47645 +47646, O47646 +47647, O47647 +47648, O47648 +47649, O47649 +47650, O47650 +47651, O47651 +47652, O47652 +47653, O47653 +47654, O47654 +47655, O47655 +47656, O47656 +47657, O47657 +47658, O47658 +47659, O47659 +47660, O47660 +47661, O47661 +47662, O47662 +47663, O47663 +47664, O47664 +47665, O47665 +47666, O47666 +47667, O47667 +47668, O47668 +47669, O47669 +47670, O47670 +47671, O47671 +47672, O47672 +47673, O47673 +47674, O47674 +47675, O47675 +47676, O47676 +47677, O47677 +47678, O47678 +47679, O47679 +47680, O47680 +47681, O47681 +47682, O47682 +47683, O47683 +47684, O47684 +47685, O47685 +47686, O47686 +47687, O47687 +47688, O47688 +47689, O47689 +47690, O47690 +47691, O47691 +47692, O47692 +47693, O47693 +47694, O47694 +47695, O47695 +47696, O47696 +47697, O47697 +47698, O47698 +47699, O47699 +47700, O47700 +47701, O47701 +47702, O47702 +47703, O47703 +47704, O47704 +47705, O47705 +47706, O47706 +47707, O47707 +47708, O47708 +47709, O47709 +47710, O47710 +47711, O47711 +47712, O47712 +47713, O47713 +47714, O47714 +47715, O47715 +47716, O47716 +47717, O47717 +47718, O47718 +47719, O47719 +47720, O47720 +47721, O47721 +47722, O47722 +47723, O47723 +47724, O47724 +47725, O47725 +47726, O47726 +47727, O47727 +47728, O47728 +47729, O47729 +47730, O47730 +47731, O47731 +47732, O47732 +47733, O47733 +47734, O47734 +47735, O47735 +47736, O47736 +47737, O47737 +47738, O47738 +47739, O47739 +47740, O47740 +47741, O47741 +47742, O47742 +47743, O47743 +47744, O47744 +47745, O47745 +47746, O47746 +47747, O47747 +47748, O47748 +47749, O47749 +47750, O47750 +47751, O47751 +47752, O47752 +47753, O47753 +47754, O47754 +47755, O47755 +47756, O47756 +47757, O47757 +47758, O47758 +47759, O47759 +47760, O47760 +47761, O47761 +47762, O47762 +47763, O47763 +47764, O47764 +47765, O47765 +47766, O47766 +47767, O47767 +47768, O47768 +47769, O47769 +47770, O47770 +47771, O47771 +47772, O47772 +47773, O47773 +47774, O47774 +47775, O47775 +47776, O47776 +47777, O47777 +47778, O47778 +47779, O47779 +47780, O47780 +47781, O47781 +47782, O47782 +47783, O47783 +47784, O47784 +47785, O47785 +47786, O47786 +47787, O47787 +47788, O47788 +47789, O47789 +47790, O47790 +47791, O47791 +47792, O47792 +47793, O47793 +47794, O47794 +47795, O47795 +47796, O47796 +47797, O47797 +47798, O47798 +47799, O47799 +47800, O47800 +47801, O47801 +47802, O47802 +47803, O47803 +47804, O47804 +47805, O47805 +47806, O47806 +47807, O47807 +47808, O47808 +47809, O47809 +47810, O47810 +47811, O47811 +47812, O47812 +47813, O47813 +47814, O47814 +47815, O47815 +47816, O47816 +47817, O47817 +47818, O47818 +47819, O47819 +47820, O47820 +47821, O47821 +47822, O47822 +47823, O47823 +47824, O47824 +47825, O47825 +47826, O47826 +47827, O47827 +47828, O47828 +47829, O47829 +47830, O47830 +47831, O47831 +47832, O47832 +47833, O47833 +47834, O47834 +47835, O47835 +47836, O47836 +47837, O47837 +47838, O47838 +47839, O47839 +47840, O47840 +47841, O47841 +47842, O47842 +47843, O47843 +47844, O47844 +47845, O47845 +47846, O47846 +47847, O47847 +47848, O47848 +47849, O47849 +47850, O47850 +47851, O47851 +47852, O47852 +47853, O47853 +47854, O47854 +47855, O47855 +47856, O47856 +47857, O47857 +47858, O47858 +47859, O47859 +47860, O47860 +47861, O47861 +47862, O47862 +47863, O47863 +47864, O47864 +47865, O47865 +47866, O47866 +47867, O47867 +47868, O47868 +47869, O47869 +47870, O47870 +47871, O47871 +47872, O47872 +47873, O47873 +47874, O47874 +47875, O47875 +47876, O47876 +47877, O47877 +47878, O47878 +47879, O47879 +47880, O47880 +47881, O47881 +47882, O47882 +47883, O47883 +47884, O47884 +47885, O47885 +47886, O47886 +47887, O47887 +47888, O47888 +47889, O47889 +47890, O47890 +47891, O47891 +47892, O47892 +47893, O47893 +47894, O47894 +47895, O47895 +47896, O47896 +47897, O47897 +47898, O47898 +47899, O47899 +47900, O47900 +47901, O47901 +47902, O47902 +47903, O47903 +47904, O47904 +47905, O47905 +47906, O47906 +47907, O47907 +47908, O47908 +47909, O47909 +47910, O47910 +47911, O47911 +47912, O47912 +47913, O47913 +47914, O47914 +47915, O47915 +47916, O47916 +47917, O47917 +47918, O47918 +47919, O47919 +47920, O47920 +47921, O47921 +47922, O47922 +47923, O47923 +47924, O47924 +47925, O47925 +47926, O47926 +47927, O47927 +47928, O47928 +47929, O47929 +47930, O47930 +47931, O47931 +47932, O47932 +47933, O47933 +47934, O47934 +47935, O47935 +47936, O47936 +47937, O47937 +47938, O47938 +47939, O47939 +47940, O47940 +47941, O47941 +47942, O47942 +47943, O47943 +47944, O47944 +47945, O47945 +47946, O47946 +47947, O47947 +47948, O47948 +47949, O47949 +47950, O47950 +47951, O47951 +47952, O47952 +47953, O47953 +47954, O47954 +47955, O47955 +47956, O47956 +47957, O47957 +47958, O47958 +47959, O47959 +47960, O47960 +47961, O47961 +47962, O47962 +47963, O47963 +47964, O47964 +47965, O47965 +47966, O47966 +47967, O47967 +47968, O47968 +47969, O47969 +47970, O47970 +47971, O47971 +47972, O47972 +47973, O47973 +47974, O47974 +47975, O47975 +47976, O47976 +47977, O47977 +47978, O47978 +47979, O47979 +47980, O47980 +47981, O47981 +47982, O47982 +47983, O47983 +47984, O47984 +47985, O47985 +47986, O47986 +47987, O47987 +47988, O47988 +47989, O47989 +47990, O47990 +47991, O47991 +47992, O47992 +47993, O47993 +47994, O47994 +47995, O47995 +47996, O47996 +47997, O47997 +47998, O47998 +47999, O47999 +48000, O48000 +48001, O48001 +48002, O48002 +48003, O48003 +48004, O48004 +48005, O48005 +48006, O48006 +48007, O48007 +48008, O48008 +48009, O48009 +48010, O48010 +48011, O48011 +48012, O48012 +48013, O48013 +48014, O48014 +48015, O48015 +48016, O48016 +48017, O48017 +48018, O48018 +48019, O48019 +48020, O48020 +48021, O48021 +48022, O48022 +48023, O48023 +48024, O48024 +48025, O48025 +48026, O48026 +48027, O48027 +48028, O48028 +48029, O48029 +48030, O48030 +48031, O48031 +48032, O48032 +48033, O48033 +48034, O48034 +48035, O48035 +48036, O48036 +48037, O48037 +48038, O48038 +48039, O48039 +48040, O48040 +48041, O48041 +48042, O48042 +48043, O48043 +48044, O48044 +48045, O48045 +48046, O48046 +48047, O48047 +48048, O48048 +48049, O48049 +48050, O48050 +48051, O48051 +48052, O48052 +48053, O48053 +48054, O48054 +48055, O48055 +48056, O48056 +48057, O48057 +48058, O48058 +48059, O48059 +48060, O48060 +48061, O48061 +48062, O48062 +48063, O48063 +48064, O48064 +48065, O48065 +48066, O48066 +48067, O48067 +48068, O48068 +48069, O48069 +48070, O48070 +48071, O48071 +48072, O48072 +48073, O48073 +48074, O48074 +48075, O48075 +48076, O48076 +48077, O48077 +48078, O48078 +48079, O48079 +48080, O48080 +48081, O48081 +48082, O48082 +48083, O48083 +48084, O48084 +48085, O48085 +48086, O48086 +48087, O48087 +48088, O48088 +48089, O48089 +48090, O48090 +48091, O48091 +48092, O48092 +48093, O48093 +48094, O48094 +48095, O48095 +48096, O48096 +48097, O48097 +48098, O48098 +48099, O48099 +48100, O48100 +48101, O48101 +48102, O48102 +48103, O48103 +48104, O48104 +48105, O48105 +48106, O48106 +48107, O48107 +48108, O48108 +48109, O48109 +48110, O48110 +48111, O48111 +48112, O48112 +48113, O48113 +48114, O48114 +48115, O48115 +48116, O48116 +48117, O48117 +48118, O48118 +48119, O48119 +48120, O48120 +48121, O48121 +48122, O48122 +48123, O48123 +48124, O48124 +48125, O48125 +48126, O48126 +48127, O48127 +48128, O48128 +48129, O48129 +48130, O48130 +48131, O48131 +48132, O48132 +48133, O48133 +48134, O48134 +48135, O48135 +48136, O48136 +48137, O48137 +48138, O48138 +48139, O48139 +48140, O48140 +48141, O48141 +48142, O48142 +48143, O48143 +48144, O48144 +48145, O48145 +48146, O48146 +48147, O48147 +48148, O48148 +48149, O48149 +48150, O48150 +48151, O48151 +48152, O48152 +48153, O48153 +48154, O48154 +48155, O48155 +48156, O48156 +48157, O48157 +48158, O48158 +48159, O48159 +48160, O48160 +48161, O48161 +48162, O48162 +48163, O48163 +48164, O48164 +48165, O48165 +48166, O48166 +48167, O48167 +48168, O48168 +48169, O48169 +48170, O48170 +48171, O48171 +48172, O48172 +48173, O48173 +48174, O48174 +48175, O48175 +48176, O48176 +48177, O48177 +48178, O48178 +48179, O48179 +48180, O48180 +48181, O48181 +48182, O48182 +48183, O48183 +48184, O48184 +48185, O48185 +48186, O48186 +48187, O48187 +48188, O48188 +48189, O48189 +48190, O48190 +48191, O48191 +48192, O48192 +48193, O48193 +48194, O48194 +48195, O48195 +48196, O48196 +48197, O48197 +48198, O48198 +48199, O48199 +48200, O48200 +48201, O48201 +48202, O48202 +48203, O48203 +48204, O48204 +48205, O48205 +48206, O48206 +48207, O48207 +48208, O48208 +48209, O48209 +48210, O48210 +48211, O48211 +48212, O48212 +48213, O48213 +48214, O48214 +48215, O48215 +48216, O48216 +48217, O48217 +48218, O48218 +48219, O48219 +48220, O48220 +48221, O48221 +48222, O48222 +48223, O48223 +48224, O48224 +48225, O48225 +48226, O48226 +48227, O48227 +48228, O48228 +48229, O48229 +48230, O48230 +48231, O48231 +48232, O48232 +48233, O48233 +48234, O48234 +48235, O48235 +48236, O48236 +48237, O48237 +48238, O48238 +48239, O48239 +48240, O48240 +48241, O48241 +48242, O48242 +48243, O48243 +48244, O48244 +48245, O48245 +48246, O48246 +48247, O48247 +48248, O48248 +48249, O48249 +48250, O48250 +48251, O48251 +48252, O48252 +48253, O48253 +48254, O48254 +48255, O48255 +48256, O48256 +48257, O48257 +48258, O48258 +48259, O48259 +48260, O48260 +48261, O48261 +48262, O48262 +48263, O48263 +48264, O48264 +48265, O48265 +48266, O48266 +48267, O48267 +48268, O48268 +48269, O48269 +48270, O48270 +48271, O48271 +48272, O48272 +48273, O48273 +48274, O48274 +48275, O48275 +48276, O48276 +48277, O48277 +48278, O48278 +48279, O48279 +48280, O48280 +48281, O48281 +48282, O48282 +48283, O48283 +48284, O48284 +48285, O48285 +48286, O48286 +48287, O48287 +48288, O48288 +48289, O48289 +48290, O48290 +48291, O48291 +48292, O48292 +48293, O48293 +48294, O48294 +48295, O48295 +48296, O48296 +48297, O48297 +48298, O48298 +48299, O48299 +48300, O48300 +48301, O48301 +48302, O48302 +48303, O48303 +48304, O48304 +48305, O48305 +48306, O48306 +48307, O48307 +48308, O48308 +48309, O48309 +48310, O48310 +48311, O48311 +48312, O48312 +48313, O48313 +48314, O48314 +48315, O48315 +48316, O48316 +48317, O48317 +48318, O48318 +48319, O48319 +48320, O48320 +48321, O48321 +48322, O48322 +48323, O48323 +48324, O48324 +48325, O48325 +48326, O48326 +48327, O48327 +48328, O48328 +48329, O48329 +48330, O48330 +48331, O48331 +48332, O48332 +48333, O48333 +48334, O48334 +48335, O48335 +48336, O48336 +48337, O48337 +48338, O48338 +48339, O48339 +48340, O48340 +48341, O48341 +48342, O48342 +48343, O48343 +48344, O48344 +48345, O48345 +48346, O48346 +48347, O48347 +48348, O48348 +48349, O48349 +48350, O48350 +48351, O48351 +48352, O48352 +48353, O48353 +48354, O48354 +48355, O48355 +48356, O48356 +48357, O48357 +48358, O48358 +48359, O48359 +48360, O48360 +48361, O48361 +48362, O48362 +48363, O48363 +48364, O48364 +48365, O48365 +48366, O48366 +48367, O48367 +48368, O48368 +48369, O48369 +48370, O48370 +48371, O48371 +48372, O48372 +48373, O48373 +48374, O48374 +48375, O48375 +48376, O48376 +48377, O48377 +48378, O48378 +48379, O48379 +48380, O48380 +48381, O48381 +48382, O48382 +48383, O48383 +48384, O48384 +48385, O48385 +48386, O48386 +48387, O48387 +48388, O48388 +48389, O48389 +48390, O48390 +48391, O48391 +48392, O48392 +48393, O48393 +48394, O48394 +48395, O48395 +48396, O48396 +48397, O48397 +48398, O48398 +48399, O48399 +48400, O48400 +48401, O48401 +48402, O48402 +48403, O48403 +48404, O48404 +48405, O48405 +48406, O48406 +48407, O48407 +48408, O48408 +48409, O48409 +48410, O48410 +48411, O48411 +48412, O48412 +48413, O48413 +48414, O48414 +48415, O48415 +48416, O48416 +48417, O48417 +48418, O48418 +48419, O48419 +48420, O48420 +48421, O48421 +48422, O48422 +48423, O48423 +48424, O48424 +48425, O48425 +48426, O48426 +48427, O48427 +48428, O48428 +48429, O48429 +48430, O48430 +48431, O48431 +48432, O48432 +48433, O48433 +48434, O48434 +48435, O48435 +48436, O48436 +48437, O48437 +48438, O48438 +48439, O48439 +48440, O48440 +48441, O48441 +48442, O48442 +48443, O48443 +48444, O48444 +48445, O48445 +48446, O48446 +48447, O48447 +48448, O48448 +48449, O48449 +48450, O48450 +48451, O48451 +48452, O48452 +48453, O48453 +48454, O48454 +48455, O48455 +48456, O48456 +48457, O48457 +48458, O48458 +48459, O48459 +48460, O48460 +48461, O48461 +48462, O48462 +48463, O48463 +48464, O48464 +48465, O48465 +48466, O48466 +48467, O48467 +48468, O48468 +48469, O48469 +48470, O48470 +48471, O48471 +48472, O48472 +48473, O48473 +48474, O48474 +48475, O48475 +48476, O48476 +48477, O48477 +48478, O48478 +48479, O48479 +48480, O48480 +48481, O48481 +48482, O48482 +48483, O48483 +48484, O48484 +48485, O48485 +48486, O48486 +48487, O48487 +48488, O48488 +48489, O48489 +48490, O48490 +48491, O48491 +48492, O48492 +48493, O48493 +48494, O48494 +48495, O48495 +48496, O48496 +48497, O48497 +48498, O48498 +48499, O48499 +48500, O48500 +48501, O48501 +48502, O48502 +48503, O48503 +48504, O48504 +48505, O48505 +48506, O48506 +48507, O48507 +48508, O48508 +48509, O48509 +48510, O48510 +48511, O48511 +48512, O48512 +48513, O48513 +48514, O48514 +48515, O48515 +48516, O48516 +48517, O48517 +48518, O48518 +48519, O48519 +48520, O48520 +48521, O48521 +48522, O48522 +48523, O48523 +48524, O48524 +48525, O48525 +48526, O48526 +48527, O48527 +48528, O48528 +48529, O48529 +48530, O48530 +48531, O48531 +48532, O48532 +48533, O48533 +48534, O48534 +48535, O48535 +48536, O48536 +48537, O48537 +48538, O48538 +48539, O48539 +48540, O48540 +48541, O48541 +48542, O48542 +48543, O48543 +48544, O48544 +48545, O48545 +48546, O48546 +48547, O48547 +48548, O48548 +48549, O48549 +48550, O48550 +48551, O48551 +48552, O48552 +48553, O48553 +48554, O48554 +48555, O48555 +48556, O48556 +48557, O48557 +48558, O48558 +48559, O48559 +48560, O48560 +48561, O48561 +48562, O48562 +48563, O48563 +48564, O48564 +48565, O48565 +48566, O48566 +48567, O48567 +48568, O48568 +48569, O48569 +48570, O48570 +48571, O48571 +48572, O48572 +48573, O48573 +48574, O48574 +48575, O48575 +48576, O48576 +48577, O48577 +48578, O48578 +48579, O48579 +48580, O48580 +48581, O48581 +48582, O48582 +48583, O48583 +48584, O48584 +48585, O48585 +48586, O48586 +48587, O48587 +48588, O48588 +48589, O48589 +48590, O48590 +48591, O48591 +48592, O48592 +48593, O48593 +48594, O48594 +48595, O48595 +48596, O48596 +48597, O48597 +48598, O48598 +48599, O48599 +48600, O48600 +48601, O48601 +48602, O48602 +48603, O48603 +48604, O48604 +48605, O48605 +48606, O48606 +48607, O48607 +48608, O48608 +48609, O48609 +48610, O48610 +48611, O48611 +48612, O48612 +48613, O48613 +48614, O48614 +48615, O48615 +48616, O48616 +48617, O48617 +48618, O48618 +48619, O48619 +48620, O48620 +48621, O48621 +48622, O48622 +48623, O48623 +48624, O48624 +48625, O48625 +48626, O48626 +48627, O48627 +48628, O48628 +48629, O48629 +48630, O48630 +48631, O48631 +48632, O48632 +48633, O48633 +48634, O48634 +48635, O48635 +48636, O48636 +48637, O48637 +48638, O48638 +48639, O48639 +48640, O48640 +48641, O48641 +48642, O48642 +48643, O48643 +48644, O48644 +48645, O48645 +48646, O48646 +48647, O48647 +48648, O48648 +48649, O48649 +48650, O48650 +48651, O48651 +48652, O48652 +48653, O48653 +48654, O48654 +48655, O48655 +48656, O48656 +48657, O48657 +48658, O48658 +48659, O48659 +48660, O48660 +48661, O48661 +48662, O48662 +48663, O48663 +48664, O48664 +48665, O48665 +48666, O48666 +48667, O48667 +48668, O48668 +48669, O48669 +48670, O48670 +48671, O48671 +48672, O48672 +48673, O48673 +48674, O48674 +48675, O48675 +48676, O48676 +48677, O48677 +48678, O48678 +48679, O48679 +48680, O48680 +48681, O48681 +48682, O48682 +48683, O48683 +48684, O48684 +48685, O48685 +48686, O48686 +48687, O48687 +48688, O48688 +48689, O48689 +48690, O48690 +48691, O48691 +48692, O48692 +48693, O48693 +48694, O48694 +48695, O48695 +48696, O48696 +48697, O48697 +48698, O48698 +48699, O48699 +48700, O48700 +48701, O48701 +48702, O48702 +48703, O48703 +48704, O48704 +48705, O48705 +48706, O48706 +48707, O48707 +48708, O48708 +48709, O48709 +48710, O48710 +48711, O48711 +48712, O48712 +48713, O48713 +48714, O48714 +48715, O48715 +48716, O48716 +48717, O48717 +48718, O48718 +48719, O48719 +48720, O48720 +48721, O48721 +48722, O48722 +48723, O48723 +48724, O48724 +48725, O48725 +48726, O48726 +48727, O48727 +48728, O48728 +48729, O48729 +48730, O48730 +48731, O48731 +48732, O48732 +48733, O48733 +48734, O48734 +48735, O48735 +48736, O48736 +48737, O48737 +48738, O48738 +48739, O48739 +48740, O48740 +48741, O48741 +48742, O48742 +48743, O48743 +48744, O48744 +48745, O48745 +48746, O48746 +48747, O48747 +48748, O48748 +48749, O48749 +48750, O48750 +48751, O48751 +48752, O48752 +48753, O48753 +48754, O48754 +48755, O48755 +48756, O48756 +48757, O48757 +48758, O48758 +48759, O48759 +48760, O48760 +48761, O48761 +48762, O48762 +48763, O48763 +48764, O48764 +48765, O48765 +48766, O48766 +48767, O48767 +48768, O48768 +48769, O48769 +48770, O48770 +48771, O48771 +48772, O48772 +48773, O48773 +48774, O48774 +48775, O48775 +48776, O48776 +48777, O48777 +48778, O48778 +48779, O48779 +48780, O48780 +48781, O48781 +48782, O48782 +48783, O48783 +48784, O48784 +48785, O48785 +48786, O48786 +48787, O48787 +48788, O48788 +48789, O48789 +48790, O48790 +48791, O48791 +48792, O48792 +48793, O48793 +48794, O48794 +48795, O48795 +48796, O48796 +48797, O48797 +48798, O48798 +48799, O48799 +48800, O48800 +48801, O48801 +48802, O48802 +48803, O48803 +48804, O48804 +48805, O48805 +48806, O48806 +48807, O48807 +48808, O48808 +48809, O48809 +48810, O48810 +48811, O48811 +48812, O48812 +48813, O48813 +48814, O48814 +48815, O48815 +48816, O48816 +48817, O48817 +48818, O48818 +48819, O48819 +48820, O48820 +48821, O48821 +48822, O48822 +48823, O48823 +48824, O48824 +48825, O48825 +48826, O48826 +48827, O48827 +48828, O48828 +48829, O48829 +48830, O48830 +48831, O48831 +48832, O48832 +48833, O48833 +48834, O48834 +48835, O48835 +48836, O48836 +48837, O48837 +48838, O48838 +48839, O48839 +48840, O48840 +48841, O48841 +48842, O48842 +48843, O48843 +48844, O48844 +48845, O48845 +48846, O48846 +48847, O48847 +48848, O48848 +48849, O48849 +48850, O48850 +48851, O48851 +48852, O48852 +48853, O48853 +48854, O48854 +48855, O48855 +48856, O48856 +48857, O48857 +48858, O48858 +48859, O48859 +48860, O48860 +48861, O48861 +48862, O48862 +48863, O48863 +48864, O48864 +48865, O48865 +48866, O48866 +48867, O48867 +48868, O48868 +48869, O48869 +48870, O48870 +48871, O48871 +48872, O48872 +48873, O48873 +48874, O48874 +48875, O48875 +48876, O48876 +48877, O48877 +48878, O48878 +48879, O48879 +48880, O48880 +48881, O48881 +48882, O48882 +48883, O48883 +48884, O48884 +48885, O48885 +48886, O48886 +48887, O48887 +48888, O48888 +48889, O48889 +48890, O48890 +48891, O48891 +48892, O48892 +48893, O48893 +48894, O48894 +48895, O48895 +48896, O48896 +48897, O48897 +48898, O48898 +48899, O48899 +48900, O48900 +48901, O48901 +48902, O48902 +48903, O48903 +48904, O48904 +48905, O48905 +48906, O48906 +48907, O48907 +48908, O48908 +48909, O48909 +48910, O48910 +48911, O48911 +48912, O48912 +48913, O48913 +48914, O48914 +48915, O48915 +48916, O48916 +48917, O48917 +48918, O48918 +48919, O48919 +48920, O48920 +48921, O48921 +48922, O48922 +48923, O48923 +48924, O48924 +48925, O48925 +48926, O48926 +48927, O48927 +48928, O48928 +48929, O48929 +48930, O48930 +48931, O48931 +48932, O48932 +48933, O48933 +48934, O48934 +48935, O48935 +48936, O48936 +48937, O48937 +48938, O48938 +48939, O48939 +48940, O48940 +48941, O48941 +48942, O48942 +48943, O48943 +48944, O48944 +48945, O48945 +48946, O48946 +48947, O48947 +48948, O48948 +48949, O48949 +48950, O48950 +48951, O48951 +48952, O48952 +48953, O48953 +48954, O48954 +48955, O48955 +48956, O48956 +48957, O48957 +48958, O48958 +48959, O48959 +48960, O48960 +48961, O48961 +48962, O48962 +48963, O48963 +48964, O48964 +48965, O48965 +48966, O48966 +48967, O48967 +48968, O48968 +48969, O48969 +48970, O48970 +48971, O48971 +48972, O48972 +48973, O48973 +48974, O48974 +48975, O48975 +48976, O48976 +48977, O48977 +48978, O48978 +48979, O48979 +48980, O48980 +48981, O48981 +48982, O48982 +48983, O48983 +48984, O48984 +48985, O48985 +48986, O48986 +48987, O48987 +48988, O48988 +48989, O48989 +48990, O48990 +48991, O48991 +48992, O48992 +48993, O48993 +48994, O48994 +48995, O48995 +48996, O48996 +48997, O48997 +48998, O48998 +48999, O48999 +49000, O49000 +49001, O49001 +49002, O49002 +49003, O49003 +49004, O49004 +49005, O49005 +49006, O49006 +49007, O49007 +49008, O49008 +49009, O49009 +49010, O49010 +49011, O49011 +49012, O49012 +49013, O49013 +49014, O49014 +49015, O49015 +49016, O49016 +49017, O49017 +49018, O49018 +49019, O49019 +49020, O49020 +49021, O49021 +49022, O49022 +49023, O49023 +49024, O49024 +49025, O49025 +49026, O49026 +49027, O49027 +49028, O49028 +49029, O49029 +49030, O49030 +49031, O49031 +49032, O49032 +49033, O49033 +49034, O49034 +49035, O49035 +49036, O49036 +49037, O49037 +49038, O49038 +49039, O49039 +49040, O49040 +49041, O49041 +49042, O49042 +49043, O49043 +49044, O49044 +49045, O49045 +49046, O49046 +49047, O49047 +49048, O49048 +49049, O49049 +49050, O49050 +49051, O49051 +49052, O49052 +49053, O49053 +49054, O49054 +49055, O49055 +49056, O49056 +49057, O49057 +49058, O49058 +49059, O49059 +49060, O49060 +49061, O49061 +49062, O49062 +49063, O49063 +49064, O49064 +49065, O49065 +49066, O49066 +49067, O49067 +49068, O49068 +49069, O49069 +49070, O49070 +49071, O49071 +49072, O49072 +49073, O49073 +49074, O49074 +49075, O49075 +49076, O49076 +49077, O49077 +49078, O49078 +49079, O49079 +49080, O49080 +49081, O49081 +49082, O49082 +49083, O49083 +49084, O49084 +49085, O49085 +49086, O49086 +49087, O49087 +49088, O49088 +49089, O49089 +49090, O49090 +49091, O49091 +49092, O49092 +49093, O49093 +49094, O49094 +49095, O49095 +49096, O49096 +49097, O49097 +49098, O49098 +49099, O49099 +49100, O49100 +49101, O49101 +49102, O49102 +49103, O49103 +49104, O49104 +49105, O49105 +49106, O49106 +49107, O49107 +49108, O49108 +49109, O49109 +49110, O49110 +49111, O49111 +49112, O49112 +49113, O49113 +49114, O49114 +49115, O49115 +49116, O49116 +49117, O49117 +49118, O49118 +49119, O49119 +49120, O49120 +49121, O49121 +49122, O49122 +49123, O49123 +49124, O49124 +49125, O49125 +49126, O49126 +49127, O49127 +49128, O49128 +49129, O49129 +49130, O49130 +49131, O49131 +49132, O49132 +49133, O49133 +49134, O49134 +49135, O49135 +49136, O49136 +49137, O49137 +49138, O49138 +49139, O49139 +49140, O49140 +49141, O49141 +49142, O49142 +49143, O49143 +49144, O49144 +49145, O49145 +49146, O49146 +49147, O49147 +49148, O49148 +49149, O49149 +49150, O49150 +49151, O49151 +49152, O49152 +49153, O49153 +49154, O49154 +49155, O49155 +49156, O49156 +49157, O49157 +49158, O49158 +49159, O49159 +49160, O49160 +49161, O49161 +49162, O49162 +49163, O49163 +49164, O49164 +49165, O49165 +49166, O49166 +49167, O49167 +49168, O49168 +49169, O49169 +49170, O49170 +49171, O49171 +49172, O49172 +49173, O49173 +49174, O49174 +49175, O49175 +49176, O49176 +49177, O49177 +49178, O49178 +49179, O49179 +49180, O49180 +49181, O49181 +49182, O49182 +49183, O49183 +49184, O49184 +49185, O49185 +49186, O49186 +49187, O49187 +49188, O49188 +49189, O49189 +49190, O49190 +49191, O49191 +49192, O49192 +49193, O49193 +49194, O49194 +49195, O49195 +49196, O49196 +49197, O49197 +49198, O49198 +49199, O49199 +49200, O49200 +49201, O49201 +49202, O49202 +49203, O49203 +49204, O49204 +49205, O49205 +49206, O49206 +49207, O49207 +49208, O49208 +49209, O49209 +49210, O49210 +49211, O49211 +49212, O49212 +49213, O49213 +49214, O49214 +49215, O49215 +49216, O49216 +49217, O49217 +49218, O49218 +49219, O49219 +49220, O49220 +49221, O49221 +49222, O49222 +49223, O49223 +49224, O49224 +49225, O49225 +49226, O49226 +49227, O49227 +49228, O49228 +49229, O49229 +49230, O49230 +49231, O49231 +49232, O49232 +49233, O49233 +49234, O49234 +49235, O49235 +49236, O49236 +49237, O49237 +49238, O49238 +49239, O49239 +49240, O49240 +49241, O49241 +49242, O49242 +49243, O49243 +49244, O49244 +49245, O49245 +49246, O49246 +49247, O49247 +49248, O49248 +49249, O49249 +49250, O49250 +49251, O49251 +49252, O49252 +49253, O49253 +49254, O49254 +49255, O49255 +49256, O49256 +49257, O49257 +49258, O49258 +49259, O49259 +49260, O49260 +49261, O49261 +49262, O49262 +49263, O49263 +49264, O49264 +49265, O49265 +49266, O49266 +49267, O49267 +49268, O49268 +49269, O49269 +49270, O49270 +49271, O49271 +49272, O49272 +49273, O49273 +49274, O49274 +49275, O49275 +49276, O49276 +49277, O49277 +49278, O49278 +49279, O49279 +49280, O49280 +49281, O49281 +49282, O49282 +49283, O49283 +49284, O49284 +49285, O49285 +49286, O49286 +49287, O49287 +49288, O49288 +49289, O49289 +49290, O49290 +49291, O49291 +49292, O49292 +49293, O49293 +49294, O49294 +49295, O49295 +49296, O49296 +49297, O49297 +49298, O49298 +49299, O49299 +49300, O49300 +49301, O49301 +49302, O49302 +49303, O49303 +49304, O49304 +49305, O49305 +49306, O49306 +49307, O49307 +49308, O49308 +49309, O49309 +49310, O49310 +49311, O49311 +49312, O49312 +49313, O49313 +49314, O49314 +49315, O49315 +49316, O49316 +49317, O49317 +49318, O49318 +49319, O49319 +49320, O49320 +49321, O49321 +49322, O49322 +49323, O49323 +49324, O49324 +49325, O49325 +49326, O49326 +49327, O49327 +49328, O49328 +49329, O49329 +49330, O49330 +49331, O49331 +49332, O49332 +49333, O49333 +49334, O49334 +49335, O49335 +49336, O49336 +49337, O49337 +49338, O49338 +49339, O49339 +49340, O49340 +49341, O49341 +49342, O49342 +49343, O49343 +49344, O49344 +49345, O49345 +49346, O49346 +49347, O49347 +49348, O49348 +49349, O49349 +49350, O49350 +49351, O49351 +49352, O49352 +49353, O49353 +49354, O49354 +49355, O49355 +49356, O49356 +49357, O49357 +49358, O49358 +49359, O49359 +49360, O49360 +49361, O49361 +49362, O49362 +49363, O49363 +49364, O49364 +49365, O49365 +49366, O49366 +49367, O49367 +49368, O49368 +49369, O49369 +49370, O49370 +49371, O49371 +49372, O49372 +49373, O49373 +49374, O49374 +49375, O49375 +49376, O49376 +49377, O49377 +49378, O49378 +49379, O49379 +49380, O49380 +49381, O49381 +49382, O49382 +49383, O49383 +49384, O49384 +49385, O49385 +49386, O49386 +49387, O49387 +49388, O49388 +49389, O49389 +49390, O49390 +49391, O49391 +49392, O49392 +49393, O49393 +49394, O49394 +49395, O49395 +49396, O49396 +49397, O49397 +49398, O49398 +49399, O49399 +49400, O49400 +49401, O49401 +49402, O49402 +49403, O49403 +49404, O49404 +49405, O49405 +49406, O49406 +49407, O49407 +49408, O49408 +49409, O49409 +49410, O49410 +49411, O49411 +49412, O49412 +49413, O49413 +49414, O49414 +49415, O49415 +49416, O49416 +49417, O49417 +49418, O49418 +49419, O49419 +49420, O49420 +49421, O49421 +49422, O49422 +49423, O49423 +49424, O49424 +49425, O49425 +49426, O49426 +49427, O49427 +49428, O49428 +49429, O49429 +49430, O49430 +49431, O49431 +49432, O49432 +49433, O49433 +49434, O49434 +49435, O49435 +49436, O49436 +49437, O49437 +49438, O49438 +49439, O49439 +49440, O49440 +49441, O49441 +49442, O49442 +49443, O49443 +49444, O49444 +49445, O49445 +49446, O49446 +49447, O49447 +49448, O49448 +49449, O49449 +49450, O49450 +49451, O49451 +49452, O49452 +49453, O49453 +49454, O49454 +49455, O49455 +49456, O49456 +49457, O49457 +49458, O49458 +49459, O49459 +49460, O49460 +49461, O49461 +49462, O49462 +49463, O49463 +49464, O49464 +49465, O49465 +49466, O49466 +49467, O49467 +49468, O49468 +49469, O49469 +49470, O49470 +49471, O49471 +49472, O49472 +49473, O49473 +49474, O49474 +49475, O49475 +49476, O49476 +49477, O49477 +49478, O49478 +49479, O49479 +49480, O49480 +49481, O49481 +49482, O49482 +49483, O49483 +49484, O49484 +49485, O49485 +49486, O49486 +49487, O49487 +49488, O49488 +49489, O49489 +49490, O49490 +49491, O49491 +49492, O49492 +49493, O49493 +49494, O49494 +49495, O49495 +49496, O49496 +49497, O49497 +49498, O49498 +49499, O49499 +49500, O49500 +49501, O49501 +49502, O49502 +49503, O49503 +49504, O49504 +49505, O49505 +49506, O49506 +49507, O49507 +49508, O49508 +49509, O49509 +49510, O49510 +49511, O49511 +49512, O49512 +49513, O49513 +49514, O49514 +49515, O49515 +49516, O49516 +49517, O49517 +49518, O49518 +49519, O49519 +49520, O49520 +49521, O49521 +49522, O49522 +49523, O49523 +49524, O49524 +49525, O49525 +49526, O49526 +49527, O49527 +49528, O49528 +49529, O49529 +49530, O49530 +49531, O49531 +49532, O49532 +49533, O49533 +49534, O49534 +49535, O49535 +49536, O49536 +49537, O49537 +49538, O49538 +49539, O49539 +49540, O49540 +49541, O49541 +49542, O49542 +49543, O49543 +49544, O49544 +49545, O49545 +49546, O49546 +49547, O49547 +49548, O49548 +49549, O49549 +49550, O49550 +49551, O49551 +49552, O49552 +49553, O49553 +49554, O49554 +49555, O49555 +49556, O49556 +49557, O49557 +49558, O49558 +49559, O49559 +49560, O49560 +49561, O49561 +49562, O49562 +49563, O49563 +49564, O49564 +49565, O49565 +49566, O49566 +49567, O49567 +49568, O49568 +49569, O49569 +49570, O49570 +49571, O49571 +49572, O49572 +49573, O49573 +49574, O49574 +49575, O49575 +49576, O49576 +49577, O49577 +49578, O49578 +49579, O49579 +49580, O49580 +49581, O49581 +49582, O49582 +49583, O49583 +49584, O49584 +49585, O49585 +49586, O49586 +49587, O49587 +49588, O49588 +49589, O49589 +49590, O49590 +49591, O49591 +49592, O49592 +49593, O49593 +49594, O49594 +49595, O49595 +49596, O49596 +49597, O49597 +49598, O49598 +49599, O49599 +49600, O49600 +49601, O49601 +49602, O49602 +49603, O49603 +49604, O49604 +49605, O49605 +49606, O49606 +49607, O49607 +49608, O49608 +49609, O49609 +49610, O49610 +49611, O49611 +49612, O49612 +49613, O49613 +49614, O49614 +49615, O49615 +49616, O49616 +49617, O49617 +49618, O49618 +49619, O49619 +49620, O49620 +49621, O49621 +49622, O49622 +49623, O49623 +49624, O49624 +49625, O49625 +49626, O49626 +49627, O49627 +49628, O49628 +49629, O49629 +49630, O49630 +49631, O49631 +49632, O49632 +49633, O49633 +49634, O49634 +49635, O49635 +49636, O49636 +49637, O49637 +49638, O49638 +49639, O49639 +49640, O49640 +49641, O49641 +49642, O49642 +49643, O49643 +49644, O49644 +49645, O49645 +49646, O49646 +49647, O49647 +49648, O49648 +49649, O49649 +49650, O49650 +49651, O49651 +49652, O49652 +49653, O49653 +49654, O49654 +49655, O49655 +49656, O49656 +49657, O49657 +49658, O49658 +49659, O49659 +49660, O49660 +49661, O49661 +49662, O49662 +49663, O49663 +49664, O49664 +49665, O49665 +49666, O49666 +49667, O49667 +49668, O49668 +49669, O49669 +49670, O49670 +49671, O49671 +49672, O49672 +49673, O49673 +49674, O49674 +49675, O49675 +49676, O49676 +49677, O49677 +49678, O49678 +49679, O49679 +49680, O49680 +49681, O49681 +49682, O49682 +49683, O49683 +49684, O49684 +49685, O49685 +49686, O49686 +49687, O49687 +49688, O49688 +49689, O49689 +49690, O49690 +49691, O49691 +49692, O49692 +49693, O49693 +49694, O49694 +49695, O49695 +49696, O49696 +49697, O49697 +49698, O49698 +49699, O49699 +49700, O49700 +49701, O49701 +49702, O49702 +49703, O49703 +49704, O49704 +49705, O49705 +49706, O49706 +49707, O49707 +49708, O49708 +49709, O49709 +49710, O49710 +49711, O49711 +49712, O49712 +49713, O49713 +49714, O49714 +49715, O49715 +49716, O49716 +49717, O49717 +49718, O49718 +49719, O49719 +49720, O49720 +49721, O49721 +49722, O49722 +49723, O49723 +49724, O49724 +49725, O49725 +49726, O49726 +49727, O49727 +49728, O49728 +49729, O49729 +49730, O49730 +49731, O49731 +49732, O49732 +49733, O49733 +49734, O49734 +49735, O49735 +49736, O49736 +49737, O49737 +49738, O49738 +49739, O49739 +49740, O49740 +49741, O49741 +49742, O49742 +49743, O49743 +49744, O49744 +49745, O49745 +49746, O49746 +49747, O49747 +49748, O49748 +49749, O49749 +49750, O49750 +49751, O49751 +49752, O49752 +49753, O49753 +49754, O49754 +49755, O49755 +49756, O49756 +49757, O49757 +49758, O49758 +49759, O49759 +49760, O49760 +49761, O49761 +49762, O49762 +49763, O49763 +49764, O49764 +49765, O49765 +49766, O49766 +49767, O49767 +49768, O49768 +49769, O49769 +49770, O49770 +49771, O49771 +49772, O49772 +49773, O49773 +49774, O49774 +49775, O49775 +49776, O49776 +49777, O49777 +49778, O49778 +49779, O49779 +49780, O49780 +49781, O49781 +49782, O49782 +49783, O49783 +49784, O49784 +49785, O49785 +49786, O49786 +49787, O49787 +49788, O49788 +49789, O49789 +49790, O49790 +49791, O49791 +49792, O49792 +49793, O49793 +49794, O49794 +49795, O49795 +49796, O49796 +49797, O49797 +49798, O49798 +49799, O49799 +49800, O49800 +49801, O49801 +49802, O49802 +49803, O49803 +49804, O49804 +49805, O49805 +49806, O49806 +49807, O49807 +49808, O49808 +49809, O49809 +49810, O49810 +49811, O49811 +49812, O49812 +49813, O49813 +49814, O49814 +49815, O49815 +49816, O49816 +49817, O49817 +49818, O49818 +49819, O49819 +49820, O49820 +49821, O49821 +49822, O49822 +49823, O49823 +49824, O49824 +49825, O49825 +49826, O49826 +49827, O49827 +49828, O49828 +49829, O49829 +49830, O49830 +49831, O49831 +49832, O49832 +49833, O49833 +49834, O49834 +49835, O49835 +49836, O49836 +49837, O49837 +49838, O49838 +49839, O49839 +49840, O49840 +49841, O49841 +49842, O49842 +49843, O49843 +49844, O49844 +49845, O49845 +49846, O49846 +49847, O49847 +49848, O49848 +49849, O49849 +49850, O49850 +49851, O49851 +49852, O49852 +49853, O49853 +49854, O49854 +49855, O49855 +49856, O49856 +49857, O49857 +49858, O49858 +49859, O49859 +49860, O49860 +49861, O49861 +49862, O49862 +49863, O49863 +49864, O49864 +49865, O49865 +49866, O49866 +49867, O49867 +49868, O49868 +49869, O49869 +49870, O49870 +49871, O49871 +49872, O49872 +49873, O49873 +49874, O49874 +49875, O49875 +49876, O49876 +49877, O49877 +49878, O49878 +49879, O49879 +49880, O49880 +49881, O49881 +49882, O49882 +49883, O49883 +49884, O49884 +49885, O49885 +49886, O49886 +49887, O49887 +49888, O49888 +49889, O49889 +49890, O49890 +49891, O49891 +49892, O49892 +49893, O49893 +49894, O49894 +49895, O49895 +49896, O49896 +49897, O49897 +49898, O49898 +49899, O49899 +49900, O49900 +49901, O49901 +49902, O49902 +49903, O49903 +49904, O49904 +49905, O49905 +49906, O49906 +49907, O49907 +49908, O49908 +49909, O49909 +49910, O49910 +49911, O49911 +49912, O49912 +49913, O49913 +49914, O49914 +49915, O49915 +49916, O49916 +49917, O49917 +49918, O49918 +49919, O49919 +49920, O49920 +49921, O49921 +49922, O49922 +49923, O49923 +49924, O49924 +49925, O49925 +49926, O49926 +49927, O49927 +49928, O49928 +49929, O49929 +49930, O49930 +49931, O49931 +49932, O49932 +49933, O49933 +49934, O49934 +49935, O49935 +49936, O49936 +49937, O49937 +49938, O49938 +49939, O49939 +49940, O49940 +49941, O49941 +49942, O49942 +49943, O49943 +49944, O49944 +49945, O49945 +49946, O49946 +49947, O49947 +49948, O49948 +49949, O49949 +49950, O49950 +49951, O49951 +49952, O49952 +49953, O49953 +49954, O49954 +49955, O49955 +49956, O49956 +49957, O49957 +49958, O49958 +49959, O49959 +49960, O49960 +49961, O49961 +49962, O49962 +49963, O49963 +49964, O49964 +49965, O49965 +49966, O49966 +49967, O49967 +49968, O49968 +49969, O49969 +49970, O49970 +49971, O49971 +49972, O49972 +49973, O49973 +49974, O49974 +49975, O49975 +49976, O49976 +49977, O49977 +49978, O49978 +49979, O49979 +49980, O49980 +49981, O49981 +49982, O49982 +49983, O49983 +49984, O49984 +49985, O49985 +49986, O49986 +49987, O49987 +49988, O49988 +49989, O49989 +49990, O49990 +49991, O49991 +49992, O49992 +49993, O49993 +49994, O49994 +49995, O49995 +49996, O49996 +49997, O49997 +49998, O49998 +49999, O49999 +50000, O50000 diff --git a/testdb/csv/OA.csv b/testdb/csv/OA.csv new file mode 100644 index 000000000..eeb92198d --- /dev/null +++ b/testdb/csv/OA.csv @@ -0,0 +1,30000 @@ +1, OA1 +2, OA2 +3, OA3 +4, OA4 +5, OA5 +6, OA6 +7, OA7 +8, OA8 +9, OA9 +10, OA10 +11, OA11 +12, OA12 +13, OA13 +14, OA14 +15, OA15 +16, OA16 +17, OA17 +18, OA18 +19, OA19 +20, OA20 +21, OA21 +22, OA22 +23, OA23 +24, OA24 +25, OA25 +26, OA26 +27, OA27 +28, OA28 +29, OA29 +30, OA30 +31, OA31 +32, OA32 +33, OA33 +34, OA34 +35, OA35 +36, OA36 +37, OA37 +38, OA38 +39, OA39 +40, OA40 +41, OA41 +42, OA42 +43, OA43 +44, OA44 +45, OA45 +46, OA46 +47, OA47 +48, OA48 +49, OA49 +50, OA50 +51, OA51 +52, OA52 +53, OA53 +54, OA54 +55, OA55 +56, OA56 +57, OA57 +58, OA58 +59, OA59 +60, OA60 +61, OA61 +62, OA62 +63, OA63 +64, OA64 +65, OA65 +66, OA66 +67, OA67 +68, OA68 +69, OA69 +70, OA70 +71, OA71 +72, OA72 +73, OA73 +74, OA74 +75, OA75 +76, OA76 +77, OA77 +78, OA78 +79, OA79 +80, OA80 +81, OA81 +82, OA82 +83, OA83 +84, OA84 +85, OA85 +86, OA86 +87, OA87 +88, OA88 +89, OA89 +90, OA90 +91, OA91 +92, OA92 +93, OA93 +94, OA94 +95, OA95 +96, OA96 +97, OA97 +98, OA98 +99, OA99 +100, OA100 +101, OA101 +102, OA102 +103, OA103 +104, OA104 +105, OA105 +106, OA106 +107, OA107 +108, OA108 +109, OA109 +110, OA110 +111, OA111 +112, OA112 +113, OA113 +114, OA114 +115, OA115 +116, OA116 +117, OA117 +118, OA118 +119, OA119 +120, OA120 +121, OA121 +122, OA122 +123, OA123 +124, OA124 +125, OA125 +126, OA126 +127, OA127 +128, OA128 +129, OA129 +130, OA130 +131, OA131 +132, OA132 +133, OA133 +134, OA134 +135, OA135 +136, OA136 +137, OA137 +138, OA138 +139, OA139 +140, OA140 +141, OA141 +142, OA142 +143, OA143 +144, OA144 +145, OA145 +146, OA146 +147, OA147 +148, OA148 +149, OA149 +150, OA150 +151, OA151 +152, OA152 +153, OA153 +154, OA154 +155, OA155 +156, OA156 +157, OA157 +158, OA158 +159, OA159 +160, OA160 +161, OA161 +162, OA162 +163, OA163 +164, OA164 +165, OA165 +166, OA166 +167, OA167 +168, OA168 +169, OA169 +170, OA170 +171, OA171 +172, OA172 +173, OA173 +174, OA174 +175, OA175 +176, OA176 +177, OA177 +178, OA178 +179, OA179 +180, OA180 +181, OA181 +182, OA182 +183, OA183 +184, OA184 +185, OA185 +186, OA186 +187, OA187 +188, OA188 +189, OA189 +190, OA190 +191, OA191 +192, OA192 +193, OA193 +194, OA194 +195, OA195 +196, OA196 +197, OA197 +198, OA198 +199, OA199 +200, OA200 +201, OA201 +202, OA202 +203, OA203 +204, OA204 +205, OA205 +206, OA206 +207, OA207 +208, OA208 +209, OA209 +210, OA210 +211, OA211 +212, OA212 +213, OA213 +214, OA214 +215, OA215 +216, OA216 +217, OA217 +218, OA218 +219, OA219 +220, OA220 +221, OA221 +222, OA222 +223, OA223 +224, OA224 +225, OA225 +226, OA226 +227, OA227 +228, OA228 +229, OA229 +230, OA230 +231, OA231 +232, OA232 +233, OA233 +234, OA234 +235, OA235 +236, OA236 +237, OA237 +238, OA238 +239, OA239 +240, OA240 +241, OA241 +242, OA242 +243, OA243 +244, OA244 +245, OA245 +246, OA246 +247, OA247 +248, OA248 +249, OA249 +250, OA250 +251, OA251 +252, OA252 +253, OA253 +254, OA254 +255, OA255 +256, OA256 +257, OA257 +258, OA258 +259, OA259 +260, OA260 +261, OA261 +262, OA262 +263, OA263 +264, OA264 +265, OA265 +266, OA266 +267, OA267 +268, OA268 +269, OA269 +270, OA270 +271, OA271 +272, OA272 +273, OA273 +274, OA274 +275, OA275 +276, OA276 +277, OA277 +278, OA278 +279, OA279 +280, OA280 +281, OA281 +282, OA282 +283, OA283 +284, OA284 +285, OA285 +286, OA286 +287, OA287 +288, OA288 +289, OA289 +290, OA290 +291, OA291 +292, OA292 +293, OA293 +294, OA294 +295, OA295 +296, OA296 +297, OA297 +298, OA298 +299, OA299 +300, OA300 +301, OA301 +302, OA302 +303, OA303 +304, OA304 +305, OA305 +306, OA306 +307, OA307 +308, OA308 +309, OA309 +310, OA310 +311, OA311 +312, OA312 +313, OA313 +314, OA314 +315, OA315 +316, OA316 +317, OA317 +318, OA318 +319, OA319 +320, OA320 +321, OA321 +322, OA322 +323, OA323 +324, OA324 +325, OA325 +326, OA326 +327, OA327 +328, OA328 +329, OA329 +330, OA330 +331, OA331 +332, OA332 +333, OA333 +334, OA334 +335, OA335 +336, OA336 +337, OA337 +338, OA338 +339, OA339 +340, OA340 +341, OA341 +342, OA342 +343, OA343 +344, OA344 +345, OA345 +346, OA346 +347, OA347 +348, OA348 +349, OA349 +350, OA350 +351, OA351 +352, OA352 +353, OA353 +354, OA354 +355, OA355 +356, OA356 +357, OA357 +358, OA358 +359, OA359 +360, OA360 +361, OA361 +362, OA362 +363, OA363 +364, OA364 +365, OA365 +366, OA366 +367, OA367 +368, OA368 +369, OA369 +370, OA370 +371, OA371 +372, OA372 +373, OA373 +374, OA374 +375, OA375 +376, OA376 +377, OA377 +378, OA378 +379, OA379 +380, OA380 +381, OA381 +382, OA382 +383, OA383 +384, OA384 +385, OA385 +386, OA386 +387, OA387 +388, OA388 +389, OA389 +390, OA390 +391, OA391 +392, OA392 +393, OA393 +394, OA394 +395, OA395 +396, OA396 +397, OA397 +398, OA398 +399, OA399 +400, OA400 +401, OA401 +402, OA402 +403, OA403 +404, OA404 +405, OA405 +406, OA406 +407, OA407 +408, OA408 +409, OA409 +410, OA410 +411, OA411 +412, OA412 +413, OA413 +414, OA414 +415, OA415 +416, OA416 +417, OA417 +418, OA418 +419, OA419 +420, OA420 +421, OA421 +422, OA422 +423, OA423 +424, OA424 +425, OA425 +426, OA426 +427, OA427 +428, OA428 +429, OA429 +430, OA430 +431, OA431 +432, OA432 +433, OA433 +434, OA434 +435, OA435 +436, OA436 +437, OA437 +438, OA438 +439, OA439 +440, OA440 +441, OA441 +442, OA442 +443, OA443 +444, OA444 +445, OA445 +446, OA446 +447, OA447 +448, OA448 +449, OA449 +450, OA450 +451, OA451 +452, OA452 +453, OA453 +454, OA454 +455, OA455 +456, OA456 +457, OA457 +458, OA458 +459, OA459 +460, OA460 +461, OA461 +462, OA462 +463, OA463 +464, OA464 +465, OA465 +466, OA466 +467, OA467 +468, OA468 +469, OA469 +470, OA470 +471, OA471 +472, OA472 +473, OA473 +474, OA474 +475, OA475 +476, OA476 +477, OA477 +478, OA478 +479, OA479 +480, OA480 +481, OA481 +482, OA482 +483, OA483 +484, OA484 +485, OA485 +486, OA486 +487, OA487 +488, OA488 +489, OA489 +490, OA490 +491, OA491 +492, OA492 +493, OA493 +494, OA494 +495, OA495 +496, OA496 +497, OA497 +498, OA498 +499, OA499 +500, OA500 +501, OA501 +502, OA502 +503, OA503 +504, OA504 +505, OA505 +506, OA506 +507, OA507 +508, OA508 +509, OA509 +510, OA510 +511, OA511 +512, OA512 +513, OA513 +514, OA514 +515, OA515 +516, OA516 +517, OA517 +518, OA518 +519, OA519 +520, OA520 +521, OA521 +522, OA522 +523, OA523 +524, OA524 +525, OA525 +526, OA526 +527, OA527 +528, OA528 +529, OA529 +530, OA530 +531, OA531 +532, OA532 +533, OA533 +534, OA534 +535, OA535 +536, OA536 +537, OA537 +538, OA538 +539, OA539 +540, OA540 +541, OA541 +542, OA542 +543, OA543 +544, OA544 +545, OA545 +546, OA546 +547, OA547 +548, OA548 +549, OA549 +550, OA550 +551, OA551 +552, OA552 +553, OA553 +554, OA554 +555, OA555 +556, OA556 +557, OA557 +558, OA558 +559, OA559 +560, OA560 +561, OA561 +562, OA562 +563, OA563 +564, OA564 +565, OA565 +566, OA566 +567, OA567 +568, OA568 +569, OA569 +570, OA570 +571, OA571 +572, OA572 +573, OA573 +574, OA574 +575, OA575 +576, OA576 +577, OA577 +578, OA578 +579, OA579 +580, OA580 +581, OA581 +582, OA582 +583, OA583 +584, OA584 +585, OA585 +586, OA586 +587, OA587 +588, OA588 +589, OA589 +590, OA590 +591, OA591 +592, OA592 +593, OA593 +594, OA594 +595, OA595 +596, OA596 +597, OA597 +598, OA598 +599, OA599 +600, OA600 +601, OA601 +602, OA602 +603, OA603 +604, OA604 +605, OA605 +606, OA606 +607, OA607 +608, OA608 +609, OA609 +610, OA610 +611, OA611 +612, OA612 +613, OA613 +614, OA614 +615, OA615 +616, OA616 +617, OA617 +618, OA618 +619, OA619 +620, OA620 +621, OA621 +622, OA622 +623, OA623 +624, OA624 +625, OA625 +626, OA626 +627, OA627 +628, OA628 +629, OA629 +630, OA630 +631, OA631 +632, OA632 +633, OA633 +634, OA634 +635, OA635 +636, OA636 +637, OA637 +638, OA638 +639, OA639 +640, OA640 +641, OA641 +642, OA642 +643, OA643 +644, OA644 +645, OA645 +646, OA646 +647, OA647 +648, OA648 +649, OA649 +650, OA650 +651, OA651 +652, OA652 +653, OA653 +654, OA654 +655, OA655 +656, OA656 +657, OA657 +658, OA658 +659, OA659 +660, OA660 +661, OA661 +662, OA662 +663, OA663 +664, OA664 +665, OA665 +666, OA666 +667, OA667 +668, OA668 +669, OA669 +670, OA670 +671, OA671 +672, OA672 +673, OA673 +674, OA674 +675, OA675 +676, OA676 +677, OA677 +678, OA678 +679, OA679 +680, OA680 +681, OA681 +682, OA682 +683, OA683 +684, OA684 +685, OA685 +686, OA686 +687, OA687 +688, OA688 +689, OA689 +690, OA690 +691, OA691 +692, OA692 +693, OA693 +694, OA694 +695, OA695 +696, OA696 +697, OA697 +698, OA698 +699, OA699 +700, OA700 +701, OA701 +702, OA702 +703, OA703 +704, OA704 +705, OA705 +706, OA706 +707, OA707 +708, OA708 +709, OA709 +710, OA710 +711, OA711 +712, OA712 +713, OA713 +714, OA714 +715, OA715 +716, OA716 +717, OA717 +718, OA718 +719, OA719 +720, OA720 +721, OA721 +722, OA722 +723, OA723 +724, OA724 +725, OA725 +726, OA726 +727, OA727 +728, OA728 +729, OA729 +730, OA730 +731, OA731 +732, OA732 +733, OA733 +734, OA734 +735, OA735 +736, OA736 +737, OA737 +738, OA738 +739, OA739 +740, OA740 +741, OA741 +742, OA742 +743, OA743 +744, OA744 +745, OA745 +746, OA746 +747, OA747 +748, OA748 +749, OA749 +750, OA750 +751, OA751 +752, OA752 +753, OA753 +754, OA754 +755, OA755 +756, OA756 +757, OA757 +758, OA758 +759, OA759 +760, OA760 +761, OA761 +762, OA762 +763, OA763 +764, OA764 +765, OA765 +766, OA766 +767, OA767 +768, OA768 +769, OA769 +770, OA770 +771, OA771 +772, OA772 +773, OA773 +774, OA774 +775, OA775 +776, OA776 +777, OA777 +778, OA778 +779, OA779 +780, OA780 +781, OA781 +782, OA782 +783, OA783 +784, OA784 +785, OA785 +786, OA786 +787, OA787 +788, OA788 +789, OA789 +790, OA790 +791, OA791 +792, OA792 +793, OA793 +794, OA794 +795, OA795 +796, OA796 +797, OA797 +798, OA798 +799, OA799 +800, OA800 +801, OA801 +802, OA802 +803, OA803 +804, OA804 +805, OA805 +806, OA806 +807, OA807 +808, OA808 +809, OA809 +810, OA810 +811, OA811 +812, OA812 +813, OA813 +814, OA814 +815, OA815 +816, OA816 +817, OA817 +818, OA818 +819, OA819 +820, OA820 +821, OA821 +822, OA822 +823, OA823 +824, OA824 +825, OA825 +826, OA826 +827, OA827 +828, OA828 +829, OA829 +830, OA830 +831, OA831 +832, OA832 +833, OA833 +834, OA834 +835, OA835 +836, OA836 +837, OA837 +838, OA838 +839, OA839 +840, OA840 +841, OA841 +842, OA842 +843, OA843 +844, OA844 +845, OA845 +846, OA846 +847, OA847 +848, OA848 +849, OA849 +850, OA850 +851, OA851 +852, OA852 +853, OA853 +854, OA854 +855, OA855 +856, OA856 +857, OA857 +858, OA858 +859, OA859 +860, OA860 +861, OA861 +862, OA862 +863, OA863 +864, OA864 +865, OA865 +866, OA866 +867, OA867 +868, OA868 +869, OA869 +870, OA870 +871, OA871 +872, OA872 +873, OA873 +874, OA874 +875, OA875 +876, OA876 +877, OA877 +878, OA878 +879, OA879 +880, OA880 +881, OA881 +882, OA882 +883, OA883 +884, OA884 +885, OA885 +886, OA886 +887, OA887 +888, OA888 +889, OA889 +890, OA890 +891, OA891 +892, OA892 +893, OA893 +894, OA894 +895, OA895 +896, OA896 +897, OA897 +898, OA898 +899, OA899 +900, OA900 +901, OA901 +902, OA902 +903, OA903 +904, OA904 +905, OA905 +906, OA906 +907, OA907 +908, OA908 +909, OA909 +910, OA910 +911, OA911 +912, OA912 +913, OA913 +914, OA914 +915, OA915 +916, OA916 +917, OA917 +918, OA918 +919, OA919 +920, OA920 +921, OA921 +922, OA922 +923, OA923 +924, OA924 +925, OA925 +926, OA926 +927, OA927 +928, OA928 +929, OA929 +930, OA930 +931, OA931 +932, OA932 +933, OA933 +934, OA934 +935, OA935 +936, OA936 +937, OA937 +938, OA938 +939, OA939 +940, OA940 +941, OA941 +942, OA942 +943, OA943 +944, OA944 +945, OA945 +946, OA946 +947, OA947 +948, OA948 +949, OA949 +950, OA950 +951, OA951 +952, OA952 +953, OA953 +954, OA954 +955, OA955 +956, OA956 +957, OA957 +958, OA958 +959, OA959 +960, OA960 +961, OA961 +962, OA962 +963, OA963 +964, OA964 +965, OA965 +966, OA966 +967, OA967 +968, OA968 +969, OA969 +970, OA970 +971, OA971 +972, OA972 +973, OA973 +974, OA974 +975, OA975 +976, OA976 +977, OA977 +978, OA978 +979, OA979 +980, OA980 +981, OA981 +982, OA982 +983, OA983 +984, OA984 +985, OA985 +986, OA986 +987, OA987 +988, OA988 +989, OA989 +990, OA990 +991, OA991 +992, OA992 +993, OA993 +994, OA994 +995, OA995 +996, OA996 +997, OA997 +998, OA998 +999, OA999 +1000, OA1000 +1001, OA1001 +1002, OA1002 +1003, OA1003 +1004, OA1004 +1005, OA1005 +1006, OA1006 +1007, OA1007 +1008, OA1008 +1009, OA1009 +1010, OA1010 +1011, OA1011 +1012, OA1012 +1013, OA1013 +1014, OA1014 +1015, OA1015 +1016, OA1016 +1017, OA1017 +1018, OA1018 +1019, OA1019 +1020, OA1020 +1021, OA1021 +1022, OA1022 +1023, OA1023 +1024, OA1024 +1025, OA1025 +1026, OA1026 +1027, OA1027 +1028, OA1028 +1029, OA1029 +1030, OA1030 +1031, OA1031 +1032, OA1032 +1033, OA1033 +1034, OA1034 +1035, OA1035 +1036, OA1036 +1037, OA1037 +1038, OA1038 +1039, OA1039 +1040, OA1040 +1041, OA1041 +1042, OA1042 +1043, OA1043 +1044, OA1044 +1045, OA1045 +1046, OA1046 +1047, OA1047 +1048, OA1048 +1049, OA1049 +1050, OA1050 +1051, OA1051 +1052, OA1052 +1053, OA1053 +1054, OA1054 +1055, OA1055 +1056, OA1056 +1057, OA1057 +1058, OA1058 +1059, OA1059 +1060, OA1060 +1061, OA1061 +1062, OA1062 +1063, OA1063 +1064, OA1064 +1065, OA1065 +1066, OA1066 +1067, OA1067 +1068, OA1068 +1069, OA1069 +1070, OA1070 +1071, OA1071 +1072, OA1072 +1073, OA1073 +1074, OA1074 +1075, OA1075 +1076, OA1076 +1077, OA1077 +1078, OA1078 +1079, OA1079 +1080, OA1080 +1081, OA1081 +1082, OA1082 +1083, OA1083 +1084, OA1084 +1085, OA1085 +1086, OA1086 +1087, OA1087 +1088, OA1088 +1089, OA1089 +1090, OA1090 +1091, OA1091 +1092, OA1092 +1093, OA1093 +1094, OA1094 +1095, OA1095 +1096, OA1096 +1097, OA1097 +1098, OA1098 +1099, OA1099 +1100, OA1100 +1101, OA1101 +1102, OA1102 +1103, OA1103 +1104, OA1104 +1105, OA1105 +1106, OA1106 +1107, OA1107 +1108, OA1108 +1109, OA1109 +1110, OA1110 +1111, OA1111 +1112, OA1112 +1113, OA1113 +1114, OA1114 +1115, OA1115 +1116, OA1116 +1117, OA1117 +1118, OA1118 +1119, OA1119 +1120, OA1120 +1121, OA1121 +1122, OA1122 +1123, OA1123 +1124, OA1124 +1125, OA1125 +1126, OA1126 +1127, OA1127 +1128, OA1128 +1129, OA1129 +1130, OA1130 +1131, OA1131 +1132, OA1132 +1133, OA1133 +1134, OA1134 +1135, OA1135 +1136, OA1136 +1137, OA1137 +1138, OA1138 +1139, OA1139 +1140, OA1140 +1141, OA1141 +1142, OA1142 +1143, OA1143 +1144, OA1144 +1145, OA1145 +1146, OA1146 +1147, OA1147 +1148, OA1148 +1149, OA1149 +1150, OA1150 +1151, OA1151 +1152, OA1152 +1153, OA1153 +1154, OA1154 +1155, OA1155 +1156, OA1156 +1157, OA1157 +1158, OA1158 +1159, OA1159 +1160, OA1160 +1161, OA1161 +1162, OA1162 +1163, OA1163 +1164, OA1164 +1165, OA1165 +1166, OA1166 +1167, OA1167 +1168, OA1168 +1169, OA1169 +1170, OA1170 +1171, OA1171 +1172, OA1172 +1173, OA1173 +1174, OA1174 +1175, OA1175 +1176, OA1176 +1177, OA1177 +1178, OA1178 +1179, OA1179 +1180, OA1180 +1181, OA1181 +1182, OA1182 +1183, OA1183 +1184, OA1184 +1185, OA1185 +1186, OA1186 +1187, OA1187 +1188, OA1188 +1189, OA1189 +1190, OA1190 +1191, OA1191 +1192, OA1192 +1193, OA1193 +1194, OA1194 +1195, OA1195 +1196, OA1196 +1197, OA1197 +1198, OA1198 +1199, OA1199 +1200, OA1200 +1201, OA1201 +1202, OA1202 +1203, OA1203 +1204, OA1204 +1205, OA1205 +1206, OA1206 +1207, OA1207 +1208, OA1208 +1209, OA1209 +1210, OA1210 +1211, OA1211 +1212, OA1212 +1213, OA1213 +1214, OA1214 +1215, OA1215 +1216, OA1216 +1217, OA1217 +1218, OA1218 +1219, OA1219 +1220, OA1220 +1221, OA1221 +1222, OA1222 +1223, OA1223 +1224, OA1224 +1225, OA1225 +1226, OA1226 +1227, OA1227 +1228, OA1228 +1229, OA1229 +1230, OA1230 +1231, OA1231 +1232, OA1232 +1233, OA1233 +1234, OA1234 +1235, OA1235 +1236, OA1236 +1237, OA1237 +1238, OA1238 +1239, OA1239 +1240, OA1240 +1241, OA1241 +1242, OA1242 +1243, OA1243 +1244, OA1244 +1245, OA1245 +1246, OA1246 +1247, OA1247 +1248, OA1248 +1249, OA1249 +1250, OA1250 +1251, OA1251 +1252, OA1252 +1253, OA1253 +1254, OA1254 +1255, OA1255 +1256, OA1256 +1257, OA1257 +1258, OA1258 +1259, OA1259 +1260, OA1260 +1261, OA1261 +1262, OA1262 +1263, OA1263 +1264, OA1264 +1265, OA1265 +1266, OA1266 +1267, OA1267 +1268, OA1268 +1269, OA1269 +1270, OA1270 +1271, OA1271 +1272, OA1272 +1273, OA1273 +1274, OA1274 +1275, OA1275 +1276, OA1276 +1277, OA1277 +1278, OA1278 +1279, OA1279 +1280, OA1280 +1281, OA1281 +1282, OA1282 +1283, OA1283 +1284, OA1284 +1285, OA1285 +1286, OA1286 +1287, OA1287 +1288, OA1288 +1289, OA1289 +1290, OA1290 +1291, OA1291 +1292, OA1292 +1293, OA1293 +1294, OA1294 +1295, OA1295 +1296, OA1296 +1297, OA1297 +1298, OA1298 +1299, OA1299 +1300, OA1300 +1301, OA1301 +1302, OA1302 +1303, OA1303 +1304, OA1304 +1305, OA1305 +1306, OA1306 +1307, OA1307 +1308, OA1308 +1309, OA1309 +1310, OA1310 +1311, OA1311 +1312, OA1312 +1313, OA1313 +1314, OA1314 +1315, OA1315 +1316, OA1316 +1317, OA1317 +1318, OA1318 +1319, OA1319 +1320, OA1320 +1321, OA1321 +1322, OA1322 +1323, OA1323 +1324, OA1324 +1325, OA1325 +1326, OA1326 +1327, OA1327 +1328, OA1328 +1329, OA1329 +1330, OA1330 +1331, OA1331 +1332, OA1332 +1333, OA1333 +1334, OA1334 +1335, OA1335 +1336, OA1336 +1337, OA1337 +1338, OA1338 +1339, OA1339 +1340, OA1340 +1341, OA1341 +1342, OA1342 +1343, OA1343 +1344, OA1344 +1345, OA1345 +1346, OA1346 +1347, OA1347 +1348, OA1348 +1349, OA1349 +1350, OA1350 +1351, OA1351 +1352, OA1352 +1353, OA1353 +1354, OA1354 +1355, OA1355 +1356, OA1356 +1357, OA1357 +1358, OA1358 +1359, OA1359 +1360, OA1360 +1361, OA1361 +1362, OA1362 +1363, OA1363 +1364, OA1364 +1365, OA1365 +1366, OA1366 +1367, OA1367 +1368, OA1368 +1369, OA1369 +1370, OA1370 +1371, OA1371 +1372, OA1372 +1373, OA1373 +1374, OA1374 +1375, OA1375 +1376, OA1376 +1377, OA1377 +1378, OA1378 +1379, OA1379 +1380, OA1380 +1381, OA1381 +1382, OA1382 +1383, OA1383 +1384, OA1384 +1385, OA1385 +1386, OA1386 +1387, OA1387 +1388, OA1388 +1389, OA1389 +1390, OA1390 +1391, OA1391 +1392, OA1392 +1393, OA1393 +1394, OA1394 +1395, OA1395 +1396, OA1396 +1397, OA1397 +1398, OA1398 +1399, OA1399 +1400, OA1400 +1401, OA1401 +1402, OA1402 +1403, OA1403 +1404, OA1404 +1405, OA1405 +1406, OA1406 +1407, OA1407 +1408, OA1408 +1409, OA1409 +1410, OA1410 +1411, OA1411 +1412, OA1412 +1413, OA1413 +1414, OA1414 +1415, OA1415 +1416, OA1416 +1417, OA1417 +1418, OA1418 +1419, OA1419 +1420, OA1420 +1421, OA1421 +1422, OA1422 +1423, OA1423 +1424, OA1424 +1425, OA1425 +1426, OA1426 +1427, OA1427 +1428, OA1428 +1429, OA1429 +1430, OA1430 +1431, OA1431 +1432, OA1432 +1433, OA1433 +1434, OA1434 +1435, OA1435 +1436, OA1436 +1437, OA1437 +1438, OA1438 +1439, OA1439 +1440, OA1440 +1441, OA1441 +1442, OA1442 +1443, OA1443 +1444, OA1444 +1445, OA1445 +1446, OA1446 +1447, OA1447 +1448, OA1448 +1449, OA1449 +1450, OA1450 +1451, OA1451 +1452, OA1452 +1453, OA1453 +1454, OA1454 +1455, OA1455 +1456, OA1456 +1457, OA1457 +1458, OA1458 +1459, OA1459 +1460, OA1460 +1461, OA1461 +1462, OA1462 +1463, OA1463 +1464, OA1464 +1465, OA1465 +1466, OA1466 +1467, OA1467 +1468, OA1468 +1469, OA1469 +1470, OA1470 +1471, OA1471 +1472, OA1472 +1473, OA1473 +1474, OA1474 +1475, OA1475 +1476, OA1476 +1477, OA1477 +1478, OA1478 +1479, OA1479 +1480, OA1480 +1481, OA1481 +1482, OA1482 +1483, OA1483 +1484, OA1484 +1485, OA1485 +1486, OA1486 +1487, OA1487 +1488, OA1488 +1489, OA1489 +1490, OA1490 +1491, OA1491 +1492, OA1492 +1493, OA1493 +1494, OA1494 +1495, OA1495 +1496, OA1496 +1497, OA1497 +1498, OA1498 +1499, OA1499 +1500, OA1500 +1501, OA1501 +1502, OA1502 +1503, OA1503 +1504, OA1504 +1505, OA1505 +1506, OA1506 +1507, OA1507 +1508, OA1508 +1509, OA1509 +1510, OA1510 +1511, OA1511 +1512, OA1512 +1513, OA1513 +1514, OA1514 +1515, OA1515 +1516, OA1516 +1517, OA1517 +1518, OA1518 +1519, OA1519 +1520, OA1520 +1521, OA1521 +1522, OA1522 +1523, OA1523 +1524, OA1524 +1525, OA1525 +1526, OA1526 +1527, OA1527 +1528, OA1528 +1529, OA1529 +1530, OA1530 +1531, OA1531 +1532, OA1532 +1533, OA1533 +1534, OA1534 +1535, OA1535 +1536, OA1536 +1537, OA1537 +1538, OA1538 +1539, OA1539 +1540, OA1540 +1541, OA1541 +1542, OA1542 +1543, OA1543 +1544, OA1544 +1545, OA1545 +1546, OA1546 +1547, OA1547 +1548, OA1548 +1549, OA1549 +1550, OA1550 +1551, OA1551 +1552, OA1552 +1553, OA1553 +1554, OA1554 +1555, OA1555 +1556, OA1556 +1557, OA1557 +1558, OA1558 +1559, OA1559 +1560, OA1560 +1561, OA1561 +1562, OA1562 +1563, OA1563 +1564, OA1564 +1565, OA1565 +1566, OA1566 +1567, OA1567 +1568, OA1568 +1569, OA1569 +1570, OA1570 +1571, OA1571 +1572, OA1572 +1573, OA1573 +1574, OA1574 +1575, OA1575 +1576, OA1576 +1577, OA1577 +1578, OA1578 +1579, OA1579 +1580, OA1580 +1581, OA1581 +1582, OA1582 +1583, OA1583 +1584, OA1584 +1585, OA1585 +1586, OA1586 +1587, OA1587 +1588, OA1588 +1589, OA1589 +1590, OA1590 +1591, OA1591 +1592, OA1592 +1593, OA1593 +1594, OA1594 +1595, OA1595 +1596, OA1596 +1597, OA1597 +1598, OA1598 +1599, OA1599 +1600, OA1600 +1601, OA1601 +1602, OA1602 +1603, OA1603 +1604, OA1604 +1605, OA1605 +1606, OA1606 +1607, OA1607 +1608, OA1608 +1609, OA1609 +1610, OA1610 +1611, OA1611 +1612, OA1612 +1613, OA1613 +1614, OA1614 +1615, OA1615 +1616, OA1616 +1617, OA1617 +1618, OA1618 +1619, OA1619 +1620, OA1620 +1621, OA1621 +1622, OA1622 +1623, OA1623 +1624, OA1624 +1625, OA1625 +1626, OA1626 +1627, OA1627 +1628, OA1628 +1629, OA1629 +1630, OA1630 +1631, OA1631 +1632, OA1632 +1633, OA1633 +1634, OA1634 +1635, OA1635 +1636, OA1636 +1637, OA1637 +1638, OA1638 +1639, OA1639 +1640, OA1640 +1641, OA1641 +1642, OA1642 +1643, OA1643 +1644, OA1644 +1645, OA1645 +1646, OA1646 +1647, OA1647 +1648, OA1648 +1649, OA1649 +1650, OA1650 +1651, OA1651 +1652, OA1652 +1653, OA1653 +1654, OA1654 +1655, OA1655 +1656, OA1656 +1657, OA1657 +1658, OA1658 +1659, OA1659 +1660, OA1660 +1661, OA1661 +1662, OA1662 +1663, OA1663 +1664, OA1664 +1665, OA1665 +1666, OA1666 +1667, OA1667 +1668, OA1668 +1669, OA1669 +1670, OA1670 +1671, OA1671 +1672, OA1672 +1673, OA1673 +1674, OA1674 +1675, OA1675 +1676, OA1676 +1677, OA1677 +1678, OA1678 +1679, OA1679 +1680, OA1680 +1681, OA1681 +1682, OA1682 +1683, OA1683 +1684, OA1684 +1685, OA1685 +1686, OA1686 +1687, OA1687 +1688, OA1688 +1689, OA1689 +1690, OA1690 +1691, OA1691 +1692, OA1692 +1693, OA1693 +1694, OA1694 +1695, OA1695 +1696, OA1696 +1697, OA1697 +1698, OA1698 +1699, OA1699 +1700, OA1700 +1701, OA1701 +1702, OA1702 +1703, OA1703 +1704, OA1704 +1705, OA1705 +1706, OA1706 +1707, OA1707 +1708, OA1708 +1709, OA1709 +1710, OA1710 +1711, OA1711 +1712, OA1712 +1713, OA1713 +1714, OA1714 +1715, OA1715 +1716, OA1716 +1717, OA1717 +1718, OA1718 +1719, OA1719 +1720, OA1720 +1721, OA1721 +1722, OA1722 +1723, OA1723 +1724, OA1724 +1725, OA1725 +1726, OA1726 +1727, OA1727 +1728, OA1728 +1729, OA1729 +1730, OA1730 +1731, OA1731 +1732, OA1732 +1733, OA1733 +1734, OA1734 +1735, OA1735 +1736, OA1736 +1737, OA1737 +1738, OA1738 +1739, OA1739 +1740, OA1740 +1741, OA1741 +1742, OA1742 +1743, OA1743 +1744, OA1744 +1745, OA1745 +1746, OA1746 +1747, OA1747 +1748, OA1748 +1749, OA1749 +1750, OA1750 +1751, OA1751 +1752, OA1752 +1753, OA1753 +1754, OA1754 +1755, OA1755 +1756, OA1756 +1757, OA1757 +1758, OA1758 +1759, OA1759 +1760, OA1760 +1761, OA1761 +1762, OA1762 +1763, OA1763 +1764, OA1764 +1765, OA1765 +1766, OA1766 +1767, OA1767 +1768, OA1768 +1769, OA1769 +1770, OA1770 +1771, OA1771 +1772, OA1772 +1773, OA1773 +1774, OA1774 +1775, OA1775 +1776, OA1776 +1777, OA1777 +1778, OA1778 +1779, OA1779 +1780, OA1780 +1781, OA1781 +1782, OA1782 +1783, OA1783 +1784, OA1784 +1785, OA1785 +1786, OA1786 +1787, OA1787 +1788, OA1788 +1789, OA1789 +1790, OA1790 +1791, OA1791 +1792, OA1792 +1793, OA1793 +1794, OA1794 +1795, OA1795 +1796, OA1796 +1797, OA1797 +1798, OA1798 +1799, OA1799 +1800, OA1800 +1801, OA1801 +1802, OA1802 +1803, OA1803 +1804, OA1804 +1805, OA1805 +1806, OA1806 +1807, OA1807 +1808, OA1808 +1809, OA1809 +1810, OA1810 +1811, OA1811 +1812, OA1812 +1813, OA1813 +1814, OA1814 +1815, OA1815 +1816, OA1816 +1817, OA1817 +1818, OA1818 +1819, OA1819 +1820, OA1820 +1821, OA1821 +1822, OA1822 +1823, OA1823 +1824, OA1824 +1825, OA1825 +1826, OA1826 +1827, OA1827 +1828, OA1828 +1829, OA1829 +1830, OA1830 +1831, OA1831 +1832, OA1832 +1833, OA1833 +1834, OA1834 +1835, OA1835 +1836, OA1836 +1837, OA1837 +1838, OA1838 +1839, OA1839 +1840, OA1840 +1841, OA1841 +1842, OA1842 +1843, OA1843 +1844, OA1844 +1845, OA1845 +1846, OA1846 +1847, OA1847 +1848, OA1848 +1849, OA1849 +1850, OA1850 +1851, OA1851 +1852, OA1852 +1853, OA1853 +1854, OA1854 +1855, OA1855 +1856, OA1856 +1857, OA1857 +1858, OA1858 +1859, OA1859 +1860, OA1860 +1861, OA1861 +1862, OA1862 +1863, OA1863 +1864, OA1864 +1865, OA1865 +1866, OA1866 +1867, OA1867 +1868, OA1868 +1869, OA1869 +1870, OA1870 +1871, OA1871 +1872, OA1872 +1873, OA1873 +1874, OA1874 +1875, OA1875 +1876, OA1876 +1877, OA1877 +1878, OA1878 +1879, OA1879 +1880, OA1880 +1881, OA1881 +1882, OA1882 +1883, OA1883 +1884, OA1884 +1885, OA1885 +1886, OA1886 +1887, OA1887 +1888, OA1888 +1889, OA1889 +1890, OA1890 +1891, OA1891 +1892, OA1892 +1893, OA1893 +1894, OA1894 +1895, OA1895 +1896, OA1896 +1897, OA1897 +1898, OA1898 +1899, OA1899 +1900, OA1900 +1901, OA1901 +1902, OA1902 +1903, OA1903 +1904, OA1904 +1905, OA1905 +1906, OA1906 +1907, OA1907 +1908, OA1908 +1909, OA1909 +1910, OA1910 +1911, OA1911 +1912, OA1912 +1913, OA1913 +1914, OA1914 +1915, OA1915 +1916, OA1916 +1917, OA1917 +1918, OA1918 +1919, OA1919 +1920, OA1920 +1921, OA1921 +1922, OA1922 +1923, OA1923 +1924, OA1924 +1925, OA1925 +1926, OA1926 +1927, OA1927 +1928, OA1928 +1929, OA1929 +1930, OA1930 +1931, OA1931 +1932, OA1932 +1933, OA1933 +1934, OA1934 +1935, OA1935 +1936, OA1936 +1937, OA1937 +1938, OA1938 +1939, OA1939 +1940, OA1940 +1941, OA1941 +1942, OA1942 +1943, OA1943 +1944, OA1944 +1945, OA1945 +1946, OA1946 +1947, OA1947 +1948, OA1948 +1949, OA1949 +1950, OA1950 +1951, OA1951 +1952, OA1952 +1953, OA1953 +1954, OA1954 +1955, OA1955 +1956, OA1956 +1957, OA1957 +1958, OA1958 +1959, OA1959 +1960, OA1960 +1961, OA1961 +1962, OA1962 +1963, OA1963 +1964, OA1964 +1965, OA1965 +1966, OA1966 +1967, OA1967 +1968, OA1968 +1969, OA1969 +1970, OA1970 +1971, OA1971 +1972, OA1972 +1973, OA1973 +1974, OA1974 +1975, OA1975 +1976, OA1976 +1977, OA1977 +1978, OA1978 +1979, OA1979 +1980, OA1980 +1981, OA1981 +1982, OA1982 +1983, OA1983 +1984, OA1984 +1985, OA1985 +1986, OA1986 +1987, OA1987 +1988, OA1988 +1989, OA1989 +1990, OA1990 +1991, OA1991 +1992, OA1992 +1993, OA1993 +1994, OA1994 +1995, OA1995 +1996, OA1996 +1997, OA1997 +1998, OA1998 +1999, OA1999 +2000, OA2000 +2001, OA2001 +2002, OA2002 +2003, OA2003 +2004, OA2004 +2005, OA2005 +2006, OA2006 +2007, OA2007 +2008, OA2008 +2009, OA2009 +2010, OA2010 +2011, OA2011 +2012, OA2012 +2013, OA2013 +2014, OA2014 +2015, OA2015 +2016, OA2016 +2017, OA2017 +2018, OA2018 +2019, OA2019 +2020, OA2020 +2021, OA2021 +2022, OA2022 +2023, OA2023 +2024, OA2024 +2025, OA2025 +2026, OA2026 +2027, OA2027 +2028, OA2028 +2029, OA2029 +2030, OA2030 +2031, OA2031 +2032, OA2032 +2033, OA2033 +2034, OA2034 +2035, OA2035 +2036, OA2036 +2037, OA2037 +2038, OA2038 +2039, OA2039 +2040, OA2040 +2041, OA2041 +2042, OA2042 +2043, OA2043 +2044, OA2044 +2045, OA2045 +2046, OA2046 +2047, OA2047 +2048, OA2048 +2049, OA2049 +2050, OA2050 +2051, OA2051 +2052, OA2052 +2053, OA2053 +2054, OA2054 +2055, OA2055 +2056, OA2056 +2057, OA2057 +2058, OA2058 +2059, OA2059 +2060, OA2060 +2061, OA2061 +2062, OA2062 +2063, OA2063 +2064, OA2064 +2065, OA2065 +2066, OA2066 +2067, OA2067 +2068, OA2068 +2069, OA2069 +2070, OA2070 +2071, OA2071 +2072, OA2072 +2073, OA2073 +2074, OA2074 +2075, OA2075 +2076, OA2076 +2077, OA2077 +2078, OA2078 +2079, OA2079 +2080, OA2080 +2081, OA2081 +2082, OA2082 +2083, OA2083 +2084, OA2084 +2085, OA2085 +2086, OA2086 +2087, OA2087 +2088, OA2088 +2089, OA2089 +2090, OA2090 +2091, OA2091 +2092, OA2092 +2093, OA2093 +2094, OA2094 +2095, OA2095 +2096, OA2096 +2097, OA2097 +2098, OA2098 +2099, OA2099 +2100, OA2100 +2101, OA2101 +2102, OA2102 +2103, OA2103 +2104, OA2104 +2105, OA2105 +2106, OA2106 +2107, OA2107 +2108, OA2108 +2109, OA2109 +2110, OA2110 +2111, OA2111 +2112, OA2112 +2113, OA2113 +2114, OA2114 +2115, OA2115 +2116, OA2116 +2117, OA2117 +2118, OA2118 +2119, OA2119 +2120, OA2120 +2121, OA2121 +2122, OA2122 +2123, OA2123 +2124, OA2124 +2125, OA2125 +2126, OA2126 +2127, OA2127 +2128, OA2128 +2129, OA2129 +2130, OA2130 +2131, OA2131 +2132, OA2132 +2133, OA2133 +2134, OA2134 +2135, OA2135 +2136, OA2136 +2137, OA2137 +2138, OA2138 +2139, OA2139 +2140, OA2140 +2141, OA2141 +2142, OA2142 +2143, OA2143 +2144, OA2144 +2145, OA2145 +2146, OA2146 +2147, OA2147 +2148, OA2148 +2149, OA2149 +2150, OA2150 +2151, OA2151 +2152, OA2152 +2153, OA2153 +2154, OA2154 +2155, OA2155 +2156, OA2156 +2157, OA2157 +2158, OA2158 +2159, OA2159 +2160, OA2160 +2161, OA2161 +2162, OA2162 +2163, OA2163 +2164, OA2164 +2165, OA2165 +2166, OA2166 +2167, OA2167 +2168, OA2168 +2169, OA2169 +2170, OA2170 +2171, OA2171 +2172, OA2172 +2173, OA2173 +2174, OA2174 +2175, OA2175 +2176, OA2176 +2177, OA2177 +2178, OA2178 +2179, OA2179 +2180, OA2180 +2181, OA2181 +2182, OA2182 +2183, OA2183 +2184, OA2184 +2185, OA2185 +2186, OA2186 +2187, OA2187 +2188, OA2188 +2189, OA2189 +2190, OA2190 +2191, OA2191 +2192, OA2192 +2193, OA2193 +2194, OA2194 +2195, OA2195 +2196, OA2196 +2197, OA2197 +2198, OA2198 +2199, OA2199 +2200, OA2200 +2201, OA2201 +2202, OA2202 +2203, OA2203 +2204, OA2204 +2205, OA2205 +2206, OA2206 +2207, OA2207 +2208, OA2208 +2209, OA2209 +2210, OA2210 +2211, OA2211 +2212, OA2212 +2213, OA2213 +2214, OA2214 +2215, OA2215 +2216, OA2216 +2217, OA2217 +2218, OA2218 +2219, OA2219 +2220, OA2220 +2221, OA2221 +2222, OA2222 +2223, OA2223 +2224, OA2224 +2225, OA2225 +2226, OA2226 +2227, OA2227 +2228, OA2228 +2229, OA2229 +2230, OA2230 +2231, OA2231 +2232, OA2232 +2233, OA2233 +2234, OA2234 +2235, OA2235 +2236, OA2236 +2237, OA2237 +2238, OA2238 +2239, OA2239 +2240, OA2240 +2241, OA2241 +2242, OA2242 +2243, OA2243 +2244, OA2244 +2245, OA2245 +2246, OA2246 +2247, OA2247 +2248, OA2248 +2249, OA2249 +2250, OA2250 +2251, OA2251 +2252, OA2252 +2253, OA2253 +2254, OA2254 +2255, OA2255 +2256, OA2256 +2257, OA2257 +2258, OA2258 +2259, OA2259 +2260, OA2260 +2261, OA2261 +2262, OA2262 +2263, OA2263 +2264, OA2264 +2265, OA2265 +2266, OA2266 +2267, OA2267 +2268, OA2268 +2269, OA2269 +2270, OA2270 +2271, OA2271 +2272, OA2272 +2273, OA2273 +2274, OA2274 +2275, OA2275 +2276, OA2276 +2277, OA2277 +2278, OA2278 +2279, OA2279 +2280, OA2280 +2281, OA2281 +2282, OA2282 +2283, OA2283 +2284, OA2284 +2285, OA2285 +2286, OA2286 +2287, OA2287 +2288, OA2288 +2289, OA2289 +2290, OA2290 +2291, OA2291 +2292, OA2292 +2293, OA2293 +2294, OA2294 +2295, OA2295 +2296, OA2296 +2297, OA2297 +2298, OA2298 +2299, OA2299 +2300, OA2300 +2301, OA2301 +2302, OA2302 +2303, OA2303 +2304, OA2304 +2305, OA2305 +2306, OA2306 +2307, OA2307 +2308, OA2308 +2309, OA2309 +2310, OA2310 +2311, OA2311 +2312, OA2312 +2313, OA2313 +2314, OA2314 +2315, OA2315 +2316, OA2316 +2317, OA2317 +2318, OA2318 +2319, OA2319 +2320, OA2320 +2321, OA2321 +2322, OA2322 +2323, OA2323 +2324, OA2324 +2325, OA2325 +2326, OA2326 +2327, OA2327 +2328, OA2328 +2329, OA2329 +2330, OA2330 +2331, OA2331 +2332, OA2332 +2333, OA2333 +2334, OA2334 +2335, OA2335 +2336, OA2336 +2337, OA2337 +2338, OA2338 +2339, OA2339 +2340, OA2340 +2341, OA2341 +2342, OA2342 +2343, OA2343 +2344, OA2344 +2345, OA2345 +2346, OA2346 +2347, OA2347 +2348, OA2348 +2349, OA2349 +2350, OA2350 +2351, OA2351 +2352, OA2352 +2353, OA2353 +2354, OA2354 +2355, OA2355 +2356, OA2356 +2357, OA2357 +2358, OA2358 +2359, OA2359 +2360, OA2360 +2361, OA2361 +2362, OA2362 +2363, OA2363 +2364, OA2364 +2365, OA2365 +2366, OA2366 +2367, OA2367 +2368, OA2368 +2369, OA2369 +2370, OA2370 +2371, OA2371 +2372, OA2372 +2373, OA2373 +2374, OA2374 +2375, OA2375 +2376, OA2376 +2377, OA2377 +2378, OA2378 +2379, OA2379 +2380, OA2380 +2381, OA2381 +2382, OA2382 +2383, OA2383 +2384, OA2384 +2385, OA2385 +2386, OA2386 +2387, OA2387 +2388, OA2388 +2389, OA2389 +2390, OA2390 +2391, OA2391 +2392, OA2392 +2393, OA2393 +2394, OA2394 +2395, OA2395 +2396, OA2396 +2397, OA2397 +2398, OA2398 +2399, OA2399 +2400, OA2400 +2401, OA2401 +2402, OA2402 +2403, OA2403 +2404, OA2404 +2405, OA2405 +2406, OA2406 +2407, OA2407 +2408, OA2408 +2409, OA2409 +2410, OA2410 +2411, OA2411 +2412, OA2412 +2413, OA2413 +2414, OA2414 +2415, OA2415 +2416, OA2416 +2417, OA2417 +2418, OA2418 +2419, OA2419 +2420, OA2420 +2421, OA2421 +2422, OA2422 +2423, OA2423 +2424, OA2424 +2425, OA2425 +2426, OA2426 +2427, OA2427 +2428, OA2428 +2429, OA2429 +2430, OA2430 +2431, OA2431 +2432, OA2432 +2433, OA2433 +2434, OA2434 +2435, OA2435 +2436, OA2436 +2437, OA2437 +2438, OA2438 +2439, OA2439 +2440, OA2440 +2441, OA2441 +2442, OA2442 +2443, OA2443 +2444, OA2444 +2445, OA2445 +2446, OA2446 +2447, OA2447 +2448, OA2448 +2449, OA2449 +2450, OA2450 +2451, OA2451 +2452, OA2452 +2453, OA2453 +2454, OA2454 +2455, OA2455 +2456, OA2456 +2457, OA2457 +2458, OA2458 +2459, OA2459 +2460, OA2460 +2461, OA2461 +2462, OA2462 +2463, OA2463 +2464, OA2464 +2465, OA2465 +2466, OA2466 +2467, OA2467 +2468, OA2468 +2469, OA2469 +2470, OA2470 +2471, OA2471 +2472, OA2472 +2473, OA2473 +2474, OA2474 +2475, OA2475 +2476, OA2476 +2477, OA2477 +2478, OA2478 +2479, OA2479 +2480, OA2480 +2481, OA2481 +2482, OA2482 +2483, OA2483 +2484, OA2484 +2485, OA2485 +2486, OA2486 +2487, OA2487 +2488, OA2488 +2489, OA2489 +2490, OA2490 +2491, OA2491 +2492, OA2492 +2493, OA2493 +2494, OA2494 +2495, OA2495 +2496, OA2496 +2497, OA2497 +2498, OA2498 +2499, OA2499 +2500, OA2500 +2501, OA2501 +2502, OA2502 +2503, OA2503 +2504, OA2504 +2505, OA2505 +2506, OA2506 +2507, OA2507 +2508, OA2508 +2509, OA2509 +2510, OA2510 +2511, OA2511 +2512, OA2512 +2513, OA2513 +2514, OA2514 +2515, OA2515 +2516, OA2516 +2517, OA2517 +2518, OA2518 +2519, OA2519 +2520, OA2520 +2521, OA2521 +2522, OA2522 +2523, OA2523 +2524, OA2524 +2525, OA2525 +2526, OA2526 +2527, OA2527 +2528, OA2528 +2529, OA2529 +2530, OA2530 +2531, OA2531 +2532, OA2532 +2533, OA2533 +2534, OA2534 +2535, OA2535 +2536, OA2536 +2537, OA2537 +2538, OA2538 +2539, OA2539 +2540, OA2540 +2541, OA2541 +2542, OA2542 +2543, OA2543 +2544, OA2544 +2545, OA2545 +2546, OA2546 +2547, OA2547 +2548, OA2548 +2549, OA2549 +2550, OA2550 +2551, OA2551 +2552, OA2552 +2553, OA2553 +2554, OA2554 +2555, OA2555 +2556, OA2556 +2557, OA2557 +2558, OA2558 +2559, OA2559 +2560, OA2560 +2561, OA2561 +2562, OA2562 +2563, OA2563 +2564, OA2564 +2565, OA2565 +2566, OA2566 +2567, OA2567 +2568, OA2568 +2569, OA2569 +2570, OA2570 +2571, OA2571 +2572, OA2572 +2573, OA2573 +2574, OA2574 +2575, OA2575 +2576, OA2576 +2577, OA2577 +2578, OA2578 +2579, OA2579 +2580, OA2580 +2581, OA2581 +2582, OA2582 +2583, OA2583 +2584, OA2584 +2585, OA2585 +2586, OA2586 +2587, OA2587 +2588, OA2588 +2589, OA2589 +2590, OA2590 +2591, OA2591 +2592, OA2592 +2593, OA2593 +2594, OA2594 +2595, OA2595 +2596, OA2596 +2597, OA2597 +2598, OA2598 +2599, OA2599 +2600, OA2600 +2601, OA2601 +2602, OA2602 +2603, OA2603 +2604, OA2604 +2605, OA2605 +2606, OA2606 +2607, OA2607 +2608, OA2608 +2609, OA2609 +2610, OA2610 +2611, OA2611 +2612, OA2612 +2613, OA2613 +2614, OA2614 +2615, OA2615 +2616, OA2616 +2617, OA2617 +2618, OA2618 +2619, OA2619 +2620, OA2620 +2621, OA2621 +2622, OA2622 +2623, OA2623 +2624, OA2624 +2625, OA2625 +2626, OA2626 +2627, OA2627 +2628, OA2628 +2629, OA2629 +2630, OA2630 +2631, OA2631 +2632, OA2632 +2633, OA2633 +2634, OA2634 +2635, OA2635 +2636, OA2636 +2637, OA2637 +2638, OA2638 +2639, OA2639 +2640, OA2640 +2641, OA2641 +2642, OA2642 +2643, OA2643 +2644, OA2644 +2645, OA2645 +2646, OA2646 +2647, OA2647 +2648, OA2648 +2649, OA2649 +2650, OA2650 +2651, OA2651 +2652, OA2652 +2653, OA2653 +2654, OA2654 +2655, OA2655 +2656, OA2656 +2657, OA2657 +2658, OA2658 +2659, OA2659 +2660, OA2660 +2661, OA2661 +2662, OA2662 +2663, OA2663 +2664, OA2664 +2665, OA2665 +2666, OA2666 +2667, OA2667 +2668, OA2668 +2669, OA2669 +2670, OA2670 +2671, OA2671 +2672, OA2672 +2673, OA2673 +2674, OA2674 +2675, OA2675 +2676, OA2676 +2677, OA2677 +2678, OA2678 +2679, OA2679 +2680, OA2680 +2681, OA2681 +2682, OA2682 +2683, OA2683 +2684, OA2684 +2685, OA2685 +2686, OA2686 +2687, OA2687 +2688, OA2688 +2689, OA2689 +2690, OA2690 +2691, OA2691 +2692, OA2692 +2693, OA2693 +2694, OA2694 +2695, OA2695 +2696, OA2696 +2697, OA2697 +2698, OA2698 +2699, OA2699 +2700, OA2700 +2701, OA2701 +2702, OA2702 +2703, OA2703 +2704, OA2704 +2705, OA2705 +2706, OA2706 +2707, OA2707 +2708, OA2708 +2709, OA2709 +2710, OA2710 +2711, OA2711 +2712, OA2712 +2713, OA2713 +2714, OA2714 +2715, OA2715 +2716, OA2716 +2717, OA2717 +2718, OA2718 +2719, OA2719 +2720, OA2720 +2721, OA2721 +2722, OA2722 +2723, OA2723 +2724, OA2724 +2725, OA2725 +2726, OA2726 +2727, OA2727 +2728, OA2728 +2729, OA2729 +2730, OA2730 +2731, OA2731 +2732, OA2732 +2733, OA2733 +2734, OA2734 +2735, OA2735 +2736, OA2736 +2737, OA2737 +2738, OA2738 +2739, OA2739 +2740, OA2740 +2741, OA2741 +2742, OA2742 +2743, OA2743 +2744, OA2744 +2745, OA2745 +2746, OA2746 +2747, OA2747 +2748, OA2748 +2749, OA2749 +2750, OA2750 +2751, OA2751 +2752, OA2752 +2753, OA2753 +2754, OA2754 +2755, OA2755 +2756, OA2756 +2757, OA2757 +2758, OA2758 +2759, OA2759 +2760, OA2760 +2761, OA2761 +2762, OA2762 +2763, OA2763 +2764, OA2764 +2765, OA2765 +2766, OA2766 +2767, OA2767 +2768, OA2768 +2769, OA2769 +2770, OA2770 +2771, OA2771 +2772, OA2772 +2773, OA2773 +2774, OA2774 +2775, OA2775 +2776, OA2776 +2777, OA2777 +2778, OA2778 +2779, OA2779 +2780, OA2780 +2781, OA2781 +2782, OA2782 +2783, OA2783 +2784, OA2784 +2785, OA2785 +2786, OA2786 +2787, OA2787 +2788, OA2788 +2789, OA2789 +2790, OA2790 +2791, OA2791 +2792, OA2792 +2793, OA2793 +2794, OA2794 +2795, OA2795 +2796, OA2796 +2797, OA2797 +2798, OA2798 +2799, OA2799 +2800, OA2800 +2801, OA2801 +2802, OA2802 +2803, OA2803 +2804, OA2804 +2805, OA2805 +2806, OA2806 +2807, OA2807 +2808, OA2808 +2809, OA2809 +2810, OA2810 +2811, OA2811 +2812, OA2812 +2813, OA2813 +2814, OA2814 +2815, OA2815 +2816, OA2816 +2817, OA2817 +2818, OA2818 +2819, OA2819 +2820, OA2820 +2821, OA2821 +2822, OA2822 +2823, OA2823 +2824, OA2824 +2825, OA2825 +2826, OA2826 +2827, OA2827 +2828, OA2828 +2829, OA2829 +2830, OA2830 +2831, OA2831 +2832, OA2832 +2833, OA2833 +2834, OA2834 +2835, OA2835 +2836, OA2836 +2837, OA2837 +2838, OA2838 +2839, OA2839 +2840, OA2840 +2841, OA2841 +2842, OA2842 +2843, OA2843 +2844, OA2844 +2845, OA2845 +2846, OA2846 +2847, OA2847 +2848, OA2848 +2849, OA2849 +2850, OA2850 +2851, OA2851 +2852, OA2852 +2853, OA2853 +2854, OA2854 +2855, OA2855 +2856, OA2856 +2857, OA2857 +2858, OA2858 +2859, OA2859 +2860, OA2860 +2861, OA2861 +2862, OA2862 +2863, OA2863 +2864, OA2864 +2865, OA2865 +2866, OA2866 +2867, OA2867 +2868, OA2868 +2869, OA2869 +2870, OA2870 +2871, OA2871 +2872, OA2872 +2873, OA2873 +2874, OA2874 +2875, OA2875 +2876, OA2876 +2877, OA2877 +2878, OA2878 +2879, OA2879 +2880, OA2880 +2881, OA2881 +2882, OA2882 +2883, OA2883 +2884, OA2884 +2885, OA2885 +2886, OA2886 +2887, OA2887 +2888, OA2888 +2889, OA2889 +2890, OA2890 +2891, OA2891 +2892, OA2892 +2893, OA2893 +2894, OA2894 +2895, OA2895 +2896, OA2896 +2897, OA2897 +2898, OA2898 +2899, OA2899 +2900, OA2900 +2901, OA2901 +2902, OA2902 +2903, OA2903 +2904, OA2904 +2905, OA2905 +2906, OA2906 +2907, OA2907 +2908, OA2908 +2909, OA2909 +2910, OA2910 +2911, OA2911 +2912, OA2912 +2913, OA2913 +2914, OA2914 +2915, OA2915 +2916, OA2916 +2917, OA2917 +2918, OA2918 +2919, OA2919 +2920, OA2920 +2921, OA2921 +2922, OA2922 +2923, OA2923 +2924, OA2924 +2925, OA2925 +2926, OA2926 +2927, OA2927 +2928, OA2928 +2929, OA2929 +2930, OA2930 +2931, OA2931 +2932, OA2932 +2933, OA2933 +2934, OA2934 +2935, OA2935 +2936, OA2936 +2937, OA2937 +2938, OA2938 +2939, OA2939 +2940, OA2940 +2941, OA2941 +2942, OA2942 +2943, OA2943 +2944, OA2944 +2945, OA2945 +2946, OA2946 +2947, OA2947 +2948, OA2948 +2949, OA2949 +2950, OA2950 +2951, OA2951 +2952, OA2952 +2953, OA2953 +2954, OA2954 +2955, OA2955 +2956, OA2956 +2957, OA2957 +2958, OA2958 +2959, OA2959 +2960, OA2960 +2961, OA2961 +2962, OA2962 +2963, OA2963 +2964, OA2964 +2965, OA2965 +2966, OA2966 +2967, OA2967 +2968, OA2968 +2969, OA2969 +2970, OA2970 +2971, OA2971 +2972, OA2972 +2973, OA2973 +2974, OA2974 +2975, OA2975 +2976, OA2976 +2977, OA2977 +2978, OA2978 +2979, OA2979 +2980, OA2980 +2981, OA2981 +2982, OA2982 +2983, OA2983 +2984, OA2984 +2985, OA2985 +2986, OA2986 +2987, OA2987 +2988, OA2988 +2989, OA2989 +2990, OA2990 +2991, OA2991 +2992, OA2992 +2993, OA2993 +2994, OA2994 +2995, OA2995 +2996, OA2996 +2997, OA2997 +2998, OA2998 +2999, OA2999 +3000, OA3000 +3001, OA3001 +3002, OA3002 +3003, OA3003 +3004, OA3004 +3005, OA3005 +3006, OA3006 +3007, OA3007 +3008, OA3008 +3009, OA3009 +3010, OA3010 +3011, OA3011 +3012, OA3012 +3013, OA3013 +3014, OA3014 +3015, OA3015 +3016, OA3016 +3017, OA3017 +3018, OA3018 +3019, OA3019 +3020, OA3020 +3021, OA3021 +3022, OA3022 +3023, OA3023 +3024, OA3024 +3025, OA3025 +3026, OA3026 +3027, OA3027 +3028, OA3028 +3029, OA3029 +3030, OA3030 +3031, OA3031 +3032, OA3032 +3033, OA3033 +3034, OA3034 +3035, OA3035 +3036, OA3036 +3037, OA3037 +3038, OA3038 +3039, OA3039 +3040, OA3040 +3041, OA3041 +3042, OA3042 +3043, OA3043 +3044, OA3044 +3045, OA3045 +3046, OA3046 +3047, OA3047 +3048, OA3048 +3049, OA3049 +3050, OA3050 +3051, OA3051 +3052, OA3052 +3053, OA3053 +3054, OA3054 +3055, OA3055 +3056, OA3056 +3057, OA3057 +3058, OA3058 +3059, OA3059 +3060, OA3060 +3061, OA3061 +3062, OA3062 +3063, OA3063 +3064, OA3064 +3065, OA3065 +3066, OA3066 +3067, OA3067 +3068, OA3068 +3069, OA3069 +3070, OA3070 +3071, OA3071 +3072, OA3072 +3073, OA3073 +3074, OA3074 +3075, OA3075 +3076, OA3076 +3077, OA3077 +3078, OA3078 +3079, OA3079 +3080, OA3080 +3081, OA3081 +3082, OA3082 +3083, OA3083 +3084, OA3084 +3085, OA3085 +3086, OA3086 +3087, OA3087 +3088, OA3088 +3089, OA3089 +3090, OA3090 +3091, OA3091 +3092, OA3092 +3093, OA3093 +3094, OA3094 +3095, OA3095 +3096, OA3096 +3097, OA3097 +3098, OA3098 +3099, OA3099 +3100, OA3100 +3101, OA3101 +3102, OA3102 +3103, OA3103 +3104, OA3104 +3105, OA3105 +3106, OA3106 +3107, OA3107 +3108, OA3108 +3109, OA3109 +3110, OA3110 +3111, OA3111 +3112, OA3112 +3113, OA3113 +3114, OA3114 +3115, OA3115 +3116, OA3116 +3117, OA3117 +3118, OA3118 +3119, OA3119 +3120, OA3120 +3121, OA3121 +3122, OA3122 +3123, OA3123 +3124, OA3124 +3125, OA3125 +3126, OA3126 +3127, OA3127 +3128, OA3128 +3129, OA3129 +3130, OA3130 +3131, OA3131 +3132, OA3132 +3133, OA3133 +3134, OA3134 +3135, OA3135 +3136, OA3136 +3137, OA3137 +3138, OA3138 +3139, OA3139 +3140, OA3140 +3141, OA3141 +3142, OA3142 +3143, OA3143 +3144, OA3144 +3145, OA3145 +3146, OA3146 +3147, OA3147 +3148, OA3148 +3149, OA3149 +3150, OA3150 +3151, OA3151 +3152, OA3152 +3153, OA3153 +3154, OA3154 +3155, OA3155 +3156, OA3156 +3157, OA3157 +3158, OA3158 +3159, OA3159 +3160, OA3160 +3161, OA3161 +3162, OA3162 +3163, OA3163 +3164, OA3164 +3165, OA3165 +3166, OA3166 +3167, OA3167 +3168, OA3168 +3169, OA3169 +3170, OA3170 +3171, OA3171 +3172, OA3172 +3173, OA3173 +3174, OA3174 +3175, OA3175 +3176, OA3176 +3177, OA3177 +3178, OA3178 +3179, OA3179 +3180, OA3180 +3181, OA3181 +3182, OA3182 +3183, OA3183 +3184, OA3184 +3185, OA3185 +3186, OA3186 +3187, OA3187 +3188, OA3188 +3189, OA3189 +3190, OA3190 +3191, OA3191 +3192, OA3192 +3193, OA3193 +3194, OA3194 +3195, OA3195 +3196, OA3196 +3197, OA3197 +3198, OA3198 +3199, OA3199 +3200, OA3200 +3201, OA3201 +3202, OA3202 +3203, OA3203 +3204, OA3204 +3205, OA3205 +3206, OA3206 +3207, OA3207 +3208, OA3208 +3209, OA3209 +3210, OA3210 +3211, OA3211 +3212, OA3212 +3213, OA3213 +3214, OA3214 +3215, OA3215 +3216, OA3216 +3217, OA3217 +3218, OA3218 +3219, OA3219 +3220, OA3220 +3221, OA3221 +3222, OA3222 +3223, OA3223 +3224, OA3224 +3225, OA3225 +3226, OA3226 +3227, OA3227 +3228, OA3228 +3229, OA3229 +3230, OA3230 +3231, OA3231 +3232, OA3232 +3233, OA3233 +3234, OA3234 +3235, OA3235 +3236, OA3236 +3237, OA3237 +3238, OA3238 +3239, OA3239 +3240, OA3240 +3241, OA3241 +3242, OA3242 +3243, OA3243 +3244, OA3244 +3245, OA3245 +3246, OA3246 +3247, OA3247 +3248, OA3248 +3249, OA3249 +3250, OA3250 +3251, OA3251 +3252, OA3252 +3253, OA3253 +3254, OA3254 +3255, OA3255 +3256, OA3256 +3257, OA3257 +3258, OA3258 +3259, OA3259 +3260, OA3260 +3261, OA3261 +3262, OA3262 +3263, OA3263 +3264, OA3264 +3265, OA3265 +3266, OA3266 +3267, OA3267 +3268, OA3268 +3269, OA3269 +3270, OA3270 +3271, OA3271 +3272, OA3272 +3273, OA3273 +3274, OA3274 +3275, OA3275 +3276, OA3276 +3277, OA3277 +3278, OA3278 +3279, OA3279 +3280, OA3280 +3281, OA3281 +3282, OA3282 +3283, OA3283 +3284, OA3284 +3285, OA3285 +3286, OA3286 +3287, OA3287 +3288, OA3288 +3289, OA3289 +3290, OA3290 +3291, OA3291 +3292, OA3292 +3293, OA3293 +3294, OA3294 +3295, OA3295 +3296, OA3296 +3297, OA3297 +3298, OA3298 +3299, OA3299 +3300, OA3300 +3301, OA3301 +3302, OA3302 +3303, OA3303 +3304, OA3304 +3305, OA3305 +3306, OA3306 +3307, OA3307 +3308, OA3308 +3309, OA3309 +3310, OA3310 +3311, OA3311 +3312, OA3312 +3313, OA3313 +3314, OA3314 +3315, OA3315 +3316, OA3316 +3317, OA3317 +3318, OA3318 +3319, OA3319 +3320, OA3320 +3321, OA3321 +3322, OA3322 +3323, OA3323 +3324, OA3324 +3325, OA3325 +3326, OA3326 +3327, OA3327 +3328, OA3328 +3329, OA3329 +3330, OA3330 +3331, OA3331 +3332, OA3332 +3333, OA3333 +3334, OA3334 +3335, OA3335 +3336, OA3336 +3337, OA3337 +3338, OA3338 +3339, OA3339 +3340, OA3340 +3341, OA3341 +3342, OA3342 +3343, OA3343 +3344, OA3344 +3345, OA3345 +3346, OA3346 +3347, OA3347 +3348, OA3348 +3349, OA3349 +3350, OA3350 +3351, OA3351 +3352, OA3352 +3353, OA3353 +3354, OA3354 +3355, OA3355 +3356, OA3356 +3357, OA3357 +3358, OA3358 +3359, OA3359 +3360, OA3360 +3361, OA3361 +3362, OA3362 +3363, OA3363 +3364, OA3364 +3365, OA3365 +3366, OA3366 +3367, OA3367 +3368, OA3368 +3369, OA3369 +3370, OA3370 +3371, OA3371 +3372, OA3372 +3373, OA3373 +3374, OA3374 +3375, OA3375 +3376, OA3376 +3377, OA3377 +3378, OA3378 +3379, OA3379 +3380, OA3380 +3381, OA3381 +3382, OA3382 +3383, OA3383 +3384, OA3384 +3385, OA3385 +3386, OA3386 +3387, OA3387 +3388, OA3388 +3389, OA3389 +3390, OA3390 +3391, OA3391 +3392, OA3392 +3393, OA3393 +3394, OA3394 +3395, OA3395 +3396, OA3396 +3397, OA3397 +3398, OA3398 +3399, OA3399 +3400, OA3400 +3401, OA3401 +3402, OA3402 +3403, OA3403 +3404, OA3404 +3405, OA3405 +3406, OA3406 +3407, OA3407 +3408, OA3408 +3409, OA3409 +3410, OA3410 +3411, OA3411 +3412, OA3412 +3413, OA3413 +3414, OA3414 +3415, OA3415 +3416, OA3416 +3417, OA3417 +3418, OA3418 +3419, OA3419 +3420, OA3420 +3421, OA3421 +3422, OA3422 +3423, OA3423 +3424, OA3424 +3425, OA3425 +3426, OA3426 +3427, OA3427 +3428, OA3428 +3429, OA3429 +3430, OA3430 +3431, OA3431 +3432, OA3432 +3433, OA3433 +3434, OA3434 +3435, OA3435 +3436, OA3436 +3437, OA3437 +3438, OA3438 +3439, OA3439 +3440, OA3440 +3441, OA3441 +3442, OA3442 +3443, OA3443 +3444, OA3444 +3445, OA3445 +3446, OA3446 +3447, OA3447 +3448, OA3448 +3449, OA3449 +3450, OA3450 +3451, OA3451 +3452, OA3452 +3453, OA3453 +3454, OA3454 +3455, OA3455 +3456, OA3456 +3457, OA3457 +3458, OA3458 +3459, OA3459 +3460, OA3460 +3461, OA3461 +3462, OA3462 +3463, OA3463 +3464, OA3464 +3465, OA3465 +3466, OA3466 +3467, OA3467 +3468, OA3468 +3469, OA3469 +3470, OA3470 +3471, OA3471 +3472, OA3472 +3473, OA3473 +3474, OA3474 +3475, OA3475 +3476, OA3476 +3477, OA3477 +3478, OA3478 +3479, OA3479 +3480, OA3480 +3481, OA3481 +3482, OA3482 +3483, OA3483 +3484, OA3484 +3485, OA3485 +3486, OA3486 +3487, OA3487 +3488, OA3488 +3489, OA3489 +3490, OA3490 +3491, OA3491 +3492, OA3492 +3493, OA3493 +3494, OA3494 +3495, OA3495 +3496, OA3496 +3497, OA3497 +3498, OA3498 +3499, OA3499 +3500, OA3500 +3501, OA3501 +3502, OA3502 +3503, OA3503 +3504, OA3504 +3505, OA3505 +3506, OA3506 +3507, OA3507 +3508, OA3508 +3509, OA3509 +3510, OA3510 +3511, OA3511 +3512, OA3512 +3513, OA3513 +3514, OA3514 +3515, OA3515 +3516, OA3516 +3517, OA3517 +3518, OA3518 +3519, OA3519 +3520, OA3520 +3521, OA3521 +3522, OA3522 +3523, OA3523 +3524, OA3524 +3525, OA3525 +3526, OA3526 +3527, OA3527 +3528, OA3528 +3529, OA3529 +3530, OA3530 +3531, OA3531 +3532, OA3532 +3533, OA3533 +3534, OA3534 +3535, OA3535 +3536, OA3536 +3537, OA3537 +3538, OA3538 +3539, OA3539 +3540, OA3540 +3541, OA3541 +3542, OA3542 +3543, OA3543 +3544, OA3544 +3545, OA3545 +3546, OA3546 +3547, OA3547 +3548, OA3548 +3549, OA3549 +3550, OA3550 +3551, OA3551 +3552, OA3552 +3553, OA3553 +3554, OA3554 +3555, OA3555 +3556, OA3556 +3557, OA3557 +3558, OA3558 +3559, OA3559 +3560, OA3560 +3561, OA3561 +3562, OA3562 +3563, OA3563 +3564, OA3564 +3565, OA3565 +3566, OA3566 +3567, OA3567 +3568, OA3568 +3569, OA3569 +3570, OA3570 +3571, OA3571 +3572, OA3572 +3573, OA3573 +3574, OA3574 +3575, OA3575 +3576, OA3576 +3577, OA3577 +3578, OA3578 +3579, OA3579 +3580, OA3580 +3581, OA3581 +3582, OA3582 +3583, OA3583 +3584, OA3584 +3585, OA3585 +3586, OA3586 +3587, OA3587 +3588, OA3588 +3589, OA3589 +3590, OA3590 +3591, OA3591 +3592, OA3592 +3593, OA3593 +3594, OA3594 +3595, OA3595 +3596, OA3596 +3597, OA3597 +3598, OA3598 +3599, OA3599 +3600, OA3600 +3601, OA3601 +3602, OA3602 +3603, OA3603 +3604, OA3604 +3605, OA3605 +3606, OA3606 +3607, OA3607 +3608, OA3608 +3609, OA3609 +3610, OA3610 +3611, OA3611 +3612, OA3612 +3613, OA3613 +3614, OA3614 +3615, OA3615 +3616, OA3616 +3617, OA3617 +3618, OA3618 +3619, OA3619 +3620, OA3620 +3621, OA3621 +3622, OA3622 +3623, OA3623 +3624, OA3624 +3625, OA3625 +3626, OA3626 +3627, OA3627 +3628, OA3628 +3629, OA3629 +3630, OA3630 +3631, OA3631 +3632, OA3632 +3633, OA3633 +3634, OA3634 +3635, OA3635 +3636, OA3636 +3637, OA3637 +3638, OA3638 +3639, OA3639 +3640, OA3640 +3641, OA3641 +3642, OA3642 +3643, OA3643 +3644, OA3644 +3645, OA3645 +3646, OA3646 +3647, OA3647 +3648, OA3648 +3649, OA3649 +3650, OA3650 +3651, OA3651 +3652, OA3652 +3653, OA3653 +3654, OA3654 +3655, OA3655 +3656, OA3656 +3657, OA3657 +3658, OA3658 +3659, OA3659 +3660, OA3660 +3661, OA3661 +3662, OA3662 +3663, OA3663 +3664, OA3664 +3665, OA3665 +3666, OA3666 +3667, OA3667 +3668, OA3668 +3669, OA3669 +3670, OA3670 +3671, OA3671 +3672, OA3672 +3673, OA3673 +3674, OA3674 +3675, OA3675 +3676, OA3676 +3677, OA3677 +3678, OA3678 +3679, OA3679 +3680, OA3680 +3681, OA3681 +3682, OA3682 +3683, OA3683 +3684, OA3684 +3685, OA3685 +3686, OA3686 +3687, OA3687 +3688, OA3688 +3689, OA3689 +3690, OA3690 +3691, OA3691 +3692, OA3692 +3693, OA3693 +3694, OA3694 +3695, OA3695 +3696, OA3696 +3697, OA3697 +3698, OA3698 +3699, OA3699 +3700, OA3700 +3701, OA3701 +3702, OA3702 +3703, OA3703 +3704, OA3704 +3705, OA3705 +3706, OA3706 +3707, OA3707 +3708, OA3708 +3709, OA3709 +3710, OA3710 +3711, OA3711 +3712, OA3712 +3713, OA3713 +3714, OA3714 +3715, OA3715 +3716, OA3716 +3717, OA3717 +3718, OA3718 +3719, OA3719 +3720, OA3720 +3721, OA3721 +3722, OA3722 +3723, OA3723 +3724, OA3724 +3725, OA3725 +3726, OA3726 +3727, OA3727 +3728, OA3728 +3729, OA3729 +3730, OA3730 +3731, OA3731 +3732, OA3732 +3733, OA3733 +3734, OA3734 +3735, OA3735 +3736, OA3736 +3737, OA3737 +3738, OA3738 +3739, OA3739 +3740, OA3740 +3741, OA3741 +3742, OA3742 +3743, OA3743 +3744, OA3744 +3745, OA3745 +3746, OA3746 +3747, OA3747 +3748, OA3748 +3749, OA3749 +3750, OA3750 +3751, OA3751 +3752, OA3752 +3753, OA3753 +3754, OA3754 +3755, OA3755 +3756, OA3756 +3757, OA3757 +3758, OA3758 +3759, OA3759 +3760, OA3760 +3761, OA3761 +3762, OA3762 +3763, OA3763 +3764, OA3764 +3765, OA3765 +3766, OA3766 +3767, OA3767 +3768, OA3768 +3769, OA3769 +3770, OA3770 +3771, OA3771 +3772, OA3772 +3773, OA3773 +3774, OA3774 +3775, OA3775 +3776, OA3776 +3777, OA3777 +3778, OA3778 +3779, OA3779 +3780, OA3780 +3781, OA3781 +3782, OA3782 +3783, OA3783 +3784, OA3784 +3785, OA3785 +3786, OA3786 +3787, OA3787 +3788, OA3788 +3789, OA3789 +3790, OA3790 +3791, OA3791 +3792, OA3792 +3793, OA3793 +3794, OA3794 +3795, OA3795 +3796, OA3796 +3797, OA3797 +3798, OA3798 +3799, OA3799 +3800, OA3800 +3801, OA3801 +3802, OA3802 +3803, OA3803 +3804, OA3804 +3805, OA3805 +3806, OA3806 +3807, OA3807 +3808, OA3808 +3809, OA3809 +3810, OA3810 +3811, OA3811 +3812, OA3812 +3813, OA3813 +3814, OA3814 +3815, OA3815 +3816, OA3816 +3817, OA3817 +3818, OA3818 +3819, OA3819 +3820, OA3820 +3821, OA3821 +3822, OA3822 +3823, OA3823 +3824, OA3824 +3825, OA3825 +3826, OA3826 +3827, OA3827 +3828, OA3828 +3829, OA3829 +3830, OA3830 +3831, OA3831 +3832, OA3832 +3833, OA3833 +3834, OA3834 +3835, OA3835 +3836, OA3836 +3837, OA3837 +3838, OA3838 +3839, OA3839 +3840, OA3840 +3841, OA3841 +3842, OA3842 +3843, OA3843 +3844, OA3844 +3845, OA3845 +3846, OA3846 +3847, OA3847 +3848, OA3848 +3849, OA3849 +3850, OA3850 +3851, OA3851 +3852, OA3852 +3853, OA3853 +3854, OA3854 +3855, OA3855 +3856, OA3856 +3857, OA3857 +3858, OA3858 +3859, OA3859 +3860, OA3860 +3861, OA3861 +3862, OA3862 +3863, OA3863 +3864, OA3864 +3865, OA3865 +3866, OA3866 +3867, OA3867 +3868, OA3868 +3869, OA3869 +3870, OA3870 +3871, OA3871 +3872, OA3872 +3873, OA3873 +3874, OA3874 +3875, OA3875 +3876, OA3876 +3877, OA3877 +3878, OA3878 +3879, OA3879 +3880, OA3880 +3881, OA3881 +3882, OA3882 +3883, OA3883 +3884, OA3884 +3885, OA3885 +3886, OA3886 +3887, OA3887 +3888, OA3888 +3889, OA3889 +3890, OA3890 +3891, OA3891 +3892, OA3892 +3893, OA3893 +3894, OA3894 +3895, OA3895 +3896, OA3896 +3897, OA3897 +3898, OA3898 +3899, OA3899 +3900, OA3900 +3901, OA3901 +3902, OA3902 +3903, OA3903 +3904, OA3904 +3905, OA3905 +3906, OA3906 +3907, OA3907 +3908, OA3908 +3909, OA3909 +3910, OA3910 +3911, OA3911 +3912, OA3912 +3913, OA3913 +3914, OA3914 +3915, OA3915 +3916, OA3916 +3917, OA3917 +3918, OA3918 +3919, OA3919 +3920, OA3920 +3921, OA3921 +3922, OA3922 +3923, OA3923 +3924, OA3924 +3925, OA3925 +3926, OA3926 +3927, OA3927 +3928, OA3928 +3929, OA3929 +3930, OA3930 +3931, OA3931 +3932, OA3932 +3933, OA3933 +3934, OA3934 +3935, OA3935 +3936, OA3936 +3937, OA3937 +3938, OA3938 +3939, OA3939 +3940, OA3940 +3941, OA3941 +3942, OA3942 +3943, OA3943 +3944, OA3944 +3945, OA3945 +3946, OA3946 +3947, OA3947 +3948, OA3948 +3949, OA3949 +3950, OA3950 +3951, OA3951 +3952, OA3952 +3953, OA3953 +3954, OA3954 +3955, OA3955 +3956, OA3956 +3957, OA3957 +3958, OA3958 +3959, OA3959 +3960, OA3960 +3961, OA3961 +3962, OA3962 +3963, OA3963 +3964, OA3964 +3965, OA3965 +3966, OA3966 +3967, OA3967 +3968, OA3968 +3969, OA3969 +3970, OA3970 +3971, OA3971 +3972, OA3972 +3973, OA3973 +3974, OA3974 +3975, OA3975 +3976, OA3976 +3977, OA3977 +3978, OA3978 +3979, OA3979 +3980, OA3980 +3981, OA3981 +3982, OA3982 +3983, OA3983 +3984, OA3984 +3985, OA3985 +3986, OA3986 +3987, OA3987 +3988, OA3988 +3989, OA3989 +3990, OA3990 +3991, OA3991 +3992, OA3992 +3993, OA3993 +3994, OA3994 +3995, OA3995 +3996, OA3996 +3997, OA3997 +3998, OA3998 +3999, OA3999 +4000, OA4000 +4001, OA4001 +4002, OA4002 +4003, OA4003 +4004, OA4004 +4005, OA4005 +4006, OA4006 +4007, OA4007 +4008, OA4008 +4009, OA4009 +4010, OA4010 +4011, OA4011 +4012, OA4012 +4013, OA4013 +4014, OA4014 +4015, OA4015 +4016, OA4016 +4017, OA4017 +4018, OA4018 +4019, OA4019 +4020, OA4020 +4021, OA4021 +4022, OA4022 +4023, OA4023 +4024, OA4024 +4025, OA4025 +4026, OA4026 +4027, OA4027 +4028, OA4028 +4029, OA4029 +4030, OA4030 +4031, OA4031 +4032, OA4032 +4033, OA4033 +4034, OA4034 +4035, OA4035 +4036, OA4036 +4037, OA4037 +4038, OA4038 +4039, OA4039 +4040, OA4040 +4041, OA4041 +4042, OA4042 +4043, OA4043 +4044, OA4044 +4045, OA4045 +4046, OA4046 +4047, OA4047 +4048, OA4048 +4049, OA4049 +4050, OA4050 +4051, OA4051 +4052, OA4052 +4053, OA4053 +4054, OA4054 +4055, OA4055 +4056, OA4056 +4057, OA4057 +4058, OA4058 +4059, OA4059 +4060, OA4060 +4061, OA4061 +4062, OA4062 +4063, OA4063 +4064, OA4064 +4065, OA4065 +4066, OA4066 +4067, OA4067 +4068, OA4068 +4069, OA4069 +4070, OA4070 +4071, OA4071 +4072, OA4072 +4073, OA4073 +4074, OA4074 +4075, OA4075 +4076, OA4076 +4077, OA4077 +4078, OA4078 +4079, OA4079 +4080, OA4080 +4081, OA4081 +4082, OA4082 +4083, OA4083 +4084, OA4084 +4085, OA4085 +4086, OA4086 +4087, OA4087 +4088, OA4088 +4089, OA4089 +4090, OA4090 +4091, OA4091 +4092, OA4092 +4093, OA4093 +4094, OA4094 +4095, OA4095 +4096, OA4096 +4097, OA4097 +4098, OA4098 +4099, OA4099 +4100, OA4100 +4101, OA4101 +4102, OA4102 +4103, OA4103 +4104, OA4104 +4105, OA4105 +4106, OA4106 +4107, OA4107 +4108, OA4108 +4109, OA4109 +4110, OA4110 +4111, OA4111 +4112, OA4112 +4113, OA4113 +4114, OA4114 +4115, OA4115 +4116, OA4116 +4117, OA4117 +4118, OA4118 +4119, OA4119 +4120, OA4120 +4121, OA4121 +4122, OA4122 +4123, OA4123 +4124, OA4124 +4125, OA4125 +4126, OA4126 +4127, OA4127 +4128, OA4128 +4129, OA4129 +4130, OA4130 +4131, OA4131 +4132, OA4132 +4133, OA4133 +4134, OA4134 +4135, OA4135 +4136, OA4136 +4137, OA4137 +4138, OA4138 +4139, OA4139 +4140, OA4140 +4141, OA4141 +4142, OA4142 +4143, OA4143 +4144, OA4144 +4145, OA4145 +4146, OA4146 +4147, OA4147 +4148, OA4148 +4149, OA4149 +4150, OA4150 +4151, OA4151 +4152, OA4152 +4153, OA4153 +4154, OA4154 +4155, OA4155 +4156, OA4156 +4157, OA4157 +4158, OA4158 +4159, OA4159 +4160, OA4160 +4161, OA4161 +4162, OA4162 +4163, OA4163 +4164, OA4164 +4165, OA4165 +4166, OA4166 +4167, OA4167 +4168, OA4168 +4169, OA4169 +4170, OA4170 +4171, OA4171 +4172, OA4172 +4173, OA4173 +4174, OA4174 +4175, OA4175 +4176, OA4176 +4177, OA4177 +4178, OA4178 +4179, OA4179 +4180, OA4180 +4181, OA4181 +4182, OA4182 +4183, OA4183 +4184, OA4184 +4185, OA4185 +4186, OA4186 +4187, OA4187 +4188, OA4188 +4189, OA4189 +4190, OA4190 +4191, OA4191 +4192, OA4192 +4193, OA4193 +4194, OA4194 +4195, OA4195 +4196, OA4196 +4197, OA4197 +4198, OA4198 +4199, OA4199 +4200, OA4200 +4201, OA4201 +4202, OA4202 +4203, OA4203 +4204, OA4204 +4205, OA4205 +4206, OA4206 +4207, OA4207 +4208, OA4208 +4209, OA4209 +4210, OA4210 +4211, OA4211 +4212, OA4212 +4213, OA4213 +4214, OA4214 +4215, OA4215 +4216, OA4216 +4217, OA4217 +4218, OA4218 +4219, OA4219 +4220, OA4220 +4221, OA4221 +4222, OA4222 +4223, OA4223 +4224, OA4224 +4225, OA4225 +4226, OA4226 +4227, OA4227 +4228, OA4228 +4229, OA4229 +4230, OA4230 +4231, OA4231 +4232, OA4232 +4233, OA4233 +4234, OA4234 +4235, OA4235 +4236, OA4236 +4237, OA4237 +4238, OA4238 +4239, OA4239 +4240, OA4240 +4241, OA4241 +4242, OA4242 +4243, OA4243 +4244, OA4244 +4245, OA4245 +4246, OA4246 +4247, OA4247 +4248, OA4248 +4249, OA4249 +4250, OA4250 +4251, OA4251 +4252, OA4252 +4253, OA4253 +4254, OA4254 +4255, OA4255 +4256, OA4256 +4257, OA4257 +4258, OA4258 +4259, OA4259 +4260, OA4260 +4261, OA4261 +4262, OA4262 +4263, OA4263 +4264, OA4264 +4265, OA4265 +4266, OA4266 +4267, OA4267 +4268, OA4268 +4269, OA4269 +4270, OA4270 +4271, OA4271 +4272, OA4272 +4273, OA4273 +4274, OA4274 +4275, OA4275 +4276, OA4276 +4277, OA4277 +4278, OA4278 +4279, OA4279 +4280, OA4280 +4281, OA4281 +4282, OA4282 +4283, OA4283 +4284, OA4284 +4285, OA4285 +4286, OA4286 +4287, OA4287 +4288, OA4288 +4289, OA4289 +4290, OA4290 +4291, OA4291 +4292, OA4292 +4293, OA4293 +4294, OA4294 +4295, OA4295 +4296, OA4296 +4297, OA4297 +4298, OA4298 +4299, OA4299 +4300, OA4300 +4301, OA4301 +4302, OA4302 +4303, OA4303 +4304, OA4304 +4305, OA4305 +4306, OA4306 +4307, OA4307 +4308, OA4308 +4309, OA4309 +4310, OA4310 +4311, OA4311 +4312, OA4312 +4313, OA4313 +4314, OA4314 +4315, OA4315 +4316, OA4316 +4317, OA4317 +4318, OA4318 +4319, OA4319 +4320, OA4320 +4321, OA4321 +4322, OA4322 +4323, OA4323 +4324, OA4324 +4325, OA4325 +4326, OA4326 +4327, OA4327 +4328, OA4328 +4329, OA4329 +4330, OA4330 +4331, OA4331 +4332, OA4332 +4333, OA4333 +4334, OA4334 +4335, OA4335 +4336, OA4336 +4337, OA4337 +4338, OA4338 +4339, OA4339 +4340, OA4340 +4341, OA4341 +4342, OA4342 +4343, OA4343 +4344, OA4344 +4345, OA4345 +4346, OA4346 +4347, OA4347 +4348, OA4348 +4349, OA4349 +4350, OA4350 +4351, OA4351 +4352, OA4352 +4353, OA4353 +4354, OA4354 +4355, OA4355 +4356, OA4356 +4357, OA4357 +4358, OA4358 +4359, OA4359 +4360, OA4360 +4361, OA4361 +4362, OA4362 +4363, OA4363 +4364, OA4364 +4365, OA4365 +4366, OA4366 +4367, OA4367 +4368, OA4368 +4369, OA4369 +4370, OA4370 +4371, OA4371 +4372, OA4372 +4373, OA4373 +4374, OA4374 +4375, OA4375 +4376, OA4376 +4377, OA4377 +4378, OA4378 +4379, OA4379 +4380, OA4380 +4381, OA4381 +4382, OA4382 +4383, OA4383 +4384, OA4384 +4385, OA4385 +4386, OA4386 +4387, OA4387 +4388, OA4388 +4389, OA4389 +4390, OA4390 +4391, OA4391 +4392, OA4392 +4393, OA4393 +4394, OA4394 +4395, OA4395 +4396, OA4396 +4397, OA4397 +4398, OA4398 +4399, OA4399 +4400, OA4400 +4401, OA4401 +4402, OA4402 +4403, OA4403 +4404, OA4404 +4405, OA4405 +4406, OA4406 +4407, OA4407 +4408, OA4408 +4409, OA4409 +4410, OA4410 +4411, OA4411 +4412, OA4412 +4413, OA4413 +4414, OA4414 +4415, OA4415 +4416, OA4416 +4417, OA4417 +4418, OA4418 +4419, OA4419 +4420, OA4420 +4421, OA4421 +4422, OA4422 +4423, OA4423 +4424, OA4424 +4425, OA4425 +4426, OA4426 +4427, OA4427 +4428, OA4428 +4429, OA4429 +4430, OA4430 +4431, OA4431 +4432, OA4432 +4433, OA4433 +4434, OA4434 +4435, OA4435 +4436, OA4436 +4437, OA4437 +4438, OA4438 +4439, OA4439 +4440, OA4440 +4441, OA4441 +4442, OA4442 +4443, OA4443 +4444, OA4444 +4445, OA4445 +4446, OA4446 +4447, OA4447 +4448, OA4448 +4449, OA4449 +4450, OA4450 +4451, OA4451 +4452, OA4452 +4453, OA4453 +4454, OA4454 +4455, OA4455 +4456, OA4456 +4457, OA4457 +4458, OA4458 +4459, OA4459 +4460, OA4460 +4461, OA4461 +4462, OA4462 +4463, OA4463 +4464, OA4464 +4465, OA4465 +4466, OA4466 +4467, OA4467 +4468, OA4468 +4469, OA4469 +4470, OA4470 +4471, OA4471 +4472, OA4472 +4473, OA4473 +4474, OA4474 +4475, OA4475 +4476, OA4476 +4477, OA4477 +4478, OA4478 +4479, OA4479 +4480, OA4480 +4481, OA4481 +4482, OA4482 +4483, OA4483 +4484, OA4484 +4485, OA4485 +4486, OA4486 +4487, OA4487 +4488, OA4488 +4489, OA4489 +4490, OA4490 +4491, OA4491 +4492, OA4492 +4493, OA4493 +4494, OA4494 +4495, OA4495 +4496, OA4496 +4497, OA4497 +4498, OA4498 +4499, OA4499 +4500, OA4500 +4501, OA4501 +4502, OA4502 +4503, OA4503 +4504, OA4504 +4505, OA4505 +4506, OA4506 +4507, OA4507 +4508, OA4508 +4509, OA4509 +4510, OA4510 +4511, OA4511 +4512, OA4512 +4513, OA4513 +4514, OA4514 +4515, OA4515 +4516, OA4516 +4517, OA4517 +4518, OA4518 +4519, OA4519 +4520, OA4520 +4521, OA4521 +4522, OA4522 +4523, OA4523 +4524, OA4524 +4525, OA4525 +4526, OA4526 +4527, OA4527 +4528, OA4528 +4529, OA4529 +4530, OA4530 +4531, OA4531 +4532, OA4532 +4533, OA4533 +4534, OA4534 +4535, OA4535 +4536, OA4536 +4537, OA4537 +4538, OA4538 +4539, OA4539 +4540, OA4540 +4541, OA4541 +4542, OA4542 +4543, OA4543 +4544, OA4544 +4545, OA4545 +4546, OA4546 +4547, OA4547 +4548, OA4548 +4549, OA4549 +4550, OA4550 +4551, OA4551 +4552, OA4552 +4553, OA4553 +4554, OA4554 +4555, OA4555 +4556, OA4556 +4557, OA4557 +4558, OA4558 +4559, OA4559 +4560, OA4560 +4561, OA4561 +4562, OA4562 +4563, OA4563 +4564, OA4564 +4565, OA4565 +4566, OA4566 +4567, OA4567 +4568, OA4568 +4569, OA4569 +4570, OA4570 +4571, OA4571 +4572, OA4572 +4573, OA4573 +4574, OA4574 +4575, OA4575 +4576, OA4576 +4577, OA4577 +4578, OA4578 +4579, OA4579 +4580, OA4580 +4581, OA4581 +4582, OA4582 +4583, OA4583 +4584, OA4584 +4585, OA4585 +4586, OA4586 +4587, OA4587 +4588, OA4588 +4589, OA4589 +4590, OA4590 +4591, OA4591 +4592, OA4592 +4593, OA4593 +4594, OA4594 +4595, OA4595 +4596, OA4596 +4597, OA4597 +4598, OA4598 +4599, OA4599 +4600, OA4600 +4601, OA4601 +4602, OA4602 +4603, OA4603 +4604, OA4604 +4605, OA4605 +4606, OA4606 +4607, OA4607 +4608, OA4608 +4609, OA4609 +4610, OA4610 +4611, OA4611 +4612, OA4612 +4613, OA4613 +4614, OA4614 +4615, OA4615 +4616, OA4616 +4617, OA4617 +4618, OA4618 +4619, OA4619 +4620, OA4620 +4621, OA4621 +4622, OA4622 +4623, OA4623 +4624, OA4624 +4625, OA4625 +4626, OA4626 +4627, OA4627 +4628, OA4628 +4629, OA4629 +4630, OA4630 +4631, OA4631 +4632, OA4632 +4633, OA4633 +4634, OA4634 +4635, OA4635 +4636, OA4636 +4637, OA4637 +4638, OA4638 +4639, OA4639 +4640, OA4640 +4641, OA4641 +4642, OA4642 +4643, OA4643 +4644, OA4644 +4645, OA4645 +4646, OA4646 +4647, OA4647 +4648, OA4648 +4649, OA4649 +4650, OA4650 +4651, OA4651 +4652, OA4652 +4653, OA4653 +4654, OA4654 +4655, OA4655 +4656, OA4656 +4657, OA4657 +4658, OA4658 +4659, OA4659 +4660, OA4660 +4661, OA4661 +4662, OA4662 +4663, OA4663 +4664, OA4664 +4665, OA4665 +4666, OA4666 +4667, OA4667 +4668, OA4668 +4669, OA4669 +4670, OA4670 +4671, OA4671 +4672, OA4672 +4673, OA4673 +4674, OA4674 +4675, OA4675 +4676, OA4676 +4677, OA4677 +4678, OA4678 +4679, OA4679 +4680, OA4680 +4681, OA4681 +4682, OA4682 +4683, OA4683 +4684, OA4684 +4685, OA4685 +4686, OA4686 +4687, OA4687 +4688, OA4688 +4689, OA4689 +4690, OA4690 +4691, OA4691 +4692, OA4692 +4693, OA4693 +4694, OA4694 +4695, OA4695 +4696, OA4696 +4697, OA4697 +4698, OA4698 +4699, OA4699 +4700, OA4700 +4701, OA4701 +4702, OA4702 +4703, OA4703 +4704, OA4704 +4705, OA4705 +4706, OA4706 +4707, OA4707 +4708, OA4708 +4709, OA4709 +4710, OA4710 +4711, OA4711 +4712, OA4712 +4713, OA4713 +4714, OA4714 +4715, OA4715 +4716, OA4716 +4717, OA4717 +4718, OA4718 +4719, OA4719 +4720, OA4720 +4721, OA4721 +4722, OA4722 +4723, OA4723 +4724, OA4724 +4725, OA4725 +4726, OA4726 +4727, OA4727 +4728, OA4728 +4729, OA4729 +4730, OA4730 +4731, OA4731 +4732, OA4732 +4733, OA4733 +4734, OA4734 +4735, OA4735 +4736, OA4736 +4737, OA4737 +4738, OA4738 +4739, OA4739 +4740, OA4740 +4741, OA4741 +4742, OA4742 +4743, OA4743 +4744, OA4744 +4745, OA4745 +4746, OA4746 +4747, OA4747 +4748, OA4748 +4749, OA4749 +4750, OA4750 +4751, OA4751 +4752, OA4752 +4753, OA4753 +4754, OA4754 +4755, OA4755 +4756, OA4756 +4757, OA4757 +4758, OA4758 +4759, OA4759 +4760, OA4760 +4761, OA4761 +4762, OA4762 +4763, OA4763 +4764, OA4764 +4765, OA4765 +4766, OA4766 +4767, OA4767 +4768, OA4768 +4769, OA4769 +4770, OA4770 +4771, OA4771 +4772, OA4772 +4773, OA4773 +4774, OA4774 +4775, OA4775 +4776, OA4776 +4777, OA4777 +4778, OA4778 +4779, OA4779 +4780, OA4780 +4781, OA4781 +4782, OA4782 +4783, OA4783 +4784, OA4784 +4785, OA4785 +4786, OA4786 +4787, OA4787 +4788, OA4788 +4789, OA4789 +4790, OA4790 +4791, OA4791 +4792, OA4792 +4793, OA4793 +4794, OA4794 +4795, OA4795 +4796, OA4796 +4797, OA4797 +4798, OA4798 +4799, OA4799 +4800, OA4800 +4801, OA4801 +4802, OA4802 +4803, OA4803 +4804, OA4804 +4805, OA4805 +4806, OA4806 +4807, OA4807 +4808, OA4808 +4809, OA4809 +4810, OA4810 +4811, OA4811 +4812, OA4812 +4813, OA4813 +4814, OA4814 +4815, OA4815 +4816, OA4816 +4817, OA4817 +4818, OA4818 +4819, OA4819 +4820, OA4820 +4821, OA4821 +4822, OA4822 +4823, OA4823 +4824, OA4824 +4825, OA4825 +4826, OA4826 +4827, OA4827 +4828, OA4828 +4829, OA4829 +4830, OA4830 +4831, OA4831 +4832, OA4832 +4833, OA4833 +4834, OA4834 +4835, OA4835 +4836, OA4836 +4837, OA4837 +4838, OA4838 +4839, OA4839 +4840, OA4840 +4841, OA4841 +4842, OA4842 +4843, OA4843 +4844, OA4844 +4845, OA4845 +4846, OA4846 +4847, OA4847 +4848, OA4848 +4849, OA4849 +4850, OA4850 +4851, OA4851 +4852, OA4852 +4853, OA4853 +4854, OA4854 +4855, OA4855 +4856, OA4856 +4857, OA4857 +4858, OA4858 +4859, OA4859 +4860, OA4860 +4861, OA4861 +4862, OA4862 +4863, OA4863 +4864, OA4864 +4865, OA4865 +4866, OA4866 +4867, OA4867 +4868, OA4868 +4869, OA4869 +4870, OA4870 +4871, OA4871 +4872, OA4872 +4873, OA4873 +4874, OA4874 +4875, OA4875 +4876, OA4876 +4877, OA4877 +4878, OA4878 +4879, OA4879 +4880, OA4880 +4881, OA4881 +4882, OA4882 +4883, OA4883 +4884, OA4884 +4885, OA4885 +4886, OA4886 +4887, OA4887 +4888, OA4888 +4889, OA4889 +4890, OA4890 +4891, OA4891 +4892, OA4892 +4893, OA4893 +4894, OA4894 +4895, OA4895 +4896, OA4896 +4897, OA4897 +4898, OA4898 +4899, OA4899 +4900, OA4900 +4901, OA4901 +4902, OA4902 +4903, OA4903 +4904, OA4904 +4905, OA4905 +4906, OA4906 +4907, OA4907 +4908, OA4908 +4909, OA4909 +4910, OA4910 +4911, OA4911 +4912, OA4912 +4913, OA4913 +4914, OA4914 +4915, OA4915 +4916, OA4916 +4917, OA4917 +4918, OA4918 +4919, OA4919 +4920, OA4920 +4921, OA4921 +4922, OA4922 +4923, OA4923 +4924, OA4924 +4925, OA4925 +4926, OA4926 +4927, OA4927 +4928, OA4928 +4929, OA4929 +4930, OA4930 +4931, OA4931 +4932, OA4932 +4933, OA4933 +4934, OA4934 +4935, OA4935 +4936, OA4936 +4937, OA4937 +4938, OA4938 +4939, OA4939 +4940, OA4940 +4941, OA4941 +4942, OA4942 +4943, OA4943 +4944, OA4944 +4945, OA4945 +4946, OA4946 +4947, OA4947 +4948, OA4948 +4949, OA4949 +4950, OA4950 +4951, OA4951 +4952, OA4952 +4953, OA4953 +4954, OA4954 +4955, OA4955 +4956, OA4956 +4957, OA4957 +4958, OA4958 +4959, OA4959 +4960, OA4960 +4961, OA4961 +4962, OA4962 +4963, OA4963 +4964, OA4964 +4965, OA4965 +4966, OA4966 +4967, OA4967 +4968, OA4968 +4969, OA4969 +4970, OA4970 +4971, OA4971 +4972, OA4972 +4973, OA4973 +4974, OA4974 +4975, OA4975 +4976, OA4976 +4977, OA4977 +4978, OA4978 +4979, OA4979 +4980, OA4980 +4981, OA4981 +4982, OA4982 +4983, OA4983 +4984, OA4984 +4985, OA4985 +4986, OA4986 +4987, OA4987 +4988, OA4988 +4989, OA4989 +4990, OA4990 +4991, OA4991 +4992, OA4992 +4993, OA4993 +4994, OA4994 +4995, OA4995 +4996, OA4996 +4997, OA4997 +4998, OA4998 +4999, OA4999 +5000, OA5000 +5001, OA5001 +5002, OA5002 +5003, OA5003 +5004, OA5004 +5005, OA5005 +5006, OA5006 +5007, OA5007 +5008, OA5008 +5009, OA5009 +5010, OA5010 +5011, OA5011 +5012, OA5012 +5013, OA5013 +5014, OA5014 +5015, OA5015 +5016, OA5016 +5017, OA5017 +5018, OA5018 +5019, OA5019 +5020, OA5020 +5021, OA5021 +5022, OA5022 +5023, OA5023 +5024, OA5024 +5025, OA5025 +5026, OA5026 +5027, OA5027 +5028, OA5028 +5029, OA5029 +5030, OA5030 +5031, OA5031 +5032, OA5032 +5033, OA5033 +5034, OA5034 +5035, OA5035 +5036, OA5036 +5037, OA5037 +5038, OA5038 +5039, OA5039 +5040, OA5040 +5041, OA5041 +5042, OA5042 +5043, OA5043 +5044, OA5044 +5045, OA5045 +5046, OA5046 +5047, OA5047 +5048, OA5048 +5049, OA5049 +5050, OA5050 +5051, OA5051 +5052, OA5052 +5053, OA5053 +5054, OA5054 +5055, OA5055 +5056, OA5056 +5057, OA5057 +5058, OA5058 +5059, OA5059 +5060, OA5060 +5061, OA5061 +5062, OA5062 +5063, OA5063 +5064, OA5064 +5065, OA5065 +5066, OA5066 +5067, OA5067 +5068, OA5068 +5069, OA5069 +5070, OA5070 +5071, OA5071 +5072, OA5072 +5073, OA5073 +5074, OA5074 +5075, OA5075 +5076, OA5076 +5077, OA5077 +5078, OA5078 +5079, OA5079 +5080, OA5080 +5081, OA5081 +5082, OA5082 +5083, OA5083 +5084, OA5084 +5085, OA5085 +5086, OA5086 +5087, OA5087 +5088, OA5088 +5089, OA5089 +5090, OA5090 +5091, OA5091 +5092, OA5092 +5093, OA5093 +5094, OA5094 +5095, OA5095 +5096, OA5096 +5097, OA5097 +5098, OA5098 +5099, OA5099 +5100, OA5100 +5101, OA5101 +5102, OA5102 +5103, OA5103 +5104, OA5104 +5105, OA5105 +5106, OA5106 +5107, OA5107 +5108, OA5108 +5109, OA5109 +5110, OA5110 +5111, OA5111 +5112, OA5112 +5113, OA5113 +5114, OA5114 +5115, OA5115 +5116, OA5116 +5117, OA5117 +5118, OA5118 +5119, OA5119 +5120, OA5120 +5121, OA5121 +5122, OA5122 +5123, OA5123 +5124, OA5124 +5125, OA5125 +5126, OA5126 +5127, OA5127 +5128, OA5128 +5129, OA5129 +5130, OA5130 +5131, OA5131 +5132, OA5132 +5133, OA5133 +5134, OA5134 +5135, OA5135 +5136, OA5136 +5137, OA5137 +5138, OA5138 +5139, OA5139 +5140, OA5140 +5141, OA5141 +5142, OA5142 +5143, OA5143 +5144, OA5144 +5145, OA5145 +5146, OA5146 +5147, OA5147 +5148, OA5148 +5149, OA5149 +5150, OA5150 +5151, OA5151 +5152, OA5152 +5153, OA5153 +5154, OA5154 +5155, OA5155 +5156, OA5156 +5157, OA5157 +5158, OA5158 +5159, OA5159 +5160, OA5160 +5161, OA5161 +5162, OA5162 +5163, OA5163 +5164, OA5164 +5165, OA5165 +5166, OA5166 +5167, OA5167 +5168, OA5168 +5169, OA5169 +5170, OA5170 +5171, OA5171 +5172, OA5172 +5173, OA5173 +5174, OA5174 +5175, OA5175 +5176, OA5176 +5177, OA5177 +5178, OA5178 +5179, OA5179 +5180, OA5180 +5181, OA5181 +5182, OA5182 +5183, OA5183 +5184, OA5184 +5185, OA5185 +5186, OA5186 +5187, OA5187 +5188, OA5188 +5189, OA5189 +5190, OA5190 +5191, OA5191 +5192, OA5192 +5193, OA5193 +5194, OA5194 +5195, OA5195 +5196, OA5196 +5197, OA5197 +5198, OA5198 +5199, OA5199 +5200, OA5200 +5201, OA5201 +5202, OA5202 +5203, OA5203 +5204, OA5204 +5205, OA5205 +5206, OA5206 +5207, OA5207 +5208, OA5208 +5209, OA5209 +5210, OA5210 +5211, OA5211 +5212, OA5212 +5213, OA5213 +5214, OA5214 +5215, OA5215 +5216, OA5216 +5217, OA5217 +5218, OA5218 +5219, OA5219 +5220, OA5220 +5221, OA5221 +5222, OA5222 +5223, OA5223 +5224, OA5224 +5225, OA5225 +5226, OA5226 +5227, OA5227 +5228, OA5228 +5229, OA5229 +5230, OA5230 +5231, OA5231 +5232, OA5232 +5233, OA5233 +5234, OA5234 +5235, OA5235 +5236, OA5236 +5237, OA5237 +5238, OA5238 +5239, OA5239 +5240, OA5240 +5241, OA5241 +5242, OA5242 +5243, OA5243 +5244, OA5244 +5245, OA5245 +5246, OA5246 +5247, OA5247 +5248, OA5248 +5249, OA5249 +5250, OA5250 +5251, OA5251 +5252, OA5252 +5253, OA5253 +5254, OA5254 +5255, OA5255 +5256, OA5256 +5257, OA5257 +5258, OA5258 +5259, OA5259 +5260, OA5260 +5261, OA5261 +5262, OA5262 +5263, OA5263 +5264, OA5264 +5265, OA5265 +5266, OA5266 +5267, OA5267 +5268, OA5268 +5269, OA5269 +5270, OA5270 +5271, OA5271 +5272, OA5272 +5273, OA5273 +5274, OA5274 +5275, OA5275 +5276, OA5276 +5277, OA5277 +5278, OA5278 +5279, OA5279 +5280, OA5280 +5281, OA5281 +5282, OA5282 +5283, OA5283 +5284, OA5284 +5285, OA5285 +5286, OA5286 +5287, OA5287 +5288, OA5288 +5289, OA5289 +5290, OA5290 +5291, OA5291 +5292, OA5292 +5293, OA5293 +5294, OA5294 +5295, OA5295 +5296, OA5296 +5297, OA5297 +5298, OA5298 +5299, OA5299 +5300, OA5300 +5301, OA5301 +5302, OA5302 +5303, OA5303 +5304, OA5304 +5305, OA5305 +5306, OA5306 +5307, OA5307 +5308, OA5308 +5309, OA5309 +5310, OA5310 +5311, OA5311 +5312, OA5312 +5313, OA5313 +5314, OA5314 +5315, OA5315 +5316, OA5316 +5317, OA5317 +5318, OA5318 +5319, OA5319 +5320, OA5320 +5321, OA5321 +5322, OA5322 +5323, OA5323 +5324, OA5324 +5325, OA5325 +5326, OA5326 +5327, OA5327 +5328, OA5328 +5329, OA5329 +5330, OA5330 +5331, OA5331 +5332, OA5332 +5333, OA5333 +5334, OA5334 +5335, OA5335 +5336, OA5336 +5337, OA5337 +5338, OA5338 +5339, OA5339 +5340, OA5340 +5341, OA5341 +5342, OA5342 +5343, OA5343 +5344, OA5344 +5345, OA5345 +5346, OA5346 +5347, OA5347 +5348, OA5348 +5349, OA5349 +5350, OA5350 +5351, OA5351 +5352, OA5352 +5353, OA5353 +5354, OA5354 +5355, OA5355 +5356, OA5356 +5357, OA5357 +5358, OA5358 +5359, OA5359 +5360, OA5360 +5361, OA5361 +5362, OA5362 +5363, OA5363 +5364, OA5364 +5365, OA5365 +5366, OA5366 +5367, OA5367 +5368, OA5368 +5369, OA5369 +5370, OA5370 +5371, OA5371 +5372, OA5372 +5373, OA5373 +5374, OA5374 +5375, OA5375 +5376, OA5376 +5377, OA5377 +5378, OA5378 +5379, OA5379 +5380, OA5380 +5381, OA5381 +5382, OA5382 +5383, OA5383 +5384, OA5384 +5385, OA5385 +5386, OA5386 +5387, OA5387 +5388, OA5388 +5389, OA5389 +5390, OA5390 +5391, OA5391 +5392, OA5392 +5393, OA5393 +5394, OA5394 +5395, OA5395 +5396, OA5396 +5397, OA5397 +5398, OA5398 +5399, OA5399 +5400, OA5400 +5401, OA5401 +5402, OA5402 +5403, OA5403 +5404, OA5404 +5405, OA5405 +5406, OA5406 +5407, OA5407 +5408, OA5408 +5409, OA5409 +5410, OA5410 +5411, OA5411 +5412, OA5412 +5413, OA5413 +5414, OA5414 +5415, OA5415 +5416, OA5416 +5417, OA5417 +5418, OA5418 +5419, OA5419 +5420, OA5420 +5421, OA5421 +5422, OA5422 +5423, OA5423 +5424, OA5424 +5425, OA5425 +5426, OA5426 +5427, OA5427 +5428, OA5428 +5429, OA5429 +5430, OA5430 +5431, OA5431 +5432, OA5432 +5433, OA5433 +5434, OA5434 +5435, OA5435 +5436, OA5436 +5437, OA5437 +5438, OA5438 +5439, OA5439 +5440, OA5440 +5441, OA5441 +5442, OA5442 +5443, OA5443 +5444, OA5444 +5445, OA5445 +5446, OA5446 +5447, OA5447 +5448, OA5448 +5449, OA5449 +5450, OA5450 +5451, OA5451 +5452, OA5452 +5453, OA5453 +5454, OA5454 +5455, OA5455 +5456, OA5456 +5457, OA5457 +5458, OA5458 +5459, OA5459 +5460, OA5460 +5461, OA5461 +5462, OA5462 +5463, OA5463 +5464, OA5464 +5465, OA5465 +5466, OA5466 +5467, OA5467 +5468, OA5468 +5469, OA5469 +5470, OA5470 +5471, OA5471 +5472, OA5472 +5473, OA5473 +5474, OA5474 +5475, OA5475 +5476, OA5476 +5477, OA5477 +5478, OA5478 +5479, OA5479 +5480, OA5480 +5481, OA5481 +5482, OA5482 +5483, OA5483 +5484, OA5484 +5485, OA5485 +5486, OA5486 +5487, OA5487 +5488, OA5488 +5489, OA5489 +5490, OA5490 +5491, OA5491 +5492, OA5492 +5493, OA5493 +5494, OA5494 +5495, OA5495 +5496, OA5496 +5497, OA5497 +5498, OA5498 +5499, OA5499 +5500, OA5500 +5501, OA5501 +5502, OA5502 +5503, OA5503 +5504, OA5504 +5505, OA5505 +5506, OA5506 +5507, OA5507 +5508, OA5508 +5509, OA5509 +5510, OA5510 +5511, OA5511 +5512, OA5512 +5513, OA5513 +5514, OA5514 +5515, OA5515 +5516, OA5516 +5517, OA5517 +5518, OA5518 +5519, OA5519 +5520, OA5520 +5521, OA5521 +5522, OA5522 +5523, OA5523 +5524, OA5524 +5525, OA5525 +5526, OA5526 +5527, OA5527 +5528, OA5528 +5529, OA5529 +5530, OA5530 +5531, OA5531 +5532, OA5532 +5533, OA5533 +5534, OA5534 +5535, OA5535 +5536, OA5536 +5537, OA5537 +5538, OA5538 +5539, OA5539 +5540, OA5540 +5541, OA5541 +5542, OA5542 +5543, OA5543 +5544, OA5544 +5545, OA5545 +5546, OA5546 +5547, OA5547 +5548, OA5548 +5549, OA5549 +5550, OA5550 +5551, OA5551 +5552, OA5552 +5553, OA5553 +5554, OA5554 +5555, OA5555 +5556, OA5556 +5557, OA5557 +5558, OA5558 +5559, OA5559 +5560, OA5560 +5561, OA5561 +5562, OA5562 +5563, OA5563 +5564, OA5564 +5565, OA5565 +5566, OA5566 +5567, OA5567 +5568, OA5568 +5569, OA5569 +5570, OA5570 +5571, OA5571 +5572, OA5572 +5573, OA5573 +5574, OA5574 +5575, OA5575 +5576, OA5576 +5577, OA5577 +5578, OA5578 +5579, OA5579 +5580, OA5580 +5581, OA5581 +5582, OA5582 +5583, OA5583 +5584, OA5584 +5585, OA5585 +5586, OA5586 +5587, OA5587 +5588, OA5588 +5589, OA5589 +5590, OA5590 +5591, OA5591 +5592, OA5592 +5593, OA5593 +5594, OA5594 +5595, OA5595 +5596, OA5596 +5597, OA5597 +5598, OA5598 +5599, OA5599 +5600, OA5600 +5601, OA5601 +5602, OA5602 +5603, OA5603 +5604, OA5604 +5605, OA5605 +5606, OA5606 +5607, OA5607 +5608, OA5608 +5609, OA5609 +5610, OA5610 +5611, OA5611 +5612, OA5612 +5613, OA5613 +5614, OA5614 +5615, OA5615 +5616, OA5616 +5617, OA5617 +5618, OA5618 +5619, OA5619 +5620, OA5620 +5621, OA5621 +5622, OA5622 +5623, OA5623 +5624, OA5624 +5625, OA5625 +5626, OA5626 +5627, OA5627 +5628, OA5628 +5629, OA5629 +5630, OA5630 +5631, OA5631 +5632, OA5632 +5633, OA5633 +5634, OA5634 +5635, OA5635 +5636, OA5636 +5637, OA5637 +5638, OA5638 +5639, OA5639 +5640, OA5640 +5641, OA5641 +5642, OA5642 +5643, OA5643 +5644, OA5644 +5645, OA5645 +5646, OA5646 +5647, OA5647 +5648, OA5648 +5649, OA5649 +5650, OA5650 +5651, OA5651 +5652, OA5652 +5653, OA5653 +5654, OA5654 +5655, OA5655 +5656, OA5656 +5657, OA5657 +5658, OA5658 +5659, OA5659 +5660, OA5660 +5661, OA5661 +5662, OA5662 +5663, OA5663 +5664, OA5664 +5665, OA5665 +5666, OA5666 +5667, OA5667 +5668, OA5668 +5669, OA5669 +5670, OA5670 +5671, OA5671 +5672, OA5672 +5673, OA5673 +5674, OA5674 +5675, OA5675 +5676, OA5676 +5677, OA5677 +5678, OA5678 +5679, OA5679 +5680, OA5680 +5681, OA5681 +5682, OA5682 +5683, OA5683 +5684, OA5684 +5685, OA5685 +5686, OA5686 +5687, OA5687 +5688, OA5688 +5689, OA5689 +5690, OA5690 +5691, OA5691 +5692, OA5692 +5693, OA5693 +5694, OA5694 +5695, OA5695 +5696, OA5696 +5697, OA5697 +5698, OA5698 +5699, OA5699 +5700, OA5700 +5701, OA5701 +5702, OA5702 +5703, OA5703 +5704, OA5704 +5705, OA5705 +5706, OA5706 +5707, OA5707 +5708, OA5708 +5709, OA5709 +5710, OA5710 +5711, OA5711 +5712, OA5712 +5713, OA5713 +5714, OA5714 +5715, OA5715 +5716, OA5716 +5717, OA5717 +5718, OA5718 +5719, OA5719 +5720, OA5720 +5721, OA5721 +5722, OA5722 +5723, OA5723 +5724, OA5724 +5725, OA5725 +5726, OA5726 +5727, OA5727 +5728, OA5728 +5729, OA5729 +5730, OA5730 +5731, OA5731 +5732, OA5732 +5733, OA5733 +5734, OA5734 +5735, OA5735 +5736, OA5736 +5737, OA5737 +5738, OA5738 +5739, OA5739 +5740, OA5740 +5741, OA5741 +5742, OA5742 +5743, OA5743 +5744, OA5744 +5745, OA5745 +5746, OA5746 +5747, OA5747 +5748, OA5748 +5749, OA5749 +5750, OA5750 +5751, OA5751 +5752, OA5752 +5753, OA5753 +5754, OA5754 +5755, OA5755 +5756, OA5756 +5757, OA5757 +5758, OA5758 +5759, OA5759 +5760, OA5760 +5761, OA5761 +5762, OA5762 +5763, OA5763 +5764, OA5764 +5765, OA5765 +5766, OA5766 +5767, OA5767 +5768, OA5768 +5769, OA5769 +5770, OA5770 +5771, OA5771 +5772, OA5772 +5773, OA5773 +5774, OA5774 +5775, OA5775 +5776, OA5776 +5777, OA5777 +5778, OA5778 +5779, OA5779 +5780, OA5780 +5781, OA5781 +5782, OA5782 +5783, OA5783 +5784, OA5784 +5785, OA5785 +5786, OA5786 +5787, OA5787 +5788, OA5788 +5789, OA5789 +5790, OA5790 +5791, OA5791 +5792, OA5792 +5793, OA5793 +5794, OA5794 +5795, OA5795 +5796, OA5796 +5797, OA5797 +5798, OA5798 +5799, OA5799 +5800, OA5800 +5801, OA5801 +5802, OA5802 +5803, OA5803 +5804, OA5804 +5805, OA5805 +5806, OA5806 +5807, OA5807 +5808, OA5808 +5809, OA5809 +5810, OA5810 +5811, OA5811 +5812, OA5812 +5813, OA5813 +5814, OA5814 +5815, OA5815 +5816, OA5816 +5817, OA5817 +5818, OA5818 +5819, OA5819 +5820, OA5820 +5821, OA5821 +5822, OA5822 +5823, OA5823 +5824, OA5824 +5825, OA5825 +5826, OA5826 +5827, OA5827 +5828, OA5828 +5829, OA5829 +5830, OA5830 +5831, OA5831 +5832, OA5832 +5833, OA5833 +5834, OA5834 +5835, OA5835 +5836, OA5836 +5837, OA5837 +5838, OA5838 +5839, OA5839 +5840, OA5840 +5841, OA5841 +5842, OA5842 +5843, OA5843 +5844, OA5844 +5845, OA5845 +5846, OA5846 +5847, OA5847 +5848, OA5848 +5849, OA5849 +5850, OA5850 +5851, OA5851 +5852, OA5852 +5853, OA5853 +5854, OA5854 +5855, OA5855 +5856, OA5856 +5857, OA5857 +5858, OA5858 +5859, OA5859 +5860, OA5860 +5861, OA5861 +5862, OA5862 +5863, OA5863 +5864, OA5864 +5865, OA5865 +5866, OA5866 +5867, OA5867 +5868, OA5868 +5869, OA5869 +5870, OA5870 +5871, OA5871 +5872, OA5872 +5873, OA5873 +5874, OA5874 +5875, OA5875 +5876, OA5876 +5877, OA5877 +5878, OA5878 +5879, OA5879 +5880, OA5880 +5881, OA5881 +5882, OA5882 +5883, OA5883 +5884, OA5884 +5885, OA5885 +5886, OA5886 +5887, OA5887 +5888, OA5888 +5889, OA5889 +5890, OA5890 +5891, OA5891 +5892, OA5892 +5893, OA5893 +5894, OA5894 +5895, OA5895 +5896, OA5896 +5897, OA5897 +5898, OA5898 +5899, OA5899 +5900, OA5900 +5901, OA5901 +5902, OA5902 +5903, OA5903 +5904, OA5904 +5905, OA5905 +5906, OA5906 +5907, OA5907 +5908, OA5908 +5909, OA5909 +5910, OA5910 +5911, OA5911 +5912, OA5912 +5913, OA5913 +5914, OA5914 +5915, OA5915 +5916, OA5916 +5917, OA5917 +5918, OA5918 +5919, OA5919 +5920, OA5920 +5921, OA5921 +5922, OA5922 +5923, OA5923 +5924, OA5924 +5925, OA5925 +5926, OA5926 +5927, OA5927 +5928, OA5928 +5929, OA5929 +5930, OA5930 +5931, OA5931 +5932, OA5932 +5933, OA5933 +5934, OA5934 +5935, OA5935 +5936, OA5936 +5937, OA5937 +5938, OA5938 +5939, OA5939 +5940, OA5940 +5941, OA5941 +5942, OA5942 +5943, OA5943 +5944, OA5944 +5945, OA5945 +5946, OA5946 +5947, OA5947 +5948, OA5948 +5949, OA5949 +5950, OA5950 +5951, OA5951 +5952, OA5952 +5953, OA5953 +5954, OA5954 +5955, OA5955 +5956, OA5956 +5957, OA5957 +5958, OA5958 +5959, OA5959 +5960, OA5960 +5961, OA5961 +5962, OA5962 +5963, OA5963 +5964, OA5964 +5965, OA5965 +5966, OA5966 +5967, OA5967 +5968, OA5968 +5969, OA5969 +5970, OA5970 +5971, OA5971 +5972, OA5972 +5973, OA5973 +5974, OA5974 +5975, OA5975 +5976, OA5976 +5977, OA5977 +5978, OA5978 +5979, OA5979 +5980, OA5980 +5981, OA5981 +5982, OA5982 +5983, OA5983 +5984, OA5984 +5985, OA5985 +5986, OA5986 +5987, OA5987 +5988, OA5988 +5989, OA5989 +5990, OA5990 +5991, OA5991 +5992, OA5992 +5993, OA5993 +5994, OA5994 +5995, OA5995 +5996, OA5996 +5997, OA5997 +5998, OA5998 +5999, OA5999 +6000, OA6000 +6001, OA6001 +6002, OA6002 +6003, OA6003 +6004, OA6004 +6005, OA6005 +6006, OA6006 +6007, OA6007 +6008, OA6008 +6009, OA6009 +6010, OA6010 +6011, OA6011 +6012, OA6012 +6013, OA6013 +6014, OA6014 +6015, OA6015 +6016, OA6016 +6017, OA6017 +6018, OA6018 +6019, OA6019 +6020, OA6020 +6021, OA6021 +6022, OA6022 +6023, OA6023 +6024, OA6024 +6025, OA6025 +6026, OA6026 +6027, OA6027 +6028, OA6028 +6029, OA6029 +6030, OA6030 +6031, OA6031 +6032, OA6032 +6033, OA6033 +6034, OA6034 +6035, OA6035 +6036, OA6036 +6037, OA6037 +6038, OA6038 +6039, OA6039 +6040, OA6040 +6041, OA6041 +6042, OA6042 +6043, OA6043 +6044, OA6044 +6045, OA6045 +6046, OA6046 +6047, OA6047 +6048, OA6048 +6049, OA6049 +6050, OA6050 +6051, OA6051 +6052, OA6052 +6053, OA6053 +6054, OA6054 +6055, OA6055 +6056, OA6056 +6057, OA6057 +6058, OA6058 +6059, OA6059 +6060, OA6060 +6061, OA6061 +6062, OA6062 +6063, OA6063 +6064, OA6064 +6065, OA6065 +6066, OA6066 +6067, OA6067 +6068, OA6068 +6069, OA6069 +6070, OA6070 +6071, OA6071 +6072, OA6072 +6073, OA6073 +6074, OA6074 +6075, OA6075 +6076, OA6076 +6077, OA6077 +6078, OA6078 +6079, OA6079 +6080, OA6080 +6081, OA6081 +6082, OA6082 +6083, OA6083 +6084, OA6084 +6085, OA6085 +6086, OA6086 +6087, OA6087 +6088, OA6088 +6089, OA6089 +6090, OA6090 +6091, OA6091 +6092, OA6092 +6093, OA6093 +6094, OA6094 +6095, OA6095 +6096, OA6096 +6097, OA6097 +6098, OA6098 +6099, OA6099 +6100, OA6100 +6101, OA6101 +6102, OA6102 +6103, OA6103 +6104, OA6104 +6105, OA6105 +6106, OA6106 +6107, OA6107 +6108, OA6108 +6109, OA6109 +6110, OA6110 +6111, OA6111 +6112, OA6112 +6113, OA6113 +6114, OA6114 +6115, OA6115 +6116, OA6116 +6117, OA6117 +6118, OA6118 +6119, OA6119 +6120, OA6120 +6121, OA6121 +6122, OA6122 +6123, OA6123 +6124, OA6124 +6125, OA6125 +6126, OA6126 +6127, OA6127 +6128, OA6128 +6129, OA6129 +6130, OA6130 +6131, OA6131 +6132, OA6132 +6133, OA6133 +6134, OA6134 +6135, OA6135 +6136, OA6136 +6137, OA6137 +6138, OA6138 +6139, OA6139 +6140, OA6140 +6141, OA6141 +6142, OA6142 +6143, OA6143 +6144, OA6144 +6145, OA6145 +6146, OA6146 +6147, OA6147 +6148, OA6148 +6149, OA6149 +6150, OA6150 +6151, OA6151 +6152, OA6152 +6153, OA6153 +6154, OA6154 +6155, OA6155 +6156, OA6156 +6157, OA6157 +6158, OA6158 +6159, OA6159 +6160, OA6160 +6161, OA6161 +6162, OA6162 +6163, OA6163 +6164, OA6164 +6165, OA6165 +6166, OA6166 +6167, OA6167 +6168, OA6168 +6169, OA6169 +6170, OA6170 +6171, OA6171 +6172, OA6172 +6173, OA6173 +6174, OA6174 +6175, OA6175 +6176, OA6176 +6177, OA6177 +6178, OA6178 +6179, OA6179 +6180, OA6180 +6181, OA6181 +6182, OA6182 +6183, OA6183 +6184, OA6184 +6185, OA6185 +6186, OA6186 +6187, OA6187 +6188, OA6188 +6189, OA6189 +6190, OA6190 +6191, OA6191 +6192, OA6192 +6193, OA6193 +6194, OA6194 +6195, OA6195 +6196, OA6196 +6197, OA6197 +6198, OA6198 +6199, OA6199 +6200, OA6200 +6201, OA6201 +6202, OA6202 +6203, OA6203 +6204, OA6204 +6205, OA6205 +6206, OA6206 +6207, OA6207 +6208, OA6208 +6209, OA6209 +6210, OA6210 +6211, OA6211 +6212, OA6212 +6213, OA6213 +6214, OA6214 +6215, OA6215 +6216, OA6216 +6217, OA6217 +6218, OA6218 +6219, OA6219 +6220, OA6220 +6221, OA6221 +6222, OA6222 +6223, OA6223 +6224, OA6224 +6225, OA6225 +6226, OA6226 +6227, OA6227 +6228, OA6228 +6229, OA6229 +6230, OA6230 +6231, OA6231 +6232, OA6232 +6233, OA6233 +6234, OA6234 +6235, OA6235 +6236, OA6236 +6237, OA6237 +6238, OA6238 +6239, OA6239 +6240, OA6240 +6241, OA6241 +6242, OA6242 +6243, OA6243 +6244, OA6244 +6245, OA6245 +6246, OA6246 +6247, OA6247 +6248, OA6248 +6249, OA6249 +6250, OA6250 +6251, OA6251 +6252, OA6252 +6253, OA6253 +6254, OA6254 +6255, OA6255 +6256, OA6256 +6257, OA6257 +6258, OA6258 +6259, OA6259 +6260, OA6260 +6261, OA6261 +6262, OA6262 +6263, OA6263 +6264, OA6264 +6265, OA6265 +6266, OA6266 +6267, OA6267 +6268, OA6268 +6269, OA6269 +6270, OA6270 +6271, OA6271 +6272, OA6272 +6273, OA6273 +6274, OA6274 +6275, OA6275 +6276, OA6276 +6277, OA6277 +6278, OA6278 +6279, OA6279 +6280, OA6280 +6281, OA6281 +6282, OA6282 +6283, OA6283 +6284, OA6284 +6285, OA6285 +6286, OA6286 +6287, OA6287 +6288, OA6288 +6289, OA6289 +6290, OA6290 +6291, OA6291 +6292, OA6292 +6293, OA6293 +6294, OA6294 +6295, OA6295 +6296, OA6296 +6297, OA6297 +6298, OA6298 +6299, OA6299 +6300, OA6300 +6301, OA6301 +6302, OA6302 +6303, OA6303 +6304, OA6304 +6305, OA6305 +6306, OA6306 +6307, OA6307 +6308, OA6308 +6309, OA6309 +6310, OA6310 +6311, OA6311 +6312, OA6312 +6313, OA6313 +6314, OA6314 +6315, OA6315 +6316, OA6316 +6317, OA6317 +6318, OA6318 +6319, OA6319 +6320, OA6320 +6321, OA6321 +6322, OA6322 +6323, OA6323 +6324, OA6324 +6325, OA6325 +6326, OA6326 +6327, OA6327 +6328, OA6328 +6329, OA6329 +6330, OA6330 +6331, OA6331 +6332, OA6332 +6333, OA6333 +6334, OA6334 +6335, OA6335 +6336, OA6336 +6337, OA6337 +6338, OA6338 +6339, OA6339 +6340, OA6340 +6341, OA6341 +6342, OA6342 +6343, OA6343 +6344, OA6344 +6345, OA6345 +6346, OA6346 +6347, OA6347 +6348, OA6348 +6349, OA6349 +6350, OA6350 +6351, OA6351 +6352, OA6352 +6353, OA6353 +6354, OA6354 +6355, OA6355 +6356, OA6356 +6357, OA6357 +6358, OA6358 +6359, OA6359 +6360, OA6360 +6361, OA6361 +6362, OA6362 +6363, OA6363 +6364, OA6364 +6365, OA6365 +6366, OA6366 +6367, OA6367 +6368, OA6368 +6369, OA6369 +6370, OA6370 +6371, OA6371 +6372, OA6372 +6373, OA6373 +6374, OA6374 +6375, OA6375 +6376, OA6376 +6377, OA6377 +6378, OA6378 +6379, OA6379 +6380, OA6380 +6381, OA6381 +6382, OA6382 +6383, OA6383 +6384, OA6384 +6385, OA6385 +6386, OA6386 +6387, OA6387 +6388, OA6388 +6389, OA6389 +6390, OA6390 +6391, OA6391 +6392, OA6392 +6393, OA6393 +6394, OA6394 +6395, OA6395 +6396, OA6396 +6397, OA6397 +6398, OA6398 +6399, OA6399 +6400, OA6400 +6401, OA6401 +6402, OA6402 +6403, OA6403 +6404, OA6404 +6405, OA6405 +6406, OA6406 +6407, OA6407 +6408, OA6408 +6409, OA6409 +6410, OA6410 +6411, OA6411 +6412, OA6412 +6413, OA6413 +6414, OA6414 +6415, OA6415 +6416, OA6416 +6417, OA6417 +6418, OA6418 +6419, OA6419 +6420, OA6420 +6421, OA6421 +6422, OA6422 +6423, OA6423 +6424, OA6424 +6425, OA6425 +6426, OA6426 +6427, OA6427 +6428, OA6428 +6429, OA6429 +6430, OA6430 +6431, OA6431 +6432, OA6432 +6433, OA6433 +6434, OA6434 +6435, OA6435 +6436, OA6436 +6437, OA6437 +6438, OA6438 +6439, OA6439 +6440, OA6440 +6441, OA6441 +6442, OA6442 +6443, OA6443 +6444, OA6444 +6445, OA6445 +6446, OA6446 +6447, OA6447 +6448, OA6448 +6449, OA6449 +6450, OA6450 +6451, OA6451 +6452, OA6452 +6453, OA6453 +6454, OA6454 +6455, OA6455 +6456, OA6456 +6457, OA6457 +6458, OA6458 +6459, OA6459 +6460, OA6460 +6461, OA6461 +6462, OA6462 +6463, OA6463 +6464, OA6464 +6465, OA6465 +6466, OA6466 +6467, OA6467 +6468, OA6468 +6469, OA6469 +6470, OA6470 +6471, OA6471 +6472, OA6472 +6473, OA6473 +6474, OA6474 +6475, OA6475 +6476, OA6476 +6477, OA6477 +6478, OA6478 +6479, OA6479 +6480, OA6480 +6481, OA6481 +6482, OA6482 +6483, OA6483 +6484, OA6484 +6485, OA6485 +6486, OA6486 +6487, OA6487 +6488, OA6488 +6489, OA6489 +6490, OA6490 +6491, OA6491 +6492, OA6492 +6493, OA6493 +6494, OA6494 +6495, OA6495 +6496, OA6496 +6497, OA6497 +6498, OA6498 +6499, OA6499 +6500, OA6500 +6501, OA6501 +6502, OA6502 +6503, OA6503 +6504, OA6504 +6505, OA6505 +6506, OA6506 +6507, OA6507 +6508, OA6508 +6509, OA6509 +6510, OA6510 +6511, OA6511 +6512, OA6512 +6513, OA6513 +6514, OA6514 +6515, OA6515 +6516, OA6516 +6517, OA6517 +6518, OA6518 +6519, OA6519 +6520, OA6520 +6521, OA6521 +6522, OA6522 +6523, OA6523 +6524, OA6524 +6525, OA6525 +6526, OA6526 +6527, OA6527 +6528, OA6528 +6529, OA6529 +6530, OA6530 +6531, OA6531 +6532, OA6532 +6533, OA6533 +6534, OA6534 +6535, OA6535 +6536, OA6536 +6537, OA6537 +6538, OA6538 +6539, OA6539 +6540, OA6540 +6541, OA6541 +6542, OA6542 +6543, OA6543 +6544, OA6544 +6545, OA6545 +6546, OA6546 +6547, OA6547 +6548, OA6548 +6549, OA6549 +6550, OA6550 +6551, OA6551 +6552, OA6552 +6553, OA6553 +6554, OA6554 +6555, OA6555 +6556, OA6556 +6557, OA6557 +6558, OA6558 +6559, OA6559 +6560, OA6560 +6561, OA6561 +6562, OA6562 +6563, OA6563 +6564, OA6564 +6565, OA6565 +6566, OA6566 +6567, OA6567 +6568, OA6568 +6569, OA6569 +6570, OA6570 +6571, OA6571 +6572, OA6572 +6573, OA6573 +6574, OA6574 +6575, OA6575 +6576, OA6576 +6577, OA6577 +6578, OA6578 +6579, OA6579 +6580, OA6580 +6581, OA6581 +6582, OA6582 +6583, OA6583 +6584, OA6584 +6585, OA6585 +6586, OA6586 +6587, OA6587 +6588, OA6588 +6589, OA6589 +6590, OA6590 +6591, OA6591 +6592, OA6592 +6593, OA6593 +6594, OA6594 +6595, OA6595 +6596, OA6596 +6597, OA6597 +6598, OA6598 +6599, OA6599 +6600, OA6600 +6601, OA6601 +6602, OA6602 +6603, OA6603 +6604, OA6604 +6605, OA6605 +6606, OA6606 +6607, OA6607 +6608, OA6608 +6609, OA6609 +6610, OA6610 +6611, OA6611 +6612, OA6612 +6613, OA6613 +6614, OA6614 +6615, OA6615 +6616, OA6616 +6617, OA6617 +6618, OA6618 +6619, OA6619 +6620, OA6620 +6621, OA6621 +6622, OA6622 +6623, OA6623 +6624, OA6624 +6625, OA6625 +6626, OA6626 +6627, OA6627 +6628, OA6628 +6629, OA6629 +6630, OA6630 +6631, OA6631 +6632, OA6632 +6633, OA6633 +6634, OA6634 +6635, OA6635 +6636, OA6636 +6637, OA6637 +6638, OA6638 +6639, OA6639 +6640, OA6640 +6641, OA6641 +6642, OA6642 +6643, OA6643 +6644, OA6644 +6645, OA6645 +6646, OA6646 +6647, OA6647 +6648, OA6648 +6649, OA6649 +6650, OA6650 +6651, OA6651 +6652, OA6652 +6653, OA6653 +6654, OA6654 +6655, OA6655 +6656, OA6656 +6657, OA6657 +6658, OA6658 +6659, OA6659 +6660, OA6660 +6661, OA6661 +6662, OA6662 +6663, OA6663 +6664, OA6664 +6665, OA6665 +6666, OA6666 +6667, OA6667 +6668, OA6668 +6669, OA6669 +6670, OA6670 +6671, OA6671 +6672, OA6672 +6673, OA6673 +6674, OA6674 +6675, OA6675 +6676, OA6676 +6677, OA6677 +6678, OA6678 +6679, OA6679 +6680, OA6680 +6681, OA6681 +6682, OA6682 +6683, OA6683 +6684, OA6684 +6685, OA6685 +6686, OA6686 +6687, OA6687 +6688, OA6688 +6689, OA6689 +6690, OA6690 +6691, OA6691 +6692, OA6692 +6693, OA6693 +6694, OA6694 +6695, OA6695 +6696, OA6696 +6697, OA6697 +6698, OA6698 +6699, OA6699 +6700, OA6700 +6701, OA6701 +6702, OA6702 +6703, OA6703 +6704, OA6704 +6705, OA6705 +6706, OA6706 +6707, OA6707 +6708, OA6708 +6709, OA6709 +6710, OA6710 +6711, OA6711 +6712, OA6712 +6713, OA6713 +6714, OA6714 +6715, OA6715 +6716, OA6716 +6717, OA6717 +6718, OA6718 +6719, OA6719 +6720, OA6720 +6721, OA6721 +6722, OA6722 +6723, OA6723 +6724, OA6724 +6725, OA6725 +6726, OA6726 +6727, OA6727 +6728, OA6728 +6729, OA6729 +6730, OA6730 +6731, OA6731 +6732, OA6732 +6733, OA6733 +6734, OA6734 +6735, OA6735 +6736, OA6736 +6737, OA6737 +6738, OA6738 +6739, OA6739 +6740, OA6740 +6741, OA6741 +6742, OA6742 +6743, OA6743 +6744, OA6744 +6745, OA6745 +6746, OA6746 +6747, OA6747 +6748, OA6748 +6749, OA6749 +6750, OA6750 +6751, OA6751 +6752, OA6752 +6753, OA6753 +6754, OA6754 +6755, OA6755 +6756, OA6756 +6757, OA6757 +6758, OA6758 +6759, OA6759 +6760, OA6760 +6761, OA6761 +6762, OA6762 +6763, OA6763 +6764, OA6764 +6765, OA6765 +6766, OA6766 +6767, OA6767 +6768, OA6768 +6769, OA6769 +6770, OA6770 +6771, OA6771 +6772, OA6772 +6773, OA6773 +6774, OA6774 +6775, OA6775 +6776, OA6776 +6777, OA6777 +6778, OA6778 +6779, OA6779 +6780, OA6780 +6781, OA6781 +6782, OA6782 +6783, OA6783 +6784, OA6784 +6785, OA6785 +6786, OA6786 +6787, OA6787 +6788, OA6788 +6789, OA6789 +6790, OA6790 +6791, OA6791 +6792, OA6792 +6793, OA6793 +6794, OA6794 +6795, OA6795 +6796, OA6796 +6797, OA6797 +6798, OA6798 +6799, OA6799 +6800, OA6800 +6801, OA6801 +6802, OA6802 +6803, OA6803 +6804, OA6804 +6805, OA6805 +6806, OA6806 +6807, OA6807 +6808, OA6808 +6809, OA6809 +6810, OA6810 +6811, OA6811 +6812, OA6812 +6813, OA6813 +6814, OA6814 +6815, OA6815 +6816, OA6816 +6817, OA6817 +6818, OA6818 +6819, OA6819 +6820, OA6820 +6821, OA6821 +6822, OA6822 +6823, OA6823 +6824, OA6824 +6825, OA6825 +6826, OA6826 +6827, OA6827 +6828, OA6828 +6829, OA6829 +6830, OA6830 +6831, OA6831 +6832, OA6832 +6833, OA6833 +6834, OA6834 +6835, OA6835 +6836, OA6836 +6837, OA6837 +6838, OA6838 +6839, OA6839 +6840, OA6840 +6841, OA6841 +6842, OA6842 +6843, OA6843 +6844, OA6844 +6845, OA6845 +6846, OA6846 +6847, OA6847 +6848, OA6848 +6849, OA6849 +6850, OA6850 +6851, OA6851 +6852, OA6852 +6853, OA6853 +6854, OA6854 +6855, OA6855 +6856, OA6856 +6857, OA6857 +6858, OA6858 +6859, OA6859 +6860, OA6860 +6861, OA6861 +6862, OA6862 +6863, OA6863 +6864, OA6864 +6865, OA6865 +6866, OA6866 +6867, OA6867 +6868, OA6868 +6869, OA6869 +6870, OA6870 +6871, OA6871 +6872, OA6872 +6873, OA6873 +6874, OA6874 +6875, OA6875 +6876, OA6876 +6877, OA6877 +6878, OA6878 +6879, OA6879 +6880, OA6880 +6881, OA6881 +6882, OA6882 +6883, OA6883 +6884, OA6884 +6885, OA6885 +6886, OA6886 +6887, OA6887 +6888, OA6888 +6889, OA6889 +6890, OA6890 +6891, OA6891 +6892, OA6892 +6893, OA6893 +6894, OA6894 +6895, OA6895 +6896, OA6896 +6897, OA6897 +6898, OA6898 +6899, OA6899 +6900, OA6900 +6901, OA6901 +6902, OA6902 +6903, OA6903 +6904, OA6904 +6905, OA6905 +6906, OA6906 +6907, OA6907 +6908, OA6908 +6909, OA6909 +6910, OA6910 +6911, OA6911 +6912, OA6912 +6913, OA6913 +6914, OA6914 +6915, OA6915 +6916, OA6916 +6917, OA6917 +6918, OA6918 +6919, OA6919 +6920, OA6920 +6921, OA6921 +6922, OA6922 +6923, OA6923 +6924, OA6924 +6925, OA6925 +6926, OA6926 +6927, OA6927 +6928, OA6928 +6929, OA6929 +6930, OA6930 +6931, OA6931 +6932, OA6932 +6933, OA6933 +6934, OA6934 +6935, OA6935 +6936, OA6936 +6937, OA6937 +6938, OA6938 +6939, OA6939 +6940, OA6940 +6941, OA6941 +6942, OA6942 +6943, OA6943 +6944, OA6944 +6945, OA6945 +6946, OA6946 +6947, OA6947 +6948, OA6948 +6949, OA6949 +6950, OA6950 +6951, OA6951 +6952, OA6952 +6953, OA6953 +6954, OA6954 +6955, OA6955 +6956, OA6956 +6957, OA6957 +6958, OA6958 +6959, OA6959 +6960, OA6960 +6961, OA6961 +6962, OA6962 +6963, OA6963 +6964, OA6964 +6965, OA6965 +6966, OA6966 +6967, OA6967 +6968, OA6968 +6969, OA6969 +6970, OA6970 +6971, OA6971 +6972, OA6972 +6973, OA6973 +6974, OA6974 +6975, OA6975 +6976, OA6976 +6977, OA6977 +6978, OA6978 +6979, OA6979 +6980, OA6980 +6981, OA6981 +6982, OA6982 +6983, OA6983 +6984, OA6984 +6985, OA6985 +6986, OA6986 +6987, OA6987 +6988, OA6988 +6989, OA6989 +6990, OA6990 +6991, OA6991 +6992, OA6992 +6993, OA6993 +6994, OA6994 +6995, OA6995 +6996, OA6996 +6997, OA6997 +6998, OA6998 +6999, OA6999 +7000, OA7000 +7001, OA7001 +7002, OA7002 +7003, OA7003 +7004, OA7004 +7005, OA7005 +7006, OA7006 +7007, OA7007 +7008, OA7008 +7009, OA7009 +7010, OA7010 +7011, OA7011 +7012, OA7012 +7013, OA7013 +7014, OA7014 +7015, OA7015 +7016, OA7016 +7017, OA7017 +7018, OA7018 +7019, OA7019 +7020, OA7020 +7021, OA7021 +7022, OA7022 +7023, OA7023 +7024, OA7024 +7025, OA7025 +7026, OA7026 +7027, OA7027 +7028, OA7028 +7029, OA7029 +7030, OA7030 +7031, OA7031 +7032, OA7032 +7033, OA7033 +7034, OA7034 +7035, OA7035 +7036, OA7036 +7037, OA7037 +7038, OA7038 +7039, OA7039 +7040, OA7040 +7041, OA7041 +7042, OA7042 +7043, OA7043 +7044, OA7044 +7045, OA7045 +7046, OA7046 +7047, OA7047 +7048, OA7048 +7049, OA7049 +7050, OA7050 +7051, OA7051 +7052, OA7052 +7053, OA7053 +7054, OA7054 +7055, OA7055 +7056, OA7056 +7057, OA7057 +7058, OA7058 +7059, OA7059 +7060, OA7060 +7061, OA7061 +7062, OA7062 +7063, OA7063 +7064, OA7064 +7065, OA7065 +7066, OA7066 +7067, OA7067 +7068, OA7068 +7069, OA7069 +7070, OA7070 +7071, OA7071 +7072, OA7072 +7073, OA7073 +7074, OA7074 +7075, OA7075 +7076, OA7076 +7077, OA7077 +7078, OA7078 +7079, OA7079 +7080, OA7080 +7081, OA7081 +7082, OA7082 +7083, OA7083 +7084, OA7084 +7085, OA7085 +7086, OA7086 +7087, OA7087 +7088, OA7088 +7089, OA7089 +7090, OA7090 +7091, OA7091 +7092, OA7092 +7093, OA7093 +7094, OA7094 +7095, OA7095 +7096, OA7096 +7097, OA7097 +7098, OA7098 +7099, OA7099 +7100, OA7100 +7101, OA7101 +7102, OA7102 +7103, OA7103 +7104, OA7104 +7105, OA7105 +7106, OA7106 +7107, OA7107 +7108, OA7108 +7109, OA7109 +7110, OA7110 +7111, OA7111 +7112, OA7112 +7113, OA7113 +7114, OA7114 +7115, OA7115 +7116, OA7116 +7117, OA7117 +7118, OA7118 +7119, OA7119 +7120, OA7120 +7121, OA7121 +7122, OA7122 +7123, OA7123 +7124, OA7124 +7125, OA7125 +7126, OA7126 +7127, OA7127 +7128, OA7128 +7129, OA7129 +7130, OA7130 +7131, OA7131 +7132, OA7132 +7133, OA7133 +7134, OA7134 +7135, OA7135 +7136, OA7136 +7137, OA7137 +7138, OA7138 +7139, OA7139 +7140, OA7140 +7141, OA7141 +7142, OA7142 +7143, OA7143 +7144, OA7144 +7145, OA7145 +7146, OA7146 +7147, OA7147 +7148, OA7148 +7149, OA7149 +7150, OA7150 +7151, OA7151 +7152, OA7152 +7153, OA7153 +7154, OA7154 +7155, OA7155 +7156, OA7156 +7157, OA7157 +7158, OA7158 +7159, OA7159 +7160, OA7160 +7161, OA7161 +7162, OA7162 +7163, OA7163 +7164, OA7164 +7165, OA7165 +7166, OA7166 +7167, OA7167 +7168, OA7168 +7169, OA7169 +7170, OA7170 +7171, OA7171 +7172, OA7172 +7173, OA7173 +7174, OA7174 +7175, OA7175 +7176, OA7176 +7177, OA7177 +7178, OA7178 +7179, OA7179 +7180, OA7180 +7181, OA7181 +7182, OA7182 +7183, OA7183 +7184, OA7184 +7185, OA7185 +7186, OA7186 +7187, OA7187 +7188, OA7188 +7189, OA7189 +7190, OA7190 +7191, OA7191 +7192, OA7192 +7193, OA7193 +7194, OA7194 +7195, OA7195 +7196, OA7196 +7197, OA7197 +7198, OA7198 +7199, OA7199 +7200, OA7200 +7201, OA7201 +7202, OA7202 +7203, OA7203 +7204, OA7204 +7205, OA7205 +7206, OA7206 +7207, OA7207 +7208, OA7208 +7209, OA7209 +7210, OA7210 +7211, OA7211 +7212, OA7212 +7213, OA7213 +7214, OA7214 +7215, OA7215 +7216, OA7216 +7217, OA7217 +7218, OA7218 +7219, OA7219 +7220, OA7220 +7221, OA7221 +7222, OA7222 +7223, OA7223 +7224, OA7224 +7225, OA7225 +7226, OA7226 +7227, OA7227 +7228, OA7228 +7229, OA7229 +7230, OA7230 +7231, OA7231 +7232, OA7232 +7233, OA7233 +7234, OA7234 +7235, OA7235 +7236, OA7236 +7237, OA7237 +7238, OA7238 +7239, OA7239 +7240, OA7240 +7241, OA7241 +7242, OA7242 +7243, OA7243 +7244, OA7244 +7245, OA7245 +7246, OA7246 +7247, OA7247 +7248, OA7248 +7249, OA7249 +7250, OA7250 +7251, OA7251 +7252, OA7252 +7253, OA7253 +7254, OA7254 +7255, OA7255 +7256, OA7256 +7257, OA7257 +7258, OA7258 +7259, OA7259 +7260, OA7260 +7261, OA7261 +7262, OA7262 +7263, OA7263 +7264, OA7264 +7265, OA7265 +7266, OA7266 +7267, OA7267 +7268, OA7268 +7269, OA7269 +7270, OA7270 +7271, OA7271 +7272, OA7272 +7273, OA7273 +7274, OA7274 +7275, OA7275 +7276, OA7276 +7277, OA7277 +7278, OA7278 +7279, OA7279 +7280, OA7280 +7281, OA7281 +7282, OA7282 +7283, OA7283 +7284, OA7284 +7285, OA7285 +7286, OA7286 +7287, OA7287 +7288, OA7288 +7289, OA7289 +7290, OA7290 +7291, OA7291 +7292, OA7292 +7293, OA7293 +7294, OA7294 +7295, OA7295 +7296, OA7296 +7297, OA7297 +7298, OA7298 +7299, OA7299 +7300, OA7300 +7301, OA7301 +7302, OA7302 +7303, OA7303 +7304, OA7304 +7305, OA7305 +7306, OA7306 +7307, OA7307 +7308, OA7308 +7309, OA7309 +7310, OA7310 +7311, OA7311 +7312, OA7312 +7313, OA7313 +7314, OA7314 +7315, OA7315 +7316, OA7316 +7317, OA7317 +7318, OA7318 +7319, OA7319 +7320, OA7320 +7321, OA7321 +7322, OA7322 +7323, OA7323 +7324, OA7324 +7325, OA7325 +7326, OA7326 +7327, OA7327 +7328, OA7328 +7329, OA7329 +7330, OA7330 +7331, OA7331 +7332, OA7332 +7333, OA7333 +7334, OA7334 +7335, OA7335 +7336, OA7336 +7337, OA7337 +7338, OA7338 +7339, OA7339 +7340, OA7340 +7341, OA7341 +7342, OA7342 +7343, OA7343 +7344, OA7344 +7345, OA7345 +7346, OA7346 +7347, OA7347 +7348, OA7348 +7349, OA7349 +7350, OA7350 +7351, OA7351 +7352, OA7352 +7353, OA7353 +7354, OA7354 +7355, OA7355 +7356, OA7356 +7357, OA7357 +7358, OA7358 +7359, OA7359 +7360, OA7360 +7361, OA7361 +7362, OA7362 +7363, OA7363 +7364, OA7364 +7365, OA7365 +7366, OA7366 +7367, OA7367 +7368, OA7368 +7369, OA7369 +7370, OA7370 +7371, OA7371 +7372, OA7372 +7373, OA7373 +7374, OA7374 +7375, OA7375 +7376, OA7376 +7377, OA7377 +7378, OA7378 +7379, OA7379 +7380, OA7380 +7381, OA7381 +7382, OA7382 +7383, OA7383 +7384, OA7384 +7385, OA7385 +7386, OA7386 +7387, OA7387 +7388, OA7388 +7389, OA7389 +7390, OA7390 +7391, OA7391 +7392, OA7392 +7393, OA7393 +7394, OA7394 +7395, OA7395 +7396, OA7396 +7397, OA7397 +7398, OA7398 +7399, OA7399 +7400, OA7400 +7401, OA7401 +7402, OA7402 +7403, OA7403 +7404, OA7404 +7405, OA7405 +7406, OA7406 +7407, OA7407 +7408, OA7408 +7409, OA7409 +7410, OA7410 +7411, OA7411 +7412, OA7412 +7413, OA7413 +7414, OA7414 +7415, OA7415 +7416, OA7416 +7417, OA7417 +7418, OA7418 +7419, OA7419 +7420, OA7420 +7421, OA7421 +7422, OA7422 +7423, OA7423 +7424, OA7424 +7425, OA7425 +7426, OA7426 +7427, OA7427 +7428, OA7428 +7429, OA7429 +7430, OA7430 +7431, OA7431 +7432, OA7432 +7433, OA7433 +7434, OA7434 +7435, OA7435 +7436, OA7436 +7437, OA7437 +7438, OA7438 +7439, OA7439 +7440, OA7440 +7441, OA7441 +7442, OA7442 +7443, OA7443 +7444, OA7444 +7445, OA7445 +7446, OA7446 +7447, OA7447 +7448, OA7448 +7449, OA7449 +7450, OA7450 +7451, OA7451 +7452, OA7452 +7453, OA7453 +7454, OA7454 +7455, OA7455 +7456, OA7456 +7457, OA7457 +7458, OA7458 +7459, OA7459 +7460, OA7460 +7461, OA7461 +7462, OA7462 +7463, OA7463 +7464, OA7464 +7465, OA7465 +7466, OA7466 +7467, OA7467 +7468, OA7468 +7469, OA7469 +7470, OA7470 +7471, OA7471 +7472, OA7472 +7473, OA7473 +7474, OA7474 +7475, OA7475 +7476, OA7476 +7477, OA7477 +7478, OA7478 +7479, OA7479 +7480, OA7480 +7481, OA7481 +7482, OA7482 +7483, OA7483 +7484, OA7484 +7485, OA7485 +7486, OA7486 +7487, OA7487 +7488, OA7488 +7489, OA7489 +7490, OA7490 +7491, OA7491 +7492, OA7492 +7493, OA7493 +7494, OA7494 +7495, OA7495 +7496, OA7496 +7497, OA7497 +7498, OA7498 +7499, OA7499 +7500, OA7500 +7501, OA7501 +7502, OA7502 +7503, OA7503 +7504, OA7504 +7505, OA7505 +7506, OA7506 +7507, OA7507 +7508, OA7508 +7509, OA7509 +7510, OA7510 +7511, OA7511 +7512, OA7512 +7513, OA7513 +7514, OA7514 +7515, OA7515 +7516, OA7516 +7517, OA7517 +7518, OA7518 +7519, OA7519 +7520, OA7520 +7521, OA7521 +7522, OA7522 +7523, OA7523 +7524, OA7524 +7525, OA7525 +7526, OA7526 +7527, OA7527 +7528, OA7528 +7529, OA7529 +7530, OA7530 +7531, OA7531 +7532, OA7532 +7533, OA7533 +7534, OA7534 +7535, OA7535 +7536, OA7536 +7537, OA7537 +7538, OA7538 +7539, OA7539 +7540, OA7540 +7541, OA7541 +7542, OA7542 +7543, OA7543 +7544, OA7544 +7545, OA7545 +7546, OA7546 +7547, OA7547 +7548, OA7548 +7549, OA7549 +7550, OA7550 +7551, OA7551 +7552, OA7552 +7553, OA7553 +7554, OA7554 +7555, OA7555 +7556, OA7556 +7557, OA7557 +7558, OA7558 +7559, OA7559 +7560, OA7560 +7561, OA7561 +7562, OA7562 +7563, OA7563 +7564, OA7564 +7565, OA7565 +7566, OA7566 +7567, OA7567 +7568, OA7568 +7569, OA7569 +7570, OA7570 +7571, OA7571 +7572, OA7572 +7573, OA7573 +7574, OA7574 +7575, OA7575 +7576, OA7576 +7577, OA7577 +7578, OA7578 +7579, OA7579 +7580, OA7580 +7581, OA7581 +7582, OA7582 +7583, OA7583 +7584, OA7584 +7585, OA7585 +7586, OA7586 +7587, OA7587 +7588, OA7588 +7589, OA7589 +7590, OA7590 +7591, OA7591 +7592, OA7592 +7593, OA7593 +7594, OA7594 +7595, OA7595 +7596, OA7596 +7597, OA7597 +7598, OA7598 +7599, OA7599 +7600, OA7600 +7601, OA7601 +7602, OA7602 +7603, OA7603 +7604, OA7604 +7605, OA7605 +7606, OA7606 +7607, OA7607 +7608, OA7608 +7609, OA7609 +7610, OA7610 +7611, OA7611 +7612, OA7612 +7613, OA7613 +7614, OA7614 +7615, OA7615 +7616, OA7616 +7617, OA7617 +7618, OA7618 +7619, OA7619 +7620, OA7620 +7621, OA7621 +7622, OA7622 +7623, OA7623 +7624, OA7624 +7625, OA7625 +7626, OA7626 +7627, OA7627 +7628, OA7628 +7629, OA7629 +7630, OA7630 +7631, OA7631 +7632, OA7632 +7633, OA7633 +7634, OA7634 +7635, OA7635 +7636, OA7636 +7637, OA7637 +7638, OA7638 +7639, OA7639 +7640, OA7640 +7641, OA7641 +7642, OA7642 +7643, OA7643 +7644, OA7644 +7645, OA7645 +7646, OA7646 +7647, OA7647 +7648, OA7648 +7649, OA7649 +7650, OA7650 +7651, OA7651 +7652, OA7652 +7653, OA7653 +7654, OA7654 +7655, OA7655 +7656, OA7656 +7657, OA7657 +7658, OA7658 +7659, OA7659 +7660, OA7660 +7661, OA7661 +7662, OA7662 +7663, OA7663 +7664, OA7664 +7665, OA7665 +7666, OA7666 +7667, OA7667 +7668, OA7668 +7669, OA7669 +7670, OA7670 +7671, OA7671 +7672, OA7672 +7673, OA7673 +7674, OA7674 +7675, OA7675 +7676, OA7676 +7677, OA7677 +7678, OA7678 +7679, OA7679 +7680, OA7680 +7681, OA7681 +7682, OA7682 +7683, OA7683 +7684, OA7684 +7685, OA7685 +7686, OA7686 +7687, OA7687 +7688, OA7688 +7689, OA7689 +7690, OA7690 +7691, OA7691 +7692, OA7692 +7693, OA7693 +7694, OA7694 +7695, OA7695 +7696, OA7696 +7697, OA7697 +7698, OA7698 +7699, OA7699 +7700, OA7700 +7701, OA7701 +7702, OA7702 +7703, OA7703 +7704, OA7704 +7705, OA7705 +7706, OA7706 +7707, OA7707 +7708, OA7708 +7709, OA7709 +7710, OA7710 +7711, OA7711 +7712, OA7712 +7713, OA7713 +7714, OA7714 +7715, OA7715 +7716, OA7716 +7717, OA7717 +7718, OA7718 +7719, OA7719 +7720, OA7720 +7721, OA7721 +7722, OA7722 +7723, OA7723 +7724, OA7724 +7725, OA7725 +7726, OA7726 +7727, OA7727 +7728, OA7728 +7729, OA7729 +7730, OA7730 +7731, OA7731 +7732, OA7732 +7733, OA7733 +7734, OA7734 +7735, OA7735 +7736, OA7736 +7737, OA7737 +7738, OA7738 +7739, OA7739 +7740, OA7740 +7741, OA7741 +7742, OA7742 +7743, OA7743 +7744, OA7744 +7745, OA7745 +7746, OA7746 +7747, OA7747 +7748, OA7748 +7749, OA7749 +7750, OA7750 +7751, OA7751 +7752, OA7752 +7753, OA7753 +7754, OA7754 +7755, OA7755 +7756, OA7756 +7757, OA7757 +7758, OA7758 +7759, OA7759 +7760, OA7760 +7761, OA7761 +7762, OA7762 +7763, OA7763 +7764, OA7764 +7765, OA7765 +7766, OA7766 +7767, OA7767 +7768, OA7768 +7769, OA7769 +7770, OA7770 +7771, OA7771 +7772, OA7772 +7773, OA7773 +7774, OA7774 +7775, OA7775 +7776, OA7776 +7777, OA7777 +7778, OA7778 +7779, OA7779 +7780, OA7780 +7781, OA7781 +7782, OA7782 +7783, OA7783 +7784, OA7784 +7785, OA7785 +7786, OA7786 +7787, OA7787 +7788, OA7788 +7789, OA7789 +7790, OA7790 +7791, OA7791 +7792, OA7792 +7793, OA7793 +7794, OA7794 +7795, OA7795 +7796, OA7796 +7797, OA7797 +7798, OA7798 +7799, OA7799 +7800, OA7800 +7801, OA7801 +7802, OA7802 +7803, OA7803 +7804, OA7804 +7805, OA7805 +7806, OA7806 +7807, OA7807 +7808, OA7808 +7809, OA7809 +7810, OA7810 +7811, OA7811 +7812, OA7812 +7813, OA7813 +7814, OA7814 +7815, OA7815 +7816, OA7816 +7817, OA7817 +7818, OA7818 +7819, OA7819 +7820, OA7820 +7821, OA7821 +7822, OA7822 +7823, OA7823 +7824, OA7824 +7825, OA7825 +7826, OA7826 +7827, OA7827 +7828, OA7828 +7829, OA7829 +7830, OA7830 +7831, OA7831 +7832, OA7832 +7833, OA7833 +7834, OA7834 +7835, OA7835 +7836, OA7836 +7837, OA7837 +7838, OA7838 +7839, OA7839 +7840, OA7840 +7841, OA7841 +7842, OA7842 +7843, OA7843 +7844, OA7844 +7845, OA7845 +7846, OA7846 +7847, OA7847 +7848, OA7848 +7849, OA7849 +7850, OA7850 +7851, OA7851 +7852, OA7852 +7853, OA7853 +7854, OA7854 +7855, OA7855 +7856, OA7856 +7857, OA7857 +7858, OA7858 +7859, OA7859 +7860, OA7860 +7861, OA7861 +7862, OA7862 +7863, OA7863 +7864, OA7864 +7865, OA7865 +7866, OA7866 +7867, OA7867 +7868, OA7868 +7869, OA7869 +7870, OA7870 +7871, OA7871 +7872, OA7872 +7873, OA7873 +7874, OA7874 +7875, OA7875 +7876, OA7876 +7877, OA7877 +7878, OA7878 +7879, OA7879 +7880, OA7880 +7881, OA7881 +7882, OA7882 +7883, OA7883 +7884, OA7884 +7885, OA7885 +7886, OA7886 +7887, OA7887 +7888, OA7888 +7889, OA7889 +7890, OA7890 +7891, OA7891 +7892, OA7892 +7893, OA7893 +7894, OA7894 +7895, OA7895 +7896, OA7896 +7897, OA7897 +7898, OA7898 +7899, OA7899 +7900, OA7900 +7901, OA7901 +7902, OA7902 +7903, OA7903 +7904, OA7904 +7905, OA7905 +7906, OA7906 +7907, OA7907 +7908, OA7908 +7909, OA7909 +7910, OA7910 +7911, OA7911 +7912, OA7912 +7913, OA7913 +7914, OA7914 +7915, OA7915 +7916, OA7916 +7917, OA7917 +7918, OA7918 +7919, OA7919 +7920, OA7920 +7921, OA7921 +7922, OA7922 +7923, OA7923 +7924, OA7924 +7925, OA7925 +7926, OA7926 +7927, OA7927 +7928, OA7928 +7929, OA7929 +7930, OA7930 +7931, OA7931 +7932, OA7932 +7933, OA7933 +7934, OA7934 +7935, OA7935 +7936, OA7936 +7937, OA7937 +7938, OA7938 +7939, OA7939 +7940, OA7940 +7941, OA7941 +7942, OA7942 +7943, OA7943 +7944, OA7944 +7945, OA7945 +7946, OA7946 +7947, OA7947 +7948, OA7948 +7949, OA7949 +7950, OA7950 +7951, OA7951 +7952, OA7952 +7953, OA7953 +7954, OA7954 +7955, OA7955 +7956, OA7956 +7957, OA7957 +7958, OA7958 +7959, OA7959 +7960, OA7960 +7961, OA7961 +7962, OA7962 +7963, OA7963 +7964, OA7964 +7965, OA7965 +7966, OA7966 +7967, OA7967 +7968, OA7968 +7969, OA7969 +7970, OA7970 +7971, OA7971 +7972, OA7972 +7973, OA7973 +7974, OA7974 +7975, OA7975 +7976, OA7976 +7977, OA7977 +7978, OA7978 +7979, OA7979 +7980, OA7980 +7981, OA7981 +7982, OA7982 +7983, OA7983 +7984, OA7984 +7985, OA7985 +7986, OA7986 +7987, OA7987 +7988, OA7988 +7989, OA7989 +7990, OA7990 +7991, OA7991 +7992, OA7992 +7993, OA7993 +7994, OA7994 +7995, OA7995 +7996, OA7996 +7997, OA7997 +7998, OA7998 +7999, OA7999 +8000, OA8000 +8001, OA8001 +8002, OA8002 +8003, OA8003 +8004, OA8004 +8005, OA8005 +8006, OA8006 +8007, OA8007 +8008, OA8008 +8009, OA8009 +8010, OA8010 +8011, OA8011 +8012, OA8012 +8013, OA8013 +8014, OA8014 +8015, OA8015 +8016, OA8016 +8017, OA8017 +8018, OA8018 +8019, OA8019 +8020, OA8020 +8021, OA8021 +8022, OA8022 +8023, OA8023 +8024, OA8024 +8025, OA8025 +8026, OA8026 +8027, OA8027 +8028, OA8028 +8029, OA8029 +8030, OA8030 +8031, OA8031 +8032, OA8032 +8033, OA8033 +8034, OA8034 +8035, OA8035 +8036, OA8036 +8037, OA8037 +8038, OA8038 +8039, OA8039 +8040, OA8040 +8041, OA8041 +8042, OA8042 +8043, OA8043 +8044, OA8044 +8045, OA8045 +8046, OA8046 +8047, OA8047 +8048, OA8048 +8049, OA8049 +8050, OA8050 +8051, OA8051 +8052, OA8052 +8053, OA8053 +8054, OA8054 +8055, OA8055 +8056, OA8056 +8057, OA8057 +8058, OA8058 +8059, OA8059 +8060, OA8060 +8061, OA8061 +8062, OA8062 +8063, OA8063 +8064, OA8064 +8065, OA8065 +8066, OA8066 +8067, OA8067 +8068, OA8068 +8069, OA8069 +8070, OA8070 +8071, OA8071 +8072, OA8072 +8073, OA8073 +8074, OA8074 +8075, OA8075 +8076, OA8076 +8077, OA8077 +8078, OA8078 +8079, OA8079 +8080, OA8080 +8081, OA8081 +8082, OA8082 +8083, OA8083 +8084, OA8084 +8085, OA8085 +8086, OA8086 +8087, OA8087 +8088, OA8088 +8089, OA8089 +8090, OA8090 +8091, OA8091 +8092, OA8092 +8093, OA8093 +8094, OA8094 +8095, OA8095 +8096, OA8096 +8097, OA8097 +8098, OA8098 +8099, OA8099 +8100, OA8100 +8101, OA8101 +8102, OA8102 +8103, OA8103 +8104, OA8104 +8105, OA8105 +8106, OA8106 +8107, OA8107 +8108, OA8108 +8109, OA8109 +8110, OA8110 +8111, OA8111 +8112, OA8112 +8113, OA8113 +8114, OA8114 +8115, OA8115 +8116, OA8116 +8117, OA8117 +8118, OA8118 +8119, OA8119 +8120, OA8120 +8121, OA8121 +8122, OA8122 +8123, OA8123 +8124, OA8124 +8125, OA8125 +8126, OA8126 +8127, OA8127 +8128, OA8128 +8129, OA8129 +8130, OA8130 +8131, OA8131 +8132, OA8132 +8133, OA8133 +8134, OA8134 +8135, OA8135 +8136, OA8136 +8137, OA8137 +8138, OA8138 +8139, OA8139 +8140, OA8140 +8141, OA8141 +8142, OA8142 +8143, OA8143 +8144, OA8144 +8145, OA8145 +8146, OA8146 +8147, OA8147 +8148, OA8148 +8149, OA8149 +8150, OA8150 +8151, OA8151 +8152, OA8152 +8153, OA8153 +8154, OA8154 +8155, OA8155 +8156, OA8156 +8157, OA8157 +8158, OA8158 +8159, OA8159 +8160, OA8160 +8161, OA8161 +8162, OA8162 +8163, OA8163 +8164, OA8164 +8165, OA8165 +8166, OA8166 +8167, OA8167 +8168, OA8168 +8169, OA8169 +8170, OA8170 +8171, OA8171 +8172, OA8172 +8173, OA8173 +8174, OA8174 +8175, OA8175 +8176, OA8176 +8177, OA8177 +8178, OA8178 +8179, OA8179 +8180, OA8180 +8181, OA8181 +8182, OA8182 +8183, OA8183 +8184, OA8184 +8185, OA8185 +8186, OA8186 +8187, OA8187 +8188, OA8188 +8189, OA8189 +8190, OA8190 +8191, OA8191 +8192, OA8192 +8193, OA8193 +8194, OA8194 +8195, OA8195 +8196, OA8196 +8197, OA8197 +8198, OA8198 +8199, OA8199 +8200, OA8200 +8201, OA8201 +8202, OA8202 +8203, OA8203 +8204, OA8204 +8205, OA8205 +8206, OA8206 +8207, OA8207 +8208, OA8208 +8209, OA8209 +8210, OA8210 +8211, OA8211 +8212, OA8212 +8213, OA8213 +8214, OA8214 +8215, OA8215 +8216, OA8216 +8217, OA8217 +8218, OA8218 +8219, OA8219 +8220, OA8220 +8221, OA8221 +8222, OA8222 +8223, OA8223 +8224, OA8224 +8225, OA8225 +8226, OA8226 +8227, OA8227 +8228, OA8228 +8229, OA8229 +8230, OA8230 +8231, OA8231 +8232, OA8232 +8233, OA8233 +8234, OA8234 +8235, OA8235 +8236, OA8236 +8237, OA8237 +8238, OA8238 +8239, OA8239 +8240, OA8240 +8241, OA8241 +8242, OA8242 +8243, OA8243 +8244, OA8244 +8245, OA8245 +8246, OA8246 +8247, OA8247 +8248, OA8248 +8249, OA8249 +8250, OA8250 +8251, OA8251 +8252, OA8252 +8253, OA8253 +8254, OA8254 +8255, OA8255 +8256, OA8256 +8257, OA8257 +8258, OA8258 +8259, OA8259 +8260, OA8260 +8261, OA8261 +8262, OA8262 +8263, OA8263 +8264, OA8264 +8265, OA8265 +8266, OA8266 +8267, OA8267 +8268, OA8268 +8269, OA8269 +8270, OA8270 +8271, OA8271 +8272, OA8272 +8273, OA8273 +8274, OA8274 +8275, OA8275 +8276, OA8276 +8277, OA8277 +8278, OA8278 +8279, OA8279 +8280, OA8280 +8281, OA8281 +8282, OA8282 +8283, OA8283 +8284, OA8284 +8285, OA8285 +8286, OA8286 +8287, OA8287 +8288, OA8288 +8289, OA8289 +8290, OA8290 +8291, OA8291 +8292, OA8292 +8293, OA8293 +8294, OA8294 +8295, OA8295 +8296, OA8296 +8297, OA8297 +8298, OA8298 +8299, OA8299 +8300, OA8300 +8301, OA8301 +8302, OA8302 +8303, OA8303 +8304, OA8304 +8305, OA8305 +8306, OA8306 +8307, OA8307 +8308, OA8308 +8309, OA8309 +8310, OA8310 +8311, OA8311 +8312, OA8312 +8313, OA8313 +8314, OA8314 +8315, OA8315 +8316, OA8316 +8317, OA8317 +8318, OA8318 +8319, OA8319 +8320, OA8320 +8321, OA8321 +8322, OA8322 +8323, OA8323 +8324, OA8324 +8325, OA8325 +8326, OA8326 +8327, OA8327 +8328, OA8328 +8329, OA8329 +8330, OA8330 +8331, OA8331 +8332, OA8332 +8333, OA8333 +8334, OA8334 +8335, OA8335 +8336, OA8336 +8337, OA8337 +8338, OA8338 +8339, OA8339 +8340, OA8340 +8341, OA8341 +8342, OA8342 +8343, OA8343 +8344, OA8344 +8345, OA8345 +8346, OA8346 +8347, OA8347 +8348, OA8348 +8349, OA8349 +8350, OA8350 +8351, OA8351 +8352, OA8352 +8353, OA8353 +8354, OA8354 +8355, OA8355 +8356, OA8356 +8357, OA8357 +8358, OA8358 +8359, OA8359 +8360, OA8360 +8361, OA8361 +8362, OA8362 +8363, OA8363 +8364, OA8364 +8365, OA8365 +8366, OA8366 +8367, OA8367 +8368, OA8368 +8369, OA8369 +8370, OA8370 +8371, OA8371 +8372, OA8372 +8373, OA8373 +8374, OA8374 +8375, OA8375 +8376, OA8376 +8377, OA8377 +8378, OA8378 +8379, OA8379 +8380, OA8380 +8381, OA8381 +8382, OA8382 +8383, OA8383 +8384, OA8384 +8385, OA8385 +8386, OA8386 +8387, OA8387 +8388, OA8388 +8389, OA8389 +8390, OA8390 +8391, OA8391 +8392, OA8392 +8393, OA8393 +8394, OA8394 +8395, OA8395 +8396, OA8396 +8397, OA8397 +8398, OA8398 +8399, OA8399 +8400, OA8400 +8401, OA8401 +8402, OA8402 +8403, OA8403 +8404, OA8404 +8405, OA8405 +8406, OA8406 +8407, OA8407 +8408, OA8408 +8409, OA8409 +8410, OA8410 +8411, OA8411 +8412, OA8412 +8413, OA8413 +8414, OA8414 +8415, OA8415 +8416, OA8416 +8417, OA8417 +8418, OA8418 +8419, OA8419 +8420, OA8420 +8421, OA8421 +8422, OA8422 +8423, OA8423 +8424, OA8424 +8425, OA8425 +8426, OA8426 +8427, OA8427 +8428, OA8428 +8429, OA8429 +8430, OA8430 +8431, OA8431 +8432, OA8432 +8433, OA8433 +8434, OA8434 +8435, OA8435 +8436, OA8436 +8437, OA8437 +8438, OA8438 +8439, OA8439 +8440, OA8440 +8441, OA8441 +8442, OA8442 +8443, OA8443 +8444, OA8444 +8445, OA8445 +8446, OA8446 +8447, OA8447 +8448, OA8448 +8449, OA8449 +8450, OA8450 +8451, OA8451 +8452, OA8452 +8453, OA8453 +8454, OA8454 +8455, OA8455 +8456, OA8456 +8457, OA8457 +8458, OA8458 +8459, OA8459 +8460, OA8460 +8461, OA8461 +8462, OA8462 +8463, OA8463 +8464, OA8464 +8465, OA8465 +8466, OA8466 +8467, OA8467 +8468, OA8468 +8469, OA8469 +8470, OA8470 +8471, OA8471 +8472, OA8472 +8473, OA8473 +8474, OA8474 +8475, OA8475 +8476, OA8476 +8477, OA8477 +8478, OA8478 +8479, OA8479 +8480, OA8480 +8481, OA8481 +8482, OA8482 +8483, OA8483 +8484, OA8484 +8485, OA8485 +8486, OA8486 +8487, OA8487 +8488, OA8488 +8489, OA8489 +8490, OA8490 +8491, OA8491 +8492, OA8492 +8493, OA8493 +8494, OA8494 +8495, OA8495 +8496, OA8496 +8497, OA8497 +8498, OA8498 +8499, OA8499 +8500, OA8500 +8501, OA8501 +8502, OA8502 +8503, OA8503 +8504, OA8504 +8505, OA8505 +8506, OA8506 +8507, OA8507 +8508, OA8508 +8509, OA8509 +8510, OA8510 +8511, OA8511 +8512, OA8512 +8513, OA8513 +8514, OA8514 +8515, OA8515 +8516, OA8516 +8517, OA8517 +8518, OA8518 +8519, OA8519 +8520, OA8520 +8521, OA8521 +8522, OA8522 +8523, OA8523 +8524, OA8524 +8525, OA8525 +8526, OA8526 +8527, OA8527 +8528, OA8528 +8529, OA8529 +8530, OA8530 +8531, OA8531 +8532, OA8532 +8533, OA8533 +8534, OA8534 +8535, OA8535 +8536, OA8536 +8537, OA8537 +8538, OA8538 +8539, OA8539 +8540, OA8540 +8541, OA8541 +8542, OA8542 +8543, OA8543 +8544, OA8544 +8545, OA8545 +8546, OA8546 +8547, OA8547 +8548, OA8548 +8549, OA8549 +8550, OA8550 +8551, OA8551 +8552, OA8552 +8553, OA8553 +8554, OA8554 +8555, OA8555 +8556, OA8556 +8557, OA8557 +8558, OA8558 +8559, OA8559 +8560, OA8560 +8561, OA8561 +8562, OA8562 +8563, OA8563 +8564, OA8564 +8565, OA8565 +8566, OA8566 +8567, OA8567 +8568, OA8568 +8569, OA8569 +8570, OA8570 +8571, OA8571 +8572, OA8572 +8573, OA8573 +8574, OA8574 +8575, OA8575 +8576, OA8576 +8577, OA8577 +8578, OA8578 +8579, OA8579 +8580, OA8580 +8581, OA8581 +8582, OA8582 +8583, OA8583 +8584, OA8584 +8585, OA8585 +8586, OA8586 +8587, OA8587 +8588, OA8588 +8589, OA8589 +8590, OA8590 +8591, OA8591 +8592, OA8592 +8593, OA8593 +8594, OA8594 +8595, OA8595 +8596, OA8596 +8597, OA8597 +8598, OA8598 +8599, OA8599 +8600, OA8600 +8601, OA8601 +8602, OA8602 +8603, OA8603 +8604, OA8604 +8605, OA8605 +8606, OA8606 +8607, OA8607 +8608, OA8608 +8609, OA8609 +8610, OA8610 +8611, OA8611 +8612, OA8612 +8613, OA8613 +8614, OA8614 +8615, OA8615 +8616, OA8616 +8617, OA8617 +8618, OA8618 +8619, OA8619 +8620, OA8620 +8621, OA8621 +8622, OA8622 +8623, OA8623 +8624, OA8624 +8625, OA8625 +8626, OA8626 +8627, OA8627 +8628, OA8628 +8629, OA8629 +8630, OA8630 +8631, OA8631 +8632, OA8632 +8633, OA8633 +8634, OA8634 +8635, OA8635 +8636, OA8636 +8637, OA8637 +8638, OA8638 +8639, OA8639 +8640, OA8640 +8641, OA8641 +8642, OA8642 +8643, OA8643 +8644, OA8644 +8645, OA8645 +8646, OA8646 +8647, OA8647 +8648, OA8648 +8649, OA8649 +8650, OA8650 +8651, OA8651 +8652, OA8652 +8653, OA8653 +8654, OA8654 +8655, OA8655 +8656, OA8656 +8657, OA8657 +8658, OA8658 +8659, OA8659 +8660, OA8660 +8661, OA8661 +8662, OA8662 +8663, OA8663 +8664, OA8664 +8665, OA8665 +8666, OA8666 +8667, OA8667 +8668, OA8668 +8669, OA8669 +8670, OA8670 +8671, OA8671 +8672, OA8672 +8673, OA8673 +8674, OA8674 +8675, OA8675 +8676, OA8676 +8677, OA8677 +8678, OA8678 +8679, OA8679 +8680, OA8680 +8681, OA8681 +8682, OA8682 +8683, OA8683 +8684, OA8684 +8685, OA8685 +8686, OA8686 +8687, OA8687 +8688, OA8688 +8689, OA8689 +8690, OA8690 +8691, OA8691 +8692, OA8692 +8693, OA8693 +8694, OA8694 +8695, OA8695 +8696, OA8696 +8697, OA8697 +8698, OA8698 +8699, OA8699 +8700, OA8700 +8701, OA8701 +8702, OA8702 +8703, OA8703 +8704, OA8704 +8705, OA8705 +8706, OA8706 +8707, OA8707 +8708, OA8708 +8709, OA8709 +8710, OA8710 +8711, OA8711 +8712, OA8712 +8713, OA8713 +8714, OA8714 +8715, OA8715 +8716, OA8716 +8717, OA8717 +8718, OA8718 +8719, OA8719 +8720, OA8720 +8721, OA8721 +8722, OA8722 +8723, OA8723 +8724, OA8724 +8725, OA8725 +8726, OA8726 +8727, OA8727 +8728, OA8728 +8729, OA8729 +8730, OA8730 +8731, OA8731 +8732, OA8732 +8733, OA8733 +8734, OA8734 +8735, OA8735 +8736, OA8736 +8737, OA8737 +8738, OA8738 +8739, OA8739 +8740, OA8740 +8741, OA8741 +8742, OA8742 +8743, OA8743 +8744, OA8744 +8745, OA8745 +8746, OA8746 +8747, OA8747 +8748, OA8748 +8749, OA8749 +8750, OA8750 +8751, OA8751 +8752, OA8752 +8753, OA8753 +8754, OA8754 +8755, OA8755 +8756, OA8756 +8757, OA8757 +8758, OA8758 +8759, OA8759 +8760, OA8760 +8761, OA8761 +8762, OA8762 +8763, OA8763 +8764, OA8764 +8765, OA8765 +8766, OA8766 +8767, OA8767 +8768, OA8768 +8769, OA8769 +8770, OA8770 +8771, OA8771 +8772, OA8772 +8773, OA8773 +8774, OA8774 +8775, OA8775 +8776, OA8776 +8777, OA8777 +8778, OA8778 +8779, OA8779 +8780, OA8780 +8781, OA8781 +8782, OA8782 +8783, OA8783 +8784, OA8784 +8785, OA8785 +8786, OA8786 +8787, OA8787 +8788, OA8788 +8789, OA8789 +8790, OA8790 +8791, OA8791 +8792, OA8792 +8793, OA8793 +8794, OA8794 +8795, OA8795 +8796, OA8796 +8797, OA8797 +8798, OA8798 +8799, OA8799 +8800, OA8800 +8801, OA8801 +8802, OA8802 +8803, OA8803 +8804, OA8804 +8805, OA8805 +8806, OA8806 +8807, OA8807 +8808, OA8808 +8809, OA8809 +8810, OA8810 +8811, OA8811 +8812, OA8812 +8813, OA8813 +8814, OA8814 +8815, OA8815 +8816, OA8816 +8817, OA8817 +8818, OA8818 +8819, OA8819 +8820, OA8820 +8821, OA8821 +8822, OA8822 +8823, OA8823 +8824, OA8824 +8825, OA8825 +8826, OA8826 +8827, OA8827 +8828, OA8828 +8829, OA8829 +8830, OA8830 +8831, OA8831 +8832, OA8832 +8833, OA8833 +8834, OA8834 +8835, OA8835 +8836, OA8836 +8837, OA8837 +8838, OA8838 +8839, OA8839 +8840, OA8840 +8841, OA8841 +8842, OA8842 +8843, OA8843 +8844, OA8844 +8845, OA8845 +8846, OA8846 +8847, OA8847 +8848, OA8848 +8849, OA8849 +8850, OA8850 +8851, OA8851 +8852, OA8852 +8853, OA8853 +8854, OA8854 +8855, OA8855 +8856, OA8856 +8857, OA8857 +8858, OA8858 +8859, OA8859 +8860, OA8860 +8861, OA8861 +8862, OA8862 +8863, OA8863 +8864, OA8864 +8865, OA8865 +8866, OA8866 +8867, OA8867 +8868, OA8868 +8869, OA8869 +8870, OA8870 +8871, OA8871 +8872, OA8872 +8873, OA8873 +8874, OA8874 +8875, OA8875 +8876, OA8876 +8877, OA8877 +8878, OA8878 +8879, OA8879 +8880, OA8880 +8881, OA8881 +8882, OA8882 +8883, OA8883 +8884, OA8884 +8885, OA8885 +8886, OA8886 +8887, OA8887 +8888, OA8888 +8889, OA8889 +8890, OA8890 +8891, OA8891 +8892, OA8892 +8893, OA8893 +8894, OA8894 +8895, OA8895 +8896, OA8896 +8897, OA8897 +8898, OA8898 +8899, OA8899 +8900, OA8900 +8901, OA8901 +8902, OA8902 +8903, OA8903 +8904, OA8904 +8905, OA8905 +8906, OA8906 +8907, OA8907 +8908, OA8908 +8909, OA8909 +8910, OA8910 +8911, OA8911 +8912, OA8912 +8913, OA8913 +8914, OA8914 +8915, OA8915 +8916, OA8916 +8917, OA8917 +8918, OA8918 +8919, OA8919 +8920, OA8920 +8921, OA8921 +8922, OA8922 +8923, OA8923 +8924, OA8924 +8925, OA8925 +8926, OA8926 +8927, OA8927 +8928, OA8928 +8929, OA8929 +8930, OA8930 +8931, OA8931 +8932, OA8932 +8933, OA8933 +8934, OA8934 +8935, OA8935 +8936, OA8936 +8937, OA8937 +8938, OA8938 +8939, OA8939 +8940, OA8940 +8941, OA8941 +8942, OA8942 +8943, OA8943 +8944, OA8944 +8945, OA8945 +8946, OA8946 +8947, OA8947 +8948, OA8948 +8949, OA8949 +8950, OA8950 +8951, OA8951 +8952, OA8952 +8953, OA8953 +8954, OA8954 +8955, OA8955 +8956, OA8956 +8957, OA8957 +8958, OA8958 +8959, OA8959 +8960, OA8960 +8961, OA8961 +8962, OA8962 +8963, OA8963 +8964, OA8964 +8965, OA8965 +8966, OA8966 +8967, OA8967 +8968, OA8968 +8969, OA8969 +8970, OA8970 +8971, OA8971 +8972, OA8972 +8973, OA8973 +8974, OA8974 +8975, OA8975 +8976, OA8976 +8977, OA8977 +8978, OA8978 +8979, OA8979 +8980, OA8980 +8981, OA8981 +8982, OA8982 +8983, OA8983 +8984, OA8984 +8985, OA8985 +8986, OA8986 +8987, OA8987 +8988, OA8988 +8989, OA8989 +8990, OA8990 +8991, OA8991 +8992, OA8992 +8993, OA8993 +8994, OA8994 +8995, OA8995 +8996, OA8996 +8997, OA8997 +8998, OA8998 +8999, OA8999 +9000, OA9000 +9001, OA9001 +9002, OA9002 +9003, OA9003 +9004, OA9004 +9005, OA9005 +9006, OA9006 +9007, OA9007 +9008, OA9008 +9009, OA9009 +9010, OA9010 +9011, OA9011 +9012, OA9012 +9013, OA9013 +9014, OA9014 +9015, OA9015 +9016, OA9016 +9017, OA9017 +9018, OA9018 +9019, OA9019 +9020, OA9020 +9021, OA9021 +9022, OA9022 +9023, OA9023 +9024, OA9024 +9025, OA9025 +9026, OA9026 +9027, OA9027 +9028, OA9028 +9029, OA9029 +9030, OA9030 +9031, OA9031 +9032, OA9032 +9033, OA9033 +9034, OA9034 +9035, OA9035 +9036, OA9036 +9037, OA9037 +9038, OA9038 +9039, OA9039 +9040, OA9040 +9041, OA9041 +9042, OA9042 +9043, OA9043 +9044, OA9044 +9045, OA9045 +9046, OA9046 +9047, OA9047 +9048, OA9048 +9049, OA9049 +9050, OA9050 +9051, OA9051 +9052, OA9052 +9053, OA9053 +9054, OA9054 +9055, OA9055 +9056, OA9056 +9057, OA9057 +9058, OA9058 +9059, OA9059 +9060, OA9060 +9061, OA9061 +9062, OA9062 +9063, OA9063 +9064, OA9064 +9065, OA9065 +9066, OA9066 +9067, OA9067 +9068, OA9068 +9069, OA9069 +9070, OA9070 +9071, OA9071 +9072, OA9072 +9073, OA9073 +9074, OA9074 +9075, OA9075 +9076, OA9076 +9077, OA9077 +9078, OA9078 +9079, OA9079 +9080, OA9080 +9081, OA9081 +9082, OA9082 +9083, OA9083 +9084, OA9084 +9085, OA9085 +9086, OA9086 +9087, OA9087 +9088, OA9088 +9089, OA9089 +9090, OA9090 +9091, OA9091 +9092, OA9092 +9093, OA9093 +9094, OA9094 +9095, OA9095 +9096, OA9096 +9097, OA9097 +9098, OA9098 +9099, OA9099 +9100, OA9100 +9101, OA9101 +9102, OA9102 +9103, OA9103 +9104, OA9104 +9105, OA9105 +9106, OA9106 +9107, OA9107 +9108, OA9108 +9109, OA9109 +9110, OA9110 +9111, OA9111 +9112, OA9112 +9113, OA9113 +9114, OA9114 +9115, OA9115 +9116, OA9116 +9117, OA9117 +9118, OA9118 +9119, OA9119 +9120, OA9120 +9121, OA9121 +9122, OA9122 +9123, OA9123 +9124, OA9124 +9125, OA9125 +9126, OA9126 +9127, OA9127 +9128, OA9128 +9129, OA9129 +9130, OA9130 +9131, OA9131 +9132, OA9132 +9133, OA9133 +9134, OA9134 +9135, OA9135 +9136, OA9136 +9137, OA9137 +9138, OA9138 +9139, OA9139 +9140, OA9140 +9141, OA9141 +9142, OA9142 +9143, OA9143 +9144, OA9144 +9145, OA9145 +9146, OA9146 +9147, OA9147 +9148, OA9148 +9149, OA9149 +9150, OA9150 +9151, OA9151 +9152, OA9152 +9153, OA9153 +9154, OA9154 +9155, OA9155 +9156, OA9156 +9157, OA9157 +9158, OA9158 +9159, OA9159 +9160, OA9160 +9161, OA9161 +9162, OA9162 +9163, OA9163 +9164, OA9164 +9165, OA9165 +9166, OA9166 +9167, OA9167 +9168, OA9168 +9169, OA9169 +9170, OA9170 +9171, OA9171 +9172, OA9172 +9173, OA9173 +9174, OA9174 +9175, OA9175 +9176, OA9176 +9177, OA9177 +9178, OA9178 +9179, OA9179 +9180, OA9180 +9181, OA9181 +9182, OA9182 +9183, OA9183 +9184, OA9184 +9185, OA9185 +9186, OA9186 +9187, OA9187 +9188, OA9188 +9189, OA9189 +9190, OA9190 +9191, OA9191 +9192, OA9192 +9193, OA9193 +9194, OA9194 +9195, OA9195 +9196, OA9196 +9197, OA9197 +9198, OA9198 +9199, OA9199 +9200, OA9200 +9201, OA9201 +9202, OA9202 +9203, OA9203 +9204, OA9204 +9205, OA9205 +9206, OA9206 +9207, OA9207 +9208, OA9208 +9209, OA9209 +9210, OA9210 +9211, OA9211 +9212, OA9212 +9213, OA9213 +9214, OA9214 +9215, OA9215 +9216, OA9216 +9217, OA9217 +9218, OA9218 +9219, OA9219 +9220, OA9220 +9221, OA9221 +9222, OA9222 +9223, OA9223 +9224, OA9224 +9225, OA9225 +9226, OA9226 +9227, OA9227 +9228, OA9228 +9229, OA9229 +9230, OA9230 +9231, OA9231 +9232, OA9232 +9233, OA9233 +9234, OA9234 +9235, OA9235 +9236, OA9236 +9237, OA9237 +9238, OA9238 +9239, OA9239 +9240, OA9240 +9241, OA9241 +9242, OA9242 +9243, OA9243 +9244, OA9244 +9245, OA9245 +9246, OA9246 +9247, OA9247 +9248, OA9248 +9249, OA9249 +9250, OA9250 +9251, OA9251 +9252, OA9252 +9253, OA9253 +9254, OA9254 +9255, OA9255 +9256, OA9256 +9257, OA9257 +9258, OA9258 +9259, OA9259 +9260, OA9260 +9261, OA9261 +9262, OA9262 +9263, OA9263 +9264, OA9264 +9265, OA9265 +9266, OA9266 +9267, OA9267 +9268, OA9268 +9269, OA9269 +9270, OA9270 +9271, OA9271 +9272, OA9272 +9273, OA9273 +9274, OA9274 +9275, OA9275 +9276, OA9276 +9277, OA9277 +9278, OA9278 +9279, OA9279 +9280, OA9280 +9281, OA9281 +9282, OA9282 +9283, OA9283 +9284, OA9284 +9285, OA9285 +9286, OA9286 +9287, OA9287 +9288, OA9288 +9289, OA9289 +9290, OA9290 +9291, OA9291 +9292, OA9292 +9293, OA9293 +9294, OA9294 +9295, OA9295 +9296, OA9296 +9297, OA9297 +9298, OA9298 +9299, OA9299 +9300, OA9300 +9301, OA9301 +9302, OA9302 +9303, OA9303 +9304, OA9304 +9305, OA9305 +9306, OA9306 +9307, OA9307 +9308, OA9308 +9309, OA9309 +9310, OA9310 +9311, OA9311 +9312, OA9312 +9313, OA9313 +9314, OA9314 +9315, OA9315 +9316, OA9316 +9317, OA9317 +9318, OA9318 +9319, OA9319 +9320, OA9320 +9321, OA9321 +9322, OA9322 +9323, OA9323 +9324, OA9324 +9325, OA9325 +9326, OA9326 +9327, OA9327 +9328, OA9328 +9329, OA9329 +9330, OA9330 +9331, OA9331 +9332, OA9332 +9333, OA9333 +9334, OA9334 +9335, OA9335 +9336, OA9336 +9337, OA9337 +9338, OA9338 +9339, OA9339 +9340, OA9340 +9341, OA9341 +9342, OA9342 +9343, OA9343 +9344, OA9344 +9345, OA9345 +9346, OA9346 +9347, OA9347 +9348, OA9348 +9349, OA9349 +9350, OA9350 +9351, OA9351 +9352, OA9352 +9353, OA9353 +9354, OA9354 +9355, OA9355 +9356, OA9356 +9357, OA9357 +9358, OA9358 +9359, OA9359 +9360, OA9360 +9361, OA9361 +9362, OA9362 +9363, OA9363 +9364, OA9364 +9365, OA9365 +9366, OA9366 +9367, OA9367 +9368, OA9368 +9369, OA9369 +9370, OA9370 +9371, OA9371 +9372, OA9372 +9373, OA9373 +9374, OA9374 +9375, OA9375 +9376, OA9376 +9377, OA9377 +9378, OA9378 +9379, OA9379 +9380, OA9380 +9381, OA9381 +9382, OA9382 +9383, OA9383 +9384, OA9384 +9385, OA9385 +9386, OA9386 +9387, OA9387 +9388, OA9388 +9389, OA9389 +9390, OA9390 +9391, OA9391 +9392, OA9392 +9393, OA9393 +9394, OA9394 +9395, OA9395 +9396, OA9396 +9397, OA9397 +9398, OA9398 +9399, OA9399 +9400, OA9400 +9401, OA9401 +9402, OA9402 +9403, OA9403 +9404, OA9404 +9405, OA9405 +9406, OA9406 +9407, OA9407 +9408, OA9408 +9409, OA9409 +9410, OA9410 +9411, OA9411 +9412, OA9412 +9413, OA9413 +9414, OA9414 +9415, OA9415 +9416, OA9416 +9417, OA9417 +9418, OA9418 +9419, OA9419 +9420, OA9420 +9421, OA9421 +9422, OA9422 +9423, OA9423 +9424, OA9424 +9425, OA9425 +9426, OA9426 +9427, OA9427 +9428, OA9428 +9429, OA9429 +9430, OA9430 +9431, OA9431 +9432, OA9432 +9433, OA9433 +9434, OA9434 +9435, OA9435 +9436, OA9436 +9437, OA9437 +9438, OA9438 +9439, OA9439 +9440, OA9440 +9441, OA9441 +9442, OA9442 +9443, OA9443 +9444, OA9444 +9445, OA9445 +9446, OA9446 +9447, OA9447 +9448, OA9448 +9449, OA9449 +9450, OA9450 +9451, OA9451 +9452, OA9452 +9453, OA9453 +9454, OA9454 +9455, OA9455 +9456, OA9456 +9457, OA9457 +9458, OA9458 +9459, OA9459 +9460, OA9460 +9461, OA9461 +9462, OA9462 +9463, OA9463 +9464, OA9464 +9465, OA9465 +9466, OA9466 +9467, OA9467 +9468, OA9468 +9469, OA9469 +9470, OA9470 +9471, OA9471 +9472, OA9472 +9473, OA9473 +9474, OA9474 +9475, OA9475 +9476, OA9476 +9477, OA9477 +9478, OA9478 +9479, OA9479 +9480, OA9480 +9481, OA9481 +9482, OA9482 +9483, OA9483 +9484, OA9484 +9485, OA9485 +9486, OA9486 +9487, OA9487 +9488, OA9488 +9489, OA9489 +9490, OA9490 +9491, OA9491 +9492, OA9492 +9493, OA9493 +9494, OA9494 +9495, OA9495 +9496, OA9496 +9497, OA9497 +9498, OA9498 +9499, OA9499 +9500, OA9500 +9501, OA9501 +9502, OA9502 +9503, OA9503 +9504, OA9504 +9505, OA9505 +9506, OA9506 +9507, OA9507 +9508, OA9508 +9509, OA9509 +9510, OA9510 +9511, OA9511 +9512, OA9512 +9513, OA9513 +9514, OA9514 +9515, OA9515 +9516, OA9516 +9517, OA9517 +9518, OA9518 +9519, OA9519 +9520, OA9520 +9521, OA9521 +9522, OA9522 +9523, OA9523 +9524, OA9524 +9525, OA9525 +9526, OA9526 +9527, OA9527 +9528, OA9528 +9529, OA9529 +9530, OA9530 +9531, OA9531 +9532, OA9532 +9533, OA9533 +9534, OA9534 +9535, OA9535 +9536, OA9536 +9537, OA9537 +9538, OA9538 +9539, OA9539 +9540, OA9540 +9541, OA9541 +9542, OA9542 +9543, OA9543 +9544, OA9544 +9545, OA9545 +9546, OA9546 +9547, OA9547 +9548, OA9548 +9549, OA9549 +9550, OA9550 +9551, OA9551 +9552, OA9552 +9553, OA9553 +9554, OA9554 +9555, OA9555 +9556, OA9556 +9557, OA9557 +9558, OA9558 +9559, OA9559 +9560, OA9560 +9561, OA9561 +9562, OA9562 +9563, OA9563 +9564, OA9564 +9565, OA9565 +9566, OA9566 +9567, OA9567 +9568, OA9568 +9569, OA9569 +9570, OA9570 +9571, OA9571 +9572, OA9572 +9573, OA9573 +9574, OA9574 +9575, OA9575 +9576, OA9576 +9577, OA9577 +9578, OA9578 +9579, OA9579 +9580, OA9580 +9581, OA9581 +9582, OA9582 +9583, OA9583 +9584, OA9584 +9585, OA9585 +9586, OA9586 +9587, OA9587 +9588, OA9588 +9589, OA9589 +9590, OA9590 +9591, OA9591 +9592, OA9592 +9593, OA9593 +9594, OA9594 +9595, OA9595 +9596, OA9596 +9597, OA9597 +9598, OA9598 +9599, OA9599 +9600, OA9600 +9601, OA9601 +9602, OA9602 +9603, OA9603 +9604, OA9604 +9605, OA9605 +9606, OA9606 +9607, OA9607 +9608, OA9608 +9609, OA9609 +9610, OA9610 +9611, OA9611 +9612, OA9612 +9613, OA9613 +9614, OA9614 +9615, OA9615 +9616, OA9616 +9617, OA9617 +9618, OA9618 +9619, OA9619 +9620, OA9620 +9621, OA9621 +9622, OA9622 +9623, OA9623 +9624, OA9624 +9625, OA9625 +9626, OA9626 +9627, OA9627 +9628, OA9628 +9629, OA9629 +9630, OA9630 +9631, OA9631 +9632, OA9632 +9633, OA9633 +9634, OA9634 +9635, OA9635 +9636, OA9636 +9637, OA9637 +9638, OA9638 +9639, OA9639 +9640, OA9640 +9641, OA9641 +9642, OA9642 +9643, OA9643 +9644, OA9644 +9645, OA9645 +9646, OA9646 +9647, OA9647 +9648, OA9648 +9649, OA9649 +9650, OA9650 +9651, OA9651 +9652, OA9652 +9653, OA9653 +9654, OA9654 +9655, OA9655 +9656, OA9656 +9657, OA9657 +9658, OA9658 +9659, OA9659 +9660, OA9660 +9661, OA9661 +9662, OA9662 +9663, OA9663 +9664, OA9664 +9665, OA9665 +9666, OA9666 +9667, OA9667 +9668, OA9668 +9669, OA9669 +9670, OA9670 +9671, OA9671 +9672, OA9672 +9673, OA9673 +9674, OA9674 +9675, OA9675 +9676, OA9676 +9677, OA9677 +9678, OA9678 +9679, OA9679 +9680, OA9680 +9681, OA9681 +9682, OA9682 +9683, OA9683 +9684, OA9684 +9685, OA9685 +9686, OA9686 +9687, OA9687 +9688, OA9688 +9689, OA9689 +9690, OA9690 +9691, OA9691 +9692, OA9692 +9693, OA9693 +9694, OA9694 +9695, OA9695 +9696, OA9696 +9697, OA9697 +9698, OA9698 +9699, OA9699 +9700, OA9700 +9701, OA9701 +9702, OA9702 +9703, OA9703 +9704, OA9704 +9705, OA9705 +9706, OA9706 +9707, OA9707 +9708, OA9708 +9709, OA9709 +9710, OA9710 +9711, OA9711 +9712, OA9712 +9713, OA9713 +9714, OA9714 +9715, OA9715 +9716, OA9716 +9717, OA9717 +9718, OA9718 +9719, OA9719 +9720, OA9720 +9721, OA9721 +9722, OA9722 +9723, OA9723 +9724, OA9724 +9725, OA9725 +9726, OA9726 +9727, OA9727 +9728, OA9728 +9729, OA9729 +9730, OA9730 +9731, OA9731 +9732, OA9732 +9733, OA9733 +9734, OA9734 +9735, OA9735 +9736, OA9736 +9737, OA9737 +9738, OA9738 +9739, OA9739 +9740, OA9740 +9741, OA9741 +9742, OA9742 +9743, OA9743 +9744, OA9744 +9745, OA9745 +9746, OA9746 +9747, OA9747 +9748, OA9748 +9749, OA9749 +9750, OA9750 +9751, OA9751 +9752, OA9752 +9753, OA9753 +9754, OA9754 +9755, OA9755 +9756, OA9756 +9757, OA9757 +9758, OA9758 +9759, OA9759 +9760, OA9760 +9761, OA9761 +9762, OA9762 +9763, OA9763 +9764, OA9764 +9765, OA9765 +9766, OA9766 +9767, OA9767 +9768, OA9768 +9769, OA9769 +9770, OA9770 +9771, OA9771 +9772, OA9772 +9773, OA9773 +9774, OA9774 +9775, OA9775 +9776, OA9776 +9777, OA9777 +9778, OA9778 +9779, OA9779 +9780, OA9780 +9781, OA9781 +9782, OA9782 +9783, OA9783 +9784, OA9784 +9785, OA9785 +9786, OA9786 +9787, OA9787 +9788, OA9788 +9789, OA9789 +9790, OA9790 +9791, OA9791 +9792, OA9792 +9793, OA9793 +9794, OA9794 +9795, OA9795 +9796, OA9796 +9797, OA9797 +9798, OA9798 +9799, OA9799 +9800, OA9800 +9801, OA9801 +9802, OA9802 +9803, OA9803 +9804, OA9804 +9805, OA9805 +9806, OA9806 +9807, OA9807 +9808, OA9808 +9809, OA9809 +9810, OA9810 +9811, OA9811 +9812, OA9812 +9813, OA9813 +9814, OA9814 +9815, OA9815 +9816, OA9816 +9817, OA9817 +9818, OA9818 +9819, OA9819 +9820, OA9820 +9821, OA9821 +9822, OA9822 +9823, OA9823 +9824, OA9824 +9825, OA9825 +9826, OA9826 +9827, OA9827 +9828, OA9828 +9829, OA9829 +9830, OA9830 +9831, OA9831 +9832, OA9832 +9833, OA9833 +9834, OA9834 +9835, OA9835 +9836, OA9836 +9837, OA9837 +9838, OA9838 +9839, OA9839 +9840, OA9840 +9841, OA9841 +9842, OA9842 +9843, OA9843 +9844, OA9844 +9845, OA9845 +9846, OA9846 +9847, OA9847 +9848, OA9848 +9849, OA9849 +9850, OA9850 +9851, OA9851 +9852, OA9852 +9853, OA9853 +9854, OA9854 +9855, OA9855 +9856, OA9856 +9857, OA9857 +9858, OA9858 +9859, OA9859 +9860, OA9860 +9861, OA9861 +9862, OA9862 +9863, OA9863 +9864, OA9864 +9865, OA9865 +9866, OA9866 +9867, OA9867 +9868, OA9868 +9869, OA9869 +9870, OA9870 +9871, OA9871 +9872, OA9872 +9873, OA9873 +9874, OA9874 +9875, OA9875 +9876, OA9876 +9877, OA9877 +9878, OA9878 +9879, OA9879 +9880, OA9880 +9881, OA9881 +9882, OA9882 +9883, OA9883 +9884, OA9884 +9885, OA9885 +9886, OA9886 +9887, OA9887 +9888, OA9888 +9889, OA9889 +9890, OA9890 +9891, OA9891 +9892, OA9892 +9893, OA9893 +9894, OA9894 +9895, OA9895 +9896, OA9896 +9897, OA9897 +9898, OA9898 +9899, OA9899 +9900, OA9900 +9901, OA9901 +9902, OA9902 +9903, OA9903 +9904, OA9904 +9905, OA9905 +9906, OA9906 +9907, OA9907 +9908, OA9908 +9909, OA9909 +9910, OA9910 +9911, OA9911 +9912, OA9912 +9913, OA9913 +9914, OA9914 +9915, OA9915 +9916, OA9916 +9917, OA9917 +9918, OA9918 +9919, OA9919 +9920, OA9920 +9921, OA9921 +9922, OA9922 +9923, OA9923 +9924, OA9924 +9925, OA9925 +9926, OA9926 +9927, OA9927 +9928, OA9928 +9929, OA9929 +9930, OA9930 +9931, OA9931 +9932, OA9932 +9933, OA9933 +9934, OA9934 +9935, OA9935 +9936, OA9936 +9937, OA9937 +9938, OA9938 +9939, OA9939 +9940, OA9940 +9941, OA9941 +9942, OA9942 +9943, OA9943 +9944, OA9944 +9945, OA9945 +9946, OA9946 +9947, OA9947 +9948, OA9948 +9949, OA9949 +9950, OA9950 +9951, OA9951 +9952, OA9952 +9953, OA9953 +9954, OA9954 +9955, OA9955 +9956, OA9956 +9957, OA9957 +9958, OA9958 +9959, OA9959 +9960, OA9960 +9961, OA9961 +9962, OA9962 +9963, OA9963 +9964, OA9964 +9965, OA9965 +9966, OA9966 +9967, OA9967 +9968, OA9968 +9969, OA9969 +9970, OA9970 +9971, OA9971 +9972, OA9972 +9973, OA9973 +9974, OA9974 +9975, OA9975 +9976, OA9976 +9977, OA9977 +9978, OA9978 +9979, OA9979 +9980, OA9980 +9981, OA9981 +9982, OA9982 +9983, OA9983 +9984, OA9984 +9985, OA9985 +9986, OA9986 +9987, OA9987 +9988, OA9988 +9989, OA9989 +9990, OA9990 +9991, OA9991 +9992, OA9992 +9993, OA9993 +9994, OA9994 +9995, OA9995 +9996, OA9996 +9997, OA9997 +9998, OA9998 +9999, OA9999 +10000, OA10000 +10001, OA10001 +10002, OA10002 +10003, OA10003 +10004, OA10004 +10005, OA10005 +10006, OA10006 +10007, OA10007 +10008, OA10008 +10009, OA10009 +10010, OA10010 +10011, OA10011 +10012, OA10012 +10013, OA10013 +10014, OA10014 +10015, OA10015 +10016, OA10016 +10017, OA10017 +10018, OA10018 +10019, OA10019 +10020, OA10020 +10021, OA10021 +10022, OA10022 +10023, OA10023 +10024, OA10024 +10025, OA10025 +10026, OA10026 +10027, OA10027 +10028, OA10028 +10029, OA10029 +10030, OA10030 +10031, OA10031 +10032, OA10032 +10033, OA10033 +10034, OA10034 +10035, OA10035 +10036, OA10036 +10037, OA10037 +10038, OA10038 +10039, OA10039 +10040, OA10040 +10041, OA10041 +10042, OA10042 +10043, OA10043 +10044, OA10044 +10045, OA10045 +10046, OA10046 +10047, OA10047 +10048, OA10048 +10049, OA10049 +10050, OA10050 +10051, OA10051 +10052, OA10052 +10053, OA10053 +10054, OA10054 +10055, OA10055 +10056, OA10056 +10057, OA10057 +10058, OA10058 +10059, OA10059 +10060, OA10060 +10061, OA10061 +10062, OA10062 +10063, OA10063 +10064, OA10064 +10065, OA10065 +10066, OA10066 +10067, OA10067 +10068, OA10068 +10069, OA10069 +10070, OA10070 +10071, OA10071 +10072, OA10072 +10073, OA10073 +10074, OA10074 +10075, OA10075 +10076, OA10076 +10077, OA10077 +10078, OA10078 +10079, OA10079 +10080, OA10080 +10081, OA10081 +10082, OA10082 +10083, OA10083 +10084, OA10084 +10085, OA10085 +10086, OA10086 +10087, OA10087 +10088, OA10088 +10089, OA10089 +10090, OA10090 +10091, OA10091 +10092, OA10092 +10093, OA10093 +10094, OA10094 +10095, OA10095 +10096, OA10096 +10097, OA10097 +10098, OA10098 +10099, OA10099 +10100, OA10100 +10101, OA10101 +10102, OA10102 +10103, OA10103 +10104, OA10104 +10105, OA10105 +10106, OA10106 +10107, OA10107 +10108, OA10108 +10109, OA10109 +10110, OA10110 +10111, OA10111 +10112, OA10112 +10113, OA10113 +10114, OA10114 +10115, OA10115 +10116, OA10116 +10117, OA10117 +10118, OA10118 +10119, OA10119 +10120, OA10120 +10121, OA10121 +10122, OA10122 +10123, OA10123 +10124, OA10124 +10125, OA10125 +10126, OA10126 +10127, OA10127 +10128, OA10128 +10129, OA10129 +10130, OA10130 +10131, OA10131 +10132, OA10132 +10133, OA10133 +10134, OA10134 +10135, OA10135 +10136, OA10136 +10137, OA10137 +10138, OA10138 +10139, OA10139 +10140, OA10140 +10141, OA10141 +10142, OA10142 +10143, OA10143 +10144, OA10144 +10145, OA10145 +10146, OA10146 +10147, OA10147 +10148, OA10148 +10149, OA10149 +10150, OA10150 +10151, OA10151 +10152, OA10152 +10153, OA10153 +10154, OA10154 +10155, OA10155 +10156, OA10156 +10157, OA10157 +10158, OA10158 +10159, OA10159 +10160, OA10160 +10161, OA10161 +10162, OA10162 +10163, OA10163 +10164, OA10164 +10165, OA10165 +10166, OA10166 +10167, OA10167 +10168, OA10168 +10169, OA10169 +10170, OA10170 +10171, OA10171 +10172, OA10172 +10173, OA10173 +10174, OA10174 +10175, OA10175 +10176, OA10176 +10177, OA10177 +10178, OA10178 +10179, OA10179 +10180, OA10180 +10181, OA10181 +10182, OA10182 +10183, OA10183 +10184, OA10184 +10185, OA10185 +10186, OA10186 +10187, OA10187 +10188, OA10188 +10189, OA10189 +10190, OA10190 +10191, OA10191 +10192, OA10192 +10193, OA10193 +10194, OA10194 +10195, OA10195 +10196, OA10196 +10197, OA10197 +10198, OA10198 +10199, OA10199 +10200, OA10200 +10201, OA10201 +10202, OA10202 +10203, OA10203 +10204, OA10204 +10205, OA10205 +10206, OA10206 +10207, OA10207 +10208, OA10208 +10209, OA10209 +10210, OA10210 +10211, OA10211 +10212, OA10212 +10213, OA10213 +10214, OA10214 +10215, OA10215 +10216, OA10216 +10217, OA10217 +10218, OA10218 +10219, OA10219 +10220, OA10220 +10221, OA10221 +10222, OA10222 +10223, OA10223 +10224, OA10224 +10225, OA10225 +10226, OA10226 +10227, OA10227 +10228, OA10228 +10229, OA10229 +10230, OA10230 +10231, OA10231 +10232, OA10232 +10233, OA10233 +10234, OA10234 +10235, OA10235 +10236, OA10236 +10237, OA10237 +10238, OA10238 +10239, OA10239 +10240, OA10240 +10241, OA10241 +10242, OA10242 +10243, OA10243 +10244, OA10244 +10245, OA10245 +10246, OA10246 +10247, OA10247 +10248, OA10248 +10249, OA10249 +10250, OA10250 +10251, OA10251 +10252, OA10252 +10253, OA10253 +10254, OA10254 +10255, OA10255 +10256, OA10256 +10257, OA10257 +10258, OA10258 +10259, OA10259 +10260, OA10260 +10261, OA10261 +10262, OA10262 +10263, OA10263 +10264, OA10264 +10265, OA10265 +10266, OA10266 +10267, OA10267 +10268, OA10268 +10269, OA10269 +10270, OA10270 +10271, OA10271 +10272, OA10272 +10273, OA10273 +10274, OA10274 +10275, OA10275 +10276, OA10276 +10277, OA10277 +10278, OA10278 +10279, OA10279 +10280, OA10280 +10281, OA10281 +10282, OA10282 +10283, OA10283 +10284, OA10284 +10285, OA10285 +10286, OA10286 +10287, OA10287 +10288, OA10288 +10289, OA10289 +10290, OA10290 +10291, OA10291 +10292, OA10292 +10293, OA10293 +10294, OA10294 +10295, OA10295 +10296, OA10296 +10297, OA10297 +10298, OA10298 +10299, OA10299 +10300, OA10300 +10301, OA10301 +10302, OA10302 +10303, OA10303 +10304, OA10304 +10305, OA10305 +10306, OA10306 +10307, OA10307 +10308, OA10308 +10309, OA10309 +10310, OA10310 +10311, OA10311 +10312, OA10312 +10313, OA10313 +10314, OA10314 +10315, OA10315 +10316, OA10316 +10317, OA10317 +10318, OA10318 +10319, OA10319 +10320, OA10320 +10321, OA10321 +10322, OA10322 +10323, OA10323 +10324, OA10324 +10325, OA10325 +10326, OA10326 +10327, OA10327 +10328, OA10328 +10329, OA10329 +10330, OA10330 +10331, OA10331 +10332, OA10332 +10333, OA10333 +10334, OA10334 +10335, OA10335 +10336, OA10336 +10337, OA10337 +10338, OA10338 +10339, OA10339 +10340, OA10340 +10341, OA10341 +10342, OA10342 +10343, OA10343 +10344, OA10344 +10345, OA10345 +10346, OA10346 +10347, OA10347 +10348, OA10348 +10349, OA10349 +10350, OA10350 +10351, OA10351 +10352, OA10352 +10353, OA10353 +10354, OA10354 +10355, OA10355 +10356, OA10356 +10357, OA10357 +10358, OA10358 +10359, OA10359 +10360, OA10360 +10361, OA10361 +10362, OA10362 +10363, OA10363 +10364, OA10364 +10365, OA10365 +10366, OA10366 +10367, OA10367 +10368, OA10368 +10369, OA10369 +10370, OA10370 +10371, OA10371 +10372, OA10372 +10373, OA10373 +10374, OA10374 +10375, OA10375 +10376, OA10376 +10377, OA10377 +10378, OA10378 +10379, OA10379 +10380, OA10380 +10381, OA10381 +10382, OA10382 +10383, OA10383 +10384, OA10384 +10385, OA10385 +10386, OA10386 +10387, OA10387 +10388, OA10388 +10389, OA10389 +10390, OA10390 +10391, OA10391 +10392, OA10392 +10393, OA10393 +10394, OA10394 +10395, OA10395 +10396, OA10396 +10397, OA10397 +10398, OA10398 +10399, OA10399 +10400, OA10400 +10401, OA10401 +10402, OA10402 +10403, OA10403 +10404, OA10404 +10405, OA10405 +10406, OA10406 +10407, OA10407 +10408, OA10408 +10409, OA10409 +10410, OA10410 +10411, OA10411 +10412, OA10412 +10413, OA10413 +10414, OA10414 +10415, OA10415 +10416, OA10416 +10417, OA10417 +10418, OA10418 +10419, OA10419 +10420, OA10420 +10421, OA10421 +10422, OA10422 +10423, OA10423 +10424, OA10424 +10425, OA10425 +10426, OA10426 +10427, OA10427 +10428, OA10428 +10429, OA10429 +10430, OA10430 +10431, OA10431 +10432, OA10432 +10433, OA10433 +10434, OA10434 +10435, OA10435 +10436, OA10436 +10437, OA10437 +10438, OA10438 +10439, OA10439 +10440, OA10440 +10441, OA10441 +10442, OA10442 +10443, OA10443 +10444, OA10444 +10445, OA10445 +10446, OA10446 +10447, OA10447 +10448, OA10448 +10449, OA10449 +10450, OA10450 +10451, OA10451 +10452, OA10452 +10453, OA10453 +10454, OA10454 +10455, OA10455 +10456, OA10456 +10457, OA10457 +10458, OA10458 +10459, OA10459 +10460, OA10460 +10461, OA10461 +10462, OA10462 +10463, OA10463 +10464, OA10464 +10465, OA10465 +10466, OA10466 +10467, OA10467 +10468, OA10468 +10469, OA10469 +10470, OA10470 +10471, OA10471 +10472, OA10472 +10473, OA10473 +10474, OA10474 +10475, OA10475 +10476, OA10476 +10477, OA10477 +10478, OA10478 +10479, OA10479 +10480, OA10480 +10481, OA10481 +10482, OA10482 +10483, OA10483 +10484, OA10484 +10485, OA10485 +10486, OA10486 +10487, OA10487 +10488, OA10488 +10489, OA10489 +10490, OA10490 +10491, OA10491 +10492, OA10492 +10493, OA10493 +10494, OA10494 +10495, OA10495 +10496, OA10496 +10497, OA10497 +10498, OA10498 +10499, OA10499 +10500, OA10500 +10501, OA10501 +10502, OA10502 +10503, OA10503 +10504, OA10504 +10505, OA10505 +10506, OA10506 +10507, OA10507 +10508, OA10508 +10509, OA10509 +10510, OA10510 +10511, OA10511 +10512, OA10512 +10513, OA10513 +10514, OA10514 +10515, OA10515 +10516, OA10516 +10517, OA10517 +10518, OA10518 +10519, OA10519 +10520, OA10520 +10521, OA10521 +10522, OA10522 +10523, OA10523 +10524, OA10524 +10525, OA10525 +10526, OA10526 +10527, OA10527 +10528, OA10528 +10529, OA10529 +10530, OA10530 +10531, OA10531 +10532, OA10532 +10533, OA10533 +10534, OA10534 +10535, OA10535 +10536, OA10536 +10537, OA10537 +10538, OA10538 +10539, OA10539 +10540, OA10540 +10541, OA10541 +10542, OA10542 +10543, OA10543 +10544, OA10544 +10545, OA10545 +10546, OA10546 +10547, OA10547 +10548, OA10548 +10549, OA10549 +10550, OA10550 +10551, OA10551 +10552, OA10552 +10553, OA10553 +10554, OA10554 +10555, OA10555 +10556, OA10556 +10557, OA10557 +10558, OA10558 +10559, OA10559 +10560, OA10560 +10561, OA10561 +10562, OA10562 +10563, OA10563 +10564, OA10564 +10565, OA10565 +10566, OA10566 +10567, OA10567 +10568, OA10568 +10569, OA10569 +10570, OA10570 +10571, OA10571 +10572, OA10572 +10573, OA10573 +10574, OA10574 +10575, OA10575 +10576, OA10576 +10577, OA10577 +10578, OA10578 +10579, OA10579 +10580, OA10580 +10581, OA10581 +10582, OA10582 +10583, OA10583 +10584, OA10584 +10585, OA10585 +10586, OA10586 +10587, OA10587 +10588, OA10588 +10589, OA10589 +10590, OA10590 +10591, OA10591 +10592, OA10592 +10593, OA10593 +10594, OA10594 +10595, OA10595 +10596, OA10596 +10597, OA10597 +10598, OA10598 +10599, OA10599 +10600, OA10600 +10601, OA10601 +10602, OA10602 +10603, OA10603 +10604, OA10604 +10605, OA10605 +10606, OA10606 +10607, OA10607 +10608, OA10608 +10609, OA10609 +10610, OA10610 +10611, OA10611 +10612, OA10612 +10613, OA10613 +10614, OA10614 +10615, OA10615 +10616, OA10616 +10617, OA10617 +10618, OA10618 +10619, OA10619 +10620, OA10620 +10621, OA10621 +10622, OA10622 +10623, OA10623 +10624, OA10624 +10625, OA10625 +10626, OA10626 +10627, OA10627 +10628, OA10628 +10629, OA10629 +10630, OA10630 +10631, OA10631 +10632, OA10632 +10633, OA10633 +10634, OA10634 +10635, OA10635 +10636, OA10636 +10637, OA10637 +10638, OA10638 +10639, OA10639 +10640, OA10640 +10641, OA10641 +10642, OA10642 +10643, OA10643 +10644, OA10644 +10645, OA10645 +10646, OA10646 +10647, OA10647 +10648, OA10648 +10649, OA10649 +10650, OA10650 +10651, OA10651 +10652, OA10652 +10653, OA10653 +10654, OA10654 +10655, OA10655 +10656, OA10656 +10657, OA10657 +10658, OA10658 +10659, OA10659 +10660, OA10660 +10661, OA10661 +10662, OA10662 +10663, OA10663 +10664, OA10664 +10665, OA10665 +10666, OA10666 +10667, OA10667 +10668, OA10668 +10669, OA10669 +10670, OA10670 +10671, OA10671 +10672, OA10672 +10673, OA10673 +10674, OA10674 +10675, OA10675 +10676, OA10676 +10677, OA10677 +10678, OA10678 +10679, OA10679 +10680, OA10680 +10681, OA10681 +10682, OA10682 +10683, OA10683 +10684, OA10684 +10685, OA10685 +10686, OA10686 +10687, OA10687 +10688, OA10688 +10689, OA10689 +10690, OA10690 +10691, OA10691 +10692, OA10692 +10693, OA10693 +10694, OA10694 +10695, OA10695 +10696, OA10696 +10697, OA10697 +10698, OA10698 +10699, OA10699 +10700, OA10700 +10701, OA10701 +10702, OA10702 +10703, OA10703 +10704, OA10704 +10705, OA10705 +10706, OA10706 +10707, OA10707 +10708, OA10708 +10709, OA10709 +10710, OA10710 +10711, OA10711 +10712, OA10712 +10713, OA10713 +10714, OA10714 +10715, OA10715 +10716, OA10716 +10717, OA10717 +10718, OA10718 +10719, OA10719 +10720, OA10720 +10721, OA10721 +10722, OA10722 +10723, OA10723 +10724, OA10724 +10725, OA10725 +10726, OA10726 +10727, OA10727 +10728, OA10728 +10729, OA10729 +10730, OA10730 +10731, OA10731 +10732, OA10732 +10733, OA10733 +10734, OA10734 +10735, OA10735 +10736, OA10736 +10737, OA10737 +10738, OA10738 +10739, OA10739 +10740, OA10740 +10741, OA10741 +10742, OA10742 +10743, OA10743 +10744, OA10744 +10745, OA10745 +10746, OA10746 +10747, OA10747 +10748, OA10748 +10749, OA10749 +10750, OA10750 +10751, OA10751 +10752, OA10752 +10753, OA10753 +10754, OA10754 +10755, OA10755 +10756, OA10756 +10757, OA10757 +10758, OA10758 +10759, OA10759 +10760, OA10760 +10761, OA10761 +10762, OA10762 +10763, OA10763 +10764, OA10764 +10765, OA10765 +10766, OA10766 +10767, OA10767 +10768, OA10768 +10769, OA10769 +10770, OA10770 +10771, OA10771 +10772, OA10772 +10773, OA10773 +10774, OA10774 +10775, OA10775 +10776, OA10776 +10777, OA10777 +10778, OA10778 +10779, OA10779 +10780, OA10780 +10781, OA10781 +10782, OA10782 +10783, OA10783 +10784, OA10784 +10785, OA10785 +10786, OA10786 +10787, OA10787 +10788, OA10788 +10789, OA10789 +10790, OA10790 +10791, OA10791 +10792, OA10792 +10793, OA10793 +10794, OA10794 +10795, OA10795 +10796, OA10796 +10797, OA10797 +10798, OA10798 +10799, OA10799 +10800, OA10800 +10801, OA10801 +10802, OA10802 +10803, OA10803 +10804, OA10804 +10805, OA10805 +10806, OA10806 +10807, OA10807 +10808, OA10808 +10809, OA10809 +10810, OA10810 +10811, OA10811 +10812, OA10812 +10813, OA10813 +10814, OA10814 +10815, OA10815 +10816, OA10816 +10817, OA10817 +10818, OA10818 +10819, OA10819 +10820, OA10820 +10821, OA10821 +10822, OA10822 +10823, OA10823 +10824, OA10824 +10825, OA10825 +10826, OA10826 +10827, OA10827 +10828, OA10828 +10829, OA10829 +10830, OA10830 +10831, OA10831 +10832, OA10832 +10833, OA10833 +10834, OA10834 +10835, OA10835 +10836, OA10836 +10837, OA10837 +10838, OA10838 +10839, OA10839 +10840, OA10840 +10841, OA10841 +10842, OA10842 +10843, OA10843 +10844, OA10844 +10845, OA10845 +10846, OA10846 +10847, OA10847 +10848, OA10848 +10849, OA10849 +10850, OA10850 +10851, OA10851 +10852, OA10852 +10853, OA10853 +10854, OA10854 +10855, OA10855 +10856, OA10856 +10857, OA10857 +10858, OA10858 +10859, OA10859 +10860, OA10860 +10861, OA10861 +10862, OA10862 +10863, OA10863 +10864, OA10864 +10865, OA10865 +10866, OA10866 +10867, OA10867 +10868, OA10868 +10869, OA10869 +10870, OA10870 +10871, OA10871 +10872, OA10872 +10873, OA10873 +10874, OA10874 +10875, OA10875 +10876, OA10876 +10877, OA10877 +10878, OA10878 +10879, OA10879 +10880, OA10880 +10881, OA10881 +10882, OA10882 +10883, OA10883 +10884, OA10884 +10885, OA10885 +10886, OA10886 +10887, OA10887 +10888, OA10888 +10889, OA10889 +10890, OA10890 +10891, OA10891 +10892, OA10892 +10893, OA10893 +10894, OA10894 +10895, OA10895 +10896, OA10896 +10897, OA10897 +10898, OA10898 +10899, OA10899 +10900, OA10900 +10901, OA10901 +10902, OA10902 +10903, OA10903 +10904, OA10904 +10905, OA10905 +10906, OA10906 +10907, OA10907 +10908, OA10908 +10909, OA10909 +10910, OA10910 +10911, OA10911 +10912, OA10912 +10913, OA10913 +10914, OA10914 +10915, OA10915 +10916, OA10916 +10917, OA10917 +10918, OA10918 +10919, OA10919 +10920, OA10920 +10921, OA10921 +10922, OA10922 +10923, OA10923 +10924, OA10924 +10925, OA10925 +10926, OA10926 +10927, OA10927 +10928, OA10928 +10929, OA10929 +10930, OA10930 +10931, OA10931 +10932, OA10932 +10933, OA10933 +10934, OA10934 +10935, OA10935 +10936, OA10936 +10937, OA10937 +10938, OA10938 +10939, OA10939 +10940, OA10940 +10941, OA10941 +10942, OA10942 +10943, OA10943 +10944, OA10944 +10945, OA10945 +10946, OA10946 +10947, OA10947 +10948, OA10948 +10949, OA10949 +10950, OA10950 +10951, OA10951 +10952, OA10952 +10953, OA10953 +10954, OA10954 +10955, OA10955 +10956, OA10956 +10957, OA10957 +10958, OA10958 +10959, OA10959 +10960, OA10960 +10961, OA10961 +10962, OA10962 +10963, OA10963 +10964, OA10964 +10965, OA10965 +10966, OA10966 +10967, OA10967 +10968, OA10968 +10969, OA10969 +10970, OA10970 +10971, OA10971 +10972, OA10972 +10973, OA10973 +10974, OA10974 +10975, OA10975 +10976, OA10976 +10977, OA10977 +10978, OA10978 +10979, OA10979 +10980, OA10980 +10981, OA10981 +10982, OA10982 +10983, OA10983 +10984, OA10984 +10985, OA10985 +10986, OA10986 +10987, OA10987 +10988, OA10988 +10989, OA10989 +10990, OA10990 +10991, OA10991 +10992, OA10992 +10993, OA10993 +10994, OA10994 +10995, OA10995 +10996, OA10996 +10997, OA10997 +10998, OA10998 +10999, OA10999 +11000, OA11000 +11001, OA11001 +11002, OA11002 +11003, OA11003 +11004, OA11004 +11005, OA11005 +11006, OA11006 +11007, OA11007 +11008, OA11008 +11009, OA11009 +11010, OA11010 +11011, OA11011 +11012, OA11012 +11013, OA11013 +11014, OA11014 +11015, OA11015 +11016, OA11016 +11017, OA11017 +11018, OA11018 +11019, OA11019 +11020, OA11020 +11021, OA11021 +11022, OA11022 +11023, OA11023 +11024, OA11024 +11025, OA11025 +11026, OA11026 +11027, OA11027 +11028, OA11028 +11029, OA11029 +11030, OA11030 +11031, OA11031 +11032, OA11032 +11033, OA11033 +11034, OA11034 +11035, OA11035 +11036, OA11036 +11037, OA11037 +11038, OA11038 +11039, OA11039 +11040, OA11040 +11041, OA11041 +11042, OA11042 +11043, OA11043 +11044, OA11044 +11045, OA11045 +11046, OA11046 +11047, OA11047 +11048, OA11048 +11049, OA11049 +11050, OA11050 +11051, OA11051 +11052, OA11052 +11053, OA11053 +11054, OA11054 +11055, OA11055 +11056, OA11056 +11057, OA11057 +11058, OA11058 +11059, OA11059 +11060, OA11060 +11061, OA11061 +11062, OA11062 +11063, OA11063 +11064, OA11064 +11065, OA11065 +11066, OA11066 +11067, OA11067 +11068, OA11068 +11069, OA11069 +11070, OA11070 +11071, OA11071 +11072, OA11072 +11073, OA11073 +11074, OA11074 +11075, OA11075 +11076, OA11076 +11077, OA11077 +11078, OA11078 +11079, OA11079 +11080, OA11080 +11081, OA11081 +11082, OA11082 +11083, OA11083 +11084, OA11084 +11085, OA11085 +11086, OA11086 +11087, OA11087 +11088, OA11088 +11089, OA11089 +11090, OA11090 +11091, OA11091 +11092, OA11092 +11093, OA11093 +11094, OA11094 +11095, OA11095 +11096, OA11096 +11097, OA11097 +11098, OA11098 +11099, OA11099 +11100, OA11100 +11101, OA11101 +11102, OA11102 +11103, OA11103 +11104, OA11104 +11105, OA11105 +11106, OA11106 +11107, OA11107 +11108, OA11108 +11109, OA11109 +11110, OA11110 +11111, OA11111 +11112, OA11112 +11113, OA11113 +11114, OA11114 +11115, OA11115 +11116, OA11116 +11117, OA11117 +11118, OA11118 +11119, OA11119 +11120, OA11120 +11121, OA11121 +11122, OA11122 +11123, OA11123 +11124, OA11124 +11125, OA11125 +11126, OA11126 +11127, OA11127 +11128, OA11128 +11129, OA11129 +11130, OA11130 +11131, OA11131 +11132, OA11132 +11133, OA11133 +11134, OA11134 +11135, OA11135 +11136, OA11136 +11137, OA11137 +11138, OA11138 +11139, OA11139 +11140, OA11140 +11141, OA11141 +11142, OA11142 +11143, OA11143 +11144, OA11144 +11145, OA11145 +11146, OA11146 +11147, OA11147 +11148, OA11148 +11149, OA11149 +11150, OA11150 +11151, OA11151 +11152, OA11152 +11153, OA11153 +11154, OA11154 +11155, OA11155 +11156, OA11156 +11157, OA11157 +11158, OA11158 +11159, OA11159 +11160, OA11160 +11161, OA11161 +11162, OA11162 +11163, OA11163 +11164, OA11164 +11165, OA11165 +11166, OA11166 +11167, OA11167 +11168, OA11168 +11169, OA11169 +11170, OA11170 +11171, OA11171 +11172, OA11172 +11173, OA11173 +11174, OA11174 +11175, OA11175 +11176, OA11176 +11177, OA11177 +11178, OA11178 +11179, OA11179 +11180, OA11180 +11181, OA11181 +11182, OA11182 +11183, OA11183 +11184, OA11184 +11185, OA11185 +11186, OA11186 +11187, OA11187 +11188, OA11188 +11189, OA11189 +11190, OA11190 +11191, OA11191 +11192, OA11192 +11193, OA11193 +11194, OA11194 +11195, OA11195 +11196, OA11196 +11197, OA11197 +11198, OA11198 +11199, OA11199 +11200, OA11200 +11201, OA11201 +11202, OA11202 +11203, OA11203 +11204, OA11204 +11205, OA11205 +11206, OA11206 +11207, OA11207 +11208, OA11208 +11209, OA11209 +11210, OA11210 +11211, OA11211 +11212, OA11212 +11213, OA11213 +11214, OA11214 +11215, OA11215 +11216, OA11216 +11217, OA11217 +11218, OA11218 +11219, OA11219 +11220, OA11220 +11221, OA11221 +11222, OA11222 +11223, OA11223 +11224, OA11224 +11225, OA11225 +11226, OA11226 +11227, OA11227 +11228, OA11228 +11229, OA11229 +11230, OA11230 +11231, OA11231 +11232, OA11232 +11233, OA11233 +11234, OA11234 +11235, OA11235 +11236, OA11236 +11237, OA11237 +11238, OA11238 +11239, OA11239 +11240, OA11240 +11241, OA11241 +11242, OA11242 +11243, OA11243 +11244, OA11244 +11245, OA11245 +11246, OA11246 +11247, OA11247 +11248, OA11248 +11249, OA11249 +11250, OA11250 +11251, OA11251 +11252, OA11252 +11253, OA11253 +11254, OA11254 +11255, OA11255 +11256, OA11256 +11257, OA11257 +11258, OA11258 +11259, OA11259 +11260, OA11260 +11261, OA11261 +11262, OA11262 +11263, OA11263 +11264, OA11264 +11265, OA11265 +11266, OA11266 +11267, OA11267 +11268, OA11268 +11269, OA11269 +11270, OA11270 +11271, OA11271 +11272, OA11272 +11273, OA11273 +11274, OA11274 +11275, OA11275 +11276, OA11276 +11277, OA11277 +11278, OA11278 +11279, OA11279 +11280, OA11280 +11281, OA11281 +11282, OA11282 +11283, OA11283 +11284, OA11284 +11285, OA11285 +11286, OA11286 +11287, OA11287 +11288, OA11288 +11289, OA11289 +11290, OA11290 +11291, OA11291 +11292, OA11292 +11293, OA11293 +11294, OA11294 +11295, OA11295 +11296, OA11296 +11297, OA11297 +11298, OA11298 +11299, OA11299 +11300, OA11300 +11301, OA11301 +11302, OA11302 +11303, OA11303 +11304, OA11304 +11305, OA11305 +11306, OA11306 +11307, OA11307 +11308, OA11308 +11309, OA11309 +11310, OA11310 +11311, OA11311 +11312, OA11312 +11313, OA11313 +11314, OA11314 +11315, OA11315 +11316, OA11316 +11317, OA11317 +11318, OA11318 +11319, OA11319 +11320, OA11320 +11321, OA11321 +11322, OA11322 +11323, OA11323 +11324, OA11324 +11325, OA11325 +11326, OA11326 +11327, OA11327 +11328, OA11328 +11329, OA11329 +11330, OA11330 +11331, OA11331 +11332, OA11332 +11333, OA11333 +11334, OA11334 +11335, OA11335 +11336, OA11336 +11337, OA11337 +11338, OA11338 +11339, OA11339 +11340, OA11340 +11341, OA11341 +11342, OA11342 +11343, OA11343 +11344, OA11344 +11345, OA11345 +11346, OA11346 +11347, OA11347 +11348, OA11348 +11349, OA11349 +11350, OA11350 +11351, OA11351 +11352, OA11352 +11353, OA11353 +11354, OA11354 +11355, OA11355 +11356, OA11356 +11357, OA11357 +11358, OA11358 +11359, OA11359 +11360, OA11360 +11361, OA11361 +11362, OA11362 +11363, OA11363 +11364, OA11364 +11365, OA11365 +11366, OA11366 +11367, OA11367 +11368, OA11368 +11369, OA11369 +11370, OA11370 +11371, OA11371 +11372, OA11372 +11373, OA11373 +11374, OA11374 +11375, OA11375 +11376, OA11376 +11377, OA11377 +11378, OA11378 +11379, OA11379 +11380, OA11380 +11381, OA11381 +11382, OA11382 +11383, OA11383 +11384, OA11384 +11385, OA11385 +11386, OA11386 +11387, OA11387 +11388, OA11388 +11389, OA11389 +11390, OA11390 +11391, OA11391 +11392, OA11392 +11393, OA11393 +11394, OA11394 +11395, OA11395 +11396, OA11396 +11397, OA11397 +11398, OA11398 +11399, OA11399 +11400, OA11400 +11401, OA11401 +11402, OA11402 +11403, OA11403 +11404, OA11404 +11405, OA11405 +11406, OA11406 +11407, OA11407 +11408, OA11408 +11409, OA11409 +11410, OA11410 +11411, OA11411 +11412, OA11412 +11413, OA11413 +11414, OA11414 +11415, OA11415 +11416, OA11416 +11417, OA11417 +11418, OA11418 +11419, OA11419 +11420, OA11420 +11421, OA11421 +11422, OA11422 +11423, OA11423 +11424, OA11424 +11425, OA11425 +11426, OA11426 +11427, OA11427 +11428, OA11428 +11429, OA11429 +11430, OA11430 +11431, OA11431 +11432, OA11432 +11433, OA11433 +11434, OA11434 +11435, OA11435 +11436, OA11436 +11437, OA11437 +11438, OA11438 +11439, OA11439 +11440, OA11440 +11441, OA11441 +11442, OA11442 +11443, OA11443 +11444, OA11444 +11445, OA11445 +11446, OA11446 +11447, OA11447 +11448, OA11448 +11449, OA11449 +11450, OA11450 +11451, OA11451 +11452, OA11452 +11453, OA11453 +11454, OA11454 +11455, OA11455 +11456, OA11456 +11457, OA11457 +11458, OA11458 +11459, OA11459 +11460, OA11460 +11461, OA11461 +11462, OA11462 +11463, OA11463 +11464, OA11464 +11465, OA11465 +11466, OA11466 +11467, OA11467 +11468, OA11468 +11469, OA11469 +11470, OA11470 +11471, OA11471 +11472, OA11472 +11473, OA11473 +11474, OA11474 +11475, OA11475 +11476, OA11476 +11477, OA11477 +11478, OA11478 +11479, OA11479 +11480, OA11480 +11481, OA11481 +11482, OA11482 +11483, OA11483 +11484, OA11484 +11485, OA11485 +11486, OA11486 +11487, OA11487 +11488, OA11488 +11489, OA11489 +11490, OA11490 +11491, OA11491 +11492, OA11492 +11493, OA11493 +11494, OA11494 +11495, OA11495 +11496, OA11496 +11497, OA11497 +11498, OA11498 +11499, OA11499 +11500, OA11500 +11501, OA11501 +11502, OA11502 +11503, OA11503 +11504, OA11504 +11505, OA11505 +11506, OA11506 +11507, OA11507 +11508, OA11508 +11509, OA11509 +11510, OA11510 +11511, OA11511 +11512, OA11512 +11513, OA11513 +11514, OA11514 +11515, OA11515 +11516, OA11516 +11517, OA11517 +11518, OA11518 +11519, OA11519 +11520, OA11520 +11521, OA11521 +11522, OA11522 +11523, OA11523 +11524, OA11524 +11525, OA11525 +11526, OA11526 +11527, OA11527 +11528, OA11528 +11529, OA11529 +11530, OA11530 +11531, OA11531 +11532, OA11532 +11533, OA11533 +11534, OA11534 +11535, OA11535 +11536, OA11536 +11537, OA11537 +11538, OA11538 +11539, OA11539 +11540, OA11540 +11541, OA11541 +11542, OA11542 +11543, OA11543 +11544, OA11544 +11545, OA11545 +11546, OA11546 +11547, OA11547 +11548, OA11548 +11549, OA11549 +11550, OA11550 +11551, OA11551 +11552, OA11552 +11553, OA11553 +11554, OA11554 +11555, OA11555 +11556, OA11556 +11557, OA11557 +11558, OA11558 +11559, OA11559 +11560, OA11560 +11561, OA11561 +11562, OA11562 +11563, OA11563 +11564, OA11564 +11565, OA11565 +11566, OA11566 +11567, OA11567 +11568, OA11568 +11569, OA11569 +11570, OA11570 +11571, OA11571 +11572, OA11572 +11573, OA11573 +11574, OA11574 +11575, OA11575 +11576, OA11576 +11577, OA11577 +11578, OA11578 +11579, OA11579 +11580, OA11580 +11581, OA11581 +11582, OA11582 +11583, OA11583 +11584, OA11584 +11585, OA11585 +11586, OA11586 +11587, OA11587 +11588, OA11588 +11589, OA11589 +11590, OA11590 +11591, OA11591 +11592, OA11592 +11593, OA11593 +11594, OA11594 +11595, OA11595 +11596, OA11596 +11597, OA11597 +11598, OA11598 +11599, OA11599 +11600, OA11600 +11601, OA11601 +11602, OA11602 +11603, OA11603 +11604, OA11604 +11605, OA11605 +11606, OA11606 +11607, OA11607 +11608, OA11608 +11609, OA11609 +11610, OA11610 +11611, OA11611 +11612, OA11612 +11613, OA11613 +11614, OA11614 +11615, OA11615 +11616, OA11616 +11617, OA11617 +11618, OA11618 +11619, OA11619 +11620, OA11620 +11621, OA11621 +11622, OA11622 +11623, OA11623 +11624, OA11624 +11625, OA11625 +11626, OA11626 +11627, OA11627 +11628, OA11628 +11629, OA11629 +11630, OA11630 +11631, OA11631 +11632, OA11632 +11633, OA11633 +11634, OA11634 +11635, OA11635 +11636, OA11636 +11637, OA11637 +11638, OA11638 +11639, OA11639 +11640, OA11640 +11641, OA11641 +11642, OA11642 +11643, OA11643 +11644, OA11644 +11645, OA11645 +11646, OA11646 +11647, OA11647 +11648, OA11648 +11649, OA11649 +11650, OA11650 +11651, OA11651 +11652, OA11652 +11653, OA11653 +11654, OA11654 +11655, OA11655 +11656, OA11656 +11657, OA11657 +11658, OA11658 +11659, OA11659 +11660, OA11660 +11661, OA11661 +11662, OA11662 +11663, OA11663 +11664, OA11664 +11665, OA11665 +11666, OA11666 +11667, OA11667 +11668, OA11668 +11669, OA11669 +11670, OA11670 +11671, OA11671 +11672, OA11672 +11673, OA11673 +11674, OA11674 +11675, OA11675 +11676, OA11676 +11677, OA11677 +11678, OA11678 +11679, OA11679 +11680, OA11680 +11681, OA11681 +11682, OA11682 +11683, OA11683 +11684, OA11684 +11685, OA11685 +11686, OA11686 +11687, OA11687 +11688, OA11688 +11689, OA11689 +11690, OA11690 +11691, OA11691 +11692, OA11692 +11693, OA11693 +11694, OA11694 +11695, OA11695 +11696, OA11696 +11697, OA11697 +11698, OA11698 +11699, OA11699 +11700, OA11700 +11701, OA11701 +11702, OA11702 +11703, OA11703 +11704, OA11704 +11705, OA11705 +11706, OA11706 +11707, OA11707 +11708, OA11708 +11709, OA11709 +11710, OA11710 +11711, OA11711 +11712, OA11712 +11713, OA11713 +11714, OA11714 +11715, OA11715 +11716, OA11716 +11717, OA11717 +11718, OA11718 +11719, OA11719 +11720, OA11720 +11721, OA11721 +11722, OA11722 +11723, OA11723 +11724, OA11724 +11725, OA11725 +11726, OA11726 +11727, OA11727 +11728, OA11728 +11729, OA11729 +11730, OA11730 +11731, OA11731 +11732, OA11732 +11733, OA11733 +11734, OA11734 +11735, OA11735 +11736, OA11736 +11737, OA11737 +11738, OA11738 +11739, OA11739 +11740, OA11740 +11741, OA11741 +11742, OA11742 +11743, OA11743 +11744, OA11744 +11745, OA11745 +11746, OA11746 +11747, OA11747 +11748, OA11748 +11749, OA11749 +11750, OA11750 +11751, OA11751 +11752, OA11752 +11753, OA11753 +11754, OA11754 +11755, OA11755 +11756, OA11756 +11757, OA11757 +11758, OA11758 +11759, OA11759 +11760, OA11760 +11761, OA11761 +11762, OA11762 +11763, OA11763 +11764, OA11764 +11765, OA11765 +11766, OA11766 +11767, OA11767 +11768, OA11768 +11769, OA11769 +11770, OA11770 +11771, OA11771 +11772, OA11772 +11773, OA11773 +11774, OA11774 +11775, OA11775 +11776, OA11776 +11777, OA11777 +11778, OA11778 +11779, OA11779 +11780, OA11780 +11781, OA11781 +11782, OA11782 +11783, OA11783 +11784, OA11784 +11785, OA11785 +11786, OA11786 +11787, OA11787 +11788, OA11788 +11789, OA11789 +11790, OA11790 +11791, OA11791 +11792, OA11792 +11793, OA11793 +11794, OA11794 +11795, OA11795 +11796, OA11796 +11797, OA11797 +11798, OA11798 +11799, OA11799 +11800, OA11800 +11801, OA11801 +11802, OA11802 +11803, OA11803 +11804, OA11804 +11805, OA11805 +11806, OA11806 +11807, OA11807 +11808, OA11808 +11809, OA11809 +11810, OA11810 +11811, OA11811 +11812, OA11812 +11813, OA11813 +11814, OA11814 +11815, OA11815 +11816, OA11816 +11817, OA11817 +11818, OA11818 +11819, OA11819 +11820, OA11820 +11821, OA11821 +11822, OA11822 +11823, OA11823 +11824, OA11824 +11825, OA11825 +11826, OA11826 +11827, OA11827 +11828, OA11828 +11829, OA11829 +11830, OA11830 +11831, OA11831 +11832, OA11832 +11833, OA11833 +11834, OA11834 +11835, OA11835 +11836, OA11836 +11837, OA11837 +11838, OA11838 +11839, OA11839 +11840, OA11840 +11841, OA11841 +11842, OA11842 +11843, OA11843 +11844, OA11844 +11845, OA11845 +11846, OA11846 +11847, OA11847 +11848, OA11848 +11849, OA11849 +11850, OA11850 +11851, OA11851 +11852, OA11852 +11853, OA11853 +11854, OA11854 +11855, OA11855 +11856, OA11856 +11857, OA11857 +11858, OA11858 +11859, OA11859 +11860, OA11860 +11861, OA11861 +11862, OA11862 +11863, OA11863 +11864, OA11864 +11865, OA11865 +11866, OA11866 +11867, OA11867 +11868, OA11868 +11869, OA11869 +11870, OA11870 +11871, OA11871 +11872, OA11872 +11873, OA11873 +11874, OA11874 +11875, OA11875 +11876, OA11876 +11877, OA11877 +11878, OA11878 +11879, OA11879 +11880, OA11880 +11881, OA11881 +11882, OA11882 +11883, OA11883 +11884, OA11884 +11885, OA11885 +11886, OA11886 +11887, OA11887 +11888, OA11888 +11889, OA11889 +11890, OA11890 +11891, OA11891 +11892, OA11892 +11893, OA11893 +11894, OA11894 +11895, OA11895 +11896, OA11896 +11897, OA11897 +11898, OA11898 +11899, OA11899 +11900, OA11900 +11901, OA11901 +11902, OA11902 +11903, OA11903 +11904, OA11904 +11905, OA11905 +11906, OA11906 +11907, OA11907 +11908, OA11908 +11909, OA11909 +11910, OA11910 +11911, OA11911 +11912, OA11912 +11913, OA11913 +11914, OA11914 +11915, OA11915 +11916, OA11916 +11917, OA11917 +11918, OA11918 +11919, OA11919 +11920, OA11920 +11921, OA11921 +11922, OA11922 +11923, OA11923 +11924, OA11924 +11925, OA11925 +11926, OA11926 +11927, OA11927 +11928, OA11928 +11929, OA11929 +11930, OA11930 +11931, OA11931 +11932, OA11932 +11933, OA11933 +11934, OA11934 +11935, OA11935 +11936, OA11936 +11937, OA11937 +11938, OA11938 +11939, OA11939 +11940, OA11940 +11941, OA11941 +11942, OA11942 +11943, OA11943 +11944, OA11944 +11945, OA11945 +11946, OA11946 +11947, OA11947 +11948, OA11948 +11949, OA11949 +11950, OA11950 +11951, OA11951 +11952, OA11952 +11953, OA11953 +11954, OA11954 +11955, OA11955 +11956, OA11956 +11957, OA11957 +11958, OA11958 +11959, OA11959 +11960, OA11960 +11961, OA11961 +11962, OA11962 +11963, OA11963 +11964, OA11964 +11965, OA11965 +11966, OA11966 +11967, OA11967 +11968, OA11968 +11969, OA11969 +11970, OA11970 +11971, OA11971 +11972, OA11972 +11973, OA11973 +11974, OA11974 +11975, OA11975 +11976, OA11976 +11977, OA11977 +11978, OA11978 +11979, OA11979 +11980, OA11980 +11981, OA11981 +11982, OA11982 +11983, OA11983 +11984, OA11984 +11985, OA11985 +11986, OA11986 +11987, OA11987 +11988, OA11988 +11989, OA11989 +11990, OA11990 +11991, OA11991 +11992, OA11992 +11993, OA11993 +11994, OA11994 +11995, OA11995 +11996, OA11996 +11997, OA11997 +11998, OA11998 +11999, OA11999 +12000, OA12000 +12001, OA12001 +12002, OA12002 +12003, OA12003 +12004, OA12004 +12005, OA12005 +12006, OA12006 +12007, OA12007 +12008, OA12008 +12009, OA12009 +12010, OA12010 +12011, OA12011 +12012, OA12012 +12013, OA12013 +12014, OA12014 +12015, OA12015 +12016, OA12016 +12017, OA12017 +12018, OA12018 +12019, OA12019 +12020, OA12020 +12021, OA12021 +12022, OA12022 +12023, OA12023 +12024, OA12024 +12025, OA12025 +12026, OA12026 +12027, OA12027 +12028, OA12028 +12029, OA12029 +12030, OA12030 +12031, OA12031 +12032, OA12032 +12033, OA12033 +12034, OA12034 +12035, OA12035 +12036, OA12036 +12037, OA12037 +12038, OA12038 +12039, OA12039 +12040, OA12040 +12041, OA12041 +12042, OA12042 +12043, OA12043 +12044, OA12044 +12045, OA12045 +12046, OA12046 +12047, OA12047 +12048, OA12048 +12049, OA12049 +12050, OA12050 +12051, OA12051 +12052, OA12052 +12053, OA12053 +12054, OA12054 +12055, OA12055 +12056, OA12056 +12057, OA12057 +12058, OA12058 +12059, OA12059 +12060, OA12060 +12061, OA12061 +12062, OA12062 +12063, OA12063 +12064, OA12064 +12065, OA12065 +12066, OA12066 +12067, OA12067 +12068, OA12068 +12069, OA12069 +12070, OA12070 +12071, OA12071 +12072, OA12072 +12073, OA12073 +12074, OA12074 +12075, OA12075 +12076, OA12076 +12077, OA12077 +12078, OA12078 +12079, OA12079 +12080, OA12080 +12081, OA12081 +12082, OA12082 +12083, OA12083 +12084, OA12084 +12085, OA12085 +12086, OA12086 +12087, OA12087 +12088, OA12088 +12089, OA12089 +12090, OA12090 +12091, OA12091 +12092, OA12092 +12093, OA12093 +12094, OA12094 +12095, OA12095 +12096, OA12096 +12097, OA12097 +12098, OA12098 +12099, OA12099 +12100, OA12100 +12101, OA12101 +12102, OA12102 +12103, OA12103 +12104, OA12104 +12105, OA12105 +12106, OA12106 +12107, OA12107 +12108, OA12108 +12109, OA12109 +12110, OA12110 +12111, OA12111 +12112, OA12112 +12113, OA12113 +12114, OA12114 +12115, OA12115 +12116, OA12116 +12117, OA12117 +12118, OA12118 +12119, OA12119 +12120, OA12120 +12121, OA12121 +12122, OA12122 +12123, OA12123 +12124, OA12124 +12125, OA12125 +12126, OA12126 +12127, OA12127 +12128, OA12128 +12129, OA12129 +12130, OA12130 +12131, OA12131 +12132, OA12132 +12133, OA12133 +12134, OA12134 +12135, OA12135 +12136, OA12136 +12137, OA12137 +12138, OA12138 +12139, OA12139 +12140, OA12140 +12141, OA12141 +12142, OA12142 +12143, OA12143 +12144, OA12144 +12145, OA12145 +12146, OA12146 +12147, OA12147 +12148, OA12148 +12149, OA12149 +12150, OA12150 +12151, OA12151 +12152, OA12152 +12153, OA12153 +12154, OA12154 +12155, OA12155 +12156, OA12156 +12157, OA12157 +12158, OA12158 +12159, OA12159 +12160, OA12160 +12161, OA12161 +12162, OA12162 +12163, OA12163 +12164, OA12164 +12165, OA12165 +12166, OA12166 +12167, OA12167 +12168, OA12168 +12169, OA12169 +12170, OA12170 +12171, OA12171 +12172, OA12172 +12173, OA12173 +12174, OA12174 +12175, OA12175 +12176, OA12176 +12177, OA12177 +12178, OA12178 +12179, OA12179 +12180, OA12180 +12181, OA12181 +12182, OA12182 +12183, OA12183 +12184, OA12184 +12185, OA12185 +12186, OA12186 +12187, OA12187 +12188, OA12188 +12189, OA12189 +12190, OA12190 +12191, OA12191 +12192, OA12192 +12193, OA12193 +12194, OA12194 +12195, OA12195 +12196, OA12196 +12197, OA12197 +12198, OA12198 +12199, OA12199 +12200, OA12200 +12201, OA12201 +12202, OA12202 +12203, OA12203 +12204, OA12204 +12205, OA12205 +12206, OA12206 +12207, OA12207 +12208, OA12208 +12209, OA12209 +12210, OA12210 +12211, OA12211 +12212, OA12212 +12213, OA12213 +12214, OA12214 +12215, OA12215 +12216, OA12216 +12217, OA12217 +12218, OA12218 +12219, OA12219 +12220, OA12220 +12221, OA12221 +12222, OA12222 +12223, OA12223 +12224, OA12224 +12225, OA12225 +12226, OA12226 +12227, OA12227 +12228, OA12228 +12229, OA12229 +12230, OA12230 +12231, OA12231 +12232, OA12232 +12233, OA12233 +12234, OA12234 +12235, OA12235 +12236, OA12236 +12237, OA12237 +12238, OA12238 +12239, OA12239 +12240, OA12240 +12241, OA12241 +12242, OA12242 +12243, OA12243 +12244, OA12244 +12245, OA12245 +12246, OA12246 +12247, OA12247 +12248, OA12248 +12249, OA12249 +12250, OA12250 +12251, OA12251 +12252, OA12252 +12253, OA12253 +12254, OA12254 +12255, OA12255 +12256, OA12256 +12257, OA12257 +12258, OA12258 +12259, OA12259 +12260, OA12260 +12261, OA12261 +12262, OA12262 +12263, OA12263 +12264, OA12264 +12265, OA12265 +12266, OA12266 +12267, OA12267 +12268, OA12268 +12269, OA12269 +12270, OA12270 +12271, OA12271 +12272, OA12272 +12273, OA12273 +12274, OA12274 +12275, OA12275 +12276, OA12276 +12277, OA12277 +12278, OA12278 +12279, OA12279 +12280, OA12280 +12281, OA12281 +12282, OA12282 +12283, OA12283 +12284, OA12284 +12285, OA12285 +12286, OA12286 +12287, OA12287 +12288, OA12288 +12289, OA12289 +12290, OA12290 +12291, OA12291 +12292, OA12292 +12293, OA12293 +12294, OA12294 +12295, OA12295 +12296, OA12296 +12297, OA12297 +12298, OA12298 +12299, OA12299 +12300, OA12300 +12301, OA12301 +12302, OA12302 +12303, OA12303 +12304, OA12304 +12305, OA12305 +12306, OA12306 +12307, OA12307 +12308, OA12308 +12309, OA12309 +12310, OA12310 +12311, OA12311 +12312, OA12312 +12313, OA12313 +12314, OA12314 +12315, OA12315 +12316, OA12316 +12317, OA12317 +12318, OA12318 +12319, OA12319 +12320, OA12320 +12321, OA12321 +12322, OA12322 +12323, OA12323 +12324, OA12324 +12325, OA12325 +12326, OA12326 +12327, OA12327 +12328, OA12328 +12329, OA12329 +12330, OA12330 +12331, OA12331 +12332, OA12332 +12333, OA12333 +12334, OA12334 +12335, OA12335 +12336, OA12336 +12337, OA12337 +12338, OA12338 +12339, OA12339 +12340, OA12340 +12341, OA12341 +12342, OA12342 +12343, OA12343 +12344, OA12344 +12345, OA12345 +12346, OA12346 +12347, OA12347 +12348, OA12348 +12349, OA12349 +12350, OA12350 +12351, OA12351 +12352, OA12352 +12353, OA12353 +12354, OA12354 +12355, OA12355 +12356, OA12356 +12357, OA12357 +12358, OA12358 +12359, OA12359 +12360, OA12360 +12361, OA12361 +12362, OA12362 +12363, OA12363 +12364, OA12364 +12365, OA12365 +12366, OA12366 +12367, OA12367 +12368, OA12368 +12369, OA12369 +12370, OA12370 +12371, OA12371 +12372, OA12372 +12373, OA12373 +12374, OA12374 +12375, OA12375 +12376, OA12376 +12377, OA12377 +12378, OA12378 +12379, OA12379 +12380, OA12380 +12381, OA12381 +12382, OA12382 +12383, OA12383 +12384, OA12384 +12385, OA12385 +12386, OA12386 +12387, OA12387 +12388, OA12388 +12389, OA12389 +12390, OA12390 +12391, OA12391 +12392, OA12392 +12393, OA12393 +12394, OA12394 +12395, OA12395 +12396, OA12396 +12397, OA12397 +12398, OA12398 +12399, OA12399 +12400, OA12400 +12401, OA12401 +12402, OA12402 +12403, OA12403 +12404, OA12404 +12405, OA12405 +12406, OA12406 +12407, OA12407 +12408, OA12408 +12409, OA12409 +12410, OA12410 +12411, OA12411 +12412, OA12412 +12413, OA12413 +12414, OA12414 +12415, OA12415 +12416, OA12416 +12417, OA12417 +12418, OA12418 +12419, OA12419 +12420, OA12420 +12421, OA12421 +12422, OA12422 +12423, OA12423 +12424, OA12424 +12425, OA12425 +12426, OA12426 +12427, OA12427 +12428, OA12428 +12429, OA12429 +12430, OA12430 +12431, OA12431 +12432, OA12432 +12433, OA12433 +12434, OA12434 +12435, OA12435 +12436, OA12436 +12437, OA12437 +12438, OA12438 +12439, OA12439 +12440, OA12440 +12441, OA12441 +12442, OA12442 +12443, OA12443 +12444, OA12444 +12445, OA12445 +12446, OA12446 +12447, OA12447 +12448, OA12448 +12449, OA12449 +12450, OA12450 +12451, OA12451 +12452, OA12452 +12453, OA12453 +12454, OA12454 +12455, OA12455 +12456, OA12456 +12457, OA12457 +12458, OA12458 +12459, OA12459 +12460, OA12460 +12461, OA12461 +12462, OA12462 +12463, OA12463 +12464, OA12464 +12465, OA12465 +12466, OA12466 +12467, OA12467 +12468, OA12468 +12469, OA12469 +12470, OA12470 +12471, OA12471 +12472, OA12472 +12473, OA12473 +12474, OA12474 +12475, OA12475 +12476, OA12476 +12477, OA12477 +12478, OA12478 +12479, OA12479 +12480, OA12480 +12481, OA12481 +12482, OA12482 +12483, OA12483 +12484, OA12484 +12485, OA12485 +12486, OA12486 +12487, OA12487 +12488, OA12488 +12489, OA12489 +12490, OA12490 +12491, OA12491 +12492, OA12492 +12493, OA12493 +12494, OA12494 +12495, OA12495 +12496, OA12496 +12497, OA12497 +12498, OA12498 +12499, OA12499 +12500, OA12500 +12501, OA12501 +12502, OA12502 +12503, OA12503 +12504, OA12504 +12505, OA12505 +12506, OA12506 +12507, OA12507 +12508, OA12508 +12509, OA12509 +12510, OA12510 +12511, OA12511 +12512, OA12512 +12513, OA12513 +12514, OA12514 +12515, OA12515 +12516, OA12516 +12517, OA12517 +12518, OA12518 +12519, OA12519 +12520, OA12520 +12521, OA12521 +12522, OA12522 +12523, OA12523 +12524, OA12524 +12525, OA12525 +12526, OA12526 +12527, OA12527 +12528, OA12528 +12529, OA12529 +12530, OA12530 +12531, OA12531 +12532, OA12532 +12533, OA12533 +12534, OA12534 +12535, OA12535 +12536, OA12536 +12537, OA12537 +12538, OA12538 +12539, OA12539 +12540, OA12540 +12541, OA12541 +12542, OA12542 +12543, OA12543 +12544, OA12544 +12545, OA12545 +12546, OA12546 +12547, OA12547 +12548, OA12548 +12549, OA12549 +12550, OA12550 +12551, OA12551 +12552, OA12552 +12553, OA12553 +12554, OA12554 +12555, OA12555 +12556, OA12556 +12557, OA12557 +12558, OA12558 +12559, OA12559 +12560, OA12560 +12561, OA12561 +12562, OA12562 +12563, OA12563 +12564, OA12564 +12565, OA12565 +12566, OA12566 +12567, OA12567 +12568, OA12568 +12569, OA12569 +12570, OA12570 +12571, OA12571 +12572, OA12572 +12573, OA12573 +12574, OA12574 +12575, OA12575 +12576, OA12576 +12577, OA12577 +12578, OA12578 +12579, OA12579 +12580, OA12580 +12581, OA12581 +12582, OA12582 +12583, OA12583 +12584, OA12584 +12585, OA12585 +12586, OA12586 +12587, OA12587 +12588, OA12588 +12589, OA12589 +12590, OA12590 +12591, OA12591 +12592, OA12592 +12593, OA12593 +12594, OA12594 +12595, OA12595 +12596, OA12596 +12597, OA12597 +12598, OA12598 +12599, OA12599 +12600, OA12600 +12601, OA12601 +12602, OA12602 +12603, OA12603 +12604, OA12604 +12605, OA12605 +12606, OA12606 +12607, OA12607 +12608, OA12608 +12609, OA12609 +12610, OA12610 +12611, OA12611 +12612, OA12612 +12613, OA12613 +12614, OA12614 +12615, OA12615 +12616, OA12616 +12617, OA12617 +12618, OA12618 +12619, OA12619 +12620, OA12620 +12621, OA12621 +12622, OA12622 +12623, OA12623 +12624, OA12624 +12625, OA12625 +12626, OA12626 +12627, OA12627 +12628, OA12628 +12629, OA12629 +12630, OA12630 +12631, OA12631 +12632, OA12632 +12633, OA12633 +12634, OA12634 +12635, OA12635 +12636, OA12636 +12637, OA12637 +12638, OA12638 +12639, OA12639 +12640, OA12640 +12641, OA12641 +12642, OA12642 +12643, OA12643 +12644, OA12644 +12645, OA12645 +12646, OA12646 +12647, OA12647 +12648, OA12648 +12649, OA12649 +12650, OA12650 +12651, OA12651 +12652, OA12652 +12653, OA12653 +12654, OA12654 +12655, OA12655 +12656, OA12656 +12657, OA12657 +12658, OA12658 +12659, OA12659 +12660, OA12660 +12661, OA12661 +12662, OA12662 +12663, OA12663 +12664, OA12664 +12665, OA12665 +12666, OA12666 +12667, OA12667 +12668, OA12668 +12669, OA12669 +12670, OA12670 +12671, OA12671 +12672, OA12672 +12673, OA12673 +12674, OA12674 +12675, OA12675 +12676, OA12676 +12677, OA12677 +12678, OA12678 +12679, OA12679 +12680, OA12680 +12681, OA12681 +12682, OA12682 +12683, OA12683 +12684, OA12684 +12685, OA12685 +12686, OA12686 +12687, OA12687 +12688, OA12688 +12689, OA12689 +12690, OA12690 +12691, OA12691 +12692, OA12692 +12693, OA12693 +12694, OA12694 +12695, OA12695 +12696, OA12696 +12697, OA12697 +12698, OA12698 +12699, OA12699 +12700, OA12700 +12701, OA12701 +12702, OA12702 +12703, OA12703 +12704, OA12704 +12705, OA12705 +12706, OA12706 +12707, OA12707 +12708, OA12708 +12709, OA12709 +12710, OA12710 +12711, OA12711 +12712, OA12712 +12713, OA12713 +12714, OA12714 +12715, OA12715 +12716, OA12716 +12717, OA12717 +12718, OA12718 +12719, OA12719 +12720, OA12720 +12721, OA12721 +12722, OA12722 +12723, OA12723 +12724, OA12724 +12725, OA12725 +12726, OA12726 +12727, OA12727 +12728, OA12728 +12729, OA12729 +12730, OA12730 +12731, OA12731 +12732, OA12732 +12733, OA12733 +12734, OA12734 +12735, OA12735 +12736, OA12736 +12737, OA12737 +12738, OA12738 +12739, OA12739 +12740, OA12740 +12741, OA12741 +12742, OA12742 +12743, OA12743 +12744, OA12744 +12745, OA12745 +12746, OA12746 +12747, OA12747 +12748, OA12748 +12749, OA12749 +12750, OA12750 +12751, OA12751 +12752, OA12752 +12753, OA12753 +12754, OA12754 +12755, OA12755 +12756, OA12756 +12757, OA12757 +12758, OA12758 +12759, OA12759 +12760, OA12760 +12761, OA12761 +12762, OA12762 +12763, OA12763 +12764, OA12764 +12765, OA12765 +12766, OA12766 +12767, OA12767 +12768, OA12768 +12769, OA12769 +12770, OA12770 +12771, OA12771 +12772, OA12772 +12773, OA12773 +12774, OA12774 +12775, OA12775 +12776, OA12776 +12777, OA12777 +12778, OA12778 +12779, OA12779 +12780, OA12780 +12781, OA12781 +12782, OA12782 +12783, OA12783 +12784, OA12784 +12785, OA12785 +12786, OA12786 +12787, OA12787 +12788, OA12788 +12789, OA12789 +12790, OA12790 +12791, OA12791 +12792, OA12792 +12793, OA12793 +12794, OA12794 +12795, OA12795 +12796, OA12796 +12797, OA12797 +12798, OA12798 +12799, OA12799 +12800, OA12800 +12801, OA12801 +12802, OA12802 +12803, OA12803 +12804, OA12804 +12805, OA12805 +12806, OA12806 +12807, OA12807 +12808, OA12808 +12809, OA12809 +12810, OA12810 +12811, OA12811 +12812, OA12812 +12813, OA12813 +12814, OA12814 +12815, OA12815 +12816, OA12816 +12817, OA12817 +12818, OA12818 +12819, OA12819 +12820, OA12820 +12821, OA12821 +12822, OA12822 +12823, OA12823 +12824, OA12824 +12825, OA12825 +12826, OA12826 +12827, OA12827 +12828, OA12828 +12829, OA12829 +12830, OA12830 +12831, OA12831 +12832, OA12832 +12833, OA12833 +12834, OA12834 +12835, OA12835 +12836, OA12836 +12837, OA12837 +12838, OA12838 +12839, OA12839 +12840, OA12840 +12841, OA12841 +12842, OA12842 +12843, OA12843 +12844, OA12844 +12845, OA12845 +12846, OA12846 +12847, OA12847 +12848, OA12848 +12849, OA12849 +12850, OA12850 +12851, OA12851 +12852, OA12852 +12853, OA12853 +12854, OA12854 +12855, OA12855 +12856, OA12856 +12857, OA12857 +12858, OA12858 +12859, OA12859 +12860, OA12860 +12861, OA12861 +12862, OA12862 +12863, OA12863 +12864, OA12864 +12865, OA12865 +12866, OA12866 +12867, OA12867 +12868, OA12868 +12869, OA12869 +12870, OA12870 +12871, OA12871 +12872, OA12872 +12873, OA12873 +12874, OA12874 +12875, OA12875 +12876, OA12876 +12877, OA12877 +12878, OA12878 +12879, OA12879 +12880, OA12880 +12881, OA12881 +12882, OA12882 +12883, OA12883 +12884, OA12884 +12885, OA12885 +12886, OA12886 +12887, OA12887 +12888, OA12888 +12889, OA12889 +12890, OA12890 +12891, OA12891 +12892, OA12892 +12893, OA12893 +12894, OA12894 +12895, OA12895 +12896, OA12896 +12897, OA12897 +12898, OA12898 +12899, OA12899 +12900, OA12900 +12901, OA12901 +12902, OA12902 +12903, OA12903 +12904, OA12904 +12905, OA12905 +12906, OA12906 +12907, OA12907 +12908, OA12908 +12909, OA12909 +12910, OA12910 +12911, OA12911 +12912, OA12912 +12913, OA12913 +12914, OA12914 +12915, OA12915 +12916, OA12916 +12917, OA12917 +12918, OA12918 +12919, OA12919 +12920, OA12920 +12921, OA12921 +12922, OA12922 +12923, OA12923 +12924, OA12924 +12925, OA12925 +12926, OA12926 +12927, OA12927 +12928, OA12928 +12929, OA12929 +12930, OA12930 +12931, OA12931 +12932, OA12932 +12933, OA12933 +12934, OA12934 +12935, OA12935 +12936, OA12936 +12937, OA12937 +12938, OA12938 +12939, OA12939 +12940, OA12940 +12941, OA12941 +12942, OA12942 +12943, OA12943 +12944, OA12944 +12945, OA12945 +12946, OA12946 +12947, OA12947 +12948, OA12948 +12949, OA12949 +12950, OA12950 +12951, OA12951 +12952, OA12952 +12953, OA12953 +12954, OA12954 +12955, OA12955 +12956, OA12956 +12957, OA12957 +12958, OA12958 +12959, OA12959 +12960, OA12960 +12961, OA12961 +12962, OA12962 +12963, OA12963 +12964, OA12964 +12965, OA12965 +12966, OA12966 +12967, OA12967 +12968, OA12968 +12969, OA12969 +12970, OA12970 +12971, OA12971 +12972, OA12972 +12973, OA12973 +12974, OA12974 +12975, OA12975 +12976, OA12976 +12977, OA12977 +12978, OA12978 +12979, OA12979 +12980, OA12980 +12981, OA12981 +12982, OA12982 +12983, OA12983 +12984, OA12984 +12985, OA12985 +12986, OA12986 +12987, OA12987 +12988, OA12988 +12989, OA12989 +12990, OA12990 +12991, OA12991 +12992, OA12992 +12993, OA12993 +12994, OA12994 +12995, OA12995 +12996, OA12996 +12997, OA12997 +12998, OA12998 +12999, OA12999 +13000, OA13000 +13001, OA13001 +13002, OA13002 +13003, OA13003 +13004, OA13004 +13005, OA13005 +13006, OA13006 +13007, OA13007 +13008, OA13008 +13009, OA13009 +13010, OA13010 +13011, OA13011 +13012, OA13012 +13013, OA13013 +13014, OA13014 +13015, OA13015 +13016, OA13016 +13017, OA13017 +13018, OA13018 +13019, OA13019 +13020, OA13020 +13021, OA13021 +13022, OA13022 +13023, OA13023 +13024, OA13024 +13025, OA13025 +13026, OA13026 +13027, OA13027 +13028, OA13028 +13029, OA13029 +13030, OA13030 +13031, OA13031 +13032, OA13032 +13033, OA13033 +13034, OA13034 +13035, OA13035 +13036, OA13036 +13037, OA13037 +13038, OA13038 +13039, OA13039 +13040, OA13040 +13041, OA13041 +13042, OA13042 +13043, OA13043 +13044, OA13044 +13045, OA13045 +13046, OA13046 +13047, OA13047 +13048, OA13048 +13049, OA13049 +13050, OA13050 +13051, OA13051 +13052, OA13052 +13053, OA13053 +13054, OA13054 +13055, OA13055 +13056, OA13056 +13057, OA13057 +13058, OA13058 +13059, OA13059 +13060, OA13060 +13061, OA13061 +13062, OA13062 +13063, OA13063 +13064, OA13064 +13065, OA13065 +13066, OA13066 +13067, OA13067 +13068, OA13068 +13069, OA13069 +13070, OA13070 +13071, OA13071 +13072, OA13072 +13073, OA13073 +13074, OA13074 +13075, OA13075 +13076, OA13076 +13077, OA13077 +13078, OA13078 +13079, OA13079 +13080, OA13080 +13081, OA13081 +13082, OA13082 +13083, OA13083 +13084, OA13084 +13085, OA13085 +13086, OA13086 +13087, OA13087 +13088, OA13088 +13089, OA13089 +13090, OA13090 +13091, OA13091 +13092, OA13092 +13093, OA13093 +13094, OA13094 +13095, OA13095 +13096, OA13096 +13097, OA13097 +13098, OA13098 +13099, OA13099 +13100, OA13100 +13101, OA13101 +13102, OA13102 +13103, OA13103 +13104, OA13104 +13105, OA13105 +13106, OA13106 +13107, OA13107 +13108, OA13108 +13109, OA13109 +13110, OA13110 +13111, OA13111 +13112, OA13112 +13113, OA13113 +13114, OA13114 +13115, OA13115 +13116, OA13116 +13117, OA13117 +13118, OA13118 +13119, OA13119 +13120, OA13120 +13121, OA13121 +13122, OA13122 +13123, OA13123 +13124, OA13124 +13125, OA13125 +13126, OA13126 +13127, OA13127 +13128, OA13128 +13129, OA13129 +13130, OA13130 +13131, OA13131 +13132, OA13132 +13133, OA13133 +13134, OA13134 +13135, OA13135 +13136, OA13136 +13137, OA13137 +13138, OA13138 +13139, OA13139 +13140, OA13140 +13141, OA13141 +13142, OA13142 +13143, OA13143 +13144, OA13144 +13145, OA13145 +13146, OA13146 +13147, OA13147 +13148, OA13148 +13149, OA13149 +13150, OA13150 +13151, OA13151 +13152, OA13152 +13153, OA13153 +13154, OA13154 +13155, OA13155 +13156, OA13156 +13157, OA13157 +13158, OA13158 +13159, OA13159 +13160, OA13160 +13161, OA13161 +13162, OA13162 +13163, OA13163 +13164, OA13164 +13165, OA13165 +13166, OA13166 +13167, OA13167 +13168, OA13168 +13169, OA13169 +13170, OA13170 +13171, OA13171 +13172, OA13172 +13173, OA13173 +13174, OA13174 +13175, OA13175 +13176, OA13176 +13177, OA13177 +13178, OA13178 +13179, OA13179 +13180, OA13180 +13181, OA13181 +13182, OA13182 +13183, OA13183 +13184, OA13184 +13185, OA13185 +13186, OA13186 +13187, OA13187 +13188, OA13188 +13189, OA13189 +13190, OA13190 +13191, OA13191 +13192, OA13192 +13193, OA13193 +13194, OA13194 +13195, OA13195 +13196, OA13196 +13197, OA13197 +13198, OA13198 +13199, OA13199 +13200, OA13200 +13201, OA13201 +13202, OA13202 +13203, OA13203 +13204, OA13204 +13205, OA13205 +13206, OA13206 +13207, OA13207 +13208, OA13208 +13209, OA13209 +13210, OA13210 +13211, OA13211 +13212, OA13212 +13213, OA13213 +13214, OA13214 +13215, OA13215 +13216, OA13216 +13217, OA13217 +13218, OA13218 +13219, OA13219 +13220, OA13220 +13221, OA13221 +13222, OA13222 +13223, OA13223 +13224, OA13224 +13225, OA13225 +13226, OA13226 +13227, OA13227 +13228, OA13228 +13229, OA13229 +13230, OA13230 +13231, OA13231 +13232, OA13232 +13233, OA13233 +13234, OA13234 +13235, OA13235 +13236, OA13236 +13237, OA13237 +13238, OA13238 +13239, OA13239 +13240, OA13240 +13241, OA13241 +13242, OA13242 +13243, OA13243 +13244, OA13244 +13245, OA13245 +13246, OA13246 +13247, OA13247 +13248, OA13248 +13249, OA13249 +13250, OA13250 +13251, OA13251 +13252, OA13252 +13253, OA13253 +13254, OA13254 +13255, OA13255 +13256, OA13256 +13257, OA13257 +13258, OA13258 +13259, OA13259 +13260, OA13260 +13261, OA13261 +13262, OA13262 +13263, OA13263 +13264, OA13264 +13265, OA13265 +13266, OA13266 +13267, OA13267 +13268, OA13268 +13269, OA13269 +13270, OA13270 +13271, OA13271 +13272, OA13272 +13273, OA13273 +13274, OA13274 +13275, OA13275 +13276, OA13276 +13277, OA13277 +13278, OA13278 +13279, OA13279 +13280, OA13280 +13281, OA13281 +13282, OA13282 +13283, OA13283 +13284, OA13284 +13285, OA13285 +13286, OA13286 +13287, OA13287 +13288, OA13288 +13289, OA13289 +13290, OA13290 +13291, OA13291 +13292, OA13292 +13293, OA13293 +13294, OA13294 +13295, OA13295 +13296, OA13296 +13297, OA13297 +13298, OA13298 +13299, OA13299 +13300, OA13300 +13301, OA13301 +13302, OA13302 +13303, OA13303 +13304, OA13304 +13305, OA13305 +13306, OA13306 +13307, OA13307 +13308, OA13308 +13309, OA13309 +13310, OA13310 +13311, OA13311 +13312, OA13312 +13313, OA13313 +13314, OA13314 +13315, OA13315 +13316, OA13316 +13317, OA13317 +13318, OA13318 +13319, OA13319 +13320, OA13320 +13321, OA13321 +13322, OA13322 +13323, OA13323 +13324, OA13324 +13325, OA13325 +13326, OA13326 +13327, OA13327 +13328, OA13328 +13329, OA13329 +13330, OA13330 +13331, OA13331 +13332, OA13332 +13333, OA13333 +13334, OA13334 +13335, OA13335 +13336, OA13336 +13337, OA13337 +13338, OA13338 +13339, OA13339 +13340, OA13340 +13341, OA13341 +13342, OA13342 +13343, OA13343 +13344, OA13344 +13345, OA13345 +13346, OA13346 +13347, OA13347 +13348, OA13348 +13349, OA13349 +13350, OA13350 +13351, OA13351 +13352, OA13352 +13353, OA13353 +13354, OA13354 +13355, OA13355 +13356, OA13356 +13357, OA13357 +13358, OA13358 +13359, OA13359 +13360, OA13360 +13361, OA13361 +13362, OA13362 +13363, OA13363 +13364, OA13364 +13365, OA13365 +13366, OA13366 +13367, OA13367 +13368, OA13368 +13369, OA13369 +13370, OA13370 +13371, OA13371 +13372, OA13372 +13373, OA13373 +13374, OA13374 +13375, OA13375 +13376, OA13376 +13377, OA13377 +13378, OA13378 +13379, OA13379 +13380, OA13380 +13381, OA13381 +13382, OA13382 +13383, OA13383 +13384, OA13384 +13385, OA13385 +13386, OA13386 +13387, OA13387 +13388, OA13388 +13389, OA13389 +13390, OA13390 +13391, OA13391 +13392, OA13392 +13393, OA13393 +13394, OA13394 +13395, OA13395 +13396, OA13396 +13397, OA13397 +13398, OA13398 +13399, OA13399 +13400, OA13400 +13401, OA13401 +13402, OA13402 +13403, OA13403 +13404, OA13404 +13405, OA13405 +13406, OA13406 +13407, OA13407 +13408, OA13408 +13409, OA13409 +13410, OA13410 +13411, OA13411 +13412, OA13412 +13413, OA13413 +13414, OA13414 +13415, OA13415 +13416, OA13416 +13417, OA13417 +13418, OA13418 +13419, OA13419 +13420, OA13420 +13421, OA13421 +13422, OA13422 +13423, OA13423 +13424, OA13424 +13425, OA13425 +13426, OA13426 +13427, OA13427 +13428, OA13428 +13429, OA13429 +13430, OA13430 +13431, OA13431 +13432, OA13432 +13433, OA13433 +13434, OA13434 +13435, OA13435 +13436, OA13436 +13437, OA13437 +13438, OA13438 +13439, OA13439 +13440, OA13440 +13441, OA13441 +13442, OA13442 +13443, OA13443 +13444, OA13444 +13445, OA13445 +13446, OA13446 +13447, OA13447 +13448, OA13448 +13449, OA13449 +13450, OA13450 +13451, OA13451 +13452, OA13452 +13453, OA13453 +13454, OA13454 +13455, OA13455 +13456, OA13456 +13457, OA13457 +13458, OA13458 +13459, OA13459 +13460, OA13460 +13461, OA13461 +13462, OA13462 +13463, OA13463 +13464, OA13464 +13465, OA13465 +13466, OA13466 +13467, OA13467 +13468, OA13468 +13469, OA13469 +13470, OA13470 +13471, OA13471 +13472, OA13472 +13473, OA13473 +13474, OA13474 +13475, OA13475 +13476, OA13476 +13477, OA13477 +13478, OA13478 +13479, OA13479 +13480, OA13480 +13481, OA13481 +13482, OA13482 +13483, OA13483 +13484, OA13484 +13485, OA13485 +13486, OA13486 +13487, OA13487 +13488, OA13488 +13489, OA13489 +13490, OA13490 +13491, OA13491 +13492, OA13492 +13493, OA13493 +13494, OA13494 +13495, OA13495 +13496, OA13496 +13497, OA13497 +13498, OA13498 +13499, OA13499 +13500, OA13500 +13501, OA13501 +13502, OA13502 +13503, OA13503 +13504, OA13504 +13505, OA13505 +13506, OA13506 +13507, OA13507 +13508, OA13508 +13509, OA13509 +13510, OA13510 +13511, OA13511 +13512, OA13512 +13513, OA13513 +13514, OA13514 +13515, OA13515 +13516, OA13516 +13517, OA13517 +13518, OA13518 +13519, OA13519 +13520, OA13520 +13521, OA13521 +13522, OA13522 +13523, OA13523 +13524, OA13524 +13525, OA13525 +13526, OA13526 +13527, OA13527 +13528, OA13528 +13529, OA13529 +13530, OA13530 +13531, OA13531 +13532, OA13532 +13533, OA13533 +13534, OA13534 +13535, OA13535 +13536, OA13536 +13537, OA13537 +13538, OA13538 +13539, OA13539 +13540, OA13540 +13541, OA13541 +13542, OA13542 +13543, OA13543 +13544, OA13544 +13545, OA13545 +13546, OA13546 +13547, OA13547 +13548, OA13548 +13549, OA13549 +13550, OA13550 +13551, OA13551 +13552, OA13552 +13553, OA13553 +13554, OA13554 +13555, OA13555 +13556, OA13556 +13557, OA13557 +13558, OA13558 +13559, OA13559 +13560, OA13560 +13561, OA13561 +13562, OA13562 +13563, OA13563 +13564, OA13564 +13565, OA13565 +13566, OA13566 +13567, OA13567 +13568, OA13568 +13569, OA13569 +13570, OA13570 +13571, OA13571 +13572, OA13572 +13573, OA13573 +13574, OA13574 +13575, OA13575 +13576, OA13576 +13577, OA13577 +13578, OA13578 +13579, OA13579 +13580, OA13580 +13581, OA13581 +13582, OA13582 +13583, OA13583 +13584, OA13584 +13585, OA13585 +13586, OA13586 +13587, OA13587 +13588, OA13588 +13589, OA13589 +13590, OA13590 +13591, OA13591 +13592, OA13592 +13593, OA13593 +13594, OA13594 +13595, OA13595 +13596, OA13596 +13597, OA13597 +13598, OA13598 +13599, OA13599 +13600, OA13600 +13601, OA13601 +13602, OA13602 +13603, OA13603 +13604, OA13604 +13605, OA13605 +13606, OA13606 +13607, OA13607 +13608, OA13608 +13609, OA13609 +13610, OA13610 +13611, OA13611 +13612, OA13612 +13613, OA13613 +13614, OA13614 +13615, OA13615 +13616, OA13616 +13617, OA13617 +13618, OA13618 +13619, OA13619 +13620, OA13620 +13621, OA13621 +13622, OA13622 +13623, OA13623 +13624, OA13624 +13625, OA13625 +13626, OA13626 +13627, OA13627 +13628, OA13628 +13629, OA13629 +13630, OA13630 +13631, OA13631 +13632, OA13632 +13633, OA13633 +13634, OA13634 +13635, OA13635 +13636, OA13636 +13637, OA13637 +13638, OA13638 +13639, OA13639 +13640, OA13640 +13641, OA13641 +13642, OA13642 +13643, OA13643 +13644, OA13644 +13645, OA13645 +13646, OA13646 +13647, OA13647 +13648, OA13648 +13649, OA13649 +13650, OA13650 +13651, OA13651 +13652, OA13652 +13653, OA13653 +13654, OA13654 +13655, OA13655 +13656, OA13656 +13657, OA13657 +13658, OA13658 +13659, OA13659 +13660, OA13660 +13661, OA13661 +13662, OA13662 +13663, OA13663 +13664, OA13664 +13665, OA13665 +13666, OA13666 +13667, OA13667 +13668, OA13668 +13669, OA13669 +13670, OA13670 +13671, OA13671 +13672, OA13672 +13673, OA13673 +13674, OA13674 +13675, OA13675 +13676, OA13676 +13677, OA13677 +13678, OA13678 +13679, OA13679 +13680, OA13680 +13681, OA13681 +13682, OA13682 +13683, OA13683 +13684, OA13684 +13685, OA13685 +13686, OA13686 +13687, OA13687 +13688, OA13688 +13689, OA13689 +13690, OA13690 +13691, OA13691 +13692, OA13692 +13693, OA13693 +13694, OA13694 +13695, OA13695 +13696, OA13696 +13697, OA13697 +13698, OA13698 +13699, OA13699 +13700, OA13700 +13701, OA13701 +13702, OA13702 +13703, OA13703 +13704, OA13704 +13705, OA13705 +13706, OA13706 +13707, OA13707 +13708, OA13708 +13709, OA13709 +13710, OA13710 +13711, OA13711 +13712, OA13712 +13713, OA13713 +13714, OA13714 +13715, OA13715 +13716, OA13716 +13717, OA13717 +13718, OA13718 +13719, OA13719 +13720, OA13720 +13721, OA13721 +13722, OA13722 +13723, OA13723 +13724, OA13724 +13725, OA13725 +13726, OA13726 +13727, OA13727 +13728, OA13728 +13729, OA13729 +13730, OA13730 +13731, OA13731 +13732, OA13732 +13733, OA13733 +13734, OA13734 +13735, OA13735 +13736, OA13736 +13737, OA13737 +13738, OA13738 +13739, OA13739 +13740, OA13740 +13741, OA13741 +13742, OA13742 +13743, OA13743 +13744, OA13744 +13745, OA13745 +13746, OA13746 +13747, OA13747 +13748, OA13748 +13749, OA13749 +13750, OA13750 +13751, OA13751 +13752, OA13752 +13753, OA13753 +13754, OA13754 +13755, OA13755 +13756, OA13756 +13757, OA13757 +13758, OA13758 +13759, OA13759 +13760, OA13760 +13761, OA13761 +13762, OA13762 +13763, OA13763 +13764, OA13764 +13765, OA13765 +13766, OA13766 +13767, OA13767 +13768, OA13768 +13769, OA13769 +13770, OA13770 +13771, OA13771 +13772, OA13772 +13773, OA13773 +13774, OA13774 +13775, OA13775 +13776, OA13776 +13777, OA13777 +13778, OA13778 +13779, OA13779 +13780, OA13780 +13781, OA13781 +13782, OA13782 +13783, OA13783 +13784, OA13784 +13785, OA13785 +13786, OA13786 +13787, OA13787 +13788, OA13788 +13789, OA13789 +13790, OA13790 +13791, OA13791 +13792, OA13792 +13793, OA13793 +13794, OA13794 +13795, OA13795 +13796, OA13796 +13797, OA13797 +13798, OA13798 +13799, OA13799 +13800, OA13800 +13801, OA13801 +13802, OA13802 +13803, OA13803 +13804, OA13804 +13805, OA13805 +13806, OA13806 +13807, OA13807 +13808, OA13808 +13809, OA13809 +13810, OA13810 +13811, OA13811 +13812, OA13812 +13813, OA13813 +13814, OA13814 +13815, OA13815 +13816, OA13816 +13817, OA13817 +13818, OA13818 +13819, OA13819 +13820, OA13820 +13821, OA13821 +13822, OA13822 +13823, OA13823 +13824, OA13824 +13825, OA13825 +13826, OA13826 +13827, OA13827 +13828, OA13828 +13829, OA13829 +13830, OA13830 +13831, OA13831 +13832, OA13832 +13833, OA13833 +13834, OA13834 +13835, OA13835 +13836, OA13836 +13837, OA13837 +13838, OA13838 +13839, OA13839 +13840, OA13840 +13841, OA13841 +13842, OA13842 +13843, OA13843 +13844, OA13844 +13845, OA13845 +13846, OA13846 +13847, OA13847 +13848, OA13848 +13849, OA13849 +13850, OA13850 +13851, OA13851 +13852, OA13852 +13853, OA13853 +13854, OA13854 +13855, OA13855 +13856, OA13856 +13857, OA13857 +13858, OA13858 +13859, OA13859 +13860, OA13860 +13861, OA13861 +13862, OA13862 +13863, OA13863 +13864, OA13864 +13865, OA13865 +13866, OA13866 +13867, OA13867 +13868, OA13868 +13869, OA13869 +13870, OA13870 +13871, OA13871 +13872, OA13872 +13873, OA13873 +13874, OA13874 +13875, OA13875 +13876, OA13876 +13877, OA13877 +13878, OA13878 +13879, OA13879 +13880, OA13880 +13881, OA13881 +13882, OA13882 +13883, OA13883 +13884, OA13884 +13885, OA13885 +13886, OA13886 +13887, OA13887 +13888, OA13888 +13889, OA13889 +13890, OA13890 +13891, OA13891 +13892, OA13892 +13893, OA13893 +13894, OA13894 +13895, OA13895 +13896, OA13896 +13897, OA13897 +13898, OA13898 +13899, OA13899 +13900, OA13900 +13901, OA13901 +13902, OA13902 +13903, OA13903 +13904, OA13904 +13905, OA13905 +13906, OA13906 +13907, OA13907 +13908, OA13908 +13909, OA13909 +13910, OA13910 +13911, OA13911 +13912, OA13912 +13913, OA13913 +13914, OA13914 +13915, OA13915 +13916, OA13916 +13917, OA13917 +13918, OA13918 +13919, OA13919 +13920, OA13920 +13921, OA13921 +13922, OA13922 +13923, OA13923 +13924, OA13924 +13925, OA13925 +13926, OA13926 +13927, OA13927 +13928, OA13928 +13929, OA13929 +13930, OA13930 +13931, OA13931 +13932, OA13932 +13933, OA13933 +13934, OA13934 +13935, OA13935 +13936, OA13936 +13937, OA13937 +13938, OA13938 +13939, OA13939 +13940, OA13940 +13941, OA13941 +13942, OA13942 +13943, OA13943 +13944, OA13944 +13945, OA13945 +13946, OA13946 +13947, OA13947 +13948, OA13948 +13949, OA13949 +13950, OA13950 +13951, OA13951 +13952, OA13952 +13953, OA13953 +13954, OA13954 +13955, OA13955 +13956, OA13956 +13957, OA13957 +13958, OA13958 +13959, OA13959 +13960, OA13960 +13961, OA13961 +13962, OA13962 +13963, OA13963 +13964, OA13964 +13965, OA13965 +13966, OA13966 +13967, OA13967 +13968, OA13968 +13969, OA13969 +13970, OA13970 +13971, OA13971 +13972, OA13972 +13973, OA13973 +13974, OA13974 +13975, OA13975 +13976, OA13976 +13977, OA13977 +13978, OA13978 +13979, OA13979 +13980, OA13980 +13981, OA13981 +13982, OA13982 +13983, OA13983 +13984, OA13984 +13985, OA13985 +13986, OA13986 +13987, OA13987 +13988, OA13988 +13989, OA13989 +13990, OA13990 +13991, OA13991 +13992, OA13992 +13993, OA13993 +13994, OA13994 +13995, OA13995 +13996, OA13996 +13997, OA13997 +13998, OA13998 +13999, OA13999 +14000, OA14000 +14001, OA14001 +14002, OA14002 +14003, OA14003 +14004, OA14004 +14005, OA14005 +14006, OA14006 +14007, OA14007 +14008, OA14008 +14009, OA14009 +14010, OA14010 +14011, OA14011 +14012, OA14012 +14013, OA14013 +14014, OA14014 +14015, OA14015 +14016, OA14016 +14017, OA14017 +14018, OA14018 +14019, OA14019 +14020, OA14020 +14021, OA14021 +14022, OA14022 +14023, OA14023 +14024, OA14024 +14025, OA14025 +14026, OA14026 +14027, OA14027 +14028, OA14028 +14029, OA14029 +14030, OA14030 +14031, OA14031 +14032, OA14032 +14033, OA14033 +14034, OA14034 +14035, OA14035 +14036, OA14036 +14037, OA14037 +14038, OA14038 +14039, OA14039 +14040, OA14040 +14041, OA14041 +14042, OA14042 +14043, OA14043 +14044, OA14044 +14045, OA14045 +14046, OA14046 +14047, OA14047 +14048, OA14048 +14049, OA14049 +14050, OA14050 +14051, OA14051 +14052, OA14052 +14053, OA14053 +14054, OA14054 +14055, OA14055 +14056, OA14056 +14057, OA14057 +14058, OA14058 +14059, OA14059 +14060, OA14060 +14061, OA14061 +14062, OA14062 +14063, OA14063 +14064, OA14064 +14065, OA14065 +14066, OA14066 +14067, OA14067 +14068, OA14068 +14069, OA14069 +14070, OA14070 +14071, OA14071 +14072, OA14072 +14073, OA14073 +14074, OA14074 +14075, OA14075 +14076, OA14076 +14077, OA14077 +14078, OA14078 +14079, OA14079 +14080, OA14080 +14081, OA14081 +14082, OA14082 +14083, OA14083 +14084, OA14084 +14085, OA14085 +14086, OA14086 +14087, OA14087 +14088, OA14088 +14089, OA14089 +14090, OA14090 +14091, OA14091 +14092, OA14092 +14093, OA14093 +14094, OA14094 +14095, OA14095 +14096, OA14096 +14097, OA14097 +14098, OA14098 +14099, OA14099 +14100, OA14100 +14101, OA14101 +14102, OA14102 +14103, OA14103 +14104, OA14104 +14105, OA14105 +14106, OA14106 +14107, OA14107 +14108, OA14108 +14109, OA14109 +14110, OA14110 +14111, OA14111 +14112, OA14112 +14113, OA14113 +14114, OA14114 +14115, OA14115 +14116, OA14116 +14117, OA14117 +14118, OA14118 +14119, OA14119 +14120, OA14120 +14121, OA14121 +14122, OA14122 +14123, OA14123 +14124, OA14124 +14125, OA14125 +14126, OA14126 +14127, OA14127 +14128, OA14128 +14129, OA14129 +14130, OA14130 +14131, OA14131 +14132, OA14132 +14133, OA14133 +14134, OA14134 +14135, OA14135 +14136, OA14136 +14137, OA14137 +14138, OA14138 +14139, OA14139 +14140, OA14140 +14141, OA14141 +14142, OA14142 +14143, OA14143 +14144, OA14144 +14145, OA14145 +14146, OA14146 +14147, OA14147 +14148, OA14148 +14149, OA14149 +14150, OA14150 +14151, OA14151 +14152, OA14152 +14153, OA14153 +14154, OA14154 +14155, OA14155 +14156, OA14156 +14157, OA14157 +14158, OA14158 +14159, OA14159 +14160, OA14160 +14161, OA14161 +14162, OA14162 +14163, OA14163 +14164, OA14164 +14165, OA14165 +14166, OA14166 +14167, OA14167 +14168, OA14168 +14169, OA14169 +14170, OA14170 +14171, OA14171 +14172, OA14172 +14173, OA14173 +14174, OA14174 +14175, OA14175 +14176, OA14176 +14177, OA14177 +14178, OA14178 +14179, OA14179 +14180, OA14180 +14181, OA14181 +14182, OA14182 +14183, OA14183 +14184, OA14184 +14185, OA14185 +14186, OA14186 +14187, OA14187 +14188, OA14188 +14189, OA14189 +14190, OA14190 +14191, OA14191 +14192, OA14192 +14193, OA14193 +14194, OA14194 +14195, OA14195 +14196, OA14196 +14197, OA14197 +14198, OA14198 +14199, OA14199 +14200, OA14200 +14201, OA14201 +14202, OA14202 +14203, OA14203 +14204, OA14204 +14205, OA14205 +14206, OA14206 +14207, OA14207 +14208, OA14208 +14209, OA14209 +14210, OA14210 +14211, OA14211 +14212, OA14212 +14213, OA14213 +14214, OA14214 +14215, OA14215 +14216, OA14216 +14217, OA14217 +14218, OA14218 +14219, OA14219 +14220, OA14220 +14221, OA14221 +14222, OA14222 +14223, OA14223 +14224, OA14224 +14225, OA14225 +14226, OA14226 +14227, OA14227 +14228, OA14228 +14229, OA14229 +14230, OA14230 +14231, OA14231 +14232, OA14232 +14233, OA14233 +14234, OA14234 +14235, OA14235 +14236, OA14236 +14237, OA14237 +14238, OA14238 +14239, OA14239 +14240, OA14240 +14241, OA14241 +14242, OA14242 +14243, OA14243 +14244, OA14244 +14245, OA14245 +14246, OA14246 +14247, OA14247 +14248, OA14248 +14249, OA14249 +14250, OA14250 +14251, OA14251 +14252, OA14252 +14253, OA14253 +14254, OA14254 +14255, OA14255 +14256, OA14256 +14257, OA14257 +14258, OA14258 +14259, OA14259 +14260, OA14260 +14261, OA14261 +14262, OA14262 +14263, OA14263 +14264, OA14264 +14265, OA14265 +14266, OA14266 +14267, OA14267 +14268, OA14268 +14269, OA14269 +14270, OA14270 +14271, OA14271 +14272, OA14272 +14273, OA14273 +14274, OA14274 +14275, OA14275 +14276, OA14276 +14277, OA14277 +14278, OA14278 +14279, OA14279 +14280, OA14280 +14281, OA14281 +14282, OA14282 +14283, OA14283 +14284, OA14284 +14285, OA14285 +14286, OA14286 +14287, OA14287 +14288, OA14288 +14289, OA14289 +14290, OA14290 +14291, OA14291 +14292, OA14292 +14293, OA14293 +14294, OA14294 +14295, OA14295 +14296, OA14296 +14297, OA14297 +14298, OA14298 +14299, OA14299 +14300, OA14300 +14301, OA14301 +14302, OA14302 +14303, OA14303 +14304, OA14304 +14305, OA14305 +14306, OA14306 +14307, OA14307 +14308, OA14308 +14309, OA14309 +14310, OA14310 +14311, OA14311 +14312, OA14312 +14313, OA14313 +14314, OA14314 +14315, OA14315 +14316, OA14316 +14317, OA14317 +14318, OA14318 +14319, OA14319 +14320, OA14320 +14321, OA14321 +14322, OA14322 +14323, OA14323 +14324, OA14324 +14325, OA14325 +14326, OA14326 +14327, OA14327 +14328, OA14328 +14329, OA14329 +14330, OA14330 +14331, OA14331 +14332, OA14332 +14333, OA14333 +14334, OA14334 +14335, OA14335 +14336, OA14336 +14337, OA14337 +14338, OA14338 +14339, OA14339 +14340, OA14340 +14341, OA14341 +14342, OA14342 +14343, OA14343 +14344, OA14344 +14345, OA14345 +14346, OA14346 +14347, OA14347 +14348, OA14348 +14349, OA14349 +14350, OA14350 +14351, OA14351 +14352, OA14352 +14353, OA14353 +14354, OA14354 +14355, OA14355 +14356, OA14356 +14357, OA14357 +14358, OA14358 +14359, OA14359 +14360, OA14360 +14361, OA14361 +14362, OA14362 +14363, OA14363 +14364, OA14364 +14365, OA14365 +14366, OA14366 +14367, OA14367 +14368, OA14368 +14369, OA14369 +14370, OA14370 +14371, OA14371 +14372, OA14372 +14373, OA14373 +14374, OA14374 +14375, OA14375 +14376, OA14376 +14377, OA14377 +14378, OA14378 +14379, OA14379 +14380, OA14380 +14381, OA14381 +14382, OA14382 +14383, OA14383 +14384, OA14384 +14385, OA14385 +14386, OA14386 +14387, OA14387 +14388, OA14388 +14389, OA14389 +14390, OA14390 +14391, OA14391 +14392, OA14392 +14393, OA14393 +14394, OA14394 +14395, OA14395 +14396, OA14396 +14397, OA14397 +14398, OA14398 +14399, OA14399 +14400, OA14400 +14401, OA14401 +14402, OA14402 +14403, OA14403 +14404, OA14404 +14405, OA14405 +14406, OA14406 +14407, OA14407 +14408, OA14408 +14409, OA14409 +14410, OA14410 +14411, OA14411 +14412, OA14412 +14413, OA14413 +14414, OA14414 +14415, OA14415 +14416, OA14416 +14417, OA14417 +14418, OA14418 +14419, OA14419 +14420, OA14420 +14421, OA14421 +14422, OA14422 +14423, OA14423 +14424, OA14424 +14425, OA14425 +14426, OA14426 +14427, OA14427 +14428, OA14428 +14429, OA14429 +14430, OA14430 +14431, OA14431 +14432, OA14432 +14433, OA14433 +14434, OA14434 +14435, OA14435 +14436, OA14436 +14437, OA14437 +14438, OA14438 +14439, OA14439 +14440, OA14440 +14441, OA14441 +14442, OA14442 +14443, OA14443 +14444, OA14444 +14445, OA14445 +14446, OA14446 +14447, OA14447 +14448, OA14448 +14449, OA14449 +14450, OA14450 +14451, OA14451 +14452, OA14452 +14453, OA14453 +14454, OA14454 +14455, OA14455 +14456, OA14456 +14457, OA14457 +14458, OA14458 +14459, OA14459 +14460, OA14460 +14461, OA14461 +14462, OA14462 +14463, OA14463 +14464, OA14464 +14465, OA14465 +14466, OA14466 +14467, OA14467 +14468, OA14468 +14469, OA14469 +14470, OA14470 +14471, OA14471 +14472, OA14472 +14473, OA14473 +14474, OA14474 +14475, OA14475 +14476, OA14476 +14477, OA14477 +14478, OA14478 +14479, OA14479 +14480, OA14480 +14481, OA14481 +14482, OA14482 +14483, OA14483 +14484, OA14484 +14485, OA14485 +14486, OA14486 +14487, OA14487 +14488, OA14488 +14489, OA14489 +14490, OA14490 +14491, OA14491 +14492, OA14492 +14493, OA14493 +14494, OA14494 +14495, OA14495 +14496, OA14496 +14497, OA14497 +14498, OA14498 +14499, OA14499 +14500, OA14500 +14501, OA14501 +14502, OA14502 +14503, OA14503 +14504, OA14504 +14505, OA14505 +14506, OA14506 +14507, OA14507 +14508, OA14508 +14509, OA14509 +14510, OA14510 +14511, OA14511 +14512, OA14512 +14513, OA14513 +14514, OA14514 +14515, OA14515 +14516, OA14516 +14517, OA14517 +14518, OA14518 +14519, OA14519 +14520, OA14520 +14521, OA14521 +14522, OA14522 +14523, OA14523 +14524, OA14524 +14525, OA14525 +14526, OA14526 +14527, OA14527 +14528, OA14528 +14529, OA14529 +14530, OA14530 +14531, OA14531 +14532, OA14532 +14533, OA14533 +14534, OA14534 +14535, OA14535 +14536, OA14536 +14537, OA14537 +14538, OA14538 +14539, OA14539 +14540, OA14540 +14541, OA14541 +14542, OA14542 +14543, OA14543 +14544, OA14544 +14545, OA14545 +14546, OA14546 +14547, OA14547 +14548, OA14548 +14549, OA14549 +14550, OA14550 +14551, OA14551 +14552, OA14552 +14553, OA14553 +14554, OA14554 +14555, OA14555 +14556, OA14556 +14557, OA14557 +14558, OA14558 +14559, OA14559 +14560, OA14560 +14561, OA14561 +14562, OA14562 +14563, OA14563 +14564, OA14564 +14565, OA14565 +14566, OA14566 +14567, OA14567 +14568, OA14568 +14569, OA14569 +14570, OA14570 +14571, OA14571 +14572, OA14572 +14573, OA14573 +14574, OA14574 +14575, OA14575 +14576, OA14576 +14577, OA14577 +14578, OA14578 +14579, OA14579 +14580, OA14580 +14581, OA14581 +14582, OA14582 +14583, OA14583 +14584, OA14584 +14585, OA14585 +14586, OA14586 +14587, OA14587 +14588, OA14588 +14589, OA14589 +14590, OA14590 +14591, OA14591 +14592, OA14592 +14593, OA14593 +14594, OA14594 +14595, OA14595 +14596, OA14596 +14597, OA14597 +14598, OA14598 +14599, OA14599 +14600, OA14600 +14601, OA14601 +14602, OA14602 +14603, OA14603 +14604, OA14604 +14605, OA14605 +14606, OA14606 +14607, OA14607 +14608, OA14608 +14609, OA14609 +14610, OA14610 +14611, OA14611 +14612, OA14612 +14613, OA14613 +14614, OA14614 +14615, OA14615 +14616, OA14616 +14617, OA14617 +14618, OA14618 +14619, OA14619 +14620, OA14620 +14621, OA14621 +14622, OA14622 +14623, OA14623 +14624, OA14624 +14625, OA14625 +14626, OA14626 +14627, OA14627 +14628, OA14628 +14629, OA14629 +14630, OA14630 +14631, OA14631 +14632, OA14632 +14633, OA14633 +14634, OA14634 +14635, OA14635 +14636, OA14636 +14637, OA14637 +14638, OA14638 +14639, OA14639 +14640, OA14640 +14641, OA14641 +14642, OA14642 +14643, OA14643 +14644, OA14644 +14645, OA14645 +14646, OA14646 +14647, OA14647 +14648, OA14648 +14649, OA14649 +14650, OA14650 +14651, OA14651 +14652, OA14652 +14653, OA14653 +14654, OA14654 +14655, OA14655 +14656, OA14656 +14657, OA14657 +14658, OA14658 +14659, OA14659 +14660, OA14660 +14661, OA14661 +14662, OA14662 +14663, OA14663 +14664, OA14664 +14665, OA14665 +14666, OA14666 +14667, OA14667 +14668, OA14668 +14669, OA14669 +14670, OA14670 +14671, OA14671 +14672, OA14672 +14673, OA14673 +14674, OA14674 +14675, OA14675 +14676, OA14676 +14677, OA14677 +14678, OA14678 +14679, OA14679 +14680, OA14680 +14681, OA14681 +14682, OA14682 +14683, OA14683 +14684, OA14684 +14685, OA14685 +14686, OA14686 +14687, OA14687 +14688, OA14688 +14689, OA14689 +14690, OA14690 +14691, OA14691 +14692, OA14692 +14693, OA14693 +14694, OA14694 +14695, OA14695 +14696, OA14696 +14697, OA14697 +14698, OA14698 +14699, OA14699 +14700, OA14700 +14701, OA14701 +14702, OA14702 +14703, OA14703 +14704, OA14704 +14705, OA14705 +14706, OA14706 +14707, OA14707 +14708, OA14708 +14709, OA14709 +14710, OA14710 +14711, OA14711 +14712, OA14712 +14713, OA14713 +14714, OA14714 +14715, OA14715 +14716, OA14716 +14717, OA14717 +14718, OA14718 +14719, OA14719 +14720, OA14720 +14721, OA14721 +14722, OA14722 +14723, OA14723 +14724, OA14724 +14725, OA14725 +14726, OA14726 +14727, OA14727 +14728, OA14728 +14729, OA14729 +14730, OA14730 +14731, OA14731 +14732, OA14732 +14733, OA14733 +14734, OA14734 +14735, OA14735 +14736, OA14736 +14737, OA14737 +14738, OA14738 +14739, OA14739 +14740, OA14740 +14741, OA14741 +14742, OA14742 +14743, OA14743 +14744, OA14744 +14745, OA14745 +14746, OA14746 +14747, OA14747 +14748, OA14748 +14749, OA14749 +14750, OA14750 +14751, OA14751 +14752, OA14752 +14753, OA14753 +14754, OA14754 +14755, OA14755 +14756, OA14756 +14757, OA14757 +14758, OA14758 +14759, OA14759 +14760, OA14760 +14761, OA14761 +14762, OA14762 +14763, OA14763 +14764, OA14764 +14765, OA14765 +14766, OA14766 +14767, OA14767 +14768, OA14768 +14769, OA14769 +14770, OA14770 +14771, OA14771 +14772, OA14772 +14773, OA14773 +14774, OA14774 +14775, OA14775 +14776, OA14776 +14777, OA14777 +14778, OA14778 +14779, OA14779 +14780, OA14780 +14781, OA14781 +14782, OA14782 +14783, OA14783 +14784, OA14784 +14785, OA14785 +14786, OA14786 +14787, OA14787 +14788, OA14788 +14789, OA14789 +14790, OA14790 +14791, OA14791 +14792, OA14792 +14793, OA14793 +14794, OA14794 +14795, OA14795 +14796, OA14796 +14797, OA14797 +14798, OA14798 +14799, OA14799 +14800, OA14800 +14801, OA14801 +14802, OA14802 +14803, OA14803 +14804, OA14804 +14805, OA14805 +14806, OA14806 +14807, OA14807 +14808, OA14808 +14809, OA14809 +14810, OA14810 +14811, OA14811 +14812, OA14812 +14813, OA14813 +14814, OA14814 +14815, OA14815 +14816, OA14816 +14817, OA14817 +14818, OA14818 +14819, OA14819 +14820, OA14820 +14821, OA14821 +14822, OA14822 +14823, OA14823 +14824, OA14824 +14825, OA14825 +14826, OA14826 +14827, OA14827 +14828, OA14828 +14829, OA14829 +14830, OA14830 +14831, OA14831 +14832, OA14832 +14833, OA14833 +14834, OA14834 +14835, OA14835 +14836, OA14836 +14837, OA14837 +14838, OA14838 +14839, OA14839 +14840, OA14840 +14841, OA14841 +14842, OA14842 +14843, OA14843 +14844, OA14844 +14845, OA14845 +14846, OA14846 +14847, OA14847 +14848, OA14848 +14849, OA14849 +14850, OA14850 +14851, OA14851 +14852, OA14852 +14853, OA14853 +14854, OA14854 +14855, OA14855 +14856, OA14856 +14857, OA14857 +14858, OA14858 +14859, OA14859 +14860, OA14860 +14861, OA14861 +14862, OA14862 +14863, OA14863 +14864, OA14864 +14865, OA14865 +14866, OA14866 +14867, OA14867 +14868, OA14868 +14869, OA14869 +14870, OA14870 +14871, OA14871 +14872, OA14872 +14873, OA14873 +14874, OA14874 +14875, OA14875 +14876, OA14876 +14877, OA14877 +14878, OA14878 +14879, OA14879 +14880, OA14880 +14881, OA14881 +14882, OA14882 +14883, OA14883 +14884, OA14884 +14885, OA14885 +14886, OA14886 +14887, OA14887 +14888, OA14888 +14889, OA14889 +14890, OA14890 +14891, OA14891 +14892, OA14892 +14893, OA14893 +14894, OA14894 +14895, OA14895 +14896, OA14896 +14897, OA14897 +14898, OA14898 +14899, OA14899 +14900, OA14900 +14901, OA14901 +14902, OA14902 +14903, OA14903 +14904, OA14904 +14905, OA14905 +14906, OA14906 +14907, OA14907 +14908, OA14908 +14909, OA14909 +14910, OA14910 +14911, OA14911 +14912, OA14912 +14913, OA14913 +14914, OA14914 +14915, OA14915 +14916, OA14916 +14917, OA14917 +14918, OA14918 +14919, OA14919 +14920, OA14920 +14921, OA14921 +14922, OA14922 +14923, OA14923 +14924, OA14924 +14925, OA14925 +14926, OA14926 +14927, OA14927 +14928, OA14928 +14929, OA14929 +14930, OA14930 +14931, OA14931 +14932, OA14932 +14933, OA14933 +14934, OA14934 +14935, OA14935 +14936, OA14936 +14937, OA14937 +14938, OA14938 +14939, OA14939 +14940, OA14940 +14941, OA14941 +14942, OA14942 +14943, OA14943 +14944, OA14944 +14945, OA14945 +14946, OA14946 +14947, OA14947 +14948, OA14948 +14949, OA14949 +14950, OA14950 +14951, OA14951 +14952, OA14952 +14953, OA14953 +14954, OA14954 +14955, OA14955 +14956, OA14956 +14957, OA14957 +14958, OA14958 +14959, OA14959 +14960, OA14960 +14961, OA14961 +14962, OA14962 +14963, OA14963 +14964, OA14964 +14965, OA14965 +14966, OA14966 +14967, OA14967 +14968, OA14968 +14969, OA14969 +14970, OA14970 +14971, OA14971 +14972, OA14972 +14973, OA14973 +14974, OA14974 +14975, OA14975 +14976, OA14976 +14977, OA14977 +14978, OA14978 +14979, OA14979 +14980, OA14980 +14981, OA14981 +14982, OA14982 +14983, OA14983 +14984, OA14984 +14985, OA14985 +14986, OA14986 +14987, OA14987 +14988, OA14988 +14989, OA14989 +14990, OA14990 +14991, OA14991 +14992, OA14992 +14993, OA14993 +14994, OA14994 +14995, OA14995 +14996, OA14996 +14997, OA14997 +14998, OA14998 +14999, OA14999 +15000, OA15000 +15001, OA15001 +15002, OA15002 +15003, OA15003 +15004, OA15004 +15005, OA15005 +15006, OA15006 +15007, OA15007 +15008, OA15008 +15009, OA15009 +15010, OA15010 +15011, OA15011 +15012, OA15012 +15013, OA15013 +15014, OA15014 +15015, OA15015 +15016, OA15016 +15017, OA15017 +15018, OA15018 +15019, OA15019 +15020, OA15020 +15021, OA15021 +15022, OA15022 +15023, OA15023 +15024, OA15024 +15025, OA15025 +15026, OA15026 +15027, OA15027 +15028, OA15028 +15029, OA15029 +15030, OA15030 +15031, OA15031 +15032, OA15032 +15033, OA15033 +15034, OA15034 +15035, OA15035 +15036, OA15036 +15037, OA15037 +15038, OA15038 +15039, OA15039 +15040, OA15040 +15041, OA15041 +15042, OA15042 +15043, OA15043 +15044, OA15044 +15045, OA15045 +15046, OA15046 +15047, OA15047 +15048, OA15048 +15049, OA15049 +15050, OA15050 +15051, OA15051 +15052, OA15052 +15053, OA15053 +15054, OA15054 +15055, OA15055 +15056, OA15056 +15057, OA15057 +15058, OA15058 +15059, OA15059 +15060, OA15060 +15061, OA15061 +15062, OA15062 +15063, OA15063 +15064, OA15064 +15065, OA15065 +15066, OA15066 +15067, OA15067 +15068, OA15068 +15069, OA15069 +15070, OA15070 +15071, OA15071 +15072, OA15072 +15073, OA15073 +15074, OA15074 +15075, OA15075 +15076, OA15076 +15077, OA15077 +15078, OA15078 +15079, OA15079 +15080, OA15080 +15081, OA15081 +15082, OA15082 +15083, OA15083 +15084, OA15084 +15085, OA15085 +15086, OA15086 +15087, OA15087 +15088, OA15088 +15089, OA15089 +15090, OA15090 +15091, OA15091 +15092, OA15092 +15093, OA15093 +15094, OA15094 +15095, OA15095 +15096, OA15096 +15097, OA15097 +15098, OA15098 +15099, OA15099 +15100, OA15100 +15101, OA15101 +15102, OA15102 +15103, OA15103 +15104, OA15104 +15105, OA15105 +15106, OA15106 +15107, OA15107 +15108, OA15108 +15109, OA15109 +15110, OA15110 +15111, OA15111 +15112, OA15112 +15113, OA15113 +15114, OA15114 +15115, OA15115 +15116, OA15116 +15117, OA15117 +15118, OA15118 +15119, OA15119 +15120, OA15120 +15121, OA15121 +15122, OA15122 +15123, OA15123 +15124, OA15124 +15125, OA15125 +15126, OA15126 +15127, OA15127 +15128, OA15128 +15129, OA15129 +15130, OA15130 +15131, OA15131 +15132, OA15132 +15133, OA15133 +15134, OA15134 +15135, OA15135 +15136, OA15136 +15137, OA15137 +15138, OA15138 +15139, OA15139 +15140, OA15140 +15141, OA15141 +15142, OA15142 +15143, OA15143 +15144, OA15144 +15145, OA15145 +15146, OA15146 +15147, OA15147 +15148, OA15148 +15149, OA15149 +15150, OA15150 +15151, OA15151 +15152, OA15152 +15153, OA15153 +15154, OA15154 +15155, OA15155 +15156, OA15156 +15157, OA15157 +15158, OA15158 +15159, OA15159 +15160, OA15160 +15161, OA15161 +15162, OA15162 +15163, OA15163 +15164, OA15164 +15165, OA15165 +15166, OA15166 +15167, OA15167 +15168, OA15168 +15169, OA15169 +15170, OA15170 +15171, OA15171 +15172, OA15172 +15173, OA15173 +15174, OA15174 +15175, OA15175 +15176, OA15176 +15177, OA15177 +15178, OA15178 +15179, OA15179 +15180, OA15180 +15181, OA15181 +15182, OA15182 +15183, OA15183 +15184, OA15184 +15185, OA15185 +15186, OA15186 +15187, OA15187 +15188, OA15188 +15189, OA15189 +15190, OA15190 +15191, OA15191 +15192, OA15192 +15193, OA15193 +15194, OA15194 +15195, OA15195 +15196, OA15196 +15197, OA15197 +15198, OA15198 +15199, OA15199 +15200, OA15200 +15201, OA15201 +15202, OA15202 +15203, OA15203 +15204, OA15204 +15205, OA15205 +15206, OA15206 +15207, OA15207 +15208, OA15208 +15209, OA15209 +15210, OA15210 +15211, OA15211 +15212, OA15212 +15213, OA15213 +15214, OA15214 +15215, OA15215 +15216, OA15216 +15217, OA15217 +15218, OA15218 +15219, OA15219 +15220, OA15220 +15221, OA15221 +15222, OA15222 +15223, OA15223 +15224, OA15224 +15225, OA15225 +15226, OA15226 +15227, OA15227 +15228, OA15228 +15229, OA15229 +15230, OA15230 +15231, OA15231 +15232, OA15232 +15233, OA15233 +15234, OA15234 +15235, OA15235 +15236, OA15236 +15237, OA15237 +15238, OA15238 +15239, OA15239 +15240, OA15240 +15241, OA15241 +15242, OA15242 +15243, OA15243 +15244, OA15244 +15245, OA15245 +15246, OA15246 +15247, OA15247 +15248, OA15248 +15249, OA15249 +15250, OA15250 +15251, OA15251 +15252, OA15252 +15253, OA15253 +15254, OA15254 +15255, OA15255 +15256, OA15256 +15257, OA15257 +15258, OA15258 +15259, OA15259 +15260, OA15260 +15261, OA15261 +15262, OA15262 +15263, OA15263 +15264, OA15264 +15265, OA15265 +15266, OA15266 +15267, OA15267 +15268, OA15268 +15269, OA15269 +15270, OA15270 +15271, OA15271 +15272, OA15272 +15273, OA15273 +15274, OA15274 +15275, OA15275 +15276, OA15276 +15277, OA15277 +15278, OA15278 +15279, OA15279 +15280, OA15280 +15281, OA15281 +15282, OA15282 +15283, OA15283 +15284, OA15284 +15285, OA15285 +15286, OA15286 +15287, OA15287 +15288, OA15288 +15289, OA15289 +15290, OA15290 +15291, OA15291 +15292, OA15292 +15293, OA15293 +15294, OA15294 +15295, OA15295 +15296, OA15296 +15297, OA15297 +15298, OA15298 +15299, OA15299 +15300, OA15300 +15301, OA15301 +15302, OA15302 +15303, OA15303 +15304, OA15304 +15305, OA15305 +15306, OA15306 +15307, OA15307 +15308, OA15308 +15309, OA15309 +15310, OA15310 +15311, OA15311 +15312, OA15312 +15313, OA15313 +15314, OA15314 +15315, OA15315 +15316, OA15316 +15317, OA15317 +15318, OA15318 +15319, OA15319 +15320, OA15320 +15321, OA15321 +15322, OA15322 +15323, OA15323 +15324, OA15324 +15325, OA15325 +15326, OA15326 +15327, OA15327 +15328, OA15328 +15329, OA15329 +15330, OA15330 +15331, OA15331 +15332, OA15332 +15333, OA15333 +15334, OA15334 +15335, OA15335 +15336, OA15336 +15337, OA15337 +15338, OA15338 +15339, OA15339 +15340, OA15340 +15341, OA15341 +15342, OA15342 +15343, OA15343 +15344, OA15344 +15345, OA15345 +15346, OA15346 +15347, OA15347 +15348, OA15348 +15349, OA15349 +15350, OA15350 +15351, OA15351 +15352, OA15352 +15353, OA15353 +15354, OA15354 +15355, OA15355 +15356, OA15356 +15357, OA15357 +15358, OA15358 +15359, OA15359 +15360, OA15360 +15361, OA15361 +15362, OA15362 +15363, OA15363 +15364, OA15364 +15365, OA15365 +15366, OA15366 +15367, OA15367 +15368, OA15368 +15369, OA15369 +15370, OA15370 +15371, OA15371 +15372, OA15372 +15373, OA15373 +15374, OA15374 +15375, OA15375 +15376, OA15376 +15377, OA15377 +15378, OA15378 +15379, OA15379 +15380, OA15380 +15381, OA15381 +15382, OA15382 +15383, OA15383 +15384, OA15384 +15385, OA15385 +15386, OA15386 +15387, OA15387 +15388, OA15388 +15389, OA15389 +15390, OA15390 +15391, OA15391 +15392, OA15392 +15393, OA15393 +15394, OA15394 +15395, OA15395 +15396, OA15396 +15397, OA15397 +15398, OA15398 +15399, OA15399 +15400, OA15400 +15401, OA15401 +15402, OA15402 +15403, OA15403 +15404, OA15404 +15405, OA15405 +15406, OA15406 +15407, OA15407 +15408, OA15408 +15409, OA15409 +15410, OA15410 +15411, OA15411 +15412, OA15412 +15413, OA15413 +15414, OA15414 +15415, OA15415 +15416, OA15416 +15417, OA15417 +15418, OA15418 +15419, OA15419 +15420, OA15420 +15421, OA15421 +15422, OA15422 +15423, OA15423 +15424, OA15424 +15425, OA15425 +15426, OA15426 +15427, OA15427 +15428, OA15428 +15429, OA15429 +15430, OA15430 +15431, OA15431 +15432, OA15432 +15433, OA15433 +15434, OA15434 +15435, OA15435 +15436, OA15436 +15437, OA15437 +15438, OA15438 +15439, OA15439 +15440, OA15440 +15441, OA15441 +15442, OA15442 +15443, OA15443 +15444, OA15444 +15445, OA15445 +15446, OA15446 +15447, OA15447 +15448, OA15448 +15449, OA15449 +15450, OA15450 +15451, OA15451 +15452, OA15452 +15453, OA15453 +15454, OA15454 +15455, OA15455 +15456, OA15456 +15457, OA15457 +15458, OA15458 +15459, OA15459 +15460, OA15460 +15461, OA15461 +15462, OA15462 +15463, OA15463 +15464, OA15464 +15465, OA15465 +15466, OA15466 +15467, OA15467 +15468, OA15468 +15469, OA15469 +15470, OA15470 +15471, OA15471 +15472, OA15472 +15473, OA15473 +15474, OA15474 +15475, OA15475 +15476, OA15476 +15477, OA15477 +15478, OA15478 +15479, OA15479 +15480, OA15480 +15481, OA15481 +15482, OA15482 +15483, OA15483 +15484, OA15484 +15485, OA15485 +15486, OA15486 +15487, OA15487 +15488, OA15488 +15489, OA15489 +15490, OA15490 +15491, OA15491 +15492, OA15492 +15493, OA15493 +15494, OA15494 +15495, OA15495 +15496, OA15496 +15497, OA15497 +15498, OA15498 +15499, OA15499 +15500, OA15500 +15501, OA15501 +15502, OA15502 +15503, OA15503 +15504, OA15504 +15505, OA15505 +15506, OA15506 +15507, OA15507 +15508, OA15508 +15509, OA15509 +15510, OA15510 +15511, OA15511 +15512, OA15512 +15513, OA15513 +15514, OA15514 +15515, OA15515 +15516, OA15516 +15517, OA15517 +15518, OA15518 +15519, OA15519 +15520, OA15520 +15521, OA15521 +15522, OA15522 +15523, OA15523 +15524, OA15524 +15525, OA15525 +15526, OA15526 +15527, OA15527 +15528, OA15528 +15529, OA15529 +15530, OA15530 +15531, OA15531 +15532, OA15532 +15533, OA15533 +15534, OA15534 +15535, OA15535 +15536, OA15536 +15537, OA15537 +15538, OA15538 +15539, OA15539 +15540, OA15540 +15541, OA15541 +15542, OA15542 +15543, OA15543 +15544, OA15544 +15545, OA15545 +15546, OA15546 +15547, OA15547 +15548, OA15548 +15549, OA15549 +15550, OA15550 +15551, OA15551 +15552, OA15552 +15553, OA15553 +15554, OA15554 +15555, OA15555 +15556, OA15556 +15557, OA15557 +15558, OA15558 +15559, OA15559 +15560, OA15560 +15561, OA15561 +15562, OA15562 +15563, OA15563 +15564, OA15564 +15565, OA15565 +15566, OA15566 +15567, OA15567 +15568, OA15568 +15569, OA15569 +15570, OA15570 +15571, OA15571 +15572, OA15572 +15573, OA15573 +15574, OA15574 +15575, OA15575 +15576, OA15576 +15577, OA15577 +15578, OA15578 +15579, OA15579 +15580, OA15580 +15581, OA15581 +15582, OA15582 +15583, OA15583 +15584, OA15584 +15585, OA15585 +15586, OA15586 +15587, OA15587 +15588, OA15588 +15589, OA15589 +15590, OA15590 +15591, OA15591 +15592, OA15592 +15593, OA15593 +15594, OA15594 +15595, OA15595 +15596, OA15596 +15597, OA15597 +15598, OA15598 +15599, OA15599 +15600, OA15600 +15601, OA15601 +15602, OA15602 +15603, OA15603 +15604, OA15604 +15605, OA15605 +15606, OA15606 +15607, OA15607 +15608, OA15608 +15609, OA15609 +15610, OA15610 +15611, OA15611 +15612, OA15612 +15613, OA15613 +15614, OA15614 +15615, OA15615 +15616, OA15616 +15617, OA15617 +15618, OA15618 +15619, OA15619 +15620, OA15620 +15621, OA15621 +15622, OA15622 +15623, OA15623 +15624, OA15624 +15625, OA15625 +15626, OA15626 +15627, OA15627 +15628, OA15628 +15629, OA15629 +15630, OA15630 +15631, OA15631 +15632, OA15632 +15633, OA15633 +15634, OA15634 +15635, OA15635 +15636, OA15636 +15637, OA15637 +15638, OA15638 +15639, OA15639 +15640, OA15640 +15641, OA15641 +15642, OA15642 +15643, OA15643 +15644, OA15644 +15645, OA15645 +15646, OA15646 +15647, OA15647 +15648, OA15648 +15649, OA15649 +15650, OA15650 +15651, OA15651 +15652, OA15652 +15653, OA15653 +15654, OA15654 +15655, OA15655 +15656, OA15656 +15657, OA15657 +15658, OA15658 +15659, OA15659 +15660, OA15660 +15661, OA15661 +15662, OA15662 +15663, OA15663 +15664, OA15664 +15665, OA15665 +15666, OA15666 +15667, OA15667 +15668, OA15668 +15669, OA15669 +15670, OA15670 +15671, OA15671 +15672, OA15672 +15673, OA15673 +15674, OA15674 +15675, OA15675 +15676, OA15676 +15677, OA15677 +15678, OA15678 +15679, OA15679 +15680, OA15680 +15681, OA15681 +15682, OA15682 +15683, OA15683 +15684, OA15684 +15685, OA15685 +15686, OA15686 +15687, OA15687 +15688, OA15688 +15689, OA15689 +15690, OA15690 +15691, OA15691 +15692, OA15692 +15693, OA15693 +15694, OA15694 +15695, OA15695 +15696, OA15696 +15697, OA15697 +15698, OA15698 +15699, OA15699 +15700, OA15700 +15701, OA15701 +15702, OA15702 +15703, OA15703 +15704, OA15704 +15705, OA15705 +15706, OA15706 +15707, OA15707 +15708, OA15708 +15709, OA15709 +15710, OA15710 +15711, OA15711 +15712, OA15712 +15713, OA15713 +15714, OA15714 +15715, OA15715 +15716, OA15716 +15717, OA15717 +15718, OA15718 +15719, OA15719 +15720, OA15720 +15721, OA15721 +15722, OA15722 +15723, OA15723 +15724, OA15724 +15725, OA15725 +15726, OA15726 +15727, OA15727 +15728, OA15728 +15729, OA15729 +15730, OA15730 +15731, OA15731 +15732, OA15732 +15733, OA15733 +15734, OA15734 +15735, OA15735 +15736, OA15736 +15737, OA15737 +15738, OA15738 +15739, OA15739 +15740, OA15740 +15741, OA15741 +15742, OA15742 +15743, OA15743 +15744, OA15744 +15745, OA15745 +15746, OA15746 +15747, OA15747 +15748, OA15748 +15749, OA15749 +15750, OA15750 +15751, OA15751 +15752, OA15752 +15753, OA15753 +15754, OA15754 +15755, OA15755 +15756, OA15756 +15757, OA15757 +15758, OA15758 +15759, OA15759 +15760, OA15760 +15761, OA15761 +15762, OA15762 +15763, OA15763 +15764, OA15764 +15765, OA15765 +15766, OA15766 +15767, OA15767 +15768, OA15768 +15769, OA15769 +15770, OA15770 +15771, OA15771 +15772, OA15772 +15773, OA15773 +15774, OA15774 +15775, OA15775 +15776, OA15776 +15777, OA15777 +15778, OA15778 +15779, OA15779 +15780, OA15780 +15781, OA15781 +15782, OA15782 +15783, OA15783 +15784, OA15784 +15785, OA15785 +15786, OA15786 +15787, OA15787 +15788, OA15788 +15789, OA15789 +15790, OA15790 +15791, OA15791 +15792, OA15792 +15793, OA15793 +15794, OA15794 +15795, OA15795 +15796, OA15796 +15797, OA15797 +15798, OA15798 +15799, OA15799 +15800, OA15800 +15801, OA15801 +15802, OA15802 +15803, OA15803 +15804, OA15804 +15805, OA15805 +15806, OA15806 +15807, OA15807 +15808, OA15808 +15809, OA15809 +15810, OA15810 +15811, OA15811 +15812, OA15812 +15813, OA15813 +15814, OA15814 +15815, OA15815 +15816, OA15816 +15817, OA15817 +15818, OA15818 +15819, OA15819 +15820, OA15820 +15821, OA15821 +15822, OA15822 +15823, OA15823 +15824, OA15824 +15825, OA15825 +15826, OA15826 +15827, OA15827 +15828, OA15828 +15829, OA15829 +15830, OA15830 +15831, OA15831 +15832, OA15832 +15833, OA15833 +15834, OA15834 +15835, OA15835 +15836, OA15836 +15837, OA15837 +15838, OA15838 +15839, OA15839 +15840, OA15840 +15841, OA15841 +15842, OA15842 +15843, OA15843 +15844, OA15844 +15845, OA15845 +15846, OA15846 +15847, OA15847 +15848, OA15848 +15849, OA15849 +15850, OA15850 +15851, OA15851 +15852, OA15852 +15853, OA15853 +15854, OA15854 +15855, OA15855 +15856, OA15856 +15857, OA15857 +15858, OA15858 +15859, OA15859 +15860, OA15860 +15861, OA15861 +15862, OA15862 +15863, OA15863 +15864, OA15864 +15865, OA15865 +15866, OA15866 +15867, OA15867 +15868, OA15868 +15869, OA15869 +15870, OA15870 +15871, OA15871 +15872, OA15872 +15873, OA15873 +15874, OA15874 +15875, OA15875 +15876, OA15876 +15877, OA15877 +15878, OA15878 +15879, OA15879 +15880, OA15880 +15881, OA15881 +15882, OA15882 +15883, OA15883 +15884, OA15884 +15885, OA15885 +15886, OA15886 +15887, OA15887 +15888, OA15888 +15889, OA15889 +15890, OA15890 +15891, OA15891 +15892, OA15892 +15893, OA15893 +15894, OA15894 +15895, OA15895 +15896, OA15896 +15897, OA15897 +15898, OA15898 +15899, OA15899 +15900, OA15900 +15901, OA15901 +15902, OA15902 +15903, OA15903 +15904, OA15904 +15905, OA15905 +15906, OA15906 +15907, OA15907 +15908, OA15908 +15909, OA15909 +15910, OA15910 +15911, OA15911 +15912, OA15912 +15913, OA15913 +15914, OA15914 +15915, OA15915 +15916, OA15916 +15917, OA15917 +15918, OA15918 +15919, OA15919 +15920, OA15920 +15921, OA15921 +15922, OA15922 +15923, OA15923 +15924, OA15924 +15925, OA15925 +15926, OA15926 +15927, OA15927 +15928, OA15928 +15929, OA15929 +15930, OA15930 +15931, OA15931 +15932, OA15932 +15933, OA15933 +15934, OA15934 +15935, OA15935 +15936, OA15936 +15937, OA15937 +15938, OA15938 +15939, OA15939 +15940, OA15940 +15941, OA15941 +15942, OA15942 +15943, OA15943 +15944, OA15944 +15945, OA15945 +15946, OA15946 +15947, OA15947 +15948, OA15948 +15949, OA15949 +15950, OA15950 +15951, OA15951 +15952, OA15952 +15953, OA15953 +15954, OA15954 +15955, OA15955 +15956, OA15956 +15957, OA15957 +15958, OA15958 +15959, OA15959 +15960, OA15960 +15961, OA15961 +15962, OA15962 +15963, OA15963 +15964, OA15964 +15965, OA15965 +15966, OA15966 +15967, OA15967 +15968, OA15968 +15969, OA15969 +15970, OA15970 +15971, OA15971 +15972, OA15972 +15973, OA15973 +15974, OA15974 +15975, OA15975 +15976, OA15976 +15977, OA15977 +15978, OA15978 +15979, OA15979 +15980, OA15980 +15981, OA15981 +15982, OA15982 +15983, OA15983 +15984, OA15984 +15985, OA15985 +15986, OA15986 +15987, OA15987 +15988, OA15988 +15989, OA15989 +15990, OA15990 +15991, OA15991 +15992, OA15992 +15993, OA15993 +15994, OA15994 +15995, OA15995 +15996, OA15996 +15997, OA15997 +15998, OA15998 +15999, OA15999 +16000, OA16000 +16001, OA16001 +16002, OA16002 +16003, OA16003 +16004, OA16004 +16005, OA16005 +16006, OA16006 +16007, OA16007 +16008, OA16008 +16009, OA16009 +16010, OA16010 +16011, OA16011 +16012, OA16012 +16013, OA16013 +16014, OA16014 +16015, OA16015 +16016, OA16016 +16017, OA16017 +16018, OA16018 +16019, OA16019 +16020, OA16020 +16021, OA16021 +16022, OA16022 +16023, OA16023 +16024, OA16024 +16025, OA16025 +16026, OA16026 +16027, OA16027 +16028, OA16028 +16029, OA16029 +16030, OA16030 +16031, OA16031 +16032, OA16032 +16033, OA16033 +16034, OA16034 +16035, OA16035 +16036, OA16036 +16037, OA16037 +16038, OA16038 +16039, OA16039 +16040, OA16040 +16041, OA16041 +16042, OA16042 +16043, OA16043 +16044, OA16044 +16045, OA16045 +16046, OA16046 +16047, OA16047 +16048, OA16048 +16049, OA16049 +16050, OA16050 +16051, OA16051 +16052, OA16052 +16053, OA16053 +16054, OA16054 +16055, OA16055 +16056, OA16056 +16057, OA16057 +16058, OA16058 +16059, OA16059 +16060, OA16060 +16061, OA16061 +16062, OA16062 +16063, OA16063 +16064, OA16064 +16065, OA16065 +16066, OA16066 +16067, OA16067 +16068, OA16068 +16069, OA16069 +16070, OA16070 +16071, OA16071 +16072, OA16072 +16073, OA16073 +16074, OA16074 +16075, OA16075 +16076, OA16076 +16077, OA16077 +16078, OA16078 +16079, OA16079 +16080, OA16080 +16081, OA16081 +16082, OA16082 +16083, OA16083 +16084, OA16084 +16085, OA16085 +16086, OA16086 +16087, OA16087 +16088, OA16088 +16089, OA16089 +16090, OA16090 +16091, OA16091 +16092, OA16092 +16093, OA16093 +16094, OA16094 +16095, OA16095 +16096, OA16096 +16097, OA16097 +16098, OA16098 +16099, OA16099 +16100, OA16100 +16101, OA16101 +16102, OA16102 +16103, OA16103 +16104, OA16104 +16105, OA16105 +16106, OA16106 +16107, OA16107 +16108, OA16108 +16109, OA16109 +16110, OA16110 +16111, OA16111 +16112, OA16112 +16113, OA16113 +16114, OA16114 +16115, OA16115 +16116, OA16116 +16117, OA16117 +16118, OA16118 +16119, OA16119 +16120, OA16120 +16121, OA16121 +16122, OA16122 +16123, OA16123 +16124, OA16124 +16125, OA16125 +16126, OA16126 +16127, OA16127 +16128, OA16128 +16129, OA16129 +16130, OA16130 +16131, OA16131 +16132, OA16132 +16133, OA16133 +16134, OA16134 +16135, OA16135 +16136, OA16136 +16137, OA16137 +16138, OA16138 +16139, OA16139 +16140, OA16140 +16141, OA16141 +16142, OA16142 +16143, OA16143 +16144, OA16144 +16145, OA16145 +16146, OA16146 +16147, OA16147 +16148, OA16148 +16149, OA16149 +16150, OA16150 +16151, OA16151 +16152, OA16152 +16153, OA16153 +16154, OA16154 +16155, OA16155 +16156, OA16156 +16157, OA16157 +16158, OA16158 +16159, OA16159 +16160, OA16160 +16161, OA16161 +16162, OA16162 +16163, OA16163 +16164, OA16164 +16165, OA16165 +16166, OA16166 +16167, OA16167 +16168, OA16168 +16169, OA16169 +16170, OA16170 +16171, OA16171 +16172, OA16172 +16173, OA16173 +16174, OA16174 +16175, OA16175 +16176, OA16176 +16177, OA16177 +16178, OA16178 +16179, OA16179 +16180, OA16180 +16181, OA16181 +16182, OA16182 +16183, OA16183 +16184, OA16184 +16185, OA16185 +16186, OA16186 +16187, OA16187 +16188, OA16188 +16189, OA16189 +16190, OA16190 +16191, OA16191 +16192, OA16192 +16193, OA16193 +16194, OA16194 +16195, OA16195 +16196, OA16196 +16197, OA16197 +16198, OA16198 +16199, OA16199 +16200, OA16200 +16201, OA16201 +16202, OA16202 +16203, OA16203 +16204, OA16204 +16205, OA16205 +16206, OA16206 +16207, OA16207 +16208, OA16208 +16209, OA16209 +16210, OA16210 +16211, OA16211 +16212, OA16212 +16213, OA16213 +16214, OA16214 +16215, OA16215 +16216, OA16216 +16217, OA16217 +16218, OA16218 +16219, OA16219 +16220, OA16220 +16221, OA16221 +16222, OA16222 +16223, OA16223 +16224, OA16224 +16225, OA16225 +16226, OA16226 +16227, OA16227 +16228, OA16228 +16229, OA16229 +16230, OA16230 +16231, OA16231 +16232, OA16232 +16233, OA16233 +16234, OA16234 +16235, OA16235 +16236, OA16236 +16237, OA16237 +16238, OA16238 +16239, OA16239 +16240, OA16240 +16241, OA16241 +16242, OA16242 +16243, OA16243 +16244, OA16244 +16245, OA16245 +16246, OA16246 +16247, OA16247 +16248, OA16248 +16249, OA16249 +16250, OA16250 +16251, OA16251 +16252, OA16252 +16253, OA16253 +16254, OA16254 +16255, OA16255 +16256, OA16256 +16257, OA16257 +16258, OA16258 +16259, OA16259 +16260, OA16260 +16261, OA16261 +16262, OA16262 +16263, OA16263 +16264, OA16264 +16265, OA16265 +16266, OA16266 +16267, OA16267 +16268, OA16268 +16269, OA16269 +16270, OA16270 +16271, OA16271 +16272, OA16272 +16273, OA16273 +16274, OA16274 +16275, OA16275 +16276, OA16276 +16277, OA16277 +16278, OA16278 +16279, OA16279 +16280, OA16280 +16281, OA16281 +16282, OA16282 +16283, OA16283 +16284, OA16284 +16285, OA16285 +16286, OA16286 +16287, OA16287 +16288, OA16288 +16289, OA16289 +16290, OA16290 +16291, OA16291 +16292, OA16292 +16293, OA16293 +16294, OA16294 +16295, OA16295 +16296, OA16296 +16297, OA16297 +16298, OA16298 +16299, OA16299 +16300, OA16300 +16301, OA16301 +16302, OA16302 +16303, OA16303 +16304, OA16304 +16305, OA16305 +16306, OA16306 +16307, OA16307 +16308, OA16308 +16309, OA16309 +16310, OA16310 +16311, OA16311 +16312, OA16312 +16313, OA16313 +16314, OA16314 +16315, OA16315 +16316, OA16316 +16317, OA16317 +16318, OA16318 +16319, OA16319 +16320, OA16320 +16321, OA16321 +16322, OA16322 +16323, OA16323 +16324, OA16324 +16325, OA16325 +16326, OA16326 +16327, OA16327 +16328, OA16328 +16329, OA16329 +16330, OA16330 +16331, OA16331 +16332, OA16332 +16333, OA16333 +16334, OA16334 +16335, OA16335 +16336, OA16336 +16337, OA16337 +16338, OA16338 +16339, OA16339 +16340, OA16340 +16341, OA16341 +16342, OA16342 +16343, OA16343 +16344, OA16344 +16345, OA16345 +16346, OA16346 +16347, OA16347 +16348, OA16348 +16349, OA16349 +16350, OA16350 +16351, OA16351 +16352, OA16352 +16353, OA16353 +16354, OA16354 +16355, OA16355 +16356, OA16356 +16357, OA16357 +16358, OA16358 +16359, OA16359 +16360, OA16360 +16361, OA16361 +16362, OA16362 +16363, OA16363 +16364, OA16364 +16365, OA16365 +16366, OA16366 +16367, OA16367 +16368, OA16368 +16369, OA16369 +16370, OA16370 +16371, OA16371 +16372, OA16372 +16373, OA16373 +16374, OA16374 +16375, OA16375 +16376, OA16376 +16377, OA16377 +16378, OA16378 +16379, OA16379 +16380, OA16380 +16381, OA16381 +16382, OA16382 +16383, OA16383 +16384, OA16384 +16385, OA16385 +16386, OA16386 +16387, OA16387 +16388, OA16388 +16389, OA16389 +16390, OA16390 +16391, OA16391 +16392, OA16392 +16393, OA16393 +16394, OA16394 +16395, OA16395 +16396, OA16396 +16397, OA16397 +16398, OA16398 +16399, OA16399 +16400, OA16400 +16401, OA16401 +16402, OA16402 +16403, OA16403 +16404, OA16404 +16405, OA16405 +16406, OA16406 +16407, OA16407 +16408, OA16408 +16409, OA16409 +16410, OA16410 +16411, OA16411 +16412, OA16412 +16413, OA16413 +16414, OA16414 +16415, OA16415 +16416, OA16416 +16417, OA16417 +16418, OA16418 +16419, OA16419 +16420, OA16420 +16421, OA16421 +16422, OA16422 +16423, OA16423 +16424, OA16424 +16425, OA16425 +16426, OA16426 +16427, OA16427 +16428, OA16428 +16429, OA16429 +16430, OA16430 +16431, OA16431 +16432, OA16432 +16433, OA16433 +16434, OA16434 +16435, OA16435 +16436, OA16436 +16437, OA16437 +16438, OA16438 +16439, OA16439 +16440, OA16440 +16441, OA16441 +16442, OA16442 +16443, OA16443 +16444, OA16444 +16445, OA16445 +16446, OA16446 +16447, OA16447 +16448, OA16448 +16449, OA16449 +16450, OA16450 +16451, OA16451 +16452, OA16452 +16453, OA16453 +16454, OA16454 +16455, OA16455 +16456, OA16456 +16457, OA16457 +16458, OA16458 +16459, OA16459 +16460, OA16460 +16461, OA16461 +16462, OA16462 +16463, OA16463 +16464, OA16464 +16465, OA16465 +16466, OA16466 +16467, OA16467 +16468, OA16468 +16469, OA16469 +16470, OA16470 +16471, OA16471 +16472, OA16472 +16473, OA16473 +16474, OA16474 +16475, OA16475 +16476, OA16476 +16477, OA16477 +16478, OA16478 +16479, OA16479 +16480, OA16480 +16481, OA16481 +16482, OA16482 +16483, OA16483 +16484, OA16484 +16485, OA16485 +16486, OA16486 +16487, OA16487 +16488, OA16488 +16489, OA16489 +16490, OA16490 +16491, OA16491 +16492, OA16492 +16493, OA16493 +16494, OA16494 +16495, OA16495 +16496, OA16496 +16497, OA16497 +16498, OA16498 +16499, OA16499 +16500, OA16500 +16501, OA16501 +16502, OA16502 +16503, OA16503 +16504, OA16504 +16505, OA16505 +16506, OA16506 +16507, OA16507 +16508, OA16508 +16509, OA16509 +16510, OA16510 +16511, OA16511 +16512, OA16512 +16513, OA16513 +16514, OA16514 +16515, OA16515 +16516, OA16516 +16517, OA16517 +16518, OA16518 +16519, OA16519 +16520, OA16520 +16521, OA16521 +16522, OA16522 +16523, OA16523 +16524, OA16524 +16525, OA16525 +16526, OA16526 +16527, OA16527 +16528, OA16528 +16529, OA16529 +16530, OA16530 +16531, OA16531 +16532, OA16532 +16533, OA16533 +16534, OA16534 +16535, OA16535 +16536, OA16536 +16537, OA16537 +16538, OA16538 +16539, OA16539 +16540, OA16540 +16541, OA16541 +16542, OA16542 +16543, OA16543 +16544, OA16544 +16545, OA16545 +16546, OA16546 +16547, OA16547 +16548, OA16548 +16549, OA16549 +16550, OA16550 +16551, OA16551 +16552, OA16552 +16553, OA16553 +16554, OA16554 +16555, OA16555 +16556, OA16556 +16557, OA16557 +16558, OA16558 +16559, OA16559 +16560, OA16560 +16561, OA16561 +16562, OA16562 +16563, OA16563 +16564, OA16564 +16565, OA16565 +16566, OA16566 +16567, OA16567 +16568, OA16568 +16569, OA16569 +16570, OA16570 +16571, OA16571 +16572, OA16572 +16573, OA16573 +16574, OA16574 +16575, OA16575 +16576, OA16576 +16577, OA16577 +16578, OA16578 +16579, OA16579 +16580, OA16580 +16581, OA16581 +16582, OA16582 +16583, OA16583 +16584, OA16584 +16585, OA16585 +16586, OA16586 +16587, OA16587 +16588, OA16588 +16589, OA16589 +16590, OA16590 +16591, OA16591 +16592, OA16592 +16593, OA16593 +16594, OA16594 +16595, OA16595 +16596, OA16596 +16597, OA16597 +16598, OA16598 +16599, OA16599 +16600, OA16600 +16601, OA16601 +16602, OA16602 +16603, OA16603 +16604, OA16604 +16605, OA16605 +16606, OA16606 +16607, OA16607 +16608, OA16608 +16609, OA16609 +16610, OA16610 +16611, OA16611 +16612, OA16612 +16613, OA16613 +16614, OA16614 +16615, OA16615 +16616, OA16616 +16617, OA16617 +16618, OA16618 +16619, OA16619 +16620, OA16620 +16621, OA16621 +16622, OA16622 +16623, OA16623 +16624, OA16624 +16625, OA16625 +16626, OA16626 +16627, OA16627 +16628, OA16628 +16629, OA16629 +16630, OA16630 +16631, OA16631 +16632, OA16632 +16633, OA16633 +16634, OA16634 +16635, OA16635 +16636, OA16636 +16637, OA16637 +16638, OA16638 +16639, OA16639 +16640, OA16640 +16641, OA16641 +16642, OA16642 +16643, OA16643 +16644, OA16644 +16645, OA16645 +16646, OA16646 +16647, OA16647 +16648, OA16648 +16649, OA16649 +16650, OA16650 +16651, OA16651 +16652, OA16652 +16653, OA16653 +16654, OA16654 +16655, OA16655 +16656, OA16656 +16657, OA16657 +16658, OA16658 +16659, OA16659 +16660, OA16660 +16661, OA16661 +16662, OA16662 +16663, OA16663 +16664, OA16664 +16665, OA16665 +16666, OA16666 +16667, OA16667 +16668, OA16668 +16669, OA16669 +16670, OA16670 +16671, OA16671 +16672, OA16672 +16673, OA16673 +16674, OA16674 +16675, OA16675 +16676, OA16676 +16677, OA16677 +16678, OA16678 +16679, OA16679 +16680, OA16680 +16681, OA16681 +16682, OA16682 +16683, OA16683 +16684, OA16684 +16685, OA16685 +16686, OA16686 +16687, OA16687 +16688, OA16688 +16689, OA16689 +16690, OA16690 +16691, OA16691 +16692, OA16692 +16693, OA16693 +16694, OA16694 +16695, OA16695 +16696, OA16696 +16697, OA16697 +16698, OA16698 +16699, OA16699 +16700, OA16700 +16701, OA16701 +16702, OA16702 +16703, OA16703 +16704, OA16704 +16705, OA16705 +16706, OA16706 +16707, OA16707 +16708, OA16708 +16709, OA16709 +16710, OA16710 +16711, OA16711 +16712, OA16712 +16713, OA16713 +16714, OA16714 +16715, OA16715 +16716, OA16716 +16717, OA16717 +16718, OA16718 +16719, OA16719 +16720, OA16720 +16721, OA16721 +16722, OA16722 +16723, OA16723 +16724, OA16724 +16725, OA16725 +16726, OA16726 +16727, OA16727 +16728, OA16728 +16729, OA16729 +16730, OA16730 +16731, OA16731 +16732, OA16732 +16733, OA16733 +16734, OA16734 +16735, OA16735 +16736, OA16736 +16737, OA16737 +16738, OA16738 +16739, OA16739 +16740, OA16740 +16741, OA16741 +16742, OA16742 +16743, OA16743 +16744, OA16744 +16745, OA16745 +16746, OA16746 +16747, OA16747 +16748, OA16748 +16749, OA16749 +16750, OA16750 +16751, OA16751 +16752, OA16752 +16753, OA16753 +16754, OA16754 +16755, OA16755 +16756, OA16756 +16757, OA16757 +16758, OA16758 +16759, OA16759 +16760, OA16760 +16761, OA16761 +16762, OA16762 +16763, OA16763 +16764, OA16764 +16765, OA16765 +16766, OA16766 +16767, OA16767 +16768, OA16768 +16769, OA16769 +16770, OA16770 +16771, OA16771 +16772, OA16772 +16773, OA16773 +16774, OA16774 +16775, OA16775 +16776, OA16776 +16777, OA16777 +16778, OA16778 +16779, OA16779 +16780, OA16780 +16781, OA16781 +16782, OA16782 +16783, OA16783 +16784, OA16784 +16785, OA16785 +16786, OA16786 +16787, OA16787 +16788, OA16788 +16789, OA16789 +16790, OA16790 +16791, OA16791 +16792, OA16792 +16793, OA16793 +16794, OA16794 +16795, OA16795 +16796, OA16796 +16797, OA16797 +16798, OA16798 +16799, OA16799 +16800, OA16800 +16801, OA16801 +16802, OA16802 +16803, OA16803 +16804, OA16804 +16805, OA16805 +16806, OA16806 +16807, OA16807 +16808, OA16808 +16809, OA16809 +16810, OA16810 +16811, OA16811 +16812, OA16812 +16813, OA16813 +16814, OA16814 +16815, OA16815 +16816, OA16816 +16817, OA16817 +16818, OA16818 +16819, OA16819 +16820, OA16820 +16821, OA16821 +16822, OA16822 +16823, OA16823 +16824, OA16824 +16825, OA16825 +16826, OA16826 +16827, OA16827 +16828, OA16828 +16829, OA16829 +16830, OA16830 +16831, OA16831 +16832, OA16832 +16833, OA16833 +16834, OA16834 +16835, OA16835 +16836, OA16836 +16837, OA16837 +16838, OA16838 +16839, OA16839 +16840, OA16840 +16841, OA16841 +16842, OA16842 +16843, OA16843 +16844, OA16844 +16845, OA16845 +16846, OA16846 +16847, OA16847 +16848, OA16848 +16849, OA16849 +16850, OA16850 +16851, OA16851 +16852, OA16852 +16853, OA16853 +16854, OA16854 +16855, OA16855 +16856, OA16856 +16857, OA16857 +16858, OA16858 +16859, OA16859 +16860, OA16860 +16861, OA16861 +16862, OA16862 +16863, OA16863 +16864, OA16864 +16865, OA16865 +16866, OA16866 +16867, OA16867 +16868, OA16868 +16869, OA16869 +16870, OA16870 +16871, OA16871 +16872, OA16872 +16873, OA16873 +16874, OA16874 +16875, OA16875 +16876, OA16876 +16877, OA16877 +16878, OA16878 +16879, OA16879 +16880, OA16880 +16881, OA16881 +16882, OA16882 +16883, OA16883 +16884, OA16884 +16885, OA16885 +16886, OA16886 +16887, OA16887 +16888, OA16888 +16889, OA16889 +16890, OA16890 +16891, OA16891 +16892, OA16892 +16893, OA16893 +16894, OA16894 +16895, OA16895 +16896, OA16896 +16897, OA16897 +16898, OA16898 +16899, OA16899 +16900, OA16900 +16901, OA16901 +16902, OA16902 +16903, OA16903 +16904, OA16904 +16905, OA16905 +16906, OA16906 +16907, OA16907 +16908, OA16908 +16909, OA16909 +16910, OA16910 +16911, OA16911 +16912, OA16912 +16913, OA16913 +16914, OA16914 +16915, OA16915 +16916, OA16916 +16917, OA16917 +16918, OA16918 +16919, OA16919 +16920, OA16920 +16921, OA16921 +16922, OA16922 +16923, OA16923 +16924, OA16924 +16925, OA16925 +16926, OA16926 +16927, OA16927 +16928, OA16928 +16929, OA16929 +16930, OA16930 +16931, OA16931 +16932, OA16932 +16933, OA16933 +16934, OA16934 +16935, OA16935 +16936, OA16936 +16937, OA16937 +16938, OA16938 +16939, OA16939 +16940, OA16940 +16941, OA16941 +16942, OA16942 +16943, OA16943 +16944, OA16944 +16945, OA16945 +16946, OA16946 +16947, OA16947 +16948, OA16948 +16949, OA16949 +16950, OA16950 +16951, OA16951 +16952, OA16952 +16953, OA16953 +16954, OA16954 +16955, OA16955 +16956, OA16956 +16957, OA16957 +16958, OA16958 +16959, OA16959 +16960, OA16960 +16961, OA16961 +16962, OA16962 +16963, OA16963 +16964, OA16964 +16965, OA16965 +16966, OA16966 +16967, OA16967 +16968, OA16968 +16969, OA16969 +16970, OA16970 +16971, OA16971 +16972, OA16972 +16973, OA16973 +16974, OA16974 +16975, OA16975 +16976, OA16976 +16977, OA16977 +16978, OA16978 +16979, OA16979 +16980, OA16980 +16981, OA16981 +16982, OA16982 +16983, OA16983 +16984, OA16984 +16985, OA16985 +16986, OA16986 +16987, OA16987 +16988, OA16988 +16989, OA16989 +16990, OA16990 +16991, OA16991 +16992, OA16992 +16993, OA16993 +16994, OA16994 +16995, OA16995 +16996, OA16996 +16997, OA16997 +16998, OA16998 +16999, OA16999 +17000, OA17000 +17001, OA17001 +17002, OA17002 +17003, OA17003 +17004, OA17004 +17005, OA17005 +17006, OA17006 +17007, OA17007 +17008, OA17008 +17009, OA17009 +17010, OA17010 +17011, OA17011 +17012, OA17012 +17013, OA17013 +17014, OA17014 +17015, OA17015 +17016, OA17016 +17017, OA17017 +17018, OA17018 +17019, OA17019 +17020, OA17020 +17021, OA17021 +17022, OA17022 +17023, OA17023 +17024, OA17024 +17025, OA17025 +17026, OA17026 +17027, OA17027 +17028, OA17028 +17029, OA17029 +17030, OA17030 +17031, OA17031 +17032, OA17032 +17033, OA17033 +17034, OA17034 +17035, OA17035 +17036, OA17036 +17037, OA17037 +17038, OA17038 +17039, OA17039 +17040, OA17040 +17041, OA17041 +17042, OA17042 +17043, OA17043 +17044, OA17044 +17045, OA17045 +17046, OA17046 +17047, OA17047 +17048, OA17048 +17049, OA17049 +17050, OA17050 +17051, OA17051 +17052, OA17052 +17053, OA17053 +17054, OA17054 +17055, OA17055 +17056, OA17056 +17057, OA17057 +17058, OA17058 +17059, OA17059 +17060, OA17060 +17061, OA17061 +17062, OA17062 +17063, OA17063 +17064, OA17064 +17065, OA17065 +17066, OA17066 +17067, OA17067 +17068, OA17068 +17069, OA17069 +17070, OA17070 +17071, OA17071 +17072, OA17072 +17073, OA17073 +17074, OA17074 +17075, OA17075 +17076, OA17076 +17077, OA17077 +17078, OA17078 +17079, OA17079 +17080, OA17080 +17081, OA17081 +17082, OA17082 +17083, OA17083 +17084, OA17084 +17085, OA17085 +17086, OA17086 +17087, OA17087 +17088, OA17088 +17089, OA17089 +17090, OA17090 +17091, OA17091 +17092, OA17092 +17093, OA17093 +17094, OA17094 +17095, OA17095 +17096, OA17096 +17097, OA17097 +17098, OA17098 +17099, OA17099 +17100, OA17100 +17101, OA17101 +17102, OA17102 +17103, OA17103 +17104, OA17104 +17105, OA17105 +17106, OA17106 +17107, OA17107 +17108, OA17108 +17109, OA17109 +17110, OA17110 +17111, OA17111 +17112, OA17112 +17113, OA17113 +17114, OA17114 +17115, OA17115 +17116, OA17116 +17117, OA17117 +17118, OA17118 +17119, OA17119 +17120, OA17120 +17121, OA17121 +17122, OA17122 +17123, OA17123 +17124, OA17124 +17125, OA17125 +17126, OA17126 +17127, OA17127 +17128, OA17128 +17129, OA17129 +17130, OA17130 +17131, OA17131 +17132, OA17132 +17133, OA17133 +17134, OA17134 +17135, OA17135 +17136, OA17136 +17137, OA17137 +17138, OA17138 +17139, OA17139 +17140, OA17140 +17141, OA17141 +17142, OA17142 +17143, OA17143 +17144, OA17144 +17145, OA17145 +17146, OA17146 +17147, OA17147 +17148, OA17148 +17149, OA17149 +17150, OA17150 +17151, OA17151 +17152, OA17152 +17153, OA17153 +17154, OA17154 +17155, OA17155 +17156, OA17156 +17157, OA17157 +17158, OA17158 +17159, OA17159 +17160, OA17160 +17161, OA17161 +17162, OA17162 +17163, OA17163 +17164, OA17164 +17165, OA17165 +17166, OA17166 +17167, OA17167 +17168, OA17168 +17169, OA17169 +17170, OA17170 +17171, OA17171 +17172, OA17172 +17173, OA17173 +17174, OA17174 +17175, OA17175 +17176, OA17176 +17177, OA17177 +17178, OA17178 +17179, OA17179 +17180, OA17180 +17181, OA17181 +17182, OA17182 +17183, OA17183 +17184, OA17184 +17185, OA17185 +17186, OA17186 +17187, OA17187 +17188, OA17188 +17189, OA17189 +17190, OA17190 +17191, OA17191 +17192, OA17192 +17193, OA17193 +17194, OA17194 +17195, OA17195 +17196, OA17196 +17197, OA17197 +17198, OA17198 +17199, OA17199 +17200, OA17200 +17201, OA17201 +17202, OA17202 +17203, OA17203 +17204, OA17204 +17205, OA17205 +17206, OA17206 +17207, OA17207 +17208, OA17208 +17209, OA17209 +17210, OA17210 +17211, OA17211 +17212, OA17212 +17213, OA17213 +17214, OA17214 +17215, OA17215 +17216, OA17216 +17217, OA17217 +17218, OA17218 +17219, OA17219 +17220, OA17220 +17221, OA17221 +17222, OA17222 +17223, OA17223 +17224, OA17224 +17225, OA17225 +17226, OA17226 +17227, OA17227 +17228, OA17228 +17229, OA17229 +17230, OA17230 +17231, OA17231 +17232, OA17232 +17233, OA17233 +17234, OA17234 +17235, OA17235 +17236, OA17236 +17237, OA17237 +17238, OA17238 +17239, OA17239 +17240, OA17240 +17241, OA17241 +17242, OA17242 +17243, OA17243 +17244, OA17244 +17245, OA17245 +17246, OA17246 +17247, OA17247 +17248, OA17248 +17249, OA17249 +17250, OA17250 +17251, OA17251 +17252, OA17252 +17253, OA17253 +17254, OA17254 +17255, OA17255 +17256, OA17256 +17257, OA17257 +17258, OA17258 +17259, OA17259 +17260, OA17260 +17261, OA17261 +17262, OA17262 +17263, OA17263 +17264, OA17264 +17265, OA17265 +17266, OA17266 +17267, OA17267 +17268, OA17268 +17269, OA17269 +17270, OA17270 +17271, OA17271 +17272, OA17272 +17273, OA17273 +17274, OA17274 +17275, OA17275 +17276, OA17276 +17277, OA17277 +17278, OA17278 +17279, OA17279 +17280, OA17280 +17281, OA17281 +17282, OA17282 +17283, OA17283 +17284, OA17284 +17285, OA17285 +17286, OA17286 +17287, OA17287 +17288, OA17288 +17289, OA17289 +17290, OA17290 +17291, OA17291 +17292, OA17292 +17293, OA17293 +17294, OA17294 +17295, OA17295 +17296, OA17296 +17297, OA17297 +17298, OA17298 +17299, OA17299 +17300, OA17300 +17301, OA17301 +17302, OA17302 +17303, OA17303 +17304, OA17304 +17305, OA17305 +17306, OA17306 +17307, OA17307 +17308, OA17308 +17309, OA17309 +17310, OA17310 +17311, OA17311 +17312, OA17312 +17313, OA17313 +17314, OA17314 +17315, OA17315 +17316, OA17316 +17317, OA17317 +17318, OA17318 +17319, OA17319 +17320, OA17320 +17321, OA17321 +17322, OA17322 +17323, OA17323 +17324, OA17324 +17325, OA17325 +17326, OA17326 +17327, OA17327 +17328, OA17328 +17329, OA17329 +17330, OA17330 +17331, OA17331 +17332, OA17332 +17333, OA17333 +17334, OA17334 +17335, OA17335 +17336, OA17336 +17337, OA17337 +17338, OA17338 +17339, OA17339 +17340, OA17340 +17341, OA17341 +17342, OA17342 +17343, OA17343 +17344, OA17344 +17345, OA17345 +17346, OA17346 +17347, OA17347 +17348, OA17348 +17349, OA17349 +17350, OA17350 +17351, OA17351 +17352, OA17352 +17353, OA17353 +17354, OA17354 +17355, OA17355 +17356, OA17356 +17357, OA17357 +17358, OA17358 +17359, OA17359 +17360, OA17360 +17361, OA17361 +17362, OA17362 +17363, OA17363 +17364, OA17364 +17365, OA17365 +17366, OA17366 +17367, OA17367 +17368, OA17368 +17369, OA17369 +17370, OA17370 +17371, OA17371 +17372, OA17372 +17373, OA17373 +17374, OA17374 +17375, OA17375 +17376, OA17376 +17377, OA17377 +17378, OA17378 +17379, OA17379 +17380, OA17380 +17381, OA17381 +17382, OA17382 +17383, OA17383 +17384, OA17384 +17385, OA17385 +17386, OA17386 +17387, OA17387 +17388, OA17388 +17389, OA17389 +17390, OA17390 +17391, OA17391 +17392, OA17392 +17393, OA17393 +17394, OA17394 +17395, OA17395 +17396, OA17396 +17397, OA17397 +17398, OA17398 +17399, OA17399 +17400, OA17400 +17401, OA17401 +17402, OA17402 +17403, OA17403 +17404, OA17404 +17405, OA17405 +17406, OA17406 +17407, OA17407 +17408, OA17408 +17409, OA17409 +17410, OA17410 +17411, OA17411 +17412, OA17412 +17413, OA17413 +17414, OA17414 +17415, OA17415 +17416, OA17416 +17417, OA17417 +17418, OA17418 +17419, OA17419 +17420, OA17420 +17421, OA17421 +17422, OA17422 +17423, OA17423 +17424, OA17424 +17425, OA17425 +17426, OA17426 +17427, OA17427 +17428, OA17428 +17429, OA17429 +17430, OA17430 +17431, OA17431 +17432, OA17432 +17433, OA17433 +17434, OA17434 +17435, OA17435 +17436, OA17436 +17437, OA17437 +17438, OA17438 +17439, OA17439 +17440, OA17440 +17441, OA17441 +17442, OA17442 +17443, OA17443 +17444, OA17444 +17445, OA17445 +17446, OA17446 +17447, OA17447 +17448, OA17448 +17449, OA17449 +17450, OA17450 +17451, OA17451 +17452, OA17452 +17453, OA17453 +17454, OA17454 +17455, OA17455 +17456, OA17456 +17457, OA17457 +17458, OA17458 +17459, OA17459 +17460, OA17460 +17461, OA17461 +17462, OA17462 +17463, OA17463 +17464, OA17464 +17465, OA17465 +17466, OA17466 +17467, OA17467 +17468, OA17468 +17469, OA17469 +17470, OA17470 +17471, OA17471 +17472, OA17472 +17473, OA17473 +17474, OA17474 +17475, OA17475 +17476, OA17476 +17477, OA17477 +17478, OA17478 +17479, OA17479 +17480, OA17480 +17481, OA17481 +17482, OA17482 +17483, OA17483 +17484, OA17484 +17485, OA17485 +17486, OA17486 +17487, OA17487 +17488, OA17488 +17489, OA17489 +17490, OA17490 +17491, OA17491 +17492, OA17492 +17493, OA17493 +17494, OA17494 +17495, OA17495 +17496, OA17496 +17497, OA17497 +17498, OA17498 +17499, OA17499 +17500, OA17500 +17501, OA17501 +17502, OA17502 +17503, OA17503 +17504, OA17504 +17505, OA17505 +17506, OA17506 +17507, OA17507 +17508, OA17508 +17509, OA17509 +17510, OA17510 +17511, OA17511 +17512, OA17512 +17513, OA17513 +17514, OA17514 +17515, OA17515 +17516, OA17516 +17517, OA17517 +17518, OA17518 +17519, OA17519 +17520, OA17520 +17521, OA17521 +17522, OA17522 +17523, OA17523 +17524, OA17524 +17525, OA17525 +17526, OA17526 +17527, OA17527 +17528, OA17528 +17529, OA17529 +17530, OA17530 +17531, OA17531 +17532, OA17532 +17533, OA17533 +17534, OA17534 +17535, OA17535 +17536, OA17536 +17537, OA17537 +17538, OA17538 +17539, OA17539 +17540, OA17540 +17541, OA17541 +17542, OA17542 +17543, OA17543 +17544, OA17544 +17545, OA17545 +17546, OA17546 +17547, OA17547 +17548, OA17548 +17549, OA17549 +17550, OA17550 +17551, OA17551 +17552, OA17552 +17553, OA17553 +17554, OA17554 +17555, OA17555 +17556, OA17556 +17557, OA17557 +17558, OA17558 +17559, OA17559 +17560, OA17560 +17561, OA17561 +17562, OA17562 +17563, OA17563 +17564, OA17564 +17565, OA17565 +17566, OA17566 +17567, OA17567 +17568, OA17568 +17569, OA17569 +17570, OA17570 +17571, OA17571 +17572, OA17572 +17573, OA17573 +17574, OA17574 +17575, OA17575 +17576, OA17576 +17577, OA17577 +17578, OA17578 +17579, OA17579 +17580, OA17580 +17581, OA17581 +17582, OA17582 +17583, OA17583 +17584, OA17584 +17585, OA17585 +17586, OA17586 +17587, OA17587 +17588, OA17588 +17589, OA17589 +17590, OA17590 +17591, OA17591 +17592, OA17592 +17593, OA17593 +17594, OA17594 +17595, OA17595 +17596, OA17596 +17597, OA17597 +17598, OA17598 +17599, OA17599 +17600, OA17600 +17601, OA17601 +17602, OA17602 +17603, OA17603 +17604, OA17604 +17605, OA17605 +17606, OA17606 +17607, OA17607 +17608, OA17608 +17609, OA17609 +17610, OA17610 +17611, OA17611 +17612, OA17612 +17613, OA17613 +17614, OA17614 +17615, OA17615 +17616, OA17616 +17617, OA17617 +17618, OA17618 +17619, OA17619 +17620, OA17620 +17621, OA17621 +17622, OA17622 +17623, OA17623 +17624, OA17624 +17625, OA17625 +17626, OA17626 +17627, OA17627 +17628, OA17628 +17629, OA17629 +17630, OA17630 +17631, OA17631 +17632, OA17632 +17633, OA17633 +17634, OA17634 +17635, OA17635 +17636, OA17636 +17637, OA17637 +17638, OA17638 +17639, OA17639 +17640, OA17640 +17641, OA17641 +17642, OA17642 +17643, OA17643 +17644, OA17644 +17645, OA17645 +17646, OA17646 +17647, OA17647 +17648, OA17648 +17649, OA17649 +17650, OA17650 +17651, OA17651 +17652, OA17652 +17653, OA17653 +17654, OA17654 +17655, OA17655 +17656, OA17656 +17657, OA17657 +17658, OA17658 +17659, OA17659 +17660, OA17660 +17661, OA17661 +17662, OA17662 +17663, OA17663 +17664, OA17664 +17665, OA17665 +17666, OA17666 +17667, OA17667 +17668, OA17668 +17669, OA17669 +17670, OA17670 +17671, OA17671 +17672, OA17672 +17673, OA17673 +17674, OA17674 +17675, OA17675 +17676, OA17676 +17677, OA17677 +17678, OA17678 +17679, OA17679 +17680, OA17680 +17681, OA17681 +17682, OA17682 +17683, OA17683 +17684, OA17684 +17685, OA17685 +17686, OA17686 +17687, OA17687 +17688, OA17688 +17689, OA17689 +17690, OA17690 +17691, OA17691 +17692, OA17692 +17693, OA17693 +17694, OA17694 +17695, OA17695 +17696, OA17696 +17697, OA17697 +17698, OA17698 +17699, OA17699 +17700, OA17700 +17701, OA17701 +17702, OA17702 +17703, OA17703 +17704, OA17704 +17705, OA17705 +17706, OA17706 +17707, OA17707 +17708, OA17708 +17709, OA17709 +17710, OA17710 +17711, OA17711 +17712, OA17712 +17713, OA17713 +17714, OA17714 +17715, OA17715 +17716, OA17716 +17717, OA17717 +17718, OA17718 +17719, OA17719 +17720, OA17720 +17721, OA17721 +17722, OA17722 +17723, OA17723 +17724, OA17724 +17725, OA17725 +17726, OA17726 +17727, OA17727 +17728, OA17728 +17729, OA17729 +17730, OA17730 +17731, OA17731 +17732, OA17732 +17733, OA17733 +17734, OA17734 +17735, OA17735 +17736, OA17736 +17737, OA17737 +17738, OA17738 +17739, OA17739 +17740, OA17740 +17741, OA17741 +17742, OA17742 +17743, OA17743 +17744, OA17744 +17745, OA17745 +17746, OA17746 +17747, OA17747 +17748, OA17748 +17749, OA17749 +17750, OA17750 +17751, OA17751 +17752, OA17752 +17753, OA17753 +17754, OA17754 +17755, OA17755 +17756, OA17756 +17757, OA17757 +17758, OA17758 +17759, OA17759 +17760, OA17760 +17761, OA17761 +17762, OA17762 +17763, OA17763 +17764, OA17764 +17765, OA17765 +17766, OA17766 +17767, OA17767 +17768, OA17768 +17769, OA17769 +17770, OA17770 +17771, OA17771 +17772, OA17772 +17773, OA17773 +17774, OA17774 +17775, OA17775 +17776, OA17776 +17777, OA17777 +17778, OA17778 +17779, OA17779 +17780, OA17780 +17781, OA17781 +17782, OA17782 +17783, OA17783 +17784, OA17784 +17785, OA17785 +17786, OA17786 +17787, OA17787 +17788, OA17788 +17789, OA17789 +17790, OA17790 +17791, OA17791 +17792, OA17792 +17793, OA17793 +17794, OA17794 +17795, OA17795 +17796, OA17796 +17797, OA17797 +17798, OA17798 +17799, OA17799 +17800, OA17800 +17801, OA17801 +17802, OA17802 +17803, OA17803 +17804, OA17804 +17805, OA17805 +17806, OA17806 +17807, OA17807 +17808, OA17808 +17809, OA17809 +17810, OA17810 +17811, OA17811 +17812, OA17812 +17813, OA17813 +17814, OA17814 +17815, OA17815 +17816, OA17816 +17817, OA17817 +17818, OA17818 +17819, OA17819 +17820, OA17820 +17821, OA17821 +17822, OA17822 +17823, OA17823 +17824, OA17824 +17825, OA17825 +17826, OA17826 +17827, OA17827 +17828, OA17828 +17829, OA17829 +17830, OA17830 +17831, OA17831 +17832, OA17832 +17833, OA17833 +17834, OA17834 +17835, OA17835 +17836, OA17836 +17837, OA17837 +17838, OA17838 +17839, OA17839 +17840, OA17840 +17841, OA17841 +17842, OA17842 +17843, OA17843 +17844, OA17844 +17845, OA17845 +17846, OA17846 +17847, OA17847 +17848, OA17848 +17849, OA17849 +17850, OA17850 +17851, OA17851 +17852, OA17852 +17853, OA17853 +17854, OA17854 +17855, OA17855 +17856, OA17856 +17857, OA17857 +17858, OA17858 +17859, OA17859 +17860, OA17860 +17861, OA17861 +17862, OA17862 +17863, OA17863 +17864, OA17864 +17865, OA17865 +17866, OA17866 +17867, OA17867 +17868, OA17868 +17869, OA17869 +17870, OA17870 +17871, OA17871 +17872, OA17872 +17873, OA17873 +17874, OA17874 +17875, OA17875 +17876, OA17876 +17877, OA17877 +17878, OA17878 +17879, OA17879 +17880, OA17880 +17881, OA17881 +17882, OA17882 +17883, OA17883 +17884, OA17884 +17885, OA17885 +17886, OA17886 +17887, OA17887 +17888, OA17888 +17889, OA17889 +17890, OA17890 +17891, OA17891 +17892, OA17892 +17893, OA17893 +17894, OA17894 +17895, OA17895 +17896, OA17896 +17897, OA17897 +17898, OA17898 +17899, OA17899 +17900, OA17900 +17901, OA17901 +17902, OA17902 +17903, OA17903 +17904, OA17904 +17905, OA17905 +17906, OA17906 +17907, OA17907 +17908, OA17908 +17909, OA17909 +17910, OA17910 +17911, OA17911 +17912, OA17912 +17913, OA17913 +17914, OA17914 +17915, OA17915 +17916, OA17916 +17917, OA17917 +17918, OA17918 +17919, OA17919 +17920, OA17920 +17921, OA17921 +17922, OA17922 +17923, OA17923 +17924, OA17924 +17925, OA17925 +17926, OA17926 +17927, OA17927 +17928, OA17928 +17929, OA17929 +17930, OA17930 +17931, OA17931 +17932, OA17932 +17933, OA17933 +17934, OA17934 +17935, OA17935 +17936, OA17936 +17937, OA17937 +17938, OA17938 +17939, OA17939 +17940, OA17940 +17941, OA17941 +17942, OA17942 +17943, OA17943 +17944, OA17944 +17945, OA17945 +17946, OA17946 +17947, OA17947 +17948, OA17948 +17949, OA17949 +17950, OA17950 +17951, OA17951 +17952, OA17952 +17953, OA17953 +17954, OA17954 +17955, OA17955 +17956, OA17956 +17957, OA17957 +17958, OA17958 +17959, OA17959 +17960, OA17960 +17961, OA17961 +17962, OA17962 +17963, OA17963 +17964, OA17964 +17965, OA17965 +17966, OA17966 +17967, OA17967 +17968, OA17968 +17969, OA17969 +17970, OA17970 +17971, OA17971 +17972, OA17972 +17973, OA17973 +17974, OA17974 +17975, OA17975 +17976, OA17976 +17977, OA17977 +17978, OA17978 +17979, OA17979 +17980, OA17980 +17981, OA17981 +17982, OA17982 +17983, OA17983 +17984, OA17984 +17985, OA17985 +17986, OA17986 +17987, OA17987 +17988, OA17988 +17989, OA17989 +17990, OA17990 +17991, OA17991 +17992, OA17992 +17993, OA17993 +17994, OA17994 +17995, OA17995 +17996, OA17996 +17997, OA17997 +17998, OA17998 +17999, OA17999 +18000, OA18000 +18001, OA18001 +18002, OA18002 +18003, OA18003 +18004, OA18004 +18005, OA18005 +18006, OA18006 +18007, OA18007 +18008, OA18008 +18009, OA18009 +18010, OA18010 +18011, OA18011 +18012, OA18012 +18013, OA18013 +18014, OA18014 +18015, OA18015 +18016, OA18016 +18017, OA18017 +18018, OA18018 +18019, OA18019 +18020, OA18020 +18021, OA18021 +18022, OA18022 +18023, OA18023 +18024, OA18024 +18025, OA18025 +18026, OA18026 +18027, OA18027 +18028, OA18028 +18029, OA18029 +18030, OA18030 +18031, OA18031 +18032, OA18032 +18033, OA18033 +18034, OA18034 +18035, OA18035 +18036, OA18036 +18037, OA18037 +18038, OA18038 +18039, OA18039 +18040, OA18040 +18041, OA18041 +18042, OA18042 +18043, OA18043 +18044, OA18044 +18045, OA18045 +18046, OA18046 +18047, OA18047 +18048, OA18048 +18049, OA18049 +18050, OA18050 +18051, OA18051 +18052, OA18052 +18053, OA18053 +18054, OA18054 +18055, OA18055 +18056, OA18056 +18057, OA18057 +18058, OA18058 +18059, OA18059 +18060, OA18060 +18061, OA18061 +18062, OA18062 +18063, OA18063 +18064, OA18064 +18065, OA18065 +18066, OA18066 +18067, OA18067 +18068, OA18068 +18069, OA18069 +18070, OA18070 +18071, OA18071 +18072, OA18072 +18073, OA18073 +18074, OA18074 +18075, OA18075 +18076, OA18076 +18077, OA18077 +18078, OA18078 +18079, OA18079 +18080, OA18080 +18081, OA18081 +18082, OA18082 +18083, OA18083 +18084, OA18084 +18085, OA18085 +18086, OA18086 +18087, OA18087 +18088, OA18088 +18089, OA18089 +18090, OA18090 +18091, OA18091 +18092, OA18092 +18093, OA18093 +18094, OA18094 +18095, OA18095 +18096, OA18096 +18097, OA18097 +18098, OA18098 +18099, OA18099 +18100, OA18100 +18101, OA18101 +18102, OA18102 +18103, OA18103 +18104, OA18104 +18105, OA18105 +18106, OA18106 +18107, OA18107 +18108, OA18108 +18109, OA18109 +18110, OA18110 +18111, OA18111 +18112, OA18112 +18113, OA18113 +18114, OA18114 +18115, OA18115 +18116, OA18116 +18117, OA18117 +18118, OA18118 +18119, OA18119 +18120, OA18120 +18121, OA18121 +18122, OA18122 +18123, OA18123 +18124, OA18124 +18125, OA18125 +18126, OA18126 +18127, OA18127 +18128, OA18128 +18129, OA18129 +18130, OA18130 +18131, OA18131 +18132, OA18132 +18133, OA18133 +18134, OA18134 +18135, OA18135 +18136, OA18136 +18137, OA18137 +18138, OA18138 +18139, OA18139 +18140, OA18140 +18141, OA18141 +18142, OA18142 +18143, OA18143 +18144, OA18144 +18145, OA18145 +18146, OA18146 +18147, OA18147 +18148, OA18148 +18149, OA18149 +18150, OA18150 +18151, OA18151 +18152, OA18152 +18153, OA18153 +18154, OA18154 +18155, OA18155 +18156, OA18156 +18157, OA18157 +18158, OA18158 +18159, OA18159 +18160, OA18160 +18161, OA18161 +18162, OA18162 +18163, OA18163 +18164, OA18164 +18165, OA18165 +18166, OA18166 +18167, OA18167 +18168, OA18168 +18169, OA18169 +18170, OA18170 +18171, OA18171 +18172, OA18172 +18173, OA18173 +18174, OA18174 +18175, OA18175 +18176, OA18176 +18177, OA18177 +18178, OA18178 +18179, OA18179 +18180, OA18180 +18181, OA18181 +18182, OA18182 +18183, OA18183 +18184, OA18184 +18185, OA18185 +18186, OA18186 +18187, OA18187 +18188, OA18188 +18189, OA18189 +18190, OA18190 +18191, OA18191 +18192, OA18192 +18193, OA18193 +18194, OA18194 +18195, OA18195 +18196, OA18196 +18197, OA18197 +18198, OA18198 +18199, OA18199 +18200, OA18200 +18201, OA18201 +18202, OA18202 +18203, OA18203 +18204, OA18204 +18205, OA18205 +18206, OA18206 +18207, OA18207 +18208, OA18208 +18209, OA18209 +18210, OA18210 +18211, OA18211 +18212, OA18212 +18213, OA18213 +18214, OA18214 +18215, OA18215 +18216, OA18216 +18217, OA18217 +18218, OA18218 +18219, OA18219 +18220, OA18220 +18221, OA18221 +18222, OA18222 +18223, OA18223 +18224, OA18224 +18225, OA18225 +18226, OA18226 +18227, OA18227 +18228, OA18228 +18229, OA18229 +18230, OA18230 +18231, OA18231 +18232, OA18232 +18233, OA18233 +18234, OA18234 +18235, OA18235 +18236, OA18236 +18237, OA18237 +18238, OA18238 +18239, OA18239 +18240, OA18240 +18241, OA18241 +18242, OA18242 +18243, OA18243 +18244, OA18244 +18245, OA18245 +18246, OA18246 +18247, OA18247 +18248, OA18248 +18249, OA18249 +18250, OA18250 +18251, OA18251 +18252, OA18252 +18253, OA18253 +18254, OA18254 +18255, OA18255 +18256, OA18256 +18257, OA18257 +18258, OA18258 +18259, OA18259 +18260, OA18260 +18261, OA18261 +18262, OA18262 +18263, OA18263 +18264, OA18264 +18265, OA18265 +18266, OA18266 +18267, OA18267 +18268, OA18268 +18269, OA18269 +18270, OA18270 +18271, OA18271 +18272, OA18272 +18273, OA18273 +18274, OA18274 +18275, OA18275 +18276, OA18276 +18277, OA18277 +18278, OA18278 +18279, OA18279 +18280, OA18280 +18281, OA18281 +18282, OA18282 +18283, OA18283 +18284, OA18284 +18285, OA18285 +18286, OA18286 +18287, OA18287 +18288, OA18288 +18289, OA18289 +18290, OA18290 +18291, OA18291 +18292, OA18292 +18293, OA18293 +18294, OA18294 +18295, OA18295 +18296, OA18296 +18297, OA18297 +18298, OA18298 +18299, OA18299 +18300, OA18300 +18301, OA18301 +18302, OA18302 +18303, OA18303 +18304, OA18304 +18305, OA18305 +18306, OA18306 +18307, OA18307 +18308, OA18308 +18309, OA18309 +18310, OA18310 +18311, OA18311 +18312, OA18312 +18313, OA18313 +18314, OA18314 +18315, OA18315 +18316, OA18316 +18317, OA18317 +18318, OA18318 +18319, OA18319 +18320, OA18320 +18321, OA18321 +18322, OA18322 +18323, OA18323 +18324, OA18324 +18325, OA18325 +18326, OA18326 +18327, OA18327 +18328, OA18328 +18329, OA18329 +18330, OA18330 +18331, OA18331 +18332, OA18332 +18333, OA18333 +18334, OA18334 +18335, OA18335 +18336, OA18336 +18337, OA18337 +18338, OA18338 +18339, OA18339 +18340, OA18340 +18341, OA18341 +18342, OA18342 +18343, OA18343 +18344, OA18344 +18345, OA18345 +18346, OA18346 +18347, OA18347 +18348, OA18348 +18349, OA18349 +18350, OA18350 +18351, OA18351 +18352, OA18352 +18353, OA18353 +18354, OA18354 +18355, OA18355 +18356, OA18356 +18357, OA18357 +18358, OA18358 +18359, OA18359 +18360, OA18360 +18361, OA18361 +18362, OA18362 +18363, OA18363 +18364, OA18364 +18365, OA18365 +18366, OA18366 +18367, OA18367 +18368, OA18368 +18369, OA18369 +18370, OA18370 +18371, OA18371 +18372, OA18372 +18373, OA18373 +18374, OA18374 +18375, OA18375 +18376, OA18376 +18377, OA18377 +18378, OA18378 +18379, OA18379 +18380, OA18380 +18381, OA18381 +18382, OA18382 +18383, OA18383 +18384, OA18384 +18385, OA18385 +18386, OA18386 +18387, OA18387 +18388, OA18388 +18389, OA18389 +18390, OA18390 +18391, OA18391 +18392, OA18392 +18393, OA18393 +18394, OA18394 +18395, OA18395 +18396, OA18396 +18397, OA18397 +18398, OA18398 +18399, OA18399 +18400, OA18400 +18401, OA18401 +18402, OA18402 +18403, OA18403 +18404, OA18404 +18405, OA18405 +18406, OA18406 +18407, OA18407 +18408, OA18408 +18409, OA18409 +18410, OA18410 +18411, OA18411 +18412, OA18412 +18413, OA18413 +18414, OA18414 +18415, OA18415 +18416, OA18416 +18417, OA18417 +18418, OA18418 +18419, OA18419 +18420, OA18420 +18421, OA18421 +18422, OA18422 +18423, OA18423 +18424, OA18424 +18425, OA18425 +18426, OA18426 +18427, OA18427 +18428, OA18428 +18429, OA18429 +18430, OA18430 +18431, OA18431 +18432, OA18432 +18433, OA18433 +18434, OA18434 +18435, OA18435 +18436, OA18436 +18437, OA18437 +18438, OA18438 +18439, OA18439 +18440, OA18440 +18441, OA18441 +18442, OA18442 +18443, OA18443 +18444, OA18444 +18445, OA18445 +18446, OA18446 +18447, OA18447 +18448, OA18448 +18449, OA18449 +18450, OA18450 +18451, OA18451 +18452, OA18452 +18453, OA18453 +18454, OA18454 +18455, OA18455 +18456, OA18456 +18457, OA18457 +18458, OA18458 +18459, OA18459 +18460, OA18460 +18461, OA18461 +18462, OA18462 +18463, OA18463 +18464, OA18464 +18465, OA18465 +18466, OA18466 +18467, OA18467 +18468, OA18468 +18469, OA18469 +18470, OA18470 +18471, OA18471 +18472, OA18472 +18473, OA18473 +18474, OA18474 +18475, OA18475 +18476, OA18476 +18477, OA18477 +18478, OA18478 +18479, OA18479 +18480, OA18480 +18481, OA18481 +18482, OA18482 +18483, OA18483 +18484, OA18484 +18485, OA18485 +18486, OA18486 +18487, OA18487 +18488, OA18488 +18489, OA18489 +18490, OA18490 +18491, OA18491 +18492, OA18492 +18493, OA18493 +18494, OA18494 +18495, OA18495 +18496, OA18496 +18497, OA18497 +18498, OA18498 +18499, OA18499 +18500, OA18500 +18501, OA18501 +18502, OA18502 +18503, OA18503 +18504, OA18504 +18505, OA18505 +18506, OA18506 +18507, OA18507 +18508, OA18508 +18509, OA18509 +18510, OA18510 +18511, OA18511 +18512, OA18512 +18513, OA18513 +18514, OA18514 +18515, OA18515 +18516, OA18516 +18517, OA18517 +18518, OA18518 +18519, OA18519 +18520, OA18520 +18521, OA18521 +18522, OA18522 +18523, OA18523 +18524, OA18524 +18525, OA18525 +18526, OA18526 +18527, OA18527 +18528, OA18528 +18529, OA18529 +18530, OA18530 +18531, OA18531 +18532, OA18532 +18533, OA18533 +18534, OA18534 +18535, OA18535 +18536, OA18536 +18537, OA18537 +18538, OA18538 +18539, OA18539 +18540, OA18540 +18541, OA18541 +18542, OA18542 +18543, OA18543 +18544, OA18544 +18545, OA18545 +18546, OA18546 +18547, OA18547 +18548, OA18548 +18549, OA18549 +18550, OA18550 +18551, OA18551 +18552, OA18552 +18553, OA18553 +18554, OA18554 +18555, OA18555 +18556, OA18556 +18557, OA18557 +18558, OA18558 +18559, OA18559 +18560, OA18560 +18561, OA18561 +18562, OA18562 +18563, OA18563 +18564, OA18564 +18565, OA18565 +18566, OA18566 +18567, OA18567 +18568, OA18568 +18569, OA18569 +18570, OA18570 +18571, OA18571 +18572, OA18572 +18573, OA18573 +18574, OA18574 +18575, OA18575 +18576, OA18576 +18577, OA18577 +18578, OA18578 +18579, OA18579 +18580, OA18580 +18581, OA18581 +18582, OA18582 +18583, OA18583 +18584, OA18584 +18585, OA18585 +18586, OA18586 +18587, OA18587 +18588, OA18588 +18589, OA18589 +18590, OA18590 +18591, OA18591 +18592, OA18592 +18593, OA18593 +18594, OA18594 +18595, OA18595 +18596, OA18596 +18597, OA18597 +18598, OA18598 +18599, OA18599 +18600, OA18600 +18601, OA18601 +18602, OA18602 +18603, OA18603 +18604, OA18604 +18605, OA18605 +18606, OA18606 +18607, OA18607 +18608, OA18608 +18609, OA18609 +18610, OA18610 +18611, OA18611 +18612, OA18612 +18613, OA18613 +18614, OA18614 +18615, OA18615 +18616, OA18616 +18617, OA18617 +18618, OA18618 +18619, OA18619 +18620, OA18620 +18621, OA18621 +18622, OA18622 +18623, OA18623 +18624, OA18624 +18625, OA18625 +18626, OA18626 +18627, OA18627 +18628, OA18628 +18629, OA18629 +18630, OA18630 +18631, OA18631 +18632, OA18632 +18633, OA18633 +18634, OA18634 +18635, OA18635 +18636, OA18636 +18637, OA18637 +18638, OA18638 +18639, OA18639 +18640, OA18640 +18641, OA18641 +18642, OA18642 +18643, OA18643 +18644, OA18644 +18645, OA18645 +18646, OA18646 +18647, OA18647 +18648, OA18648 +18649, OA18649 +18650, OA18650 +18651, OA18651 +18652, OA18652 +18653, OA18653 +18654, OA18654 +18655, OA18655 +18656, OA18656 +18657, OA18657 +18658, OA18658 +18659, OA18659 +18660, OA18660 +18661, OA18661 +18662, OA18662 +18663, OA18663 +18664, OA18664 +18665, OA18665 +18666, OA18666 +18667, OA18667 +18668, OA18668 +18669, OA18669 +18670, OA18670 +18671, OA18671 +18672, OA18672 +18673, OA18673 +18674, OA18674 +18675, OA18675 +18676, OA18676 +18677, OA18677 +18678, OA18678 +18679, OA18679 +18680, OA18680 +18681, OA18681 +18682, OA18682 +18683, OA18683 +18684, OA18684 +18685, OA18685 +18686, OA18686 +18687, OA18687 +18688, OA18688 +18689, OA18689 +18690, OA18690 +18691, OA18691 +18692, OA18692 +18693, OA18693 +18694, OA18694 +18695, OA18695 +18696, OA18696 +18697, OA18697 +18698, OA18698 +18699, OA18699 +18700, OA18700 +18701, OA18701 +18702, OA18702 +18703, OA18703 +18704, OA18704 +18705, OA18705 +18706, OA18706 +18707, OA18707 +18708, OA18708 +18709, OA18709 +18710, OA18710 +18711, OA18711 +18712, OA18712 +18713, OA18713 +18714, OA18714 +18715, OA18715 +18716, OA18716 +18717, OA18717 +18718, OA18718 +18719, OA18719 +18720, OA18720 +18721, OA18721 +18722, OA18722 +18723, OA18723 +18724, OA18724 +18725, OA18725 +18726, OA18726 +18727, OA18727 +18728, OA18728 +18729, OA18729 +18730, OA18730 +18731, OA18731 +18732, OA18732 +18733, OA18733 +18734, OA18734 +18735, OA18735 +18736, OA18736 +18737, OA18737 +18738, OA18738 +18739, OA18739 +18740, OA18740 +18741, OA18741 +18742, OA18742 +18743, OA18743 +18744, OA18744 +18745, OA18745 +18746, OA18746 +18747, OA18747 +18748, OA18748 +18749, OA18749 +18750, OA18750 +18751, OA18751 +18752, OA18752 +18753, OA18753 +18754, OA18754 +18755, OA18755 +18756, OA18756 +18757, OA18757 +18758, OA18758 +18759, OA18759 +18760, OA18760 +18761, OA18761 +18762, OA18762 +18763, OA18763 +18764, OA18764 +18765, OA18765 +18766, OA18766 +18767, OA18767 +18768, OA18768 +18769, OA18769 +18770, OA18770 +18771, OA18771 +18772, OA18772 +18773, OA18773 +18774, OA18774 +18775, OA18775 +18776, OA18776 +18777, OA18777 +18778, OA18778 +18779, OA18779 +18780, OA18780 +18781, OA18781 +18782, OA18782 +18783, OA18783 +18784, OA18784 +18785, OA18785 +18786, OA18786 +18787, OA18787 +18788, OA18788 +18789, OA18789 +18790, OA18790 +18791, OA18791 +18792, OA18792 +18793, OA18793 +18794, OA18794 +18795, OA18795 +18796, OA18796 +18797, OA18797 +18798, OA18798 +18799, OA18799 +18800, OA18800 +18801, OA18801 +18802, OA18802 +18803, OA18803 +18804, OA18804 +18805, OA18805 +18806, OA18806 +18807, OA18807 +18808, OA18808 +18809, OA18809 +18810, OA18810 +18811, OA18811 +18812, OA18812 +18813, OA18813 +18814, OA18814 +18815, OA18815 +18816, OA18816 +18817, OA18817 +18818, OA18818 +18819, OA18819 +18820, OA18820 +18821, OA18821 +18822, OA18822 +18823, OA18823 +18824, OA18824 +18825, OA18825 +18826, OA18826 +18827, OA18827 +18828, OA18828 +18829, OA18829 +18830, OA18830 +18831, OA18831 +18832, OA18832 +18833, OA18833 +18834, OA18834 +18835, OA18835 +18836, OA18836 +18837, OA18837 +18838, OA18838 +18839, OA18839 +18840, OA18840 +18841, OA18841 +18842, OA18842 +18843, OA18843 +18844, OA18844 +18845, OA18845 +18846, OA18846 +18847, OA18847 +18848, OA18848 +18849, OA18849 +18850, OA18850 +18851, OA18851 +18852, OA18852 +18853, OA18853 +18854, OA18854 +18855, OA18855 +18856, OA18856 +18857, OA18857 +18858, OA18858 +18859, OA18859 +18860, OA18860 +18861, OA18861 +18862, OA18862 +18863, OA18863 +18864, OA18864 +18865, OA18865 +18866, OA18866 +18867, OA18867 +18868, OA18868 +18869, OA18869 +18870, OA18870 +18871, OA18871 +18872, OA18872 +18873, OA18873 +18874, OA18874 +18875, OA18875 +18876, OA18876 +18877, OA18877 +18878, OA18878 +18879, OA18879 +18880, OA18880 +18881, OA18881 +18882, OA18882 +18883, OA18883 +18884, OA18884 +18885, OA18885 +18886, OA18886 +18887, OA18887 +18888, OA18888 +18889, OA18889 +18890, OA18890 +18891, OA18891 +18892, OA18892 +18893, OA18893 +18894, OA18894 +18895, OA18895 +18896, OA18896 +18897, OA18897 +18898, OA18898 +18899, OA18899 +18900, OA18900 +18901, OA18901 +18902, OA18902 +18903, OA18903 +18904, OA18904 +18905, OA18905 +18906, OA18906 +18907, OA18907 +18908, OA18908 +18909, OA18909 +18910, OA18910 +18911, OA18911 +18912, OA18912 +18913, OA18913 +18914, OA18914 +18915, OA18915 +18916, OA18916 +18917, OA18917 +18918, OA18918 +18919, OA18919 +18920, OA18920 +18921, OA18921 +18922, OA18922 +18923, OA18923 +18924, OA18924 +18925, OA18925 +18926, OA18926 +18927, OA18927 +18928, OA18928 +18929, OA18929 +18930, OA18930 +18931, OA18931 +18932, OA18932 +18933, OA18933 +18934, OA18934 +18935, OA18935 +18936, OA18936 +18937, OA18937 +18938, OA18938 +18939, OA18939 +18940, OA18940 +18941, OA18941 +18942, OA18942 +18943, OA18943 +18944, OA18944 +18945, OA18945 +18946, OA18946 +18947, OA18947 +18948, OA18948 +18949, OA18949 +18950, OA18950 +18951, OA18951 +18952, OA18952 +18953, OA18953 +18954, OA18954 +18955, OA18955 +18956, OA18956 +18957, OA18957 +18958, OA18958 +18959, OA18959 +18960, OA18960 +18961, OA18961 +18962, OA18962 +18963, OA18963 +18964, OA18964 +18965, OA18965 +18966, OA18966 +18967, OA18967 +18968, OA18968 +18969, OA18969 +18970, OA18970 +18971, OA18971 +18972, OA18972 +18973, OA18973 +18974, OA18974 +18975, OA18975 +18976, OA18976 +18977, OA18977 +18978, OA18978 +18979, OA18979 +18980, OA18980 +18981, OA18981 +18982, OA18982 +18983, OA18983 +18984, OA18984 +18985, OA18985 +18986, OA18986 +18987, OA18987 +18988, OA18988 +18989, OA18989 +18990, OA18990 +18991, OA18991 +18992, OA18992 +18993, OA18993 +18994, OA18994 +18995, OA18995 +18996, OA18996 +18997, OA18997 +18998, OA18998 +18999, OA18999 +19000, OA19000 +19001, OA19001 +19002, OA19002 +19003, OA19003 +19004, OA19004 +19005, OA19005 +19006, OA19006 +19007, OA19007 +19008, OA19008 +19009, OA19009 +19010, OA19010 +19011, OA19011 +19012, OA19012 +19013, OA19013 +19014, OA19014 +19015, OA19015 +19016, OA19016 +19017, OA19017 +19018, OA19018 +19019, OA19019 +19020, OA19020 +19021, OA19021 +19022, OA19022 +19023, OA19023 +19024, OA19024 +19025, OA19025 +19026, OA19026 +19027, OA19027 +19028, OA19028 +19029, OA19029 +19030, OA19030 +19031, OA19031 +19032, OA19032 +19033, OA19033 +19034, OA19034 +19035, OA19035 +19036, OA19036 +19037, OA19037 +19038, OA19038 +19039, OA19039 +19040, OA19040 +19041, OA19041 +19042, OA19042 +19043, OA19043 +19044, OA19044 +19045, OA19045 +19046, OA19046 +19047, OA19047 +19048, OA19048 +19049, OA19049 +19050, OA19050 +19051, OA19051 +19052, OA19052 +19053, OA19053 +19054, OA19054 +19055, OA19055 +19056, OA19056 +19057, OA19057 +19058, OA19058 +19059, OA19059 +19060, OA19060 +19061, OA19061 +19062, OA19062 +19063, OA19063 +19064, OA19064 +19065, OA19065 +19066, OA19066 +19067, OA19067 +19068, OA19068 +19069, OA19069 +19070, OA19070 +19071, OA19071 +19072, OA19072 +19073, OA19073 +19074, OA19074 +19075, OA19075 +19076, OA19076 +19077, OA19077 +19078, OA19078 +19079, OA19079 +19080, OA19080 +19081, OA19081 +19082, OA19082 +19083, OA19083 +19084, OA19084 +19085, OA19085 +19086, OA19086 +19087, OA19087 +19088, OA19088 +19089, OA19089 +19090, OA19090 +19091, OA19091 +19092, OA19092 +19093, OA19093 +19094, OA19094 +19095, OA19095 +19096, OA19096 +19097, OA19097 +19098, OA19098 +19099, OA19099 +19100, OA19100 +19101, OA19101 +19102, OA19102 +19103, OA19103 +19104, OA19104 +19105, OA19105 +19106, OA19106 +19107, OA19107 +19108, OA19108 +19109, OA19109 +19110, OA19110 +19111, OA19111 +19112, OA19112 +19113, OA19113 +19114, OA19114 +19115, OA19115 +19116, OA19116 +19117, OA19117 +19118, OA19118 +19119, OA19119 +19120, OA19120 +19121, OA19121 +19122, OA19122 +19123, OA19123 +19124, OA19124 +19125, OA19125 +19126, OA19126 +19127, OA19127 +19128, OA19128 +19129, OA19129 +19130, OA19130 +19131, OA19131 +19132, OA19132 +19133, OA19133 +19134, OA19134 +19135, OA19135 +19136, OA19136 +19137, OA19137 +19138, OA19138 +19139, OA19139 +19140, OA19140 +19141, OA19141 +19142, OA19142 +19143, OA19143 +19144, OA19144 +19145, OA19145 +19146, OA19146 +19147, OA19147 +19148, OA19148 +19149, OA19149 +19150, OA19150 +19151, OA19151 +19152, OA19152 +19153, OA19153 +19154, OA19154 +19155, OA19155 +19156, OA19156 +19157, OA19157 +19158, OA19158 +19159, OA19159 +19160, OA19160 +19161, OA19161 +19162, OA19162 +19163, OA19163 +19164, OA19164 +19165, OA19165 +19166, OA19166 +19167, OA19167 +19168, OA19168 +19169, OA19169 +19170, OA19170 +19171, OA19171 +19172, OA19172 +19173, OA19173 +19174, OA19174 +19175, OA19175 +19176, OA19176 +19177, OA19177 +19178, OA19178 +19179, OA19179 +19180, OA19180 +19181, OA19181 +19182, OA19182 +19183, OA19183 +19184, OA19184 +19185, OA19185 +19186, OA19186 +19187, OA19187 +19188, OA19188 +19189, OA19189 +19190, OA19190 +19191, OA19191 +19192, OA19192 +19193, OA19193 +19194, OA19194 +19195, OA19195 +19196, OA19196 +19197, OA19197 +19198, OA19198 +19199, OA19199 +19200, OA19200 +19201, OA19201 +19202, OA19202 +19203, OA19203 +19204, OA19204 +19205, OA19205 +19206, OA19206 +19207, OA19207 +19208, OA19208 +19209, OA19209 +19210, OA19210 +19211, OA19211 +19212, OA19212 +19213, OA19213 +19214, OA19214 +19215, OA19215 +19216, OA19216 +19217, OA19217 +19218, OA19218 +19219, OA19219 +19220, OA19220 +19221, OA19221 +19222, OA19222 +19223, OA19223 +19224, OA19224 +19225, OA19225 +19226, OA19226 +19227, OA19227 +19228, OA19228 +19229, OA19229 +19230, OA19230 +19231, OA19231 +19232, OA19232 +19233, OA19233 +19234, OA19234 +19235, OA19235 +19236, OA19236 +19237, OA19237 +19238, OA19238 +19239, OA19239 +19240, OA19240 +19241, OA19241 +19242, OA19242 +19243, OA19243 +19244, OA19244 +19245, OA19245 +19246, OA19246 +19247, OA19247 +19248, OA19248 +19249, OA19249 +19250, OA19250 +19251, OA19251 +19252, OA19252 +19253, OA19253 +19254, OA19254 +19255, OA19255 +19256, OA19256 +19257, OA19257 +19258, OA19258 +19259, OA19259 +19260, OA19260 +19261, OA19261 +19262, OA19262 +19263, OA19263 +19264, OA19264 +19265, OA19265 +19266, OA19266 +19267, OA19267 +19268, OA19268 +19269, OA19269 +19270, OA19270 +19271, OA19271 +19272, OA19272 +19273, OA19273 +19274, OA19274 +19275, OA19275 +19276, OA19276 +19277, OA19277 +19278, OA19278 +19279, OA19279 +19280, OA19280 +19281, OA19281 +19282, OA19282 +19283, OA19283 +19284, OA19284 +19285, OA19285 +19286, OA19286 +19287, OA19287 +19288, OA19288 +19289, OA19289 +19290, OA19290 +19291, OA19291 +19292, OA19292 +19293, OA19293 +19294, OA19294 +19295, OA19295 +19296, OA19296 +19297, OA19297 +19298, OA19298 +19299, OA19299 +19300, OA19300 +19301, OA19301 +19302, OA19302 +19303, OA19303 +19304, OA19304 +19305, OA19305 +19306, OA19306 +19307, OA19307 +19308, OA19308 +19309, OA19309 +19310, OA19310 +19311, OA19311 +19312, OA19312 +19313, OA19313 +19314, OA19314 +19315, OA19315 +19316, OA19316 +19317, OA19317 +19318, OA19318 +19319, OA19319 +19320, OA19320 +19321, OA19321 +19322, OA19322 +19323, OA19323 +19324, OA19324 +19325, OA19325 +19326, OA19326 +19327, OA19327 +19328, OA19328 +19329, OA19329 +19330, OA19330 +19331, OA19331 +19332, OA19332 +19333, OA19333 +19334, OA19334 +19335, OA19335 +19336, OA19336 +19337, OA19337 +19338, OA19338 +19339, OA19339 +19340, OA19340 +19341, OA19341 +19342, OA19342 +19343, OA19343 +19344, OA19344 +19345, OA19345 +19346, OA19346 +19347, OA19347 +19348, OA19348 +19349, OA19349 +19350, OA19350 +19351, OA19351 +19352, OA19352 +19353, OA19353 +19354, OA19354 +19355, OA19355 +19356, OA19356 +19357, OA19357 +19358, OA19358 +19359, OA19359 +19360, OA19360 +19361, OA19361 +19362, OA19362 +19363, OA19363 +19364, OA19364 +19365, OA19365 +19366, OA19366 +19367, OA19367 +19368, OA19368 +19369, OA19369 +19370, OA19370 +19371, OA19371 +19372, OA19372 +19373, OA19373 +19374, OA19374 +19375, OA19375 +19376, OA19376 +19377, OA19377 +19378, OA19378 +19379, OA19379 +19380, OA19380 +19381, OA19381 +19382, OA19382 +19383, OA19383 +19384, OA19384 +19385, OA19385 +19386, OA19386 +19387, OA19387 +19388, OA19388 +19389, OA19389 +19390, OA19390 +19391, OA19391 +19392, OA19392 +19393, OA19393 +19394, OA19394 +19395, OA19395 +19396, OA19396 +19397, OA19397 +19398, OA19398 +19399, OA19399 +19400, OA19400 +19401, OA19401 +19402, OA19402 +19403, OA19403 +19404, OA19404 +19405, OA19405 +19406, OA19406 +19407, OA19407 +19408, OA19408 +19409, OA19409 +19410, OA19410 +19411, OA19411 +19412, OA19412 +19413, OA19413 +19414, OA19414 +19415, OA19415 +19416, OA19416 +19417, OA19417 +19418, OA19418 +19419, OA19419 +19420, OA19420 +19421, OA19421 +19422, OA19422 +19423, OA19423 +19424, OA19424 +19425, OA19425 +19426, OA19426 +19427, OA19427 +19428, OA19428 +19429, OA19429 +19430, OA19430 +19431, OA19431 +19432, OA19432 +19433, OA19433 +19434, OA19434 +19435, OA19435 +19436, OA19436 +19437, OA19437 +19438, OA19438 +19439, OA19439 +19440, OA19440 +19441, OA19441 +19442, OA19442 +19443, OA19443 +19444, OA19444 +19445, OA19445 +19446, OA19446 +19447, OA19447 +19448, OA19448 +19449, OA19449 +19450, OA19450 +19451, OA19451 +19452, OA19452 +19453, OA19453 +19454, OA19454 +19455, OA19455 +19456, OA19456 +19457, OA19457 +19458, OA19458 +19459, OA19459 +19460, OA19460 +19461, OA19461 +19462, OA19462 +19463, OA19463 +19464, OA19464 +19465, OA19465 +19466, OA19466 +19467, OA19467 +19468, OA19468 +19469, OA19469 +19470, OA19470 +19471, OA19471 +19472, OA19472 +19473, OA19473 +19474, OA19474 +19475, OA19475 +19476, OA19476 +19477, OA19477 +19478, OA19478 +19479, OA19479 +19480, OA19480 +19481, OA19481 +19482, OA19482 +19483, OA19483 +19484, OA19484 +19485, OA19485 +19486, OA19486 +19487, OA19487 +19488, OA19488 +19489, OA19489 +19490, OA19490 +19491, OA19491 +19492, OA19492 +19493, OA19493 +19494, OA19494 +19495, OA19495 +19496, OA19496 +19497, OA19497 +19498, OA19498 +19499, OA19499 +19500, OA19500 +19501, OA19501 +19502, OA19502 +19503, OA19503 +19504, OA19504 +19505, OA19505 +19506, OA19506 +19507, OA19507 +19508, OA19508 +19509, OA19509 +19510, OA19510 +19511, OA19511 +19512, OA19512 +19513, OA19513 +19514, OA19514 +19515, OA19515 +19516, OA19516 +19517, OA19517 +19518, OA19518 +19519, OA19519 +19520, OA19520 +19521, OA19521 +19522, OA19522 +19523, OA19523 +19524, OA19524 +19525, OA19525 +19526, OA19526 +19527, OA19527 +19528, OA19528 +19529, OA19529 +19530, OA19530 +19531, OA19531 +19532, OA19532 +19533, OA19533 +19534, OA19534 +19535, OA19535 +19536, OA19536 +19537, OA19537 +19538, OA19538 +19539, OA19539 +19540, OA19540 +19541, OA19541 +19542, OA19542 +19543, OA19543 +19544, OA19544 +19545, OA19545 +19546, OA19546 +19547, OA19547 +19548, OA19548 +19549, OA19549 +19550, OA19550 +19551, OA19551 +19552, OA19552 +19553, OA19553 +19554, OA19554 +19555, OA19555 +19556, OA19556 +19557, OA19557 +19558, OA19558 +19559, OA19559 +19560, OA19560 +19561, OA19561 +19562, OA19562 +19563, OA19563 +19564, OA19564 +19565, OA19565 +19566, OA19566 +19567, OA19567 +19568, OA19568 +19569, OA19569 +19570, OA19570 +19571, OA19571 +19572, OA19572 +19573, OA19573 +19574, OA19574 +19575, OA19575 +19576, OA19576 +19577, OA19577 +19578, OA19578 +19579, OA19579 +19580, OA19580 +19581, OA19581 +19582, OA19582 +19583, OA19583 +19584, OA19584 +19585, OA19585 +19586, OA19586 +19587, OA19587 +19588, OA19588 +19589, OA19589 +19590, OA19590 +19591, OA19591 +19592, OA19592 +19593, OA19593 +19594, OA19594 +19595, OA19595 +19596, OA19596 +19597, OA19597 +19598, OA19598 +19599, OA19599 +19600, OA19600 +19601, OA19601 +19602, OA19602 +19603, OA19603 +19604, OA19604 +19605, OA19605 +19606, OA19606 +19607, OA19607 +19608, OA19608 +19609, OA19609 +19610, OA19610 +19611, OA19611 +19612, OA19612 +19613, OA19613 +19614, OA19614 +19615, OA19615 +19616, OA19616 +19617, OA19617 +19618, OA19618 +19619, OA19619 +19620, OA19620 +19621, OA19621 +19622, OA19622 +19623, OA19623 +19624, OA19624 +19625, OA19625 +19626, OA19626 +19627, OA19627 +19628, OA19628 +19629, OA19629 +19630, OA19630 +19631, OA19631 +19632, OA19632 +19633, OA19633 +19634, OA19634 +19635, OA19635 +19636, OA19636 +19637, OA19637 +19638, OA19638 +19639, OA19639 +19640, OA19640 +19641, OA19641 +19642, OA19642 +19643, OA19643 +19644, OA19644 +19645, OA19645 +19646, OA19646 +19647, OA19647 +19648, OA19648 +19649, OA19649 +19650, OA19650 +19651, OA19651 +19652, OA19652 +19653, OA19653 +19654, OA19654 +19655, OA19655 +19656, OA19656 +19657, OA19657 +19658, OA19658 +19659, OA19659 +19660, OA19660 +19661, OA19661 +19662, OA19662 +19663, OA19663 +19664, OA19664 +19665, OA19665 +19666, OA19666 +19667, OA19667 +19668, OA19668 +19669, OA19669 +19670, OA19670 +19671, OA19671 +19672, OA19672 +19673, OA19673 +19674, OA19674 +19675, OA19675 +19676, OA19676 +19677, OA19677 +19678, OA19678 +19679, OA19679 +19680, OA19680 +19681, OA19681 +19682, OA19682 +19683, OA19683 +19684, OA19684 +19685, OA19685 +19686, OA19686 +19687, OA19687 +19688, OA19688 +19689, OA19689 +19690, OA19690 +19691, OA19691 +19692, OA19692 +19693, OA19693 +19694, OA19694 +19695, OA19695 +19696, OA19696 +19697, OA19697 +19698, OA19698 +19699, OA19699 +19700, OA19700 +19701, OA19701 +19702, OA19702 +19703, OA19703 +19704, OA19704 +19705, OA19705 +19706, OA19706 +19707, OA19707 +19708, OA19708 +19709, OA19709 +19710, OA19710 +19711, OA19711 +19712, OA19712 +19713, OA19713 +19714, OA19714 +19715, OA19715 +19716, OA19716 +19717, OA19717 +19718, OA19718 +19719, OA19719 +19720, OA19720 +19721, OA19721 +19722, OA19722 +19723, OA19723 +19724, OA19724 +19725, OA19725 +19726, OA19726 +19727, OA19727 +19728, OA19728 +19729, OA19729 +19730, OA19730 +19731, OA19731 +19732, OA19732 +19733, OA19733 +19734, OA19734 +19735, OA19735 +19736, OA19736 +19737, OA19737 +19738, OA19738 +19739, OA19739 +19740, OA19740 +19741, OA19741 +19742, OA19742 +19743, OA19743 +19744, OA19744 +19745, OA19745 +19746, OA19746 +19747, OA19747 +19748, OA19748 +19749, OA19749 +19750, OA19750 +19751, OA19751 +19752, OA19752 +19753, OA19753 +19754, OA19754 +19755, OA19755 +19756, OA19756 +19757, OA19757 +19758, OA19758 +19759, OA19759 +19760, OA19760 +19761, OA19761 +19762, OA19762 +19763, OA19763 +19764, OA19764 +19765, OA19765 +19766, OA19766 +19767, OA19767 +19768, OA19768 +19769, OA19769 +19770, OA19770 +19771, OA19771 +19772, OA19772 +19773, OA19773 +19774, OA19774 +19775, OA19775 +19776, OA19776 +19777, OA19777 +19778, OA19778 +19779, OA19779 +19780, OA19780 +19781, OA19781 +19782, OA19782 +19783, OA19783 +19784, OA19784 +19785, OA19785 +19786, OA19786 +19787, OA19787 +19788, OA19788 +19789, OA19789 +19790, OA19790 +19791, OA19791 +19792, OA19792 +19793, OA19793 +19794, OA19794 +19795, OA19795 +19796, OA19796 +19797, OA19797 +19798, OA19798 +19799, OA19799 +19800, OA19800 +19801, OA19801 +19802, OA19802 +19803, OA19803 +19804, OA19804 +19805, OA19805 +19806, OA19806 +19807, OA19807 +19808, OA19808 +19809, OA19809 +19810, OA19810 +19811, OA19811 +19812, OA19812 +19813, OA19813 +19814, OA19814 +19815, OA19815 +19816, OA19816 +19817, OA19817 +19818, OA19818 +19819, OA19819 +19820, OA19820 +19821, OA19821 +19822, OA19822 +19823, OA19823 +19824, OA19824 +19825, OA19825 +19826, OA19826 +19827, OA19827 +19828, OA19828 +19829, OA19829 +19830, OA19830 +19831, OA19831 +19832, OA19832 +19833, OA19833 +19834, OA19834 +19835, OA19835 +19836, OA19836 +19837, OA19837 +19838, OA19838 +19839, OA19839 +19840, OA19840 +19841, OA19841 +19842, OA19842 +19843, OA19843 +19844, OA19844 +19845, OA19845 +19846, OA19846 +19847, OA19847 +19848, OA19848 +19849, OA19849 +19850, OA19850 +19851, OA19851 +19852, OA19852 +19853, OA19853 +19854, OA19854 +19855, OA19855 +19856, OA19856 +19857, OA19857 +19858, OA19858 +19859, OA19859 +19860, OA19860 +19861, OA19861 +19862, OA19862 +19863, OA19863 +19864, OA19864 +19865, OA19865 +19866, OA19866 +19867, OA19867 +19868, OA19868 +19869, OA19869 +19870, OA19870 +19871, OA19871 +19872, OA19872 +19873, OA19873 +19874, OA19874 +19875, OA19875 +19876, OA19876 +19877, OA19877 +19878, OA19878 +19879, OA19879 +19880, OA19880 +19881, OA19881 +19882, OA19882 +19883, OA19883 +19884, OA19884 +19885, OA19885 +19886, OA19886 +19887, OA19887 +19888, OA19888 +19889, OA19889 +19890, OA19890 +19891, OA19891 +19892, OA19892 +19893, OA19893 +19894, OA19894 +19895, OA19895 +19896, OA19896 +19897, OA19897 +19898, OA19898 +19899, OA19899 +19900, OA19900 +19901, OA19901 +19902, OA19902 +19903, OA19903 +19904, OA19904 +19905, OA19905 +19906, OA19906 +19907, OA19907 +19908, OA19908 +19909, OA19909 +19910, OA19910 +19911, OA19911 +19912, OA19912 +19913, OA19913 +19914, OA19914 +19915, OA19915 +19916, OA19916 +19917, OA19917 +19918, OA19918 +19919, OA19919 +19920, OA19920 +19921, OA19921 +19922, OA19922 +19923, OA19923 +19924, OA19924 +19925, OA19925 +19926, OA19926 +19927, OA19927 +19928, OA19928 +19929, OA19929 +19930, OA19930 +19931, OA19931 +19932, OA19932 +19933, OA19933 +19934, OA19934 +19935, OA19935 +19936, OA19936 +19937, OA19937 +19938, OA19938 +19939, OA19939 +19940, OA19940 +19941, OA19941 +19942, OA19942 +19943, OA19943 +19944, OA19944 +19945, OA19945 +19946, OA19946 +19947, OA19947 +19948, OA19948 +19949, OA19949 +19950, OA19950 +19951, OA19951 +19952, OA19952 +19953, OA19953 +19954, OA19954 +19955, OA19955 +19956, OA19956 +19957, OA19957 +19958, OA19958 +19959, OA19959 +19960, OA19960 +19961, OA19961 +19962, OA19962 +19963, OA19963 +19964, OA19964 +19965, OA19965 +19966, OA19966 +19967, OA19967 +19968, OA19968 +19969, OA19969 +19970, OA19970 +19971, OA19971 +19972, OA19972 +19973, OA19973 +19974, OA19974 +19975, OA19975 +19976, OA19976 +19977, OA19977 +19978, OA19978 +19979, OA19979 +19980, OA19980 +19981, OA19981 +19982, OA19982 +19983, OA19983 +19984, OA19984 +19985, OA19985 +19986, OA19986 +19987, OA19987 +19988, OA19988 +19989, OA19989 +19990, OA19990 +19991, OA19991 +19992, OA19992 +19993, OA19993 +19994, OA19994 +19995, OA19995 +19996, OA19996 +19997, OA19997 +19998, OA19998 +19999, OA19999 +20000, OA20000 +20001, OA20001 +20002, OA20002 +20003, OA20003 +20004, OA20004 +20005, OA20005 +20006, OA20006 +20007, OA20007 +20008, OA20008 +20009, OA20009 +20010, OA20010 +20011, OA20011 +20012, OA20012 +20013, OA20013 +20014, OA20014 +20015, OA20015 +20016, OA20016 +20017, OA20017 +20018, OA20018 +20019, OA20019 +20020, OA20020 +20021, OA20021 +20022, OA20022 +20023, OA20023 +20024, OA20024 +20025, OA20025 +20026, OA20026 +20027, OA20027 +20028, OA20028 +20029, OA20029 +20030, OA20030 +20031, OA20031 +20032, OA20032 +20033, OA20033 +20034, OA20034 +20035, OA20035 +20036, OA20036 +20037, OA20037 +20038, OA20038 +20039, OA20039 +20040, OA20040 +20041, OA20041 +20042, OA20042 +20043, OA20043 +20044, OA20044 +20045, OA20045 +20046, OA20046 +20047, OA20047 +20048, OA20048 +20049, OA20049 +20050, OA20050 +20051, OA20051 +20052, OA20052 +20053, OA20053 +20054, OA20054 +20055, OA20055 +20056, OA20056 +20057, OA20057 +20058, OA20058 +20059, OA20059 +20060, OA20060 +20061, OA20061 +20062, OA20062 +20063, OA20063 +20064, OA20064 +20065, OA20065 +20066, OA20066 +20067, OA20067 +20068, OA20068 +20069, OA20069 +20070, OA20070 +20071, OA20071 +20072, OA20072 +20073, OA20073 +20074, OA20074 +20075, OA20075 +20076, OA20076 +20077, OA20077 +20078, OA20078 +20079, OA20079 +20080, OA20080 +20081, OA20081 +20082, OA20082 +20083, OA20083 +20084, OA20084 +20085, OA20085 +20086, OA20086 +20087, OA20087 +20088, OA20088 +20089, OA20089 +20090, OA20090 +20091, OA20091 +20092, OA20092 +20093, OA20093 +20094, OA20094 +20095, OA20095 +20096, OA20096 +20097, OA20097 +20098, OA20098 +20099, OA20099 +20100, OA20100 +20101, OA20101 +20102, OA20102 +20103, OA20103 +20104, OA20104 +20105, OA20105 +20106, OA20106 +20107, OA20107 +20108, OA20108 +20109, OA20109 +20110, OA20110 +20111, OA20111 +20112, OA20112 +20113, OA20113 +20114, OA20114 +20115, OA20115 +20116, OA20116 +20117, OA20117 +20118, OA20118 +20119, OA20119 +20120, OA20120 +20121, OA20121 +20122, OA20122 +20123, OA20123 +20124, OA20124 +20125, OA20125 +20126, OA20126 +20127, OA20127 +20128, OA20128 +20129, OA20129 +20130, OA20130 +20131, OA20131 +20132, OA20132 +20133, OA20133 +20134, OA20134 +20135, OA20135 +20136, OA20136 +20137, OA20137 +20138, OA20138 +20139, OA20139 +20140, OA20140 +20141, OA20141 +20142, OA20142 +20143, OA20143 +20144, OA20144 +20145, OA20145 +20146, OA20146 +20147, OA20147 +20148, OA20148 +20149, OA20149 +20150, OA20150 +20151, OA20151 +20152, OA20152 +20153, OA20153 +20154, OA20154 +20155, OA20155 +20156, OA20156 +20157, OA20157 +20158, OA20158 +20159, OA20159 +20160, OA20160 +20161, OA20161 +20162, OA20162 +20163, OA20163 +20164, OA20164 +20165, OA20165 +20166, OA20166 +20167, OA20167 +20168, OA20168 +20169, OA20169 +20170, OA20170 +20171, OA20171 +20172, OA20172 +20173, OA20173 +20174, OA20174 +20175, OA20175 +20176, OA20176 +20177, OA20177 +20178, OA20178 +20179, OA20179 +20180, OA20180 +20181, OA20181 +20182, OA20182 +20183, OA20183 +20184, OA20184 +20185, OA20185 +20186, OA20186 +20187, OA20187 +20188, OA20188 +20189, OA20189 +20190, OA20190 +20191, OA20191 +20192, OA20192 +20193, OA20193 +20194, OA20194 +20195, OA20195 +20196, OA20196 +20197, OA20197 +20198, OA20198 +20199, OA20199 +20200, OA20200 +20201, OA20201 +20202, OA20202 +20203, OA20203 +20204, OA20204 +20205, OA20205 +20206, OA20206 +20207, OA20207 +20208, OA20208 +20209, OA20209 +20210, OA20210 +20211, OA20211 +20212, OA20212 +20213, OA20213 +20214, OA20214 +20215, OA20215 +20216, OA20216 +20217, OA20217 +20218, OA20218 +20219, OA20219 +20220, OA20220 +20221, OA20221 +20222, OA20222 +20223, OA20223 +20224, OA20224 +20225, OA20225 +20226, OA20226 +20227, OA20227 +20228, OA20228 +20229, OA20229 +20230, OA20230 +20231, OA20231 +20232, OA20232 +20233, OA20233 +20234, OA20234 +20235, OA20235 +20236, OA20236 +20237, OA20237 +20238, OA20238 +20239, OA20239 +20240, OA20240 +20241, OA20241 +20242, OA20242 +20243, OA20243 +20244, OA20244 +20245, OA20245 +20246, OA20246 +20247, OA20247 +20248, OA20248 +20249, OA20249 +20250, OA20250 +20251, OA20251 +20252, OA20252 +20253, OA20253 +20254, OA20254 +20255, OA20255 +20256, OA20256 +20257, OA20257 +20258, OA20258 +20259, OA20259 +20260, OA20260 +20261, OA20261 +20262, OA20262 +20263, OA20263 +20264, OA20264 +20265, OA20265 +20266, OA20266 +20267, OA20267 +20268, OA20268 +20269, OA20269 +20270, OA20270 +20271, OA20271 +20272, OA20272 +20273, OA20273 +20274, OA20274 +20275, OA20275 +20276, OA20276 +20277, OA20277 +20278, OA20278 +20279, OA20279 +20280, OA20280 +20281, OA20281 +20282, OA20282 +20283, OA20283 +20284, OA20284 +20285, OA20285 +20286, OA20286 +20287, OA20287 +20288, OA20288 +20289, OA20289 +20290, OA20290 +20291, OA20291 +20292, OA20292 +20293, OA20293 +20294, OA20294 +20295, OA20295 +20296, OA20296 +20297, OA20297 +20298, OA20298 +20299, OA20299 +20300, OA20300 +20301, OA20301 +20302, OA20302 +20303, OA20303 +20304, OA20304 +20305, OA20305 +20306, OA20306 +20307, OA20307 +20308, OA20308 +20309, OA20309 +20310, OA20310 +20311, OA20311 +20312, OA20312 +20313, OA20313 +20314, OA20314 +20315, OA20315 +20316, OA20316 +20317, OA20317 +20318, OA20318 +20319, OA20319 +20320, OA20320 +20321, OA20321 +20322, OA20322 +20323, OA20323 +20324, OA20324 +20325, OA20325 +20326, OA20326 +20327, OA20327 +20328, OA20328 +20329, OA20329 +20330, OA20330 +20331, OA20331 +20332, OA20332 +20333, OA20333 +20334, OA20334 +20335, OA20335 +20336, OA20336 +20337, OA20337 +20338, OA20338 +20339, OA20339 +20340, OA20340 +20341, OA20341 +20342, OA20342 +20343, OA20343 +20344, OA20344 +20345, OA20345 +20346, OA20346 +20347, OA20347 +20348, OA20348 +20349, OA20349 +20350, OA20350 +20351, OA20351 +20352, OA20352 +20353, OA20353 +20354, OA20354 +20355, OA20355 +20356, OA20356 +20357, OA20357 +20358, OA20358 +20359, OA20359 +20360, OA20360 +20361, OA20361 +20362, OA20362 +20363, OA20363 +20364, OA20364 +20365, OA20365 +20366, OA20366 +20367, OA20367 +20368, OA20368 +20369, OA20369 +20370, OA20370 +20371, OA20371 +20372, OA20372 +20373, OA20373 +20374, OA20374 +20375, OA20375 +20376, OA20376 +20377, OA20377 +20378, OA20378 +20379, OA20379 +20380, OA20380 +20381, OA20381 +20382, OA20382 +20383, OA20383 +20384, OA20384 +20385, OA20385 +20386, OA20386 +20387, OA20387 +20388, OA20388 +20389, OA20389 +20390, OA20390 +20391, OA20391 +20392, OA20392 +20393, OA20393 +20394, OA20394 +20395, OA20395 +20396, OA20396 +20397, OA20397 +20398, OA20398 +20399, OA20399 +20400, OA20400 +20401, OA20401 +20402, OA20402 +20403, OA20403 +20404, OA20404 +20405, OA20405 +20406, OA20406 +20407, OA20407 +20408, OA20408 +20409, OA20409 +20410, OA20410 +20411, OA20411 +20412, OA20412 +20413, OA20413 +20414, OA20414 +20415, OA20415 +20416, OA20416 +20417, OA20417 +20418, OA20418 +20419, OA20419 +20420, OA20420 +20421, OA20421 +20422, OA20422 +20423, OA20423 +20424, OA20424 +20425, OA20425 +20426, OA20426 +20427, OA20427 +20428, OA20428 +20429, OA20429 +20430, OA20430 +20431, OA20431 +20432, OA20432 +20433, OA20433 +20434, OA20434 +20435, OA20435 +20436, OA20436 +20437, OA20437 +20438, OA20438 +20439, OA20439 +20440, OA20440 +20441, OA20441 +20442, OA20442 +20443, OA20443 +20444, OA20444 +20445, OA20445 +20446, OA20446 +20447, OA20447 +20448, OA20448 +20449, OA20449 +20450, OA20450 +20451, OA20451 +20452, OA20452 +20453, OA20453 +20454, OA20454 +20455, OA20455 +20456, OA20456 +20457, OA20457 +20458, OA20458 +20459, OA20459 +20460, OA20460 +20461, OA20461 +20462, OA20462 +20463, OA20463 +20464, OA20464 +20465, OA20465 +20466, OA20466 +20467, OA20467 +20468, OA20468 +20469, OA20469 +20470, OA20470 +20471, OA20471 +20472, OA20472 +20473, OA20473 +20474, OA20474 +20475, OA20475 +20476, OA20476 +20477, OA20477 +20478, OA20478 +20479, OA20479 +20480, OA20480 +20481, OA20481 +20482, OA20482 +20483, OA20483 +20484, OA20484 +20485, OA20485 +20486, OA20486 +20487, OA20487 +20488, OA20488 +20489, OA20489 +20490, OA20490 +20491, OA20491 +20492, OA20492 +20493, OA20493 +20494, OA20494 +20495, OA20495 +20496, OA20496 +20497, OA20497 +20498, OA20498 +20499, OA20499 +20500, OA20500 +20501, OA20501 +20502, OA20502 +20503, OA20503 +20504, OA20504 +20505, OA20505 +20506, OA20506 +20507, OA20507 +20508, OA20508 +20509, OA20509 +20510, OA20510 +20511, OA20511 +20512, OA20512 +20513, OA20513 +20514, OA20514 +20515, OA20515 +20516, OA20516 +20517, OA20517 +20518, OA20518 +20519, OA20519 +20520, OA20520 +20521, OA20521 +20522, OA20522 +20523, OA20523 +20524, OA20524 +20525, OA20525 +20526, OA20526 +20527, OA20527 +20528, OA20528 +20529, OA20529 +20530, OA20530 +20531, OA20531 +20532, OA20532 +20533, OA20533 +20534, OA20534 +20535, OA20535 +20536, OA20536 +20537, OA20537 +20538, OA20538 +20539, OA20539 +20540, OA20540 +20541, OA20541 +20542, OA20542 +20543, OA20543 +20544, OA20544 +20545, OA20545 +20546, OA20546 +20547, OA20547 +20548, OA20548 +20549, OA20549 +20550, OA20550 +20551, OA20551 +20552, OA20552 +20553, OA20553 +20554, OA20554 +20555, OA20555 +20556, OA20556 +20557, OA20557 +20558, OA20558 +20559, OA20559 +20560, OA20560 +20561, OA20561 +20562, OA20562 +20563, OA20563 +20564, OA20564 +20565, OA20565 +20566, OA20566 +20567, OA20567 +20568, OA20568 +20569, OA20569 +20570, OA20570 +20571, OA20571 +20572, OA20572 +20573, OA20573 +20574, OA20574 +20575, OA20575 +20576, OA20576 +20577, OA20577 +20578, OA20578 +20579, OA20579 +20580, OA20580 +20581, OA20581 +20582, OA20582 +20583, OA20583 +20584, OA20584 +20585, OA20585 +20586, OA20586 +20587, OA20587 +20588, OA20588 +20589, OA20589 +20590, OA20590 +20591, OA20591 +20592, OA20592 +20593, OA20593 +20594, OA20594 +20595, OA20595 +20596, OA20596 +20597, OA20597 +20598, OA20598 +20599, OA20599 +20600, OA20600 +20601, OA20601 +20602, OA20602 +20603, OA20603 +20604, OA20604 +20605, OA20605 +20606, OA20606 +20607, OA20607 +20608, OA20608 +20609, OA20609 +20610, OA20610 +20611, OA20611 +20612, OA20612 +20613, OA20613 +20614, OA20614 +20615, OA20615 +20616, OA20616 +20617, OA20617 +20618, OA20618 +20619, OA20619 +20620, OA20620 +20621, OA20621 +20622, OA20622 +20623, OA20623 +20624, OA20624 +20625, OA20625 +20626, OA20626 +20627, OA20627 +20628, OA20628 +20629, OA20629 +20630, OA20630 +20631, OA20631 +20632, OA20632 +20633, OA20633 +20634, OA20634 +20635, OA20635 +20636, OA20636 +20637, OA20637 +20638, OA20638 +20639, OA20639 +20640, OA20640 +20641, OA20641 +20642, OA20642 +20643, OA20643 +20644, OA20644 +20645, OA20645 +20646, OA20646 +20647, OA20647 +20648, OA20648 +20649, OA20649 +20650, OA20650 +20651, OA20651 +20652, OA20652 +20653, OA20653 +20654, OA20654 +20655, OA20655 +20656, OA20656 +20657, OA20657 +20658, OA20658 +20659, OA20659 +20660, OA20660 +20661, OA20661 +20662, OA20662 +20663, OA20663 +20664, OA20664 +20665, OA20665 +20666, OA20666 +20667, OA20667 +20668, OA20668 +20669, OA20669 +20670, OA20670 +20671, OA20671 +20672, OA20672 +20673, OA20673 +20674, OA20674 +20675, OA20675 +20676, OA20676 +20677, OA20677 +20678, OA20678 +20679, OA20679 +20680, OA20680 +20681, OA20681 +20682, OA20682 +20683, OA20683 +20684, OA20684 +20685, OA20685 +20686, OA20686 +20687, OA20687 +20688, OA20688 +20689, OA20689 +20690, OA20690 +20691, OA20691 +20692, OA20692 +20693, OA20693 +20694, OA20694 +20695, OA20695 +20696, OA20696 +20697, OA20697 +20698, OA20698 +20699, OA20699 +20700, OA20700 +20701, OA20701 +20702, OA20702 +20703, OA20703 +20704, OA20704 +20705, OA20705 +20706, OA20706 +20707, OA20707 +20708, OA20708 +20709, OA20709 +20710, OA20710 +20711, OA20711 +20712, OA20712 +20713, OA20713 +20714, OA20714 +20715, OA20715 +20716, OA20716 +20717, OA20717 +20718, OA20718 +20719, OA20719 +20720, OA20720 +20721, OA20721 +20722, OA20722 +20723, OA20723 +20724, OA20724 +20725, OA20725 +20726, OA20726 +20727, OA20727 +20728, OA20728 +20729, OA20729 +20730, OA20730 +20731, OA20731 +20732, OA20732 +20733, OA20733 +20734, OA20734 +20735, OA20735 +20736, OA20736 +20737, OA20737 +20738, OA20738 +20739, OA20739 +20740, OA20740 +20741, OA20741 +20742, OA20742 +20743, OA20743 +20744, OA20744 +20745, OA20745 +20746, OA20746 +20747, OA20747 +20748, OA20748 +20749, OA20749 +20750, OA20750 +20751, OA20751 +20752, OA20752 +20753, OA20753 +20754, OA20754 +20755, OA20755 +20756, OA20756 +20757, OA20757 +20758, OA20758 +20759, OA20759 +20760, OA20760 +20761, OA20761 +20762, OA20762 +20763, OA20763 +20764, OA20764 +20765, OA20765 +20766, OA20766 +20767, OA20767 +20768, OA20768 +20769, OA20769 +20770, OA20770 +20771, OA20771 +20772, OA20772 +20773, OA20773 +20774, OA20774 +20775, OA20775 +20776, OA20776 +20777, OA20777 +20778, OA20778 +20779, OA20779 +20780, OA20780 +20781, OA20781 +20782, OA20782 +20783, OA20783 +20784, OA20784 +20785, OA20785 +20786, OA20786 +20787, OA20787 +20788, OA20788 +20789, OA20789 +20790, OA20790 +20791, OA20791 +20792, OA20792 +20793, OA20793 +20794, OA20794 +20795, OA20795 +20796, OA20796 +20797, OA20797 +20798, OA20798 +20799, OA20799 +20800, OA20800 +20801, OA20801 +20802, OA20802 +20803, OA20803 +20804, OA20804 +20805, OA20805 +20806, OA20806 +20807, OA20807 +20808, OA20808 +20809, OA20809 +20810, OA20810 +20811, OA20811 +20812, OA20812 +20813, OA20813 +20814, OA20814 +20815, OA20815 +20816, OA20816 +20817, OA20817 +20818, OA20818 +20819, OA20819 +20820, OA20820 +20821, OA20821 +20822, OA20822 +20823, OA20823 +20824, OA20824 +20825, OA20825 +20826, OA20826 +20827, OA20827 +20828, OA20828 +20829, OA20829 +20830, OA20830 +20831, OA20831 +20832, OA20832 +20833, OA20833 +20834, OA20834 +20835, OA20835 +20836, OA20836 +20837, OA20837 +20838, OA20838 +20839, OA20839 +20840, OA20840 +20841, OA20841 +20842, OA20842 +20843, OA20843 +20844, OA20844 +20845, OA20845 +20846, OA20846 +20847, OA20847 +20848, OA20848 +20849, OA20849 +20850, OA20850 +20851, OA20851 +20852, OA20852 +20853, OA20853 +20854, OA20854 +20855, OA20855 +20856, OA20856 +20857, OA20857 +20858, OA20858 +20859, OA20859 +20860, OA20860 +20861, OA20861 +20862, OA20862 +20863, OA20863 +20864, OA20864 +20865, OA20865 +20866, OA20866 +20867, OA20867 +20868, OA20868 +20869, OA20869 +20870, OA20870 +20871, OA20871 +20872, OA20872 +20873, OA20873 +20874, OA20874 +20875, OA20875 +20876, OA20876 +20877, OA20877 +20878, OA20878 +20879, OA20879 +20880, OA20880 +20881, OA20881 +20882, OA20882 +20883, OA20883 +20884, OA20884 +20885, OA20885 +20886, OA20886 +20887, OA20887 +20888, OA20888 +20889, OA20889 +20890, OA20890 +20891, OA20891 +20892, OA20892 +20893, OA20893 +20894, OA20894 +20895, OA20895 +20896, OA20896 +20897, OA20897 +20898, OA20898 +20899, OA20899 +20900, OA20900 +20901, OA20901 +20902, OA20902 +20903, OA20903 +20904, OA20904 +20905, OA20905 +20906, OA20906 +20907, OA20907 +20908, OA20908 +20909, OA20909 +20910, OA20910 +20911, OA20911 +20912, OA20912 +20913, OA20913 +20914, OA20914 +20915, OA20915 +20916, OA20916 +20917, OA20917 +20918, OA20918 +20919, OA20919 +20920, OA20920 +20921, OA20921 +20922, OA20922 +20923, OA20923 +20924, OA20924 +20925, OA20925 +20926, OA20926 +20927, OA20927 +20928, OA20928 +20929, OA20929 +20930, OA20930 +20931, OA20931 +20932, OA20932 +20933, OA20933 +20934, OA20934 +20935, OA20935 +20936, OA20936 +20937, OA20937 +20938, OA20938 +20939, OA20939 +20940, OA20940 +20941, OA20941 +20942, OA20942 +20943, OA20943 +20944, OA20944 +20945, OA20945 +20946, OA20946 +20947, OA20947 +20948, OA20948 +20949, OA20949 +20950, OA20950 +20951, OA20951 +20952, OA20952 +20953, OA20953 +20954, OA20954 +20955, OA20955 +20956, OA20956 +20957, OA20957 +20958, OA20958 +20959, OA20959 +20960, OA20960 +20961, OA20961 +20962, OA20962 +20963, OA20963 +20964, OA20964 +20965, OA20965 +20966, OA20966 +20967, OA20967 +20968, OA20968 +20969, OA20969 +20970, OA20970 +20971, OA20971 +20972, OA20972 +20973, OA20973 +20974, OA20974 +20975, OA20975 +20976, OA20976 +20977, OA20977 +20978, OA20978 +20979, OA20979 +20980, OA20980 +20981, OA20981 +20982, OA20982 +20983, OA20983 +20984, OA20984 +20985, OA20985 +20986, OA20986 +20987, OA20987 +20988, OA20988 +20989, OA20989 +20990, OA20990 +20991, OA20991 +20992, OA20992 +20993, OA20993 +20994, OA20994 +20995, OA20995 +20996, OA20996 +20997, OA20997 +20998, OA20998 +20999, OA20999 +21000, OA21000 +21001, OA21001 +21002, OA21002 +21003, OA21003 +21004, OA21004 +21005, OA21005 +21006, OA21006 +21007, OA21007 +21008, OA21008 +21009, OA21009 +21010, OA21010 +21011, OA21011 +21012, OA21012 +21013, OA21013 +21014, OA21014 +21015, OA21015 +21016, OA21016 +21017, OA21017 +21018, OA21018 +21019, OA21019 +21020, OA21020 +21021, OA21021 +21022, OA21022 +21023, OA21023 +21024, OA21024 +21025, OA21025 +21026, OA21026 +21027, OA21027 +21028, OA21028 +21029, OA21029 +21030, OA21030 +21031, OA21031 +21032, OA21032 +21033, OA21033 +21034, OA21034 +21035, OA21035 +21036, OA21036 +21037, OA21037 +21038, OA21038 +21039, OA21039 +21040, OA21040 +21041, OA21041 +21042, OA21042 +21043, OA21043 +21044, OA21044 +21045, OA21045 +21046, OA21046 +21047, OA21047 +21048, OA21048 +21049, OA21049 +21050, OA21050 +21051, OA21051 +21052, OA21052 +21053, OA21053 +21054, OA21054 +21055, OA21055 +21056, OA21056 +21057, OA21057 +21058, OA21058 +21059, OA21059 +21060, OA21060 +21061, OA21061 +21062, OA21062 +21063, OA21063 +21064, OA21064 +21065, OA21065 +21066, OA21066 +21067, OA21067 +21068, OA21068 +21069, OA21069 +21070, OA21070 +21071, OA21071 +21072, OA21072 +21073, OA21073 +21074, OA21074 +21075, OA21075 +21076, OA21076 +21077, OA21077 +21078, OA21078 +21079, OA21079 +21080, OA21080 +21081, OA21081 +21082, OA21082 +21083, OA21083 +21084, OA21084 +21085, OA21085 +21086, OA21086 +21087, OA21087 +21088, OA21088 +21089, OA21089 +21090, OA21090 +21091, OA21091 +21092, OA21092 +21093, OA21093 +21094, OA21094 +21095, OA21095 +21096, OA21096 +21097, OA21097 +21098, OA21098 +21099, OA21099 +21100, OA21100 +21101, OA21101 +21102, OA21102 +21103, OA21103 +21104, OA21104 +21105, OA21105 +21106, OA21106 +21107, OA21107 +21108, OA21108 +21109, OA21109 +21110, OA21110 +21111, OA21111 +21112, OA21112 +21113, OA21113 +21114, OA21114 +21115, OA21115 +21116, OA21116 +21117, OA21117 +21118, OA21118 +21119, OA21119 +21120, OA21120 +21121, OA21121 +21122, OA21122 +21123, OA21123 +21124, OA21124 +21125, OA21125 +21126, OA21126 +21127, OA21127 +21128, OA21128 +21129, OA21129 +21130, OA21130 +21131, OA21131 +21132, OA21132 +21133, OA21133 +21134, OA21134 +21135, OA21135 +21136, OA21136 +21137, OA21137 +21138, OA21138 +21139, OA21139 +21140, OA21140 +21141, OA21141 +21142, OA21142 +21143, OA21143 +21144, OA21144 +21145, OA21145 +21146, OA21146 +21147, OA21147 +21148, OA21148 +21149, OA21149 +21150, OA21150 +21151, OA21151 +21152, OA21152 +21153, OA21153 +21154, OA21154 +21155, OA21155 +21156, OA21156 +21157, OA21157 +21158, OA21158 +21159, OA21159 +21160, OA21160 +21161, OA21161 +21162, OA21162 +21163, OA21163 +21164, OA21164 +21165, OA21165 +21166, OA21166 +21167, OA21167 +21168, OA21168 +21169, OA21169 +21170, OA21170 +21171, OA21171 +21172, OA21172 +21173, OA21173 +21174, OA21174 +21175, OA21175 +21176, OA21176 +21177, OA21177 +21178, OA21178 +21179, OA21179 +21180, OA21180 +21181, OA21181 +21182, OA21182 +21183, OA21183 +21184, OA21184 +21185, OA21185 +21186, OA21186 +21187, OA21187 +21188, OA21188 +21189, OA21189 +21190, OA21190 +21191, OA21191 +21192, OA21192 +21193, OA21193 +21194, OA21194 +21195, OA21195 +21196, OA21196 +21197, OA21197 +21198, OA21198 +21199, OA21199 +21200, OA21200 +21201, OA21201 +21202, OA21202 +21203, OA21203 +21204, OA21204 +21205, OA21205 +21206, OA21206 +21207, OA21207 +21208, OA21208 +21209, OA21209 +21210, OA21210 +21211, OA21211 +21212, OA21212 +21213, OA21213 +21214, OA21214 +21215, OA21215 +21216, OA21216 +21217, OA21217 +21218, OA21218 +21219, OA21219 +21220, OA21220 +21221, OA21221 +21222, OA21222 +21223, OA21223 +21224, OA21224 +21225, OA21225 +21226, OA21226 +21227, OA21227 +21228, OA21228 +21229, OA21229 +21230, OA21230 +21231, OA21231 +21232, OA21232 +21233, OA21233 +21234, OA21234 +21235, OA21235 +21236, OA21236 +21237, OA21237 +21238, OA21238 +21239, OA21239 +21240, OA21240 +21241, OA21241 +21242, OA21242 +21243, OA21243 +21244, OA21244 +21245, OA21245 +21246, OA21246 +21247, OA21247 +21248, OA21248 +21249, OA21249 +21250, OA21250 +21251, OA21251 +21252, OA21252 +21253, OA21253 +21254, OA21254 +21255, OA21255 +21256, OA21256 +21257, OA21257 +21258, OA21258 +21259, OA21259 +21260, OA21260 +21261, OA21261 +21262, OA21262 +21263, OA21263 +21264, OA21264 +21265, OA21265 +21266, OA21266 +21267, OA21267 +21268, OA21268 +21269, OA21269 +21270, OA21270 +21271, OA21271 +21272, OA21272 +21273, OA21273 +21274, OA21274 +21275, OA21275 +21276, OA21276 +21277, OA21277 +21278, OA21278 +21279, OA21279 +21280, OA21280 +21281, OA21281 +21282, OA21282 +21283, OA21283 +21284, OA21284 +21285, OA21285 +21286, OA21286 +21287, OA21287 +21288, OA21288 +21289, OA21289 +21290, OA21290 +21291, OA21291 +21292, OA21292 +21293, OA21293 +21294, OA21294 +21295, OA21295 +21296, OA21296 +21297, OA21297 +21298, OA21298 +21299, OA21299 +21300, OA21300 +21301, OA21301 +21302, OA21302 +21303, OA21303 +21304, OA21304 +21305, OA21305 +21306, OA21306 +21307, OA21307 +21308, OA21308 +21309, OA21309 +21310, OA21310 +21311, OA21311 +21312, OA21312 +21313, OA21313 +21314, OA21314 +21315, OA21315 +21316, OA21316 +21317, OA21317 +21318, OA21318 +21319, OA21319 +21320, OA21320 +21321, OA21321 +21322, OA21322 +21323, OA21323 +21324, OA21324 +21325, OA21325 +21326, OA21326 +21327, OA21327 +21328, OA21328 +21329, OA21329 +21330, OA21330 +21331, OA21331 +21332, OA21332 +21333, OA21333 +21334, OA21334 +21335, OA21335 +21336, OA21336 +21337, OA21337 +21338, OA21338 +21339, OA21339 +21340, OA21340 +21341, OA21341 +21342, OA21342 +21343, OA21343 +21344, OA21344 +21345, OA21345 +21346, OA21346 +21347, OA21347 +21348, OA21348 +21349, OA21349 +21350, OA21350 +21351, OA21351 +21352, OA21352 +21353, OA21353 +21354, OA21354 +21355, OA21355 +21356, OA21356 +21357, OA21357 +21358, OA21358 +21359, OA21359 +21360, OA21360 +21361, OA21361 +21362, OA21362 +21363, OA21363 +21364, OA21364 +21365, OA21365 +21366, OA21366 +21367, OA21367 +21368, OA21368 +21369, OA21369 +21370, OA21370 +21371, OA21371 +21372, OA21372 +21373, OA21373 +21374, OA21374 +21375, OA21375 +21376, OA21376 +21377, OA21377 +21378, OA21378 +21379, OA21379 +21380, OA21380 +21381, OA21381 +21382, OA21382 +21383, OA21383 +21384, OA21384 +21385, OA21385 +21386, OA21386 +21387, OA21387 +21388, OA21388 +21389, OA21389 +21390, OA21390 +21391, OA21391 +21392, OA21392 +21393, OA21393 +21394, OA21394 +21395, OA21395 +21396, OA21396 +21397, OA21397 +21398, OA21398 +21399, OA21399 +21400, OA21400 +21401, OA21401 +21402, OA21402 +21403, OA21403 +21404, OA21404 +21405, OA21405 +21406, OA21406 +21407, OA21407 +21408, OA21408 +21409, OA21409 +21410, OA21410 +21411, OA21411 +21412, OA21412 +21413, OA21413 +21414, OA21414 +21415, OA21415 +21416, OA21416 +21417, OA21417 +21418, OA21418 +21419, OA21419 +21420, OA21420 +21421, OA21421 +21422, OA21422 +21423, OA21423 +21424, OA21424 +21425, OA21425 +21426, OA21426 +21427, OA21427 +21428, OA21428 +21429, OA21429 +21430, OA21430 +21431, OA21431 +21432, OA21432 +21433, OA21433 +21434, OA21434 +21435, OA21435 +21436, OA21436 +21437, OA21437 +21438, OA21438 +21439, OA21439 +21440, OA21440 +21441, OA21441 +21442, OA21442 +21443, OA21443 +21444, OA21444 +21445, OA21445 +21446, OA21446 +21447, OA21447 +21448, OA21448 +21449, OA21449 +21450, OA21450 +21451, OA21451 +21452, OA21452 +21453, OA21453 +21454, OA21454 +21455, OA21455 +21456, OA21456 +21457, OA21457 +21458, OA21458 +21459, OA21459 +21460, OA21460 +21461, OA21461 +21462, OA21462 +21463, OA21463 +21464, OA21464 +21465, OA21465 +21466, OA21466 +21467, OA21467 +21468, OA21468 +21469, OA21469 +21470, OA21470 +21471, OA21471 +21472, OA21472 +21473, OA21473 +21474, OA21474 +21475, OA21475 +21476, OA21476 +21477, OA21477 +21478, OA21478 +21479, OA21479 +21480, OA21480 +21481, OA21481 +21482, OA21482 +21483, OA21483 +21484, OA21484 +21485, OA21485 +21486, OA21486 +21487, OA21487 +21488, OA21488 +21489, OA21489 +21490, OA21490 +21491, OA21491 +21492, OA21492 +21493, OA21493 +21494, OA21494 +21495, OA21495 +21496, OA21496 +21497, OA21497 +21498, OA21498 +21499, OA21499 +21500, OA21500 +21501, OA21501 +21502, OA21502 +21503, OA21503 +21504, OA21504 +21505, OA21505 +21506, OA21506 +21507, OA21507 +21508, OA21508 +21509, OA21509 +21510, OA21510 +21511, OA21511 +21512, OA21512 +21513, OA21513 +21514, OA21514 +21515, OA21515 +21516, OA21516 +21517, OA21517 +21518, OA21518 +21519, OA21519 +21520, OA21520 +21521, OA21521 +21522, OA21522 +21523, OA21523 +21524, OA21524 +21525, OA21525 +21526, OA21526 +21527, OA21527 +21528, OA21528 +21529, OA21529 +21530, OA21530 +21531, OA21531 +21532, OA21532 +21533, OA21533 +21534, OA21534 +21535, OA21535 +21536, OA21536 +21537, OA21537 +21538, OA21538 +21539, OA21539 +21540, OA21540 +21541, OA21541 +21542, OA21542 +21543, OA21543 +21544, OA21544 +21545, OA21545 +21546, OA21546 +21547, OA21547 +21548, OA21548 +21549, OA21549 +21550, OA21550 +21551, OA21551 +21552, OA21552 +21553, OA21553 +21554, OA21554 +21555, OA21555 +21556, OA21556 +21557, OA21557 +21558, OA21558 +21559, OA21559 +21560, OA21560 +21561, OA21561 +21562, OA21562 +21563, OA21563 +21564, OA21564 +21565, OA21565 +21566, OA21566 +21567, OA21567 +21568, OA21568 +21569, OA21569 +21570, OA21570 +21571, OA21571 +21572, OA21572 +21573, OA21573 +21574, OA21574 +21575, OA21575 +21576, OA21576 +21577, OA21577 +21578, OA21578 +21579, OA21579 +21580, OA21580 +21581, OA21581 +21582, OA21582 +21583, OA21583 +21584, OA21584 +21585, OA21585 +21586, OA21586 +21587, OA21587 +21588, OA21588 +21589, OA21589 +21590, OA21590 +21591, OA21591 +21592, OA21592 +21593, OA21593 +21594, OA21594 +21595, OA21595 +21596, OA21596 +21597, OA21597 +21598, OA21598 +21599, OA21599 +21600, OA21600 +21601, OA21601 +21602, OA21602 +21603, OA21603 +21604, OA21604 +21605, OA21605 +21606, OA21606 +21607, OA21607 +21608, OA21608 +21609, OA21609 +21610, OA21610 +21611, OA21611 +21612, OA21612 +21613, OA21613 +21614, OA21614 +21615, OA21615 +21616, OA21616 +21617, OA21617 +21618, OA21618 +21619, OA21619 +21620, OA21620 +21621, OA21621 +21622, OA21622 +21623, OA21623 +21624, OA21624 +21625, OA21625 +21626, OA21626 +21627, OA21627 +21628, OA21628 +21629, OA21629 +21630, OA21630 +21631, OA21631 +21632, OA21632 +21633, OA21633 +21634, OA21634 +21635, OA21635 +21636, OA21636 +21637, OA21637 +21638, OA21638 +21639, OA21639 +21640, OA21640 +21641, OA21641 +21642, OA21642 +21643, OA21643 +21644, OA21644 +21645, OA21645 +21646, OA21646 +21647, OA21647 +21648, OA21648 +21649, OA21649 +21650, OA21650 +21651, OA21651 +21652, OA21652 +21653, OA21653 +21654, OA21654 +21655, OA21655 +21656, OA21656 +21657, OA21657 +21658, OA21658 +21659, OA21659 +21660, OA21660 +21661, OA21661 +21662, OA21662 +21663, OA21663 +21664, OA21664 +21665, OA21665 +21666, OA21666 +21667, OA21667 +21668, OA21668 +21669, OA21669 +21670, OA21670 +21671, OA21671 +21672, OA21672 +21673, OA21673 +21674, OA21674 +21675, OA21675 +21676, OA21676 +21677, OA21677 +21678, OA21678 +21679, OA21679 +21680, OA21680 +21681, OA21681 +21682, OA21682 +21683, OA21683 +21684, OA21684 +21685, OA21685 +21686, OA21686 +21687, OA21687 +21688, OA21688 +21689, OA21689 +21690, OA21690 +21691, OA21691 +21692, OA21692 +21693, OA21693 +21694, OA21694 +21695, OA21695 +21696, OA21696 +21697, OA21697 +21698, OA21698 +21699, OA21699 +21700, OA21700 +21701, OA21701 +21702, OA21702 +21703, OA21703 +21704, OA21704 +21705, OA21705 +21706, OA21706 +21707, OA21707 +21708, OA21708 +21709, OA21709 +21710, OA21710 +21711, OA21711 +21712, OA21712 +21713, OA21713 +21714, OA21714 +21715, OA21715 +21716, OA21716 +21717, OA21717 +21718, OA21718 +21719, OA21719 +21720, OA21720 +21721, OA21721 +21722, OA21722 +21723, OA21723 +21724, OA21724 +21725, OA21725 +21726, OA21726 +21727, OA21727 +21728, OA21728 +21729, OA21729 +21730, OA21730 +21731, OA21731 +21732, OA21732 +21733, OA21733 +21734, OA21734 +21735, OA21735 +21736, OA21736 +21737, OA21737 +21738, OA21738 +21739, OA21739 +21740, OA21740 +21741, OA21741 +21742, OA21742 +21743, OA21743 +21744, OA21744 +21745, OA21745 +21746, OA21746 +21747, OA21747 +21748, OA21748 +21749, OA21749 +21750, OA21750 +21751, OA21751 +21752, OA21752 +21753, OA21753 +21754, OA21754 +21755, OA21755 +21756, OA21756 +21757, OA21757 +21758, OA21758 +21759, OA21759 +21760, OA21760 +21761, OA21761 +21762, OA21762 +21763, OA21763 +21764, OA21764 +21765, OA21765 +21766, OA21766 +21767, OA21767 +21768, OA21768 +21769, OA21769 +21770, OA21770 +21771, OA21771 +21772, OA21772 +21773, OA21773 +21774, OA21774 +21775, OA21775 +21776, OA21776 +21777, OA21777 +21778, OA21778 +21779, OA21779 +21780, OA21780 +21781, OA21781 +21782, OA21782 +21783, OA21783 +21784, OA21784 +21785, OA21785 +21786, OA21786 +21787, OA21787 +21788, OA21788 +21789, OA21789 +21790, OA21790 +21791, OA21791 +21792, OA21792 +21793, OA21793 +21794, OA21794 +21795, OA21795 +21796, OA21796 +21797, OA21797 +21798, OA21798 +21799, OA21799 +21800, OA21800 +21801, OA21801 +21802, OA21802 +21803, OA21803 +21804, OA21804 +21805, OA21805 +21806, OA21806 +21807, OA21807 +21808, OA21808 +21809, OA21809 +21810, OA21810 +21811, OA21811 +21812, OA21812 +21813, OA21813 +21814, OA21814 +21815, OA21815 +21816, OA21816 +21817, OA21817 +21818, OA21818 +21819, OA21819 +21820, OA21820 +21821, OA21821 +21822, OA21822 +21823, OA21823 +21824, OA21824 +21825, OA21825 +21826, OA21826 +21827, OA21827 +21828, OA21828 +21829, OA21829 +21830, OA21830 +21831, OA21831 +21832, OA21832 +21833, OA21833 +21834, OA21834 +21835, OA21835 +21836, OA21836 +21837, OA21837 +21838, OA21838 +21839, OA21839 +21840, OA21840 +21841, OA21841 +21842, OA21842 +21843, OA21843 +21844, OA21844 +21845, OA21845 +21846, OA21846 +21847, OA21847 +21848, OA21848 +21849, OA21849 +21850, OA21850 +21851, OA21851 +21852, OA21852 +21853, OA21853 +21854, OA21854 +21855, OA21855 +21856, OA21856 +21857, OA21857 +21858, OA21858 +21859, OA21859 +21860, OA21860 +21861, OA21861 +21862, OA21862 +21863, OA21863 +21864, OA21864 +21865, OA21865 +21866, OA21866 +21867, OA21867 +21868, OA21868 +21869, OA21869 +21870, OA21870 +21871, OA21871 +21872, OA21872 +21873, OA21873 +21874, OA21874 +21875, OA21875 +21876, OA21876 +21877, OA21877 +21878, OA21878 +21879, OA21879 +21880, OA21880 +21881, OA21881 +21882, OA21882 +21883, OA21883 +21884, OA21884 +21885, OA21885 +21886, OA21886 +21887, OA21887 +21888, OA21888 +21889, OA21889 +21890, OA21890 +21891, OA21891 +21892, OA21892 +21893, OA21893 +21894, OA21894 +21895, OA21895 +21896, OA21896 +21897, OA21897 +21898, OA21898 +21899, OA21899 +21900, OA21900 +21901, OA21901 +21902, OA21902 +21903, OA21903 +21904, OA21904 +21905, OA21905 +21906, OA21906 +21907, OA21907 +21908, OA21908 +21909, OA21909 +21910, OA21910 +21911, OA21911 +21912, OA21912 +21913, OA21913 +21914, OA21914 +21915, OA21915 +21916, OA21916 +21917, OA21917 +21918, OA21918 +21919, OA21919 +21920, OA21920 +21921, OA21921 +21922, OA21922 +21923, OA21923 +21924, OA21924 +21925, OA21925 +21926, OA21926 +21927, OA21927 +21928, OA21928 +21929, OA21929 +21930, OA21930 +21931, OA21931 +21932, OA21932 +21933, OA21933 +21934, OA21934 +21935, OA21935 +21936, OA21936 +21937, OA21937 +21938, OA21938 +21939, OA21939 +21940, OA21940 +21941, OA21941 +21942, OA21942 +21943, OA21943 +21944, OA21944 +21945, OA21945 +21946, OA21946 +21947, OA21947 +21948, OA21948 +21949, OA21949 +21950, OA21950 +21951, OA21951 +21952, OA21952 +21953, OA21953 +21954, OA21954 +21955, OA21955 +21956, OA21956 +21957, OA21957 +21958, OA21958 +21959, OA21959 +21960, OA21960 +21961, OA21961 +21962, OA21962 +21963, OA21963 +21964, OA21964 +21965, OA21965 +21966, OA21966 +21967, OA21967 +21968, OA21968 +21969, OA21969 +21970, OA21970 +21971, OA21971 +21972, OA21972 +21973, OA21973 +21974, OA21974 +21975, OA21975 +21976, OA21976 +21977, OA21977 +21978, OA21978 +21979, OA21979 +21980, OA21980 +21981, OA21981 +21982, OA21982 +21983, OA21983 +21984, OA21984 +21985, OA21985 +21986, OA21986 +21987, OA21987 +21988, OA21988 +21989, OA21989 +21990, OA21990 +21991, OA21991 +21992, OA21992 +21993, OA21993 +21994, OA21994 +21995, OA21995 +21996, OA21996 +21997, OA21997 +21998, OA21998 +21999, OA21999 +22000, OA22000 +22001, OA22001 +22002, OA22002 +22003, OA22003 +22004, OA22004 +22005, OA22005 +22006, OA22006 +22007, OA22007 +22008, OA22008 +22009, OA22009 +22010, OA22010 +22011, OA22011 +22012, OA22012 +22013, OA22013 +22014, OA22014 +22015, OA22015 +22016, OA22016 +22017, OA22017 +22018, OA22018 +22019, OA22019 +22020, OA22020 +22021, OA22021 +22022, OA22022 +22023, OA22023 +22024, OA22024 +22025, OA22025 +22026, OA22026 +22027, OA22027 +22028, OA22028 +22029, OA22029 +22030, OA22030 +22031, OA22031 +22032, OA22032 +22033, OA22033 +22034, OA22034 +22035, OA22035 +22036, OA22036 +22037, OA22037 +22038, OA22038 +22039, OA22039 +22040, OA22040 +22041, OA22041 +22042, OA22042 +22043, OA22043 +22044, OA22044 +22045, OA22045 +22046, OA22046 +22047, OA22047 +22048, OA22048 +22049, OA22049 +22050, OA22050 +22051, OA22051 +22052, OA22052 +22053, OA22053 +22054, OA22054 +22055, OA22055 +22056, OA22056 +22057, OA22057 +22058, OA22058 +22059, OA22059 +22060, OA22060 +22061, OA22061 +22062, OA22062 +22063, OA22063 +22064, OA22064 +22065, OA22065 +22066, OA22066 +22067, OA22067 +22068, OA22068 +22069, OA22069 +22070, OA22070 +22071, OA22071 +22072, OA22072 +22073, OA22073 +22074, OA22074 +22075, OA22075 +22076, OA22076 +22077, OA22077 +22078, OA22078 +22079, OA22079 +22080, OA22080 +22081, OA22081 +22082, OA22082 +22083, OA22083 +22084, OA22084 +22085, OA22085 +22086, OA22086 +22087, OA22087 +22088, OA22088 +22089, OA22089 +22090, OA22090 +22091, OA22091 +22092, OA22092 +22093, OA22093 +22094, OA22094 +22095, OA22095 +22096, OA22096 +22097, OA22097 +22098, OA22098 +22099, OA22099 +22100, OA22100 +22101, OA22101 +22102, OA22102 +22103, OA22103 +22104, OA22104 +22105, OA22105 +22106, OA22106 +22107, OA22107 +22108, OA22108 +22109, OA22109 +22110, OA22110 +22111, OA22111 +22112, OA22112 +22113, OA22113 +22114, OA22114 +22115, OA22115 +22116, OA22116 +22117, OA22117 +22118, OA22118 +22119, OA22119 +22120, OA22120 +22121, OA22121 +22122, OA22122 +22123, OA22123 +22124, OA22124 +22125, OA22125 +22126, OA22126 +22127, OA22127 +22128, OA22128 +22129, OA22129 +22130, OA22130 +22131, OA22131 +22132, OA22132 +22133, OA22133 +22134, OA22134 +22135, OA22135 +22136, OA22136 +22137, OA22137 +22138, OA22138 +22139, OA22139 +22140, OA22140 +22141, OA22141 +22142, OA22142 +22143, OA22143 +22144, OA22144 +22145, OA22145 +22146, OA22146 +22147, OA22147 +22148, OA22148 +22149, OA22149 +22150, OA22150 +22151, OA22151 +22152, OA22152 +22153, OA22153 +22154, OA22154 +22155, OA22155 +22156, OA22156 +22157, OA22157 +22158, OA22158 +22159, OA22159 +22160, OA22160 +22161, OA22161 +22162, OA22162 +22163, OA22163 +22164, OA22164 +22165, OA22165 +22166, OA22166 +22167, OA22167 +22168, OA22168 +22169, OA22169 +22170, OA22170 +22171, OA22171 +22172, OA22172 +22173, OA22173 +22174, OA22174 +22175, OA22175 +22176, OA22176 +22177, OA22177 +22178, OA22178 +22179, OA22179 +22180, OA22180 +22181, OA22181 +22182, OA22182 +22183, OA22183 +22184, OA22184 +22185, OA22185 +22186, OA22186 +22187, OA22187 +22188, OA22188 +22189, OA22189 +22190, OA22190 +22191, OA22191 +22192, OA22192 +22193, OA22193 +22194, OA22194 +22195, OA22195 +22196, OA22196 +22197, OA22197 +22198, OA22198 +22199, OA22199 +22200, OA22200 +22201, OA22201 +22202, OA22202 +22203, OA22203 +22204, OA22204 +22205, OA22205 +22206, OA22206 +22207, OA22207 +22208, OA22208 +22209, OA22209 +22210, OA22210 +22211, OA22211 +22212, OA22212 +22213, OA22213 +22214, OA22214 +22215, OA22215 +22216, OA22216 +22217, OA22217 +22218, OA22218 +22219, OA22219 +22220, OA22220 +22221, OA22221 +22222, OA22222 +22223, OA22223 +22224, OA22224 +22225, OA22225 +22226, OA22226 +22227, OA22227 +22228, OA22228 +22229, OA22229 +22230, OA22230 +22231, OA22231 +22232, OA22232 +22233, OA22233 +22234, OA22234 +22235, OA22235 +22236, OA22236 +22237, OA22237 +22238, OA22238 +22239, OA22239 +22240, OA22240 +22241, OA22241 +22242, OA22242 +22243, OA22243 +22244, OA22244 +22245, OA22245 +22246, OA22246 +22247, OA22247 +22248, OA22248 +22249, OA22249 +22250, OA22250 +22251, OA22251 +22252, OA22252 +22253, OA22253 +22254, OA22254 +22255, OA22255 +22256, OA22256 +22257, OA22257 +22258, OA22258 +22259, OA22259 +22260, OA22260 +22261, OA22261 +22262, OA22262 +22263, OA22263 +22264, OA22264 +22265, OA22265 +22266, OA22266 +22267, OA22267 +22268, OA22268 +22269, OA22269 +22270, OA22270 +22271, OA22271 +22272, OA22272 +22273, OA22273 +22274, OA22274 +22275, OA22275 +22276, OA22276 +22277, OA22277 +22278, OA22278 +22279, OA22279 +22280, OA22280 +22281, OA22281 +22282, OA22282 +22283, OA22283 +22284, OA22284 +22285, OA22285 +22286, OA22286 +22287, OA22287 +22288, OA22288 +22289, OA22289 +22290, OA22290 +22291, OA22291 +22292, OA22292 +22293, OA22293 +22294, OA22294 +22295, OA22295 +22296, OA22296 +22297, OA22297 +22298, OA22298 +22299, OA22299 +22300, OA22300 +22301, OA22301 +22302, OA22302 +22303, OA22303 +22304, OA22304 +22305, OA22305 +22306, OA22306 +22307, OA22307 +22308, OA22308 +22309, OA22309 +22310, OA22310 +22311, OA22311 +22312, OA22312 +22313, OA22313 +22314, OA22314 +22315, OA22315 +22316, OA22316 +22317, OA22317 +22318, OA22318 +22319, OA22319 +22320, OA22320 +22321, OA22321 +22322, OA22322 +22323, OA22323 +22324, OA22324 +22325, OA22325 +22326, OA22326 +22327, OA22327 +22328, OA22328 +22329, OA22329 +22330, OA22330 +22331, OA22331 +22332, OA22332 +22333, OA22333 +22334, OA22334 +22335, OA22335 +22336, OA22336 +22337, OA22337 +22338, OA22338 +22339, OA22339 +22340, OA22340 +22341, OA22341 +22342, OA22342 +22343, OA22343 +22344, OA22344 +22345, OA22345 +22346, OA22346 +22347, OA22347 +22348, OA22348 +22349, OA22349 +22350, OA22350 +22351, OA22351 +22352, OA22352 +22353, OA22353 +22354, OA22354 +22355, OA22355 +22356, OA22356 +22357, OA22357 +22358, OA22358 +22359, OA22359 +22360, OA22360 +22361, OA22361 +22362, OA22362 +22363, OA22363 +22364, OA22364 +22365, OA22365 +22366, OA22366 +22367, OA22367 +22368, OA22368 +22369, OA22369 +22370, OA22370 +22371, OA22371 +22372, OA22372 +22373, OA22373 +22374, OA22374 +22375, OA22375 +22376, OA22376 +22377, OA22377 +22378, OA22378 +22379, OA22379 +22380, OA22380 +22381, OA22381 +22382, OA22382 +22383, OA22383 +22384, OA22384 +22385, OA22385 +22386, OA22386 +22387, OA22387 +22388, OA22388 +22389, OA22389 +22390, OA22390 +22391, OA22391 +22392, OA22392 +22393, OA22393 +22394, OA22394 +22395, OA22395 +22396, OA22396 +22397, OA22397 +22398, OA22398 +22399, OA22399 +22400, OA22400 +22401, OA22401 +22402, OA22402 +22403, OA22403 +22404, OA22404 +22405, OA22405 +22406, OA22406 +22407, OA22407 +22408, OA22408 +22409, OA22409 +22410, OA22410 +22411, OA22411 +22412, OA22412 +22413, OA22413 +22414, OA22414 +22415, OA22415 +22416, OA22416 +22417, OA22417 +22418, OA22418 +22419, OA22419 +22420, OA22420 +22421, OA22421 +22422, OA22422 +22423, OA22423 +22424, OA22424 +22425, OA22425 +22426, OA22426 +22427, OA22427 +22428, OA22428 +22429, OA22429 +22430, OA22430 +22431, OA22431 +22432, OA22432 +22433, OA22433 +22434, OA22434 +22435, OA22435 +22436, OA22436 +22437, OA22437 +22438, OA22438 +22439, OA22439 +22440, OA22440 +22441, OA22441 +22442, OA22442 +22443, OA22443 +22444, OA22444 +22445, OA22445 +22446, OA22446 +22447, OA22447 +22448, OA22448 +22449, OA22449 +22450, OA22450 +22451, OA22451 +22452, OA22452 +22453, OA22453 +22454, OA22454 +22455, OA22455 +22456, OA22456 +22457, OA22457 +22458, OA22458 +22459, OA22459 +22460, OA22460 +22461, OA22461 +22462, OA22462 +22463, OA22463 +22464, OA22464 +22465, OA22465 +22466, OA22466 +22467, OA22467 +22468, OA22468 +22469, OA22469 +22470, OA22470 +22471, OA22471 +22472, OA22472 +22473, OA22473 +22474, OA22474 +22475, OA22475 +22476, OA22476 +22477, OA22477 +22478, OA22478 +22479, OA22479 +22480, OA22480 +22481, OA22481 +22482, OA22482 +22483, OA22483 +22484, OA22484 +22485, OA22485 +22486, OA22486 +22487, OA22487 +22488, OA22488 +22489, OA22489 +22490, OA22490 +22491, OA22491 +22492, OA22492 +22493, OA22493 +22494, OA22494 +22495, OA22495 +22496, OA22496 +22497, OA22497 +22498, OA22498 +22499, OA22499 +22500, OA22500 +22501, OA22501 +22502, OA22502 +22503, OA22503 +22504, OA22504 +22505, OA22505 +22506, OA22506 +22507, OA22507 +22508, OA22508 +22509, OA22509 +22510, OA22510 +22511, OA22511 +22512, OA22512 +22513, OA22513 +22514, OA22514 +22515, OA22515 +22516, OA22516 +22517, OA22517 +22518, OA22518 +22519, OA22519 +22520, OA22520 +22521, OA22521 +22522, OA22522 +22523, OA22523 +22524, OA22524 +22525, OA22525 +22526, OA22526 +22527, OA22527 +22528, OA22528 +22529, OA22529 +22530, OA22530 +22531, OA22531 +22532, OA22532 +22533, OA22533 +22534, OA22534 +22535, OA22535 +22536, OA22536 +22537, OA22537 +22538, OA22538 +22539, OA22539 +22540, OA22540 +22541, OA22541 +22542, OA22542 +22543, OA22543 +22544, OA22544 +22545, OA22545 +22546, OA22546 +22547, OA22547 +22548, OA22548 +22549, OA22549 +22550, OA22550 +22551, OA22551 +22552, OA22552 +22553, OA22553 +22554, OA22554 +22555, OA22555 +22556, OA22556 +22557, OA22557 +22558, OA22558 +22559, OA22559 +22560, OA22560 +22561, OA22561 +22562, OA22562 +22563, OA22563 +22564, OA22564 +22565, OA22565 +22566, OA22566 +22567, OA22567 +22568, OA22568 +22569, OA22569 +22570, OA22570 +22571, OA22571 +22572, OA22572 +22573, OA22573 +22574, OA22574 +22575, OA22575 +22576, OA22576 +22577, OA22577 +22578, OA22578 +22579, OA22579 +22580, OA22580 +22581, OA22581 +22582, OA22582 +22583, OA22583 +22584, OA22584 +22585, OA22585 +22586, OA22586 +22587, OA22587 +22588, OA22588 +22589, OA22589 +22590, OA22590 +22591, OA22591 +22592, OA22592 +22593, OA22593 +22594, OA22594 +22595, OA22595 +22596, OA22596 +22597, OA22597 +22598, OA22598 +22599, OA22599 +22600, OA22600 +22601, OA22601 +22602, OA22602 +22603, OA22603 +22604, OA22604 +22605, OA22605 +22606, OA22606 +22607, OA22607 +22608, OA22608 +22609, OA22609 +22610, OA22610 +22611, OA22611 +22612, OA22612 +22613, OA22613 +22614, OA22614 +22615, OA22615 +22616, OA22616 +22617, OA22617 +22618, OA22618 +22619, OA22619 +22620, OA22620 +22621, OA22621 +22622, OA22622 +22623, OA22623 +22624, OA22624 +22625, OA22625 +22626, OA22626 +22627, OA22627 +22628, OA22628 +22629, OA22629 +22630, OA22630 +22631, OA22631 +22632, OA22632 +22633, OA22633 +22634, OA22634 +22635, OA22635 +22636, OA22636 +22637, OA22637 +22638, OA22638 +22639, OA22639 +22640, OA22640 +22641, OA22641 +22642, OA22642 +22643, OA22643 +22644, OA22644 +22645, OA22645 +22646, OA22646 +22647, OA22647 +22648, OA22648 +22649, OA22649 +22650, OA22650 +22651, OA22651 +22652, OA22652 +22653, OA22653 +22654, OA22654 +22655, OA22655 +22656, OA22656 +22657, OA22657 +22658, OA22658 +22659, OA22659 +22660, OA22660 +22661, OA22661 +22662, OA22662 +22663, OA22663 +22664, OA22664 +22665, OA22665 +22666, OA22666 +22667, OA22667 +22668, OA22668 +22669, OA22669 +22670, OA22670 +22671, OA22671 +22672, OA22672 +22673, OA22673 +22674, OA22674 +22675, OA22675 +22676, OA22676 +22677, OA22677 +22678, OA22678 +22679, OA22679 +22680, OA22680 +22681, OA22681 +22682, OA22682 +22683, OA22683 +22684, OA22684 +22685, OA22685 +22686, OA22686 +22687, OA22687 +22688, OA22688 +22689, OA22689 +22690, OA22690 +22691, OA22691 +22692, OA22692 +22693, OA22693 +22694, OA22694 +22695, OA22695 +22696, OA22696 +22697, OA22697 +22698, OA22698 +22699, OA22699 +22700, OA22700 +22701, OA22701 +22702, OA22702 +22703, OA22703 +22704, OA22704 +22705, OA22705 +22706, OA22706 +22707, OA22707 +22708, OA22708 +22709, OA22709 +22710, OA22710 +22711, OA22711 +22712, OA22712 +22713, OA22713 +22714, OA22714 +22715, OA22715 +22716, OA22716 +22717, OA22717 +22718, OA22718 +22719, OA22719 +22720, OA22720 +22721, OA22721 +22722, OA22722 +22723, OA22723 +22724, OA22724 +22725, OA22725 +22726, OA22726 +22727, OA22727 +22728, OA22728 +22729, OA22729 +22730, OA22730 +22731, OA22731 +22732, OA22732 +22733, OA22733 +22734, OA22734 +22735, OA22735 +22736, OA22736 +22737, OA22737 +22738, OA22738 +22739, OA22739 +22740, OA22740 +22741, OA22741 +22742, OA22742 +22743, OA22743 +22744, OA22744 +22745, OA22745 +22746, OA22746 +22747, OA22747 +22748, OA22748 +22749, OA22749 +22750, OA22750 +22751, OA22751 +22752, OA22752 +22753, OA22753 +22754, OA22754 +22755, OA22755 +22756, OA22756 +22757, OA22757 +22758, OA22758 +22759, OA22759 +22760, OA22760 +22761, OA22761 +22762, OA22762 +22763, OA22763 +22764, OA22764 +22765, OA22765 +22766, OA22766 +22767, OA22767 +22768, OA22768 +22769, OA22769 +22770, OA22770 +22771, OA22771 +22772, OA22772 +22773, OA22773 +22774, OA22774 +22775, OA22775 +22776, OA22776 +22777, OA22777 +22778, OA22778 +22779, OA22779 +22780, OA22780 +22781, OA22781 +22782, OA22782 +22783, OA22783 +22784, OA22784 +22785, OA22785 +22786, OA22786 +22787, OA22787 +22788, OA22788 +22789, OA22789 +22790, OA22790 +22791, OA22791 +22792, OA22792 +22793, OA22793 +22794, OA22794 +22795, OA22795 +22796, OA22796 +22797, OA22797 +22798, OA22798 +22799, OA22799 +22800, OA22800 +22801, OA22801 +22802, OA22802 +22803, OA22803 +22804, OA22804 +22805, OA22805 +22806, OA22806 +22807, OA22807 +22808, OA22808 +22809, OA22809 +22810, OA22810 +22811, OA22811 +22812, OA22812 +22813, OA22813 +22814, OA22814 +22815, OA22815 +22816, OA22816 +22817, OA22817 +22818, OA22818 +22819, OA22819 +22820, OA22820 +22821, OA22821 +22822, OA22822 +22823, OA22823 +22824, OA22824 +22825, OA22825 +22826, OA22826 +22827, OA22827 +22828, OA22828 +22829, OA22829 +22830, OA22830 +22831, OA22831 +22832, OA22832 +22833, OA22833 +22834, OA22834 +22835, OA22835 +22836, OA22836 +22837, OA22837 +22838, OA22838 +22839, OA22839 +22840, OA22840 +22841, OA22841 +22842, OA22842 +22843, OA22843 +22844, OA22844 +22845, OA22845 +22846, OA22846 +22847, OA22847 +22848, OA22848 +22849, OA22849 +22850, OA22850 +22851, OA22851 +22852, OA22852 +22853, OA22853 +22854, OA22854 +22855, OA22855 +22856, OA22856 +22857, OA22857 +22858, OA22858 +22859, OA22859 +22860, OA22860 +22861, OA22861 +22862, OA22862 +22863, OA22863 +22864, OA22864 +22865, OA22865 +22866, OA22866 +22867, OA22867 +22868, OA22868 +22869, OA22869 +22870, OA22870 +22871, OA22871 +22872, OA22872 +22873, OA22873 +22874, OA22874 +22875, OA22875 +22876, OA22876 +22877, OA22877 +22878, OA22878 +22879, OA22879 +22880, OA22880 +22881, OA22881 +22882, OA22882 +22883, OA22883 +22884, OA22884 +22885, OA22885 +22886, OA22886 +22887, OA22887 +22888, OA22888 +22889, OA22889 +22890, OA22890 +22891, OA22891 +22892, OA22892 +22893, OA22893 +22894, OA22894 +22895, OA22895 +22896, OA22896 +22897, OA22897 +22898, OA22898 +22899, OA22899 +22900, OA22900 +22901, OA22901 +22902, OA22902 +22903, OA22903 +22904, OA22904 +22905, OA22905 +22906, OA22906 +22907, OA22907 +22908, OA22908 +22909, OA22909 +22910, OA22910 +22911, OA22911 +22912, OA22912 +22913, OA22913 +22914, OA22914 +22915, OA22915 +22916, OA22916 +22917, OA22917 +22918, OA22918 +22919, OA22919 +22920, OA22920 +22921, OA22921 +22922, OA22922 +22923, OA22923 +22924, OA22924 +22925, OA22925 +22926, OA22926 +22927, OA22927 +22928, OA22928 +22929, OA22929 +22930, OA22930 +22931, OA22931 +22932, OA22932 +22933, OA22933 +22934, OA22934 +22935, OA22935 +22936, OA22936 +22937, OA22937 +22938, OA22938 +22939, OA22939 +22940, OA22940 +22941, OA22941 +22942, OA22942 +22943, OA22943 +22944, OA22944 +22945, OA22945 +22946, OA22946 +22947, OA22947 +22948, OA22948 +22949, OA22949 +22950, OA22950 +22951, OA22951 +22952, OA22952 +22953, OA22953 +22954, OA22954 +22955, OA22955 +22956, OA22956 +22957, OA22957 +22958, OA22958 +22959, OA22959 +22960, OA22960 +22961, OA22961 +22962, OA22962 +22963, OA22963 +22964, OA22964 +22965, OA22965 +22966, OA22966 +22967, OA22967 +22968, OA22968 +22969, OA22969 +22970, OA22970 +22971, OA22971 +22972, OA22972 +22973, OA22973 +22974, OA22974 +22975, OA22975 +22976, OA22976 +22977, OA22977 +22978, OA22978 +22979, OA22979 +22980, OA22980 +22981, OA22981 +22982, OA22982 +22983, OA22983 +22984, OA22984 +22985, OA22985 +22986, OA22986 +22987, OA22987 +22988, OA22988 +22989, OA22989 +22990, OA22990 +22991, OA22991 +22992, OA22992 +22993, OA22993 +22994, OA22994 +22995, OA22995 +22996, OA22996 +22997, OA22997 +22998, OA22998 +22999, OA22999 +23000, OA23000 +23001, OA23001 +23002, OA23002 +23003, OA23003 +23004, OA23004 +23005, OA23005 +23006, OA23006 +23007, OA23007 +23008, OA23008 +23009, OA23009 +23010, OA23010 +23011, OA23011 +23012, OA23012 +23013, OA23013 +23014, OA23014 +23015, OA23015 +23016, OA23016 +23017, OA23017 +23018, OA23018 +23019, OA23019 +23020, OA23020 +23021, OA23021 +23022, OA23022 +23023, OA23023 +23024, OA23024 +23025, OA23025 +23026, OA23026 +23027, OA23027 +23028, OA23028 +23029, OA23029 +23030, OA23030 +23031, OA23031 +23032, OA23032 +23033, OA23033 +23034, OA23034 +23035, OA23035 +23036, OA23036 +23037, OA23037 +23038, OA23038 +23039, OA23039 +23040, OA23040 +23041, OA23041 +23042, OA23042 +23043, OA23043 +23044, OA23044 +23045, OA23045 +23046, OA23046 +23047, OA23047 +23048, OA23048 +23049, OA23049 +23050, OA23050 +23051, OA23051 +23052, OA23052 +23053, OA23053 +23054, OA23054 +23055, OA23055 +23056, OA23056 +23057, OA23057 +23058, OA23058 +23059, OA23059 +23060, OA23060 +23061, OA23061 +23062, OA23062 +23063, OA23063 +23064, OA23064 +23065, OA23065 +23066, OA23066 +23067, OA23067 +23068, OA23068 +23069, OA23069 +23070, OA23070 +23071, OA23071 +23072, OA23072 +23073, OA23073 +23074, OA23074 +23075, OA23075 +23076, OA23076 +23077, OA23077 +23078, OA23078 +23079, OA23079 +23080, OA23080 +23081, OA23081 +23082, OA23082 +23083, OA23083 +23084, OA23084 +23085, OA23085 +23086, OA23086 +23087, OA23087 +23088, OA23088 +23089, OA23089 +23090, OA23090 +23091, OA23091 +23092, OA23092 +23093, OA23093 +23094, OA23094 +23095, OA23095 +23096, OA23096 +23097, OA23097 +23098, OA23098 +23099, OA23099 +23100, OA23100 +23101, OA23101 +23102, OA23102 +23103, OA23103 +23104, OA23104 +23105, OA23105 +23106, OA23106 +23107, OA23107 +23108, OA23108 +23109, OA23109 +23110, OA23110 +23111, OA23111 +23112, OA23112 +23113, OA23113 +23114, OA23114 +23115, OA23115 +23116, OA23116 +23117, OA23117 +23118, OA23118 +23119, OA23119 +23120, OA23120 +23121, OA23121 +23122, OA23122 +23123, OA23123 +23124, OA23124 +23125, OA23125 +23126, OA23126 +23127, OA23127 +23128, OA23128 +23129, OA23129 +23130, OA23130 +23131, OA23131 +23132, OA23132 +23133, OA23133 +23134, OA23134 +23135, OA23135 +23136, OA23136 +23137, OA23137 +23138, OA23138 +23139, OA23139 +23140, OA23140 +23141, OA23141 +23142, OA23142 +23143, OA23143 +23144, OA23144 +23145, OA23145 +23146, OA23146 +23147, OA23147 +23148, OA23148 +23149, OA23149 +23150, OA23150 +23151, OA23151 +23152, OA23152 +23153, OA23153 +23154, OA23154 +23155, OA23155 +23156, OA23156 +23157, OA23157 +23158, OA23158 +23159, OA23159 +23160, OA23160 +23161, OA23161 +23162, OA23162 +23163, OA23163 +23164, OA23164 +23165, OA23165 +23166, OA23166 +23167, OA23167 +23168, OA23168 +23169, OA23169 +23170, OA23170 +23171, OA23171 +23172, OA23172 +23173, OA23173 +23174, OA23174 +23175, OA23175 +23176, OA23176 +23177, OA23177 +23178, OA23178 +23179, OA23179 +23180, OA23180 +23181, OA23181 +23182, OA23182 +23183, OA23183 +23184, OA23184 +23185, OA23185 +23186, OA23186 +23187, OA23187 +23188, OA23188 +23189, OA23189 +23190, OA23190 +23191, OA23191 +23192, OA23192 +23193, OA23193 +23194, OA23194 +23195, OA23195 +23196, OA23196 +23197, OA23197 +23198, OA23198 +23199, OA23199 +23200, OA23200 +23201, OA23201 +23202, OA23202 +23203, OA23203 +23204, OA23204 +23205, OA23205 +23206, OA23206 +23207, OA23207 +23208, OA23208 +23209, OA23209 +23210, OA23210 +23211, OA23211 +23212, OA23212 +23213, OA23213 +23214, OA23214 +23215, OA23215 +23216, OA23216 +23217, OA23217 +23218, OA23218 +23219, OA23219 +23220, OA23220 +23221, OA23221 +23222, OA23222 +23223, OA23223 +23224, OA23224 +23225, OA23225 +23226, OA23226 +23227, OA23227 +23228, OA23228 +23229, OA23229 +23230, OA23230 +23231, OA23231 +23232, OA23232 +23233, OA23233 +23234, OA23234 +23235, OA23235 +23236, OA23236 +23237, OA23237 +23238, OA23238 +23239, OA23239 +23240, OA23240 +23241, OA23241 +23242, OA23242 +23243, OA23243 +23244, OA23244 +23245, OA23245 +23246, OA23246 +23247, OA23247 +23248, OA23248 +23249, OA23249 +23250, OA23250 +23251, OA23251 +23252, OA23252 +23253, OA23253 +23254, OA23254 +23255, OA23255 +23256, OA23256 +23257, OA23257 +23258, OA23258 +23259, OA23259 +23260, OA23260 +23261, OA23261 +23262, OA23262 +23263, OA23263 +23264, OA23264 +23265, OA23265 +23266, OA23266 +23267, OA23267 +23268, OA23268 +23269, OA23269 +23270, OA23270 +23271, OA23271 +23272, OA23272 +23273, OA23273 +23274, OA23274 +23275, OA23275 +23276, OA23276 +23277, OA23277 +23278, OA23278 +23279, OA23279 +23280, OA23280 +23281, OA23281 +23282, OA23282 +23283, OA23283 +23284, OA23284 +23285, OA23285 +23286, OA23286 +23287, OA23287 +23288, OA23288 +23289, OA23289 +23290, OA23290 +23291, OA23291 +23292, OA23292 +23293, OA23293 +23294, OA23294 +23295, OA23295 +23296, OA23296 +23297, OA23297 +23298, OA23298 +23299, OA23299 +23300, OA23300 +23301, OA23301 +23302, OA23302 +23303, OA23303 +23304, OA23304 +23305, OA23305 +23306, OA23306 +23307, OA23307 +23308, OA23308 +23309, OA23309 +23310, OA23310 +23311, OA23311 +23312, OA23312 +23313, OA23313 +23314, OA23314 +23315, OA23315 +23316, OA23316 +23317, OA23317 +23318, OA23318 +23319, OA23319 +23320, OA23320 +23321, OA23321 +23322, OA23322 +23323, OA23323 +23324, OA23324 +23325, OA23325 +23326, OA23326 +23327, OA23327 +23328, OA23328 +23329, OA23329 +23330, OA23330 +23331, OA23331 +23332, OA23332 +23333, OA23333 +23334, OA23334 +23335, OA23335 +23336, OA23336 +23337, OA23337 +23338, OA23338 +23339, OA23339 +23340, OA23340 +23341, OA23341 +23342, OA23342 +23343, OA23343 +23344, OA23344 +23345, OA23345 +23346, OA23346 +23347, OA23347 +23348, OA23348 +23349, OA23349 +23350, OA23350 +23351, OA23351 +23352, OA23352 +23353, OA23353 +23354, OA23354 +23355, OA23355 +23356, OA23356 +23357, OA23357 +23358, OA23358 +23359, OA23359 +23360, OA23360 +23361, OA23361 +23362, OA23362 +23363, OA23363 +23364, OA23364 +23365, OA23365 +23366, OA23366 +23367, OA23367 +23368, OA23368 +23369, OA23369 +23370, OA23370 +23371, OA23371 +23372, OA23372 +23373, OA23373 +23374, OA23374 +23375, OA23375 +23376, OA23376 +23377, OA23377 +23378, OA23378 +23379, OA23379 +23380, OA23380 +23381, OA23381 +23382, OA23382 +23383, OA23383 +23384, OA23384 +23385, OA23385 +23386, OA23386 +23387, OA23387 +23388, OA23388 +23389, OA23389 +23390, OA23390 +23391, OA23391 +23392, OA23392 +23393, OA23393 +23394, OA23394 +23395, OA23395 +23396, OA23396 +23397, OA23397 +23398, OA23398 +23399, OA23399 +23400, OA23400 +23401, OA23401 +23402, OA23402 +23403, OA23403 +23404, OA23404 +23405, OA23405 +23406, OA23406 +23407, OA23407 +23408, OA23408 +23409, OA23409 +23410, OA23410 +23411, OA23411 +23412, OA23412 +23413, OA23413 +23414, OA23414 +23415, OA23415 +23416, OA23416 +23417, OA23417 +23418, OA23418 +23419, OA23419 +23420, OA23420 +23421, OA23421 +23422, OA23422 +23423, OA23423 +23424, OA23424 +23425, OA23425 +23426, OA23426 +23427, OA23427 +23428, OA23428 +23429, OA23429 +23430, OA23430 +23431, OA23431 +23432, OA23432 +23433, OA23433 +23434, OA23434 +23435, OA23435 +23436, OA23436 +23437, OA23437 +23438, OA23438 +23439, OA23439 +23440, OA23440 +23441, OA23441 +23442, OA23442 +23443, OA23443 +23444, OA23444 +23445, OA23445 +23446, OA23446 +23447, OA23447 +23448, OA23448 +23449, OA23449 +23450, OA23450 +23451, OA23451 +23452, OA23452 +23453, OA23453 +23454, OA23454 +23455, OA23455 +23456, OA23456 +23457, OA23457 +23458, OA23458 +23459, OA23459 +23460, OA23460 +23461, OA23461 +23462, OA23462 +23463, OA23463 +23464, OA23464 +23465, OA23465 +23466, OA23466 +23467, OA23467 +23468, OA23468 +23469, OA23469 +23470, OA23470 +23471, OA23471 +23472, OA23472 +23473, OA23473 +23474, OA23474 +23475, OA23475 +23476, OA23476 +23477, OA23477 +23478, OA23478 +23479, OA23479 +23480, OA23480 +23481, OA23481 +23482, OA23482 +23483, OA23483 +23484, OA23484 +23485, OA23485 +23486, OA23486 +23487, OA23487 +23488, OA23488 +23489, OA23489 +23490, OA23490 +23491, OA23491 +23492, OA23492 +23493, OA23493 +23494, OA23494 +23495, OA23495 +23496, OA23496 +23497, OA23497 +23498, OA23498 +23499, OA23499 +23500, OA23500 +23501, OA23501 +23502, OA23502 +23503, OA23503 +23504, OA23504 +23505, OA23505 +23506, OA23506 +23507, OA23507 +23508, OA23508 +23509, OA23509 +23510, OA23510 +23511, OA23511 +23512, OA23512 +23513, OA23513 +23514, OA23514 +23515, OA23515 +23516, OA23516 +23517, OA23517 +23518, OA23518 +23519, OA23519 +23520, OA23520 +23521, OA23521 +23522, OA23522 +23523, OA23523 +23524, OA23524 +23525, OA23525 +23526, OA23526 +23527, OA23527 +23528, OA23528 +23529, OA23529 +23530, OA23530 +23531, OA23531 +23532, OA23532 +23533, OA23533 +23534, OA23534 +23535, OA23535 +23536, OA23536 +23537, OA23537 +23538, OA23538 +23539, OA23539 +23540, OA23540 +23541, OA23541 +23542, OA23542 +23543, OA23543 +23544, OA23544 +23545, OA23545 +23546, OA23546 +23547, OA23547 +23548, OA23548 +23549, OA23549 +23550, OA23550 +23551, OA23551 +23552, OA23552 +23553, OA23553 +23554, OA23554 +23555, OA23555 +23556, OA23556 +23557, OA23557 +23558, OA23558 +23559, OA23559 +23560, OA23560 +23561, OA23561 +23562, OA23562 +23563, OA23563 +23564, OA23564 +23565, OA23565 +23566, OA23566 +23567, OA23567 +23568, OA23568 +23569, OA23569 +23570, OA23570 +23571, OA23571 +23572, OA23572 +23573, OA23573 +23574, OA23574 +23575, OA23575 +23576, OA23576 +23577, OA23577 +23578, OA23578 +23579, OA23579 +23580, OA23580 +23581, OA23581 +23582, OA23582 +23583, OA23583 +23584, OA23584 +23585, OA23585 +23586, OA23586 +23587, OA23587 +23588, OA23588 +23589, OA23589 +23590, OA23590 +23591, OA23591 +23592, OA23592 +23593, OA23593 +23594, OA23594 +23595, OA23595 +23596, OA23596 +23597, OA23597 +23598, OA23598 +23599, OA23599 +23600, OA23600 +23601, OA23601 +23602, OA23602 +23603, OA23603 +23604, OA23604 +23605, OA23605 +23606, OA23606 +23607, OA23607 +23608, OA23608 +23609, OA23609 +23610, OA23610 +23611, OA23611 +23612, OA23612 +23613, OA23613 +23614, OA23614 +23615, OA23615 +23616, OA23616 +23617, OA23617 +23618, OA23618 +23619, OA23619 +23620, OA23620 +23621, OA23621 +23622, OA23622 +23623, OA23623 +23624, OA23624 +23625, OA23625 +23626, OA23626 +23627, OA23627 +23628, OA23628 +23629, OA23629 +23630, OA23630 +23631, OA23631 +23632, OA23632 +23633, OA23633 +23634, OA23634 +23635, OA23635 +23636, OA23636 +23637, OA23637 +23638, OA23638 +23639, OA23639 +23640, OA23640 +23641, OA23641 +23642, OA23642 +23643, OA23643 +23644, OA23644 +23645, OA23645 +23646, OA23646 +23647, OA23647 +23648, OA23648 +23649, OA23649 +23650, OA23650 +23651, OA23651 +23652, OA23652 +23653, OA23653 +23654, OA23654 +23655, OA23655 +23656, OA23656 +23657, OA23657 +23658, OA23658 +23659, OA23659 +23660, OA23660 +23661, OA23661 +23662, OA23662 +23663, OA23663 +23664, OA23664 +23665, OA23665 +23666, OA23666 +23667, OA23667 +23668, OA23668 +23669, OA23669 +23670, OA23670 +23671, OA23671 +23672, OA23672 +23673, OA23673 +23674, OA23674 +23675, OA23675 +23676, OA23676 +23677, OA23677 +23678, OA23678 +23679, OA23679 +23680, OA23680 +23681, OA23681 +23682, OA23682 +23683, OA23683 +23684, OA23684 +23685, OA23685 +23686, OA23686 +23687, OA23687 +23688, OA23688 +23689, OA23689 +23690, OA23690 +23691, OA23691 +23692, OA23692 +23693, OA23693 +23694, OA23694 +23695, OA23695 +23696, OA23696 +23697, OA23697 +23698, OA23698 +23699, OA23699 +23700, OA23700 +23701, OA23701 +23702, OA23702 +23703, OA23703 +23704, OA23704 +23705, OA23705 +23706, OA23706 +23707, OA23707 +23708, OA23708 +23709, OA23709 +23710, OA23710 +23711, OA23711 +23712, OA23712 +23713, OA23713 +23714, OA23714 +23715, OA23715 +23716, OA23716 +23717, OA23717 +23718, OA23718 +23719, OA23719 +23720, OA23720 +23721, OA23721 +23722, OA23722 +23723, OA23723 +23724, OA23724 +23725, OA23725 +23726, OA23726 +23727, OA23727 +23728, OA23728 +23729, OA23729 +23730, OA23730 +23731, OA23731 +23732, OA23732 +23733, OA23733 +23734, OA23734 +23735, OA23735 +23736, OA23736 +23737, OA23737 +23738, OA23738 +23739, OA23739 +23740, OA23740 +23741, OA23741 +23742, OA23742 +23743, OA23743 +23744, OA23744 +23745, OA23745 +23746, OA23746 +23747, OA23747 +23748, OA23748 +23749, OA23749 +23750, OA23750 +23751, OA23751 +23752, OA23752 +23753, OA23753 +23754, OA23754 +23755, OA23755 +23756, OA23756 +23757, OA23757 +23758, OA23758 +23759, OA23759 +23760, OA23760 +23761, OA23761 +23762, OA23762 +23763, OA23763 +23764, OA23764 +23765, OA23765 +23766, OA23766 +23767, OA23767 +23768, OA23768 +23769, OA23769 +23770, OA23770 +23771, OA23771 +23772, OA23772 +23773, OA23773 +23774, OA23774 +23775, OA23775 +23776, OA23776 +23777, OA23777 +23778, OA23778 +23779, OA23779 +23780, OA23780 +23781, OA23781 +23782, OA23782 +23783, OA23783 +23784, OA23784 +23785, OA23785 +23786, OA23786 +23787, OA23787 +23788, OA23788 +23789, OA23789 +23790, OA23790 +23791, OA23791 +23792, OA23792 +23793, OA23793 +23794, OA23794 +23795, OA23795 +23796, OA23796 +23797, OA23797 +23798, OA23798 +23799, OA23799 +23800, OA23800 +23801, OA23801 +23802, OA23802 +23803, OA23803 +23804, OA23804 +23805, OA23805 +23806, OA23806 +23807, OA23807 +23808, OA23808 +23809, OA23809 +23810, OA23810 +23811, OA23811 +23812, OA23812 +23813, OA23813 +23814, OA23814 +23815, OA23815 +23816, OA23816 +23817, OA23817 +23818, OA23818 +23819, OA23819 +23820, OA23820 +23821, OA23821 +23822, OA23822 +23823, OA23823 +23824, OA23824 +23825, OA23825 +23826, OA23826 +23827, OA23827 +23828, OA23828 +23829, OA23829 +23830, OA23830 +23831, OA23831 +23832, OA23832 +23833, OA23833 +23834, OA23834 +23835, OA23835 +23836, OA23836 +23837, OA23837 +23838, OA23838 +23839, OA23839 +23840, OA23840 +23841, OA23841 +23842, OA23842 +23843, OA23843 +23844, OA23844 +23845, OA23845 +23846, OA23846 +23847, OA23847 +23848, OA23848 +23849, OA23849 +23850, OA23850 +23851, OA23851 +23852, OA23852 +23853, OA23853 +23854, OA23854 +23855, OA23855 +23856, OA23856 +23857, OA23857 +23858, OA23858 +23859, OA23859 +23860, OA23860 +23861, OA23861 +23862, OA23862 +23863, OA23863 +23864, OA23864 +23865, OA23865 +23866, OA23866 +23867, OA23867 +23868, OA23868 +23869, OA23869 +23870, OA23870 +23871, OA23871 +23872, OA23872 +23873, OA23873 +23874, OA23874 +23875, OA23875 +23876, OA23876 +23877, OA23877 +23878, OA23878 +23879, OA23879 +23880, OA23880 +23881, OA23881 +23882, OA23882 +23883, OA23883 +23884, OA23884 +23885, OA23885 +23886, OA23886 +23887, OA23887 +23888, OA23888 +23889, OA23889 +23890, OA23890 +23891, OA23891 +23892, OA23892 +23893, OA23893 +23894, OA23894 +23895, OA23895 +23896, OA23896 +23897, OA23897 +23898, OA23898 +23899, OA23899 +23900, OA23900 +23901, OA23901 +23902, OA23902 +23903, OA23903 +23904, OA23904 +23905, OA23905 +23906, OA23906 +23907, OA23907 +23908, OA23908 +23909, OA23909 +23910, OA23910 +23911, OA23911 +23912, OA23912 +23913, OA23913 +23914, OA23914 +23915, OA23915 +23916, OA23916 +23917, OA23917 +23918, OA23918 +23919, OA23919 +23920, OA23920 +23921, OA23921 +23922, OA23922 +23923, OA23923 +23924, OA23924 +23925, OA23925 +23926, OA23926 +23927, OA23927 +23928, OA23928 +23929, OA23929 +23930, OA23930 +23931, OA23931 +23932, OA23932 +23933, OA23933 +23934, OA23934 +23935, OA23935 +23936, OA23936 +23937, OA23937 +23938, OA23938 +23939, OA23939 +23940, OA23940 +23941, OA23941 +23942, OA23942 +23943, OA23943 +23944, OA23944 +23945, OA23945 +23946, OA23946 +23947, OA23947 +23948, OA23948 +23949, OA23949 +23950, OA23950 +23951, OA23951 +23952, OA23952 +23953, OA23953 +23954, OA23954 +23955, OA23955 +23956, OA23956 +23957, OA23957 +23958, OA23958 +23959, OA23959 +23960, OA23960 +23961, OA23961 +23962, OA23962 +23963, OA23963 +23964, OA23964 +23965, OA23965 +23966, OA23966 +23967, OA23967 +23968, OA23968 +23969, OA23969 +23970, OA23970 +23971, OA23971 +23972, OA23972 +23973, OA23973 +23974, OA23974 +23975, OA23975 +23976, OA23976 +23977, OA23977 +23978, OA23978 +23979, OA23979 +23980, OA23980 +23981, OA23981 +23982, OA23982 +23983, OA23983 +23984, OA23984 +23985, OA23985 +23986, OA23986 +23987, OA23987 +23988, OA23988 +23989, OA23989 +23990, OA23990 +23991, OA23991 +23992, OA23992 +23993, OA23993 +23994, OA23994 +23995, OA23995 +23996, OA23996 +23997, OA23997 +23998, OA23998 +23999, OA23999 +24000, OA24000 +24001, OA24001 +24002, OA24002 +24003, OA24003 +24004, OA24004 +24005, OA24005 +24006, OA24006 +24007, OA24007 +24008, OA24008 +24009, OA24009 +24010, OA24010 +24011, OA24011 +24012, OA24012 +24013, OA24013 +24014, OA24014 +24015, OA24015 +24016, OA24016 +24017, OA24017 +24018, OA24018 +24019, OA24019 +24020, OA24020 +24021, OA24021 +24022, OA24022 +24023, OA24023 +24024, OA24024 +24025, OA24025 +24026, OA24026 +24027, OA24027 +24028, OA24028 +24029, OA24029 +24030, OA24030 +24031, OA24031 +24032, OA24032 +24033, OA24033 +24034, OA24034 +24035, OA24035 +24036, OA24036 +24037, OA24037 +24038, OA24038 +24039, OA24039 +24040, OA24040 +24041, OA24041 +24042, OA24042 +24043, OA24043 +24044, OA24044 +24045, OA24045 +24046, OA24046 +24047, OA24047 +24048, OA24048 +24049, OA24049 +24050, OA24050 +24051, OA24051 +24052, OA24052 +24053, OA24053 +24054, OA24054 +24055, OA24055 +24056, OA24056 +24057, OA24057 +24058, OA24058 +24059, OA24059 +24060, OA24060 +24061, OA24061 +24062, OA24062 +24063, OA24063 +24064, OA24064 +24065, OA24065 +24066, OA24066 +24067, OA24067 +24068, OA24068 +24069, OA24069 +24070, OA24070 +24071, OA24071 +24072, OA24072 +24073, OA24073 +24074, OA24074 +24075, OA24075 +24076, OA24076 +24077, OA24077 +24078, OA24078 +24079, OA24079 +24080, OA24080 +24081, OA24081 +24082, OA24082 +24083, OA24083 +24084, OA24084 +24085, OA24085 +24086, OA24086 +24087, OA24087 +24088, OA24088 +24089, OA24089 +24090, OA24090 +24091, OA24091 +24092, OA24092 +24093, OA24093 +24094, OA24094 +24095, OA24095 +24096, OA24096 +24097, OA24097 +24098, OA24098 +24099, OA24099 +24100, OA24100 +24101, OA24101 +24102, OA24102 +24103, OA24103 +24104, OA24104 +24105, OA24105 +24106, OA24106 +24107, OA24107 +24108, OA24108 +24109, OA24109 +24110, OA24110 +24111, OA24111 +24112, OA24112 +24113, OA24113 +24114, OA24114 +24115, OA24115 +24116, OA24116 +24117, OA24117 +24118, OA24118 +24119, OA24119 +24120, OA24120 +24121, OA24121 +24122, OA24122 +24123, OA24123 +24124, OA24124 +24125, OA24125 +24126, OA24126 +24127, OA24127 +24128, OA24128 +24129, OA24129 +24130, OA24130 +24131, OA24131 +24132, OA24132 +24133, OA24133 +24134, OA24134 +24135, OA24135 +24136, OA24136 +24137, OA24137 +24138, OA24138 +24139, OA24139 +24140, OA24140 +24141, OA24141 +24142, OA24142 +24143, OA24143 +24144, OA24144 +24145, OA24145 +24146, OA24146 +24147, OA24147 +24148, OA24148 +24149, OA24149 +24150, OA24150 +24151, OA24151 +24152, OA24152 +24153, OA24153 +24154, OA24154 +24155, OA24155 +24156, OA24156 +24157, OA24157 +24158, OA24158 +24159, OA24159 +24160, OA24160 +24161, OA24161 +24162, OA24162 +24163, OA24163 +24164, OA24164 +24165, OA24165 +24166, OA24166 +24167, OA24167 +24168, OA24168 +24169, OA24169 +24170, OA24170 +24171, OA24171 +24172, OA24172 +24173, OA24173 +24174, OA24174 +24175, OA24175 +24176, OA24176 +24177, OA24177 +24178, OA24178 +24179, OA24179 +24180, OA24180 +24181, OA24181 +24182, OA24182 +24183, OA24183 +24184, OA24184 +24185, OA24185 +24186, OA24186 +24187, OA24187 +24188, OA24188 +24189, OA24189 +24190, OA24190 +24191, OA24191 +24192, OA24192 +24193, OA24193 +24194, OA24194 +24195, OA24195 +24196, OA24196 +24197, OA24197 +24198, OA24198 +24199, OA24199 +24200, OA24200 +24201, OA24201 +24202, OA24202 +24203, OA24203 +24204, OA24204 +24205, OA24205 +24206, OA24206 +24207, OA24207 +24208, OA24208 +24209, OA24209 +24210, OA24210 +24211, OA24211 +24212, OA24212 +24213, OA24213 +24214, OA24214 +24215, OA24215 +24216, OA24216 +24217, OA24217 +24218, OA24218 +24219, OA24219 +24220, OA24220 +24221, OA24221 +24222, OA24222 +24223, OA24223 +24224, OA24224 +24225, OA24225 +24226, OA24226 +24227, OA24227 +24228, OA24228 +24229, OA24229 +24230, OA24230 +24231, OA24231 +24232, OA24232 +24233, OA24233 +24234, OA24234 +24235, OA24235 +24236, OA24236 +24237, OA24237 +24238, OA24238 +24239, OA24239 +24240, OA24240 +24241, OA24241 +24242, OA24242 +24243, OA24243 +24244, OA24244 +24245, OA24245 +24246, OA24246 +24247, OA24247 +24248, OA24248 +24249, OA24249 +24250, OA24250 +24251, OA24251 +24252, OA24252 +24253, OA24253 +24254, OA24254 +24255, OA24255 +24256, OA24256 +24257, OA24257 +24258, OA24258 +24259, OA24259 +24260, OA24260 +24261, OA24261 +24262, OA24262 +24263, OA24263 +24264, OA24264 +24265, OA24265 +24266, OA24266 +24267, OA24267 +24268, OA24268 +24269, OA24269 +24270, OA24270 +24271, OA24271 +24272, OA24272 +24273, OA24273 +24274, OA24274 +24275, OA24275 +24276, OA24276 +24277, OA24277 +24278, OA24278 +24279, OA24279 +24280, OA24280 +24281, OA24281 +24282, OA24282 +24283, OA24283 +24284, OA24284 +24285, OA24285 +24286, OA24286 +24287, OA24287 +24288, OA24288 +24289, OA24289 +24290, OA24290 +24291, OA24291 +24292, OA24292 +24293, OA24293 +24294, OA24294 +24295, OA24295 +24296, OA24296 +24297, OA24297 +24298, OA24298 +24299, OA24299 +24300, OA24300 +24301, OA24301 +24302, OA24302 +24303, OA24303 +24304, OA24304 +24305, OA24305 +24306, OA24306 +24307, OA24307 +24308, OA24308 +24309, OA24309 +24310, OA24310 +24311, OA24311 +24312, OA24312 +24313, OA24313 +24314, OA24314 +24315, OA24315 +24316, OA24316 +24317, OA24317 +24318, OA24318 +24319, OA24319 +24320, OA24320 +24321, OA24321 +24322, OA24322 +24323, OA24323 +24324, OA24324 +24325, OA24325 +24326, OA24326 +24327, OA24327 +24328, OA24328 +24329, OA24329 +24330, OA24330 +24331, OA24331 +24332, OA24332 +24333, OA24333 +24334, OA24334 +24335, OA24335 +24336, OA24336 +24337, OA24337 +24338, OA24338 +24339, OA24339 +24340, OA24340 +24341, OA24341 +24342, OA24342 +24343, OA24343 +24344, OA24344 +24345, OA24345 +24346, OA24346 +24347, OA24347 +24348, OA24348 +24349, OA24349 +24350, OA24350 +24351, OA24351 +24352, OA24352 +24353, OA24353 +24354, OA24354 +24355, OA24355 +24356, OA24356 +24357, OA24357 +24358, OA24358 +24359, OA24359 +24360, OA24360 +24361, OA24361 +24362, OA24362 +24363, OA24363 +24364, OA24364 +24365, OA24365 +24366, OA24366 +24367, OA24367 +24368, OA24368 +24369, OA24369 +24370, OA24370 +24371, OA24371 +24372, OA24372 +24373, OA24373 +24374, OA24374 +24375, OA24375 +24376, OA24376 +24377, OA24377 +24378, OA24378 +24379, OA24379 +24380, OA24380 +24381, OA24381 +24382, OA24382 +24383, OA24383 +24384, OA24384 +24385, OA24385 +24386, OA24386 +24387, OA24387 +24388, OA24388 +24389, OA24389 +24390, OA24390 +24391, OA24391 +24392, OA24392 +24393, OA24393 +24394, OA24394 +24395, OA24395 +24396, OA24396 +24397, OA24397 +24398, OA24398 +24399, OA24399 +24400, OA24400 +24401, OA24401 +24402, OA24402 +24403, OA24403 +24404, OA24404 +24405, OA24405 +24406, OA24406 +24407, OA24407 +24408, OA24408 +24409, OA24409 +24410, OA24410 +24411, OA24411 +24412, OA24412 +24413, OA24413 +24414, OA24414 +24415, OA24415 +24416, OA24416 +24417, OA24417 +24418, OA24418 +24419, OA24419 +24420, OA24420 +24421, OA24421 +24422, OA24422 +24423, OA24423 +24424, OA24424 +24425, OA24425 +24426, OA24426 +24427, OA24427 +24428, OA24428 +24429, OA24429 +24430, OA24430 +24431, OA24431 +24432, OA24432 +24433, OA24433 +24434, OA24434 +24435, OA24435 +24436, OA24436 +24437, OA24437 +24438, OA24438 +24439, OA24439 +24440, OA24440 +24441, OA24441 +24442, OA24442 +24443, OA24443 +24444, OA24444 +24445, OA24445 +24446, OA24446 +24447, OA24447 +24448, OA24448 +24449, OA24449 +24450, OA24450 +24451, OA24451 +24452, OA24452 +24453, OA24453 +24454, OA24454 +24455, OA24455 +24456, OA24456 +24457, OA24457 +24458, OA24458 +24459, OA24459 +24460, OA24460 +24461, OA24461 +24462, OA24462 +24463, OA24463 +24464, OA24464 +24465, OA24465 +24466, OA24466 +24467, OA24467 +24468, OA24468 +24469, OA24469 +24470, OA24470 +24471, OA24471 +24472, OA24472 +24473, OA24473 +24474, OA24474 +24475, OA24475 +24476, OA24476 +24477, OA24477 +24478, OA24478 +24479, OA24479 +24480, OA24480 +24481, OA24481 +24482, OA24482 +24483, OA24483 +24484, OA24484 +24485, OA24485 +24486, OA24486 +24487, OA24487 +24488, OA24488 +24489, OA24489 +24490, OA24490 +24491, OA24491 +24492, OA24492 +24493, OA24493 +24494, OA24494 +24495, OA24495 +24496, OA24496 +24497, OA24497 +24498, OA24498 +24499, OA24499 +24500, OA24500 +24501, OA24501 +24502, OA24502 +24503, OA24503 +24504, OA24504 +24505, OA24505 +24506, OA24506 +24507, OA24507 +24508, OA24508 +24509, OA24509 +24510, OA24510 +24511, OA24511 +24512, OA24512 +24513, OA24513 +24514, OA24514 +24515, OA24515 +24516, OA24516 +24517, OA24517 +24518, OA24518 +24519, OA24519 +24520, OA24520 +24521, OA24521 +24522, OA24522 +24523, OA24523 +24524, OA24524 +24525, OA24525 +24526, OA24526 +24527, OA24527 +24528, OA24528 +24529, OA24529 +24530, OA24530 +24531, OA24531 +24532, OA24532 +24533, OA24533 +24534, OA24534 +24535, OA24535 +24536, OA24536 +24537, OA24537 +24538, OA24538 +24539, OA24539 +24540, OA24540 +24541, OA24541 +24542, OA24542 +24543, OA24543 +24544, OA24544 +24545, OA24545 +24546, OA24546 +24547, OA24547 +24548, OA24548 +24549, OA24549 +24550, OA24550 +24551, OA24551 +24552, OA24552 +24553, OA24553 +24554, OA24554 +24555, OA24555 +24556, OA24556 +24557, OA24557 +24558, OA24558 +24559, OA24559 +24560, OA24560 +24561, OA24561 +24562, OA24562 +24563, OA24563 +24564, OA24564 +24565, OA24565 +24566, OA24566 +24567, OA24567 +24568, OA24568 +24569, OA24569 +24570, OA24570 +24571, OA24571 +24572, OA24572 +24573, OA24573 +24574, OA24574 +24575, OA24575 +24576, OA24576 +24577, OA24577 +24578, OA24578 +24579, OA24579 +24580, OA24580 +24581, OA24581 +24582, OA24582 +24583, OA24583 +24584, OA24584 +24585, OA24585 +24586, OA24586 +24587, OA24587 +24588, OA24588 +24589, OA24589 +24590, OA24590 +24591, OA24591 +24592, OA24592 +24593, OA24593 +24594, OA24594 +24595, OA24595 +24596, OA24596 +24597, OA24597 +24598, OA24598 +24599, OA24599 +24600, OA24600 +24601, OA24601 +24602, OA24602 +24603, OA24603 +24604, OA24604 +24605, OA24605 +24606, OA24606 +24607, OA24607 +24608, OA24608 +24609, OA24609 +24610, OA24610 +24611, OA24611 +24612, OA24612 +24613, OA24613 +24614, OA24614 +24615, OA24615 +24616, OA24616 +24617, OA24617 +24618, OA24618 +24619, OA24619 +24620, OA24620 +24621, OA24621 +24622, OA24622 +24623, OA24623 +24624, OA24624 +24625, OA24625 +24626, OA24626 +24627, OA24627 +24628, OA24628 +24629, OA24629 +24630, OA24630 +24631, OA24631 +24632, OA24632 +24633, OA24633 +24634, OA24634 +24635, OA24635 +24636, OA24636 +24637, OA24637 +24638, OA24638 +24639, OA24639 +24640, OA24640 +24641, OA24641 +24642, OA24642 +24643, OA24643 +24644, OA24644 +24645, OA24645 +24646, OA24646 +24647, OA24647 +24648, OA24648 +24649, OA24649 +24650, OA24650 +24651, OA24651 +24652, OA24652 +24653, OA24653 +24654, OA24654 +24655, OA24655 +24656, OA24656 +24657, OA24657 +24658, OA24658 +24659, OA24659 +24660, OA24660 +24661, OA24661 +24662, OA24662 +24663, OA24663 +24664, OA24664 +24665, OA24665 +24666, OA24666 +24667, OA24667 +24668, OA24668 +24669, OA24669 +24670, OA24670 +24671, OA24671 +24672, OA24672 +24673, OA24673 +24674, OA24674 +24675, OA24675 +24676, OA24676 +24677, OA24677 +24678, OA24678 +24679, OA24679 +24680, OA24680 +24681, OA24681 +24682, OA24682 +24683, OA24683 +24684, OA24684 +24685, OA24685 +24686, OA24686 +24687, OA24687 +24688, OA24688 +24689, OA24689 +24690, OA24690 +24691, OA24691 +24692, OA24692 +24693, OA24693 +24694, OA24694 +24695, OA24695 +24696, OA24696 +24697, OA24697 +24698, OA24698 +24699, OA24699 +24700, OA24700 +24701, OA24701 +24702, OA24702 +24703, OA24703 +24704, OA24704 +24705, OA24705 +24706, OA24706 +24707, OA24707 +24708, OA24708 +24709, OA24709 +24710, OA24710 +24711, OA24711 +24712, OA24712 +24713, OA24713 +24714, OA24714 +24715, OA24715 +24716, OA24716 +24717, OA24717 +24718, OA24718 +24719, OA24719 +24720, OA24720 +24721, OA24721 +24722, OA24722 +24723, OA24723 +24724, OA24724 +24725, OA24725 +24726, OA24726 +24727, OA24727 +24728, OA24728 +24729, OA24729 +24730, OA24730 +24731, OA24731 +24732, OA24732 +24733, OA24733 +24734, OA24734 +24735, OA24735 +24736, OA24736 +24737, OA24737 +24738, OA24738 +24739, OA24739 +24740, OA24740 +24741, OA24741 +24742, OA24742 +24743, OA24743 +24744, OA24744 +24745, OA24745 +24746, OA24746 +24747, OA24747 +24748, OA24748 +24749, OA24749 +24750, OA24750 +24751, OA24751 +24752, OA24752 +24753, OA24753 +24754, OA24754 +24755, OA24755 +24756, OA24756 +24757, OA24757 +24758, OA24758 +24759, OA24759 +24760, OA24760 +24761, OA24761 +24762, OA24762 +24763, OA24763 +24764, OA24764 +24765, OA24765 +24766, OA24766 +24767, OA24767 +24768, OA24768 +24769, OA24769 +24770, OA24770 +24771, OA24771 +24772, OA24772 +24773, OA24773 +24774, OA24774 +24775, OA24775 +24776, OA24776 +24777, OA24777 +24778, OA24778 +24779, OA24779 +24780, OA24780 +24781, OA24781 +24782, OA24782 +24783, OA24783 +24784, OA24784 +24785, OA24785 +24786, OA24786 +24787, OA24787 +24788, OA24788 +24789, OA24789 +24790, OA24790 +24791, OA24791 +24792, OA24792 +24793, OA24793 +24794, OA24794 +24795, OA24795 +24796, OA24796 +24797, OA24797 +24798, OA24798 +24799, OA24799 +24800, OA24800 +24801, OA24801 +24802, OA24802 +24803, OA24803 +24804, OA24804 +24805, OA24805 +24806, OA24806 +24807, OA24807 +24808, OA24808 +24809, OA24809 +24810, OA24810 +24811, OA24811 +24812, OA24812 +24813, OA24813 +24814, OA24814 +24815, OA24815 +24816, OA24816 +24817, OA24817 +24818, OA24818 +24819, OA24819 +24820, OA24820 +24821, OA24821 +24822, OA24822 +24823, OA24823 +24824, OA24824 +24825, OA24825 +24826, OA24826 +24827, OA24827 +24828, OA24828 +24829, OA24829 +24830, OA24830 +24831, OA24831 +24832, OA24832 +24833, OA24833 +24834, OA24834 +24835, OA24835 +24836, OA24836 +24837, OA24837 +24838, OA24838 +24839, OA24839 +24840, OA24840 +24841, OA24841 +24842, OA24842 +24843, OA24843 +24844, OA24844 +24845, OA24845 +24846, OA24846 +24847, OA24847 +24848, OA24848 +24849, OA24849 +24850, OA24850 +24851, OA24851 +24852, OA24852 +24853, OA24853 +24854, OA24854 +24855, OA24855 +24856, OA24856 +24857, OA24857 +24858, OA24858 +24859, OA24859 +24860, OA24860 +24861, OA24861 +24862, OA24862 +24863, OA24863 +24864, OA24864 +24865, OA24865 +24866, OA24866 +24867, OA24867 +24868, OA24868 +24869, OA24869 +24870, OA24870 +24871, OA24871 +24872, OA24872 +24873, OA24873 +24874, OA24874 +24875, OA24875 +24876, OA24876 +24877, OA24877 +24878, OA24878 +24879, OA24879 +24880, OA24880 +24881, OA24881 +24882, OA24882 +24883, OA24883 +24884, OA24884 +24885, OA24885 +24886, OA24886 +24887, OA24887 +24888, OA24888 +24889, OA24889 +24890, OA24890 +24891, OA24891 +24892, OA24892 +24893, OA24893 +24894, OA24894 +24895, OA24895 +24896, OA24896 +24897, OA24897 +24898, OA24898 +24899, OA24899 +24900, OA24900 +24901, OA24901 +24902, OA24902 +24903, OA24903 +24904, OA24904 +24905, OA24905 +24906, OA24906 +24907, OA24907 +24908, OA24908 +24909, OA24909 +24910, OA24910 +24911, OA24911 +24912, OA24912 +24913, OA24913 +24914, OA24914 +24915, OA24915 +24916, OA24916 +24917, OA24917 +24918, OA24918 +24919, OA24919 +24920, OA24920 +24921, OA24921 +24922, OA24922 +24923, OA24923 +24924, OA24924 +24925, OA24925 +24926, OA24926 +24927, OA24927 +24928, OA24928 +24929, OA24929 +24930, OA24930 +24931, OA24931 +24932, OA24932 +24933, OA24933 +24934, OA24934 +24935, OA24935 +24936, OA24936 +24937, OA24937 +24938, OA24938 +24939, OA24939 +24940, OA24940 +24941, OA24941 +24942, OA24942 +24943, OA24943 +24944, OA24944 +24945, OA24945 +24946, OA24946 +24947, OA24947 +24948, OA24948 +24949, OA24949 +24950, OA24950 +24951, OA24951 +24952, OA24952 +24953, OA24953 +24954, OA24954 +24955, OA24955 +24956, OA24956 +24957, OA24957 +24958, OA24958 +24959, OA24959 +24960, OA24960 +24961, OA24961 +24962, OA24962 +24963, OA24963 +24964, OA24964 +24965, OA24965 +24966, OA24966 +24967, OA24967 +24968, OA24968 +24969, OA24969 +24970, OA24970 +24971, OA24971 +24972, OA24972 +24973, OA24973 +24974, OA24974 +24975, OA24975 +24976, OA24976 +24977, OA24977 +24978, OA24978 +24979, OA24979 +24980, OA24980 +24981, OA24981 +24982, OA24982 +24983, OA24983 +24984, OA24984 +24985, OA24985 +24986, OA24986 +24987, OA24987 +24988, OA24988 +24989, OA24989 +24990, OA24990 +24991, OA24991 +24992, OA24992 +24993, OA24993 +24994, OA24994 +24995, OA24995 +24996, OA24996 +24997, OA24997 +24998, OA24998 +24999, OA24999 +25000, OA25000 +25001, OA25001 +25002, OA25002 +25003, OA25003 +25004, OA25004 +25005, OA25005 +25006, OA25006 +25007, OA25007 +25008, OA25008 +25009, OA25009 +25010, OA25010 +25011, OA25011 +25012, OA25012 +25013, OA25013 +25014, OA25014 +25015, OA25015 +25016, OA25016 +25017, OA25017 +25018, OA25018 +25019, OA25019 +25020, OA25020 +25021, OA25021 +25022, OA25022 +25023, OA25023 +25024, OA25024 +25025, OA25025 +25026, OA25026 +25027, OA25027 +25028, OA25028 +25029, OA25029 +25030, OA25030 +25031, OA25031 +25032, OA25032 +25033, OA25033 +25034, OA25034 +25035, OA25035 +25036, OA25036 +25037, OA25037 +25038, OA25038 +25039, OA25039 +25040, OA25040 +25041, OA25041 +25042, OA25042 +25043, OA25043 +25044, OA25044 +25045, OA25045 +25046, OA25046 +25047, OA25047 +25048, OA25048 +25049, OA25049 +25050, OA25050 +25051, OA25051 +25052, OA25052 +25053, OA25053 +25054, OA25054 +25055, OA25055 +25056, OA25056 +25057, OA25057 +25058, OA25058 +25059, OA25059 +25060, OA25060 +25061, OA25061 +25062, OA25062 +25063, OA25063 +25064, OA25064 +25065, OA25065 +25066, OA25066 +25067, OA25067 +25068, OA25068 +25069, OA25069 +25070, OA25070 +25071, OA25071 +25072, OA25072 +25073, OA25073 +25074, OA25074 +25075, OA25075 +25076, OA25076 +25077, OA25077 +25078, OA25078 +25079, OA25079 +25080, OA25080 +25081, OA25081 +25082, OA25082 +25083, OA25083 +25084, OA25084 +25085, OA25085 +25086, OA25086 +25087, OA25087 +25088, OA25088 +25089, OA25089 +25090, OA25090 +25091, OA25091 +25092, OA25092 +25093, OA25093 +25094, OA25094 +25095, OA25095 +25096, OA25096 +25097, OA25097 +25098, OA25098 +25099, OA25099 +25100, OA25100 +25101, OA25101 +25102, OA25102 +25103, OA25103 +25104, OA25104 +25105, OA25105 +25106, OA25106 +25107, OA25107 +25108, OA25108 +25109, OA25109 +25110, OA25110 +25111, OA25111 +25112, OA25112 +25113, OA25113 +25114, OA25114 +25115, OA25115 +25116, OA25116 +25117, OA25117 +25118, OA25118 +25119, OA25119 +25120, OA25120 +25121, OA25121 +25122, OA25122 +25123, OA25123 +25124, OA25124 +25125, OA25125 +25126, OA25126 +25127, OA25127 +25128, OA25128 +25129, OA25129 +25130, OA25130 +25131, OA25131 +25132, OA25132 +25133, OA25133 +25134, OA25134 +25135, OA25135 +25136, OA25136 +25137, OA25137 +25138, OA25138 +25139, OA25139 +25140, OA25140 +25141, OA25141 +25142, OA25142 +25143, OA25143 +25144, OA25144 +25145, OA25145 +25146, OA25146 +25147, OA25147 +25148, OA25148 +25149, OA25149 +25150, OA25150 +25151, OA25151 +25152, OA25152 +25153, OA25153 +25154, OA25154 +25155, OA25155 +25156, OA25156 +25157, OA25157 +25158, OA25158 +25159, OA25159 +25160, OA25160 +25161, OA25161 +25162, OA25162 +25163, OA25163 +25164, OA25164 +25165, OA25165 +25166, OA25166 +25167, OA25167 +25168, OA25168 +25169, OA25169 +25170, OA25170 +25171, OA25171 +25172, OA25172 +25173, OA25173 +25174, OA25174 +25175, OA25175 +25176, OA25176 +25177, OA25177 +25178, OA25178 +25179, OA25179 +25180, OA25180 +25181, OA25181 +25182, OA25182 +25183, OA25183 +25184, OA25184 +25185, OA25185 +25186, OA25186 +25187, OA25187 +25188, OA25188 +25189, OA25189 +25190, OA25190 +25191, OA25191 +25192, OA25192 +25193, OA25193 +25194, OA25194 +25195, OA25195 +25196, OA25196 +25197, OA25197 +25198, OA25198 +25199, OA25199 +25200, OA25200 +25201, OA25201 +25202, OA25202 +25203, OA25203 +25204, OA25204 +25205, OA25205 +25206, OA25206 +25207, OA25207 +25208, OA25208 +25209, OA25209 +25210, OA25210 +25211, OA25211 +25212, OA25212 +25213, OA25213 +25214, OA25214 +25215, OA25215 +25216, OA25216 +25217, OA25217 +25218, OA25218 +25219, OA25219 +25220, OA25220 +25221, OA25221 +25222, OA25222 +25223, OA25223 +25224, OA25224 +25225, OA25225 +25226, OA25226 +25227, OA25227 +25228, OA25228 +25229, OA25229 +25230, OA25230 +25231, OA25231 +25232, OA25232 +25233, OA25233 +25234, OA25234 +25235, OA25235 +25236, OA25236 +25237, OA25237 +25238, OA25238 +25239, OA25239 +25240, OA25240 +25241, OA25241 +25242, OA25242 +25243, OA25243 +25244, OA25244 +25245, OA25245 +25246, OA25246 +25247, OA25247 +25248, OA25248 +25249, OA25249 +25250, OA25250 +25251, OA25251 +25252, OA25252 +25253, OA25253 +25254, OA25254 +25255, OA25255 +25256, OA25256 +25257, OA25257 +25258, OA25258 +25259, OA25259 +25260, OA25260 +25261, OA25261 +25262, OA25262 +25263, OA25263 +25264, OA25264 +25265, OA25265 +25266, OA25266 +25267, OA25267 +25268, OA25268 +25269, OA25269 +25270, OA25270 +25271, OA25271 +25272, OA25272 +25273, OA25273 +25274, OA25274 +25275, OA25275 +25276, OA25276 +25277, OA25277 +25278, OA25278 +25279, OA25279 +25280, OA25280 +25281, OA25281 +25282, OA25282 +25283, OA25283 +25284, OA25284 +25285, OA25285 +25286, OA25286 +25287, OA25287 +25288, OA25288 +25289, OA25289 +25290, OA25290 +25291, OA25291 +25292, OA25292 +25293, OA25293 +25294, OA25294 +25295, OA25295 +25296, OA25296 +25297, OA25297 +25298, OA25298 +25299, OA25299 +25300, OA25300 +25301, OA25301 +25302, OA25302 +25303, OA25303 +25304, OA25304 +25305, OA25305 +25306, OA25306 +25307, OA25307 +25308, OA25308 +25309, OA25309 +25310, OA25310 +25311, OA25311 +25312, OA25312 +25313, OA25313 +25314, OA25314 +25315, OA25315 +25316, OA25316 +25317, OA25317 +25318, OA25318 +25319, OA25319 +25320, OA25320 +25321, OA25321 +25322, OA25322 +25323, OA25323 +25324, OA25324 +25325, OA25325 +25326, OA25326 +25327, OA25327 +25328, OA25328 +25329, OA25329 +25330, OA25330 +25331, OA25331 +25332, OA25332 +25333, OA25333 +25334, OA25334 +25335, OA25335 +25336, OA25336 +25337, OA25337 +25338, OA25338 +25339, OA25339 +25340, OA25340 +25341, OA25341 +25342, OA25342 +25343, OA25343 +25344, OA25344 +25345, OA25345 +25346, OA25346 +25347, OA25347 +25348, OA25348 +25349, OA25349 +25350, OA25350 +25351, OA25351 +25352, OA25352 +25353, OA25353 +25354, OA25354 +25355, OA25355 +25356, OA25356 +25357, OA25357 +25358, OA25358 +25359, OA25359 +25360, OA25360 +25361, OA25361 +25362, OA25362 +25363, OA25363 +25364, OA25364 +25365, OA25365 +25366, OA25366 +25367, OA25367 +25368, OA25368 +25369, OA25369 +25370, OA25370 +25371, OA25371 +25372, OA25372 +25373, OA25373 +25374, OA25374 +25375, OA25375 +25376, OA25376 +25377, OA25377 +25378, OA25378 +25379, OA25379 +25380, OA25380 +25381, OA25381 +25382, OA25382 +25383, OA25383 +25384, OA25384 +25385, OA25385 +25386, OA25386 +25387, OA25387 +25388, OA25388 +25389, OA25389 +25390, OA25390 +25391, OA25391 +25392, OA25392 +25393, OA25393 +25394, OA25394 +25395, OA25395 +25396, OA25396 +25397, OA25397 +25398, OA25398 +25399, OA25399 +25400, OA25400 +25401, OA25401 +25402, OA25402 +25403, OA25403 +25404, OA25404 +25405, OA25405 +25406, OA25406 +25407, OA25407 +25408, OA25408 +25409, OA25409 +25410, OA25410 +25411, OA25411 +25412, OA25412 +25413, OA25413 +25414, OA25414 +25415, OA25415 +25416, OA25416 +25417, OA25417 +25418, OA25418 +25419, OA25419 +25420, OA25420 +25421, OA25421 +25422, OA25422 +25423, OA25423 +25424, OA25424 +25425, OA25425 +25426, OA25426 +25427, OA25427 +25428, OA25428 +25429, OA25429 +25430, OA25430 +25431, OA25431 +25432, OA25432 +25433, OA25433 +25434, OA25434 +25435, OA25435 +25436, OA25436 +25437, OA25437 +25438, OA25438 +25439, OA25439 +25440, OA25440 +25441, OA25441 +25442, OA25442 +25443, OA25443 +25444, OA25444 +25445, OA25445 +25446, OA25446 +25447, OA25447 +25448, OA25448 +25449, OA25449 +25450, OA25450 +25451, OA25451 +25452, OA25452 +25453, OA25453 +25454, OA25454 +25455, OA25455 +25456, OA25456 +25457, OA25457 +25458, OA25458 +25459, OA25459 +25460, OA25460 +25461, OA25461 +25462, OA25462 +25463, OA25463 +25464, OA25464 +25465, OA25465 +25466, OA25466 +25467, OA25467 +25468, OA25468 +25469, OA25469 +25470, OA25470 +25471, OA25471 +25472, OA25472 +25473, OA25473 +25474, OA25474 +25475, OA25475 +25476, OA25476 +25477, OA25477 +25478, OA25478 +25479, OA25479 +25480, OA25480 +25481, OA25481 +25482, OA25482 +25483, OA25483 +25484, OA25484 +25485, OA25485 +25486, OA25486 +25487, OA25487 +25488, OA25488 +25489, OA25489 +25490, OA25490 +25491, OA25491 +25492, OA25492 +25493, OA25493 +25494, OA25494 +25495, OA25495 +25496, OA25496 +25497, OA25497 +25498, OA25498 +25499, OA25499 +25500, OA25500 +25501, OA25501 +25502, OA25502 +25503, OA25503 +25504, OA25504 +25505, OA25505 +25506, OA25506 +25507, OA25507 +25508, OA25508 +25509, OA25509 +25510, OA25510 +25511, OA25511 +25512, OA25512 +25513, OA25513 +25514, OA25514 +25515, OA25515 +25516, OA25516 +25517, OA25517 +25518, OA25518 +25519, OA25519 +25520, OA25520 +25521, OA25521 +25522, OA25522 +25523, OA25523 +25524, OA25524 +25525, OA25525 +25526, OA25526 +25527, OA25527 +25528, OA25528 +25529, OA25529 +25530, OA25530 +25531, OA25531 +25532, OA25532 +25533, OA25533 +25534, OA25534 +25535, OA25535 +25536, OA25536 +25537, OA25537 +25538, OA25538 +25539, OA25539 +25540, OA25540 +25541, OA25541 +25542, OA25542 +25543, OA25543 +25544, OA25544 +25545, OA25545 +25546, OA25546 +25547, OA25547 +25548, OA25548 +25549, OA25549 +25550, OA25550 +25551, OA25551 +25552, OA25552 +25553, OA25553 +25554, OA25554 +25555, OA25555 +25556, OA25556 +25557, OA25557 +25558, OA25558 +25559, OA25559 +25560, OA25560 +25561, OA25561 +25562, OA25562 +25563, OA25563 +25564, OA25564 +25565, OA25565 +25566, OA25566 +25567, OA25567 +25568, OA25568 +25569, OA25569 +25570, OA25570 +25571, OA25571 +25572, OA25572 +25573, OA25573 +25574, OA25574 +25575, OA25575 +25576, OA25576 +25577, OA25577 +25578, OA25578 +25579, OA25579 +25580, OA25580 +25581, OA25581 +25582, OA25582 +25583, OA25583 +25584, OA25584 +25585, OA25585 +25586, OA25586 +25587, OA25587 +25588, OA25588 +25589, OA25589 +25590, OA25590 +25591, OA25591 +25592, OA25592 +25593, OA25593 +25594, OA25594 +25595, OA25595 +25596, OA25596 +25597, OA25597 +25598, OA25598 +25599, OA25599 +25600, OA25600 +25601, OA25601 +25602, OA25602 +25603, OA25603 +25604, OA25604 +25605, OA25605 +25606, OA25606 +25607, OA25607 +25608, OA25608 +25609, OA25609 +25610, OA25610 +25611, OA25611 +25612, OA25612 +25613, OA25613 +25614, OA25614 +25615, OA25615 +25616, OA25616 +25617, OA25617 +25618, OA25618 +25619, OA25619 +25620, OA25620 +25621, OA25621 +25622, OA25622 +25623, OA25623 +25624, OA25624 +25625, OA25625 +25626, OA25626 +25627, OA25627 +25628, OA25628 +25629, OA25629 +25630, OA25630 +25631, OA25631 +25632, OA25632 +25633, OA25633 +25634, OA25634 +25635, OA25635 +25636, OA25636 +25637, OA25637 +25638, OA25638 +25639, OA25639 +25640, OA25640 +25641, OA25641 +25642, OA25642 +25643, OA25643 +25644, OA25644 +25645, OA25645 +25646, OA25646 +25647, OA25647 +25648, OA25648 +25649, OA25649 +25650, OA25650 +25651, OA25651 +25652, OA25652 +25653, OA25653 +25654, OA25654 +25655, OA25655 +25656, OA25656 +25657, OA25657 +25658, OA25658 +25659, OA25659 +25660, OA25660 +25661, OA25661 +25662, OA25662 +25663, OA25663 +25664, OA25664 +25665, OA25665 +25666, OA25666 +25667, OA25667 +25668, OA25668 +25669, OA25669 +25670, OA25670 +25671, OA25671 +25672, OA25672 +25673, OA25673 +25674, OA25674 +25675, OA25675 +25676, OA25676 +25677, OA25677 +25678, OA25678 +25679, OA25679 +25680, OA25680 +25681, OA25681 +25682, OA25682 +25683, OA25683 +25684, OA25684 +25685, OA25685 +25686, OA25686 +25687, OA25687 +25688, OA25688 +25689, OA25689 +25690, OA25690 +25691, OA25691 +25692, OA25692 +25693, OA25693 +25694, OA25694 +25695, OA25695 +25696, OA25696 +25697, OA25697 +25698, OA25698 +25699, OA25699 +25700, OA25700 +25701, OA25701 +25702, OA25702 +25703, OA25703 +25704, OA25704 +25705, OA25705 +25706, OA25706 +25707, OA25707 +25708, OA25708 +25709, OA25709 +25710, OA25710 +25711, OA25711 +25712, OA25712 +25713, OA25713 +25714, OA25714 +25715, OA25715 +25716, OA25716 +25717, OA25717 +25718, OA25718 +25719, OA25719 +25720, OA25720 +25721, OA25721 +25722, OA25722 +25723, OA25723 +25724, OA25724 +25725, OA25725 +25726, OA25726 +25727, OA25727 +25728, OA25728 +25729, OA25729 +25730, OA25730 +25731, OA25731 +25732, OA25732 +25733, OA25733 +25734, OA25734 +25735, OA25735 +25736, OA25736 +25737, OA25737 +25738, OA25738 +25739, OA25739 +25740, OA25740 +25741, OA25741 +25742, OA25742 +25743, OA25743 +25744, OA25744 +25745, OA25745 +25746, OA25746 +25747, OA25747 +25748, OA25748 +25749, OA25749 +25750, OA25750 +25751, OA25751 +25752, OA25752 +25753, OA25753 +25754, OA25754 +25755, OA25755 +25756, OA25756 +25757, OA25757 +25758, OA25758 +25759, OA25759 +25760, OA25760 +25761, OA25761 +25762, OA25762 +25763, OA25763 +25764, OA25764 +25765, OA25765 +25766, OA25766 +25767, OA25767 +25768, OA25768 +25769, OA25769 +25770, OA25770 +25771, OA25771 +25772, OA25772 +25773, OA25773 +25774, OA25774 +25775, OA25775 +25776, OA25776 +25777, OA25777 +25778, OA25778 +25779, OA25779 +25780, OA25780 +25781, OA25781 +25782, OA25782 +25783, OA25783 +25784, OA25784 +25785, OA25785 +25786, OA25786 +25787, OA25787 +25788, OA25788 +25789, OA25789 +25790, OA25790 +25791, OA25791 +25792, OA25792 +25793, OA25793 +25794, OA25794 +25795, OA25795 +25796, OA25796 +25797, OA25797 +25798, OA25798 +25799, OA25799 +25800, OA25800 +25801, OA25801 +25802, OA25802 +25803, OA25803 +25804, OA25804 +25805, OA25805 +25806, OA25806 +25807, OA25807 +25808, OA25808 +25809, OA25809 +25810, OA25810 +25811, OA25811 +25812, OA25812 +25813, OA25813 +25814, OA25814 +25815, OA25815 +25816, OA25816 +25817, OA25817 +25818, OA25818 +25819, OA25819 +25820, OA25820 +25821, OA25821 +25822, OA25822 +25823, OA25823 +25824, OA25824 +25825, OA25825 +25826, OA25826 +25827, OA25827 +25828, OA25828 +25829, OA25829 +25830, OA25830 +25831, OA25831 +25832, OA25832 +25833, OA25833 +25834, OA25834 +25835, OA25835 +25836, OA25836 +25837, OA25837 +25838, OA25838 +25839, OA25839 +25840, OA25840 +25841, OA25841 +25842, OA25842 +25843, OA25843 +25844, OA25844 +25845, OA25845 +25846, OA25846 +25847, OA25847 +25848, OA25848 +25849, OA25849 +25850, OA25850 +25851, OA25851 +25852, OA25852 +25853, OA25853 +25854, OA25854 +25855, OA25855 +25856, OA25856 +25857, OA25857 +25858, OA25858 +25859, OA25859 +25860, OA25860 +25861, OA25861 +25862, OA25862 +25863, OA25863 +25864, OA25864 +25865, OA25865 +25866, OA25866 +25867, OA25867 +25868, OA25868 +25869, OA25869 +25870, OA25870 +25871, OA25871 +25872, OA25872 +25873, OA25873 +25874, OA25874 +25875, OA25875 +25876, OA25876 +25877, OA25877 +25878, OA25878 +25879, OA25879 +25880, OA25880 +25881, OA25881 +25882, OA25882 +25883, OA25883 +25884, OA25884 +25885, OA25885 +25886, OA25886 +25887, OA25887 +25888, OA25888 +25889, OA25889 +25890, OA25890 +25891, OA25891 +25892, OA25892 +25893, OA25893 +25894, OA25894 +25895, OA25895 +25896, OA25896 +25897, OA25897 +25898, OA25898 +25899, OA25899 +25900, OA25900 +25901, OA25901 +25902, OA25902 +25903, OA25903 +25904, OA25904 +25905, OA25905 +25906, OA25906 +25907, OA25907 +25908, OA25908 +25909, OA25909 +25910, OA25910 +25911, OA25911 +25912, OA25912 +25913, OA25913 +25914, OA25914 +25915, OA25915 +25916, OA25916 +25917, OA25917 +25918, OA25918 +25919, OA25919 +25920, OA25920 +25921, OA25921 +25922, OA25922 +25923, OA25923 +25924, OA25924 +25925, OA25925 +25926, OA25926 +25927, OA25927 +25928, OA25928 +25929, OA25929 +25930, OA25930 +25931, OA25931 +25932, OA25932 +25933, OA25933 +25934, OA25934 +25935, OA25935 +25936, OA25936 +25937, OA25937 +25938, OA25938 +25939, OA25939 +25940, OA25940 +25941, OA25941 +25942, OA25942 +25943, OA25943 +25944, OA25944 +25945, OA25945 +25946, OA25946 +25947, OA25947 +25948, OA25948 +25949, OA25949 +25950, OA25950 +25951, OA25951 +25952, OA25952 +25953, OA25953 +25954, OA25954 +25955, OA25955 +25956, OA25956 +25957, OA25957 +25958, OA25958 +25959, OA25959 +25960, OA25960 +25961, OA25961 +25962, OA25962 +25963, OA25963 +25964, OA25964 +25965, OA25965 +25966, OA25966 +25967, OA25967 +25968, OA25968 +25969, OA25969 +25970, OA25970 +25971, OA25971 +25972, OA25972 +25973, OA25973 +25974, OA25974 +25975, OA25975 +25976, OA25976 +25977, OA25977 +25978, OA25978 +25979, OA25979 +25980, OA25980 +25981, OA25981 +25982, OA25982 +25983, OA25983 +25984, OA25984 +25985, OA25985 +25986, OA25986 +25987, OA25987 +25988, OA25988 +25989, OA25989 +25990, OA25990 +25991, OA25991 +25992, OA25992 +25993, OA25993 +25994, OA25994 +25995, OA25995 +25996, OA25996 +25997, OA25997 +25998, OA25998 +25999, OA25999 +26000, OA26000 +26001, OA26001 +26002, OA26002 +26003, OA26003 +26004, OA26004 +26005, OA26005 +26006, OA26006 +26007, OA26007 +26008, OA26008 +26009, OA26009 +26010, OA26010 +26011, OA26011 +26012, OA26012 +26013, OA26013 +26014, OA26014 +26015, OA26015 +26016, OA26016 +26017, OA26017 +26018, OA26018 +26019, OA26019 +26020, OA26020 +26021, OA26021 +26022, OA26022 +26023, OA26023 +26024, OA26024 +26025, OA26025 +26026, OA26026 +26027, OA26027 +26028, OA26028 +26029, OA26029 +26030, OA26030 +26031, OA26031 +26032, OA26032 +26033, OA26033 +26034, OA26034 +26035, OA26035 +26036, OA26036 +26037, OA26037 +26038, OA26038 +26039, OA26039 +26040, OA26040 +26041, OA26041 +26042, OA26042 +26043, OA26043 +26044, OA26044 +26045, OA26045 +26046, OA26046 +26047, OA26047 +26048, OA26048 +26049, OA26049 +26050, OA26050 +26051, OA26051 +26052, OA26052 +26053, OA26053 +26054, OA26054 +26055, OA26055 +26056, OA26056 +26057, OA26057 +26058, OA26058 +26059, OA26059 +26060, OA26060 +26061, OA26061 +26062, OA26062 +26063, OA26063 +26064, OA26064 +26065, OA26065 +26066, OA26066 +26067, OA26067 +26068, OA26068 +26069, OA26069 +26070, OA26070 +26071, OA26071 +26072, OA26072 +26073, OA26073 +26074, OA26074 +26075, OA26075 +26076, OA26076 +26077, OA26077 +26078, OA26078 +26079, OA26079 +26080, OA26080 +26081, OA26081 +26082, OA26082 +26083, OA26083 +26084, OA26084 +26085, OA26085 +26086, OA26086 +26087, OA26087 +26088, OA26088 +26089, OA26089 +26090, OA26090 +26091, OA26091 +26092, OA26092 +26093, OA26093 +26094, OA26094 +26095, OA26095 +26096, OA26096 +26097, OA26097 +26098, OA26098 +26099, OA26099 +26100, OA26100 +26101, OA26101 +26102, OA26102 +26103, OA26103 +26104, OA26104 +26105, OA26105 +26106, OA26106 +26107, OA26107 +26108, OA26108 +26109, OA26109 +26110, OA26110 +26111, OA26111 +26112, OA26112 +26113, OA26113 +26114, OA26114 +26115, OA26115 +26116, OA26116 +26117, OA26117 +26118, OA26118 +26119, OA26119 +26120, OA26120 +26121, OA26121 +26122, OA26122 +26123, OA26123 +26124, OA26124 +26125, OA26125 +26126, OA26126 +26127, OA26127 +26128, OA26128 +26129, OA26129 +26130, OA26130 +26131, OA26131 +26132, OA26132 +26133, OA26133 +26134, OA26134 +26135, OA26135 +26136, OA26136 +26137, OA26137 +26138, OA26138 +26139, OA26139 +26140, OA26140 +26141, OA26141 +26142, OA26142 +26143, OA26143 +26144, OA26144 +26145, OA26145 +26146, OA26146 +26147, OA26147 +26148, OA26148 +26149, OA26149 +26150, OA26150 +26151, OA26151 +26152, OA26152 +26153, OA26153 +26154, OA26154 +26155, OA26155 +26156, OA26156 +26157, OA26157 +26158, OA26158 +26159, OA26159 +26160, OA26160 +26161, OA26161 +26162, OA26162 +26163, OA26163 +26164, OA26164 +26165, OA26165 +26166, OA26166 +26167, OA26167 +26168, OA26168 +26169, OA26169 +26170, OA26170 +26171, OA26171 +26172, OA26172 +26173, OA26173 +26174, OA26174 +26175, OA26175 +26176, OA26176 +26177, OA26177 +26178, OA26178 +26179, OA26179 +26180, OA26180 +26181, OA26181 +26182, OA26182 +26183, OA26183 +26184, OA26184 +26185, OA26185 +26186, OA26186 +26187, OA26187 +26188, OA26188 +26189, OA26189 +26190, OA26190 +26191, OA26191 +26192, OA26192 +26193, OA26193 +26194, OA26194 +26195, OA26195 +26196, OA26196 +26197, OA26197 +26198, OA26198 +26199, OA26199 +26200, OA26200 +26201, OA26201 +26202, OA26202 +26203, OA26203 +26204, OA26204 +26205, OA26205 +26206, OA26206 +26207, OA26207 +26208, OA26208 +26209, OA26209 +26210, OA26210 +26211, OA26211 +26212, OA26212 +26213, OA26213 +26214, OA26214 +26215, OA26215 +26216, OA26216 +26217, OA26217 +26218, OA26218 +26219, OA26219 +26220, OA26220 +26221, OA26221 +26222, OA26222 +26223, OA26223 +26224, OA26224 +26225, OA26225 +26226, OA26226 +26227, OA26227 +26228, OA26228 +26229, OA26229 +26230, OA26230 +26231, OA26231 +26232, OA26232 +26233, OA26233 +26234, OA26234 +26235, OA26235 +26236, OA26236 +26237, OA26237 +26238, OA26238 +26239, OA26239 +26240, OA26240 +26241, OA26241 +26242, OA26242 +26243, OA26243 +26244, OA26244 +26245, OA26245 +26246, OA26246 +26247, OA26247 +26248, OA26248 +26249, OA26249 +26250, OA26250 +26251, OA26251 +26252, OA26252 +26253, OA26253 +26254, OA26254 +26255, OA26255 +26256, OA26256 +26257, OA26257 +26258, OA26258 +26259, OA26259 +26260, OA26260 +26261, OA26261 +26262, OA26262 +26263, OA26263 +26264, OA26264 +26265, OA26265 +26266, OA26266 +26267, OA26267 +26268, OA26268 +26269, OA26269 +26270, OA26270 +26271, OA26271 +26272, OA26272 +26273, OA26273 +26274, OA26274 +26275, OA26275 +26276, OA26276 +26277, OA26277 +26278, OA26278 +26279, OA26279 +26280, OA26280 +26281, OA26281 +26282, OA26282 +26283, OA26283 +26284, OA26284 +26285, OA26285 +26286, OA26286 +26287, OA26287 +26288, OA26288 +26289, OA26289 +26290, OA26290 +26291, OA26291 +26292, OA26292 +26293, OA26293 +26294, OA26294 +26295, OA26295 +26296, OA26296 +26297, OA26297 +26298, OA26298 +26299, OA26299 +26300, OA26300 +26301, OA26301 +26302, OA26302 +26303, OA26303 +26304, OA26304 +26305, OA26305 +26306, OA26306 +26307, OA26307 +26308, OA26308 +26309, OA26309 +26310, OA26310 +26311, OA26311 +26312, OA26312 +26313, OA26313 +26314, OA26314 +26315, OA26315 +26316, OA26316 +26317, OA26317 +26318, OA26318 +26319, OA26319 +26320, OA26320 +26321, OA26321 +26322, OA26322 +26323, OA26323 +26324, OA26324 +26325, OA26325 +26326, OA26326 +26327, OA26327 +26328, OA26328 +26329, OA26329 +26330, OA26330 +26331, OA26331 +26332, OA26332 +26333, OA26333 +26334, OA26334 +26335, OA26335 +26336, OA26336 +26337, OA26337 +26338, OA26338 +26339, OA26339 +26340, OA26340 +26341, OA26341 +26342, OA26342 +26343, OA26343 +26344, OA26344 +26345, OA26345 +26346, OA26346 +26347, OA26347 +26348, OA26348 +26349, OA26349 +26350, OA26350 +26351, OA26351 +26352, OA26352 +26353, OA26353 +26354, OA26354 +26355, OA26355 +26356, OA26356 +26357, OA26357 +26358, OA26358 +26359, OA26359 +26360, OA26360 +26361, OA26361 +26362, OA26362 +26363, OA26363 +26364, OA26364 +26365, OA26365 +26366, OA26366 +26367, OA26367 +26368, OA26368 +26369, OA26369 +26370, OA26370 +26371, OA26371 +26372, OA26372 +26373, OA26373 +26374, OA26374 +26375, OA26375 +26376, OA26376 +26377, OA26377 +26378, OA26378 +26379, OA26379 +26380, OA26380 +26381, OA26381 +26382, OA26382 +26383, OA26383 +26384, OA26384 +26385, OA26385 +26386, OA26386 +26387, OA26387 +26388, OA26388 +26389, OA26389 +26390, OA26390 +26391, OA26391 +26392, OA26392 +26393, OA26393 +26394, OA26394 +26395, OA26395 +26396, OA26396 +26397, OA26397 +26398, OA26398 +26399, OA26399 +26400, OA26400 +26401, OA26401 +26402, OA26402 +26403, OA26403 +26404, OA26404 +26405, OA26405 +26406, OA26406 +26407, OA26407 +26408, OA26408 +26409, OA26409 +26410, OA26410 +26411, OA26411 +26412, OA26412 +26413, OA26413 +26414, OA26414 +26415, OA26415 +26416, OA26416 +26417, OA26417 +26418, OA26418 +26419, OA26419 +26420, OA26420 +26421, OA26421 +26422, OA26422 +26423, OA26423 +26424, OA26424 +26425, OA26425 +26426, OA26426 +26427, OA26427 +26428, OA26428 +26429, OA26429 +26430, OA26430 +26431, OA26431 +26432, OA26432 +26433, OA26433 +26434, OA26434 +26435, OA26435 +26436, OA26436 +26437, OA26437 +26438, OA26438 +26439, OA26439 +26440, OA26440 +26441, OA26441 +26442, OA26442 +26443, OA26443 +26444, OA26444 +26445, OA26445 +26446, OA26446 +26447, OA26447 +26448, OA26448 +26449, OA26449 +26450, OA26450 +26451, OA26451 +26452, OA26452 +26453, OA26453 +26454, OA26454 +26455, OA26455 +26456, OA26456 +26457, OA26457 +26458, OA26458 +26459, OA26459 +26460, OA26460 +26461, OA26461 +26462, OA26462 +26463, OA26463 +26464, OA26464 +26465, OA26465 +26466, OA26466 +26467, OA26467 +26468, OA26468 +26469, OA26469 +26470, OA26470 +26471, OA26471 +26472, OA26472 +26473, OA26473 +26474, OA26474 +26475, OA26475 +26476, OA26476 +26477, OA26477 +26478, OA26478 +26479, OA26479 +26480, OA26480 +26481, OA26481 +26482, OA26482 +26483, OA26483 +26484, OA26484 +26485, OA26485 +26486, OA26486 +26487, OA26487 +26488, OA26488 +26489, OA26489 +26490, OA26490 +26491, OA26491 +26492, OA26492 +26493, OA26493 +26494, OA26494 +26495, OA26495 +26496, OA26496 +26497, OA26497 +26498, OA26498 +26499, OA26499 +26500, OA26500 +26501, OA26501 +26502, OA26502 +26503, OA26503 +26504, OA26504 +26505, OA26505 +26506, OA26506 +26507, OA26507 +26508, OA26508 +26509, OA26509 +26510, OA26510 +26511, OA26511 +26512, OA26512 +26513, OA26513 +26514, OA26514 +26515, OA26515 +26516, OA26516 +26517, OA26517 +26518, OA26518 +26519, OA26519 +26520, OA26520 +26521, OA26521 +26522, OA26522 +26523, OA26523 +26524, OA26524 +26525, OA26525 +26526, OA26526 +26527, OA26527 +26528, OA26528 +26529, OA26529 +26530, OA26530 +26531, OA26531 +26532, OA26532 +26533, OA26533 +26534, OA26534 +26535, OA26535 +26536, OA26536 +26537, OA26537 +26538, OA26538 +26539, OA26539 +26540, OA26540 +26541, OA26541 +26542, OA26542 +26543, OA26543 +26544, OA26544 +26545, OA26545 +26546, OA26546 +26547, OA26547 +26548, OA26548 +26549, OA26549 +26550, OA26550 +26551, OA26551 +26552, OA26552 +26553, OA26553 +26554, OA26554 +26555, OA26555 +26556, OA26556 +26557, OA26557 +26558, OA26558 +26559, OA26559 +26560, OA26560 +26561, OA26561 +26562, OA26562 +26563, OA26563 +26564, OA26564 +26565, OA26565 +26566, OA26566 +26567, OA26567 +26568, OA26568 +26569, OA26569 +26570, OA26570 +26571, OA26571 +26572, OA26572 +26573, OA26573 +26574, OA26574 +26575, OA26575 +26576, OA26576 +26577, OA26577 +26578, OA26578 +26579, OA26579 +26580, OA26580 +26581, OA26581 +26582, OA26582 +26583, OA26583 +26584, OA26584 +26585, OA26585 +26586, OA26586 +26587, OA26587 +26588, OA26588 +26589, OA26589 +26590, OA26590 +26591, OA26591 +26592, OA26592 +26593, OA26593 +26594, OA26594 +26595, OA26595 +26596, OA26596 +26597, OA26597 +26598, OA26598 +26599, OA26599 +26600, OA26600 +26601, OA26601 +26602, OA26602 +26603, OA26603 +26604, OA26604 +26605, OA26605 +26606, OA26606 +26607, OA26607 +26608, OA26608 +26609, OA26609 +26610, OA26610 +26611, OA26611 +26612, OA26612 +26613, OA26613 +26614, OA26614 +26615, OA26615 +26616, OA26616 +26617, OA26617 +26618, OA26618 +26619, OA26619 +26620, OA26620 +26621, OA26621 +26622, OA26622 +26623, OA26623 +26624, OA26624 +26625, OA26625 +26626, OA26626 +26627, OA26627 +26628, OA26628 +26629, OA26629 +26630, OA26630 +26631, OA26631 +26632, OA26632 +26633, OA26633 +26634, OA26634 +26635, OA26635 +26636, OA26636 +26637, OA26637 +26638, OA26638 +26639, OA26639 +26640, OA26640 +26641, OA26641 +26642, OA26642 +26643, OA26643 +26644, OA26644 +26645, OA26645 +26646, OA26646 +26647, OA26647 +26648, OA26648 +26649, OA26649 +26650, OA26650 +26651, OA26651 +26652, OA26652 +26653, OA26653 +26654, OA26654 +26655, OA26655 +26656, OA26656 +26657, OA26657 +26658, OA26658 +26659, OA26659 +26660, OA26660 +26661, OA26661 +26662, OA26662 +26663, OA26663 +26664, OA26664 +26665, OA26665 +26666, OA26666 +26667, OA26667 +26668, OA26668 +26669, OA26669 +26670, OA26670 +26671, OA26671 +26672, OA26672 +26673, OA26673 +26674, OA26674 +26675, OA26675 +26676, OA26676 +26677, OA26677 +26678, OA26678 +26679, OA26679 +26680, OA26680 +26681, OA26681 +26682, OA26682 +26683, OA26683 +26684, OA26684 +26685, OA26685 +26686, OA26686 +26687, OA26687 +26688, OA26688 +26689, OA26689 +26690, OA26690 +26691, OA26691 +26692, OA26692 +26693, OA26693 +26694, OA26694 +26695, OA26695 +26696, OA26696 +26697, OA26697 +26698, OA26698 +26699, OA26699 +26700, OA26700 +26701, OA26701 +26702, OA26702 +26703, OA26703 +26704, OA26704 +26705, OA26705 +26706, OA26706 +26707, OA26707 +26708, OA26708 +26709, OA26709 +26710, OA26710 +26711, OA26711 +26712, OA26712 +26713, OA26713 +26714, OA26714 +26715, OA26715 +26716, OA26716 +26717, OA26717 +26718, OA26718 +26719, OA26719 +26720, OA26720 +26721, OA26721 +26722, OA26722 +26723, OA26723 +26724, OA26724 +26725, OA26725 +26726, OA26726 +26727, OA26727 +26728, OA26728 +26729, OA26729 +26730, OA26730 +26731, OA26731 +26732, OA26732 +26733, OA26733 +26734, OA26734 +26735, OA26735 +26736, OA26736 +26737, OA26737 +26738, OA26738 +26739, OA26739 +26740, OA26740 +26741, OA26741 +26742, OA26742 +26743, OA26743 +26744, OA26744 +26745, OA26745 +26746, OA26746 +26747, OA26747 +26748, OA26748 +26749, OA26749 +26750, OA26750 +26751, OA26751 +26752, OA26752 +26753, OA26753 +26754, OA26754 +26755, OA26755 +26756, OA26756 +26757, OA26757 +26758, OA26758 +26759, OA26759 +26760, OA26760 +26761, OA26761 +26762, OA26762 +26763, OA26763 +26764, OA26764 +26765, OA26765 +26766, OA26766 +26767, OA26767 +26768, OA26768 +26769, OA26769 +26770, OA26770 +26771, OA26771 +26772, OA26772 +26773, OA26773 +26774, OA26774 +26775, OA26775 +26776, OA26776 +26777, OA26777 +26778, OA26778 +26779, OA26779 +26780, OA26780 +26781, OA26781 +26782, OA26782 +26783, OA26783 +26784, OA26784 +26785, OA26785 +26786, OA26786 +26787, OA26787 +26788, OA26788 +26789, OA26789 +26790, OA26790 +26791, OA26791 +26792, OA26792 +26793, OA26793 +26794, OA26794 +26795, OA26795 +26796, OA26796 +26797, OA26797 +26798, OA26798 +26799, OA26799 +26800, OA26800 +26801, OA26801 +26802, OA26802 +26803, OA26803 +26804, OA26804 +26805, OA26805 +26806, OA26806 +26807, OA26807 +26808, OA26808 +26809, OA26809 +26810, OA26810 +26811, OA26811 +26812, OA26812 +26813, OA26813 +26814, OA26814 +26815, OA26815 +26816, OA26816 +26817, OA26817 +26818, OA26818 +26819, OA26819 +26820, OA26820 +26821, OA26821 +26822, OA26822 +26823, OA26823 +26824, OA26824 +26825, OA26825 +26826, OA26826 +26827, OA26827 +26828, OA26828 +26829, OA26829 +26830, OA26830 +26831, OA26831 +26832, OA26832 +26833, OA26833 +26834, OA26834 +26835, OA26835 +26836, OA26836 +26837, OA26837 +26838, OA26838 +26839, OA26839 +26840, OA26840 +26841, OA26841 +26842, OA26842 +26843, OA26843 +26844, OA26844 +26845, OA26845 +26846, OA26846 +26847, OA26847 +26848, OA26848 +26849, OA26849 +26850, OA26850 +26851, OA26851 +26852, OA26852 +26853, OA26853 +26854, OA26854 +26855, OA26855 +26856, OA26856 +26857, OA26857 +26858, OA26858 +26859, OA26859 +26860, OA26860 +26861, OA26861 +26862, OA26862 +26863, OA26863 +26864, OA26864 +26865, OA26865 +26866, OA26866 +26867, OA26867 +26868, OA26868 +26869, OA26869 +26870, OA26870 +26871, OA26871 +26872, OA26872 +26873, OA26873 +26874, OA26874 +26875, OA26875 +26876, OA26876 +26877, OA26877 +26878, OA26878 +26879, OA26879 +26880, OA26880 +26881, OA26881 +26882, OA26882 +26883, OA26883 +26884, OA26884 +26885, OA26885 +26886, OA26886 +26887, OA26887 +26888, OA26888 +26889, OA26889 +26890, OA26890 +26891, OA26891 +26892, OA26892 +26893, OA26893 +26894, OA26894 +26895, OA26895 +26896, OA26896 +26897, OA26897 +26898, OA26898 +26899, OA26899 +26900, OA26900 +26901, OA26901 +26902, OA26902 +26903, OA26903 +26904, OA26904 +26905, OA26905 +26906, OA26906 +26907, OA26907 +26908, OA26908 +26909, OA26909 +26910, OA26910 +26911, OA26911 +26912, OA26912 +26913, OA26913 +26914, OA26914 +26915, OA26915 +26916, OA26916 +26917, OA26917 +26918, OA26918 +26919, OA26919 +26920, OA26920 +26921, OA26921 +26922, OA26922 +26923, OA26923 +26924, OA26924 +26925, OA26925 +26926, OA26926 +26927, OA26927 +26928, OA26928 +26929, OA26929 +26930, OA26930 +26931, OA26931 +26932, OA26932 +26933, OA26933 +26934, OA26934 +26935, OA26935 +26936, OA26936 +26937, OA26937 +26938, OA26938 +26939, OA26939 +26940, OA26940 +26941, OA26941 +26942, OA26942 +26943, OA26943 +26944, OA26944 +26945, OA26945 +26946, OA26946 +26947, OA26947 +26948, OA26948 +26949, OA26949 +26950, OA26950 +26951, OA26951 +26952, OA26952 +26953, OA26953 +26954, OA26954 +26955, OA26955 +26956, OA26956 +26957, OA26957 +26958, OA26958 +26959, OA26959 +26960, OA26960 +26961, OA26961 +26962, OA26962 +26963, OA26963 +26964, OA26964 +26965, OA26965 +26966, OA26966 +26967, OA26967 +26968, OA26968 +26969, OA26969 +26970, OA26970 +26971, OA26971 +26972, OA26972 +26973, OA26973 +26974, OA26974 +26975, OA26975 +26976, OA26976 +26977, OA26977 +26978, OA26978 +26979, OA26979 +26980, OA26980 +26981, OA26981 +26982, OA26982 +26983, OA26983 +26984, OA26984 +26985, OA26985 +26986, OA26986 +26987, OA26987 +26988, OA26988 +26989, OA26989 +26990, OA26990 +26991, OA26991 +26992, OA26992 +26993, OA26993 +26994, OA26994 +26995, OA26995 +26996, OA26996 +26997, OA26997 +26998, OA26998 +26999, OA26999 +27000, OA27000 +27001, OA27001 +27002, OA27002 +27003, OA27003 +27004, OA27004 +27005, OA27005 +27006, OA27006 +27007, OA27007 +27008, OA27008 +27009, OA27009 +27010, OA27010 +27011, OA27011 +27012, OA27012 +27013, OA27013 +27014, OA27014 +27015, OA27015 +27016, OA27016 +27017, OA27017 +27018, OA27018 +27019, OA27019 +27020, OA27020 +27021, OA27021 +27022, OA27022 +27023, OA27023 +27024, OA27024 +27025, OA27025 +27026, OA27026 +27027, OA27027 +27028, OA27028 +27029, OA27029 +27030, OA27030 +27031, OA27031 +27032, OA27032 +27033, OA27033 +27034, OA27034 +27035, OA27035 +27036, OA27036 +27037, OA27037 +27038, OA27038 +27039, OA27039 +27040, OA27040 +27041, OA27041 +27042, OA27042 +27043, OA27043 +27044, OA27044 +27045, OA27045 +27046, OA27046 +27047, OA27047 +27048, OA27048 +27049, OA27049 +27050, OA27050 +27051, OA27051 +27052, OA27052 +27053, OA27053 +27054, OA27054 +27055, OA27055 +27056, OA27056 +27057, OA27057 +27058, OA27058 +27059, OA27059 +27060, OA27060 +27061, OA27061 +27062, OA27062 +27063, OA27063 +27064, OA27064 +27065, OA27065 +27066, OA27066 +27067, OA27067 +27068, OA27068 +27069, OA27069 +27070, OA27070 +27071, OA27071 +27072, OA27072 +27073, OA27073 +27074, OA27074 +27075, OA27075 +27076, OA27076 +27077, OA27077 +27078, OA27078 +27079, OA27079 +27080, OA27080 +27081, OA27081 +27082, OA27082 +27083, OA27083 +27084, OA27084 +27085, OA27085 +27086, OA27086 +27087, OA27087 +27088, OA27088 +27089, OA27089 +27090, OA27090 +27091, OA27091 +27092, OA27092 +27093, OA27093 +27094, OA27094 +27095, OA27095 +27096, OA27096 +27097, OA27097 +27098, OA27098 +27099, OA27099 +27100, OA27100 +27101, OA27101 +27102, OA27102 +27103, OA27103 +27104, OA27104 +27105, OA27105 +27106, OA27106 +27107, OA27107 +27108, OA27108 +27109, OA27109 +27110, OA27110 +27111, OA27111 +27112, OA27112 +27113, OA27113 +27114, OA27114 +27115, OA27115 +27116, OA27116 +27117, OA27117 +27118, OA27118 +27119, OA27119 +27120, OA27120 +27121, OA27121 +27122, OA27122 +27123, OA27123 +27124, OA27124 +27125, OA27125 +27126, OA27126 +27127, OA27127 +27128, OA27128 +27129, OA27129 +27130, OA27130 +27131, OA27131 +27132, OA27132 +27133, OA27133 +27134, OA27134 +27135, OA27135 +27136, OA27136 +27137, OA27137 +27138, OA27138 +27139, OA27139 +27140, OA27140 +27141, OA27141 +27142, OA27142 +27143, OA27143 +27144, OA27144 +27145, OA27145 +27146, OA27146 +27147, OA27147 +27148, OA27148 +27149, OA27149 +27150, OA27150 +27151, OA27151 +27152, OA27152 +27153, OA27153 +27154, OA27154 +27155, OA27155 +27156, OA27156 +27157, OA27157 +27158, OA27158 +27159, OA27159 +27160, OA27160 +27161, OA27161 +27162, OA27162 +27163, OA27163 +27164, OA27164 +27165, OA27165 +27166, OA27166 +27167, OA27167 +27168, OA27168 +27169, OA27169 +27170, OA27170 +27171, OA27171 +27172, OA27172 +27173, OA27173 +27174, OA27174 +27175, OA27175 +27176, OA27176 +27177, OA27177 +27178, OA27178 +27179, OA27179 +27180, OA27180 +27181, OA27181 +27182, OA27182 +27183, OA27183 +27184, OA27184 +27185, OA27185 +27186, OA27186 +27187, OA27187 +27188, OA27188 +27189, OA27189 +27190, OA27190 +27191, OA27191 +27192, OA27192 +27193, OA27193 +27194, OA27194 +27195, OA27195 +27196, OA27196 +27197, OA27197 +27198, OA27198 +27199, OA27199 +27200, OA27200 +27201, OA27201 +27202, OA27202 +27203, OA27203 +27204, OA27204 +27205, OA27205 +27206, OA27206 +27207, OA27207 +27208, OA27208 +27209, OA27209 +27210, OA27210 +27211, OA27211 +27212, OA27212 +27213, OA27213 +27214, OA27214 +27215, OA27215 +27216, OA27216 +27217, OA27217 +27218, OA27218 +27219, OA27219 +27220, OA27220 +27221, OA27221 +27222, OA27222 +27223, OA27223 +27224, OA27224 +27225, OA27225 +27226, OA27226 +27227, OA27227 +27228, OA27228 +27229, OA27229 +27230, OA27230 +27231, OA27231 +27232, OA27232 +27233, OA27233 +27234, OA27234 +27235, OA27235 +27236, OA27236 +27237, OA27237 +27238, OA27238 +27239, OA27239 +27240, OA27240 +27241, OA27241 +27242, OA27242 +27243, OA27243 +27244, OA27244 +27245, OA27245 +27246, OA27246 +27247, OA27247 +27248, OA27248 +27249, OA27249 +27250, OA27250 +27251, OA27251 +27252, OA27252 +27253, OA27253 +27254, OA27254 +27255, OA27255 +27256, OA27256 +27257, OA27257 +27258, OA27258 +27259, OA27259 +27260, OA27260 +27261, OA27261 +27262, OA27262 +27263, OA27263 +27264, OA27264 +27265, OA27265 +27266, OA27266 +27267, OA27267 +27268, OA27268 +27269, OA27269 +27270, OA27270 +27271, OA27271 +27272, OA27272 +27273, OA27273 +27274, OA27274 +27275, OA27275 +27276, OA27276 +27277, OA27277 +27278, OA27278 +27279, OA27279 +27280, OA27280 +27281, OA27281 +27282, OA27282 +27283, OA27283 +27284, OA27284 +27285, OA27285 +27286, OA27286 +27287, OA27287 +27288, OA27288 +27289, OA27289 +27290, OA27290 +27291, OA27291 +27292, OA27292 +27293, OA27293 +27294, OA27294 +27295, OA27295 +27296, OA27296 +27297, OA27297 +27298, OA27298 +27299, OA27299 +27300, OA27300 +27301, OA27301 +27302, OA27302 +27303, OA27303 +27304, OA27304 +27305, OA27305 +27306, OA27306 +27307, OA27307 +27308, OA27308 +27309, OA27309 +27310, OA27310 +27311, OA27311 +27312, OA27312 +27313, OA27313 +27314, OA27314 +27315, OA27315 +27316, OA27316 +27317, OA27317 +27318, OA27318 +27319, OA27319 +27320, OA27320 +27321, OA27321 +27322, OA27322 +27323, OA27323 +27324, OA27324 +27325, OA27325 +27326, OA27326 +27327, OA27327 +27328, OA27328 +27329, OA27329 +27330, OA27330 +27331, OA27331 +27332, OA27332 +27333, OA27333 +27334, OA27334 +27335, OA27335 +27336, OA27336 +27337, OA27337 +27338, OA27338 +27339, OA27339 +27340, OA27340 +27341, OA27341 +27342, OA27342 +27343, OA27343 +27344, OA27344 +27345, OA27345 +27346, OA27346 +27347, OA27347 +27348, OA27348 +27349, OA27349 +27350, OA27350 +27351, OA27351 +27352, OA27352 +27353, OA27353 +27354, OA27354 +27355, OA27355 +27356, OA27356 +27357, OA27357 +27358, OA27358 +27359, OA27359 +27360, OA27360 +27361, OA27361 +27362, OA27362 +27363, OA27363 +27364, OA27364 +27365, OA27365 +27366, OA27366 +27367, OA27367 +27368, OA27368 +27369, OA27369 +27370, OA27370 +27371, OA27371 +27372, OA27372 +27373, OA27373 +27374, OA27374 +27375, OA27375 +27376, OA27376 +27377, OA27377 +27378, OA27378 +27379, OA27379 +27380, OA27380 +27381, OA27381 +27382, OA27382 +27383, OA27383 +27384, OA27384 +27385, OA27385 +27386, OA27386 +27387, OA27387 +27388, OA27388 +27389, OA27389 +27390, OA27390 +27391, OA27391 +27392, OA27392 +27393, OA27393 +27394, OA27394 +27395, OA27395 +27396, OA27396 +27397, OA27397 +27398, OA27398 +27399, OA27399 +27400, OA27400 +27401, OA27401 +27402, OA27402 +27403, OA27403 +27404, OA27404 +27405, OA27405 +27406, OA27406 +27407, OA27407 +27408, OA27408 +27409, OA27409 +27410, OA27410 +27411, OA27411 +27412, OA27412 +27413, OA27413 +27414, OA27414 +27415, OA27415 +27416, OA27416 +27417, OA27417 +27418, OA27418 +27419, OA27419 +27420, OA27420 +27421, OA27421 +27422, OA27422 +27423, OA27423 +27424, OA27424 +27425, OA27425 +27426, OA27426 +27427, OA27427 +27428, OA27428 +27429, OA27429 +27430, OA27430 +27431, OA27431 +27432, OA27432 +27433, OA27433 +27434, OA27434 +27435, OA27435 +27436, OA27436 +27437, OA27437 +27438, OA27438 +27439, OA27439 +27440, OA27440 +27441, OA27441 +27442, OA27442 +27443, OA27443 +27444, OA27444 +27445, OA27445 +27446, OA27446 +27447, OA27447 +27448, OA27448 +27449, OA27449 +27450, OA27450 +27451, OA27451 +27452, OA27452 +27453, OA27453 +27454, OA27454 +27455, OA27455 +27456, OA27456 +27457, OA27457 +27458, OA27458 +27459, OA27459 +27460, OA27460 +27461, OA27461 +27462, OA27462 +27463, OA27463 +27464, OA27464 +27465, OA27465 +27466, OA27466 +27467, OA27467 +27468, OA27468 +27469, OA27469 +27470, OA27470 +27471, OA27471 +27472, OA27472 +27473, OA27473 +27474, OA27474 +27475, OA27475 +27476, OA27476 +27477, OA27477 +27478, OA27478 +27479, OA27479 +27480, OA27480 +27481, OA27481 +27482, OA27482 +27483, OA27483 +27484, OA27484 +27485, OA27485 +27486, OA27486 +27487, OA27487 +27488, OA27488 +27489, OA27489 +27490, OA27490 +27491, OA27491 +27492, OA27492 +27493, OA27493 +27494, OA27494 +27495, OA27495 +27496, OA27496 +27497, OA27497 +27498, OA27498 +27499, OA27499 +27500, OA27500 +27501, OA27501 +27502, OA27502 +27503, OA27503 +27504, OA27504 +27505, OA27505 +27506, OA27506 +27507, OA27507 +27508, OA27508 +27509, OA27509 +27510, OA27510 +27511, OA27511 +27512, OA27512 +27513, OA27513 +27514, OA27514 +27515, OA27515 +27516, OA27516 +27517, OA27517 +27518, OA27518 +27519, OA27519 +27520, OA27520 +27521, OA27521 +27522, OA27522 +27523, OA27523 +27524, OA27524 +27525, OA27525 +27526, OA27526 +27527, OA27527 +27528, OA27528 +27529, OA27529 +27530, OA27530 +27531, OA27531 +27532, OA27532 +27533, OA27533 +27534, OA27534 +27535, OA27535 +27536, OA27536 +27537, OA27537 +27538, OA27538 +27539, OA27539 +27540, OA27540 +27541, OA27541 +27542, OA27542 +27543, OA27543 +27544, OA27544 +27545, OA27545 +27546, OA27546 +27547, OA27547 +27548, OA27548 +27549, OA27549 +27550, OA27550 +27551, OA27551 +27552, OA27552 +27553, OA27553 +27554, OA27554 +27555, OA27555 +27556, OA27556 +27557, OA27557 +27558, OA27558 +27559, OA27559 +27560, OA27560 +27561, OA27561 +27562, OA27562 +27563, OA27563 +27564, OA27564 +27565, OA27565 +27566, OA27566 +27567, OA27567 +27568, OA27568 +27569, OA27569 +27570, OA27570 +27571, OA27571 +27572, OA27572 +27573, OA27573 +27574, OA27574 +27575, OA27575 +27576, OA27576 +27577, OA27577 +27578, OA27578 +27579, OA27579 +27580, OA27580 +27581, OA27581 +27582, OA27582 +27583, OA27583 +27584, OA27584 +27585, OA27585 +27586, OA27586 +27587, OA27587 +27588, OA27588 +27589, OA27589 +27590, OA27590 +27591, OA27591 +27592, OA27592 +27593, OA27593 +27594, OA27594 +27595, OA27595 +27596, OA27596 +27597, OA27597 +27598, OA27598 +27599, OA27599 +27600, OA27600 +27601, OA27601 +27602, OA27602 +27603, OA27603 +27604, OA27604 +27605, OA27605 +27606, OA27606 +27607, OA27607 +27608, OA27608 +27609, OA27609 +27610, OA27610 +27611, OA27611 +27612, OA27612 +27613, OA27613 +27614, OA27614 +27615, OA27615 +27616, OA27616 +27617, OA27617 +27618, OA27618 +27619, OA27619 +27620, OA27620 +27621, OA27621 +27622, OA27622 +27623, OA27623 +27624, OA27624 +27625, OA27625 +27626, OA27626 +27627, OA27627 +27628, OA27628 +27629, OA27629 +27630, OA27630 +27631, OA27631 +27632, OA27632 +27633, OA27633 +27634, OA27634 +27635, OA27635 +27636, OA27636 +27637, OA27637 +27638, OA27638 +27639, OA27639 +27640, OA27640 +27641, OA27641 +27642, OA27642 +27643, OA27643 +27644, OA27644 +27645, OA27645 +27646, OA27646 +27647, OA27647 +27648, OA27648 +27649, OA27649 +27650, OA27650 +27651, OA27651 +27652, OA27652 +27653, OA27653 +27654, OA27654 +27655, OA27655 +27656, OA27656 +27657, OA27657 +27658, OA27658 +27659, OA27659 +27660, OA27660 +27661, OA27661 +27662, OA27662 +27663, OA27663 +27664, OA27664 +27665, OA27665 +27666, OA27666 +27667, OA27667 +27668, OA27668 +27669, OA27669 +27670, OA27670 +27671, OA27671 +27672, OA27672 +27673, OA27673 +27674, OA27674 +27675, OA27675 +27676, OA27676 +27677, OA27677 +27678, OA27678 +27679, OA27679 +27680, OA27680 +27681, OA27681 +27682, OA27682 +27683, OA27683 +27684, OA27684 +27685, OA27685 +27686, OA27686 +27687, OA27687 +27688, OA27688 +27689, OA27689 +27690, OA27690 +27691, OA27691 +27692, OA27692 +27693, OA27693 +27694, OA27694 +27695, OA27695 +27696, OA27696 +27697, OA27697 +27698, OA27698 +27699, OA27699 +27700, OA27700 +27701, OA27701 +27702, OA27702 +27703, OA27703 +27704, OA27704 +27705, OA27705 +27706, OA27706 +27707, OA27707 +27708, OA27708 +27709, OA27709 +27710, OA27710 +27711, OA27711 +27712, OA27712 +27713, OA27713 +27714, OA27714 +27715, OA27715 +27716, OA27716 +27717, OA27717 +27718, OA27718 +27719, OA27719 +27720, OA27720 +27721, OA27721 +27722, OA27722 +27723, OA27723 +27724, OA27724 +27725, OA27725 +27726, OA27726 +27727, OA27727 +27728, OA27728 +27729, OA27729 +27730, OA27730 +27731, OA27731 +27732, OA27732 +27733, OA27733 +27734, OA27734 +27735, OA27735 +27736, OA27736 +27737, OA27737 +27738, OA27738 +27739, OA27739 +27740, OA27740 +27741, OA27741 +27742, OA27742 +27743, OA27743 +27744, OA27744 +27745, OA27745 +27746, OA27746 +27747, OA27747 +27748, OA27748 +27749, OA27749 +27750, OA27750 +27751, OA27751 +27752, OA27752 +27753, OA27753 +27754, OA27754 +27755, OA27755 +27756, OA27756 +27757, OA27757 +27758, OA27758 +27759, OA27759 +27760, OA27760 +27761, OA27761 +27762, OA27762 +27763, OA27763 +27764, OA27764 +27765, OA27765 +27766, OA27766 +27767, OA27767 +27768, OA27768 +27769, OA27769 +27770, OA27770 +27771, OA27771 +27772, OA27772 +27773, OA27773 +27774, OA27774 +27775, OA27775 +27776, OA27776 +27777, OA27777 +27778, OA27778 +27779, OA27779 +27780, OA27780 +27781, OA27781 +27782, OA27782 +27783, OA27783 +27784, OA27784 +27785, OA27785 +27786, OA27786 +27787, OA27787 +27788, OA27788 +27789, OA27789 +27790, OA27790 +27791, OA27791 +27792, OA27792 +27793, OA27793 +27794, OA27794 +27795, OA27795 +27796, OA27796 +27797, OA27797 +27798, OA27798 +27799, OA27799 +27800, OA27800 +27801, OA27801 +27802, OA27802 +27803, OA27803 +27804, OA27804 +27805, OA27805 +27806, OA27806 +27807, OA27807 +27808, OA27808 +27809, OA27809 +27810, OA27810 +27811, OA27811 +27812, OA27812 +27813, OA27813 +27814, OA27814 +27815, OA27815 +27816, OA27816 +27817, OA27817 +27818, OA27818 +27819, OA27819 +27820, OA27820 +27821, OA27821 +27822, OA27822 +27823, OA27823 +27824, OA27824 +27825, OA27825 +27826, OA27826 +27827, OA27827 +27828, OA27828 +27829, OA27829 +27830, OA27830 +27831, OA27831 +27832, OA27832 +27833, OA27833 +27834, OA27834 +27835, OA27835 +27836, OA27836 +27837, OA27837 +27838, OA27838 +27839, OA27839 +27840, OA27840 +27841, OA27841 +27842, OA27842 +27843, OA27843 +27844, OA27844 +27845, OA27845 +27846, OA27846 +27847, OA27847 +27848, OA27848 +27849, OA27849 +27850, OA27850 +27851, OA27851 +27852, OA27852 +27853, OA27853 +27854, OA27854 +27855, OA27855 +27856, OA27856 +27857, OA27857 +27858, OA27858 +27859, OA27859 +27860, OA27860 +27861, OA27861 +27862, OA27862 +27863, OA27863 +27864, OA27864 +27865, OA27865 +27866, OA27866 +27867, OA27867 +27868, OA27868 +27869, OA27869 +27870, OA27870 +27871, OA27871 +27872, OA27872 +27873, OA27873 +27874, OA27874 +27875, OA27875 +27876, OA27876 +27877, OA27877 +27878, OA27878 +27879, OA27879 +27880, OA27880 +27881, OA27881 +27882, OA27882 +27883, OA27883 +27884, OA27884 +27885, OA27885 +27886, OA27886 +27887, OA27887 +27888, OA27888 +27889, OA27889 +27890, OA27890 +27891, OA27891 +27892, OA27892 +27893, OA27893 +27894, OA27894 +27895, OA27895 +27896, OA27896 +27897, OA27897 +27898, OA27898 +27899, OA27899 +27900, OA27900 +27901, OA27901 +27902, OA27902 +27903, OA27903 +27904, OA27904 +27905, OA27905 +27906, OA27906 +27907, OA27907 +27908, OA27908 +27909, OA27909 +27910, OA27910 +27911, OA27911 +27912, OA27912 +27913, OA27913 +27914, OA27914 +27915, OA27915 +27916, OA27916 +27917, OA27917 +27918, OA27918 +27919, OA27919 +27920, OA27920 +27921, OA27921 +27922, OA27922 +27923, OA27923 +27924, OA27924 +27925, OA27925 +27926, OA27926 +27927, OA27927 +27928, OA27928 +27929, OA27929 +27930, OA27930 +27931, OA27931 +27932, OA27932 +27933, OA27933 +27934, OA27934 +27935, OA27935 +27936, OA27936 +27937, OA27937 +27938, OA27938 +27939, OA27939 +27940, OA27940 +27941, OA27941 +27942, OA27942 +27943, OA27943 +27944, OA27944 +27945, OA27945 +27946, OA27946 +27947, OA27947 +27948, OA27948 +27949, OA27949 +27950, OA27950 +27951, OA27951 +27952, OA27952 +27953, OA27953 +27954, OA27954 +27955, OA27955 +27956, OA27956 +27957, OA27957 +27958, OA27958 +27959, OA27959 +27960, OA27960 +27961, OA27961 +27962, OA27962 +27963, OA27963 +27964, OA27964 +27965, OA27965 +27966, OA27966 +27967, OA27967 +27968, OA27968 +27969, OA27969 +27970, OA27970 +27971, OA27971 +27972, OA27972 +27973, OA27973 +27974, OA27974 +27975, OA27975 +27976, OA27976 +27977, OA27977 +27978, OA27978 +27979, OA27979 +27980, OA27980 +27981, OA27981 +27982, OA27982 +27983, OA27983 +27984, OA27984 +27985, OA27985 +27986, OA27986 +27987, OA27987 +27988, OA27988 +27989, OA27989 +27990, OA27990 +27991, OA27991 +27992, OA27992 +27993, OA27993 +27994, OA27994 +27995, OA27995 +27996, OA27996 +27997, OA27997 +27998, OA27998 +27999, OA27999 +28000, OA28000 +28001, OA28001 +28002, OA28002 +28003, OA28003 +28004, OA28004 +28005, OA28005 +28006, OA28006 +28007, OA28007 +28008, OA28008 +28009, OA28009 +28010, OA28010 +28011, OA28011 +28012, OA28012 +28013, OA28013 +28014, OA28014 +28015, OA28015 +28016, OA28016 +28017, OA28017 +28018, OA28018 +28019, OA28019 +28020, OA28020 +28021, OA28021 +28022, OA28022 +28023, OA28023 +28024, OA28024 +28025, OA28025 +28026, OA28026 +28027, OA28027 +28028, OA28028 +28029, OA28029 +28030, OA28030 +28031, OA28031 +28032, OA28032 +28033, OA28033 +28034, OA28034 +28035, OA28035 +28036, OA28036 +28037, OA28037 +28038, OA28038 +28039, OA28039 +28040, OA28040 +28041, OA28041 +28042, OA28042 +28043, OA28043 +28044, OA28044 +28045, OA28045 +28046, OA28046 +28047, OA28047 +28048, OA28048 +28049, OA28049 +28050, OA28050 +28051, OA28051 +28052, OA28052 +28053, OA28053 +28054, OA28054 +28055, OA28055 +28056, OA28056 +28057, OA28057 +28058, OA28058 +28059, OA28059 +28060, OA28060 +28061, OA28061 +28062, OA28062 +28063, OA28063 +28064, OA28064 +28065, OA28065 +28066, OA28066 +28067, OA28067 +28068, OA28068 +28069, OA28069 +28070, OA28070 +28071, OA28071 +28072, OA28072 +28073, OA28073 +28074, OA28074 +28075, OA28075 +28076, OA28076 +28077, OA28077 +28078, OA28078 +28079, OA28079 +28080, OA28080 +28081, OA28081 +28082, OA28082 +28083, OA28083 +28084, OA28084 +28085, OA28085 +28086, OA28086 +28087, OA28087 +28088, OA28088 +28089, OA28089 +28090, OA28090 +28091, OA28091 +28092, OA28092 +28093, OA28093 +28094, OA28094 +28095, OA28095 +28096, OA28096 +28097, OA28097 +28098, OA28098 +28099, OA28099 +28100, OA28100 +28101, OA28101 +28102, OA28102 +28103, OA28103 +28104, OA28104 +28105, OA28105 +28106, OA28106 +28107, OA28107 +28108, OA28108 +28109, OA28109 +28110, OA28110 +28111, OA28111 +28112, OA28112 +28113, OA28113 +28114, OA28114 +28115, OA28115 +28116, OA28116 +28117, OA28117 +28118, OA28118 +28119, OA28119 +28120, OA28120 +28121, OA28121 +28122, OA28122 +28123, OA28123 +28124, OA28124 +28125, OA28125 +28126, OA28126 +28127, OA28127 +28128, OA28128 +28129, OA28129 +28130, OA28130 +28131, OA28131 +28132, OA28132 +28133, OA28133 +28134, OA28134 +28135, OA28135 +28136, OA28136 +28137, OA28137 +28138, OA28138 +28139, OA28139 +28140, OA28140 +28141, OA28141 +28142, OA28142 +28143, OA28143 +28144, OA28144 +28145, OA28145 +28146, OA28146 +28147, OA28147 +28148, OA28148 +28149, OA28149 +28150, OA28150 +28151, OA28151 +28152, OA28152 +28153, OA28153 +28154, OA28154 +28155, OA28155 +28156, OA28156 +28157, OA28157 +28158, OA28158 +28159, OA28159 +28160, OA28160 +28161, OA28161 +28162, OA28162 +28163, OA28163 +28164, OA28164 +28165, OA28165 +28166, OA28166 +28167, OA28167 +28168, OA28168 +28169, OA28169 +28170, OA28170 +28171, OA28171 +28172, OA28172 +28173, OA28173 +28174, OA28174 +28175, OA28175 +28176, OA28176 +28177, OA28177 +28178, OA28178 +28179, OA28179 +28180, OA28180 +28181, OA28181 +28182, OA28182 +28183, OA28183 +28184, OA28184 +28185, OA28185 +28186, OA28186 +28187, OA28187 +28188, OA28188 +28189, OA28189 +28190, OA28190 +28191, OA28191 +28192, OA28192 +28193, OA28193 +28194, OA28194 +28195, OA28195 +28196, OA28196 +28197, OA28197 +28198, OA28198 +28199, OA28199 +28200, OA28200 +28201, OA28201 +28202, OA28202 +28203, OA28203 +28204, OA28204 +28205, OA28205 +28206, OA28206 +28207, OA28207 +28208, OA28208 +28209, OA28209 +28210, OA28210 +28211, OA28211 +28212, OA28212 +28213, OA28213 +28214, OA28214 +28215, OA28215 +28216, OA28216 +28217, OA28217 +28218, OA28218 +28219, OA28219 +28220, OA28220 +28221, OA28221 +28222, OA28222 +28223, OA28223 +28224, OA28224 +28225, OA28225 +28226, OA28226 +28227, OA28227 +28228, OA28228 +28229, OA28229 +28230, OA28230 +28231, OA28231 +28232, OA28232 +28233, OA28233 +28234, OA28234 +28235, OA28235 +28236, OA28236 +28237, OA28237 +28238, OA28238 +28239, OA28239 +28240, OA28240 +28241, OA28241 +28242, OA28242 +28243, OA28243 +28244, OA28244 +28245, OA28245 +28246, OA28246 +28247, OA28247 +28248, OA28248 +28249, OA28249 +28250, OA28250 +28251, OA28251 +28252, OA28252 +28253, OA28253 +28254, OA28254 +28255, OA28255 +28256, OA28256 +28257, OA28257 +28258, OA28258 +28259, OA28259 +28260, OA28260 +28261, OA28261 +28262, OA28262 +28263, OA28263 +28264, OA28264 +28265, OA28265 +28266, OA28266 +28267, OA28267 +28268, OA28268 +28269, OA28269 +28270, OA28270 +28271, OA28271 +28272, OA28272 +28273, OA28273 +28274, OA28274 +28275, OA28275 +28276, OA28276 +28277, OA28277 +28278, OA28278 +28279, OA28279 +28280, OA28280 +28281, OA28281 +28282, OA28282 +28283, OA28283 +28284, OA28284 +28285, OA28285 +28286, OA28286 +28287, OA28287 +28288, OA28288 +28289, OA28289 +28290, OA28290 +28291, OA28291 +28292, OA28292 +28293, OA28293 +28294, OA28294 +28295, OA28295 +28296, OA28296 +28297, OA28297 +28298, OA28298 +28299, OA28299 +28300, OA28300 +28301, OA28301 +28302, OA28302 +28303, OA28303 +28304, OA28304 +28305, OA28305 +28306, OA28306 +28307, OA28307 +28308, OA28308 +28309, OA28309 +28310, OA28310 +28311, OA28311 +28312, OA28312 +28313, OA28313 +28314, OA28314 +28315, OA28315 +28316, OA28316 +28317, OA28317 +28318, OA28318 +28319, OA28319 +28320, OA28320 +28321, OA28321 +28322, OA28322 +28323, OA28323 +28324, OA28324 +28325, OA28325 +28326, OA28326 +28327, OA28327 +28328, OA28328 +28329, OA28329 +28330, OA28330 +28331, OA28331 +28332, OA28332 +28333, OA28333 +28334, OA28334 +28335, OA28335 +28336, OA28336 +28337, OA28337 +28338, OA28338 +28339, OA28339 +28340, OA28340 +28341, OA28341 +28342, OA28342 +28343, OA28343 +28344, OA28344 +28345, OA28345 +28346, OA28346 +28347, OA28347 +28348, OA28348 +28349, OA28349 +28350, OA28350 +28351, OA28351 +28352, OA28352 +28353, OA28353 +28354, OA28354 +28355, OA28355 +28356, OA28356 +28357, OA28357 +28358, OA28358 +28359, OA28359 +28360, OA28360 +28361, OA28361 +28362, OA28362 +28363, OA28363 +28364, OA28364 +28365, OA28365 +28366, OA28366 +28367, OA28367 +28368, OA28368 +28369, OA28369 +28370, OA28370 +28371, OA28371 +28372, OA28372 +28373, OA28373 +28374, OA28374 +28375, OA28375 +28376, OA28376 +28377, OA28377 +28378, OA28378 +28379, OA28379 +28380, OA28380 +28381, OA28381 +28382, OA28382 +28383, OA28383 +28384, OA28384 +28385, OA28385 +28386, OA28386 +28387, OA28387 +28388, OA28388 +28389, OA28389 +28390, OA28390 +28391, OA28391 +28392, OA28392 +28393, OA28393 +28394, OA28394 +28395, OA28395 +28396, OA28396 +28397, OA28397 +28398, OA28398 +28399, OA28399 +28400, OA28400 +28401, OA28401 +28402, OA28402 +28403, OA28403 +28404, OA28404 +28405, OA28405 +28406, OA28406 +28407, OA28407 +28408, OA28408 +28409, OA28409 +28410, OA28410 +28411, OA28411 +28412, OA28412 +28413, OA28413 +28414, OA28414 +28415, OA28415 +28416, OA28416 +28417, OA28417 +28418, OA28418 +28419, OA28419 +28420, OA28420 +28421, OA28421 +28422, OA28422 +28423, OA28423 +28424, OA28424 +28425, OA28425 +28426, OA28426 +28427, OA28427 +28428, OA28428 +28429, OA28429 +28430, OA28430 +28431, OA28431 +28432, OA28432 +28433, OA28433 +28434, OA28434 +28435, OA28435 +28436, OA28436 +28437, OA28437 +28438, OA28438 +28439, OA28439 +28440, OA28440 +28441, OA28441 +28442, OA28442 +28443, OA28443 +28444, OA28444 +28445, OA28445 +28446, OA28446 +28447, OA28447 +28448, OA28448 +28449, OA28449 +28450, OA28450 +28451, OA28451 +28452, OA28452 +28453, OA28453 +28454, OA28454 +28455, OA28455 +28456, OA28456 +28457, OA28457 +28458, OA28458 +28459, OA28459 +28460, OA28460 +28461, OA28461 +28462, OA28462 +28463, OA28463 +28464, OA28464 +28465, OA28465 +28466, OA28466 +28467, OA28467 +28468, OA28468 +28469, OA28469 +28470, OA28470 +28471, OA28471 +28472, OA28472 +28473, OA28473 +28474, OA28474 +28475, OA28475 +28476, OA28476 +28477, OA28477 +28478, OA28478 +28479, OA28479 +28480, OA28480 +28481, OA28481 +28482, OA28482 +28483, OA28483 +28484, OA28484 +28485, OA28485 +28486, OA28486 +28487, OA28487 +28488, OA28488 +28489, OA28489 +28490, OA28490 +28491, OA28491 +28492, OA28492 +28493, OA28493 +28494, OA28494 +28495, OA28495 +28496, OA28496 +28497, OA28497 +28498, OA28498 +28499, OA28499 +28500, OA28500 +28501, OA28501 +28502, OA28502 +28503, OA28503 +28504, OA28504 +28505, OA28505 +28506, OA28506 +28507, OA28507 +28508, OA28508 +28509, OA28509 +28510, OA28510 +28511, OA28511 +28512, OA28512 +28513, OA28513 +28514, OA28514 +28515, OA28515 +28516, OA28516 +28517, OA28517 +28518, OA28518 +28519, OA28519 +28520, OA28520 +28521, OA28521 +28522, OA28522 +28523, OA28523 +28524, OA28524 +28525, OA28525 +28526, OA28526 +28527, OA28527 +28528, OA28528 +28529, OA28529 +28530, OA28530 +28531, OA28531 +28532, OA28532 +28533, OA28533 +28534, OA28534 +28535, OA28535 +28536, OA28536 +28537, OA28537 +28538, OA28538 +28539, OA28539 +28540, OA28540 +28541, OA28541 +28542, OA28542 +28543, OA28543 +28544, OA28544 +28545, OA28545 +28546, OA28546 +28547, OA28547 +28548, OA28548 +28549, OA28549 +28550, OA28550 +28551, OA28551 +28552, OA28552 +28553, OA28553 +28554, OA28554 +28555, OA28555 +28556, OA28556 +28557, OA28557 +28558, OA28558 +28559, OA28559 +28560, OA28560 +28561, OA28561 +28562, OA28562 +28563, OA28563 +28564, OA28564 +28565, OA28565 +28566, OA28566 +28567, OA28567 +28568, OA28568 +28569, OA28569 +28570, OA28570 +28571, OA28571 +28572, OA28572 +28573, OA28573 +28574, OA28574 +28575, OA28575 +28576, OA28576 +28577, OA28577 +28578, OA28578 +28579, OA28579 +28580, OA28580 +28581, OA28581 +28582, OA28582 +28583, OA28583 +28584, OA28584 +28585, OA28585 +28586, OA28586 +28587, OA28587 +28588, OA28588 +28589, OA28589 +28590, OA28590 +28591, OA28591 +28592, OA28592 +28593, OA28593 +28594, OA28594 +28595, OA28595 +28596, OA28596 +28597, OA28597 +28598, OA28598 +28599, OA28599 +28600, OA28600 +28601, OA28601 +28602, OA28602 +28603, OA28603 +28604, OA28604 +28605, OA28605 +28606, OA28606 +28607, OA28607 +28608, OA28608 +28609, OA28609 +28610, OA28610 +28611, OA28611 +28612, OA28612 +28613, OA28613 +28614, OA28614 +28615, OA28615 +28616, OA28616 +28617, OA28617 +28618, OA28618 +28619, OA28619 +28620, OA28620 +28621, OA28621 +28622, OA28622 +28623, OA28623 +28624, OA28624 +28625, OA28625 +28626, OA28626 +28627, OA28627 +28628, OA28628 +28629, OA28629 +28630, OA28630 +28631, OA28631 +28632, OA28632 +28633, OA28633 +28634, OA28634 +28635, OA28635 +28636, OA28636 +28637, OA28637 +28638, OA28638 +28639, OA28639 +28640, OA28640 +28641, OA28641 +28642, OA28642 +28643, OA28643 +28644, OA28644 +28645, OA28645 +28646, OA28646 +28647, OA28647 +28648, OA28648 +28649, OA28649 +28650, OA28650 +28651, OA28651 +28652, OA28652 +28653, OA28653 +28654, OA28654 +28655, OA28655 +28656, OA28656 +28657, OA28657 +28658, OA28658 +28659, OA28659 +28660, OA28660 +28661, OA28661 +28662, OA28662 +28663, OA28663 +28664, OA28664 +28665, OA28665 +28666, OA28666 +28667, OA28667 +28668, OA28668 +28669, OA28669 +28670, OA28670 +28671, OA28671 +28672, OA28672 +28673, OA28673 +28674, OA28674 +28675, OA28675 +28676, OA28676 +28677, OA28677 +28678, OA28678 +28679, OA28679 +28680, OA28680 +28681, OA28681 +28682, OA28682 +28683, OA28683 +28684, OA28684 +28685, OA28685 +28686, OA28686 +28687, OA28687 +28688, OA28688 +28689, OA28689 +28690, OA28690 +28691, OA28691 +28692, OA28692 +28693, OA28693 +28694, OA28694 +28695, OA28695 +28696, OA28696 +28697, OA28697 +28698, OA28698 +28699, OA28699 +28700, OA28700 +28701, OA28701 +28702, OA28702 +28703, OA28703 +28704, OA28704 +28705, OA28705 +28706, OA28706 +28707, OA28707 +28708, OA28708 +28709, OA28709 +28710, OA28710 +28711, OA28711 +28712, OA28712 +28713, OA28713 +28714, OA28714 +28715, OA28715 +28716, OA28716 +28717, OA28717 +28718, OA28718 +28719, OA28719 +28720, OA28720 +28721, OA28721 +28722, OA28722 +28723, OA28723 +28724, OA28724 +28725, OA28725 +28726, OA28726 +28727, OA28727 +28728, OA28728 +28729, OA28729 +28730, OA28730 +28731, OA28731 +28732, OA28732 +28733, OA28733 +28734, OA28734 +28735, OA28735 +28736, OA28736 +28737, OA28737 +28738, OA28738 +28739, OA28739 +28740, OA28740 +28741, OA28741 +28742, OA28742 +28743, OA28743 +28744, OA28744 +28745, OA28745 +28746, OA28746 +28747, OA28747 +28748, OA28748 +28749, OA28749 +28750, OA28750 +28751, OA28751 +28752, OA28752 +28753, OA28753 +28754, OA28754 +28755, OA28755 +28756, OA28756 +28757, OA28757 +28758, OA28758 +28759, OA28759 +28760, OA28760 +28761, OA28761 +28762, OA28762 +28763, OA28763 +28764, OA28764 +28765, OA28765 +28766, OA28766 +28767, OA28767 +28768, OA28768 +28769, OA28769 +28770, OA28770 +28771, OA28771 +28772, OA28772 +28773, OA28773 +28774, OA28774 +28775, OA28775 +28776, OA28776 +28777, OA28777 +28778, OA28778 +28779, OA28779 +28780, OA28780 +28781, OA28781 +28782, OA28782 +28783, OA28783 +28784, OA28784 +28785, OA28785 +28786, OA28786 +28787, OA28787 +28788, OA28788 +28789, OA28789 +28790, OA28790 +28791, OA28791 +28792, OA28792 +28793, OA28793 +28794, OA28794 +28795, OA28795 +28796, OA28796 +28797, OA28797 +28798, OA28798 +28799, OA28799 +28800, OA28800 +28801, OA28801 +28802, OA28802 +28803, OA28803 +28804, OA28804 +28805, OA28805 +28806, OA28806 +28807, OA28807 +28808, OA28808 +28809, OA28809 +28810, OA28810 +28811, OA28811 +28812, OA28812 +28813, OA28813 +28814, OA28814 +28815, OA28815 +28816, OA28816 +28817, OA28817 +28818, OA28818 +28819, OA28819 +28820, OA28820 +28821, OA28821 +28822, OA28822 +28823, OA28823 +28824, OA28824 +28825, OA28825 +28826, OA28826 +28827, OA28827 +28828, OA28828 +28829, OA28829 +28830, OA28830 +28831, OA28831 +28832, OA28832 +28833, OA28833 +28834, OA28834 +28835, OA28835 +28836, OA28836 +28837, OA28837 +28838, OA28838 +28839, OA28839 +28840, OA28840 +28841, OA28841 +28842, OA28842 +28843, OA28843 +28844, OA28844 +28845, OA28845 +28846, OA28846 +28847, OA28847 +28848, OA28848 +28849, OA28849 +28850, OA28850 +28851, OA28851 +28852, OA28852 +28853, OA28853 +28854, OA28854 +28855, OA28855 +28856, OA28856 +28857, OA28857 +28858, OA28858 +28859, OA28859 +28860, OA28860 +28861, OA28861 +28862, OA28862 +28863, OA28863 +28864, OA28864 +28865, OA28865 +28866, OA28866 +28867, OA28867 +28868, OA28868 +28869, OA28869 +28870, OA28870 +28871, OA28871 +28872, OA28872 +28873, OA28873 +28874, OA28874 +28875, OA28875 +28876, OA28876 +28877, OA28877 +28878, OA28878 +28879, OA28879 +28880, OA28880 +28881, OA28881 +28882, OA28882 +28883, OA28883 +28884, OA28884 +28885, OA28885 +28886, OA28886 +28887, OA28887 +28888, OA28888 +28889, OA28889 +28890, OA28890 +28891, OA28891 +28892, OA28892 +28893, OA28893 +28894, OA28894 +28895, OA28895 +28896, OA28896 +28897, OA28897 +28898, OA28898 +28899, OA28899 +28900, OA28900 +28901, OA28901 +28902, OA28902 +28903, OA28903 +28904, OA28904 +28905, OA28905 +28906, OA28906 +28907, OA28907 +28908, OA28908 +28909, OA28909 +28910, OA28910 +28911, OA28911 +28912, OA28912 +28913, OA28913 +28914, OA28914 +28915, OA28915 +28916, OA28916 +28917, OA28917 +28918, OA28918 +28919, OA28919 +28920, OA28920 +28921, OA28921 +28922, OA28922 +28923, OA28923 +28924, OA28924 +28925, OA28925 +28926, OA28926 +28927, OA28927 +28928, OA28928 +28929, OA28929 +28930, OA28930 +28931, OA28931 +28932, OA28932 +28933, OA28933 +28934, OA28934 +28935, OA28935 +28936, OA28936 +28937, OA28937 +28938, OA28938 +28939, OA28939 +28940, OA28940 +28941, OA28941 +28942, OA28942 +28943, OA28943 +28944, OA28944 +28945, OA28945 +28946, OA28946 +28947, OA28947 +28948, OA28948 +28949, OA28949 +28950, OA28950 +28951, OA28951 +28952, OA28952 +28953, OA28953 +28954, OA28954 +28955, OA28955 +28956, OA28956 +28957, OA28957 +28958, OA28958 +28959, OA28959 +28960, OA28960 +28961, OA28961 +28962, OA28962 +28963, OA28963 +28964, OA28964 +28965, OA28965 +28966, OA28966 +28967, OA28967 +28968, OA28968 +28969, OA28969 +28970, OA28970 +28971, OA28971 +28972, OA28972 +28973, OA28973 +28974, OA28974 +28975, OA28975 +28976, OA28976 +28977, OA28977 +28978, OA28978 +28979, OA28979 +28980, OA28980 +28981, OA28981 +28982, OA28982 +28983, OA28983 +28984, OA28984 +28985, OA28985 +28986, OA28986 +28987, OA28987 +28988, OA28988 +28989, OA28989 +28990, OA28990 +28991, OA28991 +28992, OA28992 +28993, OA28993 +28994, OA28994 +28995, OA28995 +28996, OA28996 +28997, OA28997 +28998, OA28998 +28999, OA28999 +29000, OA29000 +29001, OA29001 +29002, OA29002 +29003, OA29003 +29004, OA29004 +29005, OA29005 +29006, OA29006 +29007, OA29007 +29008, OA29008 +29009, OA29009 +29010, OA29010 +29011, OA29011 +29012, OA29012 +29013, OA29013 +29014, OA29014 +29015, OA29015 +29016, OA29016 +29017, OA29017 +29018, OA29018 +29019, OA29019 +29020, OA29020 +29021, OA29021 +29022, OA29022 +29023, OA29023 +29024, OA29024 +29025, OA29025 +29026, OA29026 +29027, OA29027 +29028, OA29028 +29029, OA29029 +29030, OA29030 +29031, OA29031 +29032, OA29032 +29033, OA29033 +29034, OA29034 +29035, OA29035 +29036, OA29036 +29037, OA29037 +29038, OA29038 +29039, OA29039 +29040, OA29040 +29041, OA29041 +29042, OA29042 +29043, OA29043 +29044, OA29044 +29045, OA29045 +29046, OA29046 +29047, OA29047 +29048, OA29048 +29049, OA29049 +29050, OA29050 +29051, OA29051 +29052, OA29052 +29053, OA29053 +29054, OA29054 +29055, OA29055 +29056, OA29056 +29057, OA29057 +29058, OA29058 +29059, OA29059 +29060, OA29060 +29061, OA29061 +29062, OA29062 +29063, OA29063 +29064, OA29064 +29065, OA29065 +29066, OA29066 +29067, OA29067 +29068, OA29068 +29069, OA29069 +29070, OA29070 +29071, OA29071 +29072, OA29072 +29073, OA29073 +29074, OA29074 +29075, OA29075 +29076, OA29076 +29077, OA29077 +29078, OA29078 +29079, OA29079 +29080, OA29080 +29081, OA29081 +29082, OA29082 +29083, OA29083 +29084, OA29084 +29085, OA29085 +29086, OA29086 +29087, OA29087 +29088, OA29088 +29089, OA29089 +29090, OA29090 +29091, OA29091 +29092, OA29092 +29093, OA29093 +29094, OA29094 +29095, OA29095 +29096, OA29096 +29097, OA29097 +29098, OA29098 +29099, OA29099 +29100, OA29100 +29101, OA29101 +29102, OA29102 +29103, OA29103 +29104, OA29104 +29105, OA29105 +29106, OA29106 +29107, OA29107 +29108, OA29108 +29109, OA29109 +29110, OA29110 +29111, OA29111 +29112, OA29112 +29113, OA29113 +29114, OA29114 +29115, OA29115 +29116, OA29116 +29117, OA29117 +29118, OA29118 +29119, OA29119 +29120, OA29120 +29121, OA29121 +29122, OA29122 +29123, OA29123 +29124, OA29124 +29125, OA29125 +29126, OA29126 +29127, OA29127 +29128, OA29128 +29129, OA29129 +29130, OA29130 +29131, OA29131 +29132, OA29132 +29133, OA29133 +29134, OA29134 +29135, OA29135 +29136, OA29136 +29137, OA29137 +29138, OA29138 +29139, OA29139 +29140, OA29140 +29141, OA29141 +29142, OA29142 +29143, OA29143 +29144, OA29144 +29145, OA29145 +29146, OA29146 +29147, OA29147 +29148, OA29148 +29149, OA29149 +29150, OA29150 +29151, OA29151 +29152, OA29152 +29153, OA29153 +29154, OA29154 +29155, OA29155 +29156, OA29156 +29157, OA29157 +29158, OA29158 +29159, OA29159 +29160, OA29160 +29161, OA29161 +29162, OA29162 +29163, OA29163 +29164, OA29164 +29165, OA29165 +29166, OA29166 +29167, OA29167 +29168, OA29168 +29169, OA29169 +29170, OA29170 +29171, OA29171 +29172, OA29172 +29173, OA29173 +29174, OA29174 +29175, OA29175 +29176, OA29176 +29177, OA29177 +29178, OA29178 +29179, OA29179 +29180, OA29180 +29181, OA29181 +29182, OA29182 +29183, OA29183 +29184, OA29184 +29185, OA29185 +29186, OA29186 +29187, OA29187 +29188, OA29188 +29189, OA29189 +29190, OA29190 +29191, OA29191 +29192, OA29192 +29193, OA29193 +29194, OA29194 +29195, OA29195 +29196, OA29196 +29197, OA29197 +29198, OA29198 +29199, OA29199 +29200, OA29200 +29201, OA29201 +29202, OA29202 +29203, OA29203 +29204, OA29204 +29205, OA29205 +29206, OA29206 +29207, OA29207 +29208, OA29208 +29209, OA29209 +29210, OA29210 +29211, OA29211 +29212, OA29212 +29213, OA29213 +29214, OA29214 +29215, OA29215 +29216, OA29216 +29217, OA29217 +29218, OA29218 +29219, OA29219 +29220, OA29220 +29221, OA29221 +29222, OA29222 +29223, OA29223 +29224, OA29224 +29225, OA29225 +29226, OA29226 +29227, OA29227 +29228, OA29228 +29229, OA29229 +29230, OA29230 +29231, OA29231 +29232, OA29232 +29233, OA29233 +29234, OA29234 +29235, OA29235 +29236, OA29236 +29237, OA29237 +29238, OA29238 +29239, OA29239 +29240, OA29240 +29241, OA29241 +29242, OA29242 +29243, OA29243 +29244, OA29244 +29245, OA29245 +29246, OA29246 +29247, OA29247 +29248, OA29248 +29249, OA29249 +29250, OA29250 +29251, OA29251 +29252, OA29252 +29253, OA29253 +29254, OA29254 +29255, OA29255 +29256, OA29256 +29257, OA29257 +29258, OA29258 +29259, OA29259 +29260, OA29260 +29261, OA29261 +29262, OA29262 +29263, OA29263 +29264, OA29264 +29265, OA29265 +29266, OA29266 +29267, OA29267 +29268, OA29268 +29269, OA29269 +29270, OA29270 +29271, OA29271 +29272, OA29272 +29273, OA29273 +29274, OA29274 +29275, OA29275 +29276, OA29276 +29277, OA29277 +29278, OA29278 +29279, OA29279 +29280, OA29280 +29281, OA29281 +29282, OA29282 +29283, OA29283 +29284, OA29284 +29285, OA29285 +29286, OA29286 +29287, OA29287 +29288, OA29288 +29289, OA29289 +29290, OA29290 +29291, OA29291 +29292, OA29292 +29293, OA29293 +29294, OA29294 +29295, OA29295 +29296, OA29296 +29297, OA29297 +29298, OA29298 +29299, OA29299 +29300, OA29300 +29301, OA29301 +29302, OA29302 +29303, OA29303 +29304, OA29304 +29305, OA29305 +29306, OA29306 +29307, OA29307 +29308, OA29308 +29309, OA29309 +29310, OA29310 +29311, OA29311 +29312, OA29312 +29313, OA29313 +29314, OA29314 +29315, OA29315 +29316, OA29316 +29317, OA29317 +29318, OA29318 +29319, OA29319 +29320, OA29320 +29321, OA29321 +29322, OA29322 +29323, OA29323 +29324, OA29324 +29325, OA29325 +29326, OA29326 +29327, OA29327 +29328, OA29328 +29329, OA29329 +29330, OA29330 +29331, OA29331 +29332, OA29332 +29333, OA29333 +29334, OA29334 +29335, OA29335 +29336, OA29336 +29337, OA29337 +29338, OA29338 +29339, OA29339 +29340, OA29340 +29341, OA29341 +29342, OA29342 +29343, OA29343 +29344, OA29344 +29345, OA29345 +29346, OA29346 +29347, OA29347 +29348, OA29348 +29349, OA29349 +29350, OA29350 +29351, OA29351 +29352, OA29352 +29353, OA29353 +29354, OA29354 +29355, OA29355 +29356, OA29356 +29357, OA29357 +29358, OA29358 +29359, OA29359 +29360, OA29360 +29361, OA29361 +29362, OA29362 +29363, OA29363 +29364, OA29364 +29365, OA29365 +29366, OA29366 +29367, OA29367 +29368, OA29368 +29369, OA29369 +29370, OA29370 +29371, OA29371 +29372, OA29372 +29373, OA29373 +29374, OA29374 +29375, OA29375 +29376, OA29376 +29377, OA29377 +29378, OA29378 +29379, OA29379 +29380, OA29380 +29381, OA29381 +29382, OA29382 +29383, OA29383 +29384, OA29384 +29385, OA29385 +29386, OA29386 +29387, OA29387 +29388, OA29388 +29389, OA29389 +29390, OA29390 +29391, OA29391 +29392, OA29392 +29393, OA29393 +29394, OA29394 +29395, OA29395 +29396, OA29396 +29397, OA29397 +29398, OA29398 +29399, OA29399 +29400, OA29400 +29401, OA29401 +29402, OA29402 +29403, OA29403 +29404, OA29404 +29405, OA29405 +29406, OA29406 +29407, OA29407 +29408, OA29408 +29409, OA29409 +29410, OA29410 +29411, OA29411 +29412, OA29412 +29413, OA29413 +29414, OA29414 +29415, OA29415 +29416, OA29416 +29417, OA29417 +29418, OA29418 +29419, OA29419 +29420, OA29420 +29421, OA29421 +29422, OA29422 +29423, OA29423 +29424, OA29424 +29425, OA29425 +29426, OA29426 +29427, OA29427 +29428, OA29428 +29429, OA29429 +29430, OA29430 +29431, OA29431 +29432, OA29432 +29433, OA29433 +29434, OA29434 +29435, OA29435 +29436, OA29436 +29437, OA29437 +29438, OA29438 +29439, OA29439 +29440, OA29440 +29441, OA29441 +29442, OA29442 +29443, OA29443 +29444, OA29444 +29445, OA29445 +29446, OA29446 +29447, OA29447 +29448, OA29448 +29449, OA29449 +29450, OA29450 +29451, OA29451 +29452, OA29452 +29453, OA29453 +29454, OA29454 +29455, OA29455 +29456, OA29456 +29457, OA29457 +29458, OA29458 +29459, OA29459 +29460, OA29460 +29461, OA29461 +29462, OA29462 +29463, OA29463 +29464, OA29464 +29465, OA29465 +29466, OA29466 +29467, OA29467 +29468, OA29468 +29469, OA29469 +29470, OA29470 +29471, OA29471 +29472, OA29472 +29473, OA29473 +29474, OA29474 +29475, OA29475 +29476, OA29476 +29477, OA29477 +29478, OA29478 +29479, OA29479 +29480, OA29480 +29481, OA29481 +29482, OA29482 +29483, OA29483 +29484, OA29484 +29485, OA29485 +29486, OA29486 +29487, OA29487 +29488, OA29488 +29489, OA29489 +29490, OA29490 +29491, OA29491 +29492, OA29492 +29493, OA29493 +29494, OA29494 +29495, OA29495 +29496, OA29496 +29497, OA29497 +29498, OA29498 +29499, OA29499 +29500, OA29500 +29501, OA29501 +29502, OA29502 +29503, OA29503 +29504, OA29504 +29505, OA29505 +29506, OA29506 +29507, OA29507 +29508, OA29508 +29509, OA29509 +29510, OA29510 +29511, OA29511 +29512, OA29512 +29513, OA29513 +29514, OA29514 +29515, OA29515 +29516, OA29516 +29517, OA29517 +29518, OA29518 +29519, OA29519 +29520, OA29520 +29521, OA29521 +29522, OA29522 +29523, OA29523 +29524, OA29524 +29525, OA29525 +29526, OA29526 +29527, OA29527 +29528, OA29528 +29529, OA29529 +29530, OA29530 +29531, OA29531 +29532, OA29532 +29533, OA29533 +29534, OA29534 +29535, OA29535 +29536, OA29536 +29537, OA29537 +29538, OA29538 +29539, OA29539 +29540, OA29540 +29541, OA29541 +29542, OA29542 +29543, OA29543 +29544, OA29544 +29545, OA29545 +29546, OA29546 +29547, OA29547 +29548, OA29548 +29549, OA29549 +29550, OA29550 +29551, OA29551 +29552, OA29552 +29553, OA29553 +29554, OA29554 +29555, OA29555 +29556, OA29556 +29557, OA29557 +29558, OA29558 +29559, OA29559 +29560, OA29560 +29561, OA29561 +29562, OA29562 +29563, OA29563 +29564, OA29564 +29565, OA29565 +29566, OA29566 +29567, OA29567 +29568, OA29568 +29569, OA29569 +29570, OA29570 +29571, OA29571 +29572, OA29572 +29573, OA29573 +29574, OA29574 +29575, OA29575 +29576, OA29576 +29577, OA29577 +29578, OA29578 +29579, OA29579 +29580, OA29580 +29581, OA29581 +29582, OA29582 +29583, OA29583 +29584, OA29584 +29585, OA29585 +29586, OA29586 +29587, OA29587 +29588, OA29588 +29589, OA29589 +29590, OA29590 +29591, OA29591 +29592, OA29592 +29593, OA29593 +29594, OA29594 +29595, OA29595 +29596, OA29596 +29597, OA29597 +29598, OA29598 +29599, OA29599 +29600, OA29600 +29601, OA29601 +29602, OA29602 +29603, OA29603 +29604, OA29604 +29605, OA29605 +29606, OA29606 +29607, OA29607 +29608, OA29608 +29609, OA29609 +29610, OA29610 +29611, OA29611 +29612, OA29612 +29613, OA29613 +29614, OA29614 +29615, OA29615 +29616, OA29616 +29617, OA29617 +29618, OA29618 +29619, OA29619 +29620, OA29620 +29621, OA29621 +29622, OA29622 +29623, OA29623 +29624, OA29624 +29625, OA29625 +29626, OA29626 +29627, OA29627 +29628, OA29628 +29629, OA29629 +29630, OA29630 +29631, OA29631 +29632, OA29632 +29633, OA29633 +29634, OA29634 +29635, OA29635 +29636, OA29636 +29637, OA29637 +29638, OA29638 +29639, OA29639 +29640, OA29640 +29641, OA29641 +29642, OA29642 +29643, OA29643 +29644, OA29644 +29645, OA29645 +29646, OA29646 +29647, OA29647 +29648, OA29648 +29649, OA29649 +29650, OA29650 +29651, OA29651 +29652, OA29652 +29653, OA29653 +29654, OA29654 +29655, OA29655 +29656, OA29656 +29657, OA29657 +29658, OA29658 +29659, OA29659 +29660, OA29660 +29661, OA29661 +29662, OA29662 +29663, OA29663 +29664, OA29664 +29665, OA29665 +29666, OA29666 +29667, OA29667 +29668, OA29668 +29669, OA29669 +29670, OA29670 +29671, OA29671 +29672, OA29672 +29673, OA29673 +29674, OA29674 +29675, OA29675 +29676, OA29676 +29677, OA29677 +29678, OA29678 +29679, OA29679 +29680, OA29680 +29681, OA29681 +29682, OA29682 +29683, OA29683 +29684, OA29684 +29685, OA29685 +29686, OA29686 +29687, OA29687 +29688, OA29688 +29689, OA29689 +29690, OA29690 +29691, OA29691 +29692, OA29692 +29693, OA29693 +29694, OA29694 +29695, OA29695 +29696, OA29696 +29697, OA29697 +29698, OA29698 +29699, OA29699 +29700, OA29700 +29701, OA29701 +29702, OA29702 +29703, OA29703 +29704, OA29704 +29705, OA29705 +29706, OA29706 +29707, OA29707 +29708, OA29708 +29709, OA29709 +29710, OA29710 +29711, OA29711 +29712, OA29712 +29713, OA29713 +29714, OA29714 +29715, OA29715 +29716, OA29716 +29717, OA29717 +29718, OA29718 +29719, OA29719 +29720, OA29720 +29721, OA29721 +29722, OA29722 +29723, OA29723 +29724, OA29724 +29725, OA29725 +29726, OA29726 +29727, OA29727 +29728, OA29728 +29729, OA29729 +29730, OA29730 +29731, OA29731 +29732, OA29732 +29733, OA29733 +29734, OA29734 +29735, OA29735 +29736, OA29736 +29737, OA29737 +29738, OA29738 +29739, OA29739 +29740, OA29740 +29741, OA29741 +29742, OA29742 +29743, OA29743 +29744, OA29744 +29745, OA29745 +29746, OA29746 +29747, OA29747 +29748, OA29748 +29749, OA29749 +29750, OA29750 +29751, OA29751 +29752, OA29752 +29753, OA29753 +29754, OA29754 +29755, OA29755 +29756, OA29756 +29757, OA29757 +29758, OA29758 +29759, OA29759 +29760, OA29760 +29761, OA29761 +29762, OA29762 +29763, OA29763 +29764, OA29764 +29765, OA29765 +29766, OA29766 +29767, OA29767 +29768, OA29768 +29769, OA29769 +29770, OA29770 +29771, OA29771 +29772, OA29772 +29773, OA29773 +29774, OA29774 +29775, OA29775 +29776, OA29776 +29777, OA29777 +29778, OA29778 +29779, OA29779 +29780, OA29780 +29781, OA29781 +29782, OA29782 +29783, OA29783 +29784, OA29784 +29785, OA29785 +29786, OA29786 +29787, OA29787 +29788, OA29788 +29789, OA29789 +29790, OA29790 +29791, OA29791 +29792, OA29792 +29793, OA29793 +29794, OA29794 +29795, OA29795 +29796, OA29796 +29797, OA29797 +29798, OA29798 +29799, OA29799 +29800, OA29800 +29801, OA29801 +29802, OA29802 +29803, OA29803 +29804, OA29804 +29805, OA29805 +29806, OA29806 +29807, OA29807 +29808, OA29808 +29809, OA29809 +29810, OA29810 +29811, OA29811 +29812, OA29812 +29813, OA29813 +29814, OA29814 +29815, OA29815 +29816, OA29816 +29817, OA29817 +29818, OA29818 +29819, OA29819 +29820, OA29820 +29821, OA29821 +29822, OA29822 +29823, OA29823 +29824, OA29824 +29825, OA29825 +29826, OA29826 +29827, OA29827 +29828, OA29828 +29829, OA29829 +29830, OA29830 +29831, OA29831 +29832, OA29832 +29833, OA29833 +29834, OA29834 +29835, OA29835 +29836, OA29836 +29837, OA29837 +29838, OA29838 +29839, OA29839 +29840, OA29840 +29841, OA29841 +29842, OA29842 +29843, OA29843 +29844, OA29844 +29845, OA29845 +29846, OA29846 +29847, OA29847 +29848, OA29848 +29849, OA29849 +29850, OA29850 +29851, OA29851 +29852, OA29852 +29853, OA29853 +29854, OA29854 +29855, OA29855 +29856, OA29856 +29857, OA29857 +29858, OA29858 +29859, OA29859 +29860, OA29860 +29861, OA29861 +29862, OA29862 +29863, OA29863 +29864, OA29864 +29865, OA29865 +29866, OA29866 +29867, OA29867 +29868, OA29868 +29869, OA29869 +29870, OA29870 +29871, OA29871 +29872, OA29872 +29873, OA29873 +29874, OA29874 +29875, OA29875 +29876, OA29876 +29877, OA29877 +29878, OA29878 +29879, OA29879 +29880, OA29880 +29881, OA29881 +29882, OA29882 +29883, OA29883 +29884, OA29884 +29885, OA29885 +29886, OA29886 +29887, OA29887 +29888, OA29888 +29889, OA29889 +29890, OA29890 +29891, OA29891 +29892, OA29892 +29893, OA29893 +29894, OA29894 +29895, OA29895 +29896, OA29896 +29897, OA29897 +29898, OA29898 +29899, OA29899 +29900, OA29900 +29901, OA29901 +29902, OA29902 +29903, OA29903 +29904, OA29904 +29905, OA29905 +29906, OA29906 +29907, OA29907 +29908, OA29908 +29909, OA29909 +29910, OA29910 +29911, OA29911 +29912, OA29912 +29913, OA29913 +29914, OA29914 +29915, OA29915 +29916, OA29916 +29917, OA29917 +29918, OA29918 +29919, OA29919 +29920, OA29920 +29921, OA29921 +29922, OA29922 +29923, OA29923 +29924, OA29924 +29925, OA29925 +29926, OA29926 +29927, OA29927 +29928, OA29928 +29929, OA29929 +29930, OA29930 +29931, OA29931 +29932, OA29932 +29933, OA29933 +29934, OA29934 +29935, OA29935 +29936, OA29936 +29937, OA29937 +29938, OA29938 +29939, OA29939 +29940, OA29940 +29941, OA29941 +29942, OA29942 +29943, OA29943 +29944, OA29944 +29945, OA29945 +29946, OA29946 +29947, OA29947 +29948, OA29948 +29949, OA29949 +29950, OA29950 +29951, OA29951 +29952, OA29952 +29953, OA29953 +29954, OA29954 +29955, OA29955 +29956, OA29956 +29957, OA29957 +29958, OA29958 +29959, OA29959 +29960, OA29960 +29961, OA29961 +29962, OA29962 +29963, OA29963 +29964, OA29964 +29965, OA29965 +29966, OA29966 +29967, OA29967 +29968, OA29968 +29969, OA29969 +29970, OA29970 +29971, OA29971 +29972, OA29972 +29973, OA29973 +29974, OA29974 +29975, OA29975 +29976, OA29976 +29977, OA29977 +29978, OA29978 +29979, OA29979 +29980, OA29980 +29981, OA29981 +29982, OA29982 +29983, OA29983 +29984, OA29984 +29985, OA29985 +29986, OA29986 +29987, OA29987 +29988, OA29988 +29989, OA29989 +29990, OA29990 +29991, OA29991 +29992, OA29992 +29993, OA29993 +29994, OA29994 +29995, OA29995 +29996, OA29996 +29997, OA29997 +29998, OA29998 +29999, OA29999 +30000, OA30000 diff --git a/testdb/csv/PC.csv b/testdb/csv/PC.csv new file mode 100644 index 000000000..67e735908 --- /dev/null +++ b/testdb/csv/PC.csv @@ -0,0 +1,3 @@ +1, PC1 +2, PC2 +3, PC3 diff --git a/testdb/csv/U.csv b/testdb/csv/U.csv new file mode 100644 index 000000000..48915686f --- /dev/null +++ b/testdb/csv/U.csv @@ -0,0 +1,10000 @@ +1, U1 +2, U2 +3, U3 +4, U4 +5, U5 +6, U6 +7, U7 +8, U8 +9, U9 +10, U10 +11, U11 +12, U12 +13, U13 +14, U14 +15, U15 +16, U16 +17, U17 +18, U18 +19, U19 +20, U20 +21, U21 +22, U22 +23, U23 +24, U24 +25, U25 +26, U26 +27, U27 +28, U28 +29, U29 +30, U30 +31, U31 +32, U32 +33, U33 +34, U34 +35, U35 +36, U36 +37, U37 +38, U38 +39, U39 +40, U40 +41, U41 +42, U42 +43, U43 +44, U44 +45, U45 +46, U46 +47, U47 +48, U48 +49, U49 +50, U50 +51, U51 +52, U52 +53, U53 +54, U54 +55, U55 +56, U56 +57, U57 +58, U58 +59, U59 +60, U60 +61, U61 +62, U62 +63, U63 +64, U64 +65, U65 +66, U66 +67, U67 +68, U68 +69, U69 +70, U70 +71, U71 +72, U72 +73, U73 +74, U74 +75, U75 +76, U76 +77, U77 +78, U78 +79, U79 +80, U80 +81, U81 +82, U82 +83, U83 +84, U84 +85, U85 +86, U86 +87, U87 +88, U88 +89, U89 +90, U90 +91, U91 +92, U92 +93, U93 +94, U94 +95, U95 +96, U96 +97, U97 +98, U98 +99, U99 +100, U100 +101, U101 +102, U102 +103, U103 +104, U104 +105, U105 +106, U106 +107, U107 +108, U108 +109, U109 +110, U110 +111, U111 +112, U112 +113, U113 +114, U114 +115, U115 +116, U116 +117, U117 +118, U118 +119, U119 +120, U120 +121, U121 +122, U122 +123, U123 +124, U124 +125, U125 +126, U126 +127, U127 +128, U128 +129, U129 +130, U130 +131, U131 +132, U132 +133, U133 +134, U134 +135, U135 +136, U136 +137, U137 +138, U138 +139, U139 +140, U140 +141, U141 +142, U142 +143, U143 +144, U144 +145, U145 +146, U146 +147, U147 +148, U148 +149, U149 +150, U150 +151, U151 +152, U152 +153, U153 +154, U154 +155, U155 +156, U156 +157, U157 +158, U158 +159, U159 +160, U160 +161, U161 +162, U162 +163, U163 +164, U164 +165, U165 +166, U166 +167, U167 +168, U168 +169, U169 +170, U170 +171, U171 +172, U172 +173, U173 +174, U174 +175, U175 +176, U176 +177, U177 +178, U178 +179, U179 +180, U180 +181, U181 +182, U182 +183, U183 +184, U184 +185, U185 +186, U186 +187, U187 +188, U188 +189, U189 +190, U190 +191, U191 +192, U192 +193, U193 +194, U194 +195, U195 +196, U196 +197, U197 +198, U198 +199, U199 +200, U200 +201, U201 +202, U202 +203, U203 +204, U204 +205, U205 +206, U206 +207, U207 +208, U208 +209, U209 +210, U210 +211, U211 +212, U212 +213, U213 +214, U214 +215, U215 +216, U216 +217, U217 +218, U218 +219, U219 +220, U220 +221, U221 +222, U222 +223, U223 +224, U224 +225, U225 +226, U226 +227, U227 +228, U228 +229, U229 +230, U230 +231, U231 +232, U232 +233, U233 +234, U234 +235, U235 +236, U236 +237, U237 +238, U238 +239, U239 +240, U240 +241, U241 +242, U242 +243, U243 +244, U244 +245, U245 +246, U246 +247, U247 +248, U248 +249, U249 +250, U250 +251, U251 +252, U252 +253, U253 +254, U254 +255, U255 +256, U256 +257, U257 +258, U258 +259, U259 +260, U260 +261, U261 +262, U262 +263, U263 +264, U264 +265, U265 +266, U266 +267, U267 +268, U268 +269, U269 +270, U270 +271, U271 +272, U272 +273, U273 +274, U274 +275, U275 +276, U276 +277, U277 +278, U278 +279, U279 +280, U280 +281, U281 +282, U282 +283, U283 +284, U284 +285, U285 +286, U286 +287, U287 +288, U288 +289, U289 +290, U290 +291, U291 +292, U292 +293, U293 +294, U294 +295, U295 +296, U296 +297, U297 +298, U298 +299, U299 +300, U300 +301, U301 +302, U302 +303, U303 +304, U304 +305, U305 +306, U306 +307, U307 +308, U308 +309, U309 +310, U310 +311, U311 +312, U312 +313, U313 +314, U314 +315, U315 +316, U316 +317, U317 +318, U318 +319, U319 +320, U320 +321, U321 +322, U322 +323, U323 +324, U324 +325, U325 +326, U326 +327, U327 +328, U328 +329, U329 +330, U330 +331, U331 +332, U332 +333, U333 +334, U334 +335, U335 +336, U336 +337, U337 +338, U338 +339, U339 +340, U340 +341, U341 +342, U342 +343, U343 +344, U344 +345, U345 +346, U346 +347, U347 +348, U348 +349, U349 +350, U350 +351, U351 +352, U352 +353, U353 +354, U354 +355, U355 +356, U356 +357, U357 +358, U358 +359, U359 +360, U360 +361, U361 +362, U362 +363, U363 +364, U364 +365, U365 +366, U366 +367, U367 +368, U368 +369, U369 +370, U370 +371, U371 +372, U372 +373, U373 +374, U374 +375, U375 +376, U376 +377, U377 +378, U378 +379, U379 +380, U380 +381, U381 +382, U382 +383, U383 +384, U384 +385, U385 +386, U386 +387, U387 +388, U388 +389, U389 +390, U390 +391, U391 +392, U392 +393, U393 +394, U394 +395, U395 +396, U396 +397, U397 +398, U398 +399, U399 +400, U400 +401, U401 +402, U402 +403, U403 +404, U404 +405, U405 +406, U406 +407, U407 +408, U408 +409, U409 +410, U410 +411, U411 +412, U412 +413, U413 +414, U414 +415, U415 +416, U416 +417, U417 +418, U418 +419, U419 +420, U420 +421, U421 +422, U422 +423, U423 +424, U424 +425, U425 +426, U426 +427, U427 +428, U428 +429, U429 +430, U430 +431, U431 +432, U432 +433, U433 +434, U434 +435, U435 +436, U436 +437, U437 +438, U438 +439, U439 +440, U440 +441, U441 +442, U442 +443, U443 +444, U444 +445, U445 +446, U446 +447, U447 +448, U448 +449, U449 +450, U450 +451, U451 +452, U452 +453, U453 +454, U454 +455, U455 +456, U456 +457, U457 +458, U458 +459, U459 +460, U460 +461, U461 +462, U462 +463, U463 +464, U464 +465, U465 +466, U466 +467, U467 +468, U468 +469, U469 +470, U470 +471, U471 +472, U472 +473, U473 +474, U474 +475, U475 +476, U476 +477, U477 +478, U478 +479, U479 +480, U480 +481, U481 +482, U482 +483, U483 +484, U484 +485, U485 +486, U486 +487, U487 +488, U488 +489, U489 +490, U490 +491, U491 +492, U492 +493, U493 +494, U494 +495, U495 +496, U496 +497, U497 +498, U498 +499, U499 +500, U500 +501, U501 +502, U502 +503, U503 +504, U504 +505, U505 +506, U506 +507, U507 +508, U508 +509, U509 +510, U510 +511, U511 +512, U512 +513, U513 +514, U514 +515, U515 +516, U516 +517, U517 +518, U518 +519, U519 +520, U520 +521, U521 +522, U522 +523, U523 +524, U524 +525, U525 +526, U526 +527, U527 +528, U528 +529, U529 +530, U530 +531, U531 +532, U532 +533, U533 +534, U534 +535, U535 +536, U536 +537, U537 +538, U538 +539, U539 +540, U540 +541, U541 +542, U542 +543, U543 +544, U544 +545, U545 +546, U546 +547, U547 +548, U548 +549, U549 +550, U550 +551, U551 +552, U552 +553, U553 +554, U554 +555, U555 +556, U556 +557, U557 +558, U558 +559, U559 +560, U560 +561, U561 +562, U562 +563, U563 +564, U564 +565, U565 +566, U566 +567, U567 +568, U568 +569, U569 +570, U570 +571, U571 +572, U572 +573, U573 +574, U574 +575, U575 +576, U576 +577, U577 +578, U578 +579, U579 +580, U580 +581, U581 +582, U582 +583, U583 +584, U584 +585, U585 +586, U586 +587, U587 +588, U588 +589, U589 +590, U590 +591, U591 +592, U592 +593, U593 +594, U594 +595, U595 +596, U596 +597, U597 +598, U598 +599, U599 +600, U600 +601, U601 +602, U602 +603, U603 +604, U604 +605, U605 +606, U606 +607, U607 +608, U608 +609, U609 +610, U610 +611, U611 +612, U612 +613, U613 +614, U614 +615, U615 +616, U616 +617, U617 +618, U618 +619, U619 +620, U620 +621, U621 +622, U622 +623, U623 +624, U624 +625, U625 +626, U626 +627, U627 +628, U628 +629, U629 +630, U630 +631, U631 +632, U632 +633, U633 +634, U634 +635, U635 +636, U636 +637, U637 +638, U638 +639, U639 +640, U640 +641, U641 +642, U642 +643, U643 +644, U644 +645, U645 +646, U646 +647, U647 +648, U648 +649, U649 +650, U650 +651, U651 +652, U652 +653, U653 +654, U654 +655, U655 +656, U656 +657, U657 +658, U658 +659, U659 +660, U660 +661, U661 +662, U662 +663, U663 +664, U664 +665, U665 +666, U666 +667, U667 +668, U668 +669, U669 +670, U670 +671, U671 +672, U672 +673, U673 +674, U674 +675, U675 +676, U676 +677, U677 +678, U678 +679, U679 +680, U680 +681, U681 +682, U682 +683, U683 +684, U684 +685, U685 +686, U686 +687, U687 +688, U688 +689, U689 +690, U690 +691, U691 +692, U692 +693, U693 +694, U694 +695, U695 +696, U696 +697, U697 +698, U698 +699, U699 +700, U700 +701, U701 +702, U702 +703, U703 +704, U704 +705, U705 +706, U706 +707, U707 +708, U708 +709, U709 +710, U710 +711, U711 +712, U712 +713, U713 +714, U714 +715, U715 +716, U716 +717, U717 +718, U718 +719, U719 +720, U720 +721, U721 +722, U722 +723, U723 +724, U724 +725, U725 +726, U726 +727, U727 +728, U728 +729, U729 +730, U730 +731, U731 +732, U732 +733, U733 +734, U734 +735, U735 +736, U736 +737, U737 +738, U738 +739, U739 +740, U740 +741, U741 +742, U742 +743, U743 +744, U744 +745, U745 +746, U746 +747, U747 +748, U748 +749, U749 +750, U750 +751, U751 +752, U752 +753, U753 +754, U754 +755, U755 +756, U756 +757, U757 +758, U758 +759, U759 +760, U760 +761, U761 +762, U762 +763, U763 +764, U764 +765, U765 +766, U766 +767, U767 +768, U768 +769, U769 +770, U770 +771, U771 +772, U772 +773, U773 +774, U774 +775, U775 +776, U776 +777, U777 +778, U778 +779, U779 +780, U780 +781, U781 +782, U782 +783, U783 +784, U784 +785, U785 +786, U786 +787, U787 +788, U788 +789, U789 +790, U790 +791, U791 +792, U792 +793, U793 +794, U794 +795, U795 +796, U796 +797, U797 +798, U798 +799, U799 +800, U800 +801, U801 +802, U802 +803, U803 +804, U804 +805, U805 +806, U806 +807, U807 +808, U808 +809, U809 +810, U810 +811, U811 +812, U812 +813, U813 +814, U814 +815, U815 +816, U816 +817, U817 +818, U818 +819, U819 +820, U820 +821, U821 +822, U822 +823, U823 +824, U824 +825, U825 +826, U826 +827, U827 +828, U828 +829, U829 +830, U830 +831, U831 +832, U832 +833, U833 +834, U834 +835, U835 +836, U836 +837, U837 +838, U838 +839, U839 +840, U840 +841, U841 +842, U842 +843, U843 +844, U844 +845, U845 +846, U846 +847, U847 +848, U848 +849, U849 +850, U850 +851, U851 +852, U852 +853, U853 +854, U854 +855, U855 +856, U856 +857, U857 +858, U858 +859, U859 +860, U860 +861, U861 +862, U862 +863, U863 +864, U864 +865, U865 +866, U866 +867, U867 +868, U868 +869, U869 +870, U870 +871, U871 +872, U872 +873, U873 +874, U874 +875, U875 +876, U876 +877, U877 +878, U878 +879, U879 +880, U880 +881, U881 +882, U882 +883, U883 +884, U884 +885, U885 +886, U886 +887, U887 +888, U888 +889, U889 +890, U890 +891, U891 +892, U892 +893, U893 +894, U894 +895, U895 +896, U896 +897, U897 +898, U898 +899, U899 +900, U900 +901, U901 +902, U902 +903, U903 +904, U904 +905, U905 +906, U906 +907, U907 +908, U908 +909, U909 +910, U910 +911, U911 +912, U912 +913, U913 +914, U914 +915, U915 +916, U916 +917, U917 +918, U918 +919, U919 +920, U920 +921, U921 +922, U922 +923, U923 +924, U924 +925, U925 +926, U926 +927, U927 +928, U928 +929, U929 +930, U930 +931, U931 +932, U932 +933, U933 +934, U934 +935, U935 +936, U936 +937, U937 +938, U938 +939, U939 +940, U940 +941, U941 +942, U942 +943, U943 +944, U944 +945, U945 +946, U946 +947, U947 +948, U948 +949, U949 +950, U950 +951, U951 +952, U952 +953, U953 +954, U954 +955, U955 +956, U956 +957, U957 +958, U958 +959, U959 +960, U960 +961, U961 +962, U962 +963, U963 +964, U964 +965, U965 +966, U966 +967, U967 +968, U968 +969, U969 +970, U970 +971, U971 +972, U972 +973, U973 +974, U974 +975, U975 +976, U976 +977, U977 +978, U978 +979, U979 +980, U980 +981, U981 +982, U982 +983, U983 +984, U984 +985, U985 +986, U986 +987, U987 +988, U988 +989, U989 +990, U990 +991, U991 +992, U992 +993, U993 +994, U994 +995, U995 +996, U996 +997, U997 +998, U998 +999, U999 +1000, U1000 +1001, U1001 +1002, U1002 +1003, U1003 +1004, U1004 +1005, U1005 +1006, U1006 +1007, U1007 +1008, U1008 +1009, U1009 +1010, U1010 +1011, U1011 +1012, U1012 +1013, U1013 +1014, U1014 +1015, U1015 +1016, U1016 +1017, U1017 +1018, U1018 +1019, U1019 +1020, U1020 +1021, U1021 +1022, U1022 +1023, U1023 +1024, U1024 +1025, U1025 +1026, U1026 +1027, U1027 +1028, U1028 +1029, U1029 +1030, U1030 +1031, U1031 +1032, U1032 +1033, U1033 +1034, U1034 +1035, U1035 +1036, U1036 +1037, U1037 +1038, U1038 +1039, U1039 +1040, U1040 +1041, U1041 +1042, U1042 +1043, U1043 +1044, U1044 +1045, U1045 +1046, U1046 +1047, U1047 +1048, U1048 +1049, U1049 +1050, U1050 +1051, U1051 +1052, U1052 +1053, U1053 +1054, U1054 +1055, U1055 +1056, U1056 +1057, U1057 +1058, U1058 +1059, U1059 +1060, U1060 +1061, U1061 +1062, U1062 +1063, U1063 +1064, U1064 +1065, U1065 +1066, U1066 +1067, U1067 +1068, U1068 +1069, U1069 +1070, U1070 +1071, U1071 +1072, U1072 +1073, U1073 +1074, U1074 +1075, U1075 +1076, U1076 +1077, U1077 +1078, U1078 +1079, U1079 +1080, U1080 +1081, U1081 +1082, U1082 +1083, U1083 +1084, U1084 +1085, U1085 +1086, U1086 +1087, U1087 +1088, U1088 +1089, U1089 +1090, U1090 +1091, U1091 +1092, U1092 +1093, U1093 +1094, U1094 +1095, U1095 +1096, U1096 +1097, U1097 +1098, U1098 +1099, U1099 +1100, U1100 +1101, U1101 +1102, U1102 +1103, U1103 +1104, U1104 +1105, U1105 +1106, U1106 +1107, U1107 +1108, U1108 +1109, U1109 +1110, U1110 +1111, U1111 +1112, U1112 +1113, U1113 +1114, U1114 +1115, U1115 +1116, U1116 +1117, U1117 +1118, U1118 +1119, U1119 +1120, U1120 +1121, U1121 +1122, U1122 +1123, U1123 +1124, U1124 +1125, U1125 +1126, U1126 +1127, U1127 +1128, U1128 +1129, U1129 +1130, U1130 +1131, U1131 +1132, U1132 +1133, U1133 +1134, U1134 +1135, U1135 +1136, U1136 +1137, U1137 +1138, U1138 +1139, U1139 +1140, U1140 +1141, U1141 +1142, U1142 +1143, U1143 +1144, U1144 +1145, U1145 +1146, U1146 +1147, U1147 +1148, U1148 +1149, U1149 +1150, U1150 +1151, U1151 +1152, U1152 +1153, U1153 +1154, U1154 +1155, U1155 +1156, U1156 +1157, U1157 +1158, U1158 +1159, U1159 +1160, U1160 +1161, U1161 +1162, U1162 +1163, U1163 +1164, U1164 +1165, U1165 +1166, U1166 +1167, U1167 +1168, U1168 +1169, U1169 +1170, U1170 +1171, U1171 +1172, U1172 +1173, U1173 +1174, U1174 +1175, U1175 +1176, U1176 +1177, U1177 +1178, U1178 +1179, U1179 +1180, U1180 +1181, U1181 +1182, U1182 +1183, U1183 +1184, U1184 +1185, U1185 +1186, U1186 +1187, U1187 +1188, U1188 +1189, U1189 +1190, U1190 +1191, U1191 +1192, U1192 +1193, U1193 +1194, U1194 +1195, U1195 +1196, U1196 +1197, U1197 +1198, U1198 +1199, U1199 +1200, U1200 +1201, U1201 +1202, U1202 +1203, U1203 +1204, U1204 +1205, U1205 +1206, U1206 +1207, U1207 +1208, U1208 +1209, U1209 +1210, U1210 +1211, U1211 +1212, U1212 +1213, U1213 +1214, U1214 +1215, U1215 +1216, U1216 +1217, U1217 +1218, U1218 +1219, U1219 +1220, U1220 +1221, U1221 +1222, U1222 +1223, U1223 +1224, U1224 +1225, U1225 +1226, U1226 +1227, U1227 +1228, U1228 +1229, U1229 +1230, U1230 +1231, U1231 +1232, U1232 +1233, U1233 +1234, U1234 +1235, U1235 +1236, U1236 +1237, U1237 +1238, U1238 +1239, U1239 +1240, U1240 +1241, U1241 +1242, U1242 +1243, U1243 +1244, U1244 +1245, U1245 +1246, U1246 +1247, U1247 +1248, U1248 +1249, U1249 +1250, U1250 +1251, U1251 +1252, U1252 +1253, U1253 +1254, U1254 +1255, U1255 +1256, U1256 +1257, U1257 +1258, U1258 +1259, U1259 +1260, U1260 +1261, U1261 +1262, U1262 +1263, U1263 +1264, U1264 +1265, U1265 +1266, U1266 +1267, U1267 +1268, U1268 +1269, U1269 +1270, U1270 +1271, U1271 +1272, U1272 +1273, U1273 +1274, U1274 +1275, U1275 +1276, U1276 +1277, U1277 +1278, U1278 +1279, U1279 +1280, U1280 +1281, U1281 +1282, U1282 +1283, U1283 +1284, U1284 +1285, U1285 +1286, U1286 +1287, U1287 +1288, U1288 +1289, U1289 +1290, U1290 +1291, U1291 +1292, U1292 +1293, U1293 +1294, U1294 +1295, U1295 +1296, U1296 +1297, U1297 +1298, U1298 +1299, U1299 +1300, U1300 +1301, U1301 +1302, U1302 +1303, U1303 +1304, U1304 +1305, U1305 +1306, U1306 +1307, U1307 +1308, U1308 +1309, U1309 +1310, U1310 +1311, U1311 +1312, U1312 +1313, U1313 +1314, U1314 +1315, U1315 +1316, U1316 +1317, U1317 +1318, U1318 +1319, U1319 +1320, U1320 +1321, U1321 +1322, U1322 +1323, U1323 +1324, U1324 +1325, U1325 +1326, U1326 +1327, U1327 +1328, U1328 +1329, U1329 +1330, U1330 +1331, U1331 +1332, U1332 +1333, U1333 +1334, U1334 +1335, U1335 +1336, U1336 +1337, U1337 +1338, U1338 +1339, U1339 +1340, U1340 +1341, U1341 +1342, U1342 +1343, U1343 +1344, U1344 +1345, U1345 +1346, U1346 +1347, U1347 +1348, U1348 +1349, U1349 +1350, U1350 +1351, U1351 +1352, U1352 +1353, U1353 +1354, U1354 +1355, U1355 +1356, U1356 +1357, U1357 +1358, U1358 +1359, U1359 +1360, U1360 +1361, U1361 +1362, U1362 +1363, U1363 +1364, U1364 +1365, U1365 +1366, U1366 +1367, U1367 +1368, U1368 +1369, U1369 +1370, U1370 +1371, U1371 +1372, U1372 +1373, U1373 +1374, U1374 +1375, U1375 +1376, U1376 +1377, U1377 +1378, U1378 +1379, U1379 +1380, U1380 +1381, U1381 +1382, U1382 +1383, U1383 +1384, U1384 +1385, U1385 +1386, U1386 +1387, U1387 +1388, U1388 +1389, U1389 +1390, U1390 +1391, U1391 +1392, U1392 +1393, U1393 +1394, U1394 +1395, U1395 +1396, U1396 +1397, U1397 +1398, U1398 +1399, U1399 +1400, U1400 +1401, U1401 +1402, U1402 +1403, U1403 +1404, U1404 +1405, U1405 +1406, U1406 +1407, U1407 +1408, U1408 +1409, U1409 +1410, U1410 +1411, U1411 +1412, U1412 +1413, U1413 +1414, U1414 +1415, U1415 +1416, U1416 +1417, U1417 +1418, U1418 +1419, U1419 +1420, U1420 +1421, U1421 +1422, U1422 +1423, U1423 +1424, U1424 +1425, U1425 +1426, U1426 +1427, U1427 +1428, U1428 +1429, U1429 +1430, U1430 +1431, U1431 +1432, U1432 +1433, U1433 +1434, U1434 +1435, U1435 +1436, U1436 +1437, U1437 +1438, U1438 +1439, U1439 +1440, U1440 +1441, U1441 +1442, U1442 +1443, U1443 +1444, U1444 +1445, U1445 +1446, U1446 +1447, U1447 +1448, U1448 +1449, U1449 +1450, U1450 +1451, U1451 +1452, U1452 +1453, U1453 +1454, U1454 +1455, U1455 +1456, U1456 +1457, U1457 +1458, U1458 +1459, U1459 +1460, U1460 +1461, U1461 +1462, U1462 +1463, U1463 +1464, U1464 +1465, U1465 +1466, U1466 +1467, U1467 +1468, U1468 +1469, U1469 +1470, U1470 +1471, U1471 +1472, U1472 +1473, U1473 +1474, U1474 +1475, U1475 +1476, U1476 +1477, U1477 +1478, U1478 +1479, U1479 +1480, U1480 +1481, U1481 +1482, U1482 +1483, U1483 +1484, U1484 +1485, U1485 +1486, U1486 +1487, U1487 +1488, U1488 +1489, U1489 +1490, U1490 +1491, U1491 +1492, U1492 +1493, U1493 +1494, U1494 +1495, U1495 +1496, U1496 +1497, U1497 +1498, U1498 +1499, U1499 +1500, U1500 +1501, U1501 +1502, U1502 +1503, U1503 +1504, U1504 +1505, U1505 +1506, U1506 +1507, U1507 +1508, U1508 +1509, U1509 +1510, U1510 +1511, U1511 +1512, U1512 +1513, U1513 +1514, U1514 +1515, U1515 +1516, U1516 +1517, U1517 +1518, U1518 +1519, U1519 +1520, U1520 +1521, U1521 +1522, U1522 +1523, U1523 +1524, U1524 +1525, U1525 +1526, U1526 +1527, U1527 +1528, U1528 +1529, U1529 +1530, U1530 +1531, U1531 +1532, U1532 +1533, U1533 +1534, U1534 +1535, U1535 +1536, U1536 +1537, U1537 +1538, U1538 +1539, U1539 +1540, U1540 +1541, U1541 +1542, U1542 +1543, U1543 +1544, U1544 +1545, U1545 +1546, U1546 +1547, U1547 +1548, U1548 +1549, U1549 +1550, U1550 +1551, U1551 +1552, U1552 +1553, U1553 +1554, U1554 +1555, U1555 +1556, U1556 +1557, U1557 +1558, U1558 +1559, U1559 +1560, U1560 +1561, U1561 +1562, U1562 +1563, U1563 +1564, U1564 +1565, U1565 +1566, U1566 +1567, U1567 +1568, U1568 +1569, U1569 +1570, U1570 +1571, U1571 +1572, U1572 +1573, U1573 +1574, U1574 +1575, U1575 +1576, U1576 +1577, U1577 +1578, U1578 +1579, U1579 +1580, U1580 +1581, U1581 +1582, U1582 +1583, U1583 +1584, U1584 +1585, U1585 +1586, U1586 +1587, U1587 +1588, U1588 +1589, U1589 +1590, U1590 +1591, U1591 +1592, U1592 +1593, U1593 +1594, U1594 +1595, U1595 +1596, U1596 +1597, U1597 +1598, U1598 +1599, U1599 +1600, U1600 +1601, U1601 +1602, U1602 +1603, U1603 +1604, U1604 +1605, U1605 +1606, U1606 +1607, U1607 +1608, U1608 +1609, U1609 +1610, U1610 +1611, U1611 +1612, U1612 +1613, U1613 +1614, U1614 +1615, U1615 +1616, U1616 +1617, U1617 +1618, U1618 +1619, U1619 +1620, U1620 +1621, U1621 +1622, U1622 +1623, U1623 +1624, U1624 +1625, U1625 +1626, U1626 +1627, U1627 +1628, U1628 +1629, U1629 +1630, U1630 +1631, U1631 +1632, U1632 +1633, U1633 +1634, U1634 +1635, U1635 +1636, U1636 +1637, U1637 +1638, U1638 +1639, U1639 +1640, U1640 +1641, U1641 +1642, U1642 +1643, U1643 +1644, U1644 +1645, U1645 +1646, U1646 +1647, U1647 +1648, U1648 +1649, U1649 +1650, U1650 +1651, U1651 +1652, U1652 +1653, U1653 +1654, U1654 +1655, U1655 +1656, U1656 +1657, U1657 +1658, U1658 +1659, U1659 +1660, U1660 +1661, U1661 +1662, U1662 +1663, U1663 +1664, U1664 +1665, U1665 +1666, U1666 +1667, U1667 +1668, U1668 +1669, U1669 +1670, U1670 +1671, U1671 +1672, U1672 +1673, U1673 +1674, U1674 +1675, U1675 +1676, U1676 +1677, U1677 +1678, U1678 +1679, U1679 +1680, U1680 +1681, U1681 +1682, U1682 +1683, U1683 +1684, U1684 +1685, U1685 +1686, U1686 +1687, U1687 +1688, U1688 +1689, U1689 +1690, U1690 +1691, U1691 +1692, U1692 +1693, U1693 +1694, U1694 +1695, U1695 +1696, U1696 +1697, U1697 +1698, U1698 +1699, U1699 +1700, U1700 +1701, U1701 +1702, U1702 +1703, U1703 +1704, U1704 +1705, U1705 +1706, U1706 +1707, U1707 +1708, U1708 +1709, U1709 +1710, U1710 +1711, U1711 +1712, U1712 +1713, U1713 +1714, U1714 +1715, U1715 +1716, U1716 +1717, U1717 +1718, U1718 +1719, U1719 +1720, U1720 +1721, U1721 +1722, U1722 +1723, U1723 +1724, U1724 +1725, U1725 +1726, U1726 +1727, U1727 +1728, U1728 +1729, U1729 +1730, U1730 +1731, U1731 +1732, U1732 +1733, U1733 +1734, U1734 +1735, U1735 +1736, U1736 +1737, U1737 +1738, U1738 +1739, U1739 +1740, U1740 +1741, U1741 +1742, U1742 +1743, U1743 +1744, U1744 +1745, U1745 +1746, U1746 +1747, U1747 +1748, U1748 +1749, U1749 +1750, U1750 +1751, U1751 +1752, U1752 +1753, U1753 +1754, U1754 +1755, U1755 +1756, U1756 +1757, U1757 +1758, U1758 +1759, U1759 +1760, U1760 +1761, U1761 +1762, U1762 +1763, U1763 +1764, U1764 +1765, U1765 +1766, U1766 +1767, U1767 +1768, U1768 +1769, U1769 +1770, U1770 +1771, U1771 +1772, U1772 +1773, U1773 +1774, U1774 +1775, U1775 +1776, U1776 +1777, U1777 +1778, U1778 +1779, U1779 +1780, U1780 +1781, U1781 +1782, U1782 +1783, U1783 +1784, U1784 +1785, U1785 +1786, U1786 +1787, U1787 +1788, U1788 +1789, U1789 +1790, U1790 +1791, U1791 +1792, U1792 +1793, U1793 +1794, U1794 +1795, U1795 +1796, U1796 +1797, U1797 +1798, U1798 +1799, U1799 +1800, U1800 +1801, U1801 +1802, U1802 +1803, U1803 +1804, U1804 +1805, U1805 +1806, U1806 +1807, U1807 +1808, U1808 +1809, U1809 +1810, U1810 +1811, U1811 +1812, U1812 +1813, U1813 +1814, U1814 +1815, U1815 +1816, U1816 +1817, U1817 +1818, U1818 +1819, U1819 +1820, U1820 +1821, U1821 +1822, U1822 +1823, U1823 +1824, U1824 +1825, U1825 +1826, U1826 +1827, U1827 +1828, U1828 +1829, U1829 +1830, U1830 +1831, U1831 +1832, U1832 +1833, U1833 +1834, U1834 +1835, U1835 +1836, U1836 +1837, U1837 +1838, U1838 +1839, U1839 +1840, U1840 +1841, U1841 +1842, U1842 +1843, U1843 +1844, U1844 +1845, U1845 +1846, U1846 +1847, U1847 +1848, U1848 +1849, U1849 +1850, U1850 +1851, U1851 +1852, U1852 +1853, U1853 +1854, U1854 +1855, U1855 +1856, U1856 +1857, U1857 +1858, U1858 +1859, U1859 +1860, U1860 +1861, U1861 +1862, U1862 +1863, U1863 +1864, U1864 +1865, U1865 +1866, U1866 +1867, U1867 +1868, U1868 +1869, U1869 +1870, U1870 +1871, U1871 +1872, U1872 +1873, U1873 +1874, U1874 +1875, U1875 +1876, U1876 +1877, U1877 +1878, U1878 +1879, U1879 +1880, U1880 +1881, U1881 +1882, U1882 +1883, U1883 +1884, U1884 +1885, U1885 +1886, U1886 +1887, U1887 +1888, U1888 +1889, U1889 +1890, U1890 +1891, U1891 +1892, U1892 +1893, U1893 +1894, U1894 +1895, U1895 +1896, U1896 +1897, U1897 +1898, U1898 +1899, U1899 +1900, U1900 +1901, U1901 +1902, U1902 +1903, U1903 +1904, U1904 +1905, U1905 +1906, U1906 +1907, U1907 +1908, U1908 +1909, U1909 +1910, U1910 +1911, U1911 +1912, U1912 +1913, U1913 +1914, U1914 +1915, U1915 +1916, U1916 +1917, U1917 +1918, U1918 +1919, U1919 +1920, U1920 +1921, U1921 +1922, U1922 +1923, U1923 +1924, U1924 +1925, U1925 +1926, U1926 +1927, U1927 +1928, U1928 +1929, U1929 +1930, U1930 +1931, U1931 +1932, U1932 +1933, U1933 +1934, U1934 +1935, U1935 +1936, U1936 +1937, U1937 +1938, U1938 +1939, U1939 +1940, U1940 +1941, U1941 +1942, U1942 +1943, U1943 +1944, U1944 +1945, U1945 +1946, U1946 +1947, U1947 +1948, U1948 +1949, U1949 +1950, U1950 +1951, U1951 +1952, U1952 +1953, U1953 +1954, U1954 +1955, U1955 +1956, U1956 +1957, U1957 +1958, U1958 +1959, U1959 +1960, U1960 +1961, U1961 +1962, U1962 +1963, U1963 +1964, U1964 +1965, U1965 +1966, U1966 +1967, U1967 +1968, U1968 +1969, U1969 +1970, U1970 +1971, U1971 +1972, U1972 +1973, U1973 +1974, U1974 +1975, U1975 +1976, U1976 +1977, U1977 +1978, U1978 +1979, U1979 +1980, U1980 +1981, U1981 +1982, U1982 +1983, U1983 +1984, U1984 +1985, U1985 +1986, U1986 +1987, U1987 +1988, U1988 +1989, U1989 +1990, U1990 +1991, U1991 +1992, U1992 +1993, U1993 +1994, U1994 +1995, U1995 +1996, U1996 +1997, U1997 +1998, U1998 +1999, U1999 +2000, U2000 +2001, U2001 +2002, U2002 +2003, U2003 +2004, U2004 +2005, U2005 +2006, U2006 +2007, U2007 +2008, U2008 +2009, U2009 +2010, U2010 +2011, U2011 +2012, U2012 +2013, U2013 +2014, U2014 +2015, U2015 +2016, U2016 +2017, U2017 +2018, U2018 +2019, U2019 +2020, U2020 +2021, U2021 +2022, U2022 +2023, U2023 +2024, U2024 +2025, U2025 +2026, U2026 +2027, U2027 +2028, U2028 +2029, U2029 +2030, U2030 +2031, U2031 +2032, U2032 +2033, U2033 +2034, U2034 +2035, U2035 +2036, U2036 +2037, U2037 +2038, U2038 +2039, U2039 +2040, U2040 +2041, U2041 +2042, U2042 +2043, U2043 +2044, U2044 +2045, U2045 +2046, U2046 +2047, U2047 +2048, U2048 +2049, U2049 +2050, U2050 +2051, U2051 +2052, U2052 +2053, U2053 +2054, U2054 +2055, U2055 +2056, U2056 +2057, U2057 +2058, U2058 +2059, U2059 +2060, U2060 +2061, U2061 +2062, U2062 +2063, U2063 +2064, U2064 +2065, U2065 +2066, U2066 +2067, U2067 +2068, U2068 +2069, U2069 +2070, U2070 +2071, U2071 +2072, U2072 +2073, U2073 +2074, U2074 +2075, U2075 +2076, U2076 +2077, U2077 +2078, U2078 +2079, U2079 +2080, U2080 +2081, U2081 +2082, U2082 +2083, U2083 +2084, U2084 +2085, U2085 +2086, U2086 +2087, U2087 +2088, U2088 +2089, U2089 +2090, U2090 +2091, U2091 +2092, U2092 +2093, U2093 +2094, U2094 +2095, U2095 +2096, U2096 +2097, U2097 +2098, U2098 +2099, U2099 +2100, U2100 +2101, U2101 +2102, U2102 +2103, U2103 +2104, U2104 +2105, U2105 +2106, U2106 +2107, U2107 +2108, U2108 +2109, U2109 +2110, U2110 +2111, U2111 +2112, U2112 +2113, U2113 +2114, U2114 +2115, U2115 +2116, U2116 +2117, U2117 +2118, U2118 +2119, U2119 +2120, U2120 +2121, U2121 +2122, U2122 +2123, U2123 +2124, U2124 +2125, U2125 +2126, U2126 +2127, U2127 +2128, U2128 +2129, U2129 +2130, U2130 +2131, U2131 +2132, U2132 +2133, U2133 +2134, U2134 +2135, U2135 +2136, U2136 +2137, U2137 +2138, U2138 +2139, U2139 +2140, U2140 +2141, U2141 +2142, U2142 +2143, U2143 +2144, U2144 +2145, U2145 +2146, U2146 +2147, U2147 +2148, U2148 +2149, U2149 +2150, U2150 +2151, U2151 +2152, U2152 +2153, U2153 +2154, U2154 +2155, U2155 +2156, U2156 +2157, U2157 +2158, U2158 +2159, U2159 +2160, U2160 +2161, U2161 +2162, U2162 +2163, U2163 +2164, U2164 +2165, U2165 +2166, U2166 +2167, U2167 +2168, U2168 +2169, U2169 +2170, U2170 +2171, U2171 +2172, U2172 +2173, U2173 +2174, U2174 +2175, U2175 +2176, U2176 +2177, U2177 +2178, U2178 +2179, U2179 +2180, U2180 +2181, U2181 +2182, U2182 +2183, U2183 +2184, U2184 +2185, U2185 +2186, U2186 +2187, U2187 +2188, U2188 +2189, U2189 +2190, U2190 +2191, U2191 +2192, U2192 +2193, U2193 +2194, U2194 +2195, U2195 +2196, U2196 +2197, U2197 +2198, U2198 +2199, U2199 +2200, U2200 +2201, U2201 +2202, U2202 +2203, U2203 +2204, U2204 +2205, U2205 +2206, U2206 +2207, U2207 +2208, U2208 +2209, U2209 +2210, U2210 +2211, U2211 +2212, U2212 +2213, U2213 +2214, U2214 +2215, U2215 +2216, U2216 +2217, U2217 +2218, U2218 +2219, U2219 +2220, U2220 +2221, U2221 +2222, U2222 +2223, U2223 +2224, U2224 +2225, U2225 +2226, U2226 +2227, U2227 +2228, U2228 +2229, U2229 +2230, U2230 +2231, U2231 +2232, U2232 +2233, U2233 +2234, U2234 +2235, U2235 +2236, U2236 +2237, U2237 +2238, U2238 +2239, U2239 +2240, U2240 +2241, U2241 +2242, U2242 +2243, U2243 +2244, U2244 +2245, U2245 +2246, U2246 +2247, U2247 +2248, U2248 +2249, U2249 +2250, U2250 +2251, U2251 +2252, U2252 +2253, U2253 +2254, U2254 +2255, U2255 +2256, U2256 +2257, U2257 +2258, U2258 +2259, U2259 +2260, U2260 +2261, U2261 +2262, U2262 +2263, U2263 +2264, U2264 +2265, U2265 +2266, U2266 +2267, U2267 +2268, U2268 +2269, U2269 +2270, U2270 +2271, U2271 +2272, U2272 +2273, U2273 +2274, U2274 +2275, U2275 +2276, U2276 +2277, U2277 +2278, U2278 +2279, U2279 +2280, U2280 +2281, U2281 +2282, U2282 +2283, U2283 +2284, U2284 +2285, U2285 +2286, U2286 +2287, U2287 +2288, U2288 +2289, U2289 +2290, U2290 +2291, U2291 +2292, U2292 +2293, U2293 +2294, U2294 +2295, U2295 +2296, U2296 +2297, U2297 +2298, U2298 +2299, U2299 +2300, U2300 +2301, U2301 +2302, U2302 +2303, U2303 +2304, U2304 +2305, U2305 +2306, U2306 +2307, U2307 +2308, U2308 +2309, U2309 +2310, U2310 +2311, U2311 +2312, U2312 +2313, U2313 +2314, U2314 +2315, U2315 +2316, U2316 +2317, U2317 +2318, U2318 +2319, U2319 +2320, U2320 +2321, U2321 +2322, U2322 +2323, U2323 +2324, U2324 +2325, U2325 +2326, U2326 +2327, U2327 +2328, U2328 +2329, U2329 +2330, U2330 +2331, U2331 +2332, U2332 +2333, U2333 +2334, U2334 +2335, U2335 +2336, U2336 +2337, U2337 +2338, U2338 +2339, U2339 +2340, U2340 +2341, U2341 +2342, U2342 +2343, U2343 +2344, U2344 +2345, U2345 +2346, U2346 +2347, U2347 +2348, U2348 +2349, U2349 +2350, U2350 +2351, U2351 +2352, U2352 +2353, U2353 +2354, U2354 +2355, U2355 +2356, U2356 +2357, U2357 +2358, U2358 +2359, U2359 +2360, U2360 +2361, U2361 +2362, U2362 +2363, U2363 +2364, U2364 +2365, U2365 +2366, U2366 +2367, U2367 +2368, U2368 +2369, U2369 +2370, U2370 +2371, U2371 +2372, U2372 +2373, U2373 +2374, U2374 +2375, U2375 +2376, U2376 +2377, U2377 +2378, U2378 +2379, U2379 +2380, U2380 +2381, U2381 +2382, U2382 +2383, U2383 +2384, U2384 +2385, U2385 +2386, U2386 +2387, U2387 +2388, U2388 +2389, U2389 +2390, U2390 +2391, U2391 +2392, U2392 +2393, U2393 +2394, U2394 +2395, U2395 +2396, U2396 +2397, U2397 +2398, U2398 +2399, U2399 +2400, U2400 +2401, U2401 +2402, U2402 +2403, U2403 +2404, U2404 +2405, U2405 +2406, U2406 +2407, U2407 +2408, U2408 +2409, U2409 +2410, U2410 +2411, U2411 +2412, U2412 +2413, U2413 +2414, U2414 +2415, U2415 +2416, U2416 +2417, U2417 +2418, U2418 +2419, U2419 +2420, U2420 +2421, U2421 +2422, U2422 +2423, U2423 +2424, U2424 +2425, U2425 +2426, U2426 +2427, U2427 +2428, U2428 +2429, U2429 +2430, U2430 +2431, U2431 +2432, U2432 +2433, U2433 +2434, U2434 +2435, U2435 +2436, U2436 +2437, U2437 +2438, U2438 +2439, U2439 +2440, U2440 +2441, U2441 +2442, U2442 +2443, U2443 +2444, U2444 +2445, U2445 +2446, U2446 +2447, U2447 +2448, U2448 +2449, U2449 +2450, U2450 +2451, U2451 +2452, U2452 +2453, U2453 +2454, U2454 +2455, U2455 +2456, U2456 +2457, U2457 +2458, U2458 +2459, U2459 +2460, U2460 +2461, U2461 +2462, U2462 +2463, U2463 +2464, U2464 +2465, U2465 +2466, U2466 +2467, U2467 +2468, U2468 +2469, U2469 +2470, U2470 +2471, U2471 +2472, U2472 +2473, U2473 +2474, U2474 +2475, U2475 +2476, U2476 +2477, U2477 +2478, U2478 +2479, U2479 +2480, U2480 +2481, U2481 +2482, U2482 +2483, U2483 +2484, U2484 +2485, U2485 +2486, U2486 +2487, U2487 +2488, U2488 +2489, U2489 +2490, U2490 +2491, U2491 +2492, U2492 +2493, U2493 +2494, U2494 +2495, U2495 +2496, U2496 +2497, U2497 +2498, U2498 +2499, U2499 +2500, U2500 +2501, U2501 +2502, U2502 +2503, U2503 +2504, U2504 +2505, U2505 +2506, U2506 +2507, U2507 +2508, U2508 +2509, U2509 +2510, U2510 +2511, U2511 +2512, U2512 +2513, U2513 +2514, U2514 +2515, U2515 +2516, U2516 +2517, U2517 +2518, U2518 +2519, U2519 +2520, U2520 +2521, U2521 +2522, U2522 +2523, U2523 +2524, U2524 +2525, U2525 +2526, U2526 +2527, U2527 +2528, U2528 +2529, U2529 +2530, U2530 +2531, U2531 +2532, U2532 +2533, U2533 +2534, U2534 +2535, U2535 +2536, U2536 +2537, U2537 +2538, U2538 +2539, U2539 +2540, U2540 +2541, U2541 +2542, U2542 +2543, U2543 +2544, U2544 +2545, U2545 +2546, U2546 +2547, U2547 +2548, U2548 +2549, U2549 +2550, U2550 +2551, U2551 +2552, U2552 +2553, U2553 +2554, U2554 +2555, U2555 +2556, U2556 +2557, U2557 +2558, U2558 +2559, U2559 +2560, U2560 +2561, U2561 +2562, U2562 +2563, U2563 +2564, U2564 +2565, U2565 +2566, U2566 +2567, U2567 +2568, U2568 +2569, U2569 +2570, U2570 +2571, U2571 +2572, U2572 +2573, U2573 +2574, U2574 +2575, U2575 +2576, U2576 +2577, U2577 +2578, U2578 +2579, U2579 +2580, U2580 +2581, U2581 +2582, U2582 +2583, U2583 +2584, U2584 +2585, U2585 +2586, U2586 +2587, U2587 +2588, U2588 +2589, U2589 +2590, U2590 +2591, U2591 +2592, U2592 +2593, U2593 +2594, U2594 +2595, U2595 +2596, U2596 +2597, U2597 +2598, U2598 +2599, U2599 +2600, U2600 +2601, U2601 +2602, U2602 +2603, U2603 +2604, U2604 +2605, U2605 +2606, U2606 +2607, U2607 +2608, U2608 +2609, U2609 +2610, U2610 +2611, U2611 +2612, U2612 +2613, U2613 +2614, U2614 +2615, U2615 +2616, U2616 +2617, U2617 +2618, U2618 +2619, U2619 +2620, U2620 +2621, U2621 +2622, U2622 +2623, U2623 +2624, U2624 +2625, U2625 +2626, U2626 +2627, U2627 +2628, U2628 +2629, U2629 +2630, U2630 +2631, U2631 +2632, U2632 +2633, U2633 +2634, U2634 +2635, U2635 +2636, U2636 +2637, U2637 +2638, U2638 +2639, U2639 +2640, U2640 +2641, U2641 +2642, U2642 +2643, U2643 +2644, U2644 +2645, U2645 +2646, U2646 +2647, U2647 +2648, U2648 +2649, U2649 +2650, U2650 +2651, U2651 +2652, U2652 +2653, U2653 +2654, U2654 +2655, U2655 +2656, U2656 +2657, U2657 +2658, U2658 +2659, U2659 +2660, U2660 +2661, U2661 +2662, U2662 +2663, U2663 +2664, U2664 +2665, U2665 +2666, U2666 +2667, U2667 +2668, U2668 +2669, U2669 +2670, U2670 +2671, U2671 +2672, U2672 +2673, U2673 +2674, U2674 +2675, U2675 +2676, U2676 +2677, U2677 +2678, U2678 +2679, U2679 +2680, U2680 +2681, U2681 +2682, U2682 +2683, U2683 +2684, U2684 +2685, U2685 +2686, U2686 +2687, U2687 +2688, U2688 +2689, U2689 +2690, U2690 +2691, U2691 +2692, U2692 +2693, U2693 +2694, U2694 +2695, U2695 +2696, U2696 +2697, U2697 +2698, U2698 +2699, U2699 +2700, U2700 +2701, U2701 +2702, U2702 +2703, U2703 +2704, U2704 +2705, U2705 +2706, U2706 +2707, U2707 +2708, U2708 +2709, U2709 +2710, U2710 +2711, U2711 +2712, U2712 +2713, U2713 +2714, U2714 +2715, U2715 +2716, U2716 +2717, U2717 +2718, U2718 +2719, U2719 +2720, U2720 +2721, U2721 +2722, U2722 +2723, U2723 +2724, U2724 +2725, U2725 +2726, U2726 +2727, U2727 +2728, U2728 +2729, U2729 +2730, U2730 +2731, U2731 +2732, U2732 +2733, U2733 +2734, U2734 +2735, U2735 +2736, U2736 +2737, U2737 +2738, U2738 +2739, U2739 +2740, U2740 +2741, U2741 +2742, U2742 +2743, U2743 +2744, U2744 +2745, U2745 +2746, U2746 +2747, U2747 +2748, U2748 +2749, U2749 +2750, U2750 +2751, U2751 +2752, U2752 +2753, U2753 +2754, U2754 +2755, U2755 +2756, U2756 +2757, U2757 +2758, U2758 +2759, U2759 +2760, U2760 +2761, U2761 +2762, U2762 +2763, U2763 +2764, U2764 +2765, U2765 +2766, U2766 +2767, U2767 +2768, U2768 +2769, U2769 +2770, U2770 +2771, U2771 +2772, U2772 +2773, U2773 +2774, U2774 +2775, U2775 +2776, U2776 +2777, U2777 +2778, U2778 +2779, U2779 +2780, U2780 +2781, U2781 +2782, U2782 +2783, U2783 +2784, U2784 +2785, U2785 +2786, U2786 +2787, U2787 +2788, U2788 +2789, U2789 +2790, U2790 +2791, U2791 +2792, U2792 +2793, U2793 +2794, U2794 +2795, U2795 +2796, U2796 +2797, U2797 +2798, U2798 +2799, U2799 +2800, U2800 +2801, U2801 +2802, U2802 +2803, U2803 +2804, U2804 +2805, U2805 +2806, U2806 +2807, U2807 +2808, U2808 +2809, U2809 +2810, U2810 +2811, U2811 +2812, U2812 +2813, U2813 +2814, U2814 +2815, U2815 +2816, U2816 +2817, U2817 +2818, U2818 +2819, U2819 +2820, U2820 +2821, U2821 +2822, U2822 +2823, U2823 +2824, U2824 +2825, U2825 +2826, U2826 +2827, U2827 +2828, U2828 +2829, U2829 +2830, U2830 +2831, U2831 +2832, U2832 +2833, U2833 +2834, U2834 +2835, U2835 +2836, U2836 +2837, U2837 +2838, U2838 +2839, U2839 +2840, U2840 +2841, U2841 +2842, U2842 +2843, U2843 +2844, U2844 +2845, U2845 +2846, U2846 +2847, U2847 +2848, U2848 +2849, U2849 +2850, U2850 +2851, U2851 +2852, U2852 +2853, U2853 +2854, U2854 +2855, U2855 +2856, U2856 +2857, U2857 +2858, U2858 +2859, U2859 +2860, U2860 +2861, U2861 +2862, U2862 +2863, U2863 +2864, U2864 +2865, U2865 +2866, U2866 +2867, U2867 +2868, U2868 +2869, U2869 +2870, U2870 +2871, U2871 +2872, U2872 +2873, U2873 +2874, U2874 +2875, U2875 +2876, U2876 +2877, U2877 +2878, U2878 +2879, U2879 +2880, U2880 +2881, U2881 +2882, U2882 +2883, U2883 +2884, U2884 +2885, U2885 +2886, U2886 +2887, U2887 +2888, U2888 +2889, U2889 +2890, U2890 +2891, U2891 +2892, U2892 +2893, U2893 +2894, U2894 +2895, U2895 +2896, U2896 +2897, U2897 +2898, U2898 +2899, U2899 +2900, U2900 +2901, U2901 +2902, U2902 +2903, U2903 +2904, U2904 +2905, U2905 +2906, U2906 +2907, U2907 +2908, U2908 +2909, U2909 +2910, U2910 +2911, U2911 +2912, U2912 +2913, U2913 +2914, U2914 +2915, U2915 +2916, U2916 +2917, U2917 +2918, U2918 +2919, U2919 +2920, U2920 +2921, U2921 +2922, U2922 +2923, U2923 +2924, U2924 +2925, U2925 +2926, U2926 +2927, U2927 +2928, U2928 +2929, U2929 +2930, U2930 +2931, U2931 +2932, U2932 +2933, U2933 +2934, U2934 +2935, U2935 +2936, U2936 +2937, U2937 +2938, U2938 +2939, U2939 +2940, U2940 +2941, U2941 +2942, U2942 +2943, U2943 +2944, U2944 +2945, U2945 +2946, U2946 +2947, U2947 +2948, U2948 +2949, U2949 +2950, U2950 +2951, U2951 +2952, U2952 +2953, U2953 +2954, U2954 +2955, U2955 +2956, U2956 +2957, U2957 +2958, U2958 +2959, U2959 +2960, U2960 +2961, U2961 +2962, U2962 +2963, U2963 +2964, U2964 +2965, U2965 +2966, U2966 +2967, U2967 +2968, U2968 +2969, U2969 +2970, U2970 +2971, U2971 +2972, U2972 +2973, U2973 +2974, U2974 +2975, U2975 +2976, U2976 +2977, U2977 +2978, U2978 +2979, U2979 +2980, U2980 +2981, U2981 +2982, U2982 +2983, U2983 +2984, U2984 +2985, U2985 +2986, U2986 +2987, U2987 +2988, U2988 +2989, U2989 +2990, U2990 +2991, U2991 +2992, U2992 +2993, U2993 +2994, U2994 +2995, U2995 +2996, U2996 +2997, U2997 +2998, U2998 +2999, U2999 +3000, U3000 +3001, U3001 +3002, U3002 +3003, U3003 +3004, U3004 +3005, U3005 +3006, U3006 +3007, U3007 +3008, U3008 +3009, U3009 +3010, U3010 +3011, U3011 +3012, U3012 +3013, U3013 +3014, U3014 +3015, U3015 +3016, U3016 +3017, U3017 +3018, U3018 +3019, U3019 +3020, U3020 +3021, U3021 +3022, U3022 +3023, U3023 +3024, U3024 +3025, U3025 +3026, U3026 +3027, U3027 +3028, U3028 +3029, U3029 +3030, U3030 +3031, U3031 +3032, U3032 +3033, U3033 +3034, U3034 +3035, U3035 +3036, U3036 +3037, U3037 +3038, U3038 +3039, U3039 +3040, U3040 +3041, U3041 +3042, U3042 +3043, U3043 +3044, U3044 +3045, U3045 +3046, U3046 +3047, U3047 +3048, U3048 +3049, U3049 +3050, U3050 +3051, U3051 +3052, U3052 +3053, U3053 +3054, U3054 +3055, U3055 +3056, U3056 +3057, U3057 +3058, U3058 +3059, U3059 +3060, U3060 +3061, U3061 +3062, U3062 +3063, U3063 +3064, U3064 +3065, U3065 +3066, U3066 +3067, U3067 +3068, U3068 +3069, U3069 +3070, U3070 +3071, U3071 +3072, U3072 +3073, U3073 +3074, U3074 +3075, U3075 +3076, U3076 +3077, U3077 +3078, U3078 +3079, U3079 +3080, U3080 +3081, U3081 +3082, U3082 +3083, U3083 +3084, U3084 +3085, U3085 +3086, U3086 +3087, U3087 +3088, U3088 +3089, U3089 +3090, U3090 +3091, U3091 +3092, U3092 +3093, U3093 +3094, U3094 +3095, U3095 +3096, U3096 +3097, U3097 +3098, U3098 +3099, U3099 +3100, U3100 +3101, U3101 +3102, U3102 +3103, U3103 +3104, U3104 +3105, U3105 +3106, U3106 +3107, U3107 +3108, U3108 +3109, U3109 +3110, U3110 +3111, U3111 +3112, U3112 +3113, U3113 +3114, U3114 +3115, U3115 +3116, U3116 +3117, U3117 +3118, U3118 +3119, U3119 +3120, U3120 +3121, U3121 +3122, U3122 +3123, U3123 +3124, U3124 +3125, U3125 +3126, U3126 +3127, U3127 +3128, U3128 +3129, U3129 +3130, U3130 +3131, U3131 +3132, U3132 +3133, U3133 +3134, U3134 +3135, U3135 +3136, U3136 +3137, U3137 +3138, U3138 +3139, U3139 +3140, U3140 +3141, U3141 +3142, U3142 +3143, U3143 +3144, U3144 +3145, U3145 +3146, U3146 +3147, U3147 +3148, U3148 +3149, U3149 +3150, U3150 +3151, U3151 +3152, U3152 +3153, U3153 +3154, U3154 +3155, U3155 +3156, U3156 +3157, U3157 +3158, U3158 +3159, U3159 +3160, U3160 +3161, U3161 +3162, U3162 +3163, U3163 +3164, U3164 +3165, U3165 +3166, U3166 +3167, U3167 +3168, U3168 +3169, U3169 +3170, U3170 +3171, U3171 +3172, U3172 +3173, U3173 +3174, U3174 +3175, U3175 +3176, U3176 +3177, U3177 +3178, U3178 +3179, U3179 +3180, U3180 +3181, U3181 +3182, U3182 +3183, U3183 +3184, U3184 +3185, U3185 +3186, U3186 +3187, U3187 +3188, U3188 +3189, U3189 +3190, U3190 +3191, U3191 +3192, U3192 +3193, U3193 +3194, U3194 +3195, U3195 +3196, U3196 +3197, U3197 +3198, U3198 +3199, U3199 +3200, U3200 +3201, U3201 +3202, U3202 +3203, U3203 +3204, U3204 +3205, U3205 +3206, U3206 +3207, U3207 +3208, U3208 +3209, U3209 +3210, U3210 +3211, U3211 +3212, U3212 +3213, U3213 +3214, U3214 +3215, U3215 +3216, U3216 +3217, U3217 +3218, U3218 +3219, U3219 +3220, U3220 +3221, U3221 +3222, U3222 +3223, U3223 +3224, U3224 +3225, U3225 +3226, U3226 +3227, U3227 +3228, U3228 +3229, U3229 +3230, U3230 +3231, U3231 +3232, U3232 +3233, U3233 +3234, U3234 +3235, U3235 +3236, U3236 +3237, U3237 +3238, U3238 +3239, U3239 +3240, U3240 +3241, U3241 +3242, U3242 +3243, U3243 +3244, U3244 +3245, U3245 +3246, U3246 +3247, U3247 +3248, U3248 +3249, U3249 +3250, U3250 +3251, U3251 +3252, U3252 +3253, U3253 +3254, U3254 +3255, U3255 +3256, U3256 +3257, U3257 +3258, U3258 +3259, U3259 +3260, U3260 +3261, U3261 +3262, U3262 +3263, U3263 +3264, U3264 +3265, U3265 +3266, U3266 +3267, U3267 +3268, U3268 +3269, U3269 +3270, U3270 +3271, U3271 +3272, U3272 +3273, U3273 +3274, U3274 +3275, U3275 +3276, U3276 +3277, U3277 +3278, U3278 +3279, U3279 +3280, U3280 +3281, U3281 +3282, U3282 +3283, U3283 +3284, U3284 +3285, U3285 +3286, U3286 +3287, U3287 +3288, U3288 +3289, U3289 +3290, U3290 +3291, U3291 +3292, U3292 +3293, U3293 +3294, U3294 +3295, U3295 +3296, U3296 +3297, U3297 +3298, U3298 +3299, U3299 +3300, U3300 +3301, U3301 +3302, U3302 +3303, U3303 +3304, U3304 +3305, U3305 +3306, U3306 +3307, U3307 +3308, U3308 +3309, U3309 +3310, U3310 +3311, U3311 +3312, U3312 +3313, U3313 +3314, U3314 +3315, U3315 +3316, U3316 +3317, U3317 +3318, U3318 +3319, U3319 +3320, U3320 +3321, U3321 +3322, U3322 +3323, U3323 +3324, U3324 +3325, U3325 +3326, U3326 +3327, U3327 +3328, U3328 +3329, U3329 +3330, U3330 +3331, U3331 +3332, U3332 +3333, U3333 +3334, U3334 +3335, U3335 +3336, U3336 +3337, U3337 +3338, U3338 +3339, U3339 +3340, U3340 +3341, U3341 +3342, U3342 +3343, U3343 +3344, U3344 +3345, U3345 +3346, U3346 +3347, U3347 +3348, U3348 +3349, U3349 +3350, U3350 +3351, U3351 +3352, U3352 +3353, U3353 +3354, U3354 +3355, U3355 +3356, U3356 +3357, U3357 +3358, U3358 +3359, U3359 +3360, U3360 +3361, U3361 +3362, U3362 +3363, U3363 +3364, U3364 +3365, U3365 +3366, U3366 +3367, U3367 +3368, U3368 +3369, U3369 +3370, U3370 +3371, U3371 +3372, U3372 +3373, U3373 +3374, U3374 +3375, U3375 +3376, U3376 +3377, U3377 +3378, U3378 +3379, U3379 +3380, U3380 +3381, U3381 +3382, U3382 +3383, U3383 +3384, U3384 +3385, U3385 +3386, U3386 +3387, U3387 +3388, U3388 +3389, U3389 +3390, U3390 +3391, U3391 +3392, U3392 +3393, U3393 +3394, U3394 +3395, U3395 +3396, U3396 +3397, U3397 +3398, U3398 +3399, U3399 +3400, U3400 +3401, U3401 +3402, U3402 +3403, U3403 +3404, U3404 +3405, U3405 +3406, U3406 +3407, U3407 +3408, U3408 +3409, U3409 +3410, U3410 +3411, U3411 +3412, U3412 +3413, U3413 +3414, U3414 +3415, U3415 +3416, U3416 +3417, U3417 +3418, U3418 +3419, U3419 +3420, U3420 +3421, U3421 +3422, U3422 +3423, U3423 +3424, U3424 +3425, U3425 +3426, U3426 +3427, U3427 +3428, U3428 +3429, U3429 +3430, U3430 +3431, U3431 +3432, U3432 +3433, U3433 +3434, U3434 +3435, U3435 +3436, U3436 +3437, U3437 +3438, U3438 +3439, U3439 +3440, U3440 +3441, U3441 +3442, U3442 +3443, U3443 +3444, U3444 +3445, U3445 +3446, U3446 +3447, U3447 +3448, U3448 +3449, U3449 +3450, U3450 +3451, U3451 +3452, U3452 +3453, U3453 +3454, U3454 +3455, U3455 +3456, U3456 +3457, U3457 +3458, U3458 +3459, U3459 +3460, U3460 +3461, U3461 +3462, U3462 +3463, U3463 +3464, U3464 +3465, U3465 +3466, U3466 +3467, U3467 +3468, U3468 +3469, U3469 +3470, U3470 +3471, U3471 +3472, U3472 +3473, U3473 +3474, U3474 +3475, U3475 +3476, U3476 +3477, U3477 +3478, U3478 +3479, U3479 +3480, U3480 +3481, U3481 +3482, U3482 +3483, U3483 +3484, U3484 +3485, U3485 +3486, U3486 +3487, U3487 +3488, U3488 +3489, U3489 +3490, U3490 +3491, U3491 +3492, U3492 +3493, U3493 +3494, U3494 +3495, U3495 +3496, U3496 +3497, U3497 +3498, U3498 +3499, U3499 +3500, U3500 +3501, U3501 +3502, U3502 +3503, U3503 +3504, U3504 +3505, U3505 +3506, U3506 +3507, U3507 +3508, U3508 +3509, U3509 +3510, U3510 +3511, U3511 +3512, U3512 +3513, U3513 +3514, U3514 +3515, U3515 +3516, U3516 +3517, U3517 +3518, U3518 +3519, U3519 +3520, U3520 +3521, U3521 +3522, U3522 +3523, U3523 +3524, U3524 +3525, U3525 +3526, U3526 +3527, U3527 +3528, U3528 +3529, U3529 +3530, U3530 +3531, U3531 +3532, U3532 +3533, U3533 +3534, U3534 +3535, U3535 +3536, U3536 +3537, U3537 +3538, U3538 +3539, U3539 +3540, U3540 +3541, U3541 +3542, U3542 +3543, U3543 +3544, U3544 +3545, U3545 +3546, U3546 +3547, U3547 +3548, U3548 +3549, U3549 +3550, U3550 +3551, U3551 +3552, U3552 +3553, U3553 +3554, U3554 +3555, U3555 +3556, U3556 +3557, U3557 +3558, U3558 +3559, U3559 +3560, U3560 +3561, U3561 +3562, U3562 +3563, U3563 +3564, U3564 +3565, U3565 +3566, U3566 +3567, U3567 +3568, U3568 +3569, U3569 +3570, U3570 +3571, U3571 +3572, U3572 +3573, U3573 +3574, U3574 +3575, U3575 +3576, U3576 +3577, U3577 +3578, U3578 +3579, U3579 +3580, U3580 +3581, U3581 +3582, U3582 +3583, U3583 +3584, U3584 +3585, U3585 +3586, U3586 +3587, U3587 +3588, U3588 +3589, U3589 +3590, U3590 +3591, U3591 +3592, U3592 +3593, U3593 +3594, U3594 +3595, U3595 +3596, U3596 +3597, U3597 +3598, U3598 +3599, U3599 +3600, U3600 +3601, U3601 +3602, U3602 +3603, U3603 +3604, U3604 +3605, U3605 +3606, U3606 +3607, U3607 +3608, U3608 +3609, U3609 +3610, U3610 +3611, U3611 +3612, U3612 +3613, U3613 +3614, U3614 +3615, U3615 +3616, U3616 +3617, U3617 +3618, U3618 +3619, U3619 +3620, U3620 +3621, U3621 +3622, U3622 +3623, U3623 +3624, U3624 +3625, U3625 +3626, U3626 +3627, U3627 +3628, U3628 +3629, U3629 +3630, U3630 +3631, U3631 +3632, U3632 +3633, U3633 +3634, U3634 +3635, U3635 +3636, U3636 +3637, U3637 +3638, U3638 +3639, U3639 +3640, U3640 +3641, U3641 +3642, U3642 +3643, U3643 +3644, U3644 +3645, U3645 +3646, U3646 +3647, U3647 +3648, U3648 +3649, U3649 +3650, U3650 +3651, U3651 +3652, U3652 +3653, U3653 +3654, U3654 +3655, U3655 +3656, U3656 +3657, U3657 +3658, U3658 +3659, U3659 +3660, U3660 +3661, U3661 +3662, U3662 +3663, U3663 +3664, U3664 +3665, U3665 +3666, U3666 +3667, U3667 +3668, U3668 +3669, U3669 +3670, U3670 +3671, U3671 +3672, U3672 +3673, U3673 +3674, U3674 +3675, U3675 +3676, U3676 +3677, U3677 +3678, U3678 +3679, U3679 +3680, U3680 +3681, U3681 +3682, U3682 +3683, U3683 +3684, U3684 +3685, U3685 +3686, U3686 +3687, U3687 +3688, U3688 +3689, U3689 +3690, U3690 +3691, U3691 +3692, U3692 +3693, U3693 +3694, U3694 +3695, U3695 +3696, U3696 +3697, U3697 +3698, U3698 +3699, U3699 +3700, U3700 +3701, U3701 +3702, U3702 +3703, U3703 +3704, U3704 +3705, U3705 +3706, U3706 +3707, U3707 +3708, U3708 +3709, U3709 +3710, U3710 +3711, U3711 +3712, U3712 +3713, U3713 +3714, U3714 +3715, U3715 +3716, U3716 +3717, U3717 +3718, U3718 +3719, U3719 +3720, U3720 +3721, U3721 +3722, U3722 +3723, U3723 +3724, U3724 +3725, U3725 +3726, U3726 +3727, U3727 +3728, U3728 +3729, U3729 +3730, U3730 +3731, U3731 +3732, U3732 +3733, U3733 +3734, U3734 +3735, U3735 +3736, U3736 +3737, U3737 +3738, U3738 +3739, U3739 +3740, U3740 +3741, U3741 +3742, U3742 +3743, U3743 +3744, U3744 +3745, U3745 +3746, U3746 +3747, U3747 +3748, U3748 +3749, U3749 +3750, U3750 +3751, U3751 +3752, U3752 +3753, U3753 +3754, U3754 +3755, U3755 +3756, U3756 +3757, U3757 +3758, U3758 +3759, U3759 +3760, U3760 +3761, U3761 +3762, U3762 +3763, U3763 +3764, U3764 +3765, U3765 +3766, U3766 +3767, U3767 +3768, U3768 +3769, U3769 +3770, U3770 +3771, U3771 +3772, U3772 +3773, U3773 +3774, U3774 +3775, U3775 +3776, U3776 +3777, U3777 +3778, U3778 +3779, U3779 +3780, U3780 +3781, U3781 +3782, U3782 +3783, U3783 +3784, U3784 +3785, U3785 +3786, U3786 +3787, U3787 +3788, U3788 +3789, U3789 +3790, U3790 +3791, U3791 +3792, U3792 +3793, U3793 +3794, U3794 +3795, U3795 +3796, U3796 +3797, U3797 +3798, U3798 +3799, U3799 +3800, U3800 +3801, U3801 +3802, U3802 +3803, U3803 +3804, U3804 +3805, U3805 +3806, U3806 +3807, U3807 +3808, U3808 +3809, U3809 +3810, U3810 +3811, U3811 +3812, U3812 +3813, U3813 +3814, U3814 +3815, U3815 +3816, U3816 +3817, U3817 +3818, U3818 +3819, U3819 +3820, U3820 +3821, U3821 +3822, U3822 +3823, U3823 +3824, U3824 +3825, U3825 +3826, U3826 +3827, U3827 +3828, U3828 +3829, U3829 +3830, U3830 +3831, U3831 +3832, U3832 +3833, U3833 +3834, U3834 +3835, U3835 +3836, U3836 +3837, U3837 +3838, U3838 +3839, U3839 +3840, U3840 +3841, U3841 +3842, U3842 +3843, U3843 +3844, U3844 +3845, U3845 +3846, U3846 +3847, U3847 +3848, U3848 +3849, U3849 +3850, U3850 +3851, U3851 +3852, U3852 +3853, U3853 +3854, U3854 +3855, U3855 +3856, U3856 +3857, U3857 +3858, U3858 +3859, U3859 +3860, U3860 +3861, U3861 +3862, U3862 +3863, U3863 +3864, U3864 +3865, U3865 +3866, U3866 +3867, U3867 +3868, U3868 +3869, U3869 +3870, U3870 +3871, U3871 +3872, U3872 +3873, U3873 +3874, U3874 +3875, U3875 +3876, U3876 +3877, U3877 +3878, U3878 +3879, U3879 +3880, U3880 +3881, U3881 +3882, U3882 +3883, U3883 +3884, U3884 +3885, U3885 +3886, U3886 +3887, U3887 +3888, U3888 +3889, U3889 +3890, U3890 +3891, U3891 +3892, U3892 +3893, U3893 +3894, U3894 +3895, U3895 +3896, U3896 +3897, U3897 +3898, U3898 +3899, U3899 +3900, U3900 +3901, U3901 +3902, U3902 +3903, U3903 +3904, U3904 +3905, U3905 +3906, U3906 +3907, U3907 +3908, U3908 +3909, U3909 +3910, U3910 +3911, U3911 +3912, U3912 +3913, U3913 +3914, U3914 +3915, U3915 +3916, U3916 +3917, U3917 +3918, U3918 +3919, U3919 +3920, U3920 +3921, U3921 +3922, U3922 +3923, U3923 +3924, U3924 +3925, U3925 +3926, U3926 +3927, U3927 +3928, U3928 +3929, U3929 +3930, U3930 +3931, U3931 +3932, U3932 +3933, U3933 +3934, U3934 +3935, U3935 +3936, U3936 +3937, U3937 +3938, U3938 +3939, U3939 +3940, U3940 +3941, U3941 +3942, U3942 +3943, U3943 +3944, U3944 +3945, U3945 +3946, U3946 +3947, U3947 +3948, U3948 +3949, U3949 +3950, U3950 +3951, U3951 +3952, U3952 +3953, U3953 +3954, U3954 +3955, U3955 +3956, U3956 +3957, U3957 +3958, U3958 +3959, U3959 +3960, U3960 +3961, U3961 +3962, U3962 +3963, U3963 +3964, U3964 +3965, U3965 +3966, U3966 +3967, U3967 +3968, U3968 +3969, U3969 +3970, U3970 +3971, U3971 +3972, U3972 +3973, U3973 +3974, U3974 +3975, U3975 +3976, U3976 +3977, U3977 +3978, U3978 +3979, U3979 +3980, U3980 +3981, U3981 +3982, U3982 +3983, U3983 +3984, U3984 +3985, U3985 +3986, U3986 +3987, U3987 +3988, U3988 +3989, U3989 +3990, U3990 +3991, U3991 +3992, U3992 +3993, U3993 +3994, U3994 +3995, U3995 +3996, U3996 +3997, U3997 +3998, U3998 +3999, U3999 +4000, U4000 +4001, U4001 +4002, U4002 +4003, U4003 +4004, U4004 +4005, U4005 +4006, U4006 +4007, U4007 +4008, U4008 +4009, U4009 +4010, U4010 +4011, U4011 +4012, U4012 +4013, U4013 +4014, U4014 +4015, U4015 +4016, U4016 +4017, U4017 +4018, U4018 +4019, U4019 +4020, U4020 +4021, U4021 +4022, U4022 +4023, U4023 +4024, U4024 +4025, U4025 +4026, U4026 +4027, U4027 +4028, U4028 +4029, U4029 +4030, U4030 +4031, U4031 +4032, U4032 +4033, U4033 +4034, U4034 +4035, U4035 +4036, U4036 +4037, U4037 +4038, U4038 +4039, U4039 +4040, U4040 +4041, U4041 +4042, U4042 +4043, U4043 +4044, U4044 +4045, U4045 +4046, U4046 +4047, U4047 +4048, U4048 +4049, U4049 +4050, U4050 +4051, U4051 +4052, U4052 +4053, U4053 +4054, U4054 +4055, U4055 +4056, U4056 +4057, U4057 +4058, U4058 +4059, U4059 +4060, U4060 +4061, U4061 +4062, U4062 +4063, U4063 +4064, U4064 +4065, U4065 +4066, U4066 +4067, U4067 +4068, U4068 +4069, U4069 +4070, U4070 +4071, U4071 +4072, U4072 +4073, U4073 +4074, U4074 +4075, U4075 +4076, U4076 +4077, U4077 +4078, U4078 +4079, U4079 +4080, U4080 +4081, U4081 +4082, U4082 +4083, U4083 +4084, U4084 +4085, U4085 +4086, U4086 +4087, U4087 +4088, U4088 +4089, U4089 +4090, U4090 +4091, U4091 +4092, U4092 +4093, U4093 +4094, U4094 +4095, U4095 +4096, U4096 +4097, U4097 +4098, U4098 +4099, U4099 +4100, U4100 +4101, U4101 +4102, U4102 +4103, U4103 +4104, U4104 +4105, U4105 +4106, U4106 +4107, U4107 +4108, U4108 +4109, U4109 +4110, U4110 +4111, U4111 +4112, U4112 +4113, U4113 +4114, U4114 +4115, U4115 +4116, U4116 +4117, U4117 +4118, U4118 +4119, U4119 +4120, U4120 +4121, U4121 +4122, U4122 +4123, U4123 +4124, U4124 +4125, U4125 +4126, U4126 +4127, U4127 +4128, U4128 +4129, U4129 +4130, U4130 +4131, U4131 +4132, U4132 +4133, U4133 +4134, U4134 +4135, U4135 +4136, U4136 +4137, U4137 +4138, U4138 +4139, U4139 +4140, U4140 +4141, U4141 +4142, U4142 +4143, U4143 +4144, U4144 +4145, U4145 +4146, U4146 +4147, U4147 +4148, U4148 +4149, U4149 +4150, U4150 +4151, U4151 +4152, U4152 +4153, U4153 +4154, U4154 +4155, U4155 +4156, U4156 +4157, U4157 +4158, U4158 +4159, U4159 +4160, U4160 +4161, U4161 +4162, U4162 +4163, U4163 +4164, U4164 +4165, U4165 +4166, U4166 +4167, U4167 +4168, U4168 +4169, U4169 +4170, U4170 +4171, U4171 +4172, U4172 +4173, U4173 +4174, U4174 +4175, U4175 +4176, U4176 +4177, U4177 +4178, U4178 +4179, U4179 +4180, U4180 +4181, U4181 +4182, U4182 +4183, U4183 +4184, U4184 +4185, U4185 +4186, U4186 +4187, U4187 +4188, U4188 +4189, U4189 +4190, U4190 +4191, U4191 +4192, U4192 +4193, U4193 +4194, U4194 +4195, U4195 +4196, U4196 +4197, U4197 +4198, U4198 +4199, U4199 +4200, U4200 +4201, U4201 +4202, U4202 +4203, U4203 +4204, U4204 +4205, U4205 +4206, U4206 +4207, U4207 +4208, U4208 +4209, U4209 +4210, U4210 +4211, U4211 +4212, U4212 +4213, U4213 +4214, U4214 +4215, U4215 +4216, U4216 +4217, U4217 +4218, U4218 +4219, U4219 +4220, U4220 +4221, U4221 +4222, U4222 +4223, U4223 +4224, U4224 +4225, U4225 +4226, U4226 +4227, U4227 +4228, U4228 +4229, U4229 +4230, U4230 +4231, U4231 +4232, U4232 +4233, U4233 +4234, U4234 +4235, U4235 +4236, U4236 +4237, U4237 +4238, U4238 +4239, U4239 +4240, U4240 +4241, U4241 +4242, U4242 +4243, U4243 +4244, U4244 +4245, U4245 +4246, U4246 +4247, U4247 +4248, U4248 +4249, U4249 +4250, U4250 +4251, U4251 +4252, U4252 +4253, U4253 +4254, U4254 +4255, U4255 +4256, U4256 +4257, U4257 +4258, U4258 +4259, U4259 +4260, U4260 +4261, U4261 +4262, U4262 +4263, U4263 +4264, U4264 +4265, U4265 +4266, U4266 +4267, U4267 +4268, U4268 +4269, U4269 +4270, U4270 +4271, U4271 +4272, U4272 +4273, U4273 +4274, U4274 +4275, U4275 +4276, U4276 +4277, U4277 +4278, U4278 +4279, U4279 +4280, U4280 +4281, U4281 +4282, U4282 +4283, U4283 +4284, U4284 +4285, U4285 +4286, U4286 +4287, U4287 +4288, U4288 +4289, U4289 +4290, U4290 +4291, U4291 +4292, U4292 +4293, U4293 +4294, U4294 +4295, U4295 +4296, U4296 +4297, U4297 +4298, U4298 +4299, U4299 +4300, U4300 +4301, U4301 +4302, U4302 +4303, U4303 +4304, U4304 +4305, U4305 +4306, U4306 +4307, U4307 +4308, U4308 +4309, U4309 +4310, U4310 +4311, U4311 +4312, U4312 +4313, U4313 +4314, U4314 +4315, U4315 +4316, U4316 +4317, U4317 +4318, U4318 +4319, U4319 +4320, U4320 +4321, U4321 +4322, U4322 +4323, U4323 +4324, U4324 +4325, U4325 +4326, U4326 +4327, U4327 +4328, U4328 +4329, U4329 +4330, U4330 +4331, U4331 +4332, U4332 +4333, U4333 +4334, U4334 +4335, U4335 +4336, U4336 +4337, U4337 +4338, U4338 +4339, U4339 +4340, U4340 +4341, U4341 +4342, U4342 +4343, U4343 +4344, U4344 +4345, U4345 +4346, U4346 +4347, U4347 +4348, U4348 +4349, U4349 +4350, U4350 +4351, U4351 +4352, U4352 +4353, U4353 +4354, U4354 +4355, U4355 +4356, U4356 +4357, U4357 +4358, U4358 +4359, U4359 +4360, U4360 +4361, U4361 +4362, U4362 +4363, U4363 +4364, U4364 +4365, U4365 +4366, U4366 +4367, U4367 +4368, U4368 +4369, U4369 +4370, U4370 +4371, U4371 +4372, U4372 +4373, U4373 +4374, U4374 +4375, U4375 +4376, U4376 +4377, U4377 +4378, U4378 +4379, U4379 +4380, U4380 +4381, U4381 +4382, U4382 +4383, U4383 +4384, U4384 +4385, U4385 +4386, U4386 +4387, U4387 +4388, U4388 +4389, U4389 +4390, U4390 +4391, U4391 +4392, U4392 +4393, U4393 +4394, U4394 +4395, U4395 +4396, U4396 +4397, U4397 +4398, U4398 +4399, U4399 +4400, U4400 +4401, U4401 +4402, U4402 +4403, U4403 +4404, U4404 +4405, U4405 +4406, U4406 +4407, U4407 +4408, U4408 +4409, U4409 +4410, U4410 +4411, U4411 +4412, U4412 +4413, U4413 +4414, U4414 +4415, U4415 +4416, U4416 +4417, U4417 +4418, U4418 +4419, U4419 +4420, U4420 +4421, U4421 +4422, U4422 +4423, U4423 +4424, U4424 +4425, U4425 +4426, U4426 +4427, U4427 +4428, U4428 +4429, U4429 +4430, U4430 +4431, U4431 +4432, U4432 +4433, U4433 +4434, U4434 +4435, U4435 +4436, U4436 +4437, U4437 +4438, U4438 +4439, U4439 +4440, U4440 +4441, U4441 +4442, U4442 +4443, U4443 +4444, U4444 +4445, U4445 +4446, U4446 +4447, U4447 +4448, U4448 +4449, U4449 +4450, U4450 +4451, U4451 +4452, U4452 +4453, U4453 +4454, U4454 +4455, U4455 +4456, U4456 +4457, U4457 +4458, U4458 +4459, U4459 +4460, U4460 +4461, U4461 +4462, U4462 +4463, U4463 +4464, U4464 +4465, U4465 +4466, U4466 +4467, U4467 +4468, U4468 +4469, U4469 +4470, U4470 +4471, U4471 +4472, U4472 +4473, U4473 +4474, U4474 +4475, U4475 +4476, U4476 +4477, U4477 +4478, U4478 +4479, U4479 +4480, U4480 +4481, U4481 +4482, U4482 +4483, U4483 +4484, U4484 +4485, U4485 +4486, U4486 +4487, U4487 +4488, U4488 +4489, U4489 +4490, U4490 +4491, U4491 +4492, U4492 +4493, U4493 +4494, U4494 +4495, U4495 +4496, U4496 +4497, U4497 +4498, U4498 +4499, U4499 +4500, U4500 +4501, U4501 +4502, U4502 +4503, U4503 +4504, U4504 +4505, U4505 +4506, U4506 +4507, U4507 +4508, U4508 +4509, U4509 +4510, U4510 +4511, U4511 +4512, U4512 +4513, U4513 +4514, U4514 +4515, U4515 +4516, U4516 +4517, U4517 +4518, U4518 +4519, U4519 +4520, U4520 +4521, U4521 +4522, U4522 +4523, U4523 +4524, U4524 +4525, U4525 +4526, U4526 +4527, U4527 +4528, U4528 +4529, U4529 +4530, U4530 +4531, U4531 +4532, U4532 +4533, U4533 +4534, U4534 +4535, U4535 +4536, U4536 +4537, U4537 +4538, U4538 +4539, U4539 +4540, U4540 +4541, U4541 +4542, U4542 +4543, U4543 +4544, U4544 +4545, U4545 +4546, U4546 +4547, U4547 +4548, U4548 +4549, U4549 +4550, U4550 +4551, U4551 +4552, U4552 +4553, U4553 +4554, U4554 +4555, U4555 +4556, U4556 +4557, U4557 +4558, U4558 +4559, U4559 +4560, U4560 +4561, U4561 +4562, U4562 +4563, U4563 +4564, U4564 +4565, U4565 +4566, U4566 +4567, U4567 +4568, U4568 +4569, U4569 +4570, U4570 +4571, U4571 +4572, U4572 +4573, U4573 +4574, U4574 +4575, U4575 +4576, U4576 +4577, U4577 +4578, U4578 +4579, U4579 +4580, U4580 +4581, U4581 +4582, U4582 +4583, U4583 +4584, U4584 +4585, U4585 +4586, U4586 +4587, U4587 +4588, U4588 +4589, U4589 +4590, U4590 +4591, U4591 +4592, U4592 +4593, U4593 +4594, U4594 +4595, U4595 +4596, U4596 +4597, U4597 +4598, U4598 +4599, U4599 +4600, U4600 +4601, U4601 +4602, U4602 +4603, U4603 +4604, U4604 +4605, U4605 +4606, U4606 +4607, U4607 +4608, U4608 +4609, U4609 +4610, U4610 +4611, U4611 +4612, U4612 +4613, U4613 +4614, U4614 +4615, U4615 +4616, U4616 +4617, U4617 +4618, U4618 +4619, U4619 +4620, U4620 +4621, U4621 +4622, U4622 +4623, U4623 +4624, U4624 +4625, U4625 +4626, U4626 +4627, U4627 +4628, U4628 +4629, U4629 +4630, U4630 +4631, U4631 +4632, U4632 +4633, U4633 +4634, U4634 +4635, U4635 +4636, U4636 +4637, U4637 +4638, U4638 +4639, U4639 +4640, U4640 +4641, U4641 +4642, U4642 +4643, U4643 +4644, U4644 +4645, U4645 +4646, U4646 +4647, U4647 +4648, U4648 +4649, U4649 +4650, U4650 +4651, U4651 +4652, U4652 +4653, U4653 +4654, U4654 +4655, U4655 +4656, U4656 +4657, U4657 +4658, U4658 +4659, U4659 +4660, U4660 +4661, U4661 +4662, U4662 +4663, U4663 +4664, U4664 +4665, U4665 +4666, U4666 +4667, U4667 +4668, U4668 +4669, U4669 +4670, U4670 +4671, U4671 +4672, U4672 +4673, U4673 +4674, U4674 +4675, U4675 +4676, U4676 +4677, U4677 +4678, U4678 +4679, U4679 +4680, U4680 +4681, U4681 +4682, U4682 +4683, U4683 +4684, U4684 +4685, U4685 +4686, U4686 +4687, U4687 +4688, U4688 +4689, U4689 +4690, U4690 +4691, U4691 +4692, U4692 +4693, U4693 +4694, U4694 +4695, U4695 +4696, U4696 +4697, U4697 +4698, U4698 +4699, U4699 +4700, U4700 +4701, U4701 +4702, U4702 +4703, U4703 +4704, U4704 +4705, U4705 +4706, U4706 +4707, U4707 +4708, U4708 +4709, U4709 +4710, U4710 +4711, U4711 +4712, U4712 +4713, U4713 +4714, U4714 +4715, U4715 +4716, U4716 +4717, U4717 +4718, U4718 +4719, U4719 +4720, U4720 +4721, U4721 +4722, U4722 +4723, U4723 +4724, U4724 +4725, U4725 +4726, U4726 +4727, U4727 +4728, U4728 +4729, U4729 +4730, U4730 +4731, U4731 +4732, U4732 +4733, U4733 +4734, U4734 +4735, U4735 +4736, U4736 +4737, U4737 +4738, U4738 +4739, U4739 +4740, U4740 +4741, U4741 +4742, U4742 +4743, U4743 +4744, U4744 +4745, U4745 +4746, U4746 +4747, U4747 +4748, U4748 +4749, U4749 +4750, U4750 +4751, U4751 +4752, U4752 +4753, U4753 +4754, U4754 +4755, U4755 +4756, U4756 +4757, U4757 +4758, U4758 +4759, U4759 +4760, U4760 +4761, U4761 +4762, U4762 +4763, U4763 +4764, U4764 +4765, U4765 +4766, U4766 +4767, U4767 +4768, U4768 +4769, U4769 +4770, U4770 +4771, U4771 +4772, U4772 +4773, U4773 +4774, U4774 +4775, U4775 +4776, U4776 +4777, U4777 +4778, U4778 +4779, U4779 +4780, U4780 +4781, U4781 +4782, U4782 +4783, U4783 +4784, U4784 +4785, U4785 +4786, U4786 +4787, U4787 +4788, U4788 +4789, U4789 +4790, U4790 +4791, U4791 +4792, U4792 +4793, U4793 +4794, U4794 +4795, U4795 +4796, U4796 +4797, U4797 +4798, U4798 +4799, U4799 +4800, U4800 +4801, U4801 +4802, U4802 +4803, U4803 +4804, U4804 +4805, U4805 +4806, U4806 +4807, U4807 +4808, U4808 +4809, U4809 +4810, U4810 +4811, U4811 +4812, U4812 +4813, U4813 +4814, U4814 +4815, U4815 +4816, U4816 +4817, U4817 +4818, U4818 +4819, U4819 +4820, U4820 +4821, U4821 +4822, U4822 +4823, U4823 +4824, U4824 +4825, U4825 +4826, U4826 +4827, U4827 +4828, U4828 +4829, U4829 +4830, U4830 +4831, U4831 +4832, U4832 +4833, U4833 +4834, U4834 +4835, U4835 +4836, U4836 +4837, U4837 +4838, U4838 +4839, U4839 +4840, U4840 +4841, U4841 +4842, U4842 +4843, U4843 +4844, U4844 +4845, U4845 +4846, U4846 +4847, U4847 +4848, U4848 +4849, U4849 +4850, U4850 +4851, U4851 +4852, U4852 +4853, U4853 +4854, U4854 +4855, U4855 +4856, U4856 +4857, U4857 +4858, U4858 +4859, U4859 +4860, U4860 +4861, U4861 +4862, U4862 +4863, U4863 +4864, U4864 +4865, U4865 +4866, U4866 +4867, U4867 +4868, U4868 +4869, U4869 +4870, U4870 +4871, U4871 +4872, U4872 +4873, U4873 +4874, U4874 +4875, U4875 +4876, U4876 +4877, U4877 +4878, U4878 +4879, U4879 +4880, U4880 +4881, U4881 +4882, U4882 +4883, U4883 +4884, U4884 +4885, U4885 +4886, U4886 +4887, U4887 +4888, U4888 +4889, U4889 +4890, U4890 +4891, U4891 +4892, U4892 +4893, U4893 +4894, U4894 +4895, U4895 +4896, U4896 +4897, U4897 +4898, U4898 +4899, U4899 +4900, U4900 +4901, U4901 +4902, U4902 +4903, U4903 +4904, U4904 +4905, U4905 +4906, U4906 +4907, U4907 +4908, U4908 +4909, U4909 +4910, U4910 +4911, U4911 +4912, U4912 +4913, U4913 +4914, U4914 +4915, U4915 +4916, U4916 +4917, U4917 +4918, U4918 +4919, U4919 +4920, U4920 +4921, U4921 +4922, U4922 +4923, U4923 +4924, U4924 +4925, U4925 +4926, U4926 +4927, U4927 +4928, U4928 +4929, U4929 +4930, U4930 +4931, U4931 +4932, U4932 +4933, U4933 +4934, U4934 +4935, U4935 +4936, U4936 +4937, U4937 +4938, U4938 +4939, U4939 +4940, U4940 +4941, U4941 +4942, U4942 +4943, U4943 +4944, U4944 +4945, U4945 +4946, U4946 +4947, U4947 +4948, U4948 +4949, U4949 +4950, U4950 +4951, U4951 +4952, U4952 +4953, U4953 +4954, U4954 +4955, U4955 +4956, U4956 +4957, U4957 +4958, U4958 +4959, U4959 +4960, U4960 +4961, U4961 +4962, U4962 +4963, U4963 +4964, U4964 +4965, U4965 +4966, U4966 +4967, U4967 +4968, U4968 +4969, U4969 +4970, U4970 +4971, U4971 +4972, U4972 +4973, U4973 +4974, U4974 +4975, U4975 +4976, U4976 +4977, U4977 +4978, U4978 +4979, U4979 +4980, U4980 +4981, U4981 +4982, U4982 +4983, U4983 +4984, U4984 +4985, U4985 +4986, U4986 +4987, U4987 +4988, U4988 +4989, U4989 +4990, U4990 +4991, U4991 +4992, U4992 +4993, U4993 +4994, U4994 +4995, U4995 +4996, U4996 +4997, U4997 +4998, U4998 +4999, U4999 +5000, U5000 +5001, U5001 +5002, U5002 +5003, U5003 +5004, U5004 +5005, U5005 +5006, U5006 +5007, U5007 +5008, U5008 +5009, U5009 +5010, U5010 +5011, U5011 +5012, U5012 +5013, U5013 +5014, U5014 +5015, U5015 +5016, U5016 +5017, U5017 +5018, U5018 +5019, U5019 +5020, U5020 +5021, U5021 +5022, U5022 +5023, U5023 +5024, U5024 +5025, U5025 +5026, U5026 +5027, U5027 +5028, U5028 +5029, U5029 +5030, U5030 +5031, U5031 +5032, U5032 +5033, U5033 +5034, U5034 +5035, U5035 +5036, U5036 +5037, U5037 +5038, U5038 +5039, U5039 +5040, U5040 +5041, U5041 +5042, U5042 +5043, U5043 +5044, U5044 +5045, U5045 +5046, U5046 +5047, U5047 +5048, U5048 +5049, U5049 +5050, U5050 +5051, U5051 +5052, U5052 +5053, U5053 +5054, U5054 +5055, U5055 +5056, U5056 +5057, U5057 +5058, U5058 +5059, U5059 +5060, U5060 +5061, U5061 +5062, U5062 +5063, U5063 +5064, U5064 +5065, U5065 +5066, U5066 +5067, U5067 +5068, U5068 +5069, U5069 +5070, U5070 +5071, U5071 +5072, U5072 +5073, U5073 +5074, U5074 +5075, U5075 +5076, U5076 +5077, U5077 +5078, U5078 +5079, U5079 +5080, U5080 +5081, U5081 +5082, U5082 +5083, U5083 +5084, U5084 +5085, U5085 +5086, U5086 +5087, U5087 +5088, U5088 +5089, U5089 +5090, U5090 +5091, U5091 +5092, U5092 +5093, U5093 +5094, U5094 +5095, U5095 +5096, U5096 +5097, U5097 +5098, U5098 +5099, U5099 +5100, U5100 +5101, U5101 +5102, U5102 +5103, U5103 +5104, U5104 +5105, U5105 +5106, U5106 +5107, U5107 +5108, U5108 +5109, U5109 +5110, U5110 +5111, U5111 +5112, U5112 +5113, U5113 +5114, U5114 +5115, U5115 +5116, U5116 +5117, U5117 +5118, U5118 +5119, U5119 +5120, U5120 +5121, U5121 +5122, U5122 +5123, U5123 +5124, U5124 +5125, U5125 +5126, U5126 +5127, U5127 +5128, U5128 +5129, U5129 +5130, U5130 +5131, U5131 +5132, U5132 +5133, U5133 +5134, U5134 +5135, U5135 +5136, U5136 +5137, U5137 +5138, U5138 +5139, U5139 +5140, U5140 +5141, U5141 +5142, U5142 +5143, U5143 +5144, U5144 +5145, U5145 +5146, U5146 +5147, U5147 +5148, U5148 +5149, U5149 +5150, U5150 +5151, U5151 +5152, U5152 +5153, U5153 +5154, U5154 +5155, U5155 +5156, U5156 +5157, U5157 +5158, U5158 +5159, U5159 +5160, U5160 +5161, U5161 +5162, U5162 +5163, U5163 +5164, U5164 +5165, U5165 +5166, U5166 +5167, U5167 +5168, U5168 +5169, U5169 +5170, U5170 +5171, U5171 +5172, U5172 +5173, U5173 +5174, U5174 +5175, U5175 +5176, U5176 +5177, U5177 +5178, U5178 +5179, U5179 +5180, U5180 +5181, U5181 +5182, U5182 +5183, U5183 +5184, U5184 +5185, U5185 +5186, U5186 +5187, U5187 +5188, U5188 +5189, U5189 +5190, U5190 +5191, U5191 +5192, U5192 +5193, U5193 +5194, U5194 +5195, U5195 +5196, U5196 +5197, U5197 +5198, U5198 +5199, U5199 +5200, U5200 +5201, U5201 +5202, U5202 +5203, U5203 +5204, U5204 +5205, U5205 +5206, U5206 +5207, U5207 +5208, U5208 +5209, U5209 +5210, U5210 +5211, U5211 +5212, U5212 +5213, U5213 +5214, U5214 +5215, U5215 +5216, U5216 +5217, U5217 +5218, U5218 +5219, U5219 +5220, U5220 +5221, U5221 +5222, U5222 +5223, U5223 +5224, U5224 +5225, U5225 +5226, U5226 +5227, U5227 +5228, U5228 +5229, U5229 +5230, U5230 +5231, U5231 +5232, U5232 +5233, U5233 +5234, U5234 +5235, U5235 +5236, U5236 +5237, U5237 +5238, U5238 +5239, U5239 +5240, U5240 +5241, U5241 +5242, U5242 +5243, U5243 +5244, U5244 +5245, U5245 +5246, U5246 +5247, U5247 +5248, U5248 +5249, U5249 +5250, U5250 +5251, U5251 +5252, U5252 +5253, U5253 +5254, U5254 +5255, U5255 +5256, U5256 +5257, U5257 +5258, U5258 +5259, U5259 +5260, U5260 +5261, U5261 +5262, U5262 +5263, U5263 +5264, U5264 +5265, U5265 +5266, U5266 +5267, U5267 +5268, U5268 +5269, U5269 +5270, U5270 +5271, U5271 +5272, U5272 +5273, U5273 +5274, U5274 +5275, U5275 +5276, U5276 +5277, U5277 +5278, U5278 +5279, U5279 +5280, U5280 +5281, U5281 +5282, U5282 +5283, U5283 +5284, U5284 +5285, U5285 +5286, U5286 +5287, U5287 +5288, U5288 +5289, U5289 +5290, U5290 +5291, U5291 +5292, U5292 +5293, U5293 +5294, U5294 +5295, U5295 +5296, U5296 +5297, U5297 +5298, U5298 +5299, U5299 +5300, U5300 +5301, U5301 +5302, U5302 +5303, U5303 +5304, U5304 +5305, U5305 +5306, U5306 +5307, U5307 +5308, U5308 +5309, U5309 +5310, U5310 +5311, U5311 +5312, U5312 +5313, U5313 +5314, U5314 +5315, U5315 +5316, U5316 +5317, U5317 +5318, U5318 +5319, U5319 +5320, U5320 +5321, U5321 +5322, U5322 +5323, U5323 +5324, U5324 +5325, U5325 +5326, U5326 +5327, U5327 +5328, U5328 +5329, U5329 +5330, U5330 +5331, U5331 +5332, U5332 +5333, U5333 +5334, U5334 +5335, U5335 +5336, U5336 +5337, U5337 +5338, U5338 +5339, U5339 +5340, U5340 +5341, U5341 +5342, U5342 +5343, U5343 +5344, U5344 +5345, U5345 +5346, U5346 +5347, U5347 +5348, U5348 +5349, U5349 +5350, U5350 +5351, U5351 +5352, U5352 +5353, U5353 +5354, U5354 +5355, U5355 +5356, U5356 +5357, U5357 +5358, U5358 +5359, U5359 +5360, U5360 +5361, U5361 +5362, U5362 +5363, U5363 +5364, U5364 +5365, U5365 +5366, U5366 +5367, U5367 +5368, U5368 +5369, U5369 +5370, U5370 +5371, U5371 +5372, U5372 +5373, U5373 +5374, U5374 +5375, U5375 +5376, U5376 +5377, U5377 +5378, U5378 +5379, U5379 +5380, U5380 +5381, U5381 +5382, U5382 +5383, U5383 +5384, U5384 +5385, U5385 +5386, U5386 +5387, U5387 +5388, U5388 +5389, U5389 +5390, U5390 +5391, U5391 +5392, U5392 +5393, U5393 +5394, U5394 +5395, U5395 +5396, U5396 +5397, U5397 +5398, U5398 +5399, U5399 +5400, U5400 +5401, U5401 +5402, U5402 +5403, U5403 +5404, U5404 +5405, U5405 +5406, U5406 +5407, U5407 +5408, U5408 +5409, U5409 +5410, U5410 +5411, U5411 +5412, U5412 +5413, U5413 +5414, U5414 +5415, U5415 +5416, U5416 +5417, U5417 +5418, U5418 +5419, U5419 +5420, U5420 +5421, U5421 +5422, U5422 +5423, U5423 +5424, U5424 +5425, U5425 +5426, U5426 +5427, U5427 +5428, U5428 +5429, U5429 +5430, U5430 +5431, U5431 +5432, U5432 +5433, U5433 +5434, U5434 +5435, U5435 +5436, U5436 +5437, U5437 +5438, U5438 +5439, U5439 +5440, U5440 +5441, U5441 +5442, U5442 +5443, U5443 +5444, U5444 +5445, U5445 +5446, U5446 +5447, U5447 +5448, U5448 +5449, U5449 +5450, U5450 +5451, U5451 +5452, U5452 +5453, U5453 +5454, U5454 +5455, U5455 +5456, U5456 +5457, U5457 +5458, U5458 +5459, U5459 +5460, U5460 +5461, U5461 +5462, U5462 +5463, U5463 +5464, U5464 +5465, U5465 +5466, U5466 +5467, U5467 +5468, U5468 +5469, U5469 +5470, U5470 +5471, U5471 +5472, U5472 +5473, U5473 +5474, U5474 +5475, U5475 +5476, U5476 +5477, U5477 +5478, U5478 +5479, U5479 +5480, U5480 +5481, U5481 +5482, U5482 +5483, U5483 +5484, U5484 +5485, U5485 +5486, U5486 +5487, U5487 +5488, U5488 +5489, U5489 +5490, U5490 +5491, U5491 +5492, U5492 +5493, U5493 +5494, U5494 +5495, U5495 +5496, U5496 +5497, U5497 +5498, U5498 +5499, U5499 +5500, U5500 +5501, U5501 +5502, U5502 +5503, U5503 +5504, U5504 +5505, U5505 +5506, U5506 +5507, U5507 +5508, U5508 +5509, U5509 +5510, U5510 +5511, U5511 +5512, U5512 +5513, U5513 +5514, U5514 +5515, U5515 +5516, U5516 +5517, U5517 +5518, U5518 +5519, U5519 +5520, U5520 +5521, U5521 +5522, U5522 +5523, U5523 +5524, U5524 +5525, U5525 +5526, U5526 +5527, U5527 +5528, U5528 +5529, U5529 +5530, U5530 +5531, U5531 +5532, U5532 +5533, U5533 +5534, U5534 +5535, U5535 +5536, U5536 +5537, U5537 +5538, U5538 +5539, U5539 +5540, U5540 +5541, U5541 +5542, U5542 +5543, U5543 +5544, U5544 +5545, U5545 +5546, U5546 +5547, U5547 +5548, U5548 +5549, U5549 +5550, U5550 +5551, U5551 +5552, U5552 +5553, U5553 +5554, U5554 +5555, U5555 +5556, U5556 +5557, U5557 +5558, U5558 +5559, U5559 +5560, U5560 +5561, U5561 +5562, U5562 +5563, U5563 +5564, U5564 +5565, U5565 +5566, U5566 +5567, U5567 +5568, U5568 +5569, U5569 +5570, U5570 +5571, U5571 +5572, U5572 +5573, U5573 +5574, U5574 +5575, U5575 +5576, U5576 +5577, U5577 +5578, U5578 +5579, U5579 +5580, U5580 +5581, U5581 +5582, U5582 +5583, U5583 +5584, U5584 +5585, U5585 +5586, U5586 +5587, U5587 +5588, U5588 +5589, U5589 +5590, U5590 +5591, U5591 +5592, U5592 +5593, U5593 +5594, U5594 +5595, U5595 +5596, U5596 +5597, U5597 +5598, U5598 +5599, U5599 +5600, U5600 +5601, U5601 +5602, U5602 +5603, U5603 +5604, U5604 +5605, U5605 +5606, U5606 +5607, U5607 +5608, U5608 +5609, U5609 +5610, U5610 +5611, U5611 +5612, U5612 +5613, U5613 +5614, U5614 +5615, U5615 +5616, U5616 +5617, U5617 +5618, U5618 +5619, U5619 +5620, U5620 +5621, U5621 +5622, U5622 +5623, U5623 +5624, U5624 +5625, U5625 +5626, U5626 +5627, U5627 +5628, U5628 +5629, U5629 +5630, U5630 +5631, U5631 +5632, U5632 +5633, U5633 +5634, U5634 +5635, U5635 +5636, U5636 +5637, U5637 +5638, U5638 +5639, U5639 +5640, U5640 +5641, U5641 +5642, U5642 +5643, U5643 +5644, U5644 +5645, U5645 +5646, U5646 +5647, U5647 +5648, U5648 +5649, U5649 +5650, U5650 +5651, U5651 +5652, U5652 +5653, U5653 +5654, U5654 +5655, U5655 +5656, U5656 +5657, U5657 +5658, U5658 +5659, U5659 +5660, U5660 +5661, U5661 +5662, U5662 +5663, U5663 +5664, U5664 +5665, U5665 +5666, U5666 +5667, U5667 +5668, U5668 +5669, U5669 +5670, U5670 +5671, U5671 +5672, U5672 +5673, U5673 +5674, U5674 +5675, U5675 +5676, U5676 +5677, U5677 +5678, U5678 +5679, U5679 +5680, U5680 +5681, U5681 +5682, U5682 +5683, U5683 +5684, U5684 +5685, U5685 +5686, U5686 +5687, U5687 +5688, U5688 +5689, U5689 +5690, U5690 +5691, U5691 +5692, U5692 +5693, U5693 +5694, U5694 +5695, U5695 +5696, U5696 +5697, U5697 +5698, U5698 +5699, U5699 +5700, U5700 +5701, U5701 +5702, U5702 +5703, U5703 +5704, U5704 +5705, U5705 +5706, U5706 +5707, U5707 +5708, U5708 +5709, U5709 +5710, U5710 +5711, U5711 +5712, U5712 +5713, U5713 +5714, U5714 +5715, U5715 +5716, U5716 +5717, U5717 +5718, U5718 +5719, U5719 +5720, U5720 +5721, U5721 +5722, U5722 +5723, U5723 +5724, U5724 +5725, U5725 +5726, U5726 +5727, U5727 +5728, U5728 +5729, U5729 +5730, U5730 +5731, U5731 +5732, U5732 +5733, U5733 +5734, U5734 +5735, U5735 +5736, U5736 +5737, U5737 +5738, U5738 +5739, U5739 +5740, U5740 +5741, U5741 +5742, U5742 +5743, U5743 +5744, U5744 +5745, U5745 +5746, U5746 +5747, U5747 +5748, U5748 +5749, U5749 +5750, U5750 +5751, U5751 +5752, U5752 +5753, U5753 +5754, U5754 +5755, U5755 +5756, U5756 +5757, U5757 +5758, U5758 +5759, U5759 +5760, U5760 +5761, U5761 +5762, U5762 +5763, U5763 +5764, U5764 +5765, U5765 +5766, U5766 +5767, U5767 +5768, U5768 +5769, U5769 +5770, U5770 +5771, U5771 +5772, U5772 +5773, U5773 +5774, U5774 +5775, U5775 +5776, U5776 +5777, U5777 +5778, U5778 +5779, U5779 +5780, U5780 +5781, U5781 +5782, U5782 +5783, U5783 +5784, U5784 +5785, U5785 +5786, U5786 +5787, U5787 +5788, U5788 +5789, U5789 +5790, U5790 +5791, U5791 +5792, U5792 +5793, U5793 +5794, U5794 +5795, U5795 +5796, U5796 +5797, U5797 +5798, U5798 +5799, U5799 +5800, U5800 +5801, U5801 +5802, U5802 +5803, U5803 +5804, U5804 +5805, U5805 +5806, U5806 +5807, U5807 +5808, U5808 +5809, U5809 +5810, U5810 +5811, U5811 +5812, U5812 +5813, U5813 +5814, U5814 +5815, U5815 +5816, U5816 +5817, U5817 +5818, U5818 +5819, U5819 +5820, U5820 +5821, U5821 +5822, U5822 +5823, U5823 +5824, U5824 +5825, U5825 +5826, U5826 +5827, U5827 +5828, U5828 +5829, U5829 +5830, U5830 +5831, U5831 +5832, U5832 +5833, U5833 +5834, U5834 +5835, U5835 +5836, U5836 +5837, U5837 +5838, U5838 +5839, U5839 +5840, U5840 +5841, U5841 +5842, U5842 +5843, U5843 +5844, U5844 +5845, U5845 +5846, U5846 +5847, U5847 +5848, U5848 +5849, U5849 +5850, U5850 +5851, U5851 +5852, U5852 +5853, U5853 +5854, U5854 +5855, U5855 +5856, U5856 +5857, U5857 +5858, U5858 +5859, U5859 +5860, U5860 +5861, U5861 +5862, U5862 +5863, U5863 +5864, U5864 +5865, U5865 +5866, U5866 +5867, U5867 +5868, U5868 +5869, U5869 +5870, U5870 +5871, U5871 +5872, U5872 +5873, U5873 +5874, U5874 +5875, U5875 +5876, U5876 +5877, U5877 +5878, U5878 +5879, U5879 +5880, U5880 +5881, U5881 +5882, U5882 +5883, U5883 +5884, U5884 +5885, U5885 +5886, U5886 +5887, U5887 +5888, U5888 +5889, U5889 +5890, U5890 +5891, U5891 +5892, U5892 +5893, U5893 +5894, U5894 +5895, U5895 +5896, U5896 +5897, U5897 +5898, U5898 +5899, U5899 +5900, U5900 +5901, U5901 +5902, U5902 +5903, U5903 +5904, U5904 +5905, U5905 +5906, U5906 +5907, U5907 +5908, U5908 +5909, U5909 +5910, U5910 +5911, U5911 +5912, U5912 +5913, U5913 +5914, U5914 +5915, U5915 +5916, U5916 +5917, U5917 +5918, U5918 +5919, U5919 +5920, U5920 +5921, U5921 +5922, U5922 +5923, U5923 +5924, U5924 +5925, U5925 +5926, U5926 +5927, U5927 +5928, U5928 +5929, U5929 +5930, U5930 +5931, U5931 +5932, U5932 +5933, U5933 +5934, U5934 +5935, U5935 +5936, U5936 +5937, U5937 +5938, U5938 +5939, U5939 +5940, U5940 +5941, U5941 +5942, U5942 +5943, U5943 +5944, U5944 +5945, U5945 +5946, U5946 +5947, U5947 +5948, U5948 +5949, U5949 +5950, U5950 +5951, U5951 +5952, U5952 +5953, U5953 +5954, U5954 +5955, U5955 +5956, U5956 +5957, U5957 +5958, U5958 +5959, U5959 +5960, U5960 +5961, U5961 +5962, U5962 +5963, U5963 +5964, U5964 +5965, U5965 +5966, U5966 +5967, U5967 +5968, U5968 +5969, U5969 +5970, U5970 +5971, U5971 +5972, U5972 +5973, U5973 +5974, U5974 +5975, U5975 +5976, U5976 +5977, U5977 +5978, U5978 +5979, U5979 +5980, U5980 +5981, U5981 +5982, U5982 +5983, U5983 +5984, U5984 +5985, U5985 +5986, U5986 +5987, U5987 +5988, U5988 +5989, U5989 +5990, U5990 +5991, U5991 +5992, U5992 +5993, U5993 +5994, U5994 +5995, U5995 +5996, U5996 +5997, U5997 +5998, U5998 +5999, U5999 +6000, U6000 +6001, U6001 +6002, U6002 +6003, U6003 +6004, U6004 +6005, U6005 +6006, U6006 +6007, U6007 +6008, U6008 +6009, U6009 +6010, U6010 +6011, U6011 +6012, U6012 +6013, U6013 +6014, U6014 +6015, U6015 +6016, U6016 +6017, U6017 +6018, U6018 +6019, U6019 +6020, U6020 +6021, U6021 +6022, U6022 +6023, U6023 +6024, U6024 +6025, U6025 +6026, U6026 +6027, U6027 +6028, U6028 +6029, U6029 +6030, U6030 +6031, U6031 +6032, U6032 +6033, U6033 +6034, U6034 +6035, U6035 +6036, U6036 +6037, U6037 +6038, U6038 +6039, U6039 +6040, U6040 +6041, U6041 +6042, U6042 +6043, U6043 +6044, U6044 +6045, U6045 +6046, U6046 +6047, U6047 +6048, U6048 +6049, U6049 +6050, U6050 +6051, U6051 +6052, U6052 +6053, U6053 +6054, U6054 +6055, U6055 +6056, U6056 +6057, U6057 +6058, U6058 +6059, U6059 +6060, U6060 +6061, U6061 +6062, U6062 +6063, U6063 +6064, U6064 +6065, U6065 +6066, U6066 +6067, U6067 +6068, U6068 +6069, U6069 +6070, U6070 +6071, U6071 +6072, U6072 +6073, U6073 +6074, U6074 +6075, U6075 +6076, U6076 +6077, U6077 +6078, U6078 +6079, U6079 +6080, U6080 +6081, U6081 +6082, U6082 +6083, U6083 +6084, U6084 +6085, U6085 +6086, U6086 +6087, U6087 +6088, U6088 +6089, U6089 +6090, U6090 +6091, U6091 +6092, U6092 +6093, U6093 +6094, U6094 +6095, U6095 +6096, U6096 +6097, U6097 +6098, U6098 +6099, U6099 +6100, U6100 +6101, U6101 +6102, U6102 +6103, U6103 +6104, U6104 +6105, U6105 +6106, U6106 +6107, U6107 +6108, U6108 +6109, U6109 +6110, U6110 +6111, U6111 +6112, U6112 +6113, U6113 +6114, U6114 +6115, U6115 +6116, U6116 +6117, U6117 +6118, U6118 +6119, U6119 +6120, U6120 +6121, U6121 +6122, U6122 +6123, U6123 +6124, U6124 +6125, U6125 +6126, U6126 +6127, U6127 +6128, U6128 +6129, U6129 +6130, U6130 +6131, U6131 +6132, U6132 +6133, U6133 +6134, U6134 +6135, U6135 +6136, U6136 +6137, U6137 +6138, U6138 +6139, U6139 +6140, U6140 +6141, U6141 +6142, U6142 +6143, U6143 +6144, U6144 +6145, U6145 +6146, U6146 +6147, U6147 +6148, U6148 +6149, U6149 +6150, U6150 +6151, U6151 +6152, U6152 +6153, U6153 +6154, U6154 +6155, U6155 +6156, U6156 +6157, U6157 +6158, U6158 +6159, U6159 +6160, U6160 +6161, U6161 +6162, U6162 +6163, U6163 +6164, U6164 +6165, U6165 +6166, U6166 +6167, U6167 +6168, U6168 +6169, U6169 +6170, U6170 +6171, U6171 +6172, U6172 +6173, U6173 +6174, U6174 +6175, U6175 +6176, U6176 +6177, U6177 +6178, U6178 +6179, U6179 +6180, U6180 +6181, U6181 +6182, U6182 +6183, U6183 +6184, U6184 +6185, U6185 +6186, U6186 +6187, U6187 +6188, U6188 +6189, U6189 +6190, U6190 +6191, U6191 +6192, U6192 +6193, U6193 +6194, U6194 +6195, U6195 +6196, U6196 +6197, U6197 +6198, U6198 +6199, U6199 +6200, U6200 +6201, U6201 +6202, U6202 +6203, U6203 +6204, U6204 +6205, U6205 +6206, U6206 +6207, U6207 +6208, U6208 +6209, U6209 +6210, U6210 +6211, U6211 +6212, U6212 +6213, U6213 +6214, U6214 +6215, U6215 +6216, U6216 +6217, U6217 +6218, U6218 +6219, U6219 +6220, U6220 +6221, U6221 +6222, U6222 +6223, U6223 +6224, U6224 +6225, U6225 +6226, U6226 +6227, U6227 +6228, U6228 +6229, U6229 +6230, U6230 +6231, U6231 +6232, U6232 +6233, U6233 +6234, U6234 +6235, U6235 +6236, U6236 +6237, U6237 +6238, U6238 +6239, U6239 +6240, U6240 +6241, U6241 +6242, U6242 +6243, U6243 +6244, U6244 +6245, U6245 +6246, U6246 +6247, U6247 +6248, U6248 +6249, U6249 +6250, U6250 +6251, U6251 +6252, U6252 +6253, U6253 +6254, U6254 +6255, U6255 +6256, U6256 +6257, U6257 +6258, U6258 +6259, U6259 +6260, U6260 +6261, U6261 +6262, U6262 +6263, U6263 +6264, U6264 +6265, U6265 +6266, U6266 +6267, U6267 +6268, U6268 +6269, U6269 +6270, U6270 +6271, U6271 +6272, U6272 +6273, U6273 +6274, U6274 +6275, U6275 +6276, U6276 +6277, U6277 +6278, U6278 +6279, U6279 +6280, U6280 +6281, U6281 +6282, U6282 +6283, U6283 +6284, U6284 +6285, U6285 +6286, U6286 +6287, U6287 +6288, U6288 +6289, U6289 +6290, U6290 +6291, U6291 +6292, U6292 +6293, U6293 +6294, U6294 +6295, U6295 +6296, U6296 +6297, U6297 +6298, U6298 +6299, U6299 +6300, U6300 +6301, U6301 +6302, U6302 +6303, U6303 +6304, U6304 +6305, U6305 +6306, U6306 +6307, U6307 +6308, U6308 +6309, U6309 +6310, U6310 +6311, U6311 +6312, U6312 +6313, U6313 +6314, U6314 +6315, U6315 +6316, U6316 +6317, U6317 +6318, U6318 +6319, U6319 +6320, U6320 +6321, U6321 +6322, U6322 +6323, U6323 +6324, U6324 +6325, U6325 +6326, U6326 +6327, U6327 +6328, U6328 +6329, U6329 +6330, U6330 +6331, U6331 +6332, U6332 +6333, U6333 +6334, U6334 +6335, U6335 +6336, U6336 +6337, U6337 +6338, U6338 +6339, U6339 +6340, U6340 +6341, U6341 +6342, U6342 +6343, U6343 +6344, U6344 +6345, U6345 +6346, U6346 +6347, U6347 +6348, U6348 +6349, U6349 +6350, U6350 +6351, U6351 +6352, U6352 +6353, U6353 +6354, U6354 +6355, U6355 +6356, U6356 +6357, U6357 +6358, U6358 +6359, U6359 +6360, U6360 +6361, U6361 +6362, U6362 +6363, U6363 +6364, U6364 +6365, U6365 +6366, U6366 +6367, U6367 +6368, U6368 +6369, U6369 +6370, U6370 +6371, U6371 +6372, U6372 +6373, U6373 +6374, U6374 +6375, U6375 +6376, U6376 +6377, U6377 +6378, U6378 +6379, U6379 +6380, U6380 +6381, U6381 +6382, U6382 +6383, U6383 +6384, U6384 +6385, U6385 +6386, U6386 +6387, U6387 +6388, U6388 +6389, U6389 +6390, U6390 +6391, U6391 +6392, U6392 +6393, U6393 +6394, U6394 +6395, U6395 +6396, U6396 +6397, U6397 +6398, U6398 +6399, U6399 +6400, U6400 +6401, U6401 +6402, U6402 +6403, U6403 +6404, U6404 +6405, U6405 +6406, U6406 +6407, U6407 +6408, U6408 +6409, U6409 +6410, U6410 +6411, U6411 +6412, U6412 +6413, U6413 +6414, U6414 +6415, U6415 +6416, U6416 +6417, U6417 +6418, U6418 +6419, U6419 +6420, U6420 +6421, U6421 +6422, U6422 +6423, U6423 +6424, U6424 +6425, U6425 +6426, U6426 +6427, U6427 +6428, U6428 +6429, U6429 +6430, U6430 +6431, U6431 +6432, U6432 +6433, U6433 +6434, U6434 +6435, U6435 +6436, U6436 +6437, U6437 +6438, U6438 +6439, U6439 +6440, U6440 +6441, U6441 +6442, U6442 +6443, U6443 +6444, U6444 +6445, U6445 +6446, U6446 +6447, U6447 +6448, U6448 +6449, U6449 +6450, U6450 +6451, U6451 +6452, U6452 +6453, U6453 +6454, U6454 +6455, U6455 +6456, U6456 +6457, U6457 +6458, U6458 +6459, U6459 +6460, U6460 +6461, U6461 +6462, U6462 +6463, U6463 +6464, U6464 +6465, U6465 +6466, U6466 +6467, U6467 +6468, U6468 +6469, U6469 +6470, U6470 +6471, U6471 +6472, U6472 +6473, U6473 +6474, U6474 +6475, U6475 +6476, U6476 +6477, U6477 +6478, U6478 +6479, U6479 +6480, U6480 +6481, U6481 +6482, U6482 +6483, U6483 +6484, U6484 +6485, U6485 +6486, U6486 +6487, U6487 +6488, U6488 +6489, U6489 +6490, U6490 +6491, U6491 +6492, U6492 +6493, U6493 +6494, U6494 +6495, U6495 +6496, U6496 +6497, U6497 +6498, U6498 +6499, U6499 +6500, U6500 +6501, U6501 +6502, U6502 +6503, U6503 +6504, U6504 +6505, U6505 +6506, U6506 +6507, U6507 +6508, U6508 +6509, U6509 +6510, U6510 +6511, U6511 +6512, U6512 +6513, U6513 +6514, U6514 +6515, U6515 +6516, U6516 +6517, U6517 +6518, U6518 +6519, U6519 +6520, U6520 +6521, U6521 +6522, U6522 +6523, U6523 +6524, U6524 +6525, U6525 +6526, U6526 +6527, U6527 +6528, U6528 +6529, U6529 +6530, U6530 +6531, U6531 +6532, U6532 +6533, U6533 +6534, U6534 +6535, U6535 +6536, U6536 +6537, U6537 +6538, U6538 +6539, U6539 +6540, U6540 +6541, U6541 +6542, U6542 +6543, U6543 +6544, U6544 +6545, U6545 +6546, U6546 +6547, U6547 +6548, U6548 +6549, U6549 +6550, U6550 +6551, U6551 +6552, U6552 +6553, U6553 +6554, U6554 +6555, U6555 +6556, U6556 +6557, U6557 +6558, U6558 +6559, U6559 +6560, U6560 +6561, U6561 +6562, U6562 +6563, U6563 +6564, U6564 +6565, U6565 +6566, U6566 +6567, U6567 +6568, U6568 +6569, U6569 +6570, U6570 +6571, U6571 +6572, U6572 +6573, U6573 +6574, U6574 +6575, U6575 +6576, U6576 +6577, U6577 +6578, U6578 +6579, U6579 +6580, U6580 +6581, U6581 +6582, U6582 +6583, U6583 +6584, U6584 +6585, U6585 +6586, U6586 +6587, U6587 +6588, U6588 +6589, U6589 +6590, U6590 +6591, U6591 +6592, U6592 +6593, U6593 +6594, U6594 +6595, U6595 +6596, U6596 +6597, U6597 +6598, U6598 +6599, U6599 +6600, U6600 +6601, U6601 +6602, U6602 +6603, U6603 +6604, U6604 +6605, U6605 +6606, U6606 +6607, U6607 +6608, U6608 +6609, U6609 +6610, U6610 +6611, U6611 +6612, U6612 +6613, U6613 +6614, U6614 +6615, U6615 +6616, U6616 +6617, U6617 +6618, U6618 +6619, U6619 +6620, U6620 +6621, U6621 +6622, U6622 +6623, U6623 +6624, U6624 +6625, U6625 +6626, U6626 +6627, U6627 +6628, U6628 +6629, U6629 +6630, U6630 +6631, U6631 +6632, U6632 +6633, U6633 +6634, U6634 +6635, U6635 +6636, U6636 +6637, U6637 +6638, U6638 +6639, U6639 +6640, U6640 +6641, U6641 +6642, U6642 +6643, U6643 +6644, U6644 +6645, U6645 +6646, U6646 +6647, U6647 +6648, U6648 +6649, U6649 +6650, U6650 +6651, U6651 +6652, U6652 +6653, U6653 +6654, U6654 +6655, U6655 +6656, U6656 +6657, U6657 +6658, U6658 +6659, U6659 +6660, U6660 +6661, U6661 +6662, U6662 +6663, U6663 +6664, U6664 +6665, U6665 +6666, U6666 +6667, U6667 +6668, U6668 +6669, U6669 +6670, U6670 +6671, U6671 +6672, U6672 +6673, U6673 +6674, U6674 +6675, U6675 +6676, U6676 +6677, U6677 +6678, U6678 +6679, U6679 +6680, U6680 +6681, U6681 +6682, U6682 +6683, U6683 +6684, U6684 +6685, U6685 +6686, U6686 +6687, U6687 +6688, U6688 +6689, U6689 +6690, U6690 +6691, U6691 +6692, U6692 +6693, U6693 +6694, U6694 +6695, U6695 +6696, U6696 +6697, U6697 +6698, U6698 +6699, U6699 +6700, U6700 +6701, U6701 +6702, U6702 +6703, U6703 +6704, U6704 +6705, U6705 +6706, U6706 +6707, U6707 +6708, U6708 +6709, U6709 +6710, U6710 +6711, U6711 +6712, U6712 +6713, U6713 +6714, U6714 +6715, U6715 +6716, U6716 +6717, U6717 +6718, U6718 +6719, U6719 +6720, U6720 +6721, U6721 +6722, U6722 +6723, U6723 +6724, U6724 +6725, U6725 +6726, U6726 +6727, U6727 +6728, U6728 +6729, U6729 +6730, U6730 +6731, U6731 +6732, U6732 +6733, U6733 +6734, U6734 +6735, U6735 +6736, U6736 +6737, U6737 +6738, U6738 +6739, U6739 +6740, U6740 +6741, U6741 +6742, U6742 +6743, U6743 +6744, U6744 +6745, U6745 +6746, U6746 +6747, U6747 +6748, U6748 +6749, U6749 +6750, U6750 +6751, U6751 +6752, U6752 +6753, U6753 +6754, U6754 +6755, U6755 +6756, U6756 +6757, U6757 +6758, U6758 +6759, U6759 +6760, U6760 +6761, U6761 +6762, U6762 +6763, U6763 +6764, U6764 +6765, U6765 +6766, U6766 +6767, U6767 +6768, U6768 +6769, U6769 +6770, U6770 +6771, U6771 +6772, U6772 +6773, U6773 +6774, U6774 +6775, U6775 +6776, U6776 +6777, U6777 +6778, U6778 +6779, U6779 +6780, U6780 +6781, U6781 +6782, U6782 +6783, U6783 +6784, U6784 +6785, U6785 +6786, U6786 +6787, U6787 +6788, U6788 +6789, U6789 +6790, U6790 +6791, U6791 +6792, U6792 +6793, U6793 +6794, U6794 +6795, U6795 +6796, U6796 +6797, U6797 +6798, U6798 +6799, U6799 +6800, U6800 +6801, U6801 +6802, U6802 +6803, U6803 +6804, U6804 +6805, U6805 +6806, U6806 +6807, U6807 +6808, U6808 +6809, U6809 +6810, U6810 +6811, U6811 +6812, U6812 +6813, U6813 +6814, U6814 +6815, U6815 +6816, U6816 +6817, U6817 +6818, U6818 +6819, U6819 +6820, U6820 +6821, U6821 +6822, U6822 +6823, U6823 +6824, U6824 +6825, U6825 +6826, U6826 +6827, U6827 +6828, U6828 +6829, U6829 +6830, U6830 +6831, U6831 +6832, U6832 +6833, U6833 +6834, U6834 +6835, U6835 +6836, U6836 +6837, U6837 +6838, U6838 +6839, U6839 +6840, U6840 +6841, U6841 +6842, U6842 +6843, U6843 +6844, U6844 +6845, U6845 +6846, U6846 +6847, U6847 +6848, U6848 +6849, U6849 +6850, U6850 +6851, U6851 +6852, U6852 +6853, U6853 +6854, U6854 +6855, U6855 +6856, U6856 +6857, U6857 +6858, U6858 +6859, U6859 +6860, U6860 +6861, U6861 +6862, U6862 +6863, U6863 +6864, U6864 +6865, U6865 +6866, U6866 +6867, U6867 +6868, U6868 +6869, U6869 +6870, U6870 +6871, U6871 +6872, U6872 +6873, U6873 +6874, U6874 +6875, U6875 +6876, U6876 +6877, U6877 +6878, U6878 +6879, U6879 +6880, U6880 +6881, U6881 +6882, U6882 +6883, U6883 +6884, U6884 +6885, U6885 +6886, U6886 +6887, U6887 +6888, U6888 +6889, U6889 +6890, U6890 +6891, U6891 +6892, U6892 +6893, U6893 +6894, U6894 +6895, U6895 +6896, U6896 +6897, U6897 +6898, U6898 +6899, U6899 +6900, U6900 +6901, U6901 +6902, U6902 +6903, U6903 +6904, U6904 +6905, U6905 +6906, U6906 +6907, U6907 +6908, U6908 +6909, U6909 +6910, U6910 +6911, U6911 +6912, U6912 +6913, U6913 +6914, U6914 +6915, U6915 +6916, U6916 +6917, U6917 +6918, U6918 +6919, U6919 +6920, U6920 +6921, U6921 +6922, U6922 +6923, U6923 +6924, U6924 +6925, U6925 +6926, U6926 +6927, U6927 +6928, U6928 +6929, U6929 +6930, U6930 +6931, U6931 +6932, U6932 +6933, U6933 +6934, U6934 +6935, U6935 +6936, U6936 +6937, U6937 +6938, U6938 +6939, U6939 +6940, U6940 +6941, U6941 +6942, U6942 +6943, U6943 +6944, U6944 +6945, U6945 +6946, U6946 +6947, U6947 +6948, U6948 +6949, U6949 +6950, U6950 +6951, U6951 +6952, U6952 +6953, U6953 +6954, U6954 +6955, U6955 +6956, U6956 +6957, U6957 +6958, U6958 +6959, U6959 +6960, U6960 +6961, U6961 +6962, U6962 +6963, U6963 +6964, U6964 +6965, U6965 +6966, U6966 +6967, U6967 +6968, U6968 +6969, U6969 +6970, U6970 +6971, U6971 +6972, U6972 +6973, U6973 +6974, U6974 +6975, U6975 +6976, U6976 +6977, U6977 +6978, U6978 +6979, U6979 +6980, U6980 +6981, U6981 +6982, U6982 +6983, U6983 +6984, U6984 +6985, U6985 +6986, U6986 +6987, U6987 +6988, U6988 +6989, U6989 +6990, U6990 +6991, U6991 +6992, U6992 +6993, U6993 +6994, U6994 +6995, U6995 +6996, U6996 +6997, U6997 +6998, U6998 +6999, U6999 +7000, U7000 +7001, U7001 +7002, U7002 +7003, U7003 +7004, U7004 +7005, U7005 +7006, U7006 +7007, U7007 +7008, U7008 +7009, U7009 +7010, U7010 +7011, U7011 +7012, U7012 +7013, U7013 +7014, U7014 +7015, U7015 +7016, U7016 +7017, U7017 +7018, U7018 +7019, U7019 +7020, U7020 +7021, U7021 +7022, U7022 +7023, U7023 +7024, U7024 +7025, U7025 +7026, U7026 +7027, U7027 +7028, U7028 +7029, U7029 +7030, U7030 +7031, U7031 +7032, U7032 +7033, U7033 +7034, U7034 +7035, U7035 +7036, U7036 +7037, U7037 +7038, U7038 +7039, U7039 +7040, U7040 +7041, U7041 +7042, U7042 +7043, U7043 +7044, U7044 +7045, U7045 +7046, U7046 +7047, U7047 +7048, U7048 +7049, U7049 +7050, U7050 +7051, U7051 +7052, U7052 +7053, U7053 +7054, U7054 +7055, U7055 +7056, U7056 +7057, U7057 +7058, U7058 +7059, U7059 +7060, U7060 +7061, U7061 +7062, U7062 +7063, U7063 +7064, U7064 +7065, U7065 +7066, U7066 +7067, U7067 +7068, U7068 +7069, U7069 +7070, U7070 +7071, U7071 +7072, U7072 +7073, U7073 +7074, U7074 +7075, U7075 +7076, U7076 +7077, U7077 +7078, U7078 +7079, U7079 +7080, U7080 +7081, U7081 +7082, U7082 +7083, U7083 +7084, U7084 +7085, U7085 +7086, U7086 +7087, U7087 +7088, U7088 +7089, U7089 +7090, U7090 +7091, U7091 +7092, U7092 +7093, U7093 +7094, U7094 +7095, U7095 +7096, U7096 +7097, U7097 +7098, U7098 +7099, U7099 +7100, U7100 +7101, U7101 +7102, U7102 +7103, U7103 +7104, U7104 +7105, U7105 +7106, U7106 +7107, U7107 +7108, U7108 +7109, U7109 +7110, U7110 +7111, U7111 +7112, U7112 +7113, U7113 +7114, U7114 +7115, U7115 +7116, U7116 +7117, U7117 +7118, U7118 +7119, U7119 +7120, U7120 +7121, U7121 +7122, U7122 +7123, U7123 +7124, U7124 +7125, U7125 +7126, U7126 +7127, U7127 +7128, U7128 +7129, U7129 +7130, U7130 +7131, U7131 +7132, U7132 +7133, U7133 +7134, U7134 +7135, U7135 +7136, U7136 +7137, U7137 +7138, U7138 +7139, U7139 +7140, U7140 +7141, U7141 +7142, U7142 +7143, U7143 +7144, U7144 +7145, U7145 +7146, U7146 +7147, U7147 +7148, U7148 +7149, U7149 +7150, U7150 +7151, U7151 +7152, U7152 +7153, U7153 +7154, U7154 +7155, U7155 +7156, U7156 +7157, U7157 +7158, U7158 +7159, U7159 +7160, U7160 +7161, U7161 +7162, U7162 +7163, U7163 +7164, U7164 +7165, U7165 +7166, U7166 +7167, U7167 +7168, U7168 +7169, U7169 +7170, U7170 +7171, U7171 +7172, U7172 +7173, U7173 +7174, U7174 +7175, U7175 +7176, U7176 +7177, U7177 +7178, U7178 +7179, U7179 +7180, U7180 +7181, U7181 +7182, U7182 +7183, U7183 +7184, U7184 +7185, U7185 +7186, U7186 +7187, U7187 +7188, U7188 +7189, U7189 +7190, U7190 +7191, U7191 +7192, U7192 +7193, U7193 +7194, U7194 +7195, U7195 +7196, U7196 +7197, U7197 +7198, U7198 +7199, U7199 +7200, U7200 +7201, U7201 +7202, U7202 +7203, U7203 +7204, U7204 +7205, U7205 +7206, U7206 +7207, U7207 +7208, U7208 +7209, U7209 +7210, U7210 +7211, U7211 +7212, U7212 +7213, U7213 +7214, U7214 +7215, U7215 +7216, U7216 +7217, U7217 +7218, U7218 +7219, U7219 +7220, U7220 +7221, U7221 +7222, U7222 +7223, U7223 +7224, U7224 +7225, U7225 +7226, U7226 +7227, U7227 +7228, U7228 +7229, U7229 +7230, U7230 +7231, U7231 +7232, U7232 +7233, U7233 +7234, U7234 +7235, U7235 +7236, U7236 +7237, U7237 +7238, U7238 +7239, U7239 +7240, U7240 +7241, U7241 +7242, U7242 +7243, U7243 +7244, U7244 +7245, U7245 +7246, U7246 +7247, U7247 +7248, U7248 +7249, U7249 +7250, U7250 +7251, U7251 +7252, U7252 +7253, U7253 +7254, U7254 +7255, U7255 +7256, U7256 +7257, U7257 +7258, U7258 +7259, U7259 +7260, U7260 +7261, U7261 +7262, U7262 +7263, U7263 +7264, U7264 +7265, U7265 +7266, U7266 +7267, U7267 +7268, U7268 +7269, U7269 +7270, U7270 +7271, U7271 +7272, U7272 +7273, U7273 +7274, U7274 +7275, U7275 +7276, U7276 +7277, U7277 +7278, U7278 +7279, U7279 +7280, U7280 +7281, U7281 +7282, U7282 +7283, U7283 +7284, U7284 +7285, U7285 +7286, U7286 +7287, U7287 +7288, U7288 +7289, U7289 +7290, U7290 +7291, U7291 +7292, U7292 +7293, U7293 +7294, U7294 +7295, U7295 +7296, U7296 +7297, U7297 +7298, U7298 +7299, U7299 +7300, U7300 +7301, U7301 +7302, U7302 +7303, U7303 +7304, U7304 +7305, U7305 +7306, U7306 +7307, U7307 +7308, U7308 +7309, U7309 +7310, U7310 +7311, U7311 +7312, U7312 +7313, U7313 +7314, U7314 +7315, U7315 +7316, U7316 +7317, U7317 +7318, U7318 +7319, U7319 +7320, U7320 +7321, U7321 +7322, U7322 +7323, U7323 +7324, U7324 +7325, U7325 +7326, U7326 +7327, U7327 +7328, U7328 +7329, U7329 +7330, U7330 +7331, U7331 +7332, U7332 +7333, U7333 +7334, U7334 +7335, U7335 +7336, U7336 +7337, U7337 +7338, U7338 +7339, U7339 +7340, U7340 +7341, U7341 +7342, U7342 +7343, U7343 +7344, U7344 +7345, U7345 +7346, U7346 +7347, U7347 +7348, U7348 +7349, U7349 +7350, U7350 +7351, U7351 +7352, U7352 +7353, U7353 +7354, U7354 +7355, U7355 +7356, U7356 +7357, U7357 +7358, U7358 +7359, U7359 +7360, U7360 +7361, U7361 +7362, U7362 +7363, U7363 +7364, U7364 +7365, U7365 +7366, U7366 +7367, U7367 +7368, U7368 +7369, U7369 +7370, U7370 +7371, U7371 +7372, U7372 +7373, U7373 +7374, U7374 +7375, U7375 +7376, U7376 +7377, U7377 +7378, U7378 +7379, U7379 +7380, U7380 +7381, U7381 +7382, U7382 +7383, U7383 +7384, U7384 +7385, U7385 +7386, U7386 +7387, U7387 +7388, U7388 +7389, U7389 +7390, U7390 +7391, U7391 +7392, U7392 +7393, U7393 +7394, U7394 +7395, U7395 +7396, U7396 +7397, U7397 +7398, U7398 +7399, U7399 +7400, U7400 +7401, U7401 +7402, U7402 +7403, U7403 +7404, U7404 +7405, U7405 +7406, U7406 +7407, U7407 +7408, U7408 +7409, U7409 +7410, U7410 +7411, U7411 +7412, U7412 +7413, U7413 +7414, U7414 +7415, U7415 +7416, U7416 +7417, U7417 +7418, U7418 +7419, U7419 +7420, U7420 +7421, U7421 +7422, U7422 +7423, U7423 +7424, U7424 +7425, U7425 +7426, U7426 +7427, U7427 +7428, U7428 +7429, U7429 +7430, U7430 +7431, U7431 +7432, U7432 +7433, U7433 +7434, U7434 +7435, U7435 +7436, U7436 +7437, U7437 +7438, U7438 +7439, U7439 +7440, U7440 +7441, U7441 +7442, U7442 +7443, U7443 +7444, U7444 +7445, U7445 +7446, U7446 +7447, U7447 +7448, U7448 +7449, U7449 +7450, U7450 +7451, U7451 +7452, U7452 +7453, U7453 +7454, U7454 +7455, U7455 +7456, U7456 +7457, U7457 +7458, U7458 +7459, U7459 +7460, U7460 +7461, U7461 +7462, U7462 +7463, U7463 +7464, U7464 +7465, U7465 +7466, U7466 +7467, U7467 +7468, U7468 +7469, U7469 +7470, U7470 +7471, U7471 +7472, U7472 +7473, U7473 +7474, U7474 +7475, U7475 +7476, U7476 +7477, U7477 +7478, U7478 +7479, U7479 +7480, U7480 +7481, U7481 +7482, U7482 +7483, U7483 +7484, U7484 +7485, U7485 +7486, U7486 +7487, U7487 +7488, U7488 +7489, U7489 +7490, U7490 +7491, U7491 +7492, U7492 +7493, U7493 +7494, U7494 +7495, U7495 +7496, U7496 +7497, U7497 +7498, U7498 +7499, U7499 +7500, U7500 +7501, U7501 +7502, U7502 +7503, U7503 +7504, U7504 +7505, U7505 +7506, U7506 +7507, U7507 +7508, U7508 +7509, U7509 +7510, U7510 +7511, U7511 +7512, U7512 +7513, U7513 +7514, U7514 +7515, U7515 +7516, U7516 +7517, U7517 +7518, U7518 +7519, U7519 +7520, U7520 +7521, U7521 +7522, U7522 +7523, U7523 +7524, U7524 +7525, U7525 +7526, U7526 +7527, U7527 +7528, U7528 +7529, U7529 +7530, U7530 +7531, U7531 +7532, U7532 +7533, U7533 +7534, U7534 +7535, U7535 +7536, U7536 +7537, U7537 +7538, U7538 +7539, U7539 +7540, U7540 +7541, U7541 +7542, U7542 +7543, U7543 +7544, U7544 +7545, U7545 +7546, U7546 +7547, U7547 +7548, U7548 +7549, U7549 +7550, U7550 +7551, U7551 +7552, U7552 +7553, U7553 +7554, U7554 +7555, U7555 +7556, U7556 +7557, U7557 +7558, U7558 +7559, U7559 +7560, U7560 +7561, U7561 +7562, U7562 +7563, U7563 +7564, U7564 +7565, U7565 +7566, U7566 +7567, U7567 +7568, U7568 +7569, U7569 +7570, U7570 +7571, U7571 +7572, U7572 +7573, U7573 +7574, U7574 +7575, U7575 +7576, U7576 +7577, U7577 +7578, U7578 +7579, U7579 +7580, U7580 +7581, U7581 +7582, U7582 +7583, U7583 +7584, U7584 +7585, U7585 +7586, U7586 +7587, U7587 +7588, U7588 +7589, U7589 +7590, U7590 +7591, U7591 +7592, U7592 +7593, U7593 +7594, U7594 +7595, U7595 +7596, U7596 +7597, U7597 +7598, U7598 +7599, U7599 +7600, U7600 +7601, U7601 +7602, U7602 +7603, U7603 +7604, U7604 +7605, U7605 +7606, U7606 +7607, U7607 +7608, U7608 +7609, U7609 +7610, U7610 +7611, U7611 +7612, U7612 +7613, U7613 +7614, U7614 +7615, U7615 +7616, U7616 +7617, U7617 +7618, U7618 +7619, U7619 +7620, U7620 +7621, U7621 +7622, U7622 +7623, U7623 +7624, U7624 +7625, U7625 +7626, U7626 +7627, U7627 +7628, U7628 +7629, U7629 +7630, U7630 +7631, U7631 +7632, U7632 +7633, U7633 +7634, U7634 +7635, U7635 +7636, U7636 +7637, U7637 +7638, U7638 +7639, U7639 +7640, U7640 +7641, U7641 +7642, U7642 +7643, U7643 +7644, U7644 +7645, U7645 +7646, U7646 +7647, U7647 +7648, U7648 +7649, U7649 +7650, U7650 +7651, U7651 +7652, U7652 +7653, U7653 +7654, U7654 +7655, U7655 +7656, U7656 +7657, U7657 +7658, U7658 +7659, U7659 +7660, U7660 +7661, U7661 +7662, U7662 +7663, U7663 +7664, U7664 +7665, U7665 +7666, U7666 +7667, U7667 +7668, U7668 +7669, U7669 +7670, U7670 +7671, U7671 +7672, U7672 +7673, U7673 +7674, U7674 +7675, U7675 +7676, U7676 +7677, U7677 +7678, U7678 +7679, U7679 +7680, U7680 +7681, U7681 +7682, U7682 +7683, U7683 +7684, U7684 +7685, U7685 +7686, U7686 +7687, U7687 +7688, U7688 +7689, U7689 +7690, U7690 +7691, U7691 +7692, U7692 +7693, U7693 +7694, U7694 +7695, U7695 +7696, U7696 +7697, U7697 +7698, U7698 +7699, U7699 +7700, U7700 +7701, U7701 +7702, U7702 +7703, U7703 +7704, U7704 +7705, U7705 +7706, U7706 +7707, U7707 +7708, U7708 +7709, U7709 +7710, U7710 +7711, U7711 +7712, U7712 +7713, U7713 +7714, U7714 +7715, U7715 +7716, U7716 +7717, U7717 +7718, U7718 +7719, U7719 +7720, U7720 +7721, U7721 +7722, U7722 +7723, U7723 +7724, U7724 +7725, U7725 +7726, U7726 +7727, U7727 +7728, U7728 +7729, U7729 +7730, U7730 +7731, U7731 +7732, U7732 +7733, U7733 +7734, U7734 +7735, U7735 +7736, U7736 +7737, U7737 +7738, U7738 +7739, U7739 +7740, U7740 +7741, U7741 +7742, U7742 +7743, U7743 +7744, U7744 +7745, U7745 +7746, U7746 +7747, U7747 +7748, U7748 +7749, U7749 +7750, U7750 +7751, U7751 +7752, U7752 +7753, U7753 +7754, U7754 +7755, U7755 +7756, U7756 +7757, U7757 +7758, U7758 +7759, U7759 +7760, U7760 +7761, U7761 +7762, U7762 +7763, U7763 +7764, U7764 +7765, U7765 +7766, U7766 +7767, U7767 +7768, U7768 +7769, U7769 +7770, U7770 +7771, U7771 +7772, U7772 +7773, U7773 +7774, U7774 +7775, U7775 +7776, U7776 +7777, U7777 +7778, U7778 +7779, U7779 +7780, U7780 +7781, U7781 +7782, U7782 +7783, U7783 +7784, U7784 +7785, U7785 +7786, U7786 +7787, U7787 +7788, U7788 +7789, U7789 +7790, U7790 +7791, U7791 +7792, U7792 +7793, U7793 +7794, U7794 +7795, U7795 +7796, U7796 +7797, U7797 +7798, U7798 +7799, U7799 +7800, U7800 +7801, U7801 +7802, U7802 +7803, U7803 +7804, U7804 +7805, U7805 +7806, U7806 +7807, U7807 +7808, U7808 +7809, U7809 +7810, U7810 +7811, U7811 +7812, U7812 +7813, U7813 +7814, U7814 +7815, U7815 +7816, U7816 +7817, U7817 +7818, U7818 +7819, U7819 +7820, U7820 +7821, U7821 +7822, U7822 +7823, U7823 +7824, U7824 +7825, U7825 +7826, U7826 +7827, U7827 +7828, U7828 +7829, U7829 +7830, U7830 +7831, U7831 +7832, U7832 +7833, U7833 +7834, U7834 +7835, U7835 +7836, U7836 +7837, U7837 +7838, U7838 +7839, U7839 +7840, U7840 +7841, U7841 +7842, U7842 +7843, U7843 +7844, U7844 +7845, U7845 +7846, U7846 +7847, U7847 +7848, U7848 +7849, U7849 +7850, U7850 +7851, U7851 +7852, U7852 +7853, U7853 +7854, U7854 +7855, U7855 +7856, U7856 +7857, U7857 +7858, U7858 +7859, U7859 +7860, U7860 +7861, U7861 +7862, U7862 +7863, U7863 +7864, U7864 +7865, U7865 +7866, U7866 +7867, U7867 +7868, U7868 +7869, U7869 +7870, U7870 +7871, U7871 +7872, U7872 +7873, U7873 +7874, U7874 +7875, U7875 +7876, U7876 +7877, U7877 +7878, U7878 +7879, U7879 +7880, U7880 +7881, U7881 +7882, U7882 +7883, U7883 +7884, U7884 +7885, U7885 +7886, U7886 +7887, U7887 +7888, U7888 +7889, U7889 +7890, U7890 +7891, U7891 +7892, U7892 +7893, U7893 +7894, U7894 +7895, U7895 +7896, U7896 +7897, U7897 +7898, U7898 +7899, U7899 +7900, U7900 +7901, U7901 +7902, U7902 +7903, U7903 +7904, U7904 +7905, U7905 +7906, U7906 +7907, U7907 +7908, U7908 +7909, U7909 +7910, U7910 +7911, U7911 +7912, U7912 +7913, U7913 +7914, U7914 +7915, U7915 +7916, U7916 +7917, U7917 +7918, U7918 +7919, U7919 +7920, U7920 +7921, U7921 +7922, U7922 +7923, U7923 +7924, U7924 +7925, U7925 +7926, U7926 +7927, U7927 +7928, U7928 +7929, U7929 +7930, U7930 +7931, U7931 +7932, U7932 +7933, U7933 +7934, U7934 +7935, U7935 +7936, U7936 +7937, U7937 +7938, U7938 +7939, U7939 +7940, U7940 +7941, U7941 +7942, U7942 +7943, U7943 +7944, U7944 +7945, U7945 +7946, U7946 +7947, U7947 +7948, U7948 +7949, U7949 +7950, U7950 +7951, U7951 +7952, U7952 +7953, U7953 +7954, U7954 +7955, U7955 +7956, U7956 +7957, U7957 +7958, U7958 +7959, U7959 +7960, U7960 +7961, U7961 +7962, U7962 +7963, U7963 +7964, U7964 +7965, U7965 +7966, U7966 +7967, U7967 +7968, U7968 +7969, U7969 +7970, U7970 +7971, U7971 +7972, U7972 +7973, U7973 +7974, U7974 +7975, U7975 +7976, U7976 +7977, U7977 +7978, U7978 +7979, U7979 +7980, U7980 +7981, U7981 +7982, U7982 +7983, U7983 +7984, U7984 +7985, U7985 +7986, U7986 +7987, U7987 +7988, U7988 +7989, U7989 +7990, U7990 +7991, U7991 +7992, U7992 +7993, U7993 +7994, U7994 +7995, U7995 +7996, U7996 +7997, U7997 +7998, U7998 +7999, U7999 +8000, U8000 +8001, U8001 +8002, U8002 +8003, U8003 +8004, U8004 +8005, U8005 +8006, U8006 +8007, U8007 +8008, U8008 +8009, U8009 +8010, U8010 +8011, U8011 +8012, U8012 +8013, U8013 +8014, U8014 +8015, U8015 +8016, U8016 +8017, U8017 +8018, U8018 +8019, U8019 +8020, U8020 +8021, U8021 +8022, U8022 +8023, U8023 +8024, U8024 +8025, U8025 +8026, U8026 +8027, U8027 +8028, U8028 +8029, U8029 +8030, U8030 +8031, U8031 +8032, U8032 +8033, U8033 +8034, U8034 +8035, U8035 +8036, U8036 +8037, U8037 +8038, U8038 +8039, U8039 +8040, U8040 +8041, U8041 +8042, U8042 +8043, U8043 +8044, U8044 +8045, U8045 +8046, U8046 +8047, U8047 +8048, U8048 +8049, U8049 +8050, U8050 +8051, U8051 +8052, U8052 +8053, U8053 +8054, U8054 +8055, U8055 +8056, U8056 +8057, U8057 +8058, U8058 +8059, U8059 +8060, U8060 +8061, U8061 +8062, U8062 +8063, U8063 +8064, U8064 +8065, U8065 +8066, U8066 +8067, U8067 +8068, U8068 +8069, U8069 +8070, U8070 +8071, U8071 +8072, U8072 +8073, U8073 +8074, U8074 +8075, U8075 +8076, U8076 +8077, U8077 +8078, U8078 +8079, U8079 +8080, U8080 +8081, U8081 +8082, U8082 +8083, U8083 +8084, U8084 +8085, U8085 +8086, U8086 +8087, U8087 +8088, U8088 +8089, U8089 +8090, U8090 +8091, U8091 +8092, U8092 +8093, U8093 +8094, U8094 +8095, U8095 +8096, U8096 +8097, U8097 +8098, U8098 +8099, U8099 +8100, U8100 +8101, U8101 +8102, U8102 +8103, U8103 +8104, U8104 +8105, U8105 +8106, U8106 +8107, U8107 +8108, U8108 +8109, U8109 +8110, U8110 +8111, U8111 +8112, U8112 +8113, U8113 +8114, U8114 +8115, U8115 +8116, U8116 +8117, U8117 +8118, U8118 +8119, U8119 +8120, U8120 +8121, U8121 +8122, U8122 +8123, U8123 +8124, U8124 +8125, U8125 +8126, U8126 +8127, U8127 +8128, U8128 +8129, U8129 +8130, U8130 +8131, U8131 +8132, U8132 +8133, U8133 +8134, U8134 +8135, U8135 +8136, U8136 +8137, U8137 +8138, U8138 +8139, U8139 +8140, U8140 +8141, U8141 +8142, U8142 +8143, U8143 +8144, U8144 +8145, U8145 +8146, U8146 +8147, U8147 +8148, U8148 +8149, U8149 +8150, U8150 +8151, U8151 +8152, U8152 +8153, U8153 +8154, U8154 +8155, U8155 +8156, U8156 +8157, U8157 +8158, U8158 +8159, U8159 +8160, U8160 +8161, U8161 +8162, U8162 +8163, U8163 +8164, U8164 +8165, U8165 +8166, U8166 +8167, U8167 +8168, U8168 +8169, U8169 +8170, U8170 +8171, U8171 +8172, U8172 +8173, U8173 +8174, U8174 +8175, U8175 +8176, U8176 +8177, U8177 +8178, U8178 +8179, U8179 +8180, U8180 +8181, U8181 +8182, U8182 +8183, U8183 +8184, U8184 +8185, U8185 +8186, U8186 +8187, U8187 +8188, U8188 +8189, U8189 +8190, U8190 +8191, U8191 +8192, U8192 +8193, U8193 +8194, U8194 +8195, U8195 +8196, U8196 +8197, U8197 +8198, U8198 +8199, U8199 +8200, U8200 +8201, U8201 +8202, U8202 +8203, U8203 +8204, U8204 +8205, U8205 +8206, U8206 +8207, U8207 +8208, U8208 +8209, U8209 +8210, U8210 +8211, U8211 +8212, U8212 +8213, U8213 +8214, U8214 +8215, U8215 +8216, U8216 +8217, U8217 +8218, U8218 +8219, U8219 +8220, U8220 +8221, U8221 +8222, U8222 +8223, U8223 +8224, U8224 +8225, U8225 +8226, U8226 +8227, U8227 +8228, U8228 +8229, U8229 +8230, U8230 +8231, U8231 +8232, U8232 +8233, U8233 +8234, U8234 +8235, U8235 +8236, U8236 +8237, U8237 +8238, U8238 +8239, U8239 +8240, U8240 +8241, U8241 +8242, U8242 +8243, U8243 +8244, U8244 +8245, U8245 +8246, U8246 +8247, U8247 +8248, U8248 +8249, U8249 +8250, U8250 +8251, U8251 +8252, U8252 +8253, U8253 +8254, U8254 +8255, U8255 +8256, U8256 +8257, U8257 +8258, U8258 +8259, U8259 +8260, U8260 +8261, U8261 +8262, U8262 +8263, U8263 +8264, U8264 +8265, U8265 +8266, U8266 +8267, U8267 +8268, U8268 +8269, U8269 +8270, U8270 +8271, U8271 +8272, U8272 +8273, U8273 +8274, U8274 +8275, U8275 +8276, U8276 +8277, U8277 +8278, U8278 +8279, U8279 +8280, U8280 +8281, U8281 +8282, U8282 +8283, U8283 +8284, U8284 +8285, U8285 +8286, U8286 +8287, U8287 +8288, U8288 +8289, U8289 +8290, U8290 +8291, U8291 +8292, U8292 +8293, U8293 +8294, U8294 +8295, U8295 +8296, U8296 +8297, U8297 +8298, U8298 +8299, U8299 +8300, U8300 +8301, U8301 +8302, U8302 +8303, U8303 +8304, U8304 +8305, U8305 +8306, U8306 +8307, U8307 +8308, U8308 +8309, U8309 +8310, U8310 +8311, U8311 +8312, U8312 +8313, U8313 +8314, U8314 +8315, U8315 +8316, U8316 +8317, U8317 +8318, U8318 +8319, U8319 +8320, U8320 +8321, U8321 +8322, U8322 +8323, U8323 +8324, U8324 +8325, U8325 +8326, U8326 +8327, U8327 +8328, U8328 +8329, U8329 +8330, U8330 +8331, U8331 +8332, U8332 +8333, U8333 +8334, U8334 +8335, U8335 +8336, U8336 +8337, U8337 +8338, U8338 +8339, U8339 +8340, U8340 +8341, U8341 +8342, U8342 +8343, U8343 +8344, U8344 +8345, U8345 +8346, U8346 +8347, U8347 +8348, U8348 +8349, U8349 +8350, U8350 +8351, U8351 +8352, U8352 +8353, U8353 +8354, U8354 +8355, U8355 +8356, U8356 +8357, U8357 +8358, U8358 +8359, U8359 +8360, U8360 +8361, U8361 +8362, U8362 +8363, U8363 +8364, U8364 +8365, U8365 +8366, U8366 +8367, U8367 +8368, U8368 +8369, U8369 +8370, U8370 +8371, U8371 +8372, U8372 +8373, U8373 +8374, U8374 +8375, U8375 +8376, U8376 +8377, U8377 +8378, U8378 +8379, U8379 +8380, U8380 +8381, U8381 +8382, U8382 +8383, U8383 +8384, U8384 +8385, U8385 +8386, U8386 +8387, U8387 +8388, U8388 +8389, U8389 +8390, U8390 +8391, U8391 +8392, U8392 +8393, U8393 +8394, U8394 +8395, U8395 +8396, U8396 +8397, U8397 +8398, U8398 +8399, U8399 +8400, U8400 +8401, U8401 +8402, U8402 +8403, U8403 +8404, U8404 +8405, U8405 +8406, U8406 +8407, U8407 +8408, U8408 +8409, U8409 +8410, U8410 +8411, U8411 +8412, U8412 +8413, U8413 +8414, U8414 +8415, U8415 +8416, U8416 +8417, U8417 +8418, U8418 +8419, U8419 +8420, U8420 +8421, U8421 +8422, U8422 +8423, U8423 +8424, U8424 +8425, U8425 +8426, U8426 +8427, U8427 +8428, U8428 +8429, U8429 +8430, U8430 +8431, U8431 +8432, U8432 +8433, U8433 +8434, U8434 +8435, U8435 +8436, U8436 +8437, U8437 +8438, U8438 +8439, U8439 +8440, U8440 +8441, U8441 +8442, U8442 +8443, U8443 +8444, U8444 +8445, U8445 +8446, U8446 +8447, U8447 +8448, U8448 +8449, U8449 +8450, U8450 +8451, U8451 +8452, U8452 +8453, U8453 +8454, U8454 +8455, U8455 +8456, U8456 +8457, U8457 +8458, U8458 +8459, U8459 +8460, U8460 +8461, U8461 +8462, U8462 +8463, U8463 +8464, U8464 +8465, U8465 +8466, U8466 +8467, U8467 +8468, U8468 +8469, U8469 +8470, U8470 +8471, U8471 +8472, U8472 +8473, U8473 +8474, U8474 +8475, U8475 +8476, U8476 +8477, U8477 +8478, U8478 +8479, U8479 +8480, U8480 +8481, U8481 +8482, U8482 +8483, U8483 +8484, U8484 +8485, U8485 +8486, U8486 +8487, U8487 +8488, U8488 +8489, U8489 +8490, U8490 +8491, U8491 +8492, U8492 +8493, U8493 +8494, U8494 +8495, U8495 +8496, U8496 +8497, U8497 +8498, U8498 +8499, U8499 +8500, U8500 +8501, U8501 +8502, U8502 +8503, U8503 +8504, U8504 +8505, U8505 +8506, U8506 +8507, U8507 +8508, U8508 +8509, U8509 +8510, U8510 +8511, U8511 +8512, U8512 +8513, U8513 +8514, U8514 +8515, U8515 +8516, U8516 +8517, U8517 +8518, U8518 +8519, U8519 +8520, U8520 +8521, U8521 +8522, U8522 +8523, U8523 +8524, U8524 +8525, U8525 +8526, U8526 +8527, U8527 +8528, U8528 +8529, U8529 +8530, U8530 +8531, U8531 +8532, U8532 +8533, U8533 +8534, U8534 +8535, U8535 +8536, U8536 +8537, U8537 +8538, U8538 +8539, U8539 +8540, U8540 +8541, U8541 +8542, U8542 +8543, U8543 +8544, U8544 +8545, U8545 +8546, U8546 +8547, U8547 +8548, U8548 +8549, U8549 +8550, U8550 +8551, U8551 +8552, U8552 +8553, U8553 +8554, U8554 +8555, U8555 +8556, U8556 +8557, U8557 +8558, U8558 +8559, U8559 +8560, U8560 +8561, U8561 +8562, U8562 +8563, U8563 +8564, U8564 +8565, U8565 +8566, U8566 +8567, U8567 +8568, U8568 +8569, U8569 +8570, U8570 +8571, U8571 +8572, U8572 +8573, U8573 +8574, U8574 +8575, U8575 +8576, U8576 +8577, U8577 +8578, U8578 +8579, U8579 +8580, U8580 +8581, U8581 +8582, U8582 +8583, U8583 +8584, U8584 +8585, U8585 +8586, U8586 +8587, U8587 +8588, U8588 +8589, U8589 +8590, U8590 +8591, U8591 +8592, U8592 +8593, U8593 +8594, U8594 +8595, U8595 +8596, U8596 +8597, U8597 +8598, U8598 +8599, U8599 +8600, U8600 +8601, U8601 +8602, U8602 +8603, U8603 +8604, U8604 +8605, U8605 +8606, U8606 +8607, U8607 +8608, U8608 +8609, U8609 +8610, U8610 +8611, U8611 +8612, U8612 +8613, U8613 +8614, U8614 +8615, U8615 +8616, U8616 +8617, U8617 +8618, U8618 +8619, U8619 +8620, U8620 +8621, U8621 +8622, U8622 +8623, U8623 +8624, U8624 +8625, U8625 +8626, U8626 +8627, U8627 +8628, U8628 +8629, U8629 +8630, U8630 +8631, U8631 +8632, U8632 +8633, U8633 +8634, U8634 +8635, U8635 +8636, U8636 +8637, U8637 +8638, U8638 +8639, U8639 +8640, U8640 +8641, U8641 +8642, U8642 +8643, U8643 +8644, U8644 +8645, U8645 +8646, U8646 +8647, U8647 +8648, U8648 +8649, U8649 +8650, U8650 +8651, U8651 +8652, U8652 +8653, U8653 +8654, U8654 +8655, U8655 +8656, U8656 +8657, U8657 +8658, U8658 +8659, U8659 +8660, U8660 +8661, U8661 +8662, U8662 +8663, U8663 +8664, U8664 +8665, U8665 +8666, U8666 +8667, U8667 +8668, U8668 +8669, U8669 +8670, U8670 +8671, U8671 +8672, U8672 +8673, U8673 +8674, U8674 +8675, U8675 +8676, U8676 +8677, U8677 +8678, U8678 +8679, U8679 +8680, U8680 +8681, U8681 +8682, U8682 +8683, U8683 +8684, U8684 +8685, U8685 +8686, U8686 +8687, U8687 +8688, U8688 +8689, U8689 +8690, U8690 +8691, U8691 +8692, U8692 +8693, U8693 +8694, U8694 +8695, U8695 +8696, U8696 +8697, U8697 +8698, U8698 +8699, U8699 +8700, U8700 +8701, U8701 +8702, U8702 +8703, U8703 +8704, U8704 +8705, U8705 +8706, U8706 +8707, U8707 +8708, U8708 +8709, U8709 +8710, U8710 +8711, U8711 +8712, U8712 +8713, U8713 +8714, U8714 +8715, U8715 +8716, U8716 +8717, U8717 +8718, U8718 +8719, U8719 +8720, U8720 +8721, U8721 +8722, U8722 +8723, U8723 +8724, U8724 +8725, U8725 +8726, U8726 +8727, U8727 +8728, U8728 +8729, U8729 +8730, U8730 +8731, U8731 +8732, U8732 +8733, U8733 +8734, U8734 +8735, U8735 +8736, U8736 +8737, U8737 +8738, U8738 +8739, U8739 +8740, U8740 +8741, U8741 +8742, U8742 +8743, U8743 +8744, U8744 +8745, U8745 +8746, U8746 +8747, U8747 +8748, U8748 +8749, U8749 +8750, U8750 +8751, U8751 +8752, U8752 +8753, U8753 +8754, U8754 +8755, U8755 +8756, U8756 +8757, U8757 +8758, U8758 +8759, U8759 +8760, U8760 +8761, U8761 +8762, U8762 +8763, U8763 +8764, U8764 +8765, U8765 +8766, U8766 +8767, U8767 +8768, U8768 +8769, U8769 +8770, U8770 +8771, U8771 +8772, U8772 +8773, U8773 +8774, U8774 +8775, U8775 +8776, U8776 +8777, U8777 +8778, U8778 +8779, U8779 +8780, U8780 +8781, U8781 +8782, U8782 +8783, U8783 +8784, U8784 +8785, U8785 +8786, U8786 +8787, U8787 +8788, U8788 +8789, U8789 +8790, U8790 +8791, U8791 +8792, U8792 +8793, U8793 +8794, U8794 +8795, U8795 +8796, U8796 +8797, U8797 +8798, U8798 +8799, U8799 +8800, U8800 +8801, U8801 +8802, U8802 +8803, U8803 +8804, U8804 +8805, U8805 +8806, U8806 +8807, U8807 +8808, U8808 +8809, U8809 +8810, U8810 +8811, U8811 +8812, U8812 +8813, U8813 +8814, U8814 +8815, U8815 +8816, U8816 +8817, U8817 +8818, U8818 +8819, U8819 +8820, U8820 +8821, U8821 +8822, U8822 +8823, U8823 +8824, U8824 +8825, U8825 +8826, U8826 +8827, U8827 +8828, U8828 +8829, U8829 +8830, U8830 +8831, U8831 +8832, U8832 +8833, U8833 +8834, U8834 +8835, U8835 +8836, U8836 +8837, U8837 +8838, U8838 +8839, U8839 +8840, U8840 +8841, U8841 +8842, U8842 +8843, U8843 +8844, U8844 +8845, U8845 +8846, U8846 +8847, U8847 +8848, U8848 +8849, U8849 +8850, U8850 +8851, U8851 +8852, U8852 +8853, U8853 +8854, U8854 +8855, U8855 +8856, U8856 +8857, U8857 +8858, U8858 +8859, U8859 +8860, U8860 +8861, U8861 +8862, U8862 +8863, U8863 +8864, U8864 +8865, U8865 +8866, U8866 +8867, U8867 +8868, U8868 +8869, U8869 +8870, U8870 +8871, U8871 +8872, U8872 +8873, U8873 +8874, U8874 +8875, U8875 +8876, U8876 +8877, U8877 +8878, U8878 +8879, U8879 +8880, U8880 +8881, U8881 +8882, U8882 +8883, U8883 +8884, U8884 +8885, U8885 +8886, U8886 +8887, U8887 +8888, U8888 +8889, U8889 +8890, U8890 +8891, U8891 +8892, U8892 +8893, U8893 +8894, U8894 +8895, U8895 +8896, U8896 +8897, U8897 +8898, U8898 +8899, U8899 +8900, U8900 +8901, U8901 +8902, U8902 +8903, U8903 +8904, U8904 +8905, U8905 +8906, U8906 +8907, U8907 +8908, U8908 +8909, U8909 +8910, U8910 +8911, U8911 +8912, U8912 +8913, U8913 +8914, U8914 +8915, U8915 +8916, U8916 +8917, U8917 +8918, U8918 +8919, U8919 +8920, U8920 +8921, U8921 +8922, U8922 +8923, U8923 +8924, U8924 +8925, U8925 +8926, U8926 +8927, U8927 +8928, U8928 +8929, U8929 +8930, U8930 +8931, U8931 +8932, U8932 +8933, U8933 +8934, U8934 +8935, U8935 +8936, U8936 +8937, U8937 +8938, U8938 +8939, U8939 +8940, U8940 +8941, U8941 +8942, U8942 +8943, U8943 +8944, U8944 +8945, U8945 +8946, U8946 +8947, U8947 +8948, U8948 +8949, U8949 +8950, U8950 +8951, U8951 +8952, U8952 +8953, U8953 +8954, U8954 +8955, U8955 +8956, U8956 +8957, U8957 +8958, U8958 +8959, U8959 +8960, U8960 +8961, U8961 +8962, U8962 +8963, U8963 +8964, U8964 +8965, U8965 +8966, U8966 +8967, U8967 +8968, U8968 +8969, U8969 +8970, U8970 +8971, U8971 +8972, U8972 +8973, U8973 +8974, U8974 +8975, U8975 +8976, U8976 +8977, U8977 +8978, U8978 +8979, U8979 +8980, U8980 +8981, U8981 +8982, U8982 +8983, U8983 +8984, U8984 +8985, U8985 +8986, U8986 +8987, U8987 +8988, U8988 +8989, U8989 +8990, U8990 +8991, U8991 +8992, U8992 +8993, U8993 +8994, U8994 +8995, U8995 +8996, U8996 +8997, U8997 +8998, U8998 +8999, U8999 +9000, U9000 +9001, U9001 +9002, U9002 +9003, U9003 +9004, U9004 +9005, U9005 +9006, U9006 +9007, U9007 +9008, U9008 +9009, U9009 +9010, U9010 +9011, U9011 +9012, U9012 +9013, U9013 +9014, U9014 +9015, U9015 +9016, U9016 +9017, U9017 +9018, U9018 +9019, U9019 +9020, U9020 +9021, U9021 +9022, U9022 +9023, U9023 +9024, U9024 +9025, U9025 +9026, U9026 +9027, U9027 +9028, U9028 +9029, U9029 +9030, U9030 +9031, U9031 +9032, U9032 +9033, U9033 +9034, U9034 +9035, U9035 +9036, U9036 +9037, U9037 +9038, U9038 +9039, U9039 +9040, U9040 +9041, U9041 +9042, U9042 +9043, U9043 +9044, U9044 +9045, U9045 +9046, U9046 +9047, U9047 +9048, U9048 +9049, U9049 +9050, U9050 +9051, U9051 +9052, U9052 +9053, U9053 +9054, U9054 +9055, U9055 +9056, U9056 +9057, U9057 +9058, U9058 +9059, U9059 +9060, U9060 +9061, U9061 +9062, U9062 +9063, U9063 +9064, U9064 +9065, U9065 +9066, U9066 +9067, U9067 +9068, U9068 +9069, U9069 +9070, U9070 +9071, U9071 +9072, U9072 +9073, U9073 +9074, U9074 +9075, U9075 +9076, U9076 +9077, U9077 +9078, U9078 +9079, U9079 +9080, U9080 +9081, U9081 +9082, U9082 +9083, U9083 +9084, U9084 +9085, U9085 +9086, U9086 +9087, U9087 +9088, U9088 +9089, U9089 +9090, U9090 +9091, U9091 +9092, U9092 +9093, U9093 +9094, U9094 +9095, U9095 +9096, U9096 +9097, U9097 +9098, U9098 +9099, U9099 +9100, U9100 +9101, U9101 +9102, U9102 +9103, U9103 +9104, U9104 +9105, U9105 +9106, U9106 +9107, U9107 +9108, U9108 +9109, U9109 +9110, U9110 +9111, U9111 +9112, U9112 +9113, U9113 +9114, U9114 +9115, U9115 +9116, U9116 +9117, U9117 +9118, U9118 +9119, U9119 +9120, U9120 +9121, U9121 +9122, U9122 +9123, U9123 +9124, U9124 +9125, U9125 +9126, U9126 +9127, U9127 +9128, U9128 +9129, U9129 +9130, U9130 +9131, U9131 +9132, U9132 +9133, U9133 +9134, U9134 +9135, U9135 +9136, U9136 +9137, U9137 +9138, U9138 +9139, U9139 +9140, U9140 +9141, U9141 +9142, U9142 +9143, U9143 +9144, U9144 +9145, U9145 +9146, U9146 +9147, U9147 +9148, U9148 +9149, U9149 +9150, U9150 +9151, U9151 +9152, U9152 +9153, U9153 +9154, U9154 +9155, U9155 +9156, U9156 +9157, U9157 +9158, U9158 +9159, U9159 +9160, U9160 +9161, U9161 +9162, U9162 +9163, U9163 +9164, U9164 +9165, U9165 +9166, U9166 +9167, U9167 +9168, U9168 +9169, U9169 +9170, U9170 +9171, U9171 +9172, U9172 +9173, U9173 +9174, U9174 +9175, U9175 +9176, U9176 +9177, U9177 +9178, U9178 +9179, U9179 +9180, U9180 +9181, U9181 +9182, U9182 +9183, U9183 +9184, U9184 +9185, U9185 +9186, U9186 +9187, U9187 +9188, U9188 +9189, U9189 +9190, U9190 +9191, U9191 +9192, U9192 +9193, U9193 +9194, U9194 +9195, U9195 +9196, U9196 +9197, U9197 +9198, U9198 +9199, U9199 +9200, U9200 +9201, U9201 +9202, U9202 +9203, U9203 +9204, U9204 +9205, U9205 +9206, U9206 +9207, U9207 +9208, U9208 +9209, U9209 +9210, U9210 +9211, U9211 +9212, U9212 +9213, U9213 +9214, U9214 +9215, U9215 +9216, U9216 +9217, U9217 +9218, U9218 +9219, U9219 +9220, U9220 +9221, U9221 +9222, U9222 +9223, U9223 +9224, U9224 +9225, U9225 +9226, U9226 +9227, U9227 +9228, U9228 +9229, U9229 +9230, U9230 +9231, U9231 +9232, U9232 +9233, U9233 +9234, U9234 +9235, U9235 +9236, U9236 +9237, U9237 +9238, U9238 +9239, U9239 +9240, U9240 +9241, U9241 +9242, U9242 +9243, U9243 +9244, U9244 +9245, U9245 +9246, U9246 +9247, U9247 +9248, U9248 +9249, U9249 +9250, U9250 +9251, U9251 +9252, U9252 +9253, U9253 +9254, U9254 +9255, U9255 +9256, U9256 +9257, U9257 +9258, U9258 +9259, U9259 +9260, U9260 +9261, U9261 +9262, U9262 +9263, U9263 +9264, U9264 +9265, U9265 +9266, U9266 +9267, U9267 +9268, U9268 +9269, U9269 +9270, U9270 +9271, U9271 +9272, U9272 +9273, U9273 +9274, U9274 +9275, U9275 +9276, U9276 +9277, U9277 +9278, U9278 +9279, U9279 +9280, U9280 +9281, U9281 +9282, U9282 +9283, U9283 +9284, U9284 +9285, U9285 +9286, U9286 +9287, U9287 +9288, U9288 +9289, U9289 +9290, U9290 +9291, U9291 +9292, U9292 +9293, U9293 +9294, U9294 +9295, U9295 +9296, U9296 +9297, U9297 +9298, U9298 +9299, U9299 +9300, U9300 +9301, U9301 +9302, U9302 +9303, U9303 +9304, U9304 +9305, U9305 +9306, U9306 +9307, U9307 +9308, U9308 +9309, U9309 +9310, U9310 +9311, U9311 +9312, U9312 +9313, U9313 +9314, U9314 +9315, U9315 +9316, U9316 +9317, U9317 +9318, U9318 +9319, U9319 +9320, U9320 +9321, U9321 +9322, U9322 +9323, U9323 +9324, U9324 +9325, U9325 +9326, U9326 +9327, U9327 +9328, U9328 +9329, U9329 +9330, U9330 +9331, U9331 +9332, U9332 +9333, U9333 +9334, U9334 +9335, U9335 +9336, U9336 +9337, U9337 +9338, U9338 +9339, U9339 +9340, U9340 +9341, U9341 +9342, U9342 +9343, U9343 +9344, U9344 +9345, U9345 +9346, U9346 +9347, U9347 +9348, U9348 +9349, U9349 +9350, U9350 +9351, U9351 +9352, U9352 +9353, U9353 +9354, U9354 +9355, U9355 +9356, U9356 +9357, U9357 +9358, U9358 +9359, U9359 +9360, U9360 +9361, U9361 +9362, U9362 +9363, U9363 +9364, U9364 +9365, U9365 +9366, U9366 +9367, U9367 +9368, U9368 +9369, U9369 +9370, U9370 +9371, U9371 +9372, U9372 +9373, U9373 +9374, U9374 +9375, U9375 +9376, U9376 +9377, U9377 +9378, U9378 +9379, U9379 +9380, U9380 +9381, U9381 +9382, U9382 +9383, U9383 +9384, U9384 +9385, U9385 +9386, U9386 +9387, U9387 +9388, U9388 +9389, U9389 +9390, U9390 +9391, U9391 +9392, U9392 +9393, U9393 +9394, U9394 +9395, U9395 +9396, U9396 +9397, U9397 +9398, U9398 +9399, U9399 +9400, U9400 +9401, U9401 +9402, U9402 +9403, U9403 +9404, U9404 +9405, U9405 +9406, U9406 +9407, U9407 +9408, U9408 +9409, U9409 +9410, U9410 +9411, U9411 +9412, U9412 +9413, U9413 +9414, U9414 +9415, U9415 +9416, U9416 +9417, U9417 +9418, U9418 +9419, U9419 +9420, U9420 +9421, U9421 +9422, U9422 +9423, U9423 +9424, U9424 +9425, U9425 +9426, U9426 +9427, U9427 +9428, U9428 +9429, U9429 +9430, U9430 +9431, U9431 +9432, U9432 +9433, U9433 +9434, U9434 +9435, U9435 +9436, U9436 +9437, U9437 +9438, U9438 +9439, U9439 +9440, U9440 +9441, U9441 +9442, U9442 +9443, U9443 +9444, U9444 +9445, U9445 +9446, U9446 +9447, U9447 +9448, U9448 +9449, U9449 +9450, U9450 +9451, U9451 +9452, U9452 +9453, U9453 +9454, U9454 +9455, U9455 +9456, U9456 +9457, U9457 +9458, U9458 +9459, U9459 +9460, U9460 +9461, U9461 +9462, U9462 +9463, U9463 +9464, U9464 +9465, U9465 +9466, U9466 +9467, U9467 +9468, U9468 +9469, U9469 +9470, U9470 +9471, U9471 +9472, U9472 +9473, U9473 +9474, U9474 +9475, U9475 +9476, U9476 +9477, U9477 +9478, U9478 +9479, U9479 +9480, U9480 +9481, U9481 +9482, U9482 +9483, U9483 +9484, U9484 +9485, U9485 +9486, U9486 +9487, U9487 +9488, U9488 +9489, U9489 +9490, U9490 +9491, U9491 +9492, U9492 +9493, U9493 +9494, U9494 +9495, U9495 +9496, U9496 +9497, U9497 +9498, U9498 +9499, U9499 +9500, U9500 +9501, U9501 +9502, U9502 +9503, U9503 +9504, U9504 +9505, U9505 +9506, U9506 +9507, U9507 +9508, U9508 +9509, U9509 +9510, U9510 +9511, U9511 +9512, U9512 +9513, U9513 +9514, U9514 +9515, U9515 +9516, U9516 +9517, U9517 +9518, U9518 +9519, U9519 +9520, U9520 +9521, U9521 +9522, U9522 +9523, U9523 +9524, U9524 +9525, U9525 +9526, U9526 +9527, U9527 +9528, U9528 +9529, U9529 +9530, U9530 +9531, U9531 +9532, U9532 +9533, U9533 +9534, U9534 +9535, U9535 +9536, U9536 +9537, U9537 +9538, U9538 +9539, U9539 +9540, U9540 +9541, U9541 +9542, U9542 +9543, U9543 +9544, U9544 +9545, U9545 +9546, U9546 +9547, U9547 +9548, U9548 +9549, U9549 +9550, U9550 +9551, U9551 +9552, U9552 +9553, U9553 +9554, U9554 +9555, U9555 +9556, U9556 +9557, U9557 +9558, U9558 +9559, U9559 +9560, U9560 +9561, U9561 +9562, U9562 +9563, U9563 +9564, U9564 +9565, U9565 +9566, U9566 +9567, U9567 +9568, U9568 +9569, U9569 +9570, U9570 +9571, U9571 +9572, U9572 +9573, U9573 +9574, U9574 +9575, U9575 +9576, U9576 +9577, U9577 +9578, U9578 +9579, U9579 +9580, U9580 +9581, U9581 +9582, U9582 +9583, U9583 +9584, U9584 +9585, U9585 +9586, U9586 +9587, U9587 +9588, U9588 +9589, U9589 +9590, U9590 +9591, U9591 +9592, U9592 +9593, U9593 +9594, U9594 +9595, U9595 +9596, U9596 +9597, U9597 +9598, U9598 +9599, U9599 +9600, U9600 +9601, U9601 +9602, U9602 +9603, U9603 +9604, U9604 +9605, U9605 +9606, U9606 +9607, U9607 +9608, U9608 +9609, U9609 +9610, U9610 +9611, U9611 +9612, U9612 +9613, U9613 +9614, U9614 +9615, U9615 +9616, U9616 +9617, U9617 +9618, U9618 +9619, U9619 +9620, U9620 +9621, U9621 +9622, U9622 +9623, U9623 +9624, U9624 +9625, U9625 +9626, U9626 +9627, U9627 +9628, U9628 +9629, U9629 +9630, U9630 +9631, U9631 +9632, U9632 +9633, U9633 +9634, U9634 +9635, U9635 +9636, U9636 +9637, U9637 +9638, U9638 +9639, U9639 +9640, U9640 +9641, U9641 +9642, U9642 +9643, U9643 +9644, U9644 +9645, U9645 +9646, U9646 +9647, U9647 +9648, U9648 +9649, U9649 +9650, U9650 +9651, U9651 +9652, U9652 +9653, U9653 +9654, U9654 +9655, U9655 +9656, U9656 +9657, U9657 +9658, U9658 +9659, U9659 +9660, U9660 +9661, U9661 +9662, U9662 +9663, U9663 +9664, U9664 +9665, U9665 +9666, U9666 +9667, U9667 +9668, U9668 +9669, U9669 +9670, U9670 +9671, U9671 +9672, U9672 +9673, U9673 +9674, U9674 +9675, U9675 +9676, U9676 +9677, U9677 +9678, U9678 +9679, U9679 +9680, U9680 +9681, U9681 +9682, U9682 +9683, U9683 +9684, U9684 +9685, U9685 +9686, U9686 +9687, U9687 +9688, U9688 +9689, U9689 +9690, U9690 +9691, U9691 +9692, U9692 +9693, U9693 +9694, U9694 +9695, U9695 +9696, U9696 +9697, U9697 +9698, U9698 +9699, U9699 +9700, U9700 +9701, U9701 +9702, U9702 +9703, U9703 +9704, U9704 +9705, U9705 +9706, U9706 +9707, U9707 +9708, U9708 +9709, U9709 +9710, U9710 +9711, U9711 +9712, U9712 +9713, U9713 +9714, U9714 +9715, U9715 +9716, U9716 +9717, U9717 +9718, U9718 +9719, U9719 +9720, U9720 +9721, U9721 +9722, U9722 +9723, U9723 +9724, U9724 +9725, U9725 +9726, U9726 +9727, U9727 +9728, U9728 +9729, U9729 +9730, U9730 +9731, U9731 +9732, U9732 +9733, U9733 +9734, U9734 +9735, U9735 +9736, U9736 +9737, U9737 +9738, U9738 +9739, U9739 +9740, U9740 +9741, U9741 +9742, U9742 +9743, U9743 +9744, U9744 +9745, U9745 +9746, U9746 +9747, U9747 +9748, U9748 +9749, U9749 +9750, U9750 +9751, U9751 +9752, U9752 +9753, U9753 +9754, U9754 +9755, U9755 +9756, U9756 +9757, U9757 +9758, U9758 +9759, U9759 +9760, U9760 +9761, U9761 +9762, U9762 +9763, U9763 +9764, U9764 +9765, U9765 +9766, U9766 +9767, U9767 +9768, U9768 +9769, U9769 +9770, U9770 +9771, U9771 +9772, U9772 +9773, U9773 +9774, U9774 +9775, U9775 +9776, U9776 +9777, U9777 +9778, U9778 +9779, U9779 +9780, U9780 +9781, U9781 +9782, U9782 +9783, U9783 +9784, U9784 +9785, U9785 +9786, U9786 +9787, U9787 +9788, U9788 +9789, U9789 +9790, U9790 +9791, U9791 +9792, U9792 +9793, U9793 +9794, U9794 +9795, U9795 +9796, U9796 +9797, U9797 +9798, U9798 +9799, U9799 +9800, U9800 +9801, U9801 +9802, U9802 +9803, U9803 +9804, U9804 +9805, U9805 +9806, U9806 +9807, U9807 +9808, U9808 +9809, U9809 +9810, U9810 +9811, U9811 +9812, U9812 +9813, U9813 +9814, U9814 +9815, U9815 +9816, U9816 +9817, U9817 +9818, U9818 +9819, U9819 +9820, U9820 +9821, U9821 +9822, U9822 +9823, U9823 +9824, U9824 +9825, U9825 +9826, U9826 +9827, U9827 +9828, U9828 +9829, U9829 +9830, U9830 +9831, U9831 +9832, U9832 +9833, U9833 +9834, U9834 +9835, U9835 +9836, U9836 +9837, U9837 +9838, U9838 +9839, U9839 +9840, U9840 +9841, U9841 +9842, U9842 +9843, U9843 +9844, U9844 +9845, U9845 +9846, U9846 +9847, U9847 +9848, U9848 +9849, U9849 +9850, U9850 +9851, U9851 +9852, U9852 +9853, U9853 +9854, U9854 +9855, U9855 +9856, U9856 +9857, U9857 +9858, U9858 +9859, U9859 +9860, U9860 +9861, U9861 +9862, U9862 +9863, U9863 +9864, U9864 +9865, U9865 +9866, U9866 +9867, U9867 +9868, U9868 +9869, U9869 +9870, U9870 +9871, U9871 +9872, U9872 +9873, U9873 +9874, U9874 +9875, U9875 +9876, U9876 +9877, U9877 +9878, U9878 +9879, U9879 +9880, U9880 +9881, U9881 +9882, U9882 +9883, U9883 +9884, U9884 +9885, U9885 +9886, U9886 +9887, U9887 +9888, U9888 +9889, U9889 +9890, U9890 +9891, U9891 +9892, U9892 +9893, U9893 +9894, U9894 +9895, U9895 +9896, U9896 +9897, U9897 +9898, U9898 +9899, U9899 +9900, U9900 +9901, U9901 +9902, U9902 +9903, U9903 +9904, U9904 +9905, U9905 +9906, U9906 +9907, U9907 +9908, U9908 +9909, U9909 +9910, U9910 +9911, U9911 +9912, U9912 +9913, U9913 +9914, U9914 +9915, U9915 +9916, U9916 +9917, U9917 +9918, U9918 +9919, U9919 +9920, U9920 +9921, U9921 +9922, U9922 +9923, U9923 +9924, U9924 +9925, U9925 +9926, U9926 +9927, U9927 +9928, U9928 +9929, U9929 +9930, U9930 +9931, U9931 +9932, U9932 +9933, U9933 +9934, U9934 +9935, U9935 +9936, U9936 +9937, U9937 +9938, U9938 +9939, U9939 +9940, U9940 +9941, U9941 +9942, U9942 +9943, U9943 +9944, U9944 +9945, U9945 +9946, U9946 +9947, U9947 +9948, U9948 +9949, U9949 +9950, U9950 +9951, U9951 +9952, U9952 +9953, U9953 +9954, U9954 +9955, U9955 +9956, U9956 +9957, U9957 +9958, U9958 +9959, U9959 +9960, U9960 +9961, U9961 +9962, U9962 +9963, U9963 +9964, U9964 +9965, U9965 +9966, U9966 +9967, U9967 +9968, U9968 +9969, U9969 +9970, U9970 +9971, U9971 +9972, U9972 +9973, U9973 +9974, U9974 +9975, U9975 +9976, U9976 +9977, U9977 +9978, U9978 +9979, U9979 +9980, U9980 +9981, U9981 +9982, U9982 +9983, U9983 +9984, U9984 +9985, U9985 +9986, U9986 +9987, U9987 +9988, U9988 +9989, U9989 +9990, U9990 +9991, U9991 +9992, U9992 +9993, U9993 +9994, U9994 +9995, U9995 +9996, U9996 +9997, U9997 +9998, U9998 +9999, U9999 +10000, U10000 diff --git a/testdb/csv/UA.csv b/testdb/csv/UA.csv new file mode 100644 index 000000000..c74ca403b --- /dev/null +++ b/testdb/csv/UA.csv @@ -0,0 +1,10000 @@ +1, UA1 +2, UA2 +3, UA3 +4, UA4 +5, UA5 +6, UA6 +7, UA7 +8, UA8 +9, UA9 +10, UA10 +11, UA11 +12, UA12 +13, UA13 +14, UA14 +15, UA15 +16, UA16 +17, UA17 +18, UA18 +19, UA19 +20, UA20 +21, UA21 +22, UA22 +23, UA23 +24, UA24 +25, UA25 +26, UA26 +27, UA27 +28, UA28 +29, UA29 +30, UA30 +31, UA31 +32, UA32 +33, UA33 +34, UA34 +35, UA35 +36, UA36 +37, UA37 +38, UA38 +39, UA39 +40, UA40 +41, UA41 +42, UA42 +43, UA43 +44, UA44 +45, UA45 +46, UA46 +47, UA47 +48, UA48 +49, UA49 +50, UA50 +51, UA51 +52, UA52 +53, UA53 +54, UA54 +55, UA55 +56, UA56 +57, UA57 +58, UA58 +59, UA59 +60, UA60 +61, UA61 +62, UA62 +63, UA63 +64, UA64 +65, UA65 +66, UA66 +67, UA67 +68, UA68 +69, UA69 +70, UA70 +71, UA71 +72, UA72 +73, UA73 +74, UA74 +75, UA75 +76, UA76 +77, UA77 +78, UA78 +79, UA79 +80, UA80 +81, UA81 +82, UA82 +83, UA83 +84, UA84 +85, UA85 +86, UA86 +87, UA87 +88, UA88 +89, UA89 +90, UA90 +91, UA91 +92, UA92 +93, UA93 +94, UA94 +95, UA95 +96, UA96 +97, UA97 +98, UA98 +99, UA99 +100, UA100 +101, UA101 +102, UA102 +103, UA103 +104, UA104 +105, UA105 +106, UA106 +107, UA107 +108, UA108 +109, UA109 +110, UA110 +111, UA111 +112, UA112 +113, UA113 +114, UA114 +115, UA115 +116, UA116 +117, UA117 +118, UA118 +119, UA119 +120, UA120 +121, UA121 +122, UA122 +123, UA123 +124, UA124 +125, UA125 +126, UA126 +127, UA127 +128, UA128 +129, UA129 +130, UA130 +131, UA131 +132, UA132 +133, UA133 +134, UA134 +135, UA135 +136, UA136 +137, UA137 +138, UA138 +139, UA139 +140, UA140 +141, UA141 +142, UA142 +143, UA143 +144, UA144 +145, UA145 +146, UA146 +147, UA147 +148, UA148 +149, UA149 +150, UA150 +151, UA151 +152, UA152 +153, UA153 +154, UA154 +155, UA155 +156, UA156 +157, UA157 +158, UA158 +159, UA159 +160, UA160 +161, UA161 +162, UA162 +163, UA163 +164, UA164 +165, UA165 +166, UA166 +167, UA167 +168, UA168 +169, UA169 +170, UA170 +171, UA171 +172, UA172 +173, UA173 +174, UA174 +175, UA175 +176, UA176 +177, UA177 +178, UA178 +179, UA179 +180, UA180 +181, UA181 +182, UA182 +183, UA183 +184, UA184 +185, UA185 +186, UA186 +187, UA187 +188, UA188 +189, UA189 +190, UA190 +191, UA191 +192, UA192 +193, UA193 +194, UA194 +195, UA195 +196, UA196 +197, UA197 +198, UA198 +199, UA199 +200, UA200 +201, UA201 +202, UA202 +203, UA203 +204, UA204 +205, UA205 +206, UA206 +207, UA207 +208, UA208 +209, UA209 +210, UA210 +211, UA211 +212, UA212 +213, UA213 +214, UA214 +215, UA215 +216, UA216 +217, UA217 +218, UA218 +219, UA219 +220, UA220 +221, UA221 +222, UA222 +223, UA223 +224, UA224 +225, UA225 +226, UA226 +227, UA227 +228, UA228 +229, UA229 +230, UA230 +231, UA231 +232, UA232 +233, UA233 +234, UA234 +235, UA235 +236, UA236 +237, UA237 +238, UA238 +239, UA239 +240, UA240 +241, UA241 +242, UA242 +243, UA243 +244, UA244 +245, UA245 +246, UA246 +247, UA247 +248, UA248 +249, UA249 +250, UA250 +251, UA251 +252, UA252 +253, UA253 +254, UA254 +255, UA255 +256, UA256 +257, UA257 +258, UA258 +259, UA259 +260, UA260 +261, UA261 +262, UA262 +263, UA263 +264, UA264 +265, UA265 +266, UA266 +267, UA267 +268, UA268 +269, UA269 +270, UA270 +271, UA271 +272, UA272 +273, UA273 +274, UA274 +275, UA275 +276, UA276 +277, UA277 +278, UA278 +279, UA279 +280, UA280 +281, UA281 +282, UA282 +283, UA283 +284, UA284 +285, UA285 +286, UA286 +287, UA287 +288, UA288 +289, UA289 +290, UA290 +291, UA291 +292, UA292 +293, UA293 +294, UA294 +295, UA295 +296, UA296 +297, UA297 +298, UA298 +299, UA299 +300, UA300 +301, UA301 +302, UA302 +303, UA303 +304, UA304 +305, UA305 +306, UA306 +307, UA307 +308, UA308 +309, UA309 +310, UA310 +311, UA311 +312, UA312 +313, UA313 +314, UA314 +315, UA315 +316, UA316 +317, UA317 +318, UA318 +319, UA319 +320, UA320 +321, UA321 +322, UA322 +323, UA323 +324, UA324 +325, UA325 +326, UA326 +327, UA327 +328, UA328 +329, UA329 +330, UA330 +331, UA331 +332, UA332 +333, UA333 +334, UA334 +335, UA335 +336, UA336 +337, UA337 +338, UA338 +339, UA339 +340, UA340 +341, UA341 +342, UA342 +343, UA343 +344, UA344 +345, UA345 +346, UA346 +347, UA347 +348, UA348 +349, UA349 +350, UA350 +351, UA351 +352, UA352 +353, UA353 +354, UA354 +355, UA355 +356, UA356 +357, UA357 +358, UA358 +359, UA359 +360, UA360 +361, UA361 +362, UA362 +363, UA363 +364, UA364 +365, UA365 +366, UA366 +367, UA367 +368, UA368 +369, UA369 +370, UA370 +371, UA371 +372, UA372 +373, UA373 +374, UA374 +375, UA375 +376, UA376 +377, UA377 +378, UA378 +379, UA379 +380, UA380 +381, UA381 +382, UA382 +383, UA383 +384, UA384 +385, UA385 +386, UA386 +387, UA387 +388, UA388 +389, UA389 +390, UA390 +391, UA391 +392, UA392 +393, UA393 +394, UA394 +395, UA395 +396, UA396 +397, UA397 +398, UA398 +399, UA399 +400, UA400 +401, UA401 +402, UA402 +403, UA403 +404, UA404 +405, UA405 +406, UA406 +407, UA407 +408, UA408 +409, UA409 +410, UA410 +411, UA411 +412, UA412 +413, UA413 +414, UA414 +415, UA415 +416, UA416 +417, UA417 +418, UA418 +419, UA419 +420, UA420 +421, UA421 +422, UA422 +423, UA423 +424, UA424 +425, UA425 +426, UA426 +427, UA427 +428, UA428 +429, UA429 +430, UA430 +431, UA431 +432, UA432 +433, UA433 +434, UA434 +435, UA435 +436, UA436 +437, UA437 +438, UA438 +439, UA439 +440, UA440 +441, UA441 +442, UA442 +443, UA443 +444, UA444 +445, UA445 +446, UA446 +447, UA447 +448, UA448 +449, UA449 +450, UA450 +451, UA451 +452, UA452 +453, UA453 +454, UA454 +455, UA455 +456, UA456 +457, UA457 +458, UA458 +459, UA459 +460, UA460 +461, UA461 +462, UA462 +463, UA463 +464, UA464 +465, UA465 +466, UA466 +467, UA467 +468, UA468 +469, UA469 +470, UA470 +471, UA471 +472, UA472 +473, UA473 +474, UA474 +475, UA475 +476, UA476 +477, UA477 +478, UA478 +479, UA479 +480, UA480 +481, UA481 +482, UA482 +483, UA483 +484, UA484 +485, UA485 +486, UA486 +487, UA487 +488, UA488 +489, UA489 +490, UA490 +491, UA491 +492, UA492 +493, UA493 +494, UA494 +495, UA495 +496, UA496 +497, UA497 +498, UA498 +499, UA499 +500, UA500 +501, UA501 +502, UA502 +503, UA503 +504, UA504 +505, UA505 +506, UA506 +507, UA507 +508, UA508 +509, UA509 +510, UA510 +511, UA511 +512, UA512 +513, UA513 +514, UA514 +515, UA515 +516, UA516 +517, UA517 +518, UA518 +519, UA519 +520, UA520 +521, UA521 +522, UA522 +523, UA523 +524, UA524 +525, UA525 +526, UA526 +527, UA527 +528, UA528 +529, UA529 +530, UA530 +531, UA531 +532, UA532 +533, UA533 +534, UA534 +535, UA535 +536, UA536 +537, UA537 +538, UA538 +539, UA539 +540, UA540 +541, UA541 +542, UA542 +543, UA543 +544, UA544 +545, UA545 +546, UA546 +547, UA547 +548, UA548 +549, UA549 +550, UA550 +551, UA551 +552, UA552 +553, UA553 +554, UA554 +555, UA555 +556, UA556 +557, UA557 +558, UA558 +559, UA559 +560, UA560 +561, UA561 +562, UA562 +563, UA563 +564, UA564 +565, UA565 +566, UA566 +567, UA567 +568, UA568 +569, UA569 +570, UA570 +571, UA571 +572, UA572 +573, UA573 +574, UA574 +575, UA575 +576, UA576 +577, UA577 +578, UA578 +579, UA579 +580, UA580 +581, UA581 +582, UA582 +583, UA583 +584, UA584 +585, UA585 +586, UA586 +587, UA587 +588, UA588 +589, UA589 +590, UA590 +591, UA591 +592, UA592 +593, UA593 +594, UA594 +595, UA595 +596, UA596 +597, UA597 +598, UA598 +599, UA599 +600, UA600 +601, UA601 +602, UA602 +603, UA603 +604, UA604 +605, UA605 +606, UA606 +607, UA607 +608, UA608 +609, UA609 +610, UA610 +611, UA611 +612, UA612 +613, UA613 +614, UA614 +615, UA615 +616, UA616 +617, UA617 +618, UA618 +619, UA619 +620, UA620 +621, UA621 +622, UA622 +623, UA623 +624, UA624 +625, UA625 +626, UA626 +627, UA627 +628, UA628 +629, UA629 +630, UA630 +631, UA631 +632, UA632 +633, UA633 +634, UA634 +635, UA635 +636, UA636 +637, UA637 +638, UA638 +639, UA639 +640, UA640 +641, UA641 +642, UA642 +643, UA643 +644, UA644 +645, UA645 +646, UA646 +647, UA647 +648, UA648 +649, UA649 +650, UA650 +651, UA651 +652, UA652 +653, UA653 +654, UA654 +655, UA655 +656, UA656 +657, UA657 +658, UA658 +659, UA659 +660, UA660 +661, UA661 +662, UA662 +663, UA663 +664, UA664 +665, UA665 +666, UA666 +667, UA667 +668, UA668 +669, UA669 +670, UA670 +671, UA671 +672, UA672 +673, UA673 +674, UA674 +675, UA675 +676, UA676 +677, UA677 +678, UA678 +679, UA679 +680, UA680 +681, UA681 +682, UA682 +683, UA683 +684, UA684 +685, UA685 +686, UA686 +687, UA687 +688, UA688 +689, UA689 +690, UA690 +691, UA691 +692, UA692 +693, UA693 +694, UA694 +695, UA695 +696, UA696 +697, UA697 +698, UA698 +699, UA699 +700, UA700 +701, UA701 +702, UA702 +703, UA703 +704, UA704 +705, UA705 +706, UA706 +707, UA707 +708, UA708 +709, UA709 +710, UA710 +711, UA711 +712, UA712 +713, UA713 +714, UA714 +715, UA715 +716, UA716 +717, UA717 +718, UA718 +719, UA719 +720, UA720 +721, UA721 +722, UA722 +723, UA723 +724, UA724 +725, UA725 +726, UA726 +727, UA727 +728, UA728 +729, UA729 +730, UA730 +731, UA731 +732, UA732 +733, UA733 +734, UA734 +735, UA735 +736, UA736 +737, UA737 +738, UA738 +739, UA739 +740, UA740 +741, UA741 +742, UA742 +743, UA743 +744, UA744 +745, UA745 +746, UA746 +747, UA747 +748, UA748 +749, UA749 +750, UA750 +751, UA751 +752, UA752 +753, UA753 +754, UA754 +755, UA755 +756, UA756 +757, UA757 +758, UA758 +759, UA759 +760, UA760 +761, UA761 +762, UA762 +763, UA763 +764, UA764 +765, UA765 +766, UA766 +767, UA767 +768, UA768 +769, UA769 +770, UA770 +771, UA771 +772, UA772 +773, UA773 +774, UA774 +775, UA775 +776, UA776 +777, UA777 +778, UA778 +779, UA779 +780, UA780 +781, UA781 +782, UA782 +783, UA783 +784, UA784 +785, UA785 +786, UA786 +787, UA787 +788, UA788 +789, UA789 +790, UA790 +791, UA791 +792, UA792 +793, UA793 +794, UA794 +795, UA795 +796, UA796 +797, UA797 +798, UA798 +799, UA799 +800, UA800 +801, UA801 +802, UA802 +803, UA803 +804, UA804 +805, UA805 +806, UA806 +807, UA807 +808, UA808 +809, UA809 +810, UA810 +811, UA811 +812, UA812 +813, UA813 +814, UA814 +815, UA815 +816, UA816 +817, UA817 +818, UA818 +819, UA819 +820, UA820 +821, UA821 +822, UA822 +823, UA823 +824, UA824 +825, UA825 +826, UA826 +827, UA827 +828, UA828 +829, UA829 +830, UA830 +831, UA831 +832, UA832 +833, UA833 +834, UA834 +835, UA835 +836, UA836 +837, UA837 +838, UA838 +839, UA839 +840, UA840 +841, UA841 +842, UA842 +843, UA843 +844, UA844 +845, UA845 +846, UA846 +847, UA847 +848, UA848 +849, UA849 +850, UA850 +851, UA851 +852, UA852 +853, UA853 +854, UA854 +855, UA855 +856, UA856 +857, UA857 +858, UA858 +859, UA859 +860, UA860 +861, UA861 +862, UA862 +863, UA863 +864, UA864 +865, UA865 +866, UA866 +867, UA867 +868, UA868 +869, UA869 +870, UA870 +871, UA871 +872, UA872 +873, UA873 +874, UA874 +875, UA875 +876, UA876 +877, UA877 +878, UA878 +879, UA879 +880, UA880 +881, UA881 +882, UA882 +883, UA883 +884, UA884 +885, UA885 +886, UA886 +887, UA887 +888, UA888 +889, UA889 +890, UA890 +891, UA891 +892, UA892 +893, UA893 +894, UA894 +895, UA895 +896, UA896 +897, UA897 +898, UA898 +899, UA899 +900, UA900 +901, UA901 +902, UA902 +903, UA903 +904, UA904 +905, UA905 +906, UA906 +907, UA907 +908, UA908 +909, UA909 +910, UA910 +911, UA911 +912, UA912 +913, UA913 +914, UA914 +915, UA915 +916, UA916 +917, UA917 +918, UA918 +919, UA919 +920, UA920 +921, UA921 +922, UA922 +923, UA923 +924, UA924 +925, UA925 +926, UA926 +927, UA927 +928, UA928 +929, UA929 +930, UA930 +931, UA931 +932, UA932 +933, UA933 +934, UA934 +935, UA935 +936, UA936 +937, UA937 +938, UA938 +939, UA939 +940, UA940 +941, UA941 +942, UA942 +943, UA943 +944, UA944 +945, UA945 +946, UA946 +947, UA947 +948, UA948 +949, UA949 +950, UA950 +951, UA951 +952, UA952 +953, UA953 +954, UA954 +955, UA955 +956, UA956 +957, UA957 +958, UA958 +959, UA959 +960, UA960 +961, UA961 +962, UA962 +963, UA963 +964, UA964 +965, UA965 +966, UA966 +967, UA967 +968, UA968 +969, UA969 +970, UA970 +971, UA971 +972, UA972 +973, UA973 +974, UA974 +975, UA975 +976, UA976 +977, UA977 +978, UA978 +979, UA979 +980, UA980 +981, UA981 +982, UA982 +983, UA983 +984, UA984 +985, UA985 +986, UA986 +987, UA987 +988, UA988 +989, UA989 +990, UA990 +991, UA991 +992, UA992 +993, UA993 +994, UA994 +995, UA995 +996, UA996 +997, UA997 +998, UA998 +999, UA999 +1000, UA1000 +1001, UA1001 +1002, UA1002 +1003, UA1003 +1004, UA1004 +1005, UA1005 +1006, UA1006 +1007, UA1007 +1008, UA1008 +1009, UA1009 +1010, UA1010 +1011, UA1011 +1012, UA1012 +1013, UA1013 +1014, UA1014 +1015, UA1015 +1016, UA1016 +1017, UA1017 +1018, UA1018 +1019, UA1019 +1020, UA1020 +1021, UA1021 +1022, UA1022 +1023, UA1023 +1024, UA1024 +1025, UA1025 +1026, UA1026 +1027, UA1027 +1028, UA1028 +1029, UA1029 +1030, UA1030 +1031, UA1031 +1032, UA1032 +1033, UA1033 +1034, UA1034 +1035, UA1035 +1036, UA1036 +1037, UA1037 +1038, UA1038 +1039, UA1039 +1040, UA1040 +1041, UA1041 +1042, UA1042 +1043, UA1043 +1044, UA1044 +1045, UA1045 +1046, UA1046 +1047, UA1047 +1048, UA1048 +1049, UA1049 +1050, UA1050 +1051, UA1051 +1052, UA1052 +1053, UA1053 +1054, UA1054 +1055, UA1055 +1056, UA1056 +1057, UA1057 +1058, UA1058 +1059, UA1059 +1060, UA1060 +1061, UA1061 +1062, UA1062 +1063, UA1063 +1064, UA1064 +1065, UA1065 +1066, UA1066 +1067, UA1067 +1068, UA1068 +1069, UA1069 +1070, UA1070 +1071, UA1071 +1072, UA1072 +1073, UA1073 +1074, UA1074 +1075, UA1075 +1076, UA1076 +1077, UA1077 +1078, UA1078 +1079, UA1079 +1080, UA1080 +1081, UA1081 +1082, UA1082 +1083, UA1083 +1084, UA1084 +1085, UA1085 +1086, UA1086 +1087, UA1087 +1088, UA1088 +1089, UA1089 +1090, UA1090 +1091, UA1091 +1092, UA1092 +1093, UA1093 +1094, UA1094 +1095, UA1095 +1096, UA1096 +1097, UA1097 +1098, UA1098 +1099, UA1099 +1100, UA1100 +1101, UA1101 +1102, UA1102 +1103, UA1103 +1104, UA1104 +1105, UA1105 +1106, UA1106 +1107, UA1107 +1108, UA1108 +1109, UA1109 +1110, UA1110 +1111, UA1111 +1112, UA1112 +1113, UA1113 +1114, UA1114 +1115, UA1115 +1116, UA1116 +1117, UA1117 +1118, UA1118 +1119, UA1119 +1120, UA1120 +1121, UA1121 +1122, UA1122 +1123, UA1123 +1124, UA1124 +1125, UA1125 +1126, UA1126 +1127, UA1127 +1128, UA1128 +1129, UA1129 +1130, UA1130 +1131, UA1131 +1132, UA1132 +1133, UA1133 +1134, UA1134 +1135, UA1135 +1136, UA1136 +1137, UA1137 +1138, UA1138 +1139, UA1139 +1140, UA1140 +1141, UA1141 +1142, UA1142 +1143, UA1143 +1144, UA1144 +1145, UA1145 +1146, UA1146 +1147, UA1147 +1148, UA1148 +1149, UA1149 +1150, UA1150 +1151, UA1151 +1152, UA1152 +1153, UA1153 +1154, UA1154 +1155, UA1155 +1156, UA1156 +1157, UA1157 +1158, UA1158 +1159, UA1159 +1160, UA1160 +1161, UA1161 +1162, UA1162 +1163, UA1163 +1164, UA1164 +1165, UA1165 +1166, UA1166 +1167, UA1167 +1168, UA1168 +1169, UA1169 +1170, UA1170 +1171, UA1171 +1172, UA1172 +1173, UA1173 +1174, UA1174 +1175, UA1175 +1176, UA1176 +1177, UA1177 +1178, UA1178 +1179, UA1179 +1180, UA1180 +1181, UA1181 +1182, UA1182 +1183, UA1183 +1184, UA1184 +1185, UA1185 +1186, UA1186 +1187, UA1187 +1188, UA1188 +1189, UA1189 +1190, UA1190 +1191, UA1191 +1192, UA1192 +1193, UA1193 +1194, UA1194 +1195, UA1195 +1196, UA1196 +1197, UA1197 +1198, UA1198 +1199, UA1199 +1200, UA1200 +1201, UA1201 +1202, UA1202 +1203, UA1203 +1204, UA1204 +1205, UA1205 +1206, UA1206 +1207, UA1207 +1208, UA1208 +1209, UA1209 +1210, UA1210 +1211, UA1211 +1212, UA1212 +1213, UA1213 +1214, UA1214 +1215, UA1215 +1216, UA1216 +1217, UA1217 +1218, UA1218 +1219, UA1219 +1220, UA1220 +1221, UA1221 +1222, UA1222 +1223, UA1223 +1224, UA1224 +1225, UA1225 +1226, UA1226 +1227, UA1227 +1228, UA1228 +1229, UA1229 +1230, UA1230 +1231, UA1231 +1232, UA1232 +1233, UA1233 +1234, UA1234 +1235, UA1235 +1236, UA1236 +1237, UA1237 +1238, UA1238 +1239, UA1239 +1240, UA1240 +1241, UA1241 +1242, UA1242 +1243, UA1243 +1244, UA1244 +1245, UA1245 +1246, UA1246 +1247, UA1247 +1248, UA1248 +1249, UA1249 +1250, UA1250 +1251, UA1251 +1252, UA1252 +1253, UA1253 +1254, UA1254 +1255, UA1255 +1256, UA1256 +1257, UA1257 +1258, UA1258 +1259, UA1259 +1260, UA1260 +1261, UA1261 +1262, UA1262 +1263, UA1263 +1264, UA1264 +1265, UA1265 +1266, UA1266 +1267, UA1267 +1268, UA1268 +1269, UA1269 +1270, UA1270 +1271, UA1271 +1272, UA1272 +1273, UA1273 +1274, UA1274 +1275, UA1275 +1276, UA1276 +1277, UA1277 +1278, UA1278 +1279, UA1279 +1280, UA1280 +1281, UA1281 +1282, UA1282 +1283, UA1283 +1284, UA1284 +1285, UA1285 +1286, UA1286 +1287, UA1287 +1288, UA1288 +1289, UA1289 +1290, UA1290 +1291, UA1291 +1292, UA1292 +1293, UA1293 +1294, UA1294 +1295, UA1295 +1296, UA1296 +1297, UA1297 +1298, UA1298 +1299, UA1299 +1300, UA1300 +1301, UA1301 +1302, UA1302 +1303, UA1303 +1304, UA1304 +1305, UA1305 +1306, UA1306 +1307, UA1307 +1308, UA1308 +1309, UA1309 +1310, UA1310 +1311, UA1311 +1312, UA1312 +1313, UA1313 +1314, UA1314 +1315, UA1315 +1316, UA1316 +1317, UA1317 +1318, UA1318 +1319, UA1319 +1320, UA1320 +1321, UA1321 +1322, UA1322 +1323, UA1323 +1324, UA1324 +1325, UA1325 +1326, UA1326 +1327, UA1327 +1328, UA1328 +1329, UA1329 +1330, UA1330 +1331, UA1331 +1332, UA1332 +1333, UA1333 +1334, UA1334 +1335, UA1335 +1336, UA1336 +1337, UA1337 +1338, UA1338 +1339, UA1339 +1340, UA1340 +1341, UA1341 +1342, UA1342 +1343, UA1343 +1344, UA1344 +1345, UA1345 +1346, UA1346 +1347, UA1347 +1348, UA1348 +1349, UA1349 +1350, UA1350 +1351, UA1351 +1352, UA1352 +1353, UA1353 +1354, UA1354 +1355, UA1355 +1356, UA1356 +1357, UA1357 +1358, UA1358 +1359, UA1359 +1360, UA1360 +1361, UA1361 +1362, UA1362 +1363, UA1363 +1364, UA1364 +1365, UA1365 +1366, UA1366 +1367, UA1367 +1368, UA1368 +1369, UA1369 +1370, UA1370 +1371, UA1371 +1372, UA1372 +1373, UA1373 +1374, UA1374 +1375, UA1375 +1376, UA1376 +1377, UA1377 +1378, UA1378 +1379, UA1379 +1380, UA1380 +1381, UA1381 +1382, UA1382 +1383, UA1383 +1384, UA1384 +1385, UA1385 +1386, UA1386 +1387, UA1387 +1388, UA1388 +1389, UA1389 +1390, UA1390 +1391, UA1391 +1392, UA1392 +1393, UA1393 +1394, UA1394 +1395, UA1395 +1396, UA1396 +1397, UA1397 +1398, UA1398 +1399, UA1399 +1400, UA1400 +1401, UA1401 +1402, UA1402 +1403, UA1403 +1404, UA1404 +1405, UA1405 +1406, UA1406 +1407, UA1407 +1408, UA1408 +1409, UA1409 +1410, UA1410 +1411, UA1411 +1412, UA1412 +1413, UA1413 +1414, UA1414 +1415, UA1415 +1416, UA1416 +1417, UA1417 +1418, UA1418 +1419, UA1419 +1420, UA1420 +1421, UA1421 +1422, UA1422 +1423, UA1423 +1424, UA1424 +1425, UA1425 +1426, UA1426 +1427, UA1427 +1428, UA1428 +1429, UA1429 +1430, UA1430 +1431, UA1431 +1432, UA1432 +1433, UA1433 +1434, UA1434 +1435, UA1435 +1436, UA1436 +1437, UA1437 +1438, UA1438 +1439, UA1439 +1440, UA1440 +1441, UA1441 +1442, UA1442 +1443, UA1443 +1444, UA1444 +1445, UA1445 +1446, UA1446 +1447, UA1447 +1448, UA1448 +1449, UA1449 +1450, UA1450 +1451, UA1451 +1452, UA1452 +1453, UA1453 +1454, UA1454 +1455, UA1455 +1456, UA1456 +1457, UA1457 +1458, UA1458 +1459, UA1459 +1460, UA1460 +1461, UA1461 +1462, UA1462 +1463, UA1463 +1464, UA1464 +1465, UA1465 +1466, UA1466 +1467, UA1467 +1468, UA1468 +1469, UA1469 +1470, UA1470 +1471, UA1471 +1472, UA1472 +1473, UA1473 +1474, UA1474 +1475, UA1475 +1476, UA1476 +1477, UA1477 +1478, UA1478 +1479, UA1479 +1480, UA1480 +1481, UA1481 +1482, UA1482 +1483, UA1483 +1484, UA1484 +1485, UA1485 +1486, UA1486 +1487, UA1487 +1488, UA1488 +1489, UA1489 +1490, UA1490 +1491, UA1491 +1492, UA1492 +1493, UA1493 +1494, UA1494 +1495, UA1495 +1496, UA1496 +1497, UA1497 +1498, UA1498 +1499, UA1499 +1500, UA1500 +1501, UA1501 +1502, UA1502 +1503, UA1503 +1504, UA1504 +1505, UA1505 +1506, UA1506 +1507, UA1507 +1508, UA1508 +1509, UA1509 +1510, UA1510 +1511, UA1511 +1512, UA1512 +1513, UA1513 +1514, UA1514 +1515, UA1515 +1516, UA1516 +1517, UA1517 +1518, UA1518 +1519, UA1519 +1520, UA1520 +1521, UA1521 +1522, UA1522 +1523, UA1523 +1524, UA1524 +1525, UA1525 +1526, UA1526 +1527, UA1527 +1528, UA1528 +1529, UA1529 +1530, UA1530 +1531, UA1531 +1532, UA1532 +1533, UA1533 +1534, UA1534 +1535, UA1535 +1536, UA1536 +1537, UA1537 +1538, UA1538 +1539, UA1539 +1540, UA1540 +1541, UA1541 +1542, UA1542 +1543, UA1543 +1544, UA1544 +1545, UA1545 +1546, UA1546 +1547, UA1547 +1548, UA1548 +1549, UA1549 +1550, UA1550 +1551, UA1551 +1552, UA1552 +1553, UA1553 +1554, UA1554 +1555, UA1555 +1556, UA1556 +1557, UA1557 +1558, UA1558 +1559, UA1559 +1560, UA1560 +1561, UA1561 +1562, UA1562 +1563, UA1563 +1564, UA1564 +1565, UA1565 +1566, UA1566 +1567, UA1567 +1568, UA1568 +1569, UA1569 +1570, UA1570 +1571, UA1571 +1572, UA1572 +1573, UA1573 +1574, UA1574 +1575, UA1575 +1576, UA1576 +1577, UA1577 +1578, UA1578 +1579, UA1579 +1580, UA1580 +1581, UA1581 +1582, UA1582 +1583, UA1583 +1584, UA1584 +1585, UA1585 +1586, UA1586 +1587, UA1587 +1588, UA1588 +1589, UA1589 +1590, UA1590 +1591, UA1591 +1592, UA1592 +1593, UA1593 +1594, UA1594 +1595, UA1595 +1596, UA1596 +1597, UA1597 +1598, UA1598 +1599, UA1599 +1600, UA1600 +1601, UA1601 +1602, UA1602 +1603, UA1603 +1604, UA1604 +1605, UA1605 +1606, UA1606 +1607, UA1607 +1608, UA1608 +1609, UA1609 +1610, UA1610 +1611, UA1611 +1612, UA1612 +1613, UA1613 +1614, UA1614 +1615, UA1615 +1616, UA1616 +1617, UA1617 +1618, UA1618 +1619, UA1619 +1620, UA1620 +1621, UA1621 +1622, UA1622 +1623, UA1623 +1624, UA1624 +1625, UA1625 +1626, UA1626 +1627, UA1627 +1628, UA1628 +1629, UA1629 +1630, UA1630 +1631, UA1631 +1632, UA1632 +1633, UA1633 +1634, UA1634 +1635, UA1635 +1636, UA1636 +1637, UA1637 +1638, UA1638 +1639, UA1639 +1640, UA1640 +1641, UA1641 +1642, UA1642 +1643, UA1643 +1644, UA1644 +1645, UA1645 +1646, UA1646 +1647, UA1647 +1648, UA1648 +1649, UA1649 +1650, UA1650 +1651, UA1651 +1652, UA1652 +1653, UA1653 +1654, UA1654 +1655, UA1655 +1656, UA1656 +1657, UA1657 +1658, UA1658 +1659, UA1659 +1660, UA1660 +1661, UA1661 +1662, UA1662 +1663, UA1663 +1664, UA1664 +1665, UA1665 +1666, UA1666 +1667, UA1667 +1668, UA1668 +1669, UA1669 +1670, UA1670 +1671, UA1671 +1672, UA1672 +1673, UA1673 +1674, UA1674 +1675, UA1675 +1676, UA1676 +1677, UA1677 +1678, UA1678 +1679, UA1679 +1680, UA1680 +1681, UA1681 +1682, UA1682 +1683, UA1683 +1684, UA1684 +1685, UA1685 +1686, UA1686 +1687, UA1687 +1688, UA1688 +1689, UA1689 +1690, UA1690 +1691, UA1691 +1692, UA1692 +1693, UA1693 +1694, UA1694 +1695, UA1695 +1696, UA1696 +1697, UA1697 +1698, UA1698 +1699, UA1699 +1700, UA1700 +1701, UA1701 +1702, UA1702 +1703, UA1703 +1704, UA1704 +1705, UA1705 +1706, UA1706 +1707, UA1707 +1708, UA1708 +1709, UA1709 +1710, UA1710 +1711, UA1711 +1712, UA1712 +1713, UA1713 +1714, UA1714 +1715, UA1715 +1716, UA1716 +1717, UA1717 +1718, UA1718 +1719, UA1719 +1720, UA1720 +1721, UA1721 +1722, UA1722 +1723, UA1723 +1724, UA1724 +1725, UA1725 +1726, UA1726 +1727, UA1727 +1728, UA1728 +1729, UA1729 +1730, UA1730 +1731, UA1731 +1732, UA1732 +1733, UA1733 +1734, UA1734 +1735, UA1735 +1736, UA1736 +1737, UA1737 +1738, UA1738 +1739, UA1739 +1740, UA1740 +1741, UA1741 +1742, UA1742 +1743, UA1743 +1744, UA1744 +1745, UA1745 +1746, UA1746 +1747, UA1747 +1748, UA1748 +1749, UA1749 +1750, UA1750 +1751, UA1751 +1752, UA1752 +1753, UA1753 +1754, UA1754 +1755, UA1755 +1756, UA1756 +1757, UA1757 +1758, UA1758 +1759, UA1759 +1760, UA1760 +1761, UA1761 +1762, UA1762 +1763, UA1763 +1764, UA1764 +1765, UA1765 +1766, UA1766 +1767, UA1767 +1768, UA1768 +1769, UA1769 +1770, UA1770 +1771, UA1771 +1772, UA1772 +1773, UA1773 +1774, UA1774 +1775, UA1775 +1776, UA1776 +1777, UA1777 +1778, UA1778 +1779, UA1779 +1780, UA1780 +1781, UA1781 +1782, UA1782 +1783, UA1783 +1784, UA1784 +1785, UA1785 +1786, UA1786 +1787, UA1787 +1788, UA1788 +1789, UA1789 +1790, UA1790 +1791, UA1791 +1792, UA1792 +1793, UA1793 +1794, UA1794 +1795, UA1795 +1796, UA1796 +1797, UA1797 +1798, UA1798 +1799, UA1799 +1800, UA1800 +1801, UA1801 +1802, UA1802 +1803, UA1803 +1804, UA1804 +1805, UA1805 +1806, UA1806 +1807, UA1807 +1808, UA1808 +1809, UA1809 +1810, UA1810 +1811, UA1811 +1812, UA1812 +1813, UA1813 +1814, UA1814 +1815, UA1815 +1816, UA1816 +1817, UA1817 +1818, UA1818 +1819, UA1819 +1820, UA1820 +1821, UA1821 +1822, UA1822 +1823, UA1823 +1824, UA1824 +1825, UA1825 +1826, UA1826 +1827, UA1827 +1828, UA1828 +1829, UA1829 +1830, UA1830 +1831, UA1831 +1832, UA1832 +1833, UA1833 +1834, UA1834 +1835, UA1835 +1836, UA1836 +1837, UA1837 +1838, UA1838 +1839, UA1839 +1840, UA1840 +1841, UA1841 +1842, UA1842 +1843, UA1843 +1844, UA1844 +1845, UA1845 +1846, UA1846 +1847, UA1847 +1848, UA1848 +1849, UA1849 +1850, UA1850 +1851, UA1851 +1852, UA1852 +1853, UA1853 +1854, UA1854 +1855, UA1855 +1856, UA1856 +1857, UA1857 +1858, UA1858 +1859, UA1859 +1860, UA1860 +1861, UA1861 +1862, UA1862 +1863, UA1863 +1864, UA1864 +1865, UA1865 +1866, UA1866 +1867, UA1867 +1868, UA1868 +1869, UA1869 +1870, UA1870 +1871, UA1871 +1872, UA1872 +1873, UA1873 +1874, UA1874 +1875, UA1875 +1876, UA1876 +1877, UA1877 +1878, UA1878 +1879, UA1879 +1880, UA1880 +1881, UA1881 +1882, UA1882 +1883, UA1883 +1884, UA1884 +1885, UA1885 +1886, UA1886 +1887, UA1887 +1888, UA1888 +1889, UA1889 +1890, UA1890 +1891, UA1891 +1892, UA1892 +1893, UA1893 +1894, UA1894 +1895, UA1895 +1896, UA1896 +1897, UA1897 +1898, UA1898 +1899, UA1899 +1900, UA1900 +1901, UA1901 +1902, UA1902 +1903, UA1903 +1904, UA1904 +1905, UA1905 +1906, UA1906 +1907, UA1907 +1908, UA1908 +1909, UA1909 +1910, UA1910 +1911, UA1911 +1912, UA1912 +1913, UA1913 +1914, UA1914 +1915, UA1915 +1916, UA1916 +1917, UA1917 +1918, UA1918 +1919, UA1919 +1920, UA1920 +1921, UA1921 +1922, UA1922 +1923, UA1923 +1924, UA1924 +1925, UA1925 +1926, UA1926 +1927, UA1927 +1928, UA1928 +1929, UA1929 +1930, UA1930 +1931, UA1931 +1932, UA1932 +1933, UA1933 +1934, UA1934 +1935, UA1935 +1936, UA1936 +1937, UA1937 +1938, UA1938 +1939, UA1939 +1940, UA1940 +1941, UA1941 +1942, UA1942 +1943, UA1943 +1944, UA1944 +1945, UA1945 +1946, UA1946 +1947, UA1947 +1948, UA1948 +1949, UA1949 +1950, UA1950 +1951, UA1951 +1952, UA1952 +1953, UA1953 +1954, UA1954 +1955, UA1955 +1956, UA1956 +1957, UA1957 +1958, UA1958 +1959, UA1959 +1960, UA1960 +1961, UA1961 +1962, UA1962 +1963, UA1963 +1964, UA1964 +1965, UA1965 +1966, UA1966 +1967, UA1967 +1968, UA1968 +1969, UA1969 +1970, UA1970 +1971, UA1971 +1972, UA1972 +1973, UA1973 +1974, UA1974 +1975, UA1975 +1976, UA1976 +1977, UA1977 +1978, UA1978 +1979, UA1979 +1980, UA1980 +1981, UA1981 +1982, UA1982 +1983, UA1983 +1984, UA1984 +1985, UA1985 +1986, UA1986 +1987, UA1987 +1988, UA1988 +1989, UA1989 +1990, UA1990 +1991, UA1991 +1992, UA1992 +1993, UA1993 +1994, UA1994 +1995, UA1995 +1996, UA1996 +1997, UA1997 +1998, UA1998 +1999, UA1999 +2000, UA2000 +2001, UA2001 +2002, UA2002 +2003, UA2003 +2004, UA2004 +2005, UA2005 +2006, UA2006 +2007, UA2007 +2008, UA2008 +2009, UA2009 +2010, UA2010 +2011, UA2011 +2012, UA2012 +2013, UA2013 +2014, UA2014 +2015, UA2015 +2016, UA2016 +2017, UA2017 +2018, UA2018 +2019, UA2019 +2020, UA2020 +2021, UA2021 +2022, UA2022 +2023, UA2023 +2024, UA2024 +2025, UA2025 +2026, UA2026 +2027, UA2027 +2028, UA2028 +2029, UA2029 +2030, UA2030 +2031, UA2031 +2032, UA2032 +2033, UA2033 +2034, UA2034 +2035, UA2035 +2036, UA2036 +2037, UA2037 +2038, UA2038 +2039, UA2039 +2040, UA2040 +2041, UA2041 +2042, UA2042 +2043, UA2043 +2044, UA2044 +2045, UA2045 +2046, UA2046 +2047, UA2047 +2048, UA2048 +2049, UA2049 +2050, UA2050 +2051, UA2051 +2052, UA2052 +2053, UA2053 +2054, UA2054 +2055, UA2055 +2056, UA2056 +2057, UA2057 +2058, UA2058 +2059, UA2059 +2060, UA2060 +2061, UA2061 +2062, UA2062 +2063, UA2063 +2064, UA2064 +2065, UA2065 +2066, UA2066 +2067, UA2067 +2068, UA2068 +2069, UA2069 +2070, UA2070 +2071, UA2071 +2072, UA2072 +2073, UA2073 +2074, UA2074 +2075, UA2075 +2076, UA2076 +2077, UA2077 +2078, UA2078 +2079, UA2079 +2080, UA2080 +2081, UA2081 +2082, UA2082 +2083, UA2083 +2084, UA2084 +2085, UA2085 +2086, UA2086 +2087, UA2087 +2088, UA2088 +2089, UA2089 +2090, UA2090 +2091, UA2091 +2092, UA2092 +2093, UA2093 +2094, UA2094 +2095, UA2095 +2096, UA2096 +2097, UA2097 +2098, UA2098 +2099, UA2099 +2100, UA2100 +2101, UA2101 +2102, UA2102 +2103, UA2103 +2104, UA2104 +2105, UA2105 +2106, UA2106 +2107, UA2107 +2108, UA2108 +2109, UA2109 +2110, UA2110 +2111, UA2111 +2112, UA2112 +2113, UA2113 +2114, UA2114 +2115, UA2115 +2116, UA2116 +2117, UA2117 +2118, UA2118 +2119, UA2119 +2120, UA2120 +2121, UA2121 +2122, UA2122 +2123, UA2123 +2124, UA2124 +2125, UA2125 +2126, UA2126 +2127, UA2127 +2128, UA2128 +2129, UA2129 +2130, UA2130 +2131, UA2131 +2132, UA2132 +2133, UA2133 +2134, UA2134 +2135, UA2135 +2136, UA2136 +2137, UA2137 +2138, UA2138 +2139, UA2139 +2140, UA2140 +2141, UA2141 +2142, UA2142 +2143, UA2143 +2144, UA2144 +2145, UA2145 +2146, UA2146 +2147, UA2147 +2148, UA2148 +2149, UA2149 +2150, UA2150 +2151, UA2151 +2152, UA2152 +2153, UA2153 +2154, UA2154 +2155, UA2155 +2156, UA2156 +2157, UA2157 +2158, UA2158 +2159, UA2159 +2160, UA2160 +2161, UA2161 +2162, UA2162 +2163, UA2163 +2164, UA2164 +2165, UA2165 +2166, UA2166 +2167, UA2167 +2168, UA2168 +2169, UA2169 +2170, UA2170 +2171, UA2171 +2172, UA2172 +2173, UA2173 +2174, UA2174 +2175, UA2175 +2176, UA2176 +2177, UA2177 +2178, UA2178 +2179, UA2179 +2180, UA2180 +2181, UA2181 +2182, UA2182 +2183, UA2183 +2184, UA2184 +2185, UA2185 +2186, UA2186 +2187, UA2187 +2188, UA2188 +2189, UA2189 +2190, UA2190 +2191, UA2191 +2192, UA2192 +2193, UA2193 +2194, UA2194 +2195, UA2195 +2196, UA2196 +2197, UA2197 +2198, UA2198 +2199, UA2199 +2200, UA2200 +2201, UA2201 +2202, UA2202 +2203, UA2203 +2204, UA2204 +2205, UA2205 +2206, UA2206 +2207, UA2207 +2208, UA2208 +2209, UA2209 +2210, UA2210 +2211, UA2211 +2212, UA2212 +2213, UA2213 +2214, UA2214 +2215, UA2215 +2216, UA2216 +2217, UA2217 +2218, UA2218 +2219, UA2219 +2220, UA2220 +2221, UA2221 +2222, UA2222 +2223, UA2223 +2224, UA2224 +2225, UA2225 +2226, UA2226 +2227, UA2227 +2228, UA2228 +2229, UA2229 +2230, UA2230 +2231, UA2231 +2232, UA2232 +2233, UA2233 +2234, UA2234 +2235, UA2235 +2236, UA2236 +2237, UA2237 +2238, UA2238 +2239, UA2239 +2240, UA2240 +2241, UA2241 +2242, UA2242 +2243, UA2243 +2244, UA2244 +2245, UA2245 +2246, UA2246 +2247, UA2247 +2248, UA2248 +2249, UA2249 +2250, UA2250 +2251, UA2251 +2252, UA2252 +2253, UA2253 +2254, UA2254 +2255, UA2255 +2256, UA2256 +2257, UA2257 +2258, UA2258 +2259, UA2259 +2260, UA2260 +2261, UA2261 +2262, UA2262 +2263, UA2263 +2264, UA2264 +2265, UA2265 +2266, UA2266 +2267, UA2267 +2268, UA2268 +2269, UA2269 +2270, UA2270 +2271, UA2271 +2272, UA2272 +2273, UA2273 +2274, UA2274 +2275, UA2275 +2276, UA2276 +2277, UA2277 +2278, UA2278 +2279, UA2279 +2280, UA2280 +2281, UA2281 +2282, UA2282 +2283, UA2283 +2284, UA2284 +2285, UA2285 +2286, UA2286 +2287, UA2287 +2288, UA2288 +2289, UA2289 +2290, UA2290 +2291, UA2291 +2292, UA2292 +2293, UA2293 +2294, UA2294 +2295, UA2295 +2296, UA2296 +2297, UA2297 +2298, UA2298 +2299, UA2299 +2300, UA2300 +2301, UA2301 +2302, UA2302 +2303, UA2303 +2304, UA2304 +2305, UA2305 +2306, UA2306 +2307, UA2307 +2308, UA2308 +2309, UA2309 +2310, UA2310 +2311, UA2311 +2312, UA2312 +2313, UA2313 +2314, UA2314 +2315, UA2315 +2316, UA2316 +2317, UA2317 +2318, UA2318 +2319, UA2319 +2320, UA2320 +2321, UA2321 +2322, UA2322 +2323, UA2323 +2324, UA2324 +2325, UA2325 +2326, UA2326 +2327, UA2327 +2328, UA2328 +2329, UA2329 +2330, UA2330 +2331, UA2331 +2332, UA2332 +2333, UA2333 +2334, UA2334 +2335, UA2335 +2336, UA2336 +2337, UA2337 +2338, UA2338 +2339, UA2339 +2340, UA2340 +2341, UA2341 +2342, UA2342 +2343, UA2343 +2344, UA2344 +2345, UA2345 +2346, UA2346 +2347, UA2347 +2348, UA2348 +2349, UA2349 +2350, UA2350 +2351, UA2351 +2352, UA2352 +2353, UA2353 +2354, UA2354 +2355, UA2355 +2356, UA2356 +2357, UA2357 +2358, UA2358 +2359, UA2359 +2360, UA2360 +2361, UA2361 +2362, UA2362 +2363, UA2363 +2364, UA2364 +2365, UA2365 +2366, UA2366 +2367, UA2367 +2368, UA2368 +2369, UA2369 +2370, UA2370 +2371, UA2371 +2372, UA2372 +2373, UA2373 +2374, UA2374 +2375, UA2375 +2376, UA2376 +2377, UA2377 +2378, UA2378 +2379, UA2379 +2380, UA2380 +2381, UA2381 +2382, UA2382 +2383, UA2383 +2384, UA2384 +2385, UA2385 +2386, UA2386 +2387, UA2387 +2388, UA2388 +2389, UA2389 +2390, UA2390 +2391, UA2391 +2392, UA2392 +2393, UA2393 +2394, UA2394 +2395, UA2395 +2396, UA2396 +2397, UA2397 +2398, UA2398 +2399, UA2399 +2400, UA2400 +2401, UA2401 +2402, UA2402 +2403, UA2403 +2404, UA2404 +2405, UA2405 +2406, UA2406 +2407, UA2407 +2408, UA2408 +2409, UA2409 +2410, UA2410 +2411, UA2411 +2412, UA2412 +2413, UA2413 +2414, UA2414 +2415, UA2415 +2416, UA2416 +2417, UA2417 +2418, UA2418 +2419, UA2419 +2420, UA2420 +2421, UA2421 +2422, UA2422 +2423, UA2423 +2424, UA2424 +2425, UA2425 +2426, UA2426 +2427, UA2427 +2428, UA2428 +2429, UA2429 +2430, UA2430 +2431, UA2431 +2432, UA2432 +2433, UA2433 +2434, UA2434 +2435, UA2435 +2436, UA2436 +2437, UA2437 +2438, UA2438 +2439, UA2439 +2440, UA2440 +2441, UA2441 +2442, UA2442 +2443, UA2443 +2444, UA2444 +2445, UA2445 +2446, UA2446 +2447, UA2447 +2448, UA2448 +2449, UA2449 +2450, UA2450 +2451, UA2451 +2452, UA2452 +2453, UA2453 +2454, UA2454 +2455, UA2455 +2456, UA2456 +2457, UA2457 +2458, UA2458 +2459, UA2459 +2460, UA2460 +2461, UA2461 +2462, UA2462 +2463, UA2463 +2464, UA2464 +2465, UA2465 +2466, UA2466 +2467, UA2467 +2468, UA2468 +2469, UA2469 +2470, UA2470 +2471, UA2471 +2472, UA2472 +2473, UA2473 +2474, UA2474 +2475, UA2475 +2476, UA2476 +2477, UA2477 +2478, UA2478 +2479, UA2479 +2480, UA2480 +2481, UA2481 +2482, UA2482 +2483, UA2483 +2484, UA2484 +2485, UA2485 +2486, UA2486 +2487, UA2487 +2488, UA2488 +2489, UA2489 +2490, UA2490 +2491, UA2491 +2492, UA2492 +2493, UA2493 +2494, UA2494 +2495, UA2495 +2496, UA2496 +2497, UA2497 +2498, UA2498 +2499, UA2499 +2500, UA2500 +2501, UA2501 +2502, UA2502 +2503, UA2503 +2504, UA2504 +2505, UA2505 +2506, UA2506 +2507, UA2507 +2508, UA2508 +2509, UA2509 +2510, UA2510 +2511, UA2511 +2512, UA2512 +2513, UA2513 +2514, UA2514 +2515, UA2515 +2516, UA2516 +2517, UA2517 +2518, UA2518 +2519, UA2519 +2520, UA2520 +2521, UA2521 +2522, UA2522 +2523, UA2523 +2524, UA2524 +2525, UA2525 +2526, UA2526 +2527, UA2527 +2528, UA2528 +2529, UA2529 +2530, UA2530 +2531, UA2531 +2532, UA2532 +2533, UA2533 +2534, UA2534 +2535, UA2535 +2536, UA2536 +2537, UA2537 +2538, UA2538 +2539, UA2539 +2540, UA2540 +2541, UA2541 +2542, UA2542 +2543, UA2543 +2544, UA2544 +2545, UA2545 +2546, UA2546 +2547, UA2547 +2548, UA2548 +2549, UA2549 +2550, UA2550 +2551, UA2551 +2552, UA2552 +2553, UA2553 +2554, UA2554 +2555, UA2555 +2556, UA2556 +2557, UA2557 +2558, UA2558 +2559, UA2559 +2560, UA2560 +2561, UA2561 +2562, UA2562 +2563, UA2563 +2564, UA2564 +2565, UA2565 +2566, UA2566 +2567, UA2567 +2568, UA2568 +2569, UA2569 +2570, UA2570 +2571, UA2571 +2572, UA2572 +2573, UA2573 +2574, UA2574 +2575, UA2575 +2576, UA2576 +2577, UA2577 +2578, UA2578 +2579, UA2579 +2580, UA2580 +2581, UA2581 +2582, UA2582 +2583, UA2583 +2584, UA2584 +2585, UA2585 +2586, UA2586 +2587, UA2587 +2588, UA2588 +2589, UA2589 +2590, UA2590 +2591, UA2591 +2592, UA2592 +2593, UA2593 +2594, UA2594 +2595, UA2595 +2596, UA2596 +2597, UA2597 +2598, UA2598 +2599, UA2599 +2600, UA2600 +2601, UA2601 +2602, UA2602 +2603, UA2603 +2604, UA2604 +2605, UA2605 +2606, UA2606 +2607, UA2607 +2608, UA2608 +2609, UA2609 +2610, UA2610 +2611, UA2611 +2612, UA2612 +2613, UA2613 +2614, UA2614 +2615, UA2615 +2616, UA2616 +2617, UA2617 +2618, UA2618 +2619, UA2619 +2620, UA2620 +2621, UA2621 +2622, UA2622 +2623, UA2623 +2624, UA2624 +2625, UA2625 +2626, UA2626 +2627, UA2627 +2628, UA2628 +2629, UA2629 +2630, UA2630 +2631, UA2631 +2632, UA2632 +2633, UA2633 +2634, UA2634 +2635, UA2635 +2636, UA2636 +2637, UA2637 +2638, UA2638 +2639, UA2639 +2640, UA2640 +2641, UA2641 +2642, UA2642 +2643, UA2643 +2644, UA2644 +2645, UA2645 +2646, UA2646 +2647, UA2647 +2648, UA2648 +2649, UA2649 +2650, UA2650 +2651, UA2651 +2652, UA2652 +2653, UA2653 +2654, UA2654 +2655, UA2655 +2656, UA2656 +2657, UA2657 +2658, UA2658 +2659, UA2659 +2660, UA2660 +2661, UA2661 +2662, UA2662 +2663, UA2663 +2664, UA2664 +2665, UA2665 +2666, UA2666 +2667, UA2667 +2668, UA2668 +2669, UA2669 +2670, UA2670 +2671, UA2671 +2672, UA2672 +2673, UA2673 +2674, UA2674 +2675, UA2675 +2676, UA2676 +2677, UA2677 +2678, UA2678 +2679, UA2679 +2680, UA2680 +2681, UA2681 +2682, UA2682 +2683, UA2683 +2684, UA2684 +2685, UA2685 +2686, UA2686 +2687, UA2687 +2688, UA2688 +2689, UA2689 +2690, UA2690 +2691, UA2691 +2692, UA2692 +2693, UA2693 +2694, UA2694 +2695, UA2695 +2696, UA2696 +2697, UA2697 +2698, UA2698 +2699, UA2699 +2700, UA2700 +2701, UA2701 +2702, UA2702 +2703, UA2703 +2704, UA2704 +2705, UA2705 +2706, UA2706 +2707, UA2707 +2708, UA2708 +2709, UA2709 +2710, UA2710 +2711, UA2711 +2712, UA2712 +2713, UA2713 +2714, UA2714 +2715, UA2715 +2716, UA2716 +2717, UA2717 +2718, UA2718 +2719, UA2719 +2720, UA2720 +2721, UA2721 +2722, UA2722 +2723, UA2723 +2724, UA2724 +2725, UA2725 +2726, UA2726 +2727, UA2727 +2728, UA2728 +2729, UA2729 +2730, UA2730 +2731, UA2731 +2732, UA2732 +2733, UA2733 +2734, UA2734 +2735, UA2735 +2736, UA2736 +2737, UA2737 +2738, UA2738 +2739, UA2739 +2740, UA2740 +2741, UA2741 +2742, UA2742 +2743, UA2743 +2744, UA2744 +2745, UA2745 +2746, UA2746 +2747, UA2747 +2748, UA2748 +2749, UA2749 +2750, UA2750 +2751, UA2751 +2752, UA2752 +2753, UA2753 +2754, UA2754 +2755, UA2755 +2756, UA2756 +2757, UA2757 +2758, UA2758 +2759, UA2759 +2760, UA2760 +2761, UA2761 +2762, UA2762 +2763, UA2763 +2764, UA2764 +2765, UA2765 +2766, UA2766 +2767, UA2767 +2768, UA2768 +2769, UA2769 +2770, UA2770 +2771, UA2771 +2772, UA2772 +2773, UA2773 +2774, UA2774 +2775, UA2775 +2776, UA2776 +2777, UA2777 +2778, UA2778 +2779, UA2779 +2780, UA2780 +2781, UA2781 +2782, UA2782 +2783, UA2783 +2784, UA2784 +2785, UA2785 +2786, UA2786 +2787, UA2787 +2788, UA2788 +2789, UA2789 +2790, UA2790 +2791, UA2791 +2792, UA2792 +2793, UA2793 +2794, UA2794 +2795, UA2795 +2796, UA2796 +2797, UA2797 +2798, UA2798 +2799, UA2799 +2800, UA2800 +2801, UA2801 +2802, UA2802 +2803, UA2803 +2804, UA2804 +2805, UA2805 +2806, UA2806 +2807, UA2807 +2808, UA2808 +2809, UA2809 +2810, UA2810 +2811, UA2811 +2812, UA2812 +2813, UA2813 +2814, UA2814 +2815, UA2815 +2816, UA2816 +2817, UA2817 +2818, UA2818 +2819, UA2819 +2820, UA2820 +2821, UA2821 +2822, UA2822 +2823, UA2823 +2824, UA2824 +2825, UA2825 +2826, UA2826 +2827, UA2827 +2828, UA2828 +2829, UA2829 +2830, UA2830 +2831, UA2831 +2832, UA2832 +2833, UA2833 +2834, UA2834 +2835, UA2835 +2836, UA2836 +2837, UA2837 +2838, UA2838 +2839, UA2839 +2840, UA2840 +2841, UA2841 +2842, UA2842 +2843, UA2843 +2844, UA2844 +2845, UA2845 +2846, UA2846 +2847, UA2847 +2848, UA2848 +2849, UA2849 +2850, UA2850 +2851, UA2851 +2852, UA2852 +2853, UA2853 +2854, UA2854 +2855, UA2855 +2856, UA2856 +2857, UA2857 +2858, UA2858 +2859, UA2859 +2860, UA2860 +2861, UA2861 +2862, UA2862 +2863, UA2863 +2864, UA2864 +2865, UA2865 +2866, UA2866 +2867, UA2867 +2868, UA2868 +2869, UA2869 +2870, UA2870 +2871, UA2871 +2872, UA2872 +2873, UA2873 +2874, UA2874 +2875, UA2875 +2876, UA2876 +2877, UA2877 +2878, UA2878 +2879, UA2879 +2880, UA2880 +2881, UA2881 +2882, UA2882 +2883, UA2883 +2884, UA2884 +2885, UA2885 +2886, UA2886 +2887, UA2887 +2888, UA2888 +2889, UA2889 +2890, UA2890 +2891, UA2891 +2892, UA2892 +2893, UA2893 +2894, UA2894 +2895, UA2895 +2896, UA2896 +2897, UA2897 +2898, UA2898 +2899, UA2899 +2900, UA2900 +2901, UA2901 +2902, UA2902 +2903, UA2903 +2904, UA2904 +2905, UA2905 +2906, UA2906 +2907, UA2907 +2908, UA2908 +2909, UA2909 +2910, UA2910 +2911, UA2911 +2912, UA2912 +2913, UA2913 +2914, UA2914 +2915, UA2915 +2916, UA2916 +2917, UA2917 +2918, UA2918 +2919, UA2919 +2920, UA2920 +2921, UA2921 +2922, UA2922 +2923, UA2923 +2924, UA2924 +2925, UA2925 +2926, UA2926 +2927, UA2927 +2928, UA2928 +2929, UA2929 +2930, UA2930 +2931, UA2931 +2932, UA2932 +2933, UA2933 +2934, UA2934 +2935, UA2935 +2936, UA2936 +2937, UA2937 +2938, UA2938 +2939, UA2939 +2940, UA2940 +2941, UA2941 +2942, UA2942 +2943, UA2943 +2944, UA2944 +2945, UA2945 +2946, UA2946 +2947, UA2947 +2948, UA2948 +2949, UA2949 +2950, UA2950 +2951, UA2951 +2952, UA2952 +2953, UA2953 +2954, UA2954 +2955, UA2955 +2956, UA2956 +2957, UA2957 +2958, UA2958 +2959, UA2959 +2960, UA2960 +2961, UA2961 +2962, UA2962 +2963, UA2963 +2964, UA2964 +2965, UA2965 +2966, UA2966 +2967, UA2967 +2968, UA2968 +2969, UA2969 +2970, UA2970 +2971, UA2971 +2972, UA2972 +2973, UA2973 +2974, UA2974 +2975, UA2975 +2976, UA2976 +2977, UA2977 +2978, UA2978 +2979, UA2979 +2980, UA2980 +2981, UA2981 +2982, UA2982 +2983, UA2983 +2984, UA2984 +2985, UA2985 +2986, UA2986 +2987, UA2987 +2988, UA2988 +2989, UA2989 +2990, UA2990 +2991, UA2991 +2992, UA2992 +2993, UA2993 +2994, UA2994 +2995, UA2995 +2996, UA2996 +2997, UA2997 +2998, UA2998 +2999, UA2999 +3000, UA3000 +3001, UA3001 +3002, UA3002 +3003, UA3003 +3004, UA3004 +3005, UA3005 +3006, UA3006 +3007, UA3007 +3008, UA3008 +3009, UA3009 +3010, UA3010 +3011, UA3011 +3012, UA3012 +3013, UA3013 +3014, UA3014 +3015, UA3015 +3016, UA3016 +3017, UA3017 +3018, UA3018 +3019, UA3019 +3020, UA3020 +3021, UA3021 +3022, UA3022 +3023, UA3023 +3024, UA3024 +3025, UA3025 +3026, UA3026 +3027, UA3027 +3028, UA3028 +3029, UA3029 +3030, UA3030 +3031, UA3031 +3032, UA3032 +3033, UA3033 +3034, UA3034 +3035, UA3035 +3036, UA3036 +3037, UA3037 +3038, UA3038 +3039, UA3039 +3040, UA3040 +3041, UA3041 +3042, UA3042 +3043, UA3043 +3044, UA3044 +3045, UA3045 +3046, UA3046 +3047, UA3047 +3048, UA3048 +3049, UA3049 +3050, UA3050 +3051, UA3051 +3052, UA3052 +3053, UA3053 +3054, UA3054 +3055, UA3055 +3056, UA3056 +3057, UA3057 +3058, UA3058 +3059, UA3059 +3060, UA3060 +3061, UA3061 +3062, UA3062 +3063, UA3063 +3064, UA3064 +3065, UA3065 +3066, UA3066 +3067, UA3067 +3068, UA3068 +3069, UA3069 +3070, UA3070 +3071, UA3071 +3072, UA3072 +3073, UA3073 +3074, UA3074 +3075, UA3075 +3076, UA3076 +3077, UA3077 +3078, UA3078 +3079, UA3079 +3080, UA3080 +3081, UA3081 +3082, UA3082 +3083, UA3083 +3084, UA3084 +3085, UA3085 +3086, UA3086 +3087, UA3087 +3088, UA3088 +3089, UA3089 +3090, UA3090 +3091, UA3091 +3092, UA3092 +3093, UA3093 +3094, UA3094 +3095, UA3095 +3096, UA3096 +3097, UA3097 +3098, UA3098 +3099, UA3099 +3100, UA3100 +3101, UA3101 +3102, UA3102 +3103, UA3103 +3104, UA3104 +3105, UA3105 +3106, UA3106 +3107, UA3107 +3108, UA3108 +3109, UA3109 +3110, UA3110 +3111, UA3111 +3112, UA3112 +3113, UA3113 +3114, UA3114 +3115, UA3115 +3116, UA3116 +3117, UA3117 +3118, UA3118 +3119, UA3119 +3120, UA3120 +3121, UA3121 +3122, UA3122 +3123, UA3123 +3124, UA3124 +3125, UA3125 +3126, UA3126 +3127, UA3127 +3128, UA3128 +3129, UA3129 +3130, UA3130 +3131, UA3131 +3132, UA3132 +3133, UA3133 +3134, UA3134 +3135, UA3135 +3136, UA3136 +3137, UA3137 +3138, UA3138 +3139, UA3139 +3140, UA3140 +3141, UA3141 +3142, UA3142 +3143, UA3143 +3144, UA3144 +3145, UA3145 +3146, UA3146 +3147, UA3147 +3148, UA3148 +3149, UA3149 +3150, UA3150 +3151, UA3151 +3152, UA3152 +3153, UA3153 +3154, UA3154 +3155, UA3155 +3156, UA3156 +3157, UA3157 +3158, UA3158 +3159, UA3159 +3160, UA3160 +3161, UA3161 +3162, UA3162 +3163, UA3163 +3164, UA3164 +3165, UA3165 +3166, UA3166 +3167, UA3167 +3168, UA3168 +3169, UA3169 +3170, UA3170 +3171, UA3171 +3172, UA3172 +3173, UA3173 +3174, UA3174 +3175, UA3175 +3176, UA3176 +3177, UA3177 +3178, UA3178 +3179, UA3179 +3180, UA3180 +3181, UA3181 +3182, UA3182 +3183, UA3183 +3184, UA3184 +3185, UA3185 +3186, UA3186 +3187, UA3187 +3188, UA3188 +3189, UA3189 +3190, UA3190 +3191, UA3191 +3192, UA3192 +3193, UA3193 +3194, UA3194 +3195, UA3195 +3196, UA3196 +3197, UA3197 +3198, UA3198 +3199, UA3199 +3200, UA3200 +3201, UA3201 +3202, UA3202 +3203, UA3203 +3204, UA3204 +3205, UA3205 +3206, UA3206 +3207, UA3207 +3208, UA3208 +3209, UA3209 +3210, UA3210 +3211, UA3211 +3212, UA3212 +3213, UA3213 +3214, UA3214 +3215, UA3215 +3216, UA3216 +3217, UA3217 +3218, UA3218 +3219, UA3219 +3220, UA3220 +3221, UA3221 +3222, UA3222 +3223, UA3223 +3224, UA3224 +3225, UA3225 +3226, UA3226 +3227, UA3227 +3228, UA3228 +3229, UA3229 +3230, UA3230 +3231, UA3231 +3232, UA3232 +3233, UA3233 +3234, UA3234 +3235, UA3235 +3236, UA3236 +3237, UA3237 +3238, UA3238 +3239, UA3239 +3240, UA3240 +3241, UA3241 +3242, UA3242 +3243, UA3243 +3244, UA3244 +3245, UA3245 +3246, UA3246 +3247, UA3247 +3248, UA3248 +3249, UA3249 +3250, UA3250 +3251, UA3251 +3252, UA3252 +3253, UA3253 +3254, UA3254 +3255, UA3255 +3256, UA3256 +3257, UA3257 +3258, UA3258 +3259, UA3259 +3260, UA3260 +3261, UA3261 +3262, UA3262 +3263, UA3263 +3264, UA3264 +3265, UA3265 +3266, UA3266 +3267, UA3267 +3268, UA3268 +3269, UA3269 +3270, UA3270 +3271, UA3271 +3272, UA3272 +3273, UA3273 +3274, UA3274 +3275, UA3275 +3276, UA3276 +3277, UA3277 +3278, UA3278 +3279, UA3279 +3280, UA3280 +3281, UA3281 +3282, UA3282 +3283, UA3283 +3284, UA3284 +3285, UA3285 +3286, UA3286 +3287, UA3287 +3288, UA3288 +3289, UA3289 +3290, UA3290 +3291, UA3291 +3292, UA3292 +3293, UA3293 +3294, UA3294 +3295, UA3295 +3296, UA3296 +3297, UA3297 +3298, UA3298 +3299, UA3299 +3300, UA3300 +3301, UA3301 +3302, UA3302 +3303, UA3303 +3304, UA3304 +3305, UA3305 +3306, UA3306 +3307, UA3307 +3308, UA3308 +3309, UA3309 +3310, UA3310 +3311, UA3311 +3312, UA3312 +3313, UA3313 +3314, UA3314 +3315, UA3315 +3316, UA3316 +3317, UA3317 +3318, UA3318 +3319, UA3319 +3320, UA3320 +3321, UA3321 +3322, UA3322 +3323, UA3323 +3324, UA3324 +3325, UA3325 +3326, UA3326 +3327, UA3327 +3328, UA3328 +3329, UA3329 +3330, UA3330 +3331, UA3331 +3332, UA3332 +3333, UA3333 +3334, UA3334 +3335, UA3335 +3336, UA3336 +3337, UA3337 +3338, UA3338 +3339, UA3339 +3340, UA3340 +3341, UA3341 +3342, UA3342 +3343, UA3343 +3344, UA3344 +3345, UA3345 +3346, UA3346 +3347, UA3347 +3348, UA3348 +3349, UA3349 +3350, UA3350 +3351, UA3351 +3352, UA3352 +3353, UA3353 +3354, UA3354 +3355, UA3355 +3356, UA3356 +3357, UA3357 +3358, UA3358 +3359, UA3359 +3360, UA3360 +3361, UA3361 +3362, UA3362 +3363, UA3363 +3364, UA3364 +3365, UA3365 +3366, UA3366 +3367, UA3367 +3368, UA3368 +3369, UA3369 +3370, UA3370 +3371, UA3371 +3372, UA3372 +3373, UA3373 +3374, UA3374 +3375, UA3375 +3376, UA3376 +3377, UA3377 +3378, UA3378 +3379, UA3379 +3380, UA3380 +3381, UA3381 +3382, UA3382 +3383, UA3383 +3384, UA3384 +3385, UA3385 +3386, UA3386 +3387, UA3387 +3388, UA3388 +3389, UA3389 +3390, UA3390 +3391, UA3391 +3392, UA3392 +3393, UA3393 +3394, UA3394 +3395, UA3395 +3396, UA3396 +3397, UA3397 +3398, UA3398 +3399, UA3399 +3400, UA3400 +3401, UA3401 +3402, UA3402 +3403, UA3403 +3404, UA3404 +3405, UA3405 +3406, UA3406 +3407, UA3407 +3408, UA3408 +3409, UA3409 +3410, UA3410 +3411, UA3411 +3412, UA3412 +3413, UA3413 +3414, UA3414 +3415, UA3415 +3416, UA3416 +3417, UA3417 +3418, UA3418 +3419, UA3419 +3420, UA3420 +3421, UA3421 +3422, UA3422 +3423, UA3423 +3424, UA3424 +3425, UA3425 +3426, UA3426 +3427, UA3427 +3428, UA3428 +3429, UA3429 +3430, UA3430 +3431, UA3431 +3432, UA3432 +3433, UA3433 +3434, UA3434 +3435, UA3435 +3436, UA3436 +3437, UA3437 +3438, UA3438 +3439, UA3439 +3440, UA3440 +3441, UA3441 +3442, UA3442 +3443, UA3443 +3444, UA3444 +3445, UA3445 +3446, UA3446 +3447, UA3447 +3448, UA3448 +3449, UA3449 +3450, UA3450 +3451, UA3451 +3452, UA3452 +3453, UA3453 +3454, UA3454 +3455, UA3455 +3456, UA3456 +3457, UA3457 +3458, UA3458 +3459, UA3459 +3460, UA3460 +3461, UA3461 +3462, UA3462 +3463, UA3463 +3464, UA3464 +3465, UA3465 +3466, UA3466 +3467, UA3467 +3468, UA3468 +3469, UA3469 +3470, UA3470 +3471, UA3471 +3472, UA3472 +3473, UA3473 +3474, UA3474 +3475, UA3475 +3476, UA3476 +3477, UA3477 +3478, UA3478 +3479, UA3479 +3480, UA3480 +3481, UA3481 +3482, UA3482 +3483, UA3483 +3484, UA3484 +3485, UA3485 +3486, UA3486 +3487, UA3487 +3488, UA3488 +3489, UA3489 +3490, UA3490 +3491, UA3491 +3492, UA3492 +3493, UA3493 +3494, UA3494 +3495, UA3495 +3496, UA3496 +3497, UA3497 +3498, UA3498 +3499, UA3499 +3500, UA3500 +3501, UA3501 +3502, UA3502 +3503, UA3503 +3504, UA3504 +3505, UA3505 +3506, UA3506 +3507, UA3507 +3508, UA3508 +3509, UA3509 +3510, UA3510 +3511, UA3511 +3512, UA3512 +3513, UA3513 +3514, UA3514 +3515, UA3515 +3516, UA3516 +3517, UA3517 +3518, UA3518 +3519, UA3519 +3520, UA3520 +3521, UA3521 +3522, UA3522 +3523, UA3523 +3524, UA3524 +3525, UA3525 +3526, UA3526 +3527, UA3527 +3528, UA3528 +3529, UA3529 +3530, UA3530 +3531, UA3531 +3532, UA3532 +3533, UA3533 +3534, UA3534 +3535, UA3535 +3536, UA3536 +3537, UA3537 +3538, UA3538 +3539, UA3539 +3540, UA3540 +3541, UA3541 +3542, UA3542 +3543, UA3543 +3544, UA3544 +3545, UA3545 +3546, UA3546 +3547, UA3547 +3548, UA3548 +3549, UA3549 +3550, UA3550 +3551, UA3551 +3552, UA3552 +3553, UA3553 +3554, UA3554 +3555, UA3555 +3556, UA3556 +3557, UA3557 +3558, UA3558 +3559, UA3559 +3560, UA3560 +3561, UA3561 +3562, UA3562 +3563, UA3563 +3564, UA3564 +3565, UA3565 +3566, UA3566 +3567, UA3567 +3568, UA3568 +3569, UA3569 +3570, UA3570 +3571, UA3571 +3572, UA3572 +3573, UA3573 +3574, UA3574 +3575, UA3575 +3576, UA3576 +3577, UA3577 +3578, UA3578 +3579, UA3579 +3580, UA3580 +3581, UA3581 +3582, UA3582 +3583, UA3583 +3584, UA3584 +3585, UA3585 +3586, UA3586 +3587, UA3587 +3588, UA3588 +3589, UA3589 +3590, UA3590 +3591, UA3591 +3592, UA3592 +3593, UA3593 +3594, UA3594 +3595, UA3595 +3596, UA3596 +3597, UA3597 +3598, UA3598 +3599, UA3599 +3600, UA3600 +3601, UA3601 +3602, UA3602 +3603, UA3603 +3604, UA3604 +3605, UA3605 +3606, UA3606 +3607, UA3607 +3608, UA3608 +3609, UA3609 +3610, UA3610 +3611, UA3611 +3612, UA3612 +3613, UA3613 +3614, UA3614 +3615, UA3615 +3616, UA3616 +3617, UA3617 +3618, UA3618 +3619, UA3619 +3620, UA3620 +3621, UA3621 +3622, UA3622 +3623, UA3623 +3624, UA3624 +3625, UA3625 +3626, UA3626 +3627, UA3627 +3628, UA3628 +3629, UA3629 +3630, UA3630 +3631, UA3631 +3632, UA3632 +3633, UA3633 +3634, UA3634 +3635, UA3635 +3636, UA3636 +3637, UA3637 +3638, UA3638 +3639, UA3639 +3640, UA3640 +3641, UA3641 +3642, UA3642 +3643, UA3643 +3644, UA3644 +3645, UA3645 +3646, UA3646 +3647, UA3647 +3648, UA3648 +3649, UA3649 +3650, UA3650 +3651, UA3651 +3652, UA3652 +3653, UA3653 +3654, UA3654 +3655, UA3655 +3656, UA3656 +3657, UA3657 +3658, UA3658 +3659, UA3659 +3660, UA3660 +3661, UA3661 +3662, UA3662 +3663, UA3663 +3664, UA3664 +3665, UA3665 +3666, UA3666 +3667, UA3667 +3668, UA3668 +3669, UA3669 +3670, UA3670 +3671, UA3671 +3672, UA3672 +3673, UA3673 +3674, UA3674 +3675, UA3675 +3676, UA3676 +3677, UA3677 +3678, UA3678 +3679, UA3679 +3680, UA3680 +3681, UA3681 +3682, UA3682 +3683, UA3683 +3684, UA3684 +3685, UA3685 +3686, UA3686 +3687, UA3687 +3688, UA3688 +3689, UA3689 +3690, UA3690 +3691, UA3691 +3692, UA3692 +3693, UA3693 +3694, UA3694 +3695, UA3695 +3696, UA3696 +3697, UA3697 +3698, UA3698 +3699, UA3699 +3700, UA3700 +3701, UA3701 +3702, UA3702 +3703, UA3703 +3704, UA3704 +3705, UA3705 +3706, UA3706 +3707, UA3707 +3708, UA3708 +3709, UA3709 +3710, UA3710 +3711, UA3711 +3712, UA3712 +3713, UA3713 +3714, UA3714 +3715, UA3715 +3716, UA3716 +3717, UA3717 +3718, UA3718 +3719, UA3719 +3720, UA3720 +3721, UA3721 +3722, UA3722 +3723, UA3723 +3724, UA3724 +3725, UA3725 +3726, UA3726 +3727, UA3727 +3728, UA3728 +3729, UA3729 +3730, UA3730 +3731, UA3731 +3732, UA3732 +3733, UA3733 +3734, UA3734 +3735, UA3735 +3736, UA3736 +3737, UA3737 +3738, UA3738 +3739, UA3739 +3740, UA3740 +3741, UA3741 +3742, UA3742 +3743, UA3743 +3744, UA3744 +3745, UA3745 +3746, UA3746 +3747, UA3747 +3748, UA3748 +3749, UA3749 +3750, UA3750 +3751, UA3751 +3752, UA3752 +3753, UA3753 +3754, UA3754 +3755, UA3755 +3756, UA3756 +3757, UA3757 +3758, UA3758 +3759, UA3759 +3760, UA3760 +3761, UA3761 +3762, UA3762 +3763, UA3763 +3764, UA3764 +3765, UA3765 +3766, UA3766 +3767, UA3767 +3768, UA3768 +3769, UA3769 +3770, UA3770 +3771, UA3771 +3772, UA3772 +3773, UA3773 +3774, UA3774 +3775, UA3775 +3776, UA3776 +3777, UA3777 +3778, UA3778 +3779, UA3779 +3780, UA3780 +3781, UA3781 +3782, UA3782 +3783, UA3783 +3784, UA3784 +3785, UA3785 +3786, UA3786 +3787, UA3787 +3788, UA3788 +3789, UA3789 +3790, UA3790 +3791, UA3791 +3792, UA3792 +3793, UA3793 +3794, UA3794 +3795, UA3795 +3796, UA3796 +3797, UA3797 +3798, UA3798 +3799, UA3799 +3800, UA3800 +3801, UA3801 +3802, UA3802 +3803, UA3803 +3804, UA3804 +3805, UA3805 +3806, UA3806 +3807, UA3807 +3808, UA3808 +3809, UA3809 +3810, UA3810 +3811, UA3811 +3812, UA3812 +3813, UA3813 +3814, UA3814 +3815, UA3815 +3816, UA3816 +3817, UA3817 +3818, UA3818 +3819, UA3819 +3820, UA3820 +3821, UA3821 +3822, UA3822 +3823, UA3823 +3824, UA3824 +3825, UA3825 +3826, UA3826 +3827, UA3827 +3828, UA3828 +3829, UA3829 +3830, UA3830 +3831, UA3831 +3832, UA3832 +3833, UA3833 +3834, UA3834 +3835, UA3835 +3836, UA3836 +3837, UA3837 +3838, UA3838 +3839, UA3839 +3840, UA3840 +3841, UA3841 +3842, UA3842 +3843, UA3843 +3844, UA3844 +3845, UA3845 +3846, UA3846 +3847, UA3847 +3848, UA3848 +3849, UA3849 +3850, UA3850 +3851, UA3851 +3852, UA3852 +3853, UA3853 +3854, UA3854 +3855, UA3855 +3856, UA3856 +3857, UA3857 +3858, UA3858 +3859, UA3859 +3860, UA3860 +3861, UA3861 +3862, UA3862 +3863, UA3863 +3864, UA3864 +3865, UA3865 +3866, UA3866 +3867, UA3867 +3868, UA3868 +3869, UA3869 +3870, UA3870 +3871, UA3871 +3872, UA3872 +3873, UA3873 +3874, UA3874 +3875, UA3875 +3876, UA3876 +3877, UA3877 +3878, UA3878 +3879, UA3879 +3880, UA3880 +3881, UA3881 +3882, UA3882 +3883, UA3883 +3884, UA3884 +3885, UA3885 +3886, UA3886 +3887, UA3887 +3888, UA3888 +3889, UA3889 +3890, UA3890 +3891, UA3891 +3892, UA3892 +3893, UA3893 +3894, UA3894 +3895, UA3895 +3896, UA3896 +3897, UA3897 +3898, UA3898 +3899, UA3899 +3900, UA3900 +3901, UA3901 +3902, UA3902 +3903, UA3903 +3904, UA3904 +3905, UA3905 +3906, UA3906 +3907, UA3907 +3908, UA3908 +3909, UA3909 +3910, UA3910 +3911, UA3911 +3912, UA3912 +3913, UA3913 +3914, UA3914 +3915, UA3915 +3916, UA3916 +3917, UA3917 +3918, UA3918 +3919, UA3919 +3920, UA3920 +3921, UA3921 +3922, UA3922 +3923, UA3923 +3924, UA3924 +3925, UA3925 +3926, UA3926 +3927, UA3927 +3928, UA3928 +3929, UA3929 +3930, UA3930 +3931, UA3931 +3932, UA3932 +3933, UA3933 +3934, UA3934 +3935, UA3935 +3936, UA3936 +3937, UA3937 +3938, UA3938 +3939, UA3939 +3940, UA3940 +3941, UA3941 +3942, UA3942 +3943, UA3943 +3944, UA3944 +3945, UA3945 +3946, UA3946 +3947, UA3947 +3948, UA3948 +3949, UA3949 +3950, UA3950 +3951, UA3951 +3952, UA3952 +3953, UA3953 +3954, UA3954 +3955, UA3955 +3956, UA3956 +3957, UA3957 +3958, UA3958 +3959, UA3959 +3960, UA3960 +3961, UA3961 +3962, UA3962 +3963, UA3963 +3964, UA3964 +3965, UA3965 +3966, UA3966 +3967, UA3967 +3968, UA3968 +3969, UA3969 +3970, UA3970 +3971, UA3971 +3972, UA3972 +3973, UA3973 +3974, UA3974 +3975, UA3975 +3976, UA3976 +3977, UA3977 +3978, UA3978 +3979, UA3979 +3980, UA3980 +3981, UA3981 +3982, UA3982 +3983, UA3983 +3984, UA3984 +3985, UA3985 +3986, UA3986 +3987, UA3987 +3988, UA3988 +3989, UA3989 +3990, UA3990 +3991, UA3991 +3992, UA3992 +3993, UA3993 +3994, UA3994 +3995, UA3995 +3996, UA3996 +3997, UA3997 +3998, UA3998 +3999, UA3999 +4000, UA4000 +4001, UA4001 +4002, UA4002 +4003, UA4003 +4004, UA4004 +4005, UA4005 +4006, UA4006 +4007, UA4007 +4008, UA4008 +4009, UA4009 +4010, UA4010 +4011, UA4011 +4012, UA4012 +4013, UA4013 +4014, UA4014 +4015, UA4015 +4016, UA4016 +4017, UA4017 +4018, UA4018 +4019, UA4019 +4020, UA4020 +4021, UA4021 +4022, UA4022 +4023, UA4023 +4024, UA4024 +4025, UA4025 +4026, UA4026 +4027, UA4027 +4028, UA4028 +4029, UA4029 +4030, UA4030 +4031, UA4031 +4032, UA4032 +4033, UA4033 +4034, UA4034 +4035, UA4035 +4036, UA4036 +4037, UA4037 +4038, UA4038 +4039, UA4039 +4040, UA4040 +4041, UA4041 +4042, UA4042 +4043, UA4043 +4044, UA4044 +4045, UA4045 +4046, UA4046 +4047, UA4047 +4048, UA4048 +4049, UA4049 +4050, UA4050 +4051, UA4051 +4052, UA4052 +4053, UA4053 +4054, UA4054 +4055, UA4055 +4056, UA4056 +4057, UA4057 +4058, UA4058 +4059, UA4059 +4060, UA4060 +4061, UA4061 +4062, UA4062 +4063, UA4063 +4064, UA4064 +4065, UA4065 +4066, UA4066 +4067, UA4067 +4068, UA4068 +4069, UA4069 +4070, UA4070 +4071, UA4071 +4072, UA4072 +4073, UA4073 +4074, UA4074 +4075, UA4075 +4076, UA4076 +4077, UA4077 +4078, UA4078 +4079, UA4079 +4080, UA4080 +4081, UA4081 +4082, UA4082 +4083, UA4083 +4084, UA4084 +4085, UA4085 +4086, UA4086 +4087, UA4087 +4088, UA4088 +4089, UA4089 +4090, UA4090 +4091, UA4091 +4092, UA4092 +4093, UA4093 +4094, UA4094 +4095, UA4095 +4096, UA4096 +4097, UA4097 +4098, UA4098 +4099, UA4099 +4100, UA4100 +4101, UA4101 +4102, UA4102 +4103, UA4103 +4104, UA4104 +4105, UA4105 +4106, UA4106 +4107, UA4107 +4108, UA4108 +4109, UA4109 +4110, UA4110 +4111, UA4111 +4112, UA4112 +4113, UA4113 +4114, UA4114 +4115, UA4115 +4116, UA4116 +4117, UA4117 +4118, UA4118 +4119, UA4119 +4120, UA4120 +4121, UA4121 +4122, UA4122 +4123, UA4123 +4124, UA4124 +4125, UA4125 +4126, UA4126 +4127, UA4127 +4128, UA4128 +4129, UA4129 +4130, UA4130 +4131, UA4131 +4132, UA4132 +4133, UA4133 +4134, UA4134 +4135, UA4135 +4136, UA4136 +4137, UA4137 +4138, UA4138 +4139, UA4139 +4140, UA4140 +4141, UA4141 +4142, UA4142 +4143, UA4143 +4144, UA4144 +4145, UA4145 +4146, UA4146 +4147, UA4147 +4148, UA4148 +4149, UA4149 +4150, UA4150 +4151, UA4151 +4152, UA4152 +4153, UA4153 +4154, UA4154 +4155, UA4155 +4156, UA4156 +4157, UA4157 +4158, UA4158 +4159, UA4159 +4160, UA4160 +4161, UA4161 +4162, UA4162 +4163, UA4163 +4164, UA4164 +4165, UA4165 +4166, UA4166 +4167, UA4167 +4168, UA4168 +4169, UA4169 +4170, UA4170 +4171, UA4171 +4172, UA4172 +4173, UA4173 +4174, UA4174 +4175, UA4175 +4176, UA4176 +4177, UA4177 +4178, UA4178 +4179, UA4179 +4180, UA4180 +4181, UA4181 +4182, UA4182 +4183, UA4183 +4184, UA4184 +4185, UA4185 +4186, UA4186 +4187, UA4187 +4188, UA4188 +4189, UA4189 +4190, UA4190 +4191, UA4191 +4192, UA4192 +4193, UA4193 +4194, UA4194 +4195, UA4195 +4196, UA4196 +4197, UA4197 +4198, UA4198 +4199, UA4199 +4200, UA4200 +4201, UA4201 +4202, UA4202 +4203, UA4203 +4204, UA4204 +4205, UA4205 +4206, UA4206 +4207, UA4207 +4208, UA4208 +4209, UA4209 +4210, UA4210 +4211, UA4211 +4212, UA4212 +4213, UA4213 +4214, UA4214 +4215, UA4215 +4216, UA4216 +4217, UA4217 +4218, UA4218 +4219, UA4219 +4220, UA4220 +4221, UA4221 +4222, UA4222 +4223, UA4223 +4224, UA4224 +4225, UA4225 +4226, UA4226 +4227, UA4227 +4228, UA4228 +4229, UA4229 +4230, UA4230 +4231, UA4231 +4232, UA4232 +4233, UA4233 +4234, UA4234 +4235, UA4235 +4236, UA4236 +4237, UA4237 +4238, UA4238 +4239, UA4239 +4240, UA4240 +4241, UA4241 +4242, UA4242 +4243, UA4243 +4244, UA4244 +4245, UA4245 +4246, UA4246 +4247, UA4247 +4248, UA4248 +4249, UA4249 +4250, UA4250 +4251, UA4251 +4252, UA4252 +4253, UA4253 +4254, UA4254 +4255, UA4255 +4256, UA4256 +4257, UA4257 +4258, UA4258 +4259, UA4259 +4260, UA4260 +4261, UA4261 +4262, UA4262 +4263, UA4263 +4264, UA4264 +4265, UA4265 +4266, UA4266 +4267, UA4267 +4268, UA4268 +4269, UA4269 +4270, UA4270 +4271, UA4271 +4272, UA4272 +4273, UA4273 +4274, UA4274 +4275, UA4275 +4276, UA4276 +4277, UA4277 +4278, UA4278 +4279, UA4279 +4280, UA4280 +4281, UA4281 +4282, UA4282 +4283, UA4283 +4284, UA4284 +4285, UA4285 +4286, UA4286 +4287, UA4287 +4288, UA4288 +4289, UA4289 +4290, UA4290 +4291, UA4291 +4292, UA4292 +4293, UA4293 +4294, UA4294 +4295, UA4295 +4296, UA4296 +4297, UA4297 +4298, UA4298 +4299, UA4299 +4300, UA4300 +4301, UA4301 +4302, UA4302 +4303, UA4303 +4304, UA4304 +4305, UA4305 +4306, UA4306 +4307, UA4307 +4308, UA4308 +4309, UA4309 +4310, UA4310 +4311, UA4311 +4312, UA4312 +4313, UA4313 +4314, UA4314 +4315, UA4315 +4316, UA4316 +4317, UA4317 +4318, UA4318 +4319, UA4319 +4320, UA4320 +4321, UA4321 +4322, UA4322 +4323, UA4323 +4324, UA4324 +4325, UA4325 +4326, UA4326 +4327, UA4327 +4328, UA4328 +4329, UA4329 +4330, UA4330 +4331, UA4331 +4332, UA4332 +4333, UA4333 +4334, UA4334 +4335, UA4335 +4336, UA4336 +4337, UA4337 +4338, UA4338 +4339, UA4339 +4340, UA4340 +4341, UA4341 +4342, UA4342 +4343, UA4343 +4344, UA4344 +4345, UA4345 +4346, UA4346 +4347, UA4347 +4348, UA4348 +4349, UA4349 +4350, UA4350 +4351, UA4351 +4352, UA4352 +4353, UA4353 +4354, UA4354 +4355, UA4355 +4356, UA4356 +4357, UA4357 +4358, UA4358 +4359, UA4359 +4360, UA4360 +4361, UA4361 +4362, UA4362 +4363, UA4363 +4364, UA4364 +4365, UA4365 +4366, UA4366 +4367, UA4367 +4368, UA4368 +4369, UA4369 +4370, UA4370 +4371, UA4371 +4372, UA4372 +4373, UA4373 +4374, UA4374 +4375, UA4375 +4376, UA4376 +4377, UA4377 +4378, UA4378 +4379, UA4379 +4380, UA4380 +4381, UA4381 +4382, UA4382 +4383, UA4383 +4384, UA4384 +4385, UA4385 +4386, UA4386 +4387, UA4387 +4388, UA4388 +4389, UA4389 +4390, UA4390 +4391, UA4391 +4392, UA4392 +4393, UA4393 +4394, UA4394 +4395, UA4395 +4396, UA4396 +4397, UA4397 +4398, UA4398 +4399, UA4399 +4400, UA4400 +4401, UA4401 +4402, UA4402 +4403, UA4403 +4404, UA4404 +4405, UA4405 +4406, UA4406 +4407, UA4407 +4408, UA4408 +4409, UA4409 +4410, UA4410 +4411, UA4411 +4412, UA4412 +4413, UA4413 +4414, UA4414 +4415, UA4415 +4416, UA4416 +4417, UA4417 +4418, UA4418 +4419, UA4419 +4420, UA4420 +4421, UA4421 +4422, UA4422 +4423, UA4423 +4424, UA4424 +4425, UA4425 +4426, UA4426 +4427, UA4427 +4428, UA4428 +4429, UA4429 +4430, UA4430 +4431, UA4431 +4432, UA4432 +4433, UA4433 +4434, UA4434 +4435, UA4435 +4436, UA4436 +4437, UA4437 +4438, UA4438 +4439, UA4439 +4440, UA4440 +4441, UA4441 +4442, UA4442 +4443, UA4443 +4444, UA4444 +4445, UA4445 +4446, UA4446 +4447, UA4447 +4448, UA4448 +4449, UA4449 +4450, UA4450 +4451, UA4451 +4452, UA4452 +4453, UA4453 +4454, UA4454 +4455, UA4455 +4456, UA4456 +4457, UA4457 +4458, UA4458 +4459, UA4459 +4460, UA4460 +4461, UA4461 +4462, UA4462 +4463, UA4463 +4464, UA4464 +4465, UA4465 +4466, UA4466 +4467, UA4467 +4468, UA4468 +4469, UA4469 +4470, UA4470 +4471, UA4471 +4472, UA4472 +4473, UA4473 +4474, UA4474 +4475, UA4475 +4476, UA4476 +4477, UA4477 +4478, UA4478 +4479, UA4479 +4480, UA4480 +4481, UA4481 +4482, UA4482 +4483, UA4483 +4484, UA4484 +4485, UA4485 +4486, UA4486 +4487, UA4487 +4488, UA4488 +4489, UA4489 +4490, UA4490 +4491, UA4491 +4492, UA4492 +4493, UA4493 +4494, UA4494 +4495, UA4495 +4496, UA4496 +4497, UA4497 +4498, UA4498 +4499, UA4499 +4500, UA4500 +4501, UA4501 +4502, UA4502 +4503, UA4503 +4504, UA4504 +4505, UA4505 +4506, UA4506 +4507, UA4507 +4508, UA4508 +4509, UA4509 +4510, UA4510 +4511, UA4511 +4512, UA4512 +4513, UA4513 +4514, UA4514 +4515, UA4515 +4516, UA4516 +4517, UA4517 +4518, UA4518 +4519, UA4519 +4520, UA4520 +4521, UA4521 +4522, UA4522 +4523, UA4523 +4524, UA4524 +4525, UA4525 +4526, UA4526 +4527, UA4527 +4528, UA4528 +4529, UA4529 +4530, UA4530 +4531, UA4531 +4532, UA4532 +4533, UA4533 +4534, UA4534 +4535, UA4535 +4536, UA4536 +4537, UA4537 +4538, UA4538 +4539, UA4539 +4540, UA4540 +4541, UA4541 +4542, UA4542 +4543, UA4543 +4544, UA4544 +4545, UA4545 +4546, UA4546 +4547, UA4547 +4548, UA4548 +4549, UA4549 +4550, UA4550 +4551, UA4551 +4552, UA4552 +4553, UA4553 +4554, UA4554 +4555, UA4555 +4556, UA4556 +4557, UA4557 +4558, UA4558 +4559, UA4559 +4560, UA4560 +4561, UA4561 +4562, UA4562 +4563, UA4563 +4564, UA4564 +4565, UA4565 +4566, UA4566 +4567, UA4567 +4568, UA4568 +4569, UA4569 +4570, UA4570 +4571, UA4571 +4572, UA4572 +4573, UA4573 +4574, UA4574 +4575, UA4575 +4576, UA4576 +4577, UA4577 +4578, UA4578 +4579, UA4579 +4580, UA4580 +4581, UA4581 +4582, UA4582 +4583, UA4583 +4584, UA4584 +4585, UA4585 +4586, UA4586 +4587, UA4587 +4588, UA4588 +4589, UA4589 +4590, UA4590 +4591, UA4591 +4592, UA4592 +4593, UA4593 +4594, UA4594 +4595, UA4595 +4596, UA4596 +4597, UA4597 +4598, UA4598 +4599, UA4599 +4600, UA4600 +4601, UA4601 +4602, UA4602 +4603, UA4603 +4604, UA4604 +4605, UA4605 +4606, UA4606 +4607, UA4607 +4608, UA4608 +4609, UA4609 +4610, UA4610 +4611, UA4611 +4612, UA4612 +4613, UA4613 +4614, UA4614 +4615, UA4615 +4616, UA4616 +4617, UA4617 +4618, UA4618 +4619, UA4619 +4620, UA4620 +4621, UA4621 +4622, UA4622 +4623, UA4623 +4624, UA4624 +4625, UA4625 +4626, UA4626 +4627, UA4627 +4628, UA4628 +4629, UA4629 +4630, UA4630 +4631, UA4631 +4632, UA4632 +4633, UA4633 +4634, UA4634 +4635, UA4635 +4636, UA4636 +4637, UA4637 +4638, UA4638 +4639, UA4639 +4640, UA4640 +4641, UA4641 +4642, UA4642 +4643, UA4643 +4644, UA4644 +4645, UA4645 +4646, UA4646 +4647, UA4647 +4648, UA4648 +4649, UA4649 +4650, UA4650 +4651, UA4651 +4652, UA4652 +4653, UA4653 +4654, UA4654 +4655, UA4655 +4656, UA4656 +4657, UA4657 +4658, UA4658 +4659, UA4659 +4660, UA4660 +4661, UA4661 +4662, UA4662 +4663, UA4663 +4664, UA4664 +4665, UA4665 +4666, UA4666 +4667, UA4667 +4668, UA4668 +4669, UA4669 +4670, UA4670 +4671, UA4671 +4672, UA4672 +4673, UA4673 +4674, UA4674 +4675, UA4675 +4676, UA4676 +4677, UA4677 +4678, UA4678 +4679, UA4679 +4680, UA4680 +4681, UA4681 +4682, UA4682 +4683, UA4683 +4684, UA4684 +4685, UA4685 +4686, UA4686 +4687, UA4687 +4688, UA4688 +4689, UA4689 +4690, UA4690 +4691, UA4691 +4692, UA4692 +4693, UA4693 +4694, UA4694 +4695, UA4695 +4696, UA4696 +4697, UA4697 +4698, UA4698 +4699, UA4699 +4700, UA4700 +4701, UA4701 +4702, UA4702 +4703, UA4703 +4704, UA4704 +4705, UA4705 +4706, UA4706 +4707, UA4707 +4708, UA4708 +4709, UA4709 +4710, UA4710 +4711, UA4711 +4712, UA4712 +4713, UA4713 +4714, UA4714 +4715, UA4715 +4716, UA4716 +4717, UA4717 +4718, UA4718 +4719, UA4719 +4720, UA4720 +4721, UA4721 +4722, UA4722 +4723, UA4723 +4724, UA4724 +4725, UA4725 +4726, UA4726 +4727, UA4727 +4728, UA4728 +4729, UA4729 +4730, UA4730 +4731, UA4731 +4732, UA4732 +4733, UA4733 +4734, UA4734 +4735, UA4735 +4736, UA4736 +4737, UA4737 +4738, UA4738 +4739, UA4739 +4740, UA4740 +4741, UA4741 +4742, UA4742 +4743, UA4743 +4744, UA4744 +4745, UA4745 +4746, UA4746 +4747, UA4747 +4748, UA4748 +4749, UA4749 +4750, UA4750 +4751, UA4751 +4752, UA4752 +4753, UA4753 +4754, UA4754 +4755, UA4755 +4756, UA4756 +4757, UA4757 +4758, UA4758 +4759, UA4759 +4760, UA4760 +4761, UA4761 +4762, UA4762 +4763, UA4763 +4764, UA4764 +4765, UA4765 +4766, UA4766 +4767, UA4767 +4768, UA4768 +4769, UA4769 +4770, UA4770 +4771, UA4771 +4772, UA4772 +4773, UA4773 +4774, UA4774 +4775, UA4775 +4776, UA4776 +4777, UA4777 +4778, UA4778 +4779, UA4779 +4780, UA4780 +4781, UA4781 +4782, UA4782 +4783, UA4783 +4784, UA4784 +4785, UA4785 +4786, UA4786 +4787, UA4787 +4788, UA4788 +4789, UA4789 +4790, UA4790 +4791, UA4791 +4792, UA4792 +4793, UA4793 +4794, UA4794 +4795, UA4795 +4796, UA4796 +4797, UA4797 +4798, UA4798 +4799, UA4799 +4800, UA4800 +4801, UA4801 +4802, UA4802 +4803, UA4803 +4804, UA4804 +4805, UA4805 +4806, UA4806 +4807, UA4807 +4808, UA4808 +4809, UA4809 +4810, UA4810 +4811, UA4811 +4812, UA4812 +4813, UA4813 +4814, UA4814 +4815, UA4815 +4816, UA4816 +4817, UA4817 +4818, UA4818 +4819, UA4819 +4820, UA4820 +4821, UA4821 +4822, UA4822 +4823, UA4823 +4824, UA4824 +4825, UA4825 +4826, UA4826 +4827, UA4827 +4828, UA4828 +4829, UA4829 +4830, UA4830 +4831, UA4831 +4832, UA4832 +4833, UA4833 +4834, UA4834 +4835, UA4835 +4836, UA4836 +4837, UA4837 +4838, UA4838 +4839, UA4839 +4840, UA4840 +4841, UA4841 +4842, UA4842 +4843, UA4843 +4844, UA4844 +4845, UA4845 +4846, UA4846 +4847, UA4847 +4848, UA4848 +4849, UA4849 +4850, UA4850 +4851, UA4851 +4852, UA4852 +4853, UA4853 +4854, UA4854 +4855, UA4855 +4856, UA4856 +4857, UA4857 +4858, UA4858 +4859, UA4859 +4860, UA4860 +4861, UA4861 +4862, UA4862 +4863, UA4863 +4864, UA4864 +4865, UA4865 +4866, UA4866 +4867, UA4867 +4868, UA4868 +4869, UA4869 +4870, UA4870 +4871, UA4871 +4872, UA4872 +4873, UA4873 +4874, UA4874 +4875, UA4875 +4876, UA4876 +4877, UA4877 +4878, UA4878 +4879, UA4879 +4880, UA4880 +4881, UA4881 +4882, UA4882 +4883, UA4883 +4884, UA4884 +4885, UA4885 +4886, UA4886 +4887, UA4887 +4888, UA4888 +4889, UA4889 +4890, UA4890 +4891, UA4891 +4892, UA4892 +4893, UA4893 +4894, UA4894 +4895, UA4895 +4896, UA4896 +4897, UA4897 +4898, UA4898 +4899, UA4899 +4900, UA4900 +4901, UA4901 +4902, UA4902 +4903, UA4903 +4904, UA4904 +4905, UA4905 +4906, UA4906 +4907, UA4907 +4908, UA4908 +4909, UA4909 +4910, UA4910 +4911, UA4911 +4912, UA4912 +4913, UA4913 +4914, UA4914 +4915, UA4915 +4916, UA4916 +4917, UA4917 +4918, UA4918 +4919, UA4919 +4920, UA4920 +4921, UA4921 +4922, UA4922 +4923, UA4923 +4924, UA4924 +4925, UA4925 +4926, UA4926 +4927, UA4927 +4928, UA4928 +4929, UA4929 +4930, UA4930 +4931, UA4931 +4932, UA4932 +4933, UA4933 +4934, UA4934 +4935, UA4935 +4936, UA4936 +4937, UA4937 +4938, UA4938 +4939, UA4939 +4940, UA4940 +4941, UA4941 +4942, UA4942 +4943, UA4943 +4944, UA4944 +4945, UA4945 +4946, UA4946 +4947, UA4947 +4948, UA4948 +4949, UA4949 +4950, UA4950 +4951, UA4951 +4952, UA4952 +4953, UA4953 +4954, UA4954 +4955, UA4955 +4956, UA4956 +4957, UA4957 +4958, UA4958 +4959, UA4959 +4960, UA4960 +4961, UA4961 +4962, UA4962 +4963, UA4963 +4964, UA4964 +4965, UA4965 +4966, UA4966 +4967, UA4967 +4968, UA4968 +4969, UA4969 +4970, UA4970 +4971, UA4971 +4972, UA4972 +4973, UA4973 +4974, UA4974 +4975, UA4975 +4976, UA4976 +4977, UA4977 +4978, UA4978 +4979, UA4979 +4980, UA4980 +4981, UA4981 +4982, UA4982 +4983, UA4983 +4984, UA4984 +4985, UA4985 +4986, UA4986 +4987, UA4987 +4988, UA4988 +4989, UA4989 +4990, UA4990 +4991, UA4991 +4992, UA4992 +4993, UA4993 +4994, UA4994 +4995, UA4995 +4996, UA4996 +4997, UA4997 +4998, UA4998 +4999, UA4999 +5000, UA5000 +5001, UA5001 +5002, UA5002 +5003, UA5003 +5004, UA5004 +5005, UA5005 +5006, UA5006 +5007, UA5007 +5008, UA5008 +5009, UA5009 +5010, UA5010 +5011, UA5011 +5012, UA5012 +5013, UA5013 +5014, UA5014 +5015, UA5015 +5016, UA5016 +5017, UA5017 +5018, UA5018 +5019, UA5019 +5020, UA5020 +5021, UA5021 +5022, UA5022 +5023, UA5023 +5024, UA5024 +5025, UA5025 +5026, UA5026 +5027, UA5027 +5028, UA5028 +5029, UA5029 +5030, UA5030 +5031, UA5031 +5032, UA5032 +5033, UA5033 +5034, UA5034 +5035, UA5035 +5036, UA5036 +5037, UA5037 +5038, UA5038 +5039, UA5039 +5040, UA5040 +5041, UA5041 +5042, UA5042 +5043, UA5043 +5044, UA5044 +5045, UA5045 +5046, UA5046 +5047, UA5047 +5048, UA5048 +5049, UA5049 +5050, UA5050 +5051, UA5051 +5052, UA5052 +5053, UA5053 +5054, UA5054 +5055, UA5055 +5056, UA5056 +5057, UA5057 +5058, UA5058 +5059, UA5059 +5060, UA5060 +5061, UA5061 +5062, UA5062 +5063, UA5063 +5064, UA5064 +5065, UA5065 +5066, UA5066 +5067, UA5067 +5068, UA5068 +5069, UA5069 +5070, UA5070 +5071, UA5071 +5072, UA5072 +5073, UA5073 +5074, UA5074 +5075, UA5075 +5076, UA5076 +5077, UA5077 +5078, UA5078 +5079, UA5079 +5080, UA5080 +5081, UA5081 +5082, UA5082 +5083, UA5083 +5084, UA5084 +5085, UA5085 +5086, UA5086 +5087, UA5087 +5088, UA5088 +5089, UA5089 +5090, UA5090 +5091, UA5091 +5092, UA5092 +5093, UA5093 +5094, UA5094 +5095, UA5095 +5096, UA5096 +5097, UA5097 +5098, UA5098 +5099, UA5099 +5100, UA5100 +5101, UA5101 +5102, UA5102 +5103, UA5103 +5104, UA5104 +5105, UA5105 +5106, UA5106 +5107, UA5107 +5108, UA5108 +5109, UA5109 +5110, UA5110 +5111, UA5111 +5112, UA5112 +5113, UA5113 +5114, UA5114 +5115, UA5115 +5116, UA5116 +5117, UA5117 +5118, UA5118 +5119, UA5119 +5120, UA5120 +5121, UA5121 +5122, UA5122 +5123, UA5123 +5124, UA5124 +5125, UA5125 +5126, UA5126 +5127, UA5127 +5128, UA5128 +5129, UA5129 +5130, UA5130 +5131, UA5131 +5132, UA5132 +5133, UA5133 +5134, UA5134 +5135, UA5135 +5136, UA5136 +5137, UA5137 +5138, UA5138 +5139, UA5139 +5140, UA5140 +5141, UA5141 +5142, UA5142 +5143, UA5143 +5144, UA5144 +5145, UA5145 +5146, UA5146 +5147, UA5147 +5148, UA5148 +5149, UA5149 +5150, UA5150 +5151, UA5151 +5152, UA5152 +5153, UA5153 +5154, UA5154 +5155, UA5155 +5156, UA5156 +5157, UA5157 +5158, UA5158 +5159, UA5159 +5160, UA5160 +5161, UA5161 +5162, UA5162 +5163, UA5163 +5164, UA5164 +5165, UA5165 +5166, UA5166 +5167, UA5167 +5168, UA5168 +5169, UA5169 +5170, UA5170 +5171, UA5171 +5172, UA5172 +5173, UA5173 +5174, UA5174 +5175, UA5175 +5176, UA5176 +5177, UA5177 +5178, UA5178 +5179, UA5179 +5180, UA5180 +5181, UA5181 +5182, UA5182 +5183, UA5183 +5184, UA5184 +5185, UA5185 +5186, UA5186 +5187, UA5187 +5188, UA5188 +5189, UA5189 +5190, UA5190 +5191, UA5191 +5192, UA5192 +5193, UA5193 +5194, UA5194 +5195, UA5195 +5196, UA5196 +5197, UA5197 +5198, UA5198 +5199, UA5199 +5200, UA5200 +5201, UA5201 +5202, UA5202 +5203, UA5203 +5204, UA5204 +5205, UA5205 +5206, UA5206 +5207, UA5207 +5208, UA5208 +5209, UA5209 +5210, UA5210 +5211, UA5211 +5212, UA5212 +5213, UA5213 +5214, UA5214 +5215, UA5215 +5216, UA5216 +5217, UA5217 +5218, UA5218 +5219, UA5219 +5220, UA5220 +5221, UA5221 +5222, UA5222 +5223, UA5223 +5224, UA5224 +5225, UA5225 +5226, UA5226 +5227, UA5227 +5228, UA5228 +5229, UA5229 +5230, UA5230 +5231, UA5231 +5232, UA5232 +5233, UA5233 +5234, UA5234 +5235, UA5235 +5236, UA5236 +5237, UA5237 +5238, UA5238 +5239, UA5239 +5240, UA5240 +5241, UA5241 +5242, UA5242 +5243, UA5243 +5244, UA5244 +5245, UA5245 +5246, UA5246 +5247, UA5247 +5248, UA5248 +5249, UA5249 +5250, UA5250 +5251, UA5251 +5252, UA5252 +5253, UA5253 +5254, UA5254 +5255, UA5255 +5256, UA5256 +5257, UA5257 +5258, UA5258 +5259, UA5259 +5260, UA5260 +5261, UA5261 +5262, UA5262 +5263, UA5263 +5264, UA5264 +5265, UA5265 +5266, UA5266 +5267, UA5267 +5268, UA5268 +5269, UA5269 +5270, UA5270 +5271, UA5271 +5272, UA5272 +5273, UA5273 +5274, UA5274 +5275, UA5275 +5276, UA5276 +5277, UA5277 +5278, UA5278 +5279, UA5279 +5280, UA5280 +5281, UA5281 +5282, UA5282 +5283, UA5283 +5284, UA5284 +5285, UA5285 +5286, UA5286 +5287, UA5287 +5288, UA5288 +5289, UA5289 +5290, UA5290 +5291, UA5291 +5292, UA5292 +5293, UA5293 +5294, UA5294 +5295, UA5295 +5296, UA5296 +5297, UA5297 +5298, UA5298 +5299, UA5299 +5300, UA5300 +5301, UA5301 +5302, UA5302 +5303, UA5303 +5304, UA5304 +5305, UA5305 +5306, UA5306 +5307, UA5307 +5308, UA5308 +5309, UA5309 +5310, UA5310 +5311, UA5311 +5312, UA5312 +5313, UA5313 +5314, UA5314 +5315, UA5315 +5316, UA5316 +5317, UA5317 +5318, UA5318 +5319, UA5319 +5320, UA5320 +5321, UA5321 +5322, UA5322 +5323, UA5323 +5324, UA5324 +5325, UA5325 +5326, UA5326 +5327, UA5327 +5328, UA5328 +5329, UA5329 +5330, UA5330 +5331, UA5331 +5332, UA5332 +5333, UA5333 +5334, UA5334 +5335, UA5335 +5336, UA5336 +5337, UA5337 +5338, UA5338 +5339, UA5339 +5340, UA5340 +5341, UA5341 +5342, UA5342 +5343, UA5343 +5344, UA5344 +5345, UA5345 +5346, UA5346 +5347, UA5347 +5348, UA5348 +5349, UA5349 +5350, UA5350 +5351, UA5351 +5352, UA5352 +5353, UA5353 +5354, UA5354 +5355, UA5355 +5356, UA5356 +5357, UA5357 +5358, UA5358 +5359, UA5359 +5360, UA5360 +5361, UA5361 +5362, UA5362 +5363, UA5363 +5364, UA5364 +5365, UA5365 +5366, UA5366 +5367, UA5367 +5368, UA5368 +5369, UA5369 +5370, UA5370 +5371, UA5371 +5372, UA5372 +5373, UA5373 +5374, UA5374 +5375, UA5375 +5376, UA5376 +5377, UA5377 +5378, UA5378 +5379, UA5379 +5380, UA5380 +5381, UA5381 +5382, UA5382 +5383, UA5383 +5384, UA5384 +5385, UA5385 +5386, UA5386 +5387, UA5387 +5388, UA5388 +5389, UA5389 +5390, UA5390 +5391, UA5391 +5392, UA5392 +5393, UA5393 +5394, UA5394 +5395, UA5395 +5396, UA5396 +5397, UA5397 +5398, UA5398 +5399, UA5399 +5400, UA5400 +5401, UA5401 +5402, UA5402 +5403, UA5403 +5404, UA5404 +5405, UA5405 +5406, UA5406 +5407, UA5407 +5408, UA5408 +5409, UA5409 +5410, UA5410 +5411, UA5411 +5412, UA5412 +5413, UA5413 +5414, UA5414 +5415, UA5415 +5416, UA5416 +5417, UA5417 +5418, UA5418 +5419, UA5419 +5420, UA5420 +5421, UA5421 +5422, UA5422 +5423, UA5423 +5424, UA5424 +5425, UA5425 +5426, UA5426 +5427, UA5427 +5428, UA5428 +5429, UA5429 +5430, UA5430 +5431, UA5431 +5432, UA5432 +5433, UA5433 +5434, UA5434 +5435, UA5435 +5436, UA5436 +5437, UA5437 +5438, UA5438 +5439, UA5439 +5440, UA5440 +5441, UA5441 +5442, UA5442 +5443, UA5443 +5444, UA5444 +5445, UA5445 +5446, UA5446 +5447, UA5447 +5448, UA5448 +5449, UA5449 +5450, UA5450 +5451, UA5451 +5452, UA5452 +5453, UA5453 +5454, UA5454 +5455, UA5455 +5456, UA5456 +5457, UA5457 +5458, UA5458 +5459, UA5459 +5460, UA5460 +5461, UA5461 +5462, UA5462 +5463, UA5463 +5464, UA5464 +5465, UA5465 +5466, UA5466 +5467, UA5467 +5468, UA5468 +5469, UA5469 +5470, UA5470 +5471, UA5471 +5472, UA5472 +5473, UA5473 +5474, UA5474 +5475, UA5475 +5476, UA5476 +5477, UA5477 +5478, UA5478 +5479, UA5479 +5480, UA5480 +5481, UA5481 +5482, UA5482 +5483, UA5483 +5484, UA5484 +5485, UA5485 +5486, UA5486 +5487, UA5487 +5488, UA5488 +5489, UA5489 +5490, UA5490 +5491, UA5491 +5492, UA5492 +5493, UA5493 +5494, UA5494 +5495, UA5495 +5496, UA5496 +5497, UA5497 +5498, UA5498 +5499, UA5499 +5500, UA5500 +5501, UA5501 +5502, UA5502 +5503, UA5503 +5504, UA5504 +5505, UA5505 +5506, UA5506 +5507, UA5507 +5508, UA5508 +5509, UA5509 +5510, UA5510 +5511, UA5511 +5512, UA5512 +5513, UA5513 +5514, UA5514 +5515, UA5515 +5516, UA5516 +5517, UA5517 +5518, UA5518 +5519, UA5519 +5520, UA5520 +5521, UA5521 +5522, UA5522 +5523, UA5523 +5524, UA5524 +5525, UA5525 +5526, UA5526 +5527, UA5527 +5528, UA5528 +5529, UA5529 +5530, UA5530 +5531, UA5531 +5532, UA5532 +5533, UA5533 +5534, UA5534 +5535, UA5535 +5536, UA5536 +5537, UA5537 +5538, UA5538 +5539, UA5539 +5540, UA5540 +5541, UA5541 +5542, UA5542 +5543, UA5543 +5544, UA5544 +5545, UA5545 +5546, UA5546 +5547, UA5547 +5548, UA5548 +5549, UA5549 +5550, UA5550 +5551, UA5551 +5552, UA5552 +5553, UA5553 +5554, UA5554 +5555, UA5555 +5556, UA5556 +5557, UA5557 +5558, UA5558 +5559, UA5559 +5560, UA5560 +5561, UA5561 +5562, UA5562 +5563, UA5563 +5564, UA5564 +5565, UA5565 +5566, UA5566 +5567, UA5567 +5568, UA5568 +5569, UA5569 +5570, UA5570 +5571, UA5571 +5572, UA5572 +5573, UA5573 +5574, UA5574 +5575, UA5575 +5576, UA5576 +5577, UA5577 +5578, UA5578 +5579, UA5579 +5580, UA5580 +5581, UA5581 +5582, UA5582 +5583, UA5583 +5584, UA5584 +5585, UA5585 +5586, UA5586 +5587, UA5587 +5588, UA5588 +5589, UA5589 +5590, UA5590 +5591, UA5591 +5592, UA5592 +5593, UA5593 +5594, UA5594 +5595, UA5595 +5596, UA5596 +5597, UA5597 +5598, UA5598 +5599, UA5599 +5600, UA5600 +5601, UA5601 +5602, UA5602 +5603, UA5603 +5604, UA5604 +5605, UA5605 +5606, UA5606 +5607, UA5607 +5608, UA5608 +5609, UA5609 +5610, UA5610 +5611, UA5611 +5612, UA5612 +5613, UA5613 +5614, UA5614 +5615, UA5615 +5616, UA5616 +5617, UA5617 +5618, UA5618 +5619, UA5619 +5620, UA5620 +5621, UA5621 +5622, UA5622 +5623, UA5623 +5624, UA5624 +5625, UA5625 +5626, UA5626 +5627, UA5627 +5628, UA5628 +5629, UA5629 +5630, UA5630 +5631, UA5631 +5632, UA5632 +5633, UA5633 +5634, UA5634 +5635, UA5635 +5636, UA5636 +5637, UA5637 +5638, UA5638 +5639, UA5639 +5640, UA5640 +5641, UA5641 +5642, UA5642 +5643, UA5643 +5644, UA5644 +5645, UA5645 +5646, UA5646 +5647, UA5647 +5648, UA5648 +5649, UA5649 +5650, UA5650 +5651, UA5651 +5652, UA5652 +5653, UA5653 +5654, UA5654 +5655, UA5655 +5656, UA5656 +5657, UA5657 +5658, UA5658 +5659, UA5659 +5660, UA5660 +5661, UA5661 +5662, UA5662 +5663, UA5663 +5664, UA5664 +5665, UA5665 +5666, UA5666 +5667, UA5667 +5668, UA5668 +5669, UA5669 +5670, UA5670 +5671, UA5671 +5672, UA5672 +5673, UA5673 +5674, UA5674 +5675, UA5675 +5676, UA5676 +5677, UA5677 +5678, UA5678 +5679, UA5679 +5680, UA5680 +5681, UA5681 +5682, UA5682 +5683, UA5683 +5684, UA5684 +5685, UA5685 +5686, UA5686 +5687, UA5687 +5688, UA5688 +5689, UA5689 +5690, UA5690 +5691, UA5691 +5692, UA5692 +5693, UA5693 +5694, UA5694 +5695, UA5695 +5696, UA5696 +5697, UA5697 +5698, UA5698 +5699, UA5699 +5700, UA5700 +5701, UA5701 +5702, UA5702 +5703, UA5703 +5704, UA5704 +5705, UA5705 +5706, UA5706 +5707, UA5707 +5708, UA5708 +5709, UA5709 +5710, UA5710 +5711, UA5711 +5712, UA5712 +5713, UA5713 +5714, UA5714 +5715, UA5715 +5716, UA5716 +5717, UA5717 +5718, UA5718 +5719, UA5719 +5720, UA5720 +5721, UA5721 +5722, UA5722 +5723, UA5723 +5724, UA5724 +5725, UA5725 +5726, UA5726 +5727, UA5727 +5728, UA5728 +5729, UA5729 +5730, UA5730 +5731, UA5731 +5732, UA5732 +5733, UA5733 +5734, UA5734 +5735, UA5735 +5736, UA5736 +5737, UA5737 +5738, UA5738 +5739, UA5739 +5740, UA5740 +5741, UA5741 +5742, UA5742 +5743, UA5743 +5744, UA5744 +5745, UA5745 +5746, UA5746 +5747, UA5747 +5748, UA5748 +5749, UA5749 +5750, UA5750 +5751, UA5751 +5752, UA5752 +5753, UA5753 +5754, UA5754 +5755, UA5755 +5756, UA5756 +5757, UA5757 +5758, UA5758 +5759, UA5759 +5760, UA5760 +5761, UA5761 +5762, UA5762 +5763, UA5763 +5764, UA5764 +5765, UA5765 +5766, UA5766 +5767, UA5767 +5768, UA5768 +5769, UA5769 +5770, UA5770 +5771, UA5771 +5772, UA5772 +5773, UA5773 +5774, UA5774 +5775, UA5775 +5776, UA5776 +5777, UA5777 +5778, UA5778 +5779, UA5779 +5780, UA5780 +5781, UA5781 +5782, UA5782 +5783, UA5783 +5784, UA5784 +5785, UA5785 +5786, UA5786 +5787, UA5787 +5788, UA5788 +5789, UA5789 +5790, UA5790 +5791, UA5791 +5792, UA5792 +5793, UA5793 +5794, UA5794 +5795, UA5795 +5796, UA5796 +5797, UA5797 +5798, UA5798 +5799, UA5799 +5800, UA5800 +5801, UA5801 +5802, UA5802 +5803, UA5803 +5804, UA5804 +5805, UA5805 +5806, UA5806 +5807, UA5807 +5808, UA5808 +5809, UA5809 +5810, UA5810 +5811, UA5811 +5812, UA5812 +5813, UA5813 +5814, UA5814 +5815, UA5815 +5816, UA5816 +5817, UA5817 +5818, UA5818 +5819, UA5819 +5820, UA5820 +5821, UA5821 +5822, UA5822 +5823, UA5823 +5824, UA5824 +5825, UA5825 +5826, UA5826 +5827, UA5827 +5828, UA5828 +5829, UA5829 +5830, UA5830 +5831, UA5831 +5832, UA5832 +5833, UA5833 +5834, UA5834 +5835, UA5835 +5836, UA5836 +5837, UA5837 +5838, UA5838 +5839, UA5839 +5840, UA5840 +5841, UA5841 +5842, UA5842 +5843, UA5843 +5844, UA5844 +5845, UA5845 +5846, UA5846 +5847, UA5847 +5848, UA5848 +5849, UA5849 +5850, UA5850 +5851, UA5851 +5852, UA5852 +5853, UA5853 +5854, UA5854 +5855, UA5855 +5856, UA5856 +5857, UA5857 +5858, UA5858 +5859, UA5859 +5860, UA5860 +5861, UA5861 +5862, UA5862 +5863, UA5863 +5864, UA5864 +5865, UA5865 +5866, UA5866 +5867, UA5867 +5868, UA5868 +5869, UA5869 +5870, UA5870 +5871, UA5871 +5872, UA5872 +5873, UA5873 +5874, UA5874 +5875, UA5875 +5876, UA5876 +5877, UA5877 +5878, UA5878 +5879, UA5879 +5880, UA5880 +5881, UA5881 +5882, UA5882 +5883, UA5883 +5884, UA5884 +5885, UA5885 +5886, UA5886 +5887, UA5887 +5888, UA5888 +5889, UA5889 +5890, UA5890 +5891, UA5891 +5892, UA5892 +5893, UA5893 +5894, UA5894 +5895, UA5895 +5896, UA5896 +5897, UA5897 +5898, UA5898 +5899, UA5899 +5900, UA5900 +5901, UA5901 +5902, UA5902 +5903, UA5903 +5904, UA5904 +5905, UA5905 +5906, UA5906 +5907, UA5907 +5908, UA5908 +5909, UA5909 +5910, UA5910 +5911, UA5911 +5912, UA5912 +5913, UA5913 +5914, UA5914 +5915, UA5915 +5916, UA5916 +5917, UA5917 +5918, UA5918 +5919, UA5919 +5920, UA5920 +5921, UA5921 +5922, UA5922 +5923, UA5923 +5924, UA5924 +5925, UA5925 +5926, UA5926 +5927, UA5927 +5928, UA5928 +5929, UA5929 +5930, UA5930 +5931, UA5931 +5932, UA5932 +5933, UA5933 +5934, UA5934 +5935, UA5935 +5936, UA5936 +5937, UA5937 +5938, UA5938 +5939, UA5939 +5940, UA5940 +5941, UA5941 +5942, UA5942 +5943, UA5943 +5944, UA5944 +5945, UA5945 +5946, UA5946 +5947, UA5947 +5948, UA5948 +5949, UA5949 +5950, UA5950 +5951, UA5951 +5952, UA5952 +5953, UA5953 +5954, UA5954 +5955, UA5955 +5956, UA5956 +5957, UA5957 +5958, UA5958 +5959, UA5959 +5960, UA5960 +5961, UA5961 +5962, UA5962 +5963, UA5963 +5964, UA5964 +5965, UA5965 +5966, UA5966 +5967, UA5967 +5968, UA5968 +5969, UA5969 +5970, UA5970 +5971, UA5971 +5972, UA5972 +5973, UA5973 +5974, UA5974 +5975, UA5975 +5976, UA5976 +5977, UA5977 +5978, UA5978 +5979, UA5979 +5980, UA5980 +5981, UA5981 +5982, UA5982 +5983, UA5983 +5984, UA5984 +5985, UA5985 +5986, UA5986 +5987, UA5987 +5988, UA5988 +5989, UA5989 +5990, UA5990 +5991, UA5991 +5992, UA5992 +5993, UA5993 +5994, UA5994 +5995, UA5995 +5996, UA5996 +5997, UA5997 +5998, UA5998 +5999, UA5999 +6000, UA6000 +6001, UA6001 +6002, UA6002 +6003, UA6003 +6004, UA6004 +6005, UA6005 +6006, UA6006 +6007, UA6007 +6008, UA6008 +6009, UA6009 +6010, UA6010 +6011, UA6011 +6012, UA6012 +6013, UA6013 +6014, UA6014 +6015, UA6015 +6016, UA6016 +6017, UA6017 +6018, UA6018 +6019, UA6019 +6020, UA6020 +6021, UA6021 +6022, UA6022 +6023, UA6023 +6024, UA6024 +6025, UA6025 +6026, UA6026 +6027, UA6027 +6028, UA6028 +6029, UA6029 +6030, UA6030 +6031, UA6031 +6032, UA6032 +6033, UA6033 +6034, UA6034 +6035, UA6035 +6036, UA6036 +6037, UA6037 +6038, UA6038 +6039, UA6039 +6040, UA6040 +6041, UA6041 +6042, UA6042 +6043, UA6043 +6044, UA6044 +6045, UA6045 +6046, UA6046 +6047, UA6047 +6048, UA6048 +6049, UA6049 +6050, UA6050 +6051, UA6051 +6052, UA6052 +6053, UA6053 +6054, UA6054 +6055, UA6055 +6056, UA6056 +6057, UA6057 +6058, UA6058 +6059, UA6059 +6060, UA6060 +6061, UA6061 +6062, UA6062 +6063, UA6063 +6064, UA6064 +6065, UA6065 +6066, UA6066 +6067, UA6067 +6068, UA6068 +6069, UA6069 +6070, UA6070 +6071, UA6071 +6072, UA6072 +6073, UA6073 +6074, UA6074 +6075, UA6075 +6076, UA6076 +6077, UA6077 +6078, UA6078 +6079, UA6079 +6080, UA6080 +6081, UA6081 +6082, UA6082 +6083, UA6083 +6084, UA6084 +6085, UA6085 +6086, UA6086 +6087, UA6087 +6088, UA6088 +6089, UA6089 +6090, UA6090 +6091, UA6091 +6092, UA6092 +6093, UA6093 +6094, UA6094 +6095, UA6095 +6096, UA6096 +6097, UA6097 +6098, UA6098 +6099, UA6099 +6100, UA6100 +6101, UA6101 +6102, UA6102 +6103, UA6103 +6104, UA6104 +6105, UA6105 +6106, UA6106 +6107, UA6107 +6108, UA6108 +6109, UA6109 +6110, UA6110 +6111, UA6111 +6112, UA6112 +6113, UA6113 +6114, UA6114 +6115, UA6115 +6116, UA6116 +6117, UA6117 +6118, UA6118 +6119, UA6119 +6120, UA6120 +6121, UA6121 +6122, UA6122 +6123, UA6123 +6124, UA6124 +6125, UA6125 +6126, UA6126 +6127, UA6127 +6128, UA6128 +6129, UA6129 +6130, UA6130 +6131, UA6131 +6132, UA6132 +6133, UA6133 +6134, UA6134 +6135, UA6135 +6136, UA6136 +6137, UA6137 +6138, UA6138 +6139, UA6139 +6140, UA6140 +6141, UA6141 +6142, UA6142 +6143, UA6143 +6144, UA6144 +6145, UA6145 +6146, UA6146 +6147, UA6147 +6148, UA6148 +6149, UA6149 +6150, UA6150 +6151, UA6151 +6152, UA6152 +6153, UA6153 +6154, UA6154 +6155, UA6155 +6156, UA6156 +6157, UA6157 +6158, UA6158 +6159, UA6159 +6160, UA6160 +6161, UA6161 +6162, UA6162 +6163, UA6163 +6164, UA6164 +6165, UA6165 +6166, UA6166 +6167, UA6167 +6168, UA6168 +6169, UA6169 +6170, UA6170 +6171, UA6171 +6172, UA6172 +6173, UA6173 +6174, UA6174 +6175, UA6175 +6176, UA6176 +6177, UA6177 +6178, UA6178 +6179, UA6179 +6180, UA6180 +6181, UA6181 +6182, UA6182 +6183, UA6183 +6184, UA6184 +6185, UA6185 +6186, UA6186 +6187, UA6187 +6188, UA6188 +6189, UA6189 +6190, UA6190 +6191, UA6191 +6192, UA6192 +6193, UA6193 +6194, UA6194 +6195, UA6195 +6196, UA6196 +6197, UA6197 +6198, UA6198 +6199, UA6199 +6200, UA6200 +6201, UA6201 +6202, UA6202 +6203, UA6203 +6204, UA6204 +6205, UA6205 +6206, UA6206 +6207, UA6207 +6208, UA6208 +6209, UA6209 +6210, UA6210 +6211, UA6211 +6212, UA6212 +6213, UA6213 +6214, UA6214 +6215, UA6215 +6216, UA6216 +6217, UA6217 +6218, UA6218 +6219, UA6219 +6220, UA6220 +6221, UA6221 +6222, UA6222 +6223, UA6223 +6224, UA6224 +6225, UA6225 +6226, UA6226 +6227, UA6227 +6228, UA6228 +6229, UA6229 +6230, UA6230 +6231, UA6231 +6232, UA6232 +6233, UA6233 +6234, UA6234 +6235, UA6235 +6236, UA6236 +6237, UA6237 +6238, UA6238 +6239, UA6239 +6240, UA6240 +6241, UA6241 +6242, UA6242 +6243, UA6243 +6244, UA6244 +6245, UA6245 +6246, UA6246 +6247, UA6247 +6248, UA6248 +6249, UA6249 +6250, UA6250 +6251, UA6251 +6252, UA6252 +6253, UA6253 +6254, UA6254 +6255, UA6255 +6256, UA6256 +6257, UA6257 +6258, UA6258 +6259, UA6259 +6260, UA6260 +6261, UA6261 +6262, UA6262 +6263, UA6263 +6264, UA6264 +6265, UA6265 +6266, UA6266 +6267, UA6267 +6268, UA6268 +6269, UA6269 +6270, UA6270 +6271, UA6271 +6272, UA6272 +6273, UA6273 +6274, UA6274 +6275, UA6275 +6276, UA6276 +6277, UA6277 +6278, UA6278 +6279, UA6279 +6280, UA6280 +6281, UA6281 +6282, UA6282 +6283, UA6283 +6284, UA6284 +6285, UA6285 +6286, UA6286 +6287, UA6287 +6288, UA6288 +6289, UA6289 +6290, UA6290 +6291, UA6291 +6292, UA6292 +6293, UA6293 +6294, UA6294 +6295, UA6295 +6296, UA6296 +6297, UA6297 +6298, UA6298 +6299, UA6299 +6300, UA6300 +6301, UA6301 +6302, UA6302 +6303, UA6303 +6304, UA6304 +6305, UA6305 +6306, UA6306 +6307, UA6307 +6308, UA6308 +6309, UA6309 +6310, UA6310 +6311, UA6311 +6312, UA6312 +6313, UA6313 +6314, UA6314 +6315, UA6315 +6316, UA6316 +6317, UA6317 +6318, UA6318 +6319, UA6319 +6320, UA6320 +6321, UA6321 +6322, UA6322 +6323, UA6323 +6324, UA6324 +6325, UA6325 +6326, UA6326 +6327, UA6327 +6328, UA6328 +6329, UA6329 +6330, UA6330 +6331, UA6331 +6332, UA6332 +6333, UA6333 +6334, UA6334 +6335, UA6335 +6336, UA6336 +6337, UA6337 +6338, UA6338 +6339, UA6339 +6340, UA6340 +6341, UA6341 +6342, UA6342 +6343, UA6343 +6344, UA6344 +6345, UA6345 +6346, UA6346 +6347, UA6347 +6348, UA6348 +6349, UA6349 +6350, UA6350 +6351, UA6351 +6352, UA6352 +6353, UA6353 +6354, UA6354 +6355, UA6355 +6356, UA6356 +6357, UA6357 +6358, UA6358 +6359, UA6359 +6360, UA6360 +6361, UA6361 +6362, UA6362 +6363, UA6363 +6364, UA6364 +6365, UA6365 +6366, UA6366 +6367, UA6367 +6368, UA6368 +6369, UA6369 +6370, UA6370 +6371, UA6371 +6372, UA6372 +6373, UA6373 +6374, UA6374 +6375, UA6375 +6376, UA6376 +6377, UA6377 +6378, UA6378 +6379, UA6379 +6380, UA6380 +6381, UA6381 +6382, UA6382 +6383, UA6383 +6384, UA6384 +6385, UA6385 +6386, UA6386 +6387, UA6387 +6388, UA6388 +6389, UA6389 +6390, UA6390 +6391, UA6391 +6392, UA6392 +6393, UA6393 +6394, UA6394 +6395, UA6395 +6396, UA6396 +6397, UA6397 +6398, UA6398 +6399, UA6399 +6400, UA6400 +6401, UA6401 +6402, UA6402 +6403, UA6403 +6404, UA6404 +6405, UA6405 +6406, UA6406 +6407, UA6407 +6408, UA6408 +6409, UA6409 +6410, UA6410 +6411, UA6411 +6412, UA6412 +6413, UA6413 +6414, UA6414 +6415, UA6415 +6416, UA6416 +6417, UA6417 +6418, UA6418 +6419, UA6419 +6420, UA6420 +6421, UA6421 +6422, UA6422 +6423, UA6423 +6424, UA6424 +6425, UA6425 +6426, UA6426 +6427, UA6427 +6428, UA6428 +6429, UA6429 +6430, UA6430 +6431, UA6431 +6432, UA6432 +6433, UA6433 +6434, UA6434 +6435, UA6435 +6436, UA6436 +6437, UA6437 +6438, UA6438 +6439, UA6439 +6440, UA6440 +6441, UA6441 +6442, UA6442 +6443, UA6443 +6444, UA6444 +6445, UA6445 +6446, UA6446 +6447, UA6447 +6448, UA6448 +6449, UA6449 +6450, UA6450 +6451, UA6451 +6452, UA6452 +6453, UA6453 +6454, UA6454 +6455, UA6455 +6456, UA6456 +6457, UA6457 +6458, UA6458 +6459, UA6459 +6460, UA6460 +6461, UA6461 +6462, UA6462 +6463, UA6463 +6464, UA6464 +6465, UA6465 +6466, UA6466 +6467, UA6467 +6468, UA6468 +6469, UA6469 +6470, UA6470 +6471, UA6471 +6472, UA6472 +6473, UA6473 +6474, UA6474 +6475, UA6475 +6476, UA6476 +6477, UA6477 +6478, UA6478 +6479, UA6479 +6480, UA6480 +6481, UA6481 +6482, UA6482 +6483, UA6483 +6484, UA6484 +6485, UA6485 +6486, UA6486 +6487, UA6487 +6488, UA6488 +6489, UA6489 +6490, UA6490 +6491, UA6491 +6492, UA6492 +6493, UA6493 +6494, UA6494 +6495, UA6495 +6496, UA6496 +6497, UA6497 +6498, UA6498 +6499, UA6499 +6500, UA6500 +6501, UA6501 +6502, UA6502 +6503, UA6503 +6504, UA6504 +6505, UA6505 +6506, UA6506 +6507, UA6507 +6508, UA6508 +6509, UA6509 +6510, UA6510 +6511, UA6511 +6512, UA6512 +6513, UA6513 +6514, UA6514 +6515, UA6515 +6516, UA6516 +6517, UA6517 +6518, UA6518 +6519, UA6519 +6520, UA6520 +6521, UA6521 +6522, UA6522 +6523, UA6523 +6524, UA6524 +6525, UA6525 +6526, UA6526 +6527, UA6527 +6528, UA6528 +6529, UA6529 +6530, UA6530 +6531, UA6531 +6532, UA6532 +6533, UA6533 +6534, UA6534 +6535, UA6535 +6536, UA6536 +6537, UA6537 +6538, UA6538 +6539, UA6539 +6540, UA6540 +6541, UA6541 +6542, UA6542 +6543, UA6543 +6544, UA6544 +6545, UA6545 +6546, UA6546 +6547, UA6547 +6548, UA6548 +6549, UA6549 +6550, UA6550 +6551, UA6551 +6552, UA6552 +6553, UA6553 +6554, UA6554 +6555, UA6555 +6556, UA6556 +6557, UA6557 +6558, UA6558 +6559, UA6559 +6560, UA6560 +6561, UA6561 +6562, UA6562 +6563, UA6563 +6564, UA6564 +6565, UA6565 +6566, UA6566 +6567, UA6567 +6568, UA6568 +6569, UA6569 +6570, UA6570 +6571, UA6571 +6572, UA6572 +6573, UA6573 +6574, UA6574 +6575, UA6575 +6576, UA6576 +6577, UA6577 +6578, UA6578 +6579, UA6579 +6580, UA6580 +6581, UA6581 +6582, UA6582 +6583, UA6583 +6584, UA6584 +6585, UA6585 +6586, UA6586 +6587, UA6587 +6588, UA6588 +6589, UA6589 +6590, UA6590 +6591, UA6591 +6592, UA6592 +6593, UA6593 +6594, UA6594 +6595, UA6595 +6596, UA6596 +6597, UA6597 +6598, UA6598 +6599, UA6599 +6600, UA6600 +6601, UA6601 +6602, UA6602 +6603, UA6603 +6604, UA6604 +6605, UA6605 +6606, UA6606 +6607, UA6607 +6608, UA6608 +6609, UA6609 +6610, UA6610 +6611, UA6611 +6612, UA6612 +6613, UA6613 +6614, UA6614 +6615, UA6615 +6616, UA6616 +6617, UA6617 +6618, UA6618 +6619, UA6619 +6620, UA6620 +6621, UA6621 +6622, UA6622 +6623, UA6623 +6624, UA6624 +6625, UA6625 +6626, UA6626 +6627, UA6627 +6628, UA6628 +6629, UA6629 +6630, UA6630 +6631, UA6631 +6632, UA6632 +6633, UA6633 +6634, UA6634 +6635, UA6635 +6636, UA6636 +6637, UA6637 +6638, UA6638 +6639, UA6639 +6640, UA6640 +6641, UA6641 +6642, UA6642 +6643, UA6643 +6644, UA6644 +6645, UA6645 +6646, UA6646 +6647, UA6647 +6648, UA6648 +6649, UA6649 +6650, UA6650 +6651, UA6651 +6652, UA6652 +6653, UA6653 +6654, UA6654 +6655, UA6655 +6656, UA6656 +6657, UA6657 +6658, UA6658 +6659, UA6659 +6660, UA6660 +6661, UA6661 +6662, UA6662 +6663, UA6663 +6664, UA6664 +6665, UA6665 +6666, UA6666 +6667, UA6667 +6668, UA6668 +6669, UA6669 +6670, UA6670 +6671, UA6671 +6672, UA6672 +6673, UA6673 +6674, UA6674 +6675, UA6675 +6676, UA6676 +6677, UA6677 +6678, UA6678 +6679, UA6679 +6680, UA6680 +6681, UA6681 +6682, UA6682 +6683, UA6683 +6684, UA6684 +6685, UA6685 +6686, UA6686 +6687, UA6687 +6688, UA6688 +6689, UA6689 +6690, UA6690 +6691, UA6691 +6692, UA6692 +6693, UA6693 +6694, UA6694 +6695, UA6695 +6696, UA6696 +6697, UA6697 +6698, UA6698 +6699, UA6699 +6700, UA6700 +6701, UA6701 +6702, UA6702 +6703, UA6703 +6704, UA6704 +6705, UA6705 +6706, UA6706 +6707, UA6707 +6708, UA6708 +6709, UA6709 +6710, UA6710 +6711, UA6711 +6712, UA6712 +6713, UA6713 +6714, UA6714 +6715, UA6715 +6716, UA6716 +6717, UA6717 +6718, UA6718 +6719, UA6719 +6720, UA6720 +6721, UA6721 +6722, UA6722 +6723, UA6723 +6724, UA6724 +6725, UA6725 +6726, UA6726 +6727, UA6727 +6728, UA6728 +6729, UA6729 +6730, UA6730 +6731, UA6731 +6732, UA6732 +6733, UA6733 +6734, UA6734 +6735, UA6735 +6736, UA6736 +6737, UA6737 +6738, UA6738 +6739, UA6739 +6740, UA6740 +6741, UA6741 +6742, UA6742 +6743, UA6743 +6744, UA6744 +6745, UA6745 +6746, UA6746 +6747, UA6747 +6748, UA6748 +6749, UA6749 +6750, UA6750 +6751, UA6751 +6752, UA6752 +6753, UA6753 +6754, UA6754 +6755, UA6755 +6756, UA6756 +6757, UA6757 +6758, UA6758 +6759, UA6759 +6760, UA6760 +6761, UA6761 +6762, UA6762 +6763, UA6763 +6764, UA6764 +6765, UA6765 +6766, UA6766 +6767, UA6767 +6768, UA6768 +6769, UA6769 +6770, UA6770 +6771, UA6771 +6772, UA6772 +6773, UA6773 +6774, UA6774 +6775, UA6775 +6776, UA6776 +6777, UA6777 +6778, UA6778 +6779, UA6779 +6780, UA6780 +6781, UA6781 +6782, UA6782 +6783, UA6783 +6784, UA6784 +6785, UA6785 +6786, UA6786 +6787, UA6787 +6788, UA6788 +6789, UA6789 +6790, UA6790 +6791, UA6791 +6792, UA6792 +6793, UA6793 +6794, UA6794 +6795, UA6795 +6796, UA6796 +6797, UA6797 +6798, UA6798 +6799, UA6799 +6800, UA6800 +6801, UA6801 +6802, UA6802 +6803, UA6803 +6804, UA6804 +6805, UA6805 +6806, UA6806 +6807, UA6807 +6808, UA6808 +6809, UA6809 +6810, UA6810 +6811, UA6811 +6812, UA6812 +6813, UA6813 +6814, UA6814 +6815, UA6815 +6816, UA6816 +6817, UA6817 +6818, UA6818 +6819, UA6819 +6820, UA6820 +6821, UA6821 +6822, UA6822 +6823, UA6823 +6824, UA6824 +6825, UA6825 +6826, UA6826 +6827, UA6827 +6828, UA6828 +6829, UA6829 +6830, UA6830 +6831, UA6831 +6832, UA6832 +6833, UA6833 +6834, UA6834 +6835, UA6835 +6836, UA6836 +6837, UA6837 +6838, UA6838 +6839, UA6839 +6840, UA6840 +6841, UA6841 +6842, UA6842 +6843, UA6843 +6844, UA6844 +6845, UA6845 +6846, UA6846 +6847, UA6847 +6848, UA6848 +6849, UA6849 +6850, UA6850 +6851, UA6851 +6852, UA6852 +6853, UA6853 +6854, UA6854 +6855, UA6855 +6856, UA6856 +6857, UA6857 +6858, UA6858 +6859, UA6859 +6860, UA6860 +6861, UA6861 +6862, UA6862 +6863, UA6863 +6864, UA6864 +6865, UA6865 +6866, UA6866 +6867, UA6867 +6868, UA6868 +6869, UA6869 +6870, UA6870 +6871, UA6871 +6872, UA6872 +6873, UA6873 +6874, UA6874 +6875, UA6875 +6876, UA6876 +6877, UA6877 +6878, UA6878 +6879, UA6879 +6880, UA6880 +6881, UA6881 +6882, UA6882 +6883, UA6883 +6884, UA6884 +6885, UA6885 +6886, UA6886 +6887, UA6887 +6888, UA6888 +6889, UA6889 +6890, UA6890 +6891, UA6891 +6892, UA6892 +6893, UA6893 +6894, UA6894 +6895, UA6895 +6896, UA6896 +6897, UA6897 +6898, UA6898 +6899, UA6899 +6900, UA6900 +6901, UA6901 +6902, UA6902 +6903, UA6903 +6904, UA6904 +6905, UA6905 +6906, UA6906 +6907, UA6907 +6908, UA6908 +6909, UA6909 +6910, UA6910 +6911, UA6911 +6912, UA6912 +6913, UA6913 +6914, UA6914 +6915, UA6915 +6916, UA6916 +6917, UA6917 +6918, UA6918 +6919, UA6919 +6920, UA6920 +6921, UA6921 +6922, UA6922 +6923, UA6923 +6924, UA6924 +6925, UA6925 +6926, UA6926 +6927, UA6927 +6928, UA6928 +6929, UA6929 +6930, UA6930 +6931, UA6931 +6932, UA6932 +6933, UA6933 +6934, UA6934 +6935, UA6935 +6936, UA6936 +6937, UA6937 +6938, UA6938 +6939, UA6939 +6940, UA6940 +6941, UA6941 +6942, UA6942 +6943, UA6943 +6944, UA6944 +6945, UA6945 +6946, UA6946 +6947, UA6947 +6948, UA6948 +6949, UA6949 +6950, UA6950 +6951, UA6951 +6952, UA6952 +6953, UA6953 +6954, UA6954 +6955, UA6955 +6956, UA6956 +6957, UA6957 +6958, UA6958 +6959, UA6959 +6960, UA6960 +6961, UA6961 +6962, UA6962 +6963, UA6963 +6964, UA6964 +6965, UA6965 +6966, UA6966 +6967, UA6967 +6968, UA6968 +6969, UA6969 +6970, UA6970 +6971, UA6971 +6972, UA6972 +6973, UA6973 +6974, UA6974 +6975, UA6975 +6976, UA6976 +6977, UA6977 +6978, UA6978 +6979, UA6979 +6980, UA6980 +6981, UA6981 +6982, UA6982 +6983, UA6983 +6984, UA6984 +6985, UA6985 +6986, UA6986 +6987, UA6987 +6988, UA6988 +6989, UA6989 +6990, UA6990 +6991, UA6991 +6992, UA6992 +6993, UA6993 +6994, UA6994 +6995, UA6995 +6996, UA6996 +6997, UA6997 +6998, UA6998 +6999, UA6999 +7000, UA7000 +7001, UA7001 +7002, UA7002 +7003, UA7003 +7004, UA7004 +7005, UA7005 +7006, UA7006 +7007, UA7007 +7008, UA7008 +7009, UA7009 +7010, UA7010 +7011, UA7011 +7012, UA7012 +7013, UA7013 +7014, UA7014 +7015, UA7015 +7016, UA7016 +7017, UA7017 +7018, UA7018 +7019, UA7019 +7020, UA7020 +7021, UA7021 +7022, UA7022 +7023, UA7023 +7024, UA7024 +7025, UA7025 +7026, UA7026 +7027, UA7027 +7028, UA7028 +7029, UA7029 +7030, UA7030 +7031, UA7031 +7032, UA7032 +7033, UA7033 +7034, UA7034 +7035, UA7035 +7036, UA7036 +7037, UA7037 +7038, UA7038 +7039, UA7039 +7040, UA7040 +7041, UA7041 +7042, UA7042 +7043, UA7043 +7044, UA7044 +7045, UA7045 +7046, UA7046 +7047, UA7047 +7048, UA7048 +7049, UA7049 +7050, UA7050 +7051, UA7051 +7052, UA7052 +7053, UA7053 +7054, UA7054 +7055, UA7055 +7056, UA7056 +7057, UA7057 +7058, UA7058 +7059, UA7059 +7060, UA7060 +7061, UA7061 +7062, UA7062 +7063, UA7063 +7064, UA7064 +7065, UA7065 +7066, UA7066 +7067, UA7067 +7068, UA7068 +7069, UA7069 +7070, UA7070 +7071, UA7071 +7072, UA7072 +7073, UA7073 +7074, UA7074 +7075, UA7075 +7076, UA7076 +7077, UA7077 +7078, UA7078 +7079, UA7079 +7080, UA7080 +7081, UA7081 +7082, UA7082 +7083, UA7083 +7084, UA7084 +7085, UA7085 +7086, UA7086 +7087, UA7087 +7088, UA7088 +7089, UA7089 +7090, UA7090 +7091, UA7091 +7092, UA7092 +7093, UA7093 +7094, UA7094 +7095, UA7095 +7096, UA7096 +7097, UA7097 +7098, UA7098 +7099, UA7099 +7100, UA7100 +7101, UA7101 +7102, UA7102 +7103, UA7103 +7104, UA7104 +7105, UA7105 +7106, UA7106 +7107, UA7107 +7108, UA7108 +7109, UA7109 +7110, UA7110 +7111, UA7111 +7112, UA7112 +7113, UA7113 +7114, UA7114 +7115, UA7115 +7116, UA7116 +7117, UA7117 +7118, UA7118 +7119, UA7119 +7120, UA7120 +7121, UA7121 +7122, UA7122 +7123, UA7123 +7124, UA7124 +7125, UA7125 +7126, UA7126 +7127, UA7127 +7128, UA7128 +7129, UA7129 +7130, UA7130 +7131, UA7131 +7132, UA7132 +7133, UA7133 +7134, UA7134 +7135, UA7135 +7136, UA7136 +7137, UA7137 +7138, UA7138 +7139, UA7139 +7140, UA7140 +7141, UA7141 +7142, UA7142 +7143, UA7143 +7144, UA7144 +7145, UA7145 +7146, UA7146 +7147, UA7147 +7148, UA7148 +7149, UA7149 +7150, UA7150 +7151, UA7151 +7152, UA7152 +7153, UA7153 +7154, UA7154 +7155, UA7155 +7156, UA7156 +7157, UA7157 +7158, UA7158 +7159, UA7159 +7160, UA7160 +7161, UA7161 +7162, UA7162 +7163, UA7163 +7164, UA7164 +7165, UA7165 +7166, UA7166 +7167, UA7167 +7168, UA7168 +7169, UA7169 +7170, UA7170 +7171, UA7171 +7172, UA7172 +7173, UA7173 +7174, UA7174 +7175, UA7175 +7176, UA7176 +7177, UA7177 +7178, UA7178 +7179, UA7179 +7180, UA7180 +7181, UA7181 +7182, UA7182 +7183, UA7183 +7184, UA7184 +7185, UA7185 +7186, UA7186 +7187, UA7187 +7188, UA7188 +7189, UA7189 +7190, UA7190 +7191, UA7191 +7192, UA7192 +7193, UA7193 +7194, UA7194 +7195, UA7195 +7196, UA7196 +7197, UA7197 +7198, UA7198 +7199, UA7199 +7200, UA7200 +7201, UA7201 +7202, UA7202 +7203, UA7203 +7204, UA7204 +7205, UA7205 +7206, UA7206 +7207, UA7207 +7208, UA7208 +7209, UA7209 +7210, UA7210 +7211, UA7211 +7212, UA7212 +7213, UA7213 +7214, UA7214 +7215, UA7215 +7216, UA7216 +7217, UA7217 +7218, UA7218 +7219, UA7219 +7220, UA7220 +7221, UA7221 +7222, UA7222 +7223, UA7223 +7224, UA7224 +7225, UA7225 +7226, UA7226 +7227, UA7227 +7228, UA7228 +7229, UA7229 +7230, UA7230 +7231, UA7231 +7232, UA7232 +7233, UA7233 +7234, UA7234 +7235, UA7235 +7236, UA7236 +7237, UA7237 +7238, UA7238 +7239, UA7239 +7240, UA7240 +7241, UA7241 +7242, UA7242 +7243, UA7243 +7244, UA7244 +7245, UA7245 +7246, UA7246 +7247, UA7247 +7248, UA7248 +7249, UA7249 +7250, UA7250 +7251, UA7251 +7252, UA7252 +7253, UA7253 +7254, UA7254 +7255, UA7255 +7256, UA7256 +7257, UA7257 +7258, UA7258 +7259, UA7259 +7260, UA7260 +7261, UA7261 +7262, UA7262 +7263, UA7263 +7264, UA7264 +7265, UA7265 +7266, UA7266 +7267, UA7267 +7268, UA7268 +7269, UA7269 +7270, UA7270 +7271, UA7271 +7272, UA7272 +7273, UA7273 +7274, UA7274 +7275, UA7275 +7276, UA7276 +7277, UA7277 +7278, UA7278 +7279, UA7279 +7280, UA7280 +7281, UA7281 +7282, UA7282 +7283, UA7283 +7284, UA7284 +7285, UA7285 +7286, UA7286 +7287, UA7287 +7288, UA7288 +7289, UA7289 +7290, UA7290 +7291, UA7291 +7292, UA7292 +7293, UA7293 +7294, UA7294 +7295, UA7295 +7296, UA7296 +7297, UA7297 +7298, UA7298 +7299, UA7299 +7300, UA7300 +7301, UA7301 +7302, UA7302 +7303, UA7303 +7304, UA7304 +7305, UA7305 +7306, UA7306 +7307, UA7307 +7308, UA7308 +7309, UA7309 +7310, UA7310 +7311, UA7311 +7312, UA7312 +7313, UA7313 +7314, UA7314 +7315, UA7315 +7316, UA7316 +7317, UA7317 +7318, UA7318 +7319, UA7319 +7320, UA7320 +7321, UA7321 +7322, UA7322 +7323, UA7323 +7324, UA7324 +7325, UA7325 +7326, UA7326 +7327, UA7327 +7328, UA7328 +7329, UA7329 +7330, UA7330 +7331, UA7331 +7332, UA7332 +7333, UA7333 +7334, UA7334 +7335, UA7335 +7336, UA7336 +7337, UA7337 +7338, UA7338 +7339, UA7339 +7340, UA7340 +7341, UA7341 +7342, UA7342 +7343, UA7343 +7344, UA7344 +7345, UA7345 +7346, UA7346 +7347, UA7347 +7348, UA7348 +7349, UA7349 +7350, UA7350 +7351, UA7351 +7352, UA7352 +7353, UA7353 +7354, UA7354 +7355, UA7355 +7356, UA7356 +7357, UA7357 +7358, UA7358 +7359, UA7359 +7360, UA7360 +7361, UA7361 +7362, UA7362 +7363, UA7363 +7364, UA7364 +7365, UA7365 +7366, UA7366 +7367, UA7367 +7368, UA7368 +7369, UA7369 +7370, UA7370 +7371, UA7371 +7372, UA7372 +7373, UA7373 +7374, UA7374 +7375, UA7375 +7376, UA7376 +7377, UA7377 +7378, UA7378 +7379, UA7379 +7380, UA7380 +7381, UA7381 +7382, UA7382 +7383, UA7383 +7384, UA7384 +7385, UA7385 +7386, UA7386 +7387, UA7387 +7388, UA7388 +7389, UA7389 +7390, UA7390 +7391, UA7391 +7392, UA7392 +7393, UA7393 +7394, UA7394 +7395, UA7395 +7396, UA7396 +7397, UA7397 +7398, UA7398 +7399, UA7399 +7400, UA7400 +7401, UA7401 +7402, UA7402 +7403, UA7403 +7404, UA7404 +7405, UA7405 +7406, UA7406 +7407, UA7407 +7408, UA7408 +7409, UA7409 +7410, UA7410 +7411, UA7411 +7412, UA7412 +7413, UA7413 +7414, UA7414 +7415, UA7415 +7416, UA7416 +7417, UA7417 +7418, UA7418 +7419, UA7419 +7420, UA7420 +7421, UA7421 +7422, UA7422 +7423, UA7423 +7424, UA7424 +7425, UA7425 +7426, UA7426 +7427, UA7427 +7428, UA7428 +7429, UA7429 +7430, UA7430 +7431, UA7431 +7432, UA7432 +7433, UA7433 +7434, UA7434 +7435, UA7435 +7436, UA7436 +7437, UA7437 +7438, UA7438 +7439, UA7439 +7440, UA7440 +7441, UA7441 +7442, UA7442 +7443, UA7443 +7444, UA7444 +7445, UA7445 +7446, UA7446 +7447, UA7447 +7448, UA7448 +7449, UA7449 +7450, UA7450 +7451, UA7451 +7452, UA7452 +7453, UA7453 +7454, UA7454 +7455, UA7455 +7456, UA7456 +7457, UA7457 +7458, UA7458 +7459, UA7459 +7460, UA7460 +7461, UA7461 +7462, UA7462 +7463, UA7463 +7464, UA7464 +7465, UA7465 +7466, UA7466 +7467, UA7467 +7468, UA7468 +7469, UA7469 +7470, UA7470 +7471, UA7471 +7472, UA7472 +7473, UA7473 +7474, UA7474 +7475, UA7475 +7476, UA7476 +7477, UA7477 +7478, UA7478 +7479, UA7479 +7480, UA7480 +7481, UA7481 +7482, UA7482 +7483, UA7483 +7484, UA7484 +7485, UA7485 +7486, UA7486 +7487, UA7487 +7488, UA7488 +7489, UA7489 +7490, UA7490 +7491, UA7491 +7492, UA7492 +7493, UA7493 +7494, UA7494 +7495, UA7495 +7496, UA7496 +7497, UA7497 +7498, UA7498 +7499, UA7499 +7500, UA7500 +7501, UA7501 +7502, UA7502 +7503, UA7503 +7504, UA7504 +7505, UA7505 +7506, UA7506 +7507, UA7507 +7508, UA7508 +7509, UA7509 +7510, UA7510 +7511, UA7511 +7512, UA7512 +7513, UA7513 +7514, UA7514 +7515, UA7515 +7516, UA7516 +7517, UA7517 +7518, UA7518 +7519, UA7519 +7520, UA7520 +7521, UA7521 +7522, UA7522 +7523, UA7523 +7524, UA7524 +7525, UA7525 +7526, UA7526 +7527, UA7527 +7528, UA7528 +7529, UA7529 +7530, UA7530 +7531, UA7531 +7532, UA7532 +7533, UA7533 +7534, UA7534 +7535, UA7535 +7536, UA7536 +7537, UA7537 +7538, UA7538 +7539, UA7539 +7540, UA7540 +7541, UA7541 +7542, UA7542 +7543, UA7543 +7544, UA7544 +7545, UA7545 +7546, UA7546 +7547, UA7547 +7548, UA7548 +7549, UA7549 +7550, UA7550 +7551, UA7551 +7552, UA7552 +7553, UA7553 +7554, UA7554 +7555, UA7555 +7556, UA7556 +7557, UA7557 +7558, UA7558 +7559, UA7559 +7560, UA7560 +7561, UA7561 +7562, UA7562 +7563, UA7563 +7564, UA7564 +7565, UA7565 +7566, UA7566 +7567, UA7567 +7568, UA7568 +7569, UA7569 +7570, UA7570 +7571, UA7571 +7572, UA7572 +7573, UA7573 +7574, UA7574 +7575, UA7575 +7576, UA7576 +7577, UA7577 +7578, UA7578 +7579, UA7579 +7580, UA7580 +7581, UA7581 +7582, UA7582 +7583, UA7583 +7584, UA7584 +7585, UA7585 +7586, UA7586 +7587, UA7587 +7588, UA7588 +7589, UA7589 +7590, UA7590 +7591, UA7591 +7592, UA7592 +7593, UA7593 +7594, UA7594 +7595, UA7595 +7596, UA7596 +7597, UA7597 +7598, UA7598 +7599, UA7599 +7600, UA7600 +7601, UA7601 +7602, UA7602 +7603, UA7603 +7604, UA7604 +7605, UA7605 +7606, UA7606 +7607, UA7607 +7608, UA7608 +7609, UA7609 +7610, UA7610 +7611, UA7611 +7612, UA7612 +7613, UA7613 +7614, UA7614 +7615, UA7615 +7616, UA7616 +7617, UA7617 +7618, UA7618 +7619, UA7619 +7620, UA7620 +7621, UA7621 +7622, UA7622 +7623, UA7623 +7624, UA7624 +7625, UA7625 +7626, UA7626 +7627, UA7627 +7628, UA7628 +7629, UA7629 +7630, UA7630 +7631, UA7631 +7632, UA7632 +7633, UA7633 +7634, UA7634 +7635, UA7635 +7636, UA7636 +7637, UA7637 +7638, UA7638 +7639, UA7639 +7640, UA7640 +7641, UA7641 +7642, UA7642 +7643, UA7643 +7644, UA7644 +7645, UA7645 +7646, UA7646 +7647, UA7647 +7648, UA7648 +7649, UA7649 +7650, UA7650 +7651, UA7651 +7652, UA7652 +7653, UA7653 +7654, UA7654 +7655, UA7655 +7656, UA7656 +7657, UA7657 +7658, UA7658 +7659, UA7659 +7660, UA7660 +7661, UA7661 +7662, UA7662 +7663, UA7663 +7664, UA7664 +7665, UA7665 +7666, UA7666 +7667, UA7667 +7668, UA7668 +7669, UA7669 +7670, UA7670 +7671, UA7671 +7672, UA7672 +7673, UA7673 +7674, UA7674 +7675, UA7675 +7676, UA7676 +7677, UA7677 +7678, UA7678 +7679, UA7679 +7680, UA7680 +7681, UA7681 +7682, UA7682 +7683, UA7683 +7684, UA7684 +7685, UA7685 +7686, UA7686 +7687, UA7687 +7688, UA7688 +7689, UA7689 +7690, UA7690 +7691, UA7691 +7692, UA7692 +7693, UA7693 +7694, UA7694 +7695, UA7695 +7696, UA7696 +7697, UA7697 +7698, UA7698 +7699, UA7699 +7700, UA7700 +7701, UA7701 +7702, UA7702 +7703, UA7703 +7704, UA7704 +7705, UA7705 +7706, UA7706 +7707, UA7707 +7708, UA7708 +7709, UA7709 +7710, UA7710 +7711, UA7711 +7712, UA7712 +7713, UA7713 +7714, UA7714 +7715, UA7715 +7716, UA7716 +7717, UA7717 +7718, UA7718 +7719, UA7719 +7720, UA7720 +7721, UA7721 +7722, UA7722 +7723, UA7723 +7724, UA7724 +7725, UA7725 +7726, UA7726 +7727, UA7727 +7728, UA7728 +7729, UA7729 +7730, UA7730 +7731, UA7731 +7732, UA7732 +7733, UA7733 +7734, UA7734 +7735, UA7735 +7736, UA7736 +7737, UA7737 +7738, UA7738 +7739, UA7739 +7740, UA7740 +7741, UA7741 +7742, UA7742 +7743, UA7743 +7744, UA7744 +7745, UA7745 +7746, UA7746 +7747, UA7747 +7748, UA7748 +7749, UA7749 +7750, UA7750 +7751, UA7751 +7752, UA7752 +7753, UA7753 +7754, UA7754 +7755, UA7755 +7756, UA7756 +7757, UA7757 +7758, UA7758 +7759, UA7759 +7760, UA7760 +7761, UA7761 +7762, UA7762 +7763, UA7763 +7764, UA7764 +7765, UA7765 +7766, UA7766 +7767, UA7767 +7768, UA7768 +7769, UA7769 +7770, UA7770 +7771, UA7771 +7772, UA7772 +7773, UA7773 +7774, UA7774 +7775, UA7775 +7776, UA7776 +7777, UA7777 +7778, UA7778 +7779, UA7779 +7780, UA7780 +7781, UA7781 +7782, UA7782 +7783, UA7783 +7784, UA7784 +7785, UA7785 +7786, UA7786 +7787, UA7787 +7788, UA7788 +7789, UA7789 +7790, UA7790 +7791, UA7791 +7792, UA7792 +7793, UA7793 +7794, UA7794 +7795, UA7795 +7796, UA7796 +7797, UA7797 +7798, UA7798 +7799, UA7799 +7800, UA7800 +7801, UA7801 +7802, UA7802 +7803, UA7803 +7804, UA7804 +7805, UA7805 +7806, UA7806 +7807, UA7807 +7808, UA7808 +7809, UA7809 +7810, UA7810 +7811, UA7811 +7812, UA7812 +7813, UA7813 +7814, UA7814 +7815, UA7815 +7816, UA7816 +7817, UA7817 +7818, UA7818 +7819, UA7819 +7820, UA7820 +7821, UA7821 +7822, UA7822 +7823, UA7823 +7824, UA7824 +7825, UA7825 +7826, UA7826 +7827, UA7827 +7828, UA7828 +7829, UA7829 +7830, UA7830 +7831, UA7831 +7832, UA7832 +7833, UA7833 +7834, UA7834 +7835, UA7835 +7836, UA7836 +7837, UA7837 +7838, UA7838 +7839, UA7839 +7840, UA7840 +7841, UA7841 +7842, UA7842 +7843, UA7843 +7844, UA7844 +7845, UA7845 +7846, UA7846 +7847, UA7847 +7848, UA7848 +7849, UA7849 +7850, UA7850 +7851, UA7851 +7852, UA7852 +7853, UA7853 +7854, UA7854 +7855, UA7855 +7856, UA7856 +7857, UA7857 +7858, UA7858 +7859, UA7859 +7860, UA7860 +7861, UA7861 +7862, UA7862 +7863, UA7863 +7864, UA7864 +7865, UA7865 +7866, UA7866 +7867, UA7867 +7868, UA7868 +7869, UA7869 +7870, UA7870 +7871, UA7871 +7872, UA7872 +7873, UA7873 +7874, UA7874 +7875, UA7875 +7876, UA7876 +7877, UA7877 +7878, UA7878 +7879, UA7879 +7880, UA7880 +7881, UA7881 +7882, UA7882 +7883, UA7883 +7884, UA7884 +7885, UA7885 +7886, UA7886 +7887, UA7887 +7888, UA7888 +7889, UA7889 +7890, UA7890 +7891, UA7891 +7892, UA7892 +7893, UA7893 +7894, UA7894 +7895, UA7895 +7896, UA7896 +7897, UA7897 +7898, UA7898 +7899, UA7899 +7900, UA7900 +7901, UA7901 +7902, UA7902 +7903, UA7903 +7904, UA7904 +7905, UA7905 +7906, UA7906 +7907, UA7907 +7908, UA7908 +7909, UA7909 +7910, UA7910 +7911, UA7911 +7912, UA7912 +7913, UA7913 +7914, UA7914 +7915, UA7915 +7916, UA7916 +7917, UA7917 +7918, UA7918 +7919, UA7919 +7920, UA7920 +7921, UA7921 +7922, UA7922 +7923, UA7923 +7924, UA7924 +7925, UA7925 +7926, UA7926 +7927, UA7927 +7928, UA7928 +7929, UA7929 +7930, UA7930 +7931, UA7931 +7932, UA7932 +7933, UA7933 +7934, UA7934 +7935, UA7935 +7936, UA7936 +7937, UA7937 +7938, UA7938 +7939, UA7939 +7940, UA7940 +7941, UA7941 +7942, UA7942 +7943, UA7943 +7944, UA7944 +7945, UA7945 +7946, UA7946 +7947, UA7947 +7948, UA7948 +7949, UA7949 +7950, UA7950 +7951, UA7951 +7952, UA7952 +7953, UA7953 +7954, UA7954 +7955, UA7955 +7956, UA7956 +7957, UA7957 +7958, UA7958 +7959, UA7959 +7960, UA7960 +7961, UA7961 +7962, UA7962 +7963, UA7963 +7964, UA7964 +7965, UA7965 +7966, UA7966 +7967, UA7967 +7968, UA7968 +7969, UA7969 +7970, UA7970 +7971, UA7971 +7972, UA7972 +7973, UA7973 +7974, UA7974 +7975, UA7975 +7976, UA7976 +7977, UA7977 +7978, UA7978 +7979, UA7979 +7980, UA7980 +7981, UA7981 +7982, UA7982 +7983, UA7983 +7984, UA7984 +7985, UA7985 +7986, UA7986 +7987, UA7987 +7988, UA7988 +7989, UA7989 +7990, UA7990 +7991, UA7991 +7992, UA7992 +7993, UA7993 +7994, UA7994 +7995, UA7995 +7996, UA7996 +7997, UA7997 +7998, UA7998 +7999, UA7999 +8000, UA8000 +8001, UA8001 +8002, UA8002 +8003, UA8003 +8004, UA8004 +8005, UA8005 +8006, UA8006 +8007, UA8007 +8008, UA8008 +8009, UA8009 +8010, UA8010 +8011, UA8011 +8012, UA8012 +8013, UA8013 +8014, UA8014 +8015, UA8015 +8016, UA8016 +8017, UA8017 +8018, UA8018 +8019, UA8019 +8020, UA8020 +8021, UA8021 +8022, UA8022 +8023, UA8023 +8024, UA8024 +8025, UA8025 +8026, UA8026 +8027, UA8027 +8028, UA8028 +8029, UA8029 +8030, UA8030 +8031, UA8031 +8032, UA8032 +8033, UA8033 +8034, UA8034 +8035, UA8035 +8036, UA8036 +8037, UA8037 +8038, UA8038 +8039, UA8039 +8040, UA8040 +8041, UA8041 +8042, UA8042 +8043, UA8043 +8044, UA8044 +8045, UA8045 +8046, UA8046 +8047, UA8047 +8048, UA8048 +8049, UA8049 +8050, UA8050 +8051, UA8051 +8052, UA8052 +8053, UA8053 +8054, UA8054 +8055, UA8055 +8056, UA8056 +8057, UA8057 +8058, UA8058 +8059, UA8059 +8060, UA8060 +8061, UA8061 +8062, UA8062 +8063, UA8063 +8064, UA8064 +8065, UA8065 +8066, UA8066 +8067, UA8067 +8068, UA8068 +8069, UA8069 +8070, UA8070 +8071, UA8071 +8072, UA8072 +8073, UA8073 +8074, UA8074 +8075, UA8075 +8076, UA8076 +8077, UA8077 +8078, UA8078 +8079, UA8079 +8080, UA8080 +8081, UA8081 +8082, UA8082 +8083, UA8083 +8084, UA8084 +8085, UA8085 +8086, UA8086 +8087, UA8087 +8088, UA8088 +8089, UA8089 +8090, UA8090 +8091, UA8091 +8092, UA8092 +8093, UA8093 +8094, UA8094 +8095, UA8095 +8096, UA8096 +8097, UA8097 +8098, UA8098 +8099, UA8099 +8100, UA8100 +8101, UA8101 +8102, UA8102 +8103, UA8103 +8104, UA8104 +8105, UA8105 +8106, UA8106 +8107, UA8107 +8108, UA8108 +8109, UA8109 +8110, UA8110 +8111, UA8111 +8112, UA8112 +8113, UA8113 +8114, UA8114 +8115, UA8115 +8116, UA8116 +8117, UA8117 +8118, UA8118 +8119, UA8119 +8120, UA8120 +8121, UA8121 +8122, UA8122 +8123, UA8123 +8124, UA8124 +8125, UA8125 +8126, UA8126 +8127, UA8127 +8128, UA8128 +8129, UA8129 +8130, UA8130 +8131, UA8131 +8132, UA8132 +8133, UA8133 +8134, UA8134 +8135, UA8135 +8136, UA8136 +8137, UA8137 +8138, UA8138 +8139, UA8139 +8140, UA8140 +8141, UA8141 +8142, UA8142 +8143, UA8143 +8144, UA8144 +8145, UA8145 +8146, UA8146 +8147, UA8147 +8148, UA8148 +8149, UA8149 +8150, UA8150 +8151, UA8151 +8152, UA8152 +8153, UA8153 +8154, UA8154 +8155, UA8155 +8156, UA8156 +8157, UA8157 +8158, UA8158 +8159, UA8159 +8160, UA8160 +8161, UA8161 +8162, UA8162 +8163, UA8163 +8164, UA8164 +8165, UA8165 +8166, UA8166 +8167, UA8167 +8168, UA8168 +8169, UA8169 +8170, UA8170 +8171, UA8171 +8172, UA8172 +8173, UA8173 +8174, UA8174 +8175, UA8175 +8176, UA8176 +8177, UA8177 +8178, UA8178 +8179, UA8179 +8180, UA8180 +8181, UA8181 +8182, UA8182 +8183, UA8183 +8184, UA8184 +8185, UA8185 +8186, UA8186 +8187, UA8187 +8188, UA8188 +8189, UA8189 +8190, UA8190 +8191, UA8191 +8192, UA8192 +8193, UA8193 +8194, UA8194 +8195, UA8195 +8196, UA8196 +8197, UA8197 +8198, UA8198 +8199, UA8199 +8200, UA8200 +8201, UA8201 +8202, UA8202 +8203, UA8203 +8204, UA8204 +8205, UA8205 +8206, UA8206 +8207, UA8207 +8208, UA8208 +8209, UA8209 +8210, UA8210 +8211, UA8211 +8212, UA8212 +8213, UA8213 +8214, UA8214 +8215, UA8215 +8216, UA8216 +8217, UA8217 +8218, UA8218 +8219, UA8219 +8220, UA8220 +8221, UA8221 +8222, UA8222 +8223, UA8223 +8224, UA8224 +8225, UA8225 +8226, UA8226 +8227, UA8227 +8228, UA8228 +8229, UA8229 +8230, UA8230 +8231, UA8231 +8232, UA8232 +8233, UA8233 +8234, UA8234 +8235, UA8235 +8236, UA8236 +8237, UA8237 +8238, UA8238 +8239, UA8239 +8240, UA8240 +8241, UA8241 +8242, UA8242 +8243, UA8243 +8244, UA8244 +8245, UA8245 +8246, UA8246 +8247, UA8247 +8248, UA8248 +8249, UA8249 +8250, UA8250 +8251, UA8251 +8252, UA8252 +8253, UA8253 +8254, UA8254 +8255, UA8255 +8256, UA8256 +8257, UA8257 +8258, UA8258 +8259, UA8259 +8260, UA8260 +8261, UA8261 +8262, UA8262 +8263, UA8263 +8264, UA8264 +8265, UA8265 +8266, UA8266 +8267, UA8267 +8268, UA8268 +8269, UA8269 +8270, UA8270 +8271, UA8271 +8272, UA8272 +8273, UA8273 +8274, UA8274 +8275, UA8275 +8276, UA8276 +8277, UA8277 +8278, UA8278 +8279, UA8279 +8280, UA8280 +8281, UA8281 +8282, UA8282 +8283, UA8283 +8284, UA8284 +8285, UA8285 +8286, UA8286 +8287, UA8287 +8288, UA8288 +8289, UA8289 +8290, UA8290 +8291, UA8291 +8292, UA8292 +8293, UA8293 +8294, UA8294 +8295, UA8295 +8296, UA8296 +8297, UA8297 +8298, UA8298 +8299, UA8299 +8300, UA8300 +8301, UA8301 +8302, UA8302 +8303, UA8303 +8304, UA8304 +8305, UA8305 +8306, UA8306 +8307, UA8307 +8308, UA8308 +8309, UA8309 +8310, UA8310 +8311, UA8311 +8312, UA8312 +8313, UA8313 +8314, UA8314 +8315, UA8315 +8316, UA8316 +8317, UA8317 +8318, UA8318 +8319, UA8319 +8320, UA8320 +8321, UA8321 +8322, UA8322 +8323, UA8323 +8324, UA8324 +8325, UA8325 +8326, UA8326 +8327, UA8327 +8328, UA8328 +8329, UA8329 +8330, UA8330 +8331, UA8331 +8332, UA8332 +8333, UA8333 +8334, UA8334 +8335, UA8335 +8336, UA8336 +8337, UA8337 +8338, UA8338 +8339, UA8339 +8340, UA8340 +8341, UA8341 +8342, UA8342 +8343, UA8343 +8344, UA8344 +8345, UA8345 +8346, UA8346 +8347, UA8347 +8348, UA8348 +8349, UA8349 +8350, UA8350 +8351, UA8351 +8352, UA8352 +8353, UA8353 +8354, UA8354 +8355, UA8355 +8356, UA8356 +8357, UA8357 +8358, UA8358 +8359, UA8359 +8360, UA8360 +8361, UA8361 +8362, UA8362 +8363, UA8363 +8364, UA8364 +8365, UA8365 +8366, UA8366 +8367, UA8367 +8368, UA8368 +8369, UA8369 +8370, UA8370 +8371, UA8371 +8372, UA8372 +8373, UA8373 +8374, UA8374 +8375, UA8375 +8376, UA8376 +8377, UA8377 +8378, UA8378 +8379, UA8379 +8380, UA8380 +8381, UA8381 +8382, UA8382 +8383, UA8383 +8384, UA8384 +8385, UA8385 +8386, UA8386 +8387, UA8387 +8388, UA8388 +8389, UA8389 +8390, UA8390 +8391, UA8391 +8392, UA8392 +8393, UA8393 +8394, UA8394 +8395, UA8395 +8396, UA8396 +8397, UA8397 +8398, UA8398 +8399, UA8399 +8400, UA8400 +8401, UA8401 +8402, UA8402 +8403, UA8403 +8404, UA8404 +8405, UA8405 +8406, UA8406 +8407, UA8407 +8408, UA8408 +8409, UA8409 +8410, UA8410 +8411, UA8411 +8412, UA8412 +8413, UA8413 +8414, UA8414 +8415, UA8415 +8416, UA8416 +8417, UA8417 +8418, UA8418 +8419, UA8419 +8420, UA8420 +8421, UA8421 +8422, UA8422 +8423, UA8423 +8424, UA8424 +8425, UA8425 +8426, UA8426 +8427, UA8427 +8428, UA8428 +8429, UA8429 +8430, UA8430 +8431, UA8431 +8432, UA8432 +8433, UA8433 +8434, UA8434 +8435, UA8435 +8436, UA8436 +8437, UA8437 +8438, UA8438 +8439, UA8439 +8440, UA8440 +8441, UA8441 +8442, UA8442 +8443, UA8443 +8444, UA8444 +8445, UA8445 +8446, UA8446 +8447, UA8447 +8448, UA8448 +8449, UA8449 +8450, UA8450 +8451, UA8451 +8452, UA8452 +8453, UA8453 +8454, UA8454 +8455, UA8455 +8456, UA8456 +8457, UA8457 +8458, UA8458 +8459, UA8459 +8460, UA8460 +8461, UA8461 +8462, UA8462 +8463, UA8463 +8464, UA8464 +8465, UA8465 +8466, UA8466 +8467, UA8467 +8468, UA8468 +8469, UA8469 +8470, UA8470 +8471, UA8471 +8472, UA8472 +8473, UA8473 +8474, UA8474 +8475, UA8475 +8476, UA8476 +8477, UA8477 +8478, UA8478 +8479, UA8479 +8480, UA8480 +8481, UA8481 +8482, UA8482 +8483, UA8483 +8484, UA8484 +8485, UA8485 +8486, UA8486 +8487, UA8487 +8488, UA8488 +8489, UA8489 +8490, UA8490 +8491, UA8491 +8492, UA8492 +8493, UA8493 +8494, UA8494 +8495, UA8495 +8496, UA8496 +8497, UA8497 +8498, UA8498 +8499, UA8499 +8500, UA8500 +8501, UA8501 +8502, UA8502 +8503, UA8503 +8504, UA8504 +8505, UA8505 +8506, UA8506 +8507, UA8507 +8508, UA8508 +8509, UA8509 +8510, UA8510 +8511, UA8511 +8512, UA8512 +8513, UA8513 +8514, UA8514 +8515, UA8515 +8516, UA8516 +8517, UA8517 +8518, UA8518 +8519, UA8519 +8520, UA8520 +8521, UA8521 +8522, UA8522 +8523, UA8523 +8524, UA8524 +8525, UA8525 +8526, UA8526 +8527, UA8527 +8528, UA8528 +8529, UA8529 +8530, UA8530 +8531, UA8531 +8532, UA8532 +8533, UA8533 +8534, UA8534 +8535, UA8535 +8536, UA8536 +8537, UA8537 +8538, UA8538 +8539, UA8539 +8540, UA8540 +8541, UA8541 +8542, UA8542 +8543, UA8543 +8544, UA8544 +8545, UA8545 +8546, UA8546 +8547, UA8547 +8548, UA8548 +8549, UA8549 +8550, UA8550 +8551, UA8551 +8552, UA8552 +8553, UA8553 +8554, UA8554 +8555, UA8555 +8556, UA8556 +8557, UA8557 +8558, UA8558 +8559, UA8559 +8560, UA8560 +8561, UA8561 +8562, UA8562 +8563, UA8563 +8564, UA8564 +8565, UA8565 +8566, UA8566 +8567, UA8567 +8568, UA8568 +8569, UA8569 +8570, UA8570 +8571, UA8571 +8572, UA8572 +8573, UA8573 +8574, UA8574 +8575, UA8575 +8576, UA8576 +8577, UA8577 +8578, UA8578 +8579, UA8579 +8580, UA8580 +8581, UA8581 +8582, UA8582 +8583, UA8583 +8584, UA8584 +8585, UA8585 +8586, UA8586 +8587, UA8587 +8588, UA8588 +8589, UA8589 +8590, UA8590 +8591, UA8591 +8592, UA8592 +8593, UA8593 +8594, UA8594 +8595, UA8595 +8596, UA8596 +8597, UA8597 +8598, UA8598 +8599, UA8599 +8600, UA8600 +8601, UA8601 +8602, UA8602 +8603, UA8603 +8604, UA8604 +8605, UA8605 +8606, UA8606 +8607, UA8607 +8608, UA8608 +8609, UA8609 +8610, UA8610 +8611, UA8611 +8612, UA8612 +8613, UA8613 +8614, UA8614 +8615, UA8615 +8616, UA8616 +8617, UA8617 +8618, UA8618 +8619, UA8619 +8620, UA8620 +8621, UA8621 +8622, UA8622 +8623, UA8623 +8624, UA8624 +8625, UA8625 +8626, UA8626 +8627, UA8627 +8628, UA8628 +8629, UA8629 +8630, UA8630 +8631, UA8631 +8632, UA8632 +8633, UA8633 +8634, UA8634 +8635, UA8635 +8636, UA8636 +8637, UA8637 +8638, UA8638 +8639, UA8639 +8640, UA8640 +8641, UA8641 +8642, UA8642 +8643, UA8643 +8644, UA8644 +8645, UA8645 +8646, UA8646 +8647, UA8647 +8648, UA8648 +8649, UA8649 +8650, UA8650 +8651, UA8651 +8652, UA8652 +8653, UA8653 +8654, UA8654 +8655, UA8655 +8656, UA8656 +8657, UA8657 +8658, UA8658 +8659, UA8659 +8660, UA8660 +8661, UA8661 +8662, UA8662 +8663, UA8663 +8664, UA8664 +8665, UA8665 +8666, UA8666 +8667, UA8667 +8668, UA8668 +8669, UA8669 +8670, UA8670 +8671, UA8671 +8672, UA8672 +8673, UA8673 +8674, UA8674 +8675, UA8675 +8676, UA8676 +8677, UA8677 +8678, UA8678 +8679, UA8679 +8680, UA8680 +8681, UA8681 +8682, UA8682 +8683, UA8683 +8684, UA8684 +8685, UA8685 +8686, UA8686 +8687, UA8687 +8688, UA8688 +8689, UA8689 +8690, UA8690 +8691, UA8691 +8692, UA8692 +8693, UA8693 +8694, UA8694 +8695, UA8695 +8696, UA8696 +8697, UA8697 +8698, UA8698 +8699, UA8699 +8700, UA8700 +8701, UA8701 +8702, UA8702 +8703, UA8703 +8704, UA8704 +8705, UA8705 +8706, UA8706 +8707, UA8707 +8708, UA8708 +8709, UA8709 +8710, UA8710 +8711, UA8711 +8712, UA8712 +8713, UA8713 +8714, UA8714 +8715, UA8715 +8716, UA8716 +8717, UA8717 +8718, UA8718 +8719, UA8719 +8720, UA8720 +8721, UA8721 +8722, UA8722 +8723, UA8723 +8724, UA8724 +8725, UA8725 +8726, UA8726 +8727, UA8727 +8728, UA8728 +8729, UA8729 +8730, UA8730 +8731, UA8731 +8732, UA8732 +8733, UA8733 +8734, UA8734 +8735, UA8735 +8736, UA8736 +8737, UA8737 +8738, UA8738 +8739, UA8739 +8740, UA8740 +8741, UA8741 +8742, UA8742 +8743, UA8743 +8744, UA8744 +8745, UA8745 +8746, UA8746 +8747, UA8747 +8748, UA8748 +8749, UA8749 +8750, UA8750 +8751, UA8751 +8752, UA8752 +8753, UA8753 +8754, UA8754 +8755, UA8755 +8756, UA8756 +8757, UA8757 +8758, UA8758 +8759, UA8759 +8760, UA8760 +8761, UA8761 +8762, UA8762 +8763, UA8763 +8764, UA8764 +8765, UA8765 +8766, UA8766 +8767, UA8767 +8768, UA8768 +8769, UA8769 +8770, UA8770 +8771, UA8771 +8772, UA8772 +8773, UA8773 +8774, UA8774 +8775, UA8775 +8776, UA8776 +8777, UA8777 +8778, UA8778 +8779, UA8779 +8780, UA8780 +8781, UA8781 +8782, UA8782 +8783, UA8783 +8784, UA8784 +8785, UA8785 +8786, UA8786 +8787, UA8787 +8788, UA8788 +8789, UA8789 +8790, UA8790 +8791, UA8791 +8792, UA8792 +8793, UA8793 +8794, UA8794 +8795, UA8795 +8796, UA8796 +8797, UA8797 +8798, UA8798 +8799, UA8799 +8800, UA8800 +8801, UA8801 +8802, UA8802 +8803, UA8803 +8804, UA8804 +8805, UA8805 +8806, UA8806 +8807, UA8807 +8808, UA8808 +8809, UA8809 +8810, UA8810 +8811, UA8811 +8812, UA8812 +8813, UA8813 +8814, UA8814 +8815, UA8815 +8816, UA8816 +8817, UA8817 +8818, UA8818 +8819, UA8819 +8820, UA8820 +8821, UA8821 +8822, UA8822 +8823, UA8823 +8824, UA8824 +8825, UA8825 +8826, UA8826 +8827, UA8827 +8828, UA8828 +8829, UA8829 +8830, UA8830 +8831, UA8831 +8832, UA8832 +8833, UA8833 +8834, UA8834 +8835, UA8835 +8836, UA8836 +8837, UA8837 +8838, UA8838 +8839, UA8839 +8840, UA8840 +8841, UA8841 +8842, UA8842 +8843, UA8843 +8844, UA8844 +8845, UA8845 +8846, UA8846 +8847, UA8847 +8848, UA8848 +8849, UA8849 +8850, UA8850 +8851, UA8851 +8852, UA8852 +8853, UA8853 +8854, UA8854 +8855, UA8855 +8856, UA8856 +8857, UA8857 +8858, UA8858 +8859, UA8859 +8860, UA8860 +8861, UA8861 +8862, UA8862 +8863, UA8863 +8864, UA8864 +8865, UA8865 +8866, UA8866 +8867, UA8867 +8868, UA8868 +8869, UA8869 +8870, UA8870 +8871, UA8871 +8872, UA8872 +8873, UA8873 +8874, UA8874 +8875, UA8875 +8876, UA8876 +8877, UA8877 +8878, UA8878 +8879, UA8879 +8880, UA8880 +8881, UA8881 +8882, UA8882 +8883, UA8883 +8884, UA8884 +8885, UA8885 +8886, UA8886 +8887, UA8887 +8888, UA8888 +8889, UA8889 +8890, UA8890 +8891, UA8891 +8892, UA8892 +8893, UA8893 +8894, UA8894 +8895, UA8895 +8896, UA8896 +8897, UA8897 +8898, UA8898 +8899, UA8899 +8900, UA8900 +8901, UA8901 +8902, UA8902 +8903, UA8903 +8904, UA8904 +8905, UA8905 +8906, UA8906 +8907, UA8907 +8908, UA8908 +8909, UA8909 +8910, UA8910 +8911, UA8911 +8912, UA8912 +8913, UA8913 +8914, UA8914 +8915, UA8915 +8916, UA8916 +8917, UA8917 +8918, UA8918 +8919, UA8919 +8920, UA8920 +8921, UA8921 +8922, UA8922 +8923, UA8923 +8924, UA8924 +8925, UA8925 +8926, UA8926 +8927, UA8927 +8928, UA8928 +8929, UA8929 +8930, UA8930 +8931, UA8931 +8932, UA8932 +8933, UA8933 +8934, UA8934 +8935, UA8935 +8936, UA8936 +8937, UA8937 +8938, UA8938 +8939, UA8939 +8940, UA8940 +8941, UA8941 +8942, UA8942 +8943, UA8943 +8944, UA8944 +8945, UA8945 +8946, UA8946 +8947, UA8947 +8948, UA8948 +8949, UA8949 +8950, UA8950 +8951, UA8951 +8952, UA8952 +8953, UA8953 +8954, UA8954 +8955, UA8955 +8956, UA8956 +8957, UA8957 +8958, UA8958 +8959, UA8959 +8960, UA8960 +8961, UA8961 +8962, UA8962 +8963, UA8963 +8964, UA8964 +8965, UA8965 +8966, UA8966 +8967, UA8967 +8968, UA8968 +8969, UA8969 +8970, UA8970 +8971, UA8971 +8972, UA8972 +8973, UA8973 +8974, UA8974 +8975, UA8975 +8976, UA8976 +8977, UA8977 +8978, UA8978 +8979, UA8979 +8980, UA8980 +8981, UA8981 +8982, UA8982 +8983, UA8983 +8984, UA8984 +8985, UA8985 +8986, UA8986 +8987, UA8987 +8988, UA8988 +8989, UA8989 +8990, UA8990 +8991, UA8991 +8992, UA8992 +8993, UA8993 +8994, UA8994 +8995, UA8995 +8996, UA8996 +8997, UA8997 +8998, UA8998 +8999, UA8999 +9000, UA9000 +9001, UA9001 +9002, UA9002 +9003, UA9003 +9004, UA9004 +9005, UA9005 +9006, UA9006 +9007, UA9007 +9008, UA9008 +9009, UA9009 +9010, UA9010 +9011, UA9011 +9012, UA9012 +9013, UA9013 +9014, UA9014 +9015, UA9015 +9016, UA9016 +9017, UA9017 +9018, UA9018 +9019, UA9019 +9020, UA9020 +9021, UA9021 +9022, UA9022 +9023, UA9023 +9024, UA9024 +9025, UA9025 +9026, UA9026 +9027, UA9027 +9028, UA9028 +9029, UA9029 +9030, UA9030 +9031, UA9031 +9032, UA9032 +9033, UA9033 +9034, UA9034 +9035, UA9035 +9036, UA9036 +9037, UA9037 +9038, UA9038 +9039, UA9039 +9040, UA9040 +9041, UA9041 +9042, UA9042 +9043, UA9043 +9044, UA9044 +9045, UA9045 +9046, UA9046 +9047, UA9047 +9048, UA9048 +9049, UA9049 +9050, UA9050 +9051, UA9051 +9052, UA9052 +9053, UA9053 +9054, UA9054 +9055, UA9055 +9056, UA9056 +9057, UA9057 +9058, UA9058 +9059, UA9059 +9060, UA9060 +9061, UA9061 +9062, UA9062 +9063, UA9063 +9064, UA9064 +9065, UA9065 +9066, UA9066 +9067, UA9067 +9068, UA9068 +9069, UA9069 +9070, UA9070 +9071, UA9071 +9072, UA9072 +9073, UA9073 +9074, UA9074 +9075, UA9075 +9076, UA9076 +9077, UA9077 +9078, UA9078 +9079, UA9079 +9080, UA9080 +9081, UA9081 +9082, UA9082 +9083, UA9083 +9084, UA9084 +9085, UA9085 +9086, UA9086 +9087, UA9087 +9088, UA9088 +9089, UA9089 +9090, UA9090 +9091, UA9091 +9092, UA9092 +9093, UA9093 +9094, UA9094 +9095, UA9095 +9096, UA9096 +9097, UA9097 +9098, UA9098 +9099, UA9099 +9100, UA9100 +9101, UA9101 +9102, UA9102 +9103, UA9103 +9104, UA9104 +9105, UA9105 +9106, UA9106 +9107, UA9107 +9108, UA9108 +9109, UA9109 +9110, UA9110 +9111, UA9111 +9112, UA9112 +9113, UA9113 +9114, UA9114 +9115, UA9115 +9116, UA9116 +9117, UA9117 +9118, UA9118 +9119, UA9119 +9120, UA9120 +9121, UA9121 +9122, UA9122 +9123, UA9123 +9124, UA9124 +9125, UA9125 +9126, UA9126 +9127, UA9127 +9128, UA9128 +9129, UA9129 +9130, UA9130 +9131, UA9131 +9132, UA9132 +9133, UA9133 +9134, UA9134 +9135, UA9135 +9136, UA9136 +9137, UA9137 +9138, UA9138 +9139, UA9139 +9140, UA9140 +9141, UA9141 +9142, UA9142 +9143, UA9143 +9144, UA9144 +9145, UA9145 +9146, UA9146 +9147, UA9147 +9148, UA9148 +9149, UA9149 +9150, UA9150 +9151, UA9151 +9152, UA9152 +9153, UA9153 +9154, UA9154 +9155, UA9155 +9156, UA9156 +9157, UA9157 +9158, UA9158 +9159, UA9159 +9160, UA9160 +9161, UA9161 +9162, UA9162 +9163, UA9163 +9164, UA9164 +9165, UA9165 +9166, UA9166 +9167, UA9167 +9168, UA9168 +9169, UA9169 +9170, UA9170 +9171, UA9171 +9172, UA9172 +9173, UA9173 +9174, UA9174 +9175, UA9175 +9176, UA9176 +9177, UA9177 +9178, UA9178 +9179, UA9179 +9180, UA9180 +9181, UA9181 +9182, UA9182 +9183, UA9183 +9184, UA9184 +9185, UA9185 +9186, UA9186 +9187, UA9187 +9188, UA9188 +9189, UA9189 +9190, UA9190 +9191, UA9191 +9192, UA9192 +9193, UA9193 +9194, UA9194 +9195, UA9195 +9196, UA9196 +9197, UA9197 +9198, UA9198 +9199, UA9199 +9200, UA9200 +9201, UA9201 +9202, UA9202 +9203, UA9203 +9204, UA9204 +9205, UA9205 +9206, UA9206 +9207, UA9207 +9208, UA9208 +9209, UA9209 +9210, UA9210 +9211, UA9211 +9212, UA9212 +9213, UA9213 +9214, UA9214 +9215, UA9215 +9216, UA9216 +9217, UA9217 +9218, UA9218 +9219, UA9219 +9220, UA9220 +9221, UA9221 +9222, UA9222 +9223, UA9223 +9224, UA9224 +9225, UA9225 +9226, UA9226 +9227, UA9227 +9228, UA9228 +9229, UA9229 +9230, UA9230 +9231, UA9231 +9232, UA9232 +9233, UA9233 +9234, UA9234 +9235, UA9235 +9236, UA9236 +9237, UA9237 +9238, UA9238 +9239, UA9239 +9240, UA9240 +9241, UA9241 +9242, UA9242 +9243, UA9243 +9244, UA9244 +9245, UA9245 +9246, UA9246 +9247, UA9247 +9248, UA9248 +9249, UA9249 +9250, UA9250 +9251, UA9251 +9252, UA9252 +9253, UA9253 +9254, UA9254 +9255, UA9255 +9256, UA9256 +9257, UA9257 +9258, UA9258 +9259, UA9259 +9260, UA9260 +9261, UA9261 +9262, UA9262 +9263, UA9263 +9264, UA9264 +9265, UA9265 +9266, UA9266 +9267, UA9267 +9268, UA9268 +9269, UA9269 +9270, UA9270 +9271, UA9271 +9272, UA9272 +9273, UA9273 +9274, UA9274 +9275, UA9275 +9276, UA9276 +9277, UA9277 +9278, UA9278 +9279, UA9279 +9280, UA9280 +9281, UA9281 +9282, UA9282 +9283, UA9283 +9284, UA9284 +9285, UA9285 +9286, UA9286 +9287, UA9287 +9288, UA9288 +9289, UA9289 +9290, UA9290 +9291, UA9291 +9292, UA9292 +9293, UA9293 +9294, UA9294 +9295, UA9295 +9296, UA9296 +9297, UA9297 +9298, UA9298 +9299, UA9299 +9300, UA9300 +9301, UA9301 +9302, UA9302 +9303, UA9303 +9304, UA9304 +9305, UA9305 +9306, UA9306 +9307, UA9307 +9308, UA9308 +9309, UA9309 +9310, UA9310 +9311, UA9311 +9312, UA9312 +9313, UA9313 +9314, UA9314 +9315, UA9315 +9316, UA9316 +9317, UA9317 +9318, UA9318 +9319, UA9319 +9320, UA9320 +9321, UA9321 +9322, UA9322 +9323, UA9323 +9324, UA9324 +9325, UA9325 +9326, UA9326 +9327, UA9327 +9328, UA9328 +9329, UA9329 +9330, UA9330 +9331, UA9331 +9332, UA9332 +9333, UA9333 +9334, UA9334 +9335, UA9335 +9336, UA9336 +9337, UA9337 +9338, UA9338 +9339, UA9339 +9340, UA9340 +9341, UA9341 +9342, UA9342 +9343, UA9343 +9344, UA9344 +9345, UA9345 +9346, UA9346 +9347, UA9347 +9348, UA9348 +9349, UA9349 +9350, UA9350 +9351, UA9351 +9352, UA9352 +9353, UA9353 +9354, UA9354 +9355, UA9355 +9356, UA9356 +9357, UA9357 +9358, UA9358 +9359, UA9359 +9360, UA9360 +9361, UA9361 +9362, UA9362 +9363, UA9363 +9364, UA9364 +9365, UA9365 +9366, UA9366 +9367, UA9367 +9368, UA9368 +9369, UA9369 +9370, UA9370 +9371, UA9371 +9372, UA9372 +9373, UA9373 +9374, UA9374 +9375, UA9375 +9376, UA9376 +9377, UA9377 +9378, UA9378 +9379, UA9379 +9380, UA9380 +9381, UA9381 +9382, UA9382 +9383, UA9383 +9384, UA9384 +9385, UA9385 +9386, UA9386 +9387, UA9387 +9388, UA9388 +9389, UA9389 +9390, UA9390 +9391, UA9391 +9392, UA9392 +9393, UA9393 +9394, UA9394 +9395, UA9395 +9396, UA9396 +9397, UA9397 +9398, UA9398 +9399, UA9399 +9400, UA9400 +9401, UA9401 +9402, UA9402 +9403, UA9403 +9404, UA9404 +9405, UA9405 +9406, UA9406 +9407, UA9407 +9408, UA9408 +9409, UA9409 +9410, UA9410 +9411, UA9411 +9412, UA9412 +9413, UA9413 +9414, UA9414 +9415, UA9415 +9416, UA9416 +9417, UA9417 +9418, UA9418 +9419, UA9419 +9420, UA9420 +9421, UA9421 +9422, UA9422 +9423, UA9423 +9424, UA9424 +9425, UA9425 +9426, UA9426 +9427, UA9427 +9428, UA9428 +9429, UA9429 +9430, UA9430 +9431, UA9431 +9432, UA9432 +9433, UA9433 +9434, UA9434 +9435, UA9435 +9436, UA9436 +9437, UA9437 +9438, UA9438 +9439, UA9439 +9440, UA9440 +9441, UA9441 +9442, UA9442 +9443, UA9443 +9444, UA9444 +9445, UA9445 +9446, UA9446 +9447, UA9447 +9448, UA9448 +9449, UA9449 +9450, UA9450 +9451, UA9451 +9452, UA9452 +9453, UA9453 +9454, UA9454 +9455, UA9455 +9456, UA9456 +9457, UA9457 +9458, UA9458 +9459, UA9459 +9460, UA9460 +9461, UA9461 +9462, UA9462 +9463, UA9463 +9464, UA9464 +9465, UA9465 +9466, UA9466 +9467, UA9467 +9468, UA9468 +9469, UA9469 +9470, UA9470 +9471, UA9471 +9472, UA9472 +9473, UA9473 +9474, UA9474 +9475, UA9475 +9476, UA9476 +9477, UA9477 +9478, UA9478 +9479, UA9479 +9480, UA9480 +9481, UA9481 +9482, UA9482 +9483, UA9483 +9484, UA9484 +9485, UA9485 +9486, UA9486 +9487, UA9487 +9488, UA9488 +9489, UA9489 +9490, UA9490 +9491, UA9491 +9492, UA9492 +9493, UA9493 +9494, UA9494 +9495, UA9495 +9496, UA9496 +9497, UA9497 +9498, UA9498 +9499, UA9499 +9500, UA9500 +9501, UA9501 +9502, UA9502 +9503, UA9503 +9504, UA9504 +9505, UA9505 +9506, UA9506 +9507, UA9507 +9508, UA9508 +9509, UA9509 +9510, UA9510 +9511, UA9511 +9512, UA9512 +9513, UA9513 +9514, UA9514 +9515, UA9515 +9516, UA9516 +9517, UA9517 +9518, UA9518 +9519, UA9519 +9520, UA9520 +9521, UA9521 +9522, UA9522 +9523, UA9523 +9524, UA9524 +9525, UA9525 +9526, UA9526 +9527, UA9527 +9528, UA9528 +9529, UA9529 +9530, UA9530 +9531, UA9531 +9532, UA9532 +9533, UA9533 +9534, UA9534 +9535, UA9535 +9536, UA9536 +9537, UA9537 +9538, UA9538 +9539, UA9539 +9540, UA9540 +9541, UA9541 +9542, UA9542 +9543, UA9543 +9544, UA9544 +9545, UA9545 +9546, UA9546 +9547, UA9547 +9548, UA9548 +9549, UA9549 +9550, UA9550 +9551, UA9551 +9552, UA9552 +9553, UA9553 +9554, UA9554 +9555, UA9555 +9556, UA9556 +9557, UA9557 +9558, UA9558 +9559, UA9559 +9560, UA9560 +9561, UA9561 +9562, UA9562 +9563, UA9563 +9564, UA9564 +9565, UA9565 +9566, UA9566 +9567, UA9567 +9568, UA9568 +9569, UA9569 +9570, UA9570 +9571, UA9571 +9572, UA9572 +9573, UA9573 +9574, UA9574 +9575, UA9575 +9576, UA9576 +9577, UA9577 +9578, UA9578 +9579, UA9579 +9580, UA9580 +9581, UA9581 +9582, UA9582 +9583, UA9583 +9584, UA9584 +9585, UA9585 +9586, UA9586 +9587, UA9587 +9588, UA9588 +9589, UA9589 +9590, UA9590 +9591, UA9591 +9592, UA9592 +9593, UA9593 +9594, UA9594 +9595, UA9595 +9596, UA9596 +9597, UA9597 +9598, UA9598 +9599, UA9599 +9600, UA9600 +9601, UA9601 +9602, UA9602 +9603, UA9603 +9604, UA9604 +9605, UA9605 +9606, UA9606 +9607, UA9607 +9608, UA9608 +9609, UA9609 +9610, UA9610 +9611, UA9611 +9612, UA9612 +9613, UA9613 +9614, UA9614 +9615, UA9615 +9616, UA9616 +9617, UA9617 +9618, UA9618 +9619, UA9619 +9620, UA9620 +9621, UA9621 +9622, UA9622 +9623, UA9623 +9624, UA9624 +9625, UA9625 +9626, UA9626 +9627, UA9627 +9628, UA9628 +9629, UA9629 +9630, UA9630 +9631, UA9631 +9632, UA9632 +9633, UA9633 +9634, UA9634 +9635, UA9635 +9636, UA9636 +9637, UA9637 +9638, UA9638 +9639, UA9639 +9640, UA9640 +9641, UA9641 +9642, UA9642 +9643, UA9643 +9644, UA9644 +9645, UA9645 +9646, UA9646 +9647, UA9647 +9648, UA9648 +9649, UA9649 +9650, UA9650 +9651, UA9651 +9652, UA9652 +9653, UA9653 +9654, UA9654 +9655, UA9655 +9656, UA9656 +9657, UA9657 +9658, UA9658 +9659, UA9659 +9660, UA9660 +9661, UA9661 +9662, UA9662 +9663, UA9663 +9664, UA9664 +9665, UA9665 +9666, UA9666 +9667, UA9667 +9668, UA9668 +9669, UA9669 +9670, UA9670 +9671, UA9671 +9672, UA9672 +9673, UA9673 +9674, UA9674 +9675, UA9675 +9676, UA9676 +9677, UA9677 +9678, UA9678 +9679, UA9679 +9680, UA9680 +9681, UA9681 +9682, UA9682 +9683, UA9683 +9684, UA9684 +9685, UA9685 +9686, UA9686 +9687, UA9687 +9688, UA9688 +9689, UA9689 +9690, UA9690 +9691, UA9691 +9692, UA9692 +9693, UA9693 +9694, UA9694 +9695, UA9695 +9696, UA9696 +9697, UA9697 +9698, UA9698 +9699, UA9699 +9700, UA9700 +9701, UA9701 +9702, UA9702 +9703, UA9703 +9704, UA9704 +9705, UA9705 +9706, UA9706 +9707, UA9707 +9708, UA9708 +9709, UA9709 +9710, UA9710 +9711, UA9711 +9712, UA9712 +9713, UA9713 +9714, UA9714 +9715, UA9715 +9716, UA9716 +9717, UA9717 +9718, UA9718 +9719, UA9719 +9720, UA9720 +9721, UA9721 +9722, UA9722 +9723, UA9723 +9724, UA9724 +9725, UA9725 +9726, UA9726 +9727, UA9727 +9728, UA9728 +9729, UA9729 +9730, UA9730 +9731, UA9731 +9732, UA9732 +9733, UA9733 +9734, UA9734 +9735, UA9735 +9736, UA9736 +9737, UA9737 +9738, UA9738 +9739, UA9739 +9740, UA9740 +9741, UA9741 +9742, UA9742 +9743, UA9743 +9744, UA9744 +9745, UA9745 +9746, UA9746 +9747, UA9747 +9748, UA9748 +9749, UA9749 +9750, UA9750 +9751, UA9751 +9752, UA9752 +9753, UA9753 +9754, UA9754 +9755, UA9755 +9756, UA9756 +9757, UA9757 +9758, UA9758 +9759, UA9759 +9760, UA9760 +9761, UA9761 +9762, UA9762 +9763, UA9763 +9764, UA9764 +9765, UA9765 +9766, UA9766 +9767, UA9767 +9768, UA9768 +9769, UA9769 +9770, UA9770 +9771, UA9771 +9772, UA9772 +9773, UA9773 +9774, UA9774 +9775, UA9775 +9776, UA9776 +9777, UA9777 +9778, UA9778 +9779, UA9779 +9780, UA9780 +9781, UA9781 +9782, UA9782 +9783, UA9783 +9784, UA9784 +9785, UA9785 +9786, UA9786 +9787, UA9787 +9788, UA9788 +9789, UA9789 +9790, UA9790 +9791, UA9791 +9792, UA9792 +9793, UA9793 +9794, UA9794 +9795, UA9795 +9796, UA9796 +9797, UA9797 +9798, UA9798 +9799, UA9799 +9800, UA9800 +9801, UA9801 +9802, UA9802 +9803, UA9803 +9804, UA9804 +9805, UA9805 +9806, UA9806 +9807, UA9807 +9808, UA9808 +9809, UA9809 +9810, UA9810 +9811, UA9811 +9812, UA9812 +9813, UA9813 +9814, UA9814 +9815, UA9815 +9816, UA9816 +9817, UA9817 +9818, UA9818 +9819, UA9819 +9820, UA9820 +9821, UA9821 +9822, UA9822 +9823, UA9823 +9824, UA9824 +9825, UA9825 +9826, UA9826 +9827, UA9827 +9828, UA9828 +9829, UA9829 +9830, UA9830 +9831, UA9831 +9832, UA9832 +9833, UA9833 +9834, UA9834 +9835, UA9835 +9836, UA9836 +9837, UA9837 +9838, UA9838 +9839, UA9839 +9840, UA9840 +9841, UA9841 +9842, UA9842 +9843, UA9843 +9844, UA9844 +9845, UA9845 +9846, UA9846 +9847, UA9847 +9848, UA9848 +9849, UA9849 +9850, UA9850 +9851, UA9851 +9852, UA9852 +9853, UA9853 +9854, UA9854 +9855, UA9855 +9856, UA9856 +9857, UA9857 +9858, UA9858 +9859, UA9859 +9860, UA9860 +9861, UA9861 +9862, UA9862 +9863, UA9863 +9864, UA9864 +9865, UA9865 +9866, UA9866 +9867, UA9867 +9868, UA9868 +9869, UA9869 +9870, UA9870 +9871, UA9871 +9872, UA9872 +9873, UA9873 +9874, UA9874 +9875, UA9875 +9876, UA9876 +9877, UA9877 +9878, UA9878 +9879, UA9879 +9880, UA9880 +9881, UA9881 +9882, UA9882 +9883, UA9883 +9884, UA9884 +9885, UA9885 +9886, UA9886 +9887, UA9887 +9888, UA9888 +9889, UA9889 +9890, UA9890 +9891, UA9891 +9892, UA9892 +9893, UA9893 +9894, UA9894 +9895, UA9895 +9896, UA9896 +9897, UA9897 +9898, UA9898 +9899, UA9899 +9900, UA9900 +9901, UA9901 +9902, UA9902 +9903, UA9903 +9904, UA9904 +9905, UA9905 +9906, UA9906 +9907, UA9907 +9908, UA9908 +9909, UA9909 +9910, UA9910 +9911, UA9911 +9912, UA9912 +9913, UA9913 +9914, UA9914 +9915, UA9915 +9916, UA9916 +9917, UA9917 +9918, UA9918 +9919, UA9919 +9920, UA9920 +9921, UA9921 +9922, UA9922 +9923, UA9923 +9924, UA9924 +9925, UA9925 +9926, UA9926 +9927, UA9927 +9928, UA9928 +9929, UA9929 +9930, UA9930 +9931, UA9931 +9932, UA9932 +9933, UA9933 +9934, UA9934 +9935, UA9935 +9936, UA9936 +9937, UA9937 +9938, UA9938 +9939, UA9939 +9940, UA9940 +9941, UA9941 +9942, UA9942 +9943, UA9943 +9944, UA9944 +9945, UA9945 +9946, UA9946 +9947, UA9947 +9948, UA9948 +9949, UA9949 +9950, UA9950 +9951, UA9951 +9952, UA9952 +9953, UA9953 +9954, UA9954 +9955, UA9955 +9956, UA9956 +9957, UA9957 +9958, UA9958 +9959, UA9959 +9960, UA9960 +9961, UA9961 +9962, UA9962 +9963, UA9963 +9964, UA9964 +9965, UA9965 +9966, UA9966 +9967, UA9967 +9968, UA9968 +9969, UA9969 +9970, UA9970 +9971, UA9971 +9972, UA9972 +9973, UA9973 +9974, UA9974 +9975, UA9975 +9976, UA9976 +9977, UA9977 +9978, UA9978 +9979, UA9979 +9980, UA9980 +9981, UA9981 +9982, UA9982 +9983, UA9983 +9984, UA9984 +9985, UA9985 +9986, UA9986 +9987, UA9987 +9988, UA9988 +9989, UA9989 +9990, UA9990 +9991, UA9991 +9992, UA9992 +9993, UA9993 +9994, UA9994 +9995, UA9995 +9996, UA9996 +9997, UA9997 +9998, UA9998 +9999, UA9999 +10000, UA10000 diff --git a/testdb/csv/roles.csv b/testdb/csv/roles.csv new file mode 100644 index 000000000..704fb6c6a --- /dev/null +++ b/testdb/csv/roles.csv @@ -0,0 +1,10 @@ +:START_ID,role,:END_ID,:TYPE +keanu,"Neo",tt0133093,ACTED_IN +keanu,"Neo",tt0234215,ACTED_IN +keanu,"Neo",tt0242653,ACTED_IN +laurence,"Morpheus",tt0133093,ACTED_IN +laurence,"Morpheus",tt0234215,ACTED_IN +laurence,"Morpheus",tt0242653,ACTED_IN +carrieanne,"Trinity",tt0133093,ACTED_IN +carrieanne,"Trinity",tt0234215,ACTED_IN +carrieanne,"Trinity",tt0242653,ACTED_IN \ No newline at end of file diff --git a/testdb/data/databases/neo4j/database_lock b/testdb/data/databases/neo4j/database_lock new file mode 100644 index 000000000..e69de29bb diff --git a/testdb/data/databases/neo4j/id-buffer.tmp.0 b/testdb/data/databases/neo4j/id-buffer.tmp.0 new file mode 100644 index 000000000..e69de29bb diff --git a/testdb/data/databases/neo4j/neostore b/testdb/data/databases/neo4j/neostore new file mode 100644 index 0000000000000000000000000000000000000000..6296bc39d8c04275e048584fdcca9e98be2c57b2 GIT binary patch literal 8192 zcmeIuu?fOZ6ouh;2q=;fT)+`hT3YD{67qrwAuqfE96{`C6eO4hw6L*Bnaak}6|zGJ z+G%O|pW@zAoa)nTIbS@ZX`^!+)}!OznXl+EzQ1mjO(bKqEhi`0;80z5*NuvSPZQ^@ zhHhpQO%6q^?009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ Hfjc@vyh+~Bu53H2!WSrS z-Xlqeue)ZFDWyzHxhpRpukWSIeoAeV76k$X2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkKcKLnQDZ9cSHowXRXXa_Zv`AR(Pu1_N0dEil-?YTvP009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5Ev^E%lMCNlC9VOcN%E@f9!8&JOKg(2oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5LgqK#7Y0T+do(TGiJ}sGiE)M7UVHu*FTXaOQ9l9%2oNAZfB*pk1olH< zI^1R)@n0ACkGrdS@P8cjUu$PW?P9214Yli`b~Ds&huZy6i-!d2eDTOYzFeTY)CdqD zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB=CJ0{#B~SeB2)_}t&0G3U)ZW7cC4 zKWZ^PKG7DF-_|0_{r~-A2ATBJWHMjvwsvNK{r^Fu5gP&zD0RjXF5FkKc4+Q=ImirXt literal 0 HcmV?d00001 diff --git a/testdb/data/databases/neo4j/neostore.indexstats.db b/testdb/data/databases/neo4j/neostore.indexstats.db new file mode 100644 index 0000000000000000000000000000000000000000..2b26684a38191d40f72f7ad43109502f0db7b35a GIT binary patch literal 49152 zcmeI*Jx;?g6aZkCAJG+w0SO6#R0+XdI0v_2W91O6urY8jF2H-S9q59TsH#NxJmlF{ zUmAZMI=nb3r5u!URfe{He5#$C(+ChCK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB=C%BybbgdfTq|u*ICqc3eX_`VrUBKgsdz#C9@)009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5ZIYOmhtb}*(TTjXC?0J(w&F^0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UNP*QV4tWPaKJmX-|9gz7q4jZ(eLnNDW!wzCh#FAa#UMt}eT z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PJUwVA%hk<@>q&|Fi6$`S$6Pe literal 0 HcmV?d00001 diff --git a/testdb/data/databases/neo4j/neostore.labeltokenstore.db b/testdb/data/databases/neo4j/neostore.labeltokenstore.db new file mode 100644 index 0000000000000000000000000000000000000000..971474ada90d69c037cbd2fda30487b84ebd1e42 GIT binary patch literal 8192 zcmeIu!41G55Cg$GAkcru;4bnQOWp#etE&5DBr{pbm+a)c8vz0Y2oNAZfB*pk1PBly ZK!5-N0t5&UAV7cs0RjXF5FqepfeU>z03-ka literal 0 HcmV?d00001 diff --git a/testdb/data/databases/neo4j/neostore.labeltokenstore.db.id b/testdb/data/databases/neo4j/neostore.labeltokenstore.db.id new file mode 100644 index 0000000000000000000000000000000000000000..440280e7643c5b36307363af937ac897263d73d3 GIT binary patch literal 40960 zcmeI)K?=e!5Cza_6vECB)p2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5Lgr#>fiq7UH>+2)ot8zX};Z;1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ xfWRgK<0h+Ega82o1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oU(Czz2ne1>XPw literal 0 HcmV?d00001 diff --git a/testdb/data/databases/neo4j/neostore.labeltokenstore.db.names b/testdb/data/databases/neo4j/neostore.labeltokenstore.db.names new file mode 100644 index 0000000000000000000000000000000000000000..e915b489c481bf8697b681d5e13f321088a6dccb GIT binary patch literal 8192 zcmeIuF$#b%3_#H+;_NBBM{&08?EUzHWA$ zt6nR2q8WAiP5PP1vEtGF-BaX z9`EV(C^3|?%sB`UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5;&KN7f>z20)a zyIJmYJkRg+>cVrr^_Y3cJe7RrwID!%009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjYi1Zo@qo(0|g|5b(h|2^NwvjhkbAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zKwwc|sDJyPcm3PARkv}=rTKPW5+Fc;009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs x0Ro!{jGL@t5ds7V5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAVA=k0v|)41>*n! literal 0 HcmV?d00001 diff --git a/testdb/data/databases/neo4j/neostore.nodestore.db b/testdb/data/databases/neo4j/neostore.nodestore.db new file mode 100644 index 0000000000000000000000000000000000000000..60400234a6bc97c2282de7427a38bb68d6b74e4e GIT binary patch literal 753664 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

GvzEfTh5Vl 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 JfB^&30}mg#06_o% literal 0 HcmV?d00001 diff --git a/testdb/data/databases/neo4j/neostore.nodestore.db.labels.id b/testdb/data/databases/neo4j/neostore.nodestore.db.labels.id new file mode 100644 index 0000000000000000000000000000000000000000..066eca9a678c6eb852823502d4c306cd04f98700 GIT binary patch literal 40960 zcmeI(OA5j;5CG6=b?XgWxRZJ)&*FtVgcs>qOiBVJ8)LzO@B(EzX@0yer;Ug);u5*d z&(}SLAzi6YBS3%v0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0tEg@;F``lmGd5& zcr1Avm+s9I&t=v8rNO$LQu0`LxF009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjX%1#%hxR>po^|KBuG{lD|o7)F2q0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0tEU5hWrnHTlKGbU83eSe(JB!MFIo}5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U yAV6RjfpM2zY(jtl0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5*BQs4~{2L;Cf literal 0 HcmV?d00001 diff --git a/testdb/data/databases/neo4j/neostore.propertystore.db b/testdb/data/databases/neo4j/neostore.propertystore.db new file mode 100644 index 0000000000000000000000000000000000000000..9309edcd1ccddc1056af788d77ae438965941d92 GIT binary patch literal 2064384 zcmeF)&(9_Iw%_&jN#D=`5`q9hB$Px<86X(Ignu9sjH7_~1CWs2VuHlL?g>I7lHGH_ zZp0ADZiz|6z-}SIAOm*~7#8l5*hnQ*vTINh1(fW<=eoajZt_&^=N0ATo_qS%8JzFe z-fyqo@AcU~p0(VztE#g7^1uA8;Hb$ z-}x{9)v7=G<)Qiuzxlua{y+Xd{_9`B-`xM3zx((8xBvV<{oDWFU;Fo}p8WF1fAp{a zy>Gtw4fC5n$ZszHQPp4kpa0hX`FDT$3;wD9;oblJmw!2*{^rmB^1pw+e)G%za`_8i z|L@Dc^veT(>5u>PfB3)t8^1Y!`3wK)KmOzQ|MwSv1OIn_=Rf#szkt8_-yi)8|JDEW zf3@fONAutRqkr+uzx~T|{pFYW&4cnBfAc*4;-9qplh5@xmHzlCynl`lp8SL7{2TB$ z|NG5f`49f@U->V7dCvdr{^x$hj=&xH^>PRNfBtsWU*7RM;PRg#`2YUP2=2e?A7AeL z(trNIzw!?%|MEvC?fK_^=ipz}iVXgBt@t;7=iuMeiVR-K{Myo!*CR*B4QKF5=1S(l zcOidBF?fBN-F=zy7ZNv|!7G_7nFk*L{Pn@$^*wX$!{8+Gy%!0$1c=NjQl1z#)JE4U%}^tpmB6@0B= z{{VdSPn^6Mwg-RVG5F-Uf-e<(tzfUaz?en|Z}P3D=l=Y@i=6nv}Tgy4rYiatZ@CodFyrQllyCj>vNWIjRb zYf13FQODnfPp>7xul+e`&!_k@d-|n0_AK0Z_Mg@UgXe5>Gu;Da!MtJQ2?)Fi~=BJ-) z!@pMWcRy*W%(Vk}pV7(p%?F1&UC_uBJh(vK86@QP(Tswe!FN&wv z4&YvUt{uSpclhyF+_eL^+n%S_4&dIK>mTPI7I@$H^W*ph`}-V4b*{etX@dK2s^9(k z=2{ZmeVblOf_v?`{%L}{Z`W%{aJN1G1bz#LPH)%mS-+pm+xHLu_Bi>OV)`v{x8n7$ z9lYC~r`M9;*Zv&8%%1#&FSF}kJ9zhHcKvhfciZ#yXMCAm|1`n12{ zAH?5|R+(!DaQ{Vd?Err5&+(56*MEB8?yKkech}u*&-D)r+;7k4?;rl{aq=$w`nSaW ziq~%x__aSLebj} z+sA7MaKAm*KP>QTe~y2gx&G4w_g_6fzJK_)$4MVQ{w;C0;`MJ7xZ9rVKR?haAFqF_;QjXK%j^$gJM+nV*WVt;pW)Yke(?T_LKhlOb)j+nmh}4#*M-JEfl2e) z0sI=x@h8R8-(xa5HvifBE$P4g>^-@iG+J%1CBfZ~l50tDw>_OM32q9G3eF0y2u5Y1 zGEteROjM@2&mMeU9Dh>W6dVohGB;sNk&NieOYGH?62LQJJVrbw6k_3XTfS3a$u7WpdMsDif87%2fXmCNn5F zDYz)OAsCg3%0y+NGEtf8KhtCsoD^IX+z^b)WYCH#6P1a|RR5JGqu`|AqTq&LR3?K~ zRGFwuRHpjxG#Lda1s4T31fwz;w4%yHWuh|G|DeezI4QU&xFHyo$)FWgCMpw^sZRe6 z?oGi_!CAo-!Kh4BCMpw^iON*>IlgCZ3XTfS3a$u7Wuh`snW#)urn;{+83jiLX9ZUT zqcXW^MU{!lL}jXbqsb^ZDmW{+A{dp)O)IKQR3<7@-H)1#f}?`7f-8bincTFZ%0y+N zGSz>K$qWik3N8w62u5Y1GEteROjM@&&ovnZCj}P;Hw2?H8MLCxL}j8f)qkzYC^#v& zD7YaQmC2wLRVFGEm8t%XCZph_;PMcB@Lc}kKXLqb^|ptV4#B8x2Cb;JIj}u`jw)0A zkNab!B3Qh_x3T_BSWuh`snW#)u=2{Z87v|yX@mdnxZBOZ3eJu&@_fhBS(z&{H zuD+H8k0kS^J-(lZpA@BYb?IDvEeTr3j~lLYb?IDPtNsMgDR?aj-e-6mq0ZH%bM>_( zxc{Efxw>?&E}g5dCBY-feBB=3&y)9zf;v}UOM=$%fW|M_VXke1xE#E1y=;4GP!9*m5Itk zWvZL@MB3#f83jiLX9ZUTqcXW^MU{!lL}jXf)&kkj<75T}Cj}P;Hw2?HQJJVrR3<7@ z{fj-3b~#B#!AZeI!41KvOa`r}GEteRO!co?Ap3cejDnMbi-H@1QJD-{QDvesQJL!B z?uoR^Niqsf55ZRX^gRA0mxq;(!41KvZ3eA)V0-u+qcTyM>Zb?&Jp83=P;gRkQE)>r zDif87%0y+NGSxl9WOS}BovTad>RRzRUQ2?OUrU14@#BW;TwOX>m(JDKlHieK@cX)SuC5g;UQ2@e$>>~NI#-v@)z^~Xkz`)9 z$M^I2V^8Pm(z*It610vVH(clH(z&{HuD+H8k0kT9J-(mE5$f1nIyPTBfY$NjhU?f| zIyRS%%^%nfK>x+VHw8xpX9ZUT(NqB7Ne-vZgslVlVe6`U1Z5sb>@rWI8t zDif8d?x#JGb~#B#!BN3k!4<)%Om13HWuh`snd(1jf$ZmTGJ}GXf{TJ1f>D{MOjIT+ z6P2m{i#?HcIY~yrNx?-C(#2qcRz^qRK>NqB7OL(_|E!6kHVC5RA%X(26P(m5It!|Fb5e z;H2Q9;D%sSCWBT~nW#)u=Gpe>O^ZBOageC+`4_ff~@(y_U8Y`%5?k0kT1 zJ-(lZpA@BIbLrT8?EqTGj~lLIbLrSztA1a13SK*a_Zc2XsAF^K*nI5(?!RYrY%U#} zOULGG2k=NT-?qp1^W;6FppMNS{0?Am=-K7C(K=U`&ef%Jb?IDvEeTqr#}VpWT{>5n z&eb2-lHhsk^L`#T{HEZj;H=<^U^)d=CMpw^iON*>a!;gPPLfe@RB%>sMKCIpn^shr zs7zF*y4Nj`{X9uV!BN3k!4<)%Om13HWuh`sndNUb^tBI;|O(ZE*+ao$L4DX@JKSR+vEFr9HEZQrDOB8185yT zZn%!krDJpH*nI5(9!UnjT}#L2TCw7_1Gt}zj?JZGbLrT8?EoH0=4E?)KaW55bZjmi zo39-}>-cfQb!;vjn@h*$KhzyS>*wit+-RMvOXup+xw>?&E}g5dB|!`SIBT7&OXup+ zx%vZJ5`5J9yr0JnzbQB>I4ig!m`*{JiONJ}qB7NewkOgqC&?%{DmW{+A{dp)O)IKQ zR3<7@-B&G;{X9uV!BN3k!4<)%Om13HWuh`snd-jV6KR)|WE30~oE2OVjLPJu6;&oG z6P2m%hZe|wo+P8-sNk&NieOYGH?62LQJJVr^&jntw99cagMyQSi-H@1QJJVrR3<7D zm8t%-7RY{{B%|P@;G*D$U{of9R#cg&OjM@&ul7XRe9LTS`s{x%$xT3eja{Ol+M+qbM>_(XdORpxX#t3 zb9JryecdT|EeYOdcpRb5)unUwwIsOzp3%9wbgnL)tFI-&BguT-9^cQC_l$x%Hvbu0 z5*%7zJAn48IBw6i19;z`!}gSp&81`W2et!v)?QuvdECdFf}?`7f-8dQ6jYh0OjIT+ zQ{9U_k#;#rM!`|RS-};-s7!8JQDvesQJLyqwLtdsBpC%q1!o0U1fw#!X+@QZ%0y+V zd%GvnE+@$-I4U?RxFQ&p$xSP&OjIT+Q{B`8+0T^CTGsCj}P;Hw2?H8MLCxL}j8f)xX*k zX_u2^6r2=X6xfb(i3WvXR4GK;QE(&f4MrEQhQJJVr zRHph#lTmO|a8YnWFe;NlE2>OXCMr|iGfYP3>e9Kobgr%ypX0S8XjvYA?CD%xI#-v@ z)z^~Xkz`)A$M^F%LY=Ei=jv-o&^mtHaGk45=jzhA`dSh^k_>*kmd@3+V#RAoa6cKH zt4rtV(z*It5UrU14@#BUc%+<%Bj?JZG^PkR=;85n;0o;92 zTswff?I|6bOULHYvH1hr0esT>yq||}*SaY@rWI8tDif8d?xz;Wex4+w;HcoN;EG^WCO569GEteRO!c4aiL}dcGJ}GX zf{TJ1f>D{MOjIT+6P2m{ix$X!o+P8-q~N09hG0}CgH}|Ts7zF*`fv6`+T|n}1t$d; z1vdnvG8rCLZ1$(;VOyfMQQN3(_1`~uu7}UD1_dVt7X>#2qcTyMs7zEQDpUPWnv8;z zf{TJ1f>D_aT2W=9GEtf8KE-5i3XTfS3a$u7Wuh`snW#)urn)aR83jiLX9ZUTqcXW^ zMU{!lL}jY`R+CY1RB%>sMKCIpn^shrs7zF*x_6q4f}?`7f-8bincTFZ%0y+NGS&U8 z$tXA~I4ig!7?sIQE2>OXCMr|?rr zDw9Dgs!UWSDpUQpnv8;zf{TJ1f>D_aT2W=9GEtf8-)S-mP6{pxZU{zYGH6AWiONJ} zs{dJ&QE*alQE)>rDw9Dgs!UWSDs$}s+6(h=TX^jN?zX3NY`%5?_xq@0bLrSzIyPTB zfJc&f*B;-`!%vFRvAJ|?zIFhu&+S?gw00e~r*y6^ovW`U!TpBo zTwOX>m(JB6*plFR>+^mdzrt?{jtb5St_Y@6P-UVrQJJVrbuafs+T|n}1xE#E1y=;4 zGP!9*m5ItkWvYAK0@=@#WE30~oE2OVjLPJu6;&oG6P2m1-xFz@ zrWI8tDif8dZfk+;=SeaOjtb5St_VhDa?^?`6P1a|RR4TWq+O1a85EopTol|8jLJl1 zqB2pLs7&=QTOj*+l8l0rf{TJ1f>D_aT2W=9GEtf8U+;;u%Skc{P6{pxZU{zYGH6AW ziONJ}s_$DM`+1U#f|G)af*XQSnG9M{Wuh`snd-Mak#;#rM!`wJMZpchs7wZ}s4`KR zs7!UwTOj*+oQ#gmrDJpH*jy_<$7=`BGCYn@$L7+pxpZv4b^wng^SV90pT`mE*jzd` zUps)-@#BW;*jzd`myXTX4&aew@Y}U?Y_1h6UORyM$>`WzIyRS%&DRd#kz`)B$M^I2 zV^7EC(y{s40kn=EH(bZ&(y_S?#^&}EPS3;Vb}b27zYg0|I#-v@)unUwwIp~X8T>*o zovTad>JMy5@KNjYejdLSZVHYH&I+ywrc+R5qB2pLs7!UA?TNI@NiqtK3eF0y2u5Xc z(~2q+m5It!_f-pIKTncTa8z(sa78dGlbcplnW#)urn>L;MB3#f83jiLX9ZUTqcXW^ zMU{!lL}jY`p#`#^C&?%{DmW{+A{dp)O)IKQR3<7@{YQHu?Q)#Vpx~t7qTq&LR3<7D zm5ItkWvc(I1+t$f$tXA}xG1^-C^#xOE4U&UmB~#js!UWS zDpTFpEs*^@Nk+j@!CAo-!Kh4bT2W=9GEtf8-t39A%Skc{jtb5St_VhDa?^?`6P1a| zRQF>GWIs=mQE*gnR&YfyDwCU5RGFwuRHpim_e9#|IGI7gNx?RElR+!0OjIT+Q~lR_BJFaLjDnMb%R{g|h12u+xorT5}GzmGasm(JCtbM>_(cqExO?eYCQ{G=$It4rtV zYe~>Le%x@Kt4rtVTJ`(7Q}9|6ywC7BLY=Ei=jv-oaQ{7{b9L!lT{>4^OM*v|`MN#6 zpC|7b1$At`b^xv8#|_u9xpZtU9h;{8qRrI4U?R zxFVQNL6wQhL}j8f)xFpgX_u2^6dVD{MOjIT+6P2m{MGIsYiaTI#-v@)unTF zt@s?TB|*#b_+wA!>e9KobgsUZ1dk;1sy)7+#}VpWT{>4^OM=$%8T{>5n&ehkF z;E`nT+qHDAt`#d@OM?5!=v-YoSC`J!*OK6oWL~t#_w)E;Pv`2=x%yfXw2mJ)T*v0p zvAJ|?zIFhQB=fdCzMsbt>eyU5HeWk{*74(p>)2d6HkXdgAJ`7ylh)_`JZ|_+!BN3k z!4<)D3aU(0CMpw^sqTwCk#;#rM!`|RS-};-s7!8JQDvesQJLz#X@TtLNiqtK3eF0y z2u5Xc(~2q+m5It!_x+woyPPDW;HcoN;EG^WCO569GEteROm#oCK=$(_83jiLX9ZUT zqcXW^MU{!lL}jY~WKX1Bj*}S_oD^IX+z^b)L}j8fQJJVr^xC(@yC4} z6r2=X6xb}%u6dVrVlsn*lY)za z8-h`ps7zEQDif8d{!2|p!AZeI!41KvOa`r}GEteRO!ePtG73%#E(&f4MrAT+MU{!l zL}jXfr^zTdDYz)OAsCg(pcPdnDif8d{%1`_!AZeI!41KvOa`r}GEteR%(Vk(FU-Sj z;k5&}+n&;~`Pu>8@1u^*rDJpH*nI5(9!ch1dwf3+KPgJb=F+kG+5xnVA2(db=F+jb zR{g&26ufo-?=w7(P{-!dvH98o+<(vL*jzd`myXRJ{0^Ws{`5S43+P;3I#-v@)unUw zwIpbn9!IEib?IDPI#*vyf=80U@9EOHx^%Aoz?KBhTc7vy_^ohLa8z(sa78ekf+`c0 ziONJ}s(ZO7(k>^-C^#xOE4U&UmB~#js!UWSDpTF-7RY{{B%|P{;H=<^U{oeIt*A0l znW#*4{hmm>oFt>*sNk&NieOYGH?62LQJJVrbz2K$KTncTa8z(sa78dGlbcplnW#)u zruyf5BJFaV%%I?;;G*D$U{oe56P1a|L}jXf*#gRElR+!0OjIT+Q+?k8+0T-PIyRS% z&81`WwF7u0nb+;{{XC9P$L7+p`Pu=rjvqH%$L7+pxpZv4b^wnggWs;DV{@%o@!A30 zPe#Y)(y_U8Y`%5?k0kT5J-(mEAA34BmyXSUs5^kYPiL3o{^?v@I#-v@)unTF>0Es+ z30n5YS?gR~I#-v@)z^~Xk!0`-y>zZFovS~vCBa9n&-;1&R=6oRDmW{+BA8A=m5Itk zWuh|GeYPjkE+@$-I4U?RxFQ&p$xSP&OjIT+Q{7iBko`PKM!`|RS-};-s7!8JQDves zQJLz#+Y@P*lVlVe6`U1Z5sb>@rWI8tDif8d?uQo0ex4+w;HcoN;EG^WCO569GEteR zO!Xh_iL}dcGJ}GXf{TJ1f>D{MOjIT+6P2m{vlhsHo+P8-q~N09hG0}CgH}|Ts7zF* z`mgpx+T|n}1t$d;1vdnvG8wd@%0y+NGSz?A0@=@#WE7kfTol|8jLKxtiYgP8iON*} z!=6aHoFt>*q~N09hG0}CgH}|Ts7zF*x{q5R`+1zqO~FyYS-};-s7zEQDif87%2fCH zo=Cf#B%|P{;H=<^U{oeIt*A0lnW#*4U$;Q^^CTGsM+IjER|KOnxoJg}iONJ}s(Z61 z(k>^-C^#xOE4U&UmB~#js!UWSDpTE$Es*^@Nk+j@!CAo-!Kh4bT2W=9GEtf8Ki(5* zm*Zpx1t$d;1vdnvGEteROjIT+Q~l>Hko`PKM!`wJMZpchs7wZ}s4_W_*&BLxIc#*) zw)(Fh6h5q2gMyQSi-H@1QJJVrR3<7Dm8t%XCZph_;G*D$U{of9R#cg&OjM@&A2k^T zCj}P;Hw2?H8MLCxL}j8f*OH*UFb_Y&uO-3V_LR=m*OK6VA9b!SovTad>T5~xNHTBQ zi2c0;I$-ppW$(YI#-v@)z^~X{(DB}>N=RK zk0aEv`Onyr;85n;0o;A{Tswff?I|6bOULGG2XMdPIyRS%&81`W2et!v*804kho6si zQ*cypR&Yfyoq{S8m5ItkWvY9zC(OXCMr|is}{(9o+P8- zsNk&NieOYGH?62LQJJVrb#M1X+T|n}1xE#E1y=;4GP!9*m5ItkWvZK6Ap3cejDn+r zvw|yvQJLJdqRK>NqB7M#+Y@P*<75T}Cj}P;Hw2?HQJJVrR3<7@{fidJex4+w;H2Q9 z;D%sSCWBTyklFimb~)@{)HZ5c{i_Gh;P98OLBUDEMZpchs7zEQDif87%2fYWlTmO| za8YnWFe;NlE2>OXCMr|?q{%2aDYz)OAsCg(pcPdnDif8d?inVdb9L!lT{>6SiqG*{ z60|IjzmRmUE}g4O=jv-o@JKSR+T;6q9HGwDrE~SQBxoH!Zn)0XrE_)ZTzxGG9!Unj zT}$WcTCw7_B)Ff9&ef%Jb?IDvEeRe;=0$saKaW55bZjmioBwo{1cx%$4xoj7+@5O( z@V-BX?I|6bOULHYvH98o+3N8w62u5WxXhoHY z%0y+V|4EZka8htla6>RElR+!0OjIT+Q{AVS%uT^j!CAo-!Kh4BCMpw^iON*>r6!}` zsNk&NieOYGH?62LQJJVrb>C_-3XTfS3a$u7WpdMsDif87%2fAGlTmO~a8__dFe;Oq zR#cg&OjM@2pEVf;M+IjER|KOnxoJg}iONJ}s{a&|85EopTol|8jLJl1qB2pLs7&== zYBCB=3N8w62u5WxXhoHY%0y+V|5lSxa8htla6>RElR+!0OjIT+Q~f(lM!`wJMZpch zs7wZ}s4`KRs7&=gYcdK>3N8w62u5WxXhoHY%0y+Z9YA|w9`13k9l+i8l#b2U4&Z(t zb!;vjn@h*$YX|U1GVj{s`+4|DQ93r4j?LE&pmqGX;W{>#j?J~|_jRY>wF7vc;cX>B|+=gVS7sF>e9LTS`yrExX#t3b9L!l zeJu$dNd~{COXup+x%vZJ5Rz`%_VXke1xE#E1y=;4GP!9*m5ItkWvc7D{=w4%yHWuh|GKi?B+m*Zpx1t$d; z1vdnvGEteROjIT+Q~k>p$bOzAqu`|AqTq&LR3?K~RGFwuRHpjZdm`;}l8l0rf{TJ1 zf>D_aT2W=9GEtf8`xeN4o+P8-q~N09hG0}CgH}|Ts7zF*`fX37T~3lwa8htla6>RE zlR+!0OjIT+Q{D3x$bKFtqhoXF*jzd`*NV^a+5xl-k0aEvxpZtU9he9LTS`s{xOy3^g&*KPnt}dOc zuO&h2_;JH^t}dOcOXunjY)SA@>+^mdH~gmHsNk&NieNegRVFGEm5It!_t~CEyPPDW z;HcoN;EG^WCO569GEteROm$ziK=$(_83jiLX9ZUTqcXW^MU{!lL}jY`Zcn6LPLfe@ zRB%>sMKCIpn^shrs7zF*x*u8~`+1U#f}?`7f-8bincTFZ%0y+NGSz>yC(c83(X_u2^6r2=X z6xOXCMr|?4|^i*a*~XKlY)za z8-h`p3|diTqB2pL>OO9P?B{VZHw8xpX9ZUTqcTyMs7zEQDpTF(dm`;}l8l0*g0q4v zf>D{=w4%yHWuh|Gecb}t&y!>n92J}uToH`QCMpw^sqW35NV}XQqu{9Etl)}Z zR3RE6P1a|L}j8f)xXhX6r2=X6xe9LTS`yrU&*<1(IyRS%&DRd# zkz~GZkMHNndqzPWo39-}>-cfQb!;vjn@h*$YX|U1GWa!IIyRS%%^%nf;92YQejdLS zZVHYH&I+ywrc+R5qB2pLs7!S)_C(s{BpC%q1!o0U1fw#!X+@QZ%0y+Vd({Hj&y!>n z92J}uToH`QCMpw^sqXEbNV}XQqu{9Etl)}ZR3w@h`bNtaJ=+2u5u)XvG8D!{->4iON*}>OngXf9V<&oD^IX+z^b)L}j8fQJJVr z^=~y91t$d;1vdnvG8wd@%0y+NGSyF-jDnMbi-H@1QJD-{QDvesQJLzVVKO>bm(JCt zb9Jrw9Iquo%kuaON$2X)xw>?&zLo@!B=f30zMsbt>ReqqS6@ql*74(p>s(zrSC`J! z*OK6oWboUybgr%yD_%>2`^o5BT{>5n&ehkF;E`lrw8!`J_+wAU=F+kG+5xnVA2(db z=F+jbbZowM0FNZ|wmrU|#}Vq-Tsk&iJAl^lb_}#?B_``3XTfS z3a$u7WpdMsDif87%2fCLo=Cf#B%|P{;H=<^U{oeIt*A0lnW#*4Kea&i^CTGsM+IjE zR|KOnxoJg}iONJ}s{dq9q+O1a85EopTol|8jLJl1qB2pLs7&==v_SUrB$sMKCIpn^shrs7zF*x^FcZ1xE#E1y=;4GP!9*m5ItkWvY9p z$tXA~I4ig!7?sIQE2>OXCMr|i&zg*aqk^-7D}qs(+_a*~L}j8f)qje~3<^#PE(&f4 zMrEQhQJJVrRHphbH5mmb1s4T31fwz;w4%yHWuh|Gf2+wTI4QU&xFHyo$)FWgCMpw^ zss5cNqu`|AqTq&LR3?K~RGFwuRHpi$H5mmb1s4T31fwz;w4%yHWuh|I4xqg-5BIp& z4&ZKkO2_7F2XMcSIyRS%&81`WwF7u0nRo5+{XG1nC>@(i$L4DX&^mtHa2=aV$L3n~ z`?^!`+5x=J@Hj#pn@h*$4}J&G-V&$haievvE}g4O=jzhA`dSjSOphbfxw>?&E}g5d zCBY-f=#L0GSC`J!*OK6oWbk{sbgnL)t3R+M!SmMV{XG7Vx+yp+I4ig!m`*{JiONJ} zqB7OJ+!JY+lVlVe6`U1Z5sb>@rWI8tDif8d?sW@fKTncTa8z(sa78dGlbcplnW#)u zrn-Jlq+L#uQE*gnR&YfyDwCU5RGFwuRHnME1+t$f$tXA~I4ig!7?sIQE2>OXCMr|? z^F5JvIZkF!a8htla6>RE6P1a|L}j8f)xT_k?B_``3Qh_x3T_BSWin_*m5ItkWvYL@ zC( zDYYj09wb78?Iw>>DXL4HeWk{N0PyB*V3`MR;+mK0PZKF zV{_@)Tsk)Yq3!@$KTpr&4=0_gOXup+xw>?&E}g5dB|!`SIBT7&OXup+x%yfXJd#Y` z9^cR72z9P5ovW`ULF@Q&!*#AMovTad>JMy5@KNjYejYdcrr@aHtl)}ZIt5iGDif87 z%2fB+o=Cf#B%|P{;H=<^U{oeIt*A0lnW#*4U$sE?^CTGsM+IjER|KOnxoJg}iONJ} zs{3wFq+L#uQE*gnR&YfyDwCU5RGFwuRHnKgS|Iy*l8l0*g0q4vf>D{=w4%yHWuh|G zf3zpkF2~6X3Qh_x3T_BSWuh`snW#)uruxrXAp3cejDnMbi-H@1QJD-{QDvesQJLz$ z+7oG)lVlW}6kHVC5RA%X(26P(m5It!|6L1YKTncTa8htla6>RElR+!0OjIT+Q~eKn zBJFaLjDnMbi-H@1QJD-{QDvesQJLyKZh`FQaWXdrM+IjER|KOnQJJVrR3<7@-RFBE z?Q)Wgf}?`7f-8bincTFZ%0y+NGSz+E0@=@#WE30~oE2OVjLPJu6;&oG6P2m%&7MfR zoFt>*sNk&NieOYGH?62LQJJVrbw9R1_VXke1xE#E1y=;4GP!9*m5ItkWvc&pPo!Or zlNl786kHVC5RA%1Wuh`UkZJuqJr5flwXOd12bB*i)}Y{|;G*D$U{oe56P1a|L}jY~ zT9Z+5QgBglLoh0nK`W|ER3<7@{Toe2!AZeI!41KvOa`r}GEteRO!Yr%G73%#E(&f4 zMrAT+MU{!lL}jieL3?2ye!E^vg1hZ0ovW`U!Tmn!TwOX>m(JDKlHieK-n7T}^YD|R zbgnL)tFI+N>-cfQb*?U*t83No>rTOIN$@_y;|LGt>SIvH=09Ugf)2d6HkXdg*AC#3WbkXabZjmin?JA}z_Zrp{XG2Us+)qNg0q4v zg6R}gnW#)uCMr|ii#?HcIY~yrQNdZk6~U-XZdy@gqB2pL>Rz=#_VXke1xE#E1y=;4 zGP!9*m5ItkWvY9-C(OXCMr|i)B@ShlVlVe6`U1Z5sb>@ zrWI8tDif8d{@I>LyBsGoC^#v&D7YaQm5IvaK&G|n^gQfe)HZ5c{fh@r;qaHPLBUDE zMZpchs7zEQDif87%2fYKlTmO|a8YnWFe;NlE2>OXCMr|?TTMp6Nx?UrU14@#BW;TwOX>m(JDKlHieK@Y}U?uC5g;UQ2@e z$sEkp$8Rnjn@h*$KbDE@%=pf04N=s zOULGG2hcix+;AP6OULHYvH1hr0esT>yr0JnzbQB>I4ig!m`*{JiONJ}qB7Neu_w|l zC&?%{DmW{+A{dp)O)IKQR3<7@-8U_e{X9uV!BN3k!4<)%Om13HWuh`snd-jZ6KR)| zWE30~oE2OVjLPJu6;&oG6P2m%rxwV5o+P8-sNk&NieOYGH?62LQJJVr^`GpCw99ca zgMyQSi-H@1QJEabH2c%@uq{#BsBP4?`Y#?l*Td&ngMyQSi-H@1QJJVrR3<7Dm8t$4 zO-8{r zDw9Dgs!UWSDpTF3n9NPVQNdZk6~U-XR3<7Dm5It!_oXJI;HcoN;EG^WCO569GEteR zOm*LCG763g&I+ywMrCr-iYgP8iON*>PLok^RB%>sMKCIpn^shrs7zF*x}P-}1xE#E z1y=;4GP!9*m5ItkWvc%alNl786kHVC5RA%1Wuh`snW#+lUurT6P6{pxZU{zYGH6AW ziONJ}s{dA#QE*alQE)>rDw9Dgs!UWSDpUPCO-8{i2c0;I#vIpW$(YIyRS%%||4^OM?3i*SWfMt}dOcuO-1F$>@&=I#-v@)z^~Xk!0|Dx^%8CovS~v zCBgI7=lwkXR=6oRDmW{+BA8A=m5ItkWuh|Gz1$ONmy=`^92J}uToH`QCMpw^ zsqS?PWIs=mQE*gnR&YfyDwCU5RGFwuRHnLqPo!N=l2LF}a8__dFe;OqR#cg&OjM@2 ztp&25C&?%{DmW{+A{dp)O)IKQR3<7@{qsGMb~#RFP;gRkQE)>rDif87%0y+NGS$Cq zf$Zl=G73%#E(&f4MrAT+MU{!lL}jXfy(iKxC&?%{DYz)OAsCg(pcPdnDif8dzHfo- z=SeaOP6{pxZU{zYGH6AWiONJ}s^9iR+T|n}1t$d;1vdnvG8wd@%0y+NGSxkAf$ZmT zGCDSwj?JZGbFKIsuN^?k@Hj#pn@h*$(y{s40X&k->-PA59!IESbLrT8?EqTGj~lLI zbLrSzIyPTBfJc(SZ`abXxmK)r?Evm4qhoXF*jxu=b9)M>=i&SLS`xH=9k!=*t}dOc zOXuoqN$^NA`XhqQ)unUwwIp~XnZ7-~pT}=5ovTad>T5~RI)2=6ovTad>e9LT16vY& z)cU-i#|^(JI4U?RxFVQNL6wQhL}j8f)qS=n(k>^-C^#xOE4U&UmB~#js!UWSDpTE8 zEs*^@Nk+j@!CAo-!Kh4bT2W=9GEtf8zS|RNmy=`^92J}uToH`QCMpw^sqTjs z$bOzAqu{9Etl)}ZR3#2qcRz^qRK>NqB7Ng*8`JPC-oFt>*sNk&NieOYGH?62LQJJVrbziqY_VXke z1xE#E1y=;4GP!9*m5ItkWvY9#C(OXCMr|ik1de>JV{2u zQNdZk6~U-XZdy@gqB2pL>ObBSX_w<<1_dVtmxo|`3a97sbK4$PIs~J(QQN3(4s4H~ zqsmnO`GYncR;)q6Nx?>oJp6XOmIQa( zQ#w~)OM?4-)VaEJt}dOcuO-1F$-HTg@8{tsMd@5!I#*vyg4XflhU;8iI#<`K-`Aaj z*OK6UhQ|@=*jzd`Ups*N?-?DNOULHYvH98oJd(`U?eYCQdCw@QWAn8GXdORpxQ@-G zV{_@)eC+@pNd~`$OULHYvH1hr0X%Dc-p}K=!cD*sNk&NieOYGH?62LQJJVrb+1|=`+1U#f}?`7f-8bincTFZ%0y+NGS$7^6KR)| zWE30~oE2OVjLPJu6;&oG6P2lMYJu$MNiqtK3eF0y2u5Xc(~2q+m5It!|7=gBU5=9( z6r3J{t@7!4{7WtmD;GP3Z4PV?pJP-eDpUQ72mL(!rE5@dQgBglLog~6m5Itk zWuh|GztUtBoD^IX+z^b)WYCH#6P1a|RR30!QE*alQE)>rDw9Dgs!UWSDpUQW$tXA} zxG1sMKGO$Dif87%0y+V`(jU|T~3lwa8z(s za78dGlbcplnW#)urn+xhAp3cejDn+rvw|yvQJLJdqRK>NqB7NezbDczC&?%{DmW{+ zA{dp)O)IKQR3<7@-A^r${X9uV!BN3k!4<)%Om13HWuh`snd(2;6KR*@WQK=e`wLFb z<4V)RO2^=$;D%t-HV3wc&oL?!m5It!|HXsGA3nz#6r2=X6xVf|G)af*XQS znG9M{Wuh`snd&~pWNr$M3eF0y2u5Y1GEteROjM@2FEtqjM+IjER|KOnxoJg}iONJ} zs{2-xQE*gnR&YfyDwCU5RGFwuRHnLjnv8;@g0q4vf>D{=w4%yHWuh|G{jA9-I4U?R zxFQ&p$xSP&OjIT+Q~jry%%I?;;G*D$U{oe56P1a|L}jY~Qj<||QgBglLoh0nK`W|E zR3<7@{kNKof|G)af*XQSnG9M{Wuh`snd;wZG73%#E(&f4MrAT+MU{!lL}jY~S(8z4 zQgBglLoh0nK`W|ER3<8O?Eu;f^Kip{?Evn!r*v$-b^!PLsAF^K*jzd`Ups(Dl6lu2 z-_OHOiqf&UbZowM0IlQ44cD=`bZo9wzppz5|3G&Dt?{SlaUwcbm(JCtb9L!leJu%E zrpFQLTwOX>m(JDKlHieKzHN{1=W&EOSC`J!*OH)h{J7ydSC`J!rE~SQBzPnl{GKkI zt4rtV4{S;By!ClMkKYP61xE#E1y=;qDX210nW#)urn;AVBJFaLjDn+rvw|yvQJLJd zqRK>NqB7OJZh`FQNiqtK3eF0y2u5Xc(~2q+m5It!*YAn6%Skc{jtb5St_VhDa?^?` z6P1a|RJXN2_VXke1xE#E1y=;4GP!9*m5ItkWvYL^C(-cfQb!;vjn@h*$YX|U1GWhLUIyTpe75`9o0Ii>==kZ%W=jzhAx^%8CovTad>T5~R z!avSh=jzhAx^%9-mIRL^qdy|(TwOX>UrT~VlIh#y`+5B4(z&{HuD+H8t>ecH*SWfM zt}dOcKd>diN3GBMdED@uf}?`7f-8dQ6jYh0OjIT+Q{88KBJFaLjDn+rvw|yvQJLJd zqRK>NqB7Ne)dJbilVlVe6`U1Z5sb>@rWI8tDif8d?z=sab~#B#!BN3k!4<)%Om13H zWuh`snd*LMf$Zl=G763g&I+ywMrCr-iYgP8iON*}(Vj@V949jOX6N?B_``3Qh_x3T_BSWin_*m5ItkWvc&bPo!N=l2LF{a8YnWFe;NlE2>OX zCMr|?cP)_pJV{2uNx?D{=w4%yHWuh|G z{n!H8&y!>n92J}uToH`QCI>QmL(eXUjgHz@|M7#uhZSp3a8htla6>RE6P1a| zL}j8f)qk$ZC^#v&D7YaQmC2wLRVFGEm8t$~O-8{0Es+2_8x2O?!Ml4?ihN=jzhA`dSjSjvqH%=ju9`tB)(L`hDFg z_@}ZYIFz||0C!(K*AC!rdrHUV(y{s40o-r6j?JZGbLrT8?EoH0Mt=g(vAJ|?zIFhQ zB!geWrDJpH*!+R*0G_oz@8{vq6m?T@RB%>sMKGO$Dif87%0y+Vd$A|dE+@$-I4U?R zxFQ&p$xSP&OjIT+Q{Af;$bOzAqu{9Etl)}ZR3%-*N7%VGbbwo%*apFMa6hre_U z3Qh_x3T_BSWuh`snW#)urur9}jDnMbi-H@1QJD-{QDvesQJLyrX)+2<3N8w62u5Wx zXhoHY%0y+Vf2+wTI4QU&xFHyo$)FWgCMpw^seaOA6r2=X6x0DhpSC`J!*OK6oWL~w$_wzVHovTad>T5~RI)2=6 zovTad>e9LTS`s{x41T+oj?J}V#Xp@T!Qt!i+5y~sQCvHKyX`3*n@h*$(y{s40X&k7 z{sf?7bLrT8?EoH0=52d?KMy~eOULHYvH98ow2mJ)T*v0pvAJ|?{=jwspR_*j=W)Yt z3XTfS3a$vIQ&451GEteROm$!EiL}c}G763g&I+ywMrCr-iYgP8iON*>O$%f{Pm)n^ zRB%>sMKCIpn^shrs7zF*y6^Wy+T|n}1xE#E1y=;4GP!9*m5ItkWvctB1+t$f$tXA~ zI4ig!7?sKGVZ~kl>~h$asBP3XYFqs$51#7bbF4wZNx?#2qcRz^qRK>NqB7NgugNGlDYz)OAsCg( zpcPdnDif8d{wGaF!AZeI!41KvOa`r}GEteROm&}PGB*WB1!o0U1fw!hnW#)uCMr|i zmzs=%qk^-7D}qs(+_a*~L}j8f)qShUC^#xOE4U&UmB~#js!UWSDpTD%O-8{{!CAo- z!Kh4bT2W=9GEtf8e%53Z92J}uToH`QCMpw^ss2+;W>9caa8YnWFe($3iONJ} zqB7NgsmUlfDYz)OAsCg(pcPdnDif8d{##8(!AZeI!41KvOa`r}GEteRO!e#2qcRz^qRK>NqB7P0tjQ=iDYz)OAsCg(pcPdnDif8tb^z^#dHDA}t{uSL_LPpz z*AC!*A9ZXl9h*zX=4%J=NHXu*i2c`5Nyx& z^gNWfmISR|hwUkyt4rtVYe{gw;W}5B&ef%J^|d5;B$;p95Te>T5~RI)2=6 zovTad>e9LTS`s{x%){^L;|O)GE}g4CuqDCs*5~~^?&D3tQNdZk6~S~0s!UWSDif8d z?&Y3HyPPDW;HcoN;EG^WCO569GEteROm(kYAp3cejDn+rvw|yvQJLJdqRK>NqB7O> zdm`;}l8l0*g0q4vf>D{=w4%yHWuh|GZ7q=fJV{2uQNdZk6~U-XZdy@gqB2pL>Ywk4 zw99cagMyQSi-H@1QJJVrR3<7Dm8t$^3uHe}l2LF{a8YnWFe;NlE2>OXCMr|?>phWn zIY~yrNx?RElR+!0OjIT+Q~kCl(k>^- zC^#v&D7YaQmC2wLRVFGEm8tG|3uHf!lhLucbZjmin`_1Ac!n@h*$(y{s40X&ine!G^A&9y$P*q*}adHAZi zmISR|hwUkyt4rtV(z*It5XJ92|j9l-p}KP-xM4boE2OVOsAmAL}j8f zQJLyK+Y@P*lVlVe6`U1Z5sb>@rWI8tDif8d?yDBaex4+w;HcoN;EG^WCO569GEteR zOm*MwiL}c}G763g&I+ywMrCr-iYgP8iON*>Lkna-Pm)n^RB%>sMKCIpn^shrs7zF* z`j7TR+T}QzLBUDEMZpchs7zEQDif87%2fYZ3uHe}l2LF{a8YnWFe;NlE2>OXCMr|? zS9>Dua*~XKlY)za8-h`p3|diTqB2pL>c4A&?B_``3Qh_x3T_BSWin_*m5ItkWvc&S zPo!N=l2LF{a8YnWFe;NlE2>OXCMr|i$1RZkJWl4O;HcoN;EG^WCMpw^iONJ}s{4FT zq+L#uQE*gnR&YfyDwCU5RGFwuRHnMGTOj*+l8l0*g0q4vf>D{=w4%yHWuh|Gz1b6K zmy=`^92J}uToH`QCMpw^sqV)X$bOzAqu{9E{1Duq!`bEdxvdW?9fDEY+_a+F z=D_y&IjT(cA3x~QVZ|C0oD^IX+z^b)L}j8fQJJVr^`C1p3Qh_x3T_BSWin_*m5Itk zWvc&LlTmO|a8YnWFe;NlE2>OXCMr|?8%;*RNx??&zLo^7!n@h*$(y{s40X&inehrt7&81`W2et!v*804k z$8Uw3f}?`7f-8dQ6jYh0OjIT+Q{9U_k#;#rM!`|RS-};-s7!8JQDvesQJLyqwLtds zBpC%q1!o0U1fw#!X+@QZ%0y+Vd%GvnE+@$-I4U?RxFQ&p$xSP&OjIT+Q{B`8+0Tw@h>?)taJ>n2u5vl(~1YShtDx86P2m{*@Jc-{?aulI4QU&xFHyoiONJ} zqB2pL>R)Iw3Qh_x3T_BSWin_*m5ItkWvYLr$tXA}xG1fa8htla6>RElR+!0OjIT+Q{6L6M(66%xw>?&t`(o- zwIpa+9{&)hb9L!lT{>4^OM*v|dDR}@&*KPnt}dOcuO&h2_;JH^t}dOcOXuoqN$^NA z`0ZLcHrI+3uN}bsWOQsU9h*zX=4%J=NHQDYYj09wb78?Iw>>DXL4 zHeWk{N0NEl9^cR72z6{O9hfUKG3XTfS3a$u7WpdMs zDif87%2fBWCZph};H=<^U{oeIt*A0lnW#+lpJFnDf|G)af*XQSnW#)uCMpw^ss2k% zM!`wJMZpchs7wZ}s4`KRs7&?WYBCB=3N8w62u5WxXhoHY%0y+Vf2YYPI4QU&xFHyo z$)FWgCMpw^ss3k8M!`wJMZpchs7wZ}s4`KRsLZtkXfMpezxQ$N0PeP@bZowM0QdW- zV{_@)Tsk&iJAg-$dDkA_&%;lO(y_U8Z2sVP0DD8vF2{}5xw>?&E}g4u)i3l;L6wQh zTuXxXYC3%NTuXwx?J1qBOXup+x%yfXJd(_}?eYCQe1(_J)unUwwIpaAKW@0r)unTF z>0Es+2_8uXzlKZa>e9LT16vY2Z++g+TNV}XQ zqu{9Etl)}ZR3D{=w4%yHWuh|G^?M@ia*~XK zqk^-7D}qs(+_a*~L}j8f)om@1{X9uV!BN3k!4<)%Om13HWuh`snd+bKiL}dcGJ}GX zf{TJ1f>D{MOjIT+6P2m{Wea3KPm)n^QgBglLoh0nK`W|ER3<7@{p&rEb~#B#!AZeI z!41KvOa`r}GEteRO!a*WWIs=mQE*alQE)>rDw9Dgs!UWSDpUQoC(eyU5HkXdg*AC#3WL~$& z_wzVH9h*zX=4%JgI)2=69h*zX=F+kG4|NC7`gwXDH@d?w%hI{JbgnL)t82yQcr6K9 z_{Ul6TwOX>m(JDKlHieKUbe^g^Eg7Ct4rtVYe~>Le%x@Kt4rtV(z*It5al>`4E}g4O=jsn?N$~GOtKfv-(`O34Q1F$4Zy$h<{)v+p!}Q=U zJO-aUQ}Bg?uM~W%;Dq3xt>}&${#0e2e1g_bzEJQR1;1DDCj_55}){*2(2%=<>2eD?evlX^ATEKOM>@}I{DbUmIS}{=cGL!(_*TIQ!4GTFe1_InGVdF8@nAT2e63)w;D+FbmCUsR_%-(9Pl~5s>5Jmp0o?85$J)ow75rMkHwylU;Po2? z-Z$#xJ@b1^=9)BrjpihoR}Ws{kN%01O27M2^os5uF}gpsWIlQDB02u0uiq%}zEQ{R zd3yaufxEBpPw{2;^h*VGu73JXEB^fdvv)Vil9O51w)e7Xw`&LR_lrEa9$jes z?MwUx@IRT%wF9`B^$!~1wF9_$kI(fUzgF;nuxYByzp2diHwwH;{p2_9U-(0D{VnOY z@9`zxLEM~p?EoHJ)XBeaa?#h4;P3Z!d_Dg*KDf$#Q$H$T_clHlg`TuXx6*YjHa2u|4{t$>g9hN zC*NGU(766v1#e&YwFCJ3{T%<8T|0oAKRwqD;O6yQJAm8Q^IA1cmAU>#f!jY6?W>pn zaUB0@zW!l>+xPhSKQ8b#c0-|y%6r|0^g9=Q3_bNxN*H?QY!{P(P1|1`nPPvMWRuK6Fw z$;b7#e-N*pPC!oPs-l0t$dh|~sTcmAUq!EE{u(ge{X_Aezn!^u0Dr&n zoncm}93jUzruL}N&;I$-pbx|i-UrU0&-_P;&Tz{j$&7YosiT_cEtBT(I34i%2 z;eQ+_ABF$?DtaaJzciUfmjs=HgMyQS3xZLZs7zEQDif8d=JS7iPG3D8e_T5S2L&eu z7X+g+QJJVrR3<7@&9|D2f`fvSf(wFCnRGf)Wuh`snQDI0WE30}oD^ITjLM|bi7FG7 ziON*-yC$RHpx~t7f?!l8olaDls7zF*+V?P-UcphpS-};-s7zEQDif87%2fNgCZph} z;H=<^U{of(PE?twOjM@YZ#5YOM+IjER|KOn>2;#YL}j8f)&8W(C^#xOE4U&Ul}WD? zRVFGEm8tf3O-8{{!CAo-!Kh4nov1QVnW#)P?_)BZf`fvSf(wFCnW#)uCMpw^spbn! zM!`YBNx=ods7yMYs4`KRs7y8AX)+293Qh_x2u5Yn=|q)@%0y+V`B{@ua8Pi12tIf( z|NJi;@AQ_3lMcbCZ91K(wmGmpevc|s%^&}KJ9Rj*It2#>Cj}P-qcTyMs7zEQDpT$I zm`tzWsNk&NieOYGDif87%0y+V{X&yba8z(sa78dGlU^sPOjIT+Q|)(}jDn+rvw|yv zQJM5QQDvesQJHFg)?^eM6`U1Z5sb>D*NG|e60a+N-Z6!JTA&-d^9&!`~F8wYju5Ups*9 z#*Z&tYjbIBu0_AE8wIZ&z^e?8Bh=blTAQyO!0peB*5=aMTw0s29l)JrzS~~k&y&xL zf?Aue9l&l38ZNEPrM3Ar+X3i5mD(vdC^#v&Aecr$m5Itk zWuh|Ge7SuB_Vf6cRHxve;H2P!U{oe56P1a|L}jY^eoth3I7vpqLBUDE1;MCHI-RI8 zQJJVrHNR|u?B_``3Jwp!ee~JG@gF%ooOBE>2u5ww>BIxu!}l1KiON(nKDf@qKe{>v z2L&eu7X+g+QJJVrR3<7@?FX1lui&WQtl)}ZR3<7Dm5ItkWvcyBlTmO~a8__dFe;N? zC#p-%{eq4w(1UVSYIwi`dbaIMXywYju5Ups(1$>6tZX>G0rCtf>%+sSBcF0IX_ zwfWis+)3uk?e+aU{* zpx~t7f?!l8olaDls7zF*njf}6_VXke1qTHu1s4RPGU;@p%0y+NGS&RLC$c@9B=Zp5 z{tc(+@ucD5q+@VWa6vF?n@%UHOjIT+Q_Y_bF8=r)I|T;?Cj}P-qcTyMs7zEQDpTz< zOr}?GRB%>sMKCH8m5ItkWuh|Gex=DMI4U?RxFQ&pNv{)CCMpw^srCm=M!`|RS-};- zs7!jDs4`KRs7$rLYBCCr3eF0y2u5Yn>qM1_%0y+V{Zo@sa8z(sa78dGlU^sPOjIT+ zQ;q(wt#%3y3Qh_x2u5Y1GEteROjM?tukka}DL5!NDYzgQm5ItkWuh`snQDI2WE30} zoD^ITjLM|bi7FG7iON*-n2;#YL}j8f*A8I&!94t{Qr8aP=Jk};=4%IV`yRD6m)7Re+Wgw@0Je)iJr6(lrMT5}G zCz&6&*Z1?}GozsP>T5}`-T3i^Yp*Wt)up}qS`yqz2ET?&dv$5Ae$AEyFSdK$&*P6m zr{JLAq~L;J8UD`tI#Fe!GEtdoUT%Tx=SeaO z4hl{RE(k_t(&o+P8-sNk&N zieOYGy-rk_s7zF*+I3H4dpJo(!BN3k!4<)%OnRNDGEteROf@gIK=$)E8LiEwwYju5 z*Mjfy+5v1C9!IFPxwJNy*5+#ma3`6U+w1#z9HG|c(%Ss5x&zqn>FnY7{*s?#)T6=YAudYSE&>ID>CBdre62Qnk@<5+wOTkk1xDa za8Phka6vGQf+`c0iONJ}s`-3RWP3PCM!`YBNx=ods7yMYs4`KRs7y8AZh`FQNiqr! z3Qh_x2u5Yn=|q)@%0y+V`DssNdpJo(!9l@E!3DvnOgf#YGEteROf|o6f$Zl=G71g~ zP6{pvMrG3JM3srkL}jXdZ%<@NqB7OIzXh_N$H{aG4hl{R zE(k_tqB2pLs7zF*nlJW5wuh5s6dV+s6kHID%B0hYDif87%2e~+7RY{{B%|P<;H2P! zU{ofZPE?s3$m|z-_HcO7QQK;MelYlOVs#1*3Qh_x2u5Y1GEteROjM?tKQtKy2L&eu z7X+g+>2#vXL}j8f)xM9(^a_p&&I+ywMrEQhQJJVrRHoW5G#Ld)1!o0U1fw$Pb)w2d zWuh|Gey7POI4U?RxFQ&pNv{)CCMpw^srF}0M!`|RS-};-s7!jDs4`KRs7$qgXfg_p z3eF0y2u5Yn>qM1_%0y+ZCBgQCdDs=MCBe<>DecwQlHm3|YOk(?UVZq3TUwj{mn{hn zWv(5-&7YoY2XOOxN^5g1`hDFfccAp3WW)?=NZ_wXNot2k+qUkFHL^LBUDE1;MCHR3<7Dm5It!Giovl z4hl{RE(k_t(&qM1_%0y+V{a%w%a8z(sa78dGlU^sPOjIT+Q|&LBjDn+rvw|yvQJM5QQDvesQJHE- zO-8{{!CAo-!Kh4nov1QVnW#)PA7C=tt4n)zX|JvY-{Z9;*s?q>KH95Gdv$5AzLo@c zlKFmneLs&Q)Y@EHoBw;31cx%$4qyxW_*px~t7 zf?!l8olaDls7zF*njf}6_VXke1qTHu1s4RPGU*;p-1W~M4zDF@8?}wvR`ctFw|e*< zt5a}La8htVFe($3iONJ}qB7O|smUlfC^#v&AQ+WNrxR5sDif8d_8BJAD>y1RE4U&U zm5ItkWuh`snQFh%WE30~oE2OVjLM|fi7FG7iON*_gC?WksNk&NieOYGy-rk_s7zF* z+Fvyp1xE#E1y=;4GU;`q%0y+NGS&X6$tXA~I4ig!7?nw{6ICWE6P2mvIVRI7I4C$N zxF8sniONJ}qB2pLYQENF6dV+s6kHID%B0hYDif87%2e~CCZph>;H2P!U{ofZPE?tw zOjM?t-!vHo2L&eu7X+g+>2#vXL}j8f)%>N&C^#rMDYzgQl}V=)RVFGEm8teQCetf8 zDmW{+A{dp4%0y+NGEtdozt&_F92J}uToH`Qq}Pcm6P1a|RQsbQqu{9Etl)}ZR3^Pn zRGFwuRHoYBG#Ld)1!o0U1fw$Pb)w2dWuh|G{-wz%I4U?RxFQ&pNv{)CCMpw^xpn~C z59Z-tFT8dDH?OC(HeWk{+xMuoxwJNy*5;!f!1i8G&*RU^wIq0TVTadK+N(=@^|d6} zen5{eTzhqCudYSE&>ID>CBesvY#i(C^#rMDYzgQl}V=) zRVFGEm8tf{p2+raoJ_CasNk&NieOYGDif87%0y+V{bmbfKTncTa8z(sa78dGlU^sP zOjIT+Q|-$=k?r9m83jiLX9ZUTqcZ7rqRK>NqB7OCTOj*+l8l0*g0q4vf>D|DI#Fe! zGEtdo*FBN#;UpOaM+IjER|KOn>2;#YL}j8f)x6jO+0Wx-v^JO4=F-|+3%Hpf>NL&mIo{$ZJWkUDx6Dl=kYy0ll9 z_Uda%a3`5|dwoBTBh+49+N-Z6!FJ=v7p}d!v{#q*>ep;Z@ZNUM`+0ofoq~gclY$F^ zX%tkMs7zEQDpSqpdm`JzNiqr!3Qh_x2u5Yn=|q)@%0y+V`F0CrKTncTa8Phka6vFC zlTIh9OjIT+Q_W9%BHP1BG71g~P6{pvMrG3JM3srkL}jY^eG6niPm)n^P;gRkK`<(l zPA95NR3<7@?R$G7+rx1(y@I2Hvw|yvQJJVrR3<7Dm8tggEs*^@Nk+j@!CAo-!Kh4n zov1QVnW#*)-|mTQ4=2eeI4U?RxFQ&pNv{)CCMpw^srIKWko`PKM!`|RS-};-s7!jD zs4`KRs7$rL?}=;=C&?%{DmW{+A{doPuM<@!Dif8d=KU>@{X9;lQ*cmlQgA^qDif87 z%0y+NGSz&sC$c@9B%|P<;H2P!U{ofZPE?twOjM?t@3uhp^CTGs2L-2x;Qk)Y9**DJ z@^I227`08O6V)~cw#V;LWvco4!7Uw5tWLo}!AZdd!Kh4BCMpw^iON*-hbE)opx~t7 zf?!l8olaDls7zF*+V?S;UcphpS-};-s7zEQDif87%2fM>CZph};H=<^U{of(PE?tw zOjM@Y?=%?&M+IjER|KOn>2;#YL}j8f)&8u>C^#xOE4U&Ul}WD?RVFGEm8td*O-8{{ z!CAo-!Kh4nov1QVnW)UQB-nm154*y(B)EA!rM>!E65PH=t<9yixwJN4JAgaM{Jg!s zpNGFGN^5gzZN7E@+l?PzxYp*<+FXl%UpER~JAhXi9!IFPxwJN4JAm7t8LiEwwYju5 zUps(1$$YoHzMm(b83naAUps*9#*Z&tYjbIBF0IYi4&Y8Q_%&Qwn@el+YqkUUV7ur2 zJpL$j3JwZR3N8qyQBY-~GEteROf_HbiEIxi$tXA|I4QUw7?nw<6ICWE6P2mv`z?_D zJV{2u;UTz>K6^O+Bd3Rxj==@NsBJo(cwl?@9-}f*nQDG{aGi&Lbae_23Qh_x2u5Y1 zGEteROjM?tQIk<{P;gRkK`<(lPA95NR3<7@?FX1lui&WQtl)}ZR3<7Dm5ItkWvcyB zlTmO~a8__dFe;N?C#pt`*|Fp*5=aMeC+_X8$Z5qt<9yixwJN4JAgaM;J0gOZLS3; zUORx>$!KjZt<9yi`Pu>8N#@J#_5D2lwWqbYv^HNmfbGVQFI;PLX>Bg8&DRd#PBOo2 zukYt^gj$sMKCIp zUMH$dR3<7@&2vnqQ*cmlQgA^qDif87%0y+NGSz&o$tXA|I4QUw7?nw<6ICWE6P2mv zM@>e-LBUDE1;MCHI-RI8QJJVrHNR;x3JwZR3N8pnWzy+Hm5ItkWvcm0lTmO`a8htV zFe;NyC#pES(cL3Wpot}q3UZuUdv{#q*>e60) zEeWxRVTi{g(FXT5#gEB)FZ7_Uh7JUD~U!CBdC!zTRHn&*NWv z+N(=@^|d6}Zv6PdwO5z+>e60)EeY-<^V|0NejZ1ty}GnlUrU1R#*Z&tdv$5AF74H? z*^=PJcF+5HeBqsfgMyQS3xa7BRGFwuR3<7@%{O}@+rvpR3JwZR3N8pnWzy+Hm5Itk zWvY3(1+t$f$tXA|I4QUw7?nw<6ICWE6P2l^-4od!PLfe@P;gRkK`<(lPA95NR3<7@ z&AJ7$pC`#EI4C$NxF8snNv9K4CMpw^srJR5$o6oYOt0Xm;H=<^U{oe56P1a|L}jY| zW(#CLPm)n^RB%>sMKCIpUMH$dR3<7@?aMup?cpRD1xE#E1y=;4GU;`q%0y+NGS#+Q zAp3cejDn+rvw|yvQJM5QQDvesQJHGjJ(2Ce60a+N)o) zCBb{!J@4o7g?9=L3Qh_x2&Pd`Wuh`snW#)PpYMrm4=2eeI4C$NxF8snNv9K4CMpw^ zspi`)ko`PKM!`YBNx=ods7yMYs4`KRs7y6K?TKs;C&?%{C^#v&AQ+WNrxR5sDif8d z=Jzd-{X9uV!9l@E!3DvnOgf#YGEteROttUriEIzY$@B`23eF0y2u5Y1GEteROjM@Y z&$mGK^CTGsM+IjER|KOn>2;#YL}j8f)qcAtvOSz6qu{9Etl)}ZR3^PnRGFwuRHoXW zwm|mtBpC%q1!o0U1fw$Pb)w2dWuh|G{=O%&J)9(?;HcoN;EG^WCcREnnW#)urkeM+ zK=$)EnNGn$!AZdd!Kh4BCMpw^iON*-#h%FaaFUFIgMyQS3xZLZbUIOGav-za=jnNP z(NWuKzI!nFaAI`|4hl{RE(k_tqB2pLs7zF*nx8cp1qTHu1s4RPGU;@p%0y+NGS&Q{ z$tXA|I4QUw7?nw<6ICWE6P2m2 zxxK!hhhLhdwYju5Ups*9#*Z&tYjbIBF0IYi4&Y8QzihAX=W&Eun@el+wFB60{P@DP zHka1s(%Sr*?Es!__q?CS7v3p2C^#v&Aecr$m5ItkWuh|Ge6=UCJ)9(?;Gp27;DTUO zCf&n{oBio|cr8)esBP4?njap#*TeT%oq~gclY$F^QJJVrR3<7Dm8s@eO-8{%!AZdd z!Kh3+ov1QVnW#)Pe`+!c4hl{RE(k_t(&qM1_%0y+Vd5+0+3JwZR3N8pnWuh`s znW#)urkbxc83hLgCj}P-qcZ7qqRK>NqB7O|sL3ceC^#v&AQ+WNrxR5sDif8d<~L17 z!9l@E!3DvnOgf#YGEteROf`RLG71g~P6{pvMrG3JM3srkL}jXdj>+^2jtb5St_VhD zqB2pLs7zF*+OIVk1xE#E1y=;4GU;`q%0y+NGS&X5$tXA~I4ig!7?nw{6ICWE6P2m< zH%&&tQNdZk6~U-XdYz~;QJJVrwSQ?c3XTfS3a$u7Wzy?Jm5ItkWv(5-_Jeu&S8}f% zz|HF^t<6U}fNk>Wd7Q|#BzSdUhu2fut4n+JwItYnK#wn6dv$5AF74IVlHg7<`1M=b zt82lD*OK6NGTN(4dv$5AzLo@clKFajeLs(X?P;$r?bX+kV7u|-3)fy<+N(=@^|d6p zlgw}1>-%{eq4w(1UVSYIwi`dbaP8Hly}Gnlzh+B<7u!AW=kbMi3JwZR3N8qyQBY-~ zGEteROf}!^iEIxi$tXA|I4QUw7?nw<6ICWE6P2mvMWE30~oE2OVjLM|fi7FG7iON*lZh`FQNiqtK3eF0y2u5Yn>qM1_%0y+V zUH3$`hm&L!92J}uToH`Qq}Pcm6P1a|RP$mBWIvCS(b`;En@ekRE%+X<9l)01afDi% zOKWo-)aLCioSuj8?OGCS_jPzZrMtOje^&b;8ljl5o)h4?bX+k;Pz)mdv$5AF74IVlHg7OX|I0GmIUu@_q?CSAB9fALBUDE1;I25s!UWS zDif8d=JP#~?cpRD1qTHu1s4RPGU;@p%0y+NGSz&$1+t$f$tXA|I4QUw7?nw<6ICWE z6P2mvr#+GF;UpOa2L&eu7X+g+>2#vXL}j8f)%?B%vY#i(C^#rMDYzgQl}V=)RVFGE zm8tfMWE30~oE2OVjLM|fi7FG7iON*_(-z2no+P8-sNk&NieOYGy-rk_s7zF* z+TZs?wuh5s6dV8Nd~`$OKWp!ZGO#m03U4kyr0J(g-*di!AZdd z!88i0OjIT+6P2mv%RQ0p;UpOahlk)c`Sd*gBd3Rxj==@NsBJo(cwl?@9-}f*nQFd& zaG!^Nbae_23Qh_x2u5Y1GEteROjM?tUo;s72L&eu7X+g+>2#vXL}j8f)r^{qf`fvS zf(wFCnRGf)Wuh`snQA}4WO@Zh1!o0U1fw!hnW#)uCMr|ymzs=%qk^-7D}qs(^g2;x zqB2pLYQNWH6dVsMKCIpUMH$dR3<7@%?Fr__Uh7JUD~T_!S{GA3AQYcE2-Az(%M{Fo39 zUf<8-2(>ns*5+#mu-*9ag==jtt<9yi`Pu>8Nd~`NOKWp2IPuy6+)hSob7^fZt@vl9t&84;Z+5v1geth9tn@ekRX>GoC0C$r4WqW-;k0aFDTw0s29l&mW=lwjs@J_)&!AZdd!88i0OjIT+6P2mvt38qJ;Ut-d;P!7g zJ&z|14<{XilY$F^QQLGnQDvesQJHFfcyRH@_t+^oC^#v&AQ+X2%0y+NGEtdoe$`|Y z92A@sTo8=Pq|=Ei6P1a|RP(1Mqu`+6q~L;JR3@EHRGFwuRHoWzm`tzWsNk&NieOYG zDif87%0y+V{YsNja8z(sa78dGlU^sPOjIT+Q|%9$jDn+rvw|yvQJM5QQDvesQJHFg z)npVL6`U1Z5sb>D*NG|mjk1t$%b!o4zMZeG+1+OK+s|=4L)LvcMtFI-&?az$%>e60a+N-Z6!JTA& z++N?$lh2HT+N-Z6!FJ=v7p}d!v{#q*>T5}GCmH-2F74H&z4|p<61>>%c|VUo3Y~(3 zf|G&^f@u^~nW#)uCMr|SH+v%6!$~p<4hl{RE(k_t(&2;#YL}j8f)wWw8`+1U#f}?`7f-8bi zne;kQWuh`snQGTPk?r9m83jiLX9ZUTqcZ7rqRK>NqB7OI*aF$l<7Bipm)7Re+FT31 z$A8rwz<%>*566jUuP*J?rMe60a+N-Z6!JTBk86HQdy}GnlUrU19pBe4drM zCj}P-(MWE30}oD^ITjLM|bi7FG7iON*-`xeN4o+P8-px~t7 zf?!l8olaDls7zF*+V}QEwuj?ndId)XX9ZUTqcTyMs7zEQDpT#}TOj*+l8l0*g0q4v zf>D|DI#Fe!GEtdozugnr9!`=`a8z(sa78dGlU^sPOjIT+Q|(V%Ap3cejDn+rvw|yv zQJM5QQDvesQJHFg-xJv$PLfe@RB%>sMKCIpUMH$dR3<7@&HGy*`+1y9r{JLAq~L;J zR3<7DmC1q3exYX%hZh~St>%jdgAXTGr{JLAq~L;JR3<7Dm5ItkWvcm3lTmO`a8htV zFe;NyC#poGW$K9JsjR&)HZ5c&6f|}!QmfWoq~gclY$F^QJJVrR3<7Dm8s@? zO-8{%!AZdd!Kh3+ov1QVnW#)Pzi2WF4hl{RE(k_t(&2;#YL}j8f z)qbzZC^#xOE4U&Ul}WD?RVFGEm8td@O-8{{!CAo-!Kh4nov1QVnW#*)qb8%^sNk&N zieOYGy-rk_s7zF*nh!7;?bUVAtB<>@*5+F9J^uGB2@Ykh9l-WubbLM64&c@O99~ap zZ7!|NrM3Cm0o?q-Ev?O^wYju5Ups(1$>6tZX>G0rCtf>%+sSBcF0IX_wfWis+)3uk z?e+aU{zB5)Tw0s29l&rM3Cm0cD{MOjIT+6P2mv2Tex7LBUDE1;MCHI-RI8QJJVrHNR>y3JwZR3N8pnWzy+H zm5ItkWvcm8lTmO`a8htVFe;NyC#pRB%>sMKCIpUMH$dR3<9(+V21!{M`NXzi{~1)~_YO zc1?%ZQ`)Obd-b&>xP9T;t4n)zX|KMP1b348ZF_w`Pd+mWYOlVQ1lx@tU%2+_(q3JQ zexWxCUQ2>k86HQdy}GnlUrU19pBe4drMCj}P-(qM1_%0y+VZMQ)7^CTGsM+IjER|KOn>2;#YL}j8f)vkLY+rvpR z3XTfS3a$u7Wzy?Jm5ItkWvY3x1+t&V$!KjZt<9yixt53TaeuRC4~G)hl3=^8!|N&S z)up|NqB7O| zv?sDXoFt>*px~t7f?!l8olaDls7zF*n%}oT_VXke1qTHu1s4RPGU;@p%0y+NGS$Af zC$c>pC(|o9DmW{+A{dp4%0y+NGEtdoKi>k`&y!>n92J}uToH`Qq}Pcm6P1a|RQv6o z$o6oOjDn+rvw|yvQJM5QQDvesQJHFg+5*|nlVlVe6`U1Z5sb>D*NG|~A z_HdGnf}?`7f-8bine;kQWuh`snQGqO0@=^wWI6>01*eDL{vOUAj^EqzaMB?dwT;?F zZF69I{2o=NnlB#Q(&5DF6dV+s6kHID%0y+NGEteROf}zWG71g~P6{pvMrG3JM3srk zL}jY^S(8z4P;gRkK`<(lPA95NR3<7@%^#YKf`fvSf(wFCnRGf)Wuh`snQGt1WO@Zh z1!o0U1fw!hnW#)uCMr|y7n+QMqk^-7D}qs(^g2;xqB2pLYQNKD6dV2;#YL}j8f|I3yH z$0c`p-+p?o9l&-^$M>kUxwJNy*5+#ma3`7Xw%7ObI6|$>rM3Cm0csMKCIpUMH$dR3<7@?WoBp zI4U?RxFQ&pNv{)CCMpw^spbPrMr(6vZ7!|NwcvZab^u$J$IAk(&84-uv^HNmfIG>2 zzrDVn#}R66F0IYi4q&_S;|tf?Tw0q;YxA`OxRVTiyO!4GT5#gE1Gt@x*5=aMTw0s2 z9l)JrzT95l&*NWvTANF2^R)xmZv6PdwKkX5=F-}H?Evm1^UL=7ejZ1twYju5Ups*9 z#*Z&tYjbIBF0IY4*$&{@cF+5HeBs?gaQ}ClJseLO9!@$2Cj}P-(D{MOjIT+6P2mv2Tex7LBUDE1;MCHI-RI8QJJVrHNR>y z3JwZR3N8pnWzy+Hm5ItkWvcm8lTmO`a8htVFe;NyC#pRB%>sMKCIpUMH$dR3<8Ov;%k$ z)j$6WCx1Em`9E|2=YP@h@BjB7U(jA%+N*29Kl)k{Y)PCX^Y!-nejbC`t4n+JwItYX z{P@DPSC{tc(q4Tn3GO8G+xGf?9!IFXy0lkcOM>mjk1t$%b!o4z<*)5e+|R>5`dSif z_j7nXrM-%~9;nH4R+N-Z6!FJ=v7p}d! zv{#q*>T5}GCmH;{F74H&z4|p<61>>%c|VUo3Y~(3f|G&^f@u^~nW#)uCMr|SH+v%6 z!$~p<4hl{RE(k_t(&2;#YL}j8f)wWw8`+1U#f}?`7f-8bine;kQWuh`snQGTPk?r9m83jiL zX9ZUTqcZ7rqRK>Nav-x^{ONg|Nb};szu_3vUR~O&OM7)K_#Uq%!ItH5gxaf1dv$5A zzLo@cl6kqkzMsbtYOgNs)z^|>yYb@-*Ir%Pt4n+JwIsNc41WEV_Uc-2;*lzsz!nIeI_Ubz5)rWudzv`0UP^OyqwtL>sW3W?jP;gRkK`<&4m5ItkWuh|G ze7+~LJ)9(?;Gp27;DTUOCY?@HnW#)urkZcJK=$(_83hLgCj}P-qcZ7qqRK>NqB7O| zv?sDXoFt>*px~t7f?!l8olaDls7zF*n%}oT_VXke1qTHu1s4RPGU;@p%0y+NGS$Af zC$c>pC(|o9DmW{+A{dp4%0y+NGEtdoKi>k`&y!>n92J}uToH`Qq}Pcm6P1a|RQv6o z$o6oOjDn+rvw|yvQJM5QQDvesQJHFg+5*|nlVlVe6`U1Z5sb>D*NG|~A z_HdGnf}?`7f-8bine;kQWpW_1-RJ3fc+pYYYTkb^`EX)&3JwZR3N8pnWuh`snW#)u zrkXD_83hLgCj}P-qcZ7qqRK>NqB7Ndr^zTdC^#v&AQ+WNrxR5sDif8d=4VYt!9l@E z!3DvnOgf#YGEteROf`RKG71g~P6{pvMrG3JM3srkL}jXdACu`792J}uToH`QL}j8f zQJJVrwO?p53XTfS3a$u7Wzy?Jm5ItkWvcy7lTmO~a8__dFe;N?C#pZ?Es?;ctr4+FV+juN}a4 z;8ljl5o&ENtoXoq~gclY$F^X%tkMs7zEQ zDpSpunv8;jf|G&^f>D`tI#Fe!GEtdozSm?F92A@sTo8=Pq|=Ei6P1a|RP&1_qu`+6 zq~L;JR3@EHRGFwuRHm9ylTmO`a8htVFe;NyC#pD|DI#Fe!GEtdof6-(V z92J}uToH`Qq}Pcm6P1a|R6A-i3XTfS3a$u7Wzy?Jm5ItkWvclAlhN8-TANF2b1nED zuN}aa#*#xfYyw?Er2kqqVuTHka1sYX@*AnJ>53_w)GIp4R5l+I;N*wi`dbaIMXywYju5 zUps(1$^5dtzMsbtYHcp9&DRcKyYb@-*VD{MOjIT+6P2mD`t zI#Fe!GEtdopJOt;f}?`7f-8binW#)uCMpw^srGA4M!`|RS-};-s7!jDs4`KRs7$p# zYBCCr3eF0y2u5Yn>qM1_%0y+V{Y{fma8z(sa78dGlU^sPOjIT+Q|(`xjDn+rvw|yv zIgoi^_s{>r;a^)%uYaW4Ms1_E*OFk1@;Jh4N$~1^4zH)QS6@qln?Giyy}Gnlm-gyw zNpL5b-?rEH^Z28ny}GnlUrU1R#*Z&tdv$5Au0_AE8wIZ=!K)09Bh+49+N-Z6!R^nC z_Uh7JUD~U!CBdC!e%xN)&y&xLg4(OECBb&%#}}@>y0ll9_Uda%a3>l38ZNEPrM3BJ zNpSen^RKZ3c(L8{ejdtHr{JLAq~L;J8UD`t zI#Fe!GEtdoUT%Tx=SeaO4hl{RE(k_t(&o+P8-sNk&NieOYGy-rk_s7zF*+I3H4dpJo(!BN3k!Sx}yz1P$8P$FuZ z{^1{aJW*|e60a+N-Z6 z!JTBj*afI5dOMCUTB-n2J z_`LzIFiHjUQjQ*5=aMTw0s29l)Jr z9)1mP|Ay1^IAiVArM>z!TM~Tm;69JsMKCIpUMH$dR3<7@?Jt^)f}?`7f-8bine;kQ zWuh`snQBK(M!`|RS-};-s7!jDs4`KRs7y5^FYz;W!cP)up|O3XTfS3a$u7Wuh`snW#)u zrrNJG83jiLX9ZUTqcZ7rqRK>NqB7O~pvfpWDmW{+A{doPuM<@!Dif8d_E$|t!BN3k z!4<)%OnRNDGEteROtpV%G763g&I+ywMrG3LM3srkL}jXZj>&Wi4hl{RE(k_tqB2pL zs7zF*ny)n(1qTHu1s4RPGU;@p%0y+NGS&R3$tXA|I4QUw7?nw<6ICWE6P2mvH%&&t zLBUDE1;MCHI-RI8QJJVrHGgR`3JwZR3N8pnWzy+Hm5ItkWvYFS$@B`23eF0y2u5Y1 zGEteROjM@YuQeG3M+IjER|KOn>2;#YL}j8f)&8i-C^#xOE4U&Ul}WD?RVFGEm8teO zO-8{{!CAo-!Kh4nov1QVnW#*)e?3U%?!R#Sm!tcKla9er!CAo-!5r8gzQ?FcR3<7D zmARG#+Yjn-gx8Yb)%_e^Pie2dmIOC{%u0K8X|FEr)z^~XPBOo3ukYvaM?rgaX|KMP z1lx@tU%2+_(q3JQ{wIJ&!D~tID#POlwO5z+>T5}G`!l1xy0ll9_Uda%a3`4`x7YXc zn92A@s zTo8=Pq|=Ei6P1a|RMYN>Y!4^NC^#rMDYzgQl}V=)RVFGEm8oXk0@=@#WE30}oD^IT zjLM|bi7FG7iON*_VozjyI8LTla8z(sa78dG6P1a|L}j8f)qb-DvY#i(C^#xOE4U&U zl}WD?RVFGEm8tgSp2+ral8l0*g0q4vf>D|DI#Fe!GEtdo+bxj&JV{2uQNdZk6~U-X zdYz~;QJEab>^Fb*aGXfHKH!hRUcphpS-};-s7zEQDif87%2e|LlhIyX+N(=@buIWF zuO-2jcffus!M`HnbO)^TANF2b7^fZtGa|Is_nv8;v z6?~%LI|@Ek@FN93QSdVbpDXxi(qt5Ttl$#`-%;?Xf*&dPiGrUg_*}t9izcJsV+Efm z_>O{475qrSPZa!2!RHFT(O@!fD)^RyZ!7q&f*&gQv4Wo}_)NhU3cjIVNN+0mmV$39 z_^yH3LWjUmQ$21m9Tni%7w@6ntC3cNP3l!H*UERKaHozEJQ{ z^ZA3!4Ga|PdMFqtP{EHC{8Yhb3cgVAQS+_t z01$kv6Q3yfj)G4W{7Au16#PuV=L$aR@WTIH!N&?dQScoFpDOr~f}be(nS#$1d^Bh> z3O-iwiGuGa_*B7<6#PWN&lG&F;G;>CQSh;XPZWGd!KVs-q~IqCex~4a1s^S%jDn99 ze4^kx3O-fvBLzQE@G}LUEBHo($-JrHTME9d;JXTbsNly6eyZRz1z#xmhJGQvso+}* zzOCT93Vx{I#|nO`;4=kZDENkcA-$>KTME9d;JXTbsNly6eyZRz1z#xmhJGQvso+}* zzOCT93Vx{I#|nOW06yq{|NJi;{x#ue2a^uL7Ye?y=ogWKZz=e;g6}H$p@JVP_^E== z6nvrJqvof7{+akc|5(M}|L;G%@b3yfR`7{}?aHd zse&IV_=$p_DfnE$M~fz-;9~`!DEN+oPZj(~!A}(YOu^?0zR_SZZz}kff^RGMu7V#b z__2bYD)>yn7Ye?iUr28%_?CiiEBLO0A1e5yn7Ye?iUr28%_?CiiEBLO0A1e5Ga|Itwnv8;v6?~%L zI|@Ek@FN93QSdVbpDXxi(PR{Stl$#`-%;?Xf*&dPiGrUg_*}s^8cgO*1>aKeZ3W*| z@IwVZR`62=pDFl4!8h~^=}iUSQt)jB-&OEK1wU5sQw5(X_(H)q^b6@t1>aKeZ3W*| z@IwVZR`62=pDFl4!8h~^=}iUSQt)jB-&OEK1wTFjAJn>k{ud5w-lqqX4#8&%zEJRu zMZbs?d`rQ%6?|904;B1a!A})@rr-+&AGPoO^AFF-l0d=73O-Tr9R;5%_>qF2DEOIz z&lP;sYcdKxR`7{}?dv4T$&d`H2j3Vx*ECklS1;By5Z z&6XpRG1WI zg+*ai*c5h!Q(@3TS`|ixNnuu46jp^zVOKa6hEMGog;8Nrm=zXX+u8~#nB^@KksyycIqQhr;DklTo-S+!Y=QPlcDlTj8T{C=BnI%&IUd zObWBYqOdA#3cJFoFlZsI3ZufLFe@wytHP$RE1U|07SgIPDohHq!lJM$Yzn)=sW50E ztqP;Uq%bQiFW_H)t$kg1d97bxOnM2M!me;C44+y=3ZufLFe@wytHP$RE1U|K_y70T ze`WuAD1dO&iMzr>;i>Racq@Dq4u#7P-0*J-H-)>xL*c3LQg|zT6b^;UFHJ__rf^qy zC_EKj3U7sv!l7{aqsb`T6z&QSg{Q(x;jQpdI210QnvB9t;jZvdcq+UU-U=UuLt%Kw zWLAYyVN#eC7KK$|Q`i+wg+U8xRTvc}g;`-ySQR#fUEx$1w2)SXQDIV;6&8h6VN=)@ zPK7}WX;l~%CWTpHQCJl=gm#`{q3cJFoFnnqeDU1q}!mO|;tO}dLu5c<`-v57J|2h8ap#Z{7 zC+-Rlg{Q(x;jQpdI20~FaKpbT+!XE#4~3_~OX02XQ8*MXzcd+zo5Ee;q3~3ADZCXv z3Wvhwk0zsVQ@ATU6rKt%g}1^-;ZV4IYBCBpg}cH-;i>Racq@Dq4u#@KAUvycFIFAB96~V86()sQVNqBWHicc`RJgqTr?3BR|M5^j;ihm`cqlv-UJ7r8 zkHVpF`L4+*+!XE#4~3_~OX02XQ8*MXKQ$SJo5Ee;q3~3ADZCXv3WvhwwRacq@Dq4u#;i>Racq@Dq4u#8i-0*J- zH-)>xL*c3LQg|zT6b^;UPfbSQrf^qyC_EKj3U7sv!l7{at;s0d6z&QSg{Q(x;jQpd zI20})nvB9t;jZvdcq+UU-U=UuLt%KsWLAYyVN#eC7KK$|Q`i+wg+U8xRTvc}g;`-y zSQR#fUEx$1w2)SXQDIV;6&8h6VN=)@PK7}WX;l~%CWTpHQCJl=gX+*8~#nB^@KksyycIqQhr;DUlTo-S+!Y=Q zPlcDlTj8T{C=73y%&IUdObWBYqOdA#3cJFoFlZsI3ZufLFe@wytHP$RE1U|07SgIP zDohHq!lJM$Yzn)=sW50EtuNqTe+hkEczLZKUrc%llfta9D69&b!me;C3?EuV3ZufL zFe@wytHP$RE1U|K_y6$qf5JZ=3MkwZ?g|fur@~9&t?*Ge6fQqB8HJm|UE!hdRCp=8 z6+Q}w!sVAHqi|EWD?AjQ3NMAX!bjmyxct#%6mAN4g@?jZ;id3a_$V9-mrqSb;ihm` zcqlv-UJ7r8kHVoaykjz}!l*DQ%nFObs<0{S3a7%Lg|sS+3X{UDuqdnwo5HSeDhygk ztHP)-Da;Cs!m6+->@KAUvycFIFAB98V@~O!v+!XE#4~3_~OX02XQ8*Na zcT8qg7!@XkSz%FF6*h%k;Zzv3kXD6JVN#eC7KK$|Q`i+wg+U8xRTvc}g;`-ySQR#f zUEx$1UKG+_f8cywczLbAzL@k9MukaXR#+5Pg-u~sI2DFZEh2?cVN#eC7KK$|Q`i+w zh0FVY{rX?#Uk?QkZaQ&Scqlv-UJ7r8kHVpF`GFh$P2r|+S9mBq6}& zqi`q;@0iT0Fe*$6v%;dVDr^e7!l^K5A*~9d!lW=OEDEc_rm!oV3WFBXsxT@{3bVqZ zuqtc{yTYk3Xd$f%qr#*xD=Z4D!ltk*oC?FI_Kd=)Fe%Imi^8g~DeMZT!sY$H>lpyT zO(*UO4~3_~OX02XQ8*MXKXAjpDclt93J-;+!b{<;@KHDvF26Jxg`2`%;i2$UcqzOU zJ_?7z<&P$#a8tM|JQSV^FNL?lN8wPod}=ZZH-)>xL*c3LQg|zT6b^;q9g|rVMukaX zR#+5Pg-u~sI28shq*Y;5m=tD(MPXIg6n2GEVbDTa6-I?gVOCfaR)tMrS2$n5zy5Cd zy72N^KWJmE3ZufLFe@wytHP$RE1U|$rxuaIs4ywa3X8(3uqo^cr^4m^e|`PG^{Racq@Dq4u#n^7fy;{wMs$Lji@G!d>B^@Kksy zycIqQhr;E%CZljuxGOvqo(eC8x57u^P`LcmWE5@+cZG+-Q{koXR`@6!3YXuSjKWRf zuJBNJD!dfl3Lk|-;qsx$DBKk83J-;+!b{<;@KHDvhBr)RRTvc}g;`-ySQR#fUEx$1 zw2)SXQDIV;6&8h6VN=)@PK7}WX;l~%CWTpHQCJl=gXpRG1WI zg+*ai*c5h!Q(@3TS`|ixNnuu46jp^zVOKa61}&sjVN{qDW`#vzRoE1Eg;Qbp(4J8k z6()sQVNqBWHicc`RJgqTFFgZ5xaq`Q;i2$UcqzOUJ_?7z*uq&JjgErQxFe*$6v%;dVDr^e7!l^KPXb~xl z3X{UDuqdnwo5HSeDqP#oxUz&`B^@KksyycIqQhr;lV$*c;a!lW=OEDEc_rm!oV3WFBXsxT@{3bVqZuqtc{yTYk3 zXd$f%qr#*xD=Z4D!ltk*oC<>$(yA~jObWBYqOdA#3cJFoFnnsyD2xh|!mO|;tO}dL zu5c<`-v5)H0U+FT;;!&ecq+UU-U=UuL*eoRH~gEzP2sNaPRacq@Dq4u#97CZljuxGOvqo(eC8x57u^ zP#E4ZnN?v_m=tD(MPXIg6n2GEVbDTa6-I?gVOCfaR)tMrS2z_0Eu>XpRG1WIh2;hO z>u-Xu3oozr>x)S*VN=)@PK7}mYgHH(CWTpHQCJl=gLF3ZufLFe@wytHP$RE1U|K_y4YE z00=joxGOvqo(eC8x57u^P`LcS4gaQaQ@ATU6rKt%g}1^-;ZV5z(qt5F3U`Hv!c*a; z@K*RJ9152|nvB9t;jZvdcq+UU-U=UuL*eqN$tc_u?g|fur@~9&t?*Ge6oz+9W>pv! zCWTpHQCJl=gB^ z@KksyycIqQhr;ELCZljuxGOvqo(eC8x57u^P`G?*G72|^yTU`^sqj*GD|{3Vh2b5O zSrtZwNnuu46jp^zVOKa61}&sjVN{qDW`#vzRoE1Eg;QbBLRu9@g-KynSQJ);O<`9! z6$UM&Rbf<^6lR4*VO7`^c7;=6_|%?J7!@XkSz%FF6*h%k;Z(T1{YN|lP`D}F6&?yt zg_pux;iGUUT)t~E3O9wj!b9Py@KSgyd=w6a%TG;4;ihm`cqlv-UJ7r8kHVpF`K`$) z+!XE#4~3_~OX02XQ8*MXADWE9P2sNaP*4QDIV;6&8h6VN=)@ zPK7}WX;l~%CWTpHQCJl=go3Yb9ttSj6z&QS zg{Q(x;jQpdI2115H5rAQ!d>B^@KksyycIqQhr;EjCZljuxGOvqo(eC8x57u^P`Lco zWE5@+cZG+-Q{koXR`@6!3YQN}M&YJ#S9mBq6|3l9J5NX-B$tc_u?g|fur@~9&t?*Ge6fVCt8HJm|UE!hdRCp=8 z6+Q}w!sSDgQMf7G6&?ytg_pux;iGUU3~!jssxT@{3bVqZuqtc{yTYk3Xd$f%qr#*x zD=Z4D!ltk*oC<>$(yB1NfPa0Me_eQat)E^@dI___qOdA#3cJFoFlb|~3ZufLFe@wy ztHP$RE1U|$hZd2-s4ywa3X8(3uqo^cr^4m!e|-Jv`PV}Mgqu#>6&?ytg_pux;iGUU zT)yLme^a@KAUvycFIFAB98V@}bEn z+!XE#4~3_~OX02XQ8*NaH%w+#7!@XkSz%FF6*h%k;Zzv3kXD6JVN#eC7KK$|Q`i+w zg+U8xeF6Xa-u}Aq@>)N>nDi1Rg;`-ySQR#fUEx$1w6Ru&QDIV;6&8h6VN=)@PKDt^ zi%4Nqm=tD(MPXIg6n2GE;qv|;zy3!3Racq@Dq4u#7fO-A9Sa94OJJQZFFZ-tM-p>X-s zWE5@+cZG+-Q{koXR`@6!3d1`lvnq@Vlfta9D69&b!me;C3|dI5!l*DQ%nFObs<0{S z3a7%Lg|sS+3X{UDuqdnwo5HSeDhygktHP)-Da;Cs!m6+->Racq@Dq4u#7v zO-A9Sa94OJJQZFFZ-tM-p>X-5$tc_u?g|fur@~9&t?*Ge6fU2djKWRfuJBNJD!dfl z3Lk|-VR*-6R)tYvQkWGMg;ilw*cDENK?`YB7!@XkSz%FF6*h%k;Zzu26w+Ux(O(x{ zUhA(fCcT7FVN#eC7KK$|Q`i+wg+Uu@RTvc}g;`-ySQR#fUEx$1KDCGxMukaXR#+5P zg-u~sI2A7M|Hs!KvwuAlK)C6|UE!hdRCp=86+Q}w!sQ2U_&0@{!d>B^@KksyycIqQ zhr;ETCZljuxGOvqo(eC8x57u^P`LcjWE5@+cZG+-Q{koXR`@6!3YSk!M&YJ#S9mBq z6zDohHq z!lJM$Yzn)=sW50`tqP;Uq%bQi3ai4Vuq&Jj!>1OJ!l*DQ%nFObs<0{S3a7&5{nyuD zy?;FvK)C6|UE!hdRCp=86+Q}w!sQ2U_&0@{!d>B^@KksyycIqQhr;ETCZljuxGOvq zo(eC8x57u^P`LcjWE5@+cZG+-Q{koXR`@6!3YSk!M&YJ#S9mBq6|A=P*3O9wj!b9Py z@KSgyd=w6a%Xdvi;ihm`cqlv-UJ7r8kHVpF`Kie$+!XE#4~3_~OX02XQ8*MXzcm?! zo5Ee;q3~3ADZCXv3WvhwLz7XsDcltv3QvWX!du~^a3~CKn9Qm$DohHq!lJM$Yzn)= zsW50EtqP;Uq%bQi3ai4Vu)lzRee`}^czORnUrc%lgErQxFe*$6v%;dVDr^e7!l^K5 zW339K!lW=OEDEc_rm!oV3d4sMk;14jDa;Cs!m6+->B^ z@KksyycIqQhr;E%CZljuxGOvqo(eC8x57u^P`LcmWE5@+cZG+-Q{koXR`@6!3YXuS zjKWRfuJBNJD!dfl3Lk|-;qsx$DBKk83J-;+!b{<;@KHDvhBr)RRTvc}g;`-ySQR#f zUEx$1w2)SXQDIV;6&8h6VN=)@PK7}WX;l~%CWTpHQCJl=gXpRG1WI zg+*ai*j~WDzGc5Iyu8-$FDAW&Q(@4?S`|ixNnuu46jp^zVOKa625qcWVN{qDW`#vz zRoE1Eg;Qbp&>~V86()sQVNqBWHicc`RJgqTkFUR@|9U8ZaMOvq!b9Py@KSgyd=w6a z%Xi%HZwfbsyTU`^sqj*GD|{3Vh09M(M&YJ#S9mBq6@KAUvycFIFAB96#ox@3`UL6mAN4g@?jZ z;id3a_$V9-m!F!9!cF0>@KAUvycFIFAB98V@>`QpxGCHf9tux|m%>}&qi`r(J~SDH zo5Ee;q3~3ADZCXv3Wvh*hRLi7qr#*xD=Z4D!ltk*oC<>$(yA~jObWBYqOiVze|@5U zU3ht|-(F053A@6nFlb|~3ZufLFe@wytHP$RE1U|0HrA>zDohHq!lJM$Yzn)=sW5zK z5h;uclfta9D69&b!me;CT;BiV*B{(}JQPs4Dcltv3QvWX!du~^a41}UXfg^ng}cH- z;i>Racq@Dq4u#7vO-A9Sa94OJJQZFFZ-tM-p>X-5$tc_u?g|fur@~9&t?*Ge6fU2d zjKWRfuJBNJD!dfl3Lk|-VR*-6R)tYvQkWGMg;ilw*cDENK?`YB7!@XkSz%FF6*h%k z;Zzv3kXD6JVN#eC7KK$|Q`i+wg+U8xRTvc}g;`-ySQR#fUEx$1KDB2QMukaXR#+5P zg-u~sI2A7M|5?uf5NX-7 z$tc_u?g|fur@~9&t?*Ge6fS=>8HJm|UE!hdRCp=86+Q}w!sSzwQMf7G6&?ytg_pux z;iGUU4DXoCsxT@{3bVqZuqtc{yTYk3Xd$f%qr#*xD=aVIUtgYI7hYcL*B6ss!ltk* zoCdL{I7=s2sfR$D?AjQ3NMAX!bjmyxctBk|E6$LxGOvqo(eC8x57u^ zP`LckWE5@+cZG+-Q{koXR`@6!3YR~cjKWRfuJBNJD!dfl3Lk|-;qs};DBKk83J-;+ z!b{<;@KHDvhIdS6RTvc}g;`-ySQR#fUEx$1w2)SXQDIV;6&8h6VN=)@PK7}WX;l~% zCWTpHQCJl=g z3ZufLFe@wytHP$RE1U|07SgIPDohIV3;5Ru<=2Im*ZSqfq?fQNYzn)=sW50`tqP;U zq%bQi3ai4Vuq&JjgErQxFe*$6v%;dVDr^e7!l^KPY7r@n3X{UDuqdnwo5HSeDqP-w zefn@-#n9tux|m%>}&qi`r(e&B|GQ@API6&?ytg_pux;iGUUTz+XX3O9wj z!b9Py@KSgyd=w6a%O6cf;ihm`cqlv-UJ7r8kHVpF`P5_-ZVGpWhr(0grSMkxC>#pI zJ0`O#j0%&&tgtAo3Y)^Na4HO1NUOrAFe%Imi^8g~DeMZT!k~q;DvSz~!mO|;tO}dL zu5c<0T1czHs4ywa3X8(3uqo^cr^4{5J)Racq@Dq4u#;i>Racq@Dq4u#8i z-0*J-H-)>xL*c3LQg|zT6b^;UPfbSQrf^qyC_EKj3U7sv!l7{at;s0d6z&QSg{Q(x z;jQpdI20})nvB9t;jZvdcq+UU-U=UuLt%KsWLAYyVN#eC7KK$|Q`i+wg+U8xRTy8u zzdrxIF1)Racq@Dq4u#8aO-A9Sa94OJ zJQZFFZ-tM-p>X-oWE5@+cZG+-Q{koXR`@6!3d0*Fvnq@Vlfta9D69&b!me;C3|dI5 z!l*DQ%nFObs<0{S3a7%Lg|sS+3X{UDuqdnwo5HSeDhygktHP)-Da;Cs!m6+->yo5Ee;q3~3ADZCXv3WvhwhbE(NQ@ATU z6rKt%g}1^-;ZV5z(qt5F3U`Hv!c*a;@K*RJ9152|nvB9t;jZvdcq+UU-U=UuL*eqN z$tc_u?g|fur@~9&t?*Ge6oz+9W>pv!CWTpHQCJl=gRacq@Dq4u#7fO-A9Sa94OJJQZFFZ-tM-p>X-sWE5@+cZG+-Q{koX zR`@6!3d1`lvnq@Vlfta9D69&b!me;C3@-}luaC8_3oozr*B6ss!l*DQ%nFObs<0{S z3a7%LjkPL_3X{UDuqdnwo5HSeDh%3KtHP)-Da;Cs!m6+->zDohHq z!lJM$Yzn)=sW50`tqP;Uq%bQi3ai4Vuq&Jj!>1OJ!l*DQ%nFObs<0{S3a7&5{r~>j zNB?>#fN;}^yTU`^sqj*GD|{3Vh071z@NWt?g}cH-;i>Racq@Dq4u#7vO-A9Sa94OJ zJQZFFZ-tM-p>X-5$tc_u?g|fur@~9&t?*Ge6fU2djKWRfuJBNJD!dfl3Lk|-VR*-6 zR)tYvQkWGMg;ilw*cDENK?`YB7!@XkSz%FF6*h%k;Zzv3kXD6JVN#eC7KK$|Q`i+w zg+U8xRTvc}g;`-ySQR#fUEx$1KDB2QMukaXR#+5Pg-u~sI2A5$1J3{yZVGpWhr(0g zrSMkxC>#ox@0yIlP2sNaPRacq@Dq4u#8yCZljuxGOvqo(eC8x57u^P#E4YnN?v_m=tD(MPXIg6!sVJ zuTQJ53oq~g=Zi@%VbI1}6-I?gVOCfaR)tMrS2z_0ZLC#cRG1WIg+*ai*c5h!Q(@4? zS`|ixNnuu46jp^zVOKa6h7Tp3|pm0;TD?AjQ z3NMAX!bjmyxO~@S6mAN4g@?jZ;id3a_$V9-m!F!9!cF0>@KAUvycFIFAB98V@>`Qp zxGCHf9tux|m%>}&qi`r(J~SDHo5Ee;q3~3ADZCXv3Wvh*hRLi7qr#*xD=Z4D!ltk* zoC<>$(yA~jObWBYqOdA#3cJFoFlZsI3ZufLFe@wytHP$RE1U|07SgIPDohHq!lJM$ zYzn)=sW5zK&nS!vlfta9D69&b!me;CT;Beho&g}-bmFe?P@KAUvycFIFAB98V@>7#hxGCHf9tux|m%>}&qi`r(erqxcH-)>xL*c3LQg|zT z6b^;UhbE(NQ@ATU6rKt%g}1^-;ZPXfFqu_hRG1WIg+*ai*j~WDzL>r)yu8-$FDAW& zQ(@4?S`|ixNnuu46jp^zVOKa625qcWVN{qDW`#vzRoE1Eg;QbB##$9dg-KynSQJ); zO<`9!6^0KjB85?5QkWGMg;ilw*cDEN%iI6_+Hn7RD1dO&iMzr>;i>Racq@Dq4u#8i z-0*J-H-)>xL*c3LQg|zT6b^;UPfbSQrf^qyC_EKj3U7sv!l7{at;s0d6z&QSg{Q(x z;jQpdI20})nvB9t;jZvdcq+UU-U=UuLt%KsWLAYyVN#eC7KK$|Q`i+wg+U8xRTvc} zg;`-ySQR#fUEx$1w2)SXQDIV;6&8h6VN=)@PK7}WX;l~%CWTpHQCJl=gX+*8~#nB^@KksyycIqQhr;DUlTo-S z+!Y=QPlcDlTj8T{C=73y%&IUdObWBYqOiVze|-pjU3ht|-(F053A@6nFlb|~3ZufL zFe@wytHP$RE1U|0HrA>zDohHq!lJM$Yzn)=sW50`tqP;Uq%bQi3ai4Vuq&Jj!-p1; z!l*DQ%nFObs<0{S3a7&5eSEFLe>@aWxGCHf9tux|m%>}&qi`r(erPfZH-)>xL*c3L zQg|zT6b^;UFHJ__rf^qyC_EKj3U7sv!l7{aqsb`T6z&QSg{Q(x;jQpdI210QnvB9t z;jZvdcq+UU-U=UuLt%KwWLAYyVN#eC7KK$|Q`i+wg+U8xRTvc}g;`-ySQR#fUEx$1 zw2)SXQDIV;6&8h6VN=)@PK7}WX;l~%CWTpHQCJl=gX+u8~#nB^@KksyycIqQhr;DklTo-S+!Y=QPlcDlTj8T{ zC=BnI%&IUdObWBY@&f+#ee-qU<+Xl&G3h023cJFoFlb|~3ZufLFe@wytHP$RE1U|0 zHrA>zDohHq!lJM$Yzn)=sW50`tqP;Uq%bQi3ai4Vuq&Jj!>1OJ!l*DQ%nFObs<0{S z3a7&5{l9(f%zr%;K)C6|UE!hdRCp=86+Q}w!sQ2U_&0@{!d>B^@KksyycIqQhr;ET zCZljuxGOvqo(eC8x57u^P`LcjWE5@+cZG+-Q{koXR`@6!3YSk!M&YJ#S9mBq6$BzS!pm#@@?z3USQR#fUEx$1w6Ru&QDIV;6&8h6VN=)@PK7}mYgHH(CWTpH zQCJl=gfY>3O9wj!b9Py@KSgyd=w6a%cmxza8tM|JQSV^FNL?lN8wNy-Z7a~ zVN{qDW`#vzRoE1Eg;QbBLRu9@g-KynSQJ);O<`9!6$UM&Rbf<^6lR4*VO7`^c7;=6 z&_Y@jMukaXR#+5Pg-u~sI2DFZ?HPqpVN#eC7KK$|Q`i+wh0EK(GXRB~!d>B^@Kksy zycIqQhr;E%CZljuxGOvqo(eC8x57u^P`LcmWE5@+cZG+-Q{koXR`@6!3YXuSjKWRf zuJBNJD!dfl3Lk|-;qsx$DBKk83J-;+!b{<;@KHDvhBr)RRTvef7x1sIk*^Ccul4hb zNiShhSQR#fUEx$1w6Ru&QDIV;6&8h6VN=)@PK7}mYgHH(CWTpHQCJl=gpwpz`s5+zAn7H)=w`cy@Xj|QCJl=g6&?ytg_pux;iGUUT)yLme^a6&?ytg_pux;iGUUTz=q&e^aZc;{`z9lOBfXhSs$yys4ywa3X8(3 zuqo^cr^4m^zkU4x_}4=Lgqu#>6&?ytg_pux;iGUUTz=q&e^aaMOvq!b9Py@KSgyd=w6a%MaY}ZwfbsyTU`^sqj*GD|{3Vh08BZM&YJ#S9mBq z6@KAUvycFIFABE!u{Hy7| zF1);#3GW!)sxT@{3bVqZuqtc{yTYk3Xk)Dkqr#*xD=Z4D!ltk*oC6&?ytg_pux;iGUUTz=q&e^a@KAUvycFIFAB98V@>7#hxGCHf9tux|m%>}&qi`r(erqxc zH-)>xL*c3LQg|zT6b^;UhbE(NQ@ATU6rKt%g}1^-;ZPXfFqu_hRG1WIg+*ai*c5h! zQ(@3TS`|ixNnuu46jp^zVOKa61}&sjVN{qDW`#vzRoE1Eg;QbBLRu9@g-KynSQJ); zO<`9!6^0M(8HG_{QkWGMg;ilw*cDEN%iI4)&j1i^I&oKcC_EKj3U7sv!l7{ajvM|> z;ihm`cqlv-UJ7r8kHVpF`Kie$+!XE#4~3_~OX02XQ8*MXzcm?!o5Ee;q3~3ADZCXv z3WvhwLz7XsDcltv3QvWX!utjMtCznnyu8+bUQBukhr;lN(X9%j!lW=OEDEc_rm!oV z3WGM*sxT@{3bVqZuqtc{yTYk3Xk)Dkqr#*xD=Z4D!ltk*oCB^@KksyycIqQhr;EzCZljuxGOvqo(eC8 zx57u^P`G?(G72|^yTU`^sqj*GD|{3Vh2ag8SrtZwNnuu46jp^zVOKa61}&sjVN{qD zW`#vzRoE1Eg;QbBLRu9@g-KynSQJ);O<`9!6$UM&Rbf<^6lR4*VO7`^c7;=6_|TqF z7!@XkSz%FF6*h%k;Z(T1ed-wi!c8ac3J-;+!b{<;@KHDvF5hv(zbV`l?g|fur@~9& zt?*Ge6fQqC8HJm|UE!hdRCp=86+Q}w!sWLnqi|EWD?AjQ3NMAX!bjmyxO`|b3O9wj z!b9Py@OlCNs@ty%FR%6Q7n5GXN8wNy-Y~jVVN{qDW`#vzRoE1Eg;QbB##$9dg-Kyn zSQJ);O<`9!6$WjrRbf<^6lR4*VO7`^c7;=6(8gL7MukaXR#+5Pg-u~sI2DEu?HPqp zVN#eC7KK$|Q`i+wh0FW=`jPUFhXM*Wg}cH-;i>Racq@Dq4u#7PO-A9Sa94OJJQZFF zZ-tM-p>X-7$tc_u?g|fur@~9&t?>E(Git|3n(JVDSa(GX34&OWe`N$g5Wos7tw7ca zEUm!S3M?(4OYUHT38wT}a=TpRL_OcFIybwhQ*VH$=X*#H3Wvhwk0zsVQ@ATU z6rKt%g}1^-;ZV4IYBCBpg}cH-;i>Racq@Dq4u#Racq@Dq4u#7fO-A9Sa94OJJQZFFZ-tM- zp>X-sWE5@+cZG+-Q{koXR`@6!3d1`lvnq@Vlfta9D69&b!me;C3|dI5!l*DQ%nFOb zs<0{S3a7%Lg|sS+3X{UDuqdnwo5HSeDhygktHP)-Da;Cs!m6+->6&?ytg_pux;iGUUTz=q&e^a7oF_O(*UO4~3_~OX02XQ8*MXKXAjpDclt93J-;+!b{<; z@KHDvF26Jxg`2`%;i2$UcqzOUJ_?7z<&P$#a8tM|JQSV^FNL?lN8wPod}=ZZH-)>x zL*c3LQg|zT6b^;q9g|rVMukaXR#+5Pg-u~sI28shq*Y;5m=tD(MPXIg6n2GEVbDTa z6-I?gVOCfaR)tMrS2z_0Eu>XpRG1WIg+*ai*c5h!Q(^ejo>3STCWTpHQCJl=gzDohHq!lJM$Yzn)=sW5zK&nS!vlfta9D69&b!me;C zT;Be}|MVR6|NYO)=bmp0H-)>xL*c3LQg|zT6b^;UcTGm&rf^qyC_EKj3U7sv!l7{a zsmUnZ6z&QSg{Q(x;jQpdI210wH5rAQ!d>B^@KksyycIqQhr;DUlTo-S+!Y=QPlcDl zTj8T{C=73y%&IUdObWBYqOdA#3cJFoFlZsI3ZufLFe@wytHP$RE1U|07SgIPDohHq z!lJM$Yzn)=sW50EtqP;Uq%bQi3ai4Vuq&Jj!-w{a!l*DQ%nFObs<0{S3a7&5?LX@o z0K!ct?g|fur@~9&t?*Ge6fWO!!@nuq6z&QSg{Q(x;jQpdI20~FH5rAQ!d>B^@Kksy zycIqQhr;EzCZljuxGOvqo(eC8x57u^P`G?(G77gB@UJTSy72ONdw((MB|H?K3NMAX z!bjmy7~U|tRbf<^6lR4*VO7`^c7;=6(8gL7MukaXR#+5Pg-u~sI28tMtW{xDm=tD( zMPXIg6n2GEVbI1}6-I?gVOCfaR)tMrS2z`h5A7L+QDIV;6&8h6VN=)@PKC?c`_~7l zf4V4uaMOvq!b9Py@KSgyd=w6a%Xi%HZwfbsyTU`^sqj*GD|{3Vh09M(M&YJ#S9mBq z6@KAUvycFIFAB96UyTU`^ zsqj*GD|{3Vh0703M&YJ#S9mBq6}&qi`q;@0iT0Fe*$6v%;dVDr^e7 z!l^K5A*~9d!lW=OEDEc_rm!oV3WFBXsxT@{3bVqZuqtc{yTYk3Xd$f%qr#*xD=Z4D z!ltk*oC?FI_Kd=)Fe%Imi^8g~DeMZT!sY!x=otXQO(*UO4~3_~OX02XQ8*MXKXAjp zDclt93J-;+!b{<;@KHDvF26Jxg`2`%;i2$UcqzOUJ_?7z<&P$#a8tM|JQSV^FNL?l zN8wPoeEyxxU&Zrv;pJ!jZ!adjgqy-$;i2$UcqzOUJ_?7z@cwsnFE@Nu7!@XkSz%FF z6*h%k;Zzv3u~vmqVN#eC7KK$|Q`i+wg+Uu@RTvc}g;`-ySQR#fUEx$1w6Ru&QDIV; z6&8h6VN=)@PKDu9dq!bYm=tD(MPXIg6n2GE;qv~UzdoA%(?tP}& zqi`r(e&B|GQ@API6&?ytg_pux;iGUUTz+XX3O9wj!b9Py@KSgyd=w6a%O6cf;ihm` zcqlv-UJ7r8kHVpF`P5_-ZVGpWhr(0grSMkxC>#pIJ0`O#j0%&&tgtAo3Y)^Na4HO1 zNUOrAFe%Imi^8g~DeMZT!k~q;DvSz~!mO|;tO}dLu5c<0T1czHs4ywa3X8(3uqo^c zr^4{5J)}&qi`r(erYlaH-)>xL*c3LQg|zT6b^;UA5BK#rf^qyC_EKj3U7sv!tnzB z)hAyUUVdd>J~cXpo5Ee;q3~3ADZCXv3Wvh*j>)VFqr#*xD=Z4D!ltk*oCX+u8~#n< zrf^qyC_EKj3U7sv!l7{arO7DV6z&QSg{Q(x;jQpdI20~_G#Q1P!d>B^@KksyycIqQ zhr;DklTo-S+!Y=QPlcDlTj8T{C=BnI%&IUdObWBYqOdA#3cJFoFlZsI3ZufLFe@wy ztHP$RE1U|07SgIPDohHq!lJM$Yzn)=sW50EtqP;Uq%bQi3ai4Vuq&Jj!>9I)!l*DQ z%nFObs<0{S3a7&5?SH{D0EL^vUE!hdRCp=86+Q}w!sWXrqi|EWD?AjQ3NMAX!bjmy zxct;)6mAN4g@?jZ;id3a_$V9-m*1L@KAUvycFIFpBM12n)tf#`Tzg-Kdp}! zlU~B*L!(o;Dcltv3QvWX!du~^a3~CKn9Qm$DohHq!lJM$Yzn)=sW50`tqP;Uq%bQi z3ai4Vuq&JjgErQxFe*$6v%;dVDr^e7!l^K5A*~9d!lW=OEDEc_rm!oV3d4u?jKZie zDa;Cs!m6+->B^@KksyycIqQhr;EzCZljuxGOvqo(eC8x57u^P`G?( zG72|^yTU`^sqj*GD|{3Vh2ag8SrtZwNnuu46jp^zVOKa61}&sjVN{qDW`#vzRoE1E zg;QbBLRu9@g-KynSQJ);O<`9!6$UM&Rbf<^6lR4*VO7`^c7;=6_|TqF7!@XkSz%FF z6*h%k;Z(T1{qK4PfN;}^yTU`^sqj*GD|{3Vh0Ax`@NWt?g}cH-;i>Racq@Dq4u#84 zO-A9Sa94OJJQZFFZ-tM-p>X-F$tc_u?g|fur@~9&{Q~~=>;HA(<%#g~V$w@E6fPec zox)AwuJBNJD!dfl3Lk|-VR*x2R)tYvQkWGMg;ilw*cDENK^tpT7!@XkSz%FF6*h%k z;Zzv3u~vmqVN#eC7KK$|Q`i+wg+U8xRTvc}g;`-ySQR#fUEx$1KD1{PMukaXR#+5P zg-u~sI2A5$|JT>2!hgCbfN;}^yTU`^sqj*GD|{3Vh0Ax`@NWt?g}cH-;i>Racq@Dq z4u#84O-A9Sa94OJJQZFFZ-tM-p>X-F$tc_u?g|fur@~9&t?*Ge6fPf{jKWRfuJBNJ zD!dfl3Lk|-VR*x2R)tYvQkWGMg;ilw*cDENK?`YB7!@XkSz%FF6*h%k;Zzv3kXD6J zVN#eC7KK$|Q`i+wg+U8xRTvc}g;`-ySQR#fUEx$1KD1{PMukaXR#+5Pg-u~sI2A5$ z|6R`j5NX-B$tc_u?g|fu zr@~9&t?*Ge6fVCt8HJm|UE!hdRCv9BfBmR`U3mFf|9&y)C43YPh0BLVr*KoaD?AjQ z3NMAX!bjmy7~U|MRbf<^6lR4*VO7`^c7;=6(8gL7MukaXR#+5Pg-u~sI28tMtW{xD zm=tD(MPXIg6n2GEVbDTa6-I?gVOCfaR)tMrS2z`h5A7L+QDIV;6&8h6VN=)@PKC?+ z|MK#oxPfbSQrf^qyC_EKj3U7sv!l5v{ zV=}A4s4ywa3X8(3uqo^cr^29xv?`1Wlfta9D69&b!me;C3|dI5!l*DQ%nFObs<0{S z3a7%Lg|sS+3X{UDuqdnwo5HSeDh!|6GYX@^q%bQi3ai4Vuq&Jjm-qiw&j1i^I&oKc zC_EKj3U7sv!l7{afgAo!;ihm`cqlv-UJ7r8kHVpF`K8Gy+!XE#4~3_~OX02XQ8*MX ze>53|o5Ee;q40bG|N5=|y72O|{`F$gOL!}M6b^;Ur$(o6Q@ATU6rKt%g}1^-;ZPXf zF_~3iRG1WIg+*ai*c5h!Q(@4?S`|ixNnuu46jp^zVOKa625qcWVN{qDW`#vzRoE1E zg;QbBLRu9@g-KynSQJ);O<`9!6^2jk8HG_{QkWGMg;ilw*cDEN%lrTS^*QsOE(##r zbmFe?P@KAUvycFIFAB98V@=KFZxGCHf9tux|m%>}& zqi`r({%A4^H-)>xL*c3LQg|zT6b^;UrzWFtQ@ATU6rKt%g}1^-;ZPXfF_~3iRG1WI zg+*ai*c5h!Q(@3TS`|ixNnuu46jp^zVOKa61}&sjVN{qDW`#vzRoE1Eg;QbBLRu9@ zg-KynSQJ);O<`9!6^2jk8HG_{QkWGMg;ilw*cDEN%lrSOX8;H{owzGJ6rKt%g}1^- z;ZV5zzzzSVa8tM|JQSV^FNL?lN8wPo{L*9;ZVGpWhr(0grSMkxC>#oxKbnlfP2sNa zcme#oxKbnlf zP2sNaPn^7b!y2B2_LxGOvqo(eC8x57u^P`G^8WE5@+ zcZG+-Q{koXR`@6!3YVXnjKWRfuJBNJD!dfl3Lk|-;qqIPQMf7GU%Racq@Dq4u#Racq@Dq4u#8aP38ss>v!<$!pqP4+lxsr;jZvdcq+UU-U=UuL*eqF(J9;% z?g|fur@~9&t?*Ge6oxlUW>pv!CWTpHQCJl=g#pIJ0`O#j0%&&tgtAo3Y)^Na4HO1NUOrAFe%Imi^8g~DeMZT!k~q;DvSz~!mO|; ztO}dLu5c<0T1czHs4ywa3X8(3uqo^cr^4{5J)Nx`JXNdAl!7~uJBNJD!dfl3Lk|-;qn7F{F}l};jZvdcq+UU-U=UuL*epElTo-S z+!Y=QPlcDlTj8T{C|v$%G72|^yTU`^sqj*GD|{3Vh0CWVqi|EWD?AjQ3NMAX!bjmy z7~V0NRbf<^6lR4*VO7`^c7;=6&_Y@jMukaXR#+5Pg-u~sI28shq*Y;5m=tD(MPXIg z6n2GEVbDTa6-I?gVOCfaR)tMrS2z`hPwg3nQDIV;6&8h6VN=)@PKC?+f6+4lgqu#> z6&?ytg_pux;iGUUTz=q&e^aG&+Tw!d>B^@KksyycIqQhr;DklTo-S+!Y=QPlcDlTj8T{C=BnI z%&IUdObWBYqOdA#3cJFoFlb|~3ZufLFe@wytHP$RE1U|$i^h6cNUOrAFe%Imi^8g~ zDeMZT!k~q;DvSz~!mO|;tO}dLu5c<0pV~7Dqr#*xD=Z4D!ltk*oC=rsfBpJ&{ZAJK z5NX-7$tc_u?g|fur@~9& zt?*Ge6fS=>8HJm|UE!hdRCp=86+Q}w!sSzwQMf7G6&?ytg_pux;iGUU4DXoCsxT@{ z3bVqZuqtc{yTYk3Xd$f%qr#*xD=Z4D!ltk*oC<>$(yA~jObWBYqOdA#3cJFoFlZsI z3ZufLFe@wytHP$RE1U|$r}m7(s4ywa3X8(3uqo^cr^4m!U+@e-;ihm`cqlv-UJ7r8 zkHVpF`L4+*+!XE#4~3_~OX02XQ8*MXKQ$SJo5Ee;q3~3ADZCXvFW_H4Mqd|Rer_2r zCcT8qZ;ejjrf^qyC_EKj3U7sv!l7{a&}0;D3U`Hv!c*a;@K*RJ916o5CbKGx3X{UD zuqdnwo5HSeDh%3KtHP)-Da;Cs!m6+->jKkGj)CcT71;qqIfQ@API z6&?ytg_pux;iGUUTs|}zg`2`%;i2$UcqzOUJ_?7z@P^5(3ZufLFe@wytHP$RE1U|0 zHrA>zDohHq!lJM$Yzn)=sW50EtqP;Uq%bQi3ai4Vuq&JjgBH@NFe*$6v%;dVDr^e7 z!l^KPXwN8&3X{UDuqdnwo5HSeDqP@KAUvycFIFAB96}&qi`q;Zpv!CWTpHQCJl=gX-5(J9;%?g|fur@~9&t?*Ge6fU2djKWRfuJBNJD!dfl z3Lk|-VR*-6R)tYvQkWGMg;ilw*cDENK^tpT7!@XkSz%FF6*h%k;Zzv3kXD6JVN#eC z7KK$|Q`i+wg+U8xRTvc}g;`-ySQR#fUEx$1KDB2QMukaXR#+5Pg-u~sI2A7M|N8Y+ z;h!!FAl!7~uJBNJD!dfl3Lk|-;qn7F{F}l};jZvdcq+UU-U=UuL*epElTo-S+!Y=Q zPlcDlTj8T{C|v$%G72|^yTU`^sqj*GD|{3Vh0CWVqi|EWD?AjQ3NMAX!bjmy7~V0N zRbf<^6lR4*VO7`^c7;=6&_Y@jMukaXR#+5Pg-u~sI28shq*Y;5m=tD(MPXIg6n2GE zVbDTa6-I?gVOCfaR)tMrS2z`hPwg3nQDIV;6&8h6VN=)@PKC?czriyAg`2`%;i2$U zcqzOUJ_?7z<+~=Ma8tM|JQSV^FNL?lN8wPo{M2L=ZVLAo@UMTrUl(3})<0fMdI?X3 zm%>}&qi`r(ert3JH-)>xL*c3LQg|zT6b^;UhbE(NQ@ATU6rKt%g}1^-;ZPXfFqu_h zRG1WIg+*ai*c5h!Q(@4?S`|ixNnuu46jp^zVOKa61}&sjVN{qDW`#vzRoE1Eg;QbB zLRu9@g-KynSQJ);O<`9!6^0M(8HG_{QkWGMg;ilw*cDEN%iF*E`cCl=7X=h<3U`Hv z!c*a;@K*RJ91553nvB9t;jZvdcq+UU-U=UuL*epMlTo-S+!Y=QPlcDlTj8T{C|rJP zG72|^yTU`^sqj*GD|{3Vh0BK~qi|EWD?AjQ3NMAX!bjmy7~U|MRbf<^6lR4*VO7`^ zc7;=6&_Y@jMukaXR#+5Pg-u~sI28shq*Y;5m=tD(MPXIg6n2GEVbDTa6-I?gVOCfa zR)tMrS2z`h5A7L+QDIV;6&8h6VN=)@PKC?cf6_Amgqu#>6&?ytg_pux;iGUUT)yLm ze^a$(yA~jObWBYqOdA#3cJFoFlZsI3ZufLFe@wy ztHP$RE1U|$hxUxZs4ywa3X8(3uqo^cr^4m!zkYrB_@|2k2sfR$D?AjQ3NMAX!bjmy zxO~SA|E6$LxGOvqo(eC8x57u^P`LcmWE5@+cZG+-Q{koXR`@6!3YXuSjKWRfuJBNJ zD!dfl3Lk|-;qsx$DBKk83J-;+!b{<;@KHDvhBr)RRTvc}g;`-ySQR#fUEx$1w2)SX zQDIV;6&8h6VN=)@PK7}WX;l~%CWTpHQCJl=gLF3ZufLFe@wy ztHP$RE1U|K_kX8n00=joxGOvqo(eC8x57u^P`LcS4gaQaQ@ATU6rKt%g}1^-;ZV5z z`a7Aw{t@KAUvycFIF zAB98V@~O!v+!XE#4~3_~OX02XQ8*NacT8qg7!@XkSz%FF6*h%k;Zzv3u~vmqVN#eC z7KK$|Q`i+wg+U8xRTvc}g;`-ySQR#fUEx$1w2)SXQDIV;6&8h6VN=)@PKDu9dq!bY zm=tD(MPXIg6n2GE;qv~UzP`@<(?tP}&qi`r(e&B|GQ@API6&?yt zg_pux;iGUUTz+XX3O9wj!b9Py@KSgyd=w6a%O6cf;ihm`cqlv-UJ7r8kHVpF`P5_- zZVGpWhr(0grSMkxC>#pIJ0`O#j0%&&tgtAo3Y)^Na4HO1NUOrAFe%Imi^8g~DeMZT z!k~q;DvSz~!mO|;tO}dLu5c<0T1czHs4ywa3X8(3uqo^cr^4{5J)4w+!XE#4~3_~OX02XQ8*MXpPG!qP2sNaPfA{qT z=^ri%DBKk83J-;+!b{<;@KHDvF5fj7g`2`%;i2$UcqzOUJ_?7z<)#ox4^2klrf^qyC_EKj3U7sv!l5v{VKS@2 zs4ywa3X8(3uqo^cr^29xv?`1Wlfta9D69&b!me;C3|dI5!l*DQ%nFObs<0{S3a7%L zg|sS+3X{UDuqdnwo5HSeDhwamGYX@^q%bQi3ai4Vuq&Jjm$(0#ox z-n^7c#501$3EaaVXKJQZFFZ-tM-p>X+* z8~#nRacq@Dq4u#8yCZljuxGOvqo(eC8x57u^P#E4YnN?v_m=tD(MPXIg z6n2GEVbDTa6-I?gVOCfaR)tMrS2z_0Eu>XpRG1WIg+*ai*c5h!Q(@3TS`|ixNnuu4 z6jp^zVOKa6h7au-g;8Nrm=zXfY>3O9wj!b9Py z@KSgyd=w6a%cmxza8tM|JQSV^FNL?lN8wNy-Z7a~VN{qDW`#vzRoE1Eg;QbBLRu9@ zg-KynSQJ);O<`9!6$UM&Rbf<^6lR4*VO7`^c7;=6&_Y@jMukaXR#+5Pg-u~sI2DFZ z?HPqpVN#eC7KK$|Q`i+wh0FWD(=z~sn@-#n9tux|m%>}&qi`r(e&B|GQ@API6&?!D z7x1sYyRQo`KkHvFCcT8W!bjmyxct)S6mAN4g@?jZ;id3a_$V9-mp__}!cF0>@KAUv zycFIFAB98V@~O!v+!XE#4~3_~OX02XQ8*NacT8qg7!@XkSz%FF6*h%k;Zzv3kXD6J zVN#eC7KK$|Q`i+wg+U8xRTvc}g;`-ySQR#fUEx$1w2)SXQDIV;6&8h6VN=)@PKDu9 zdq!bYm=tD(MPXIg6n2GE;qv~UzP_9N(?tP}&qi`r(e&B|GQ@API z6&?ytg_pux;iGUUTz+XX3O9wj!b9Py@KSgyd=w6a%O6cf;ihm`cqlv-UJ7r8kHVpF z`P5_-ZVGpWhr(0grSMkxC>#pIJ0`O#j0%&&tgtAo3Y)^Na4HO1NUOrAFe%Imi^8g~ zDeMZT!k~q;DvSz~!mO|;tO}dLu5c<0T1czHs4ywa3X8(3uqo^cr^4{5J)(A-y!pqP4 z=Zi@%;id3a_$V9-mtPv4!cF0>@KAUvycFIFAB98V@<)?VxGCHf9tux|m%>}&qi`r( zJ~bJIo5Ee;q3~3ADZCXv3Wvh*j>)VFqr#*xD=Z4D!ltk*oC<>$(yA~jObWBYqOdA# z3cJFoFlZsI3ZufLFe@wytHP$RE1U|07SgIPDohHq!lJM$Yzn)=sW5zM&nS!vlfta9 zD69&b!me;CT;6|ueTn<0ivkEYowzGJ6rKt%g}1^-;ZV5zzzzSVa8tM|JQSV^FNL?l zN8wPo{L*9;ZVGpWhr(0grSMkxC>#oxKbnlfP2sNaPn z^49STK;fovS9mBq6#pI8z!?Vj0%&&tgtAo3Y)^Na4HO1NUOrAFe%Imi^8g~DeMZT!k~q;DvSz~ z!mO|;tO}dLu5c<0T1czHs4ywa3X8(3uqo^cr^4`|J)Racq@Dq4u#8aO-A9Sa94OJJQZFFZ-tM-p>X-oWE5@+cZG+-Q{koXR`@6!3d0*F zvnq@Vlfta9D69&b!me;C3|dI5!l*DQ%nFObs<0{S3a7%Lg|sS+3X{UDuqdnwo5HSe zDhygktHP)-Da;Cs!m6+-> z6&?ytg_pux;iGUUT)yLme^a#pI8z!?Vj0%&&tgtAo z3Y)^Na4HO1NUOrAFe%Imi^8g~DeMZT!k~q;DvSz~!mO|;tO}dLu5c<0T1czHs4ywa z3X8(3uqo^cr^4`|J)@KAUvycFIFAB96@KAUvycFIFAB96fY>3O9wj!b9Py@KSgyd=w6a%cmxza8tM| zJQSV^FNL?lN8wNy-Z7a~VN{qDW`#vzRoE1Eg;QbBLRu9@g-KynSQJ);O<`9!6$UM& zRbf<^6lR4*VO7`^c7;=6&_Y@jMukaXR#+5Pg-u~sI2DFZ?HPqpVN#eC7KK$|Q`i+w zh0EK(GXRB~!d>B^@KksyycIq#;9nd2b>Zdr|M6ndOSpX3=oD@WcZG+-Q{koXR`@6! z3YVXnjKWRfuJBNJD!dfl3Lk|-;qqIPQMf7G6&?ytg_pux;iGUUTs|}zg`2`%;i2$U zcqzOUJ_?7z@P^5(3ZufLFe@wytHP$RE1U|07SgIPDohHq!lJM$Yzn)=sW50EtqP;U zq%bQi3ai4Vuq&JjgBH@NFe*$6v%;dVDr^e7!l^KPXwN8&3X{UDuqdnwo5HSeDqPRacq@Dq4u# z;i>Rac)x&u?bp|Zm!I{Y7n5GXp>X+*iF{MIDcltv3QvWX!du~^a41}UYBCBpg}cH- z;i>Racq@Dq4u#8aO-A9Sa94OJJQZFFZ-tM-p>X-oWE5@+cZG+-Q{koXR`@6!3d0*F zvnq@Vlfta9D69&b!me;C3|dI5!l*DQ%nFObs<0{S3a7%Lg|sS+3X{UDuqdnwo5HSe zDhygktHP)-Da;Cs!m6+->Racq@Dq z4u#8aO-A9Sa94OJJQZFFZ-tM-p>X-oWE5@+cZG+-Q{koXR`@6!3d0*Fvnq@Vlfta9 zD69&b!me;C3|dI5!l*DQ%nFObs<0{S3a7%Lg|sS+3X{UDuqdnwo5HSeDhygktHP)- zDa;Cs!m6+->VL@RN8v!>L}B=aR))fa!i>U#!ivI%!j8g$!imE0Kr2IG zLSaT>L19HI1CkmrItV~Q{N?}f6NnuT4OJPsp zNa0LjL{CUDg(-zOg(ZbGg)N0Wg(HPCg%Ld=#T2F#<`k9`))clB_7sj3&J;%UgcMVl zQkYX%Qdm>iQrJ^CQaDo>9q4(6!j!_C!ji(8!j{6G!jZz6!f^lkc-HJ&C;(wXpE0Ab zps=E_p|GQHpm3rv{0IYoKw&~*Mqxo=MPWl>N8v!>L}7SID??#IVMbv=VMSp>VMpOW z;Y4Bhg;s{bgu;x%g2IZzhQf}*fx?Nx@IWg=VM1X>VL@RtSM|M>?s^6oGFax2`Q#9r7)+kq_C#2rLd=Pq;RG%q9>%7!j!_C!ji(8!j{6G z!jZz6!ib)bVhU3Va|%leYYJNmdkRMiX9}YOJQkYX%Qdm>iQrJ^CQaDo>?my5T z0E7vB#*D(k0Z;zu<6k&G)~_7T?j;4oG1(rv@#SX6lN3_ z6jl^A6m}F26iyUIdsvy6!j!_C!ji(8!j{6G!jZz6!ib)bVhU3Va|%leYYJNmdkRMi zX9^>FLW(I&DaDXb}MDeNg6DV!;c=m{yNFr_f3u%xi2u%)o4aHMdiFgnol423C$ zIfW&KHH9sOJ%uBMGlk*)+wt_;w@?7Wgg#?NVL@RU# z!ivI%!j8g$!imE0l2(Sogu;x%g2IZzhQf}*fx?Nx@C&UBg$acjg$0Ebg$;!rg#(2X zh2eo#hQfrxjKYG#io%A%j>3V$iNa_PD-%iQrJ^CQaDo>(GyZkVM<|6 zVM$?4VM}38;Yi_3VMI?zF@-6GIfW&KHH9sOJ%uBMGlda7A;lD?6y_9`6xI~B6!sL3 z6wVYz2YQ~NFr_f3u%xi2u%)o4aHMdiFua&x4}iji!ps3r{+8okI6u}e9M9y06@?9j z9fbph6NTY#v~(0E6lN3_6jl^A6m}F26iyU|zthT4m{6EeSWs9|*ihI}I8ZoI82&*k zLt#Q;Mqxo=MPWl>N8v!>L}B=qR))fa!i>U#!ivI%!j8g$!imD@0#+ubFr_f3u%xi2 zu%)o4aHMdiFrp`K`TRHLSaT>L19HtSM|M>?s^6oGFaH((??3DTO(OC51JGErmUWBZV`C z;l*p(1As7bJmbkfar_JC$NHJ$nVhhou%fV`u%mFGaH25$4OZjtSM|M>?s^6oGFax2`Q#9r7)+kq_C#2 zrLd=Pq;RG%q9>%7!j!_C!ji(8!j{6G!jZz6!ib)bVhU3Va|%leYYJNmdkRMiX9}aQ z^gKghN?}f6NnuT4OJPspNa0Ljc=6$Q!tPrr0AWI(F{7}cu%fV`u%mFGaH25$4F>*z z!i2(%!h*tz!iK_*!hynx!ti%m8442$GYSg|D+(J5I|>I1Ckn$qXk{o&D9k7iQrJ^CQaDo>(GyZkVM<|6VM$?4VM}38;Yi_3VMI?zF@-6GIfW&K zHH9sOJ%uBMGlkJtdY+*$r7)+kq_C#2rLd=Pq;RG%y!b|Y0H^TezdZhh^JD#l{*xJn z1%(xb4TT+r1BDZX;curEaR&Z?!i2(%!h*tz!iK_*!hynx!ti%m8442$GYSg|D+(J5 zI|>I1Ckn$qXk{o&D9k7iQrJ^CQaDo>(GyZkVM<|6VM$?4 zVM}38;Yi_3VMI?zF@-6GIfW&KHH9sOJ%uBMGlkJtdY+*$r7)+kq_C#2rLd=Pq;RG% z+)u|dd(T1v3KI%53JVG=3L6SL3I_@&3d4`IG885hW)v0_RuncAb`%a2P85chv@#SX z6lN3_6jl^A6m}F26iyU|Uub10OeoAKEGVofY$)s~94MS93=gz26ebjA6c!X#6gCug z6b=+l6h?bknV7OBYHxL zDNHHMDJ&_hDQqe1DI6)BDU9d|DW))`FsHDju%@u3u%~dOaHcRi(DMw1DTO(OC51JG zErmUWBZV`C;r`i458yxk!u@fySAC`>5KC@d(fC~PR~C>$u9C=9>Q%21e4m{C|zSW(ze*ikr8 zI8hiLXk{o&D9k7iQrJ^CQaDo>(GyZkVM<|6VM$?4VM}38 z;Yi_3VRWG9846Pha|%leYYJNmdkRMiX9~mp>yw^L19HoqI!i2(%!h*tz!iK_*!hynx!tjz-hQfrxjKYG#io%A%j>3V$iNf#;tqg?;g&Bnf zg%yPjg&l`1Q`l12Q#evM zQy9?`QcPh=VNPL5VNGF6VNc;m;Y?vfPe?I^DTO(OC51JGErmUWBZV`C5j`Qr6s8pB z6qXd$6t)!h6pj?m6h;Sno}nVL@RbqA=RS z%ET0=6y_9`6xI~B6!sL36wVYz^n?^sm{OQiSW;M1*izV2I8r!M7||0_Okql4PGL!5 zO<_x6PvJ=6OkqS%NHK*eg*k;Kg*AmOg*}BMg)@cGfu3h5OexGMEGeuhY$@z194VYB z4ENt?4*3V$iNf%bR))fa z!i>U#!ivI%!j8g$!imE03#|-=356Mj1%(xb4TT+r1BDZX;el3$!i2(%!h*tz!iK_* z!hynx!e|dG6H}N{m{V9%SX0uVm^LC&q4tT6ACj53koX=8wxuL2MQ+&!{2CSC`>5K zC@d(fC~PR~C>$u9C=7q6m7y@9Fr%=bu%fV`u%mFGaH25$gI0#Zgu;x%g2IZzhQf}* zfx?Nx@GGqhg$acjg$0Ebg$;!rg#(2Xh0z79OiW=)VNPL5VNGF6VNc;m;Y?vfPe?I^ zDTO(OC51JGErmUWBZV`C5j`Qr6s8pB6qXd$6t)!h6pj?m6h`!f6jPW|m{V9%SX0O!;9y%2LNG0pE0Abps=E_p|GQHpm3rv z{0#>FfWm~rjKYG#io%A%j>3V$iNf%AS{Vux3Ns1|3M&d53Ofo13MUG~KWJqrOeoAK zEGVofY$)s~94MS948PLKP?%7dQCLt|QP@z}Q8-XIQ5apo%ET0=6y_9`6xI~B6!sL3 z6wVYz^n?^sm{OQiSW;M1*izV2I8r!M7||0_Okql4PGL!5O<_x6PvJ=6OkqS%NHK*e zg*k;Kg*AmOg*}BMg)@cGS9+eIFr_f3u%xi2u%)nfz>}Hz@h=YR|NZ0lqvM&JaHcT4 zc=L~c;lKYM=QBQ_FrhG`u%NJ_u%WP{aG-FaF#L^HhQfrxjKYG#io%A%j>3V$iNf%A zS{Vux3Ns1|3M&d53Ofo13MUG~KWJqrOeoAKEGVofY$)s~94MS948PLKP?%7dQCLt| zQP@z}Q8-XIQ5apo%ET0=6y_9`6xI~B6!sL36wVYz^n?^sm{OQiSW;M1*izV2I8r!M z7||0_Okql4PGL!5O<_x6PvJ=6OkqS%NHK*eg*k;Kg*AmOg*}BMg)@cGS9+eIFr_f3 zu%xi2u%)o4aHMdiFud5)9sq<1ea4K!g2IZzhQf}*fx?Nx@HZIv0}2xgGYSg|D+(J5 zI|>I1Ckn&gX=Nx(D9k7N8v!>L}7FRD-%iQrJ^CQaDo>(GyZkVM<|6VM$?4 zVM}38;Yi_3VMI?zF@-6GIfW&KHH9sOJ%uBMGlda7A;lD?6y_9`6xI~B6!sL36wVYz zU+H;O!;8c5pXggC0AWI(F{7}cu%fV` zu%mFGaH25$4F>*z!i2(%!h*tz!iK_*!hynx!ti%m8442$GYSg|D+(J5I|>I1Ckn$q zXk{o&D9k7iQrJ^CQaDo>(GyZkVM<|6VM$?4VM}38;Yi_3 zVMI?zF@-6GIfW&KHH9sOJ%uBMGlkJtdY+*$r7)+kq_C#2rLd=Pq;RG%+|RHFKw&~* zMqxo=MPWl>N8v!>L}B=mR))fa!i>U#!ivI%!j8g$!imE0l2(Sogu;x%g2IZzhQf}* zfx?Nx@C&UBg$acjg$0Ebg$;!rg#(2Xh2eo#hQfrxjKYG#io%A%j>3V$iNa_PD-%iQrJ^CQaDo>(GyZkVM<|6VM$?4VM}38;Yi_3VMI?zF@-6GIfW&KHH9sO zJ%uBMGlda7A;lD?6y_9`6xI~B6!sL36wVYz2YQ~NFr_f3u%xhdz>|6O@h_Yo>$i?) za>Aa%k;0k6aR2=HwRjc^P?%7dQCLt|QP@z}Q8-XIQ5b%tm7y@9Fr%=bu%fV`u%mFG zaH250q?MsCp)jMcps=E_p|GQHpm3rv{6Z^3VM1X>VL@RbqA=RS%ET0=6y_9`6xI~B6!sL36wVYz^n?^sm{OQiSW;M1*izV2 zI8r!M7||0_Okql4PGL!5O<_x6PvJ=6OkqS%NHK*eg*k;Kg*AmOg*}BMg)@cGfu3h5 zOexGMEGeuhY$@z194VYB4EJwn4*3V$iNf%bR))fa!i>U#!ivI%!j8g$!imE03#|-=356Mj1%(xb4TT+r1BDZX z;el3$!i2(%!h*tz!iK_*!hynx!e|dG6H}N{m{V9%SX05KC@d(fC~PR~C>$u9C=3s@G885hW)v0_RuncAb`%a2P83FaSecl@l){|C zlERw8mcpLGk;0k6h@OyQ3R4Pm3QG!W3R?<$3P%cO3L|<#iYZJf%qc7>tSM|M>?s^6 zoGFax2`Q#9r7)+kq_C#2rLd=Pq;RG%I?(eBg(-zOg(ZbGg)N0Wg(HPCh2j1{djJq7 z^cgb>3koX=8wxuL2MQ+&!;diV2NWh0W)v0_RuncAb`%a2P85chv@#SX6lN3_6jl^A z6m}F26iyU|Uub10OeoAKEGVofY$)s~94MS93=gz26ebjA6c!X#6gCug6b=+l6h?bk znV7OBYHxLDNHHMDJ&_h zDQqe1DI6)BDU9d|DW))`FsHDju%@u3u%~dOaHcRi(DMw1DTTQMp3HiWf8qRCzjQp4 z6V?>A6!sL36wVZe7xQsCo`nJwCKP5A78F(#HWYRg4irulhQHCuP?%7dQCLt|QP@z} zQ8-XIQ5gPCD??#IVMbv=VMSp>VMpOW;Y4Bh2dxZ+356Mj1%(xb4TT+r1BDZX;a6H2 z3KI%53JVG=3L6SL3I_@&3Zn~HnV7OBYHxLDNHHMDJ&_hDQqe1DI6)BDU9d|DW))`FsHDju%@u3u%~dOaHcT& zO3yPCrWEEBmK4?$wiNahjug%mh8NFi4*bqADXb}MDeNg6DV!;c=m{yN zFr_f3u%xi2u%)o4aHMdiFrp`NVNGF6VNc;m;Y?w8@#Y_K{rCUl zjOPJ`356Mj1%(xb4TT+r1BDZX;cv7u6ebjA6c!X#6gCug6b=+l6o$Xk%21e4m{C|z zSW(ze*ikr8I8hk>K`TRHLSaT>L19HtSM|M>?s^6oGFaH((??3DTO(OC51JGErmUW zBZV`C;l-Zz03b~0GiDSP6jl^A6m}F26iyU|zrnyCP?%7dQCLt|QP@z}Q8-XIQ5gPC zD??#IVMbv=VMSp>VMpOW;Y4Bh2dxZ+356Mj1%(xb4TT+r1BDZX;a6H23KI%53JVG= z3L6SL3I_@&3Zn~HnV7O zBYHxLDNHHMDJ&_hDQqe1DI6)BDU9d|DW))`FsHDju%@u3u%~dOaHcT&O3yP6crr&l z{)O{%>(uc~PMA|zQdm>iQrJ^CQaDo>UL20|_AL~EFrm+wQCLt|QP@z}Q8-XIQ5gOP z1AjnaLSaT>L19HtSM|M>?s^6oGFax2`Q#9r7)+kq_C#2rLd=Pq;RG%q9>%7!j!_C z!ji(8!j{6G!jZz6!sshK&rq0Bm{V9%SX0Lt#Q;Mqxo=MPWl>N8v!>L}7SID??#IVMbv=VMSp>VMpOW;Y4Bhg;s{b zgu;x%g2IZzhQf}*fx?Nx@IWg=VM1X>VL@RtSM|M z>?s^6oGFax2`Q#9r7)+kq_C#2rLd=Pq;RG%q9>%7!j!_C!ji(8!j{6G!jZz6!ib)b zVhU3Va|%leYYJNmdkRMiX9}ak>3Qa4>UsPN=g0c7I1Ckn$$S{Vux z3Ns1|3M&d53Ofo13MUG~FSIfgCKP5A78F(#HWYRg4irulh6h?13KI%53JVG=3L6SL z3I_@&3Zp%&OiW=)VNPL5VNGF6VNc;m;Y?vfPe?I^DTO(OC51JGErmUWBZV`C5j`Qr z6s8pB6qXd$6t)!h6pj?m6h`!f6jPW|m{V9%SX05KC@d(fC~PR~C>$u9 zC=4%YWhhK2%qT1?j;4oG1*x(8^GlP?%9zP*_peP}os8P&iQ-9%yAKOeoAK zEGVofY$)s~94MS9jP|fHF@-6GIfW&KHH9sOJ%uBMGlda7A;lD?6y_9`6xI~B6!sL3 z6wVYz^n?^sm{OQiSW;M1*izV2I8r!M7||0_Okql4PGL!5O<_x6PvJ=6?0_dT%Hv-+ zKh}>9^h88qN?}f6NnuT4OJPspNa0LjxZfXF(6>+k!h}9!Mqxo=MPWl>N8v!>L}B<5 z2L6D;gu;x%g2IZzhQf}*fx?Nx@RC-B!i2(%!h*tz!iK_*!hynx!te{N4221W8HELf z6@?9j9fbph6NTY{R))fa!i>U#!ivI%!j8g$!imCY4=WQ>m{OQiSW;M1*izV2I8r!M z7||0_Okql4PGL!5O<_x6PvJ=6OkqS%NHK*eg*k;Kg*AmOg*}BMg)@Z_Jt4&urWEEB zmK4?$wiNahjug%mMhAMHp)jQ|r?8~3rm&^3r*NcjrZC(eXb%9wgg#?NVL@RU#!ivI%!j8g$!imE0l2(Sogu;x%g2IZzhQf}*fx?Nx@C&UB zg$acjg$0Ebg$;!rg#(2Xh2eo#hQfrxjKYG#io%A%j>3V$iNa_PD-%i zQrJ^CQaDo>(GyZkVM<|6VM$?4VM}38;Yi_3VMI?zF@-6GIfW&KHH9sOJ%uBMGlda7 zA;lD?6y_9`6xI~B6!sL34tO$AJpP6A^Z(iLOimab=!uBJl){|ClERw8mcpLGk;0k6 z@Z#Zdsoe_&PSjt&aMoJz?*tUj-$^*PipLqt-@jBme<$JGDjsJnfB#bP{GEhzt9YET z{QXPC^LG-?t>SUU^7k(l&)-Qnw~EIZ%iq6LJbx$Q+$tVtEPww}@%){HbL)xcf1F?s z{GV42{}+8m4F5NM#{YBW@c+_h#88!4BK3?%TtXZ;hN_GzbJAtS2Pq77G&6@8J|W@2 zF;rz#nUezmK7C-Q^Ncyn^bWv`M@KU=9(?-15C@Lok2udPAsPScdH;=%Vi@XhXAW2$ z?#y^@)J~;+=HCt|s*E{s@%aTq95{wQ;zXo~mgWn8ehy%w^^O>tDAr2fvRc5KofBaw1=Q7%<%#p3P z2xdI^%#R@s979cbuBL=Ia12!$RYp_Me~kg{Ggq@K=saWQsJGQ-JowEphB$BxHQ~9M z65_xyRAp3|leaVY#EzlfHJigs?*PnrbTl*L!6$YMao`y0JaaWA#DQa|%BV7W2k@^k zpnc|Qb_Jbh%pCQu*^CFj8O9I?j-lo=S5rb9IEJds?WxT2mm2^3y`TTUsxqp~$=exxV#iSL zn$2ORcK~KQI+~gB;1fHBIB*Pgp1GP5;=nOfWmK7~dzs7*}nXB0qbe=JD)VpRg9{gq)LmW7Un$KKK z331>Usxqp~$=exxV#iSLn$2ORcK~KQI+~gB;1fHBIB*Pgp1GP5o(8@=ukpX0?*HjC zd7w&nU8VB`elIJtdw4R0-SO-mQ}}|yw-kPYFnCDeV+vnT_?E&?5bl1W@Mj8NQuvO- z&kzPbQTQ{3FDZOS;b#a{nKdZ)ks>%_WggKIKB4dxh3_f6gfMtS;S&m9QTU$1O9*$5 zD11WUD+=FJcnRU%s>}#q_3kN!zfkxqg?~aAj1)el@D~byrSMM(cN2xrD11%f2MWJI z7)%sCqwqC_A1M3=p(?Wm<#`8i#>&jJgwH8_L*bsn1BAg$;d2V#P`Ib?0O4+?@HvHV zDBM$cfbecr<{^C5>H(}lc@BH(0WA4=;`s>#EKuU*MK!@3Gq?LI};V%^aO5vXnst2$J z`hGq zJI7aacct^{ds>;1=J=GtUnu;Q!apHYlVAJ4aMJG5Och4w%P2mR$zd?An z+BceME@gKg00KH~4(PNwIKW}{L)tg)SG}VzW=CI)77DCY_XJL-%{w}6-hG0@Ocx8- zm7&vSeH?A)_!AtDS}0)V7+igK<`J#T6ACrcT#|Ah?D@yhs*IT<9cICMIBHOFr&+g3oZ6X`z5Q z%(PIzjOU(y9IYmSdF)Y>z=~%_=ha#$U>|!l6}5($77Cc7C!igVfDW^3Xy0h2X^wC@ zZPr2odsm>tEO@>?&$jW*KF(N~hua@#zG~f3z>G&13)u0{&(?KE0W(J};jrV;OmoS{ zbDlZlOjDJ)sg=<}0kbl{tVf(}-NgEn2hxUy77Exoo^hr*!CLEL0lS1BV2->y zb2>RY`6rHl;oePmboQo&0(OlL$9enKQJj`emD#d8=XD-x5-fFak4N26z&rrl)0^AT zj)$%$Fh`HBCa~k7^XlNq`aIjlb2L+vV2Q{b&plnjp(cSfC;~MJtaxOjDJ)sg+R=z^u%R^@y`=JUiFhO{_n8;3o*RB;C%D zUiokhGfnjXmeP1e_!%ohr_H*-y}fh2hX*Ns-MT7c?lWiX&Zq}qRz^JlD<1U#)+43+ zT&RTtW<1|>vB3Jo{*9+1nu;!wx#Lljz#Oo;?Vugc+JS2-y5!>? zX6L+aU6r}1mC;nxtjrmwqN>bIt&ExkW@XeQu;NjZU`fZfLRt$2tkLs5O#=7Z!tc55 zpywIitQFoi9=PAc`jZD9AiP^QxL0>(DZ6`6oU=Rg5ROOPQNY}d^9y)E-9Rd^9?dkDd_3nF^#H7Rbg_WFb3I)j-Zt)GwxiSL-LKnI+5hyP5bCaic8*$-zU1Q` zxcs{H364iC6fno5qX%#j?C~$Yw{)6{E{S?_d~=+)r@N)w4z59Ya-_pdw;eQd)ItF} z9y+hqb?au1x|+a_hYqt_(Y{fWU@5le%%vuQ6_1((=8;0*PiV#y(2j?`pU}>ceztzj z8{Df&U>!)$Ss6Mx(_IDay>P!iylp)1DGr-3pHWLV%y_g=z>H@{FT&T?5864tTp!*x z?)_RHN835lX|uXBW{%g;oly^9N!-0(2kHS>@u&x2?yl+qnDM9wV8=tJ&9~x9?&yor zLVEpq%pA2)z>Y^#(Ip?x(TsLH zu3;*w%G}h-s7YW}Moj`M9yJM;bUf=v)g&<2Vn19PuGXHjr-87 zI|`UN>S6&qo@d+mvf*nAKT!A$!resSGYVf*_<_Q25C#*4&raZf{Du1np{ohj;N0=t z(;M8=d9~U%=IFVG_Kj{kxFqi0T?6_(3cBr}J#cBq<5pa^PG5|!Ca?#^yY=C1-8VpHXit46ZYTu4MH^u z>>STn8O=18(s*`-H*kbs!%S0^xv7;=55TO9dH_~DJ32WF=(Jfqfb}5lK89^#>UX`z5!;{(l+&Z}?5nsxeOv{1ktJ=f5_QIlXv+;iAdlfa5c zO#*Xw)j|O?o@=<*1D(C?=o<=vIV&QsQ zc07-d4?Vt5N9kwl`hG$?@SkYlKU4UU!gmyYhVX7pMSp^?S_=i%pxj4XEflchq4R1j z6fkqtLIFD-IH(OeXQv*3HG1^*gXZW_55SCPr|yiobJ13l77CcdObZ3fc<$-_9@PUd zk3GMvV`kg9-#@AcVD4OZYf1W#=mBg4&hwLd9O`NUa~!HkV8)|`0%kmF64>#mNwDPO zJ~XRIV2&O&3CwuZBrxL%)Fd#EJx|v3wvFc?^=cFAPab&nYu4$i2VG6@qbs8(!IHRV zS5T9{iszm#N&gW|0{3`S55PP=ss~`kqaJ`6k9q)hJn8`~`M3|w>H(OeM?C;D9`yjs zc+>;1<53S_$;W+Y*2Mzm=-H_UV2vK#QNSKObQQN23amN)$BpMG_WI;M^uP}k-p|tM zjsna0aE~4}3D&*G9gms>c06hlm^;_oHN9=)9%jL(O{_n;;ZE1BFZsCR3Frd+Yq)M* zmAR>v(Z|tdWnQgEoNeRTx!!ML{mBC_A=Gsqc8+JPjG6>XX*?rb3k9rrv{1m@uXRTO zGoFApGy>Yt&_V$_aNSYBJenQW^tO%XtUy~$!Sn5@)}K7jc*e>+gny&%C}5XRJ%A-2 z&j_c}=HO>I9@PUd$K&oZ&GAlE<`I0=T9R&#o97a{f`^>p+rrBH8^)XY7*G-+^MN3eK9*auinvl^=^N%`?|-Y77Cc-QB49f9$igf z$8)EqqV&b+s|V~s@os&1+qe(Sx|+bw@yQmT4PQ~HCc%=FXFRG&V8yee^XlENa6In* zgfJK>d`jUj6#h!#pAhaQ3ZGHK#yj0m}#Ma9XS1LeMi^V2Xxg#@R-*61%+=Z`~;yc7FdJw9L-+B9CfjPog-~% z+=?X}baJMJ0`{O#4`9j1bL^qRObZ3fVWu8{9nZ8rylvd$QJ*%OIeyQl&0F-IpF9;& z>6X0Q@tpIUBkAl-A4l6e)&69M@YI^lt96}+9rzm>_|;eDA^fMcP{1ysngmNeo+HJb znu^jFqlE(YKJyM9d$dr%&hZJ&@fC$?5-dr1j%I2SSn+6~z`C1xMvoQ>SfeL+wx+jj zJUPDJ#QKv5exUFhgj&L32Y$xN%(R5hDWsD#ElD>Ag?a#HJm*}(p&r0e8qewD1w2yd zVgY-E(`oaq_&A!r81(?`L7^UidF;7UGfnzpw1mUnXRf|GGp_&OwsD^ecTYEA{*CGZ znDGSa0WA5rhuIJ50i2BF<6n6GHZ=*(Ub^qCjG6>y32Db8*dOmQ|K+L70YWti)}TB& zp0P4&5}5mpngmun_w?p=Y7$t3;+!{x)Kt{0%&XbIt&ExkW@Uc) zx4p%Lzf!0sftlkon&TNij-KG(sOvn|pgiZ94=_i4^?;q@bDHBBXPPto8+93nUF$u} zF*rcDQx9NC%5#uX55S5?J%DvLbB`V^6fonthI>6|rfKc2fqDQ|JiE(vxNaNwejU(Z zraKC(QMz-~9R=)oG}B!2agQFyW$D|F>-ov^Ojkb@Rq6geOZUSnqp7G_nKvhUj;AtL zKNVGFZfa%JBrq$ZCV>@?ngr`1)qNmUlfaBeO#(ZfJ2e%hFGg1r*n{Hz`tY`KAA5q! zO_baHmLK8{uoU>Oze zHy`I*!l533SsC>JtayG%4`4l>`Zu1P>h;Ng;elExVAc3;eRCw8y=l$*y7zeYnLXXP zj@};r^`E()QFj!u1AjvUzxv8(p}>;8d*B9IC}72-CV{zMYoUM{j}{8p@z8notyr^8 zUyK$C*n{Hz`tY{#oVhMHVLqc43YhT(Y7#8@xQE#fX%e{qX~)$B9;hCGRYLUu%mcuV zPR{hz19pz{`tY`K@2=|3m^og<{T|f=SQ2-SNA&>A@u(hv9gmi9m^&9;kD{+1G>4gb z0A@TpI&Ib+1?(K3t`Bb;_eoPR#?Ch+{z-%kEuH`MnN+PlCR zmvCq*x|GH}aL@TIc&f}zt&ExkW@WTcz=}srf+Zc_`Y1ICtkI)|0_Nz^)dXfdyI1SO z+s6IAM@<4dM_o;@U=NW}`+PwQfpYa=ncdIg*X)a~= z9L?U)L9wUs0HH1xScAHGl~E61DUGKx>H%2ss0U!~*Sc81j7L2HJDx}D!`sGlkb1HS z`x)u9Ie1T>@e;z_BMP5T_=>{!6kbAjx4JXx0W4+r>|DB7z>3FlvB1erbo>iX(9^N= zbk?;{U=7NhqnZSEJZcgw`M5`q77Ey-hju&yI?Qz2K|Aob>%-f|J#cl~K|4o%9KGb@ z9zEAE75!-&v8v2pssA$$-FDC(6!&u~`skm7pye<(^@EC2Y$xN zXraJT8u!4}9RU9>7u>_rN`8 zWz+*OE2D)1>oMg&ZQLVUO@cKyPdv{~V)ek+6n>!a8-%)=U=7Ms89IB@Z3pcfXE+{p z+d(r&-FDE9hju)I$8bEVNni%9CV?G~ngmNe?z8JPEaA{p)C~O9I$XDnr!wz1vHs+N zmk_FbW9N9r%BV@Ol*Ti{)g-XuQ4he}uXpMJSfeMP4Gk?6Fo)T#Sdy+DfVnHsR+D-F z_O75FfHll^FW2<8jr)Dij(&ox9)LL>bw>d+9`yk1cph#0sSTe{c*dC~eKERNz^?Us zTI)*)_4R{x;CH+Sa574cf8lwHKxc1i5}3nFO#(9>H3{r^=)77@0y9S~;jrVO^XeV_ zY<>4){Rg*==REUv6ZYTu3BuqZg^wwGLE&2pKS8+ri9&rGy(HxxX4fzkRb|Y;U&4WV z4VBSU)U3=aTA8b#imEaaiHwoM)P2Ib0JyLq&nc#s`JpeOD^#JU6)B{-Z z@$7~4vvu_V%we{BxIVmXJb^#ng#C;!D11xdCkWL8uq#6+XIdy==cpdQl8^gHp}Pv& zqvvvcc-we#q|@f$$@Wy{KYh;Y*6EAULIJyk?`f?sA=E+vJMi1t12`%E@h{xR9NpZ` z9t_`(WAxoZO-+I&Dfci7Uc(&KB(TS$ngrG`+o?%l#SqI?Qgx5)SnM%zfrY^#Hb!>G{b$ zV6|p_jmsU+HGCYcCV{zAsYzhPqb7m5yQ)cG#-rN~+VMPGAKo^ev%=#|*w3gY!IFPq|(W54T8IPI-c06}#DoS6Bt|qVt#ryT)ZR0*P2bY^LpHWv6nDGQRs!8CkwR!+{ z2|vJHK??=!9G}q~)dN_P^6akk6I?A6Fvp`V7BJ({#R7Ib>H(MssdsC7+s1P=`@D(u zCpQe}`ugB!`iw6rd`IDD2z4398kDEjXRM57noDUsm3ak6cyRSIO;zTmRz?d2%*yB?NdHf6a{=A!xo$ms7I(yUA1Z$%1z||zMjhX~Y;_h>y z77Cc-QC~l3$3v&h>du%s^6t#MKF_vs@7G$AZU?^K0<796h?4z>G)VPiV$-Pj7BV=ha#$V2++^ zXy2$wuq5t27iyt^IUco8z>bGbo3&8D%ux#k?0D$3`J5j|&+ALrHtr*?mT=g$);1<9V_^ylvbE`yE~NuzSBfmHkg&La47E zuydrJt?zz?f$!)?=K*bK1W(~V?dSoV{FleSa1YpkzS@AkTHR4#P2Ll@778r+xZ}B} z?Hf%+twEtCfq6)|r%O2KyjoWin4>3nyFR>a+=pgeOwH6AjL3vIebeQR@2kacbqeWsYzfCGhIz! z$Ma-;c-y##nXV=*`B_Geu^={k!%p7;0Aq;58Be)Hf(NxqLJ;5tFDBe?e389(-qd%xC_baOna2Vlmd9)KN>dH~k3M|Tx8 zN6+1wY0_!4?kZ>xig)Y7+s1uj=a+G)2e4%6$x%H3E1r9L8OQDH0c^(%&rhCRfWF%A z`ECNwKmF^;U+RH>La47EScCH9Naxkp@Nx7+OZbdJ`eJl7fjKDDBrxMqlfaBeO#(X} zH3^n{JSQYwO<=}D=he63<7oO~)FdzuDS?^<<~~C^9>J3}=56CSNU2F+1+FH+I)L1x zXZLg)UpD-OLON~!o~sGmFGf88yM!NT3BN%YOcXw&@HK@WDEtPYx-)A~o}KHAmC?ll zOKCinc>_oIHC(r@%G}h-JcNTncNAEI^6Xsd0hlA4PMg&OFo&7G6vB>&PMdXudo#yt zxWT!GY7(r8x^vXW(RMr&9FMxA zfSKbpEaA{pbV=O3Uu&U&IUco8z>Y@?1H3_VE^raByu}4=E*zr7BAKo^e zcK~OcimFMlROjYZhEAJ*NRz-Fj}{7;2LR19&3LY1rl}r)c{I~P0V|$+I@45l#u^mo z?9OPRfLWOr%cKAHzwUP_x}(4vktZJY0IXrA9)LZ1KL6YPXXdDxrWMaQ?_H#_SU5Bw8CEfiRT^5jToZ(1l|=cp#Zl8<|s1$3BQL;FTkQL{2{ z)^WXUJSE(3V*SYj4-o2J4|a}ctc;ojOKChKTulNio_l(Od)o2P9R=*e-n;eTZR6Ps z)g-X?Lfuio9A>-s+xW8KC4>R(c-)H0{D>xjd%so>z#fm9X)gJ=N6$HDnySoAt;`IM z;k)M)(#hFwPoMDsVK7tpoWeI0?kPM#s2;!?l;>!6#>%J%u$0DA8TA0Hc+>+h_iOb4 z%y@KHK|7v1HPfUoM)!KK2gUpK;ceqNb6sx2e8$~(^Z-u&iQ`|m|2BO;p;?iDu6oeT z?d%-S_;IwF1WRe$2Y_?7Z|37;lyB|Pa|-F~O-%xGcU6B{f%`KYX1bcd%u#m~u;Y0GhncP>Fmu#b57_ZMg~Loe05eDR0PJ|4 z!C`jJnWlOGOOf1f3(r{@^#IJu(1wP-dcZzN(P0)mr$@6hR)$WS_0o<=dK{zYBT6+1>>Sl3Sn_cXGu`XK96kCt+KlI%A4k)9wXXB9OSoSj-Zt(dMR3@J z`HVX?36^|3Ilh27>b8UCFbn9sTHjA-=BV!{wBylKbjinaG<&tCw{1M|{U+9*Jn#}i zH3{q-&sdq$CV{)w>H*j#R1aXu$31!i`q_G*9)OjjdI08Ls2+eBk9q)RJoofVA=Cq~ zj<|t(09HJ@SinA{{JcKAZQO5=bg_V$qb?S(<9V`;FB_h5ruhi|jk=?NUBdS;$Kdh= z{>NW<4o+$kEXld!34S@r)dSTeFmqIsz=~)08V)lx3D%(8d!d>HW;|*VnDMAdV8`=# zeR$h=_Ch+Z-o4$P%KoQ6L8vofZn1JCzm+Sn=G`spxdFJG%G69qo8%p}?A`JI8=_JhV{2&hZT# zxVr72og?i<>9&Jrj#?;S$3y4U`Z(Im@ftpkR%MpNJ?HC}YdyA&2fo|H`jZEKhEUh7 z+d001IR@`3#52uD@ELVAfnCC@uZ(&COX8kmk9q)BJn8|MyQ_KtW<0@%_2F&f*$dSJ zSR(So^Lz_%{mBE>1F&+`#RBH&(Lw<;9xW8GMxLL3Sn1RxFiWQeomeH=|+jJ|rn z9u)ia;ceqS_UNkz>>M9&0ow2dg>NbR1fjm4(5}oGKaQpy4=v%aOZX1%3cBr}o#PXl zqnZRuQtp$c?kHdmGkx`d8IQhx(2i$XAKo_Zy-;60VCJa13fl2#rn%(f*}2|qyPuh( zE*7xkp~FlU3z#|TVgWlI%`}&MJV!J20IYcK>6b$2<7jJ8=#B#R5%+R^c-wf6J#?5k z?kKQ5x92C%KY7OXjTQ5I`q0eevF z*N3-_``Dv}0(OpCD6r(?9z9yKZjK%;;V|O~&e*=8vo~G0ZkO==`tY`KA1NH)g6D?1 z*Ml9ndH_p4p3(E?HW2L`X+tA;N}o|Z0JAdmQtvggrm4!@)XJy_U{>agGtE0*ne|Za-*}E< zPfq>|4?JV(=)7826RgGbl<-$t>pvmf(RsB#joN7vrb=(77EydVo#4|wBxaR2%k~69keU+7Umdyf>0kv+kv0)<7hPrmeP3M0i3Zi zcYG@93H&z9G*uaMpHUCMif2cs%>iv_XrX|4cGbtxc0B37c06=mt=kToIjVhQ$D^s}l8@&+^JYzN+j!u9 z6YEbNcz|%H$}CBFay(;Y)Fdz~qb7kB&po}l9qoANs|VKegXggKZhd&$c;M$vn9r!| z*3Ecy+d(rPef5AH&(rncZR6fucfV}He#T!Z{1ZYg6tDxQpWteyY3E2A8oG?b%uyE$ z*zwS5vo01ebKLFMhqsOA%yrm=`HZ@wfEmw@PMdW{0Xs*{G?#qbyQ}UfV2>U;Z4T%# zyA?|~=m)gAtDrf0g7@pg+s3mOUT(sC#+%ihIr*cHf8l<$Y7*ErR+C`K$31$qP{15L zy6vDD&rasgYGJ5 zj>mIex2}Z(=B_{+8d@k|k8nC|)NfarZI&uJ-`e(dOT{W7*MV5o!{c`?KySV8)|`0(LxfUadO{m^tb? z4?7+@uhz%WW{$zte;lpKEQ!0{rJQpKhnfUtWnQd%%C_;8@a-nnpFHprg!(wz&haJ8 zQ40m^9BIcxR}+{yYNlz&qxQ{`kLRrLYE5t3cpz9&LBFw<=Z&3FPW6tMQfTk&x;{cK%L0()1` z)dc3QKsz3{;!E!6i_r}s?S1C``tY`KPb#!fz|N7bdQcC*%yCC2XIdy==lFWtp>6nq z!uwen`U$Qs7BGjIE*7xkp~FlI1T zvof!?on`&Wv(H@pO!KrdCx6TFFWi5dngl<(bh?^gN!&di)g&;-qnZSEJkQpLw~c$4 zX`z6bqpl{f<9WV~FB`t0a8Ka@LM`FAv6a!)1WRe$hvq<66Ik)+Y65e=)f?0@<_g_jWCtnVju$D_Lnnu9`j6*S|~#R7Ib6FgGru7YNc zx~rfa&kTo|77Ca-YN3D~4;^M&C}8HOg#vaw`Z#*Y$Nh#q&_V$#o_pGzd9?0Q+r~Y5 z^l9^&kUO5>J9+?H^q!yG|D>7(c12#Dr0LG_drIeiM%_`su8i&|u;k+zJ@<3XI_-Gu zv{1krJ^Fq^``B}*rlR!4sC{D(iv9ZVws9YtgTp4wXWVI_z><$AM=cbv;<=|&QMGTZ zL2=IZjhX~zWzIO$RAp{zWpuHCSsC>Jtax;>z>>~?x!*sk2Vlmd9)KMWoi^W!kE7{} zQ4hc#6zTyi`M8g`0c~gmkJp&DjprHF1F!;D4`3ZY?$M)*1Nt4KnW-TC7=Y9fD%vwNYwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK IfPv|O2On?%fdBvi literal 0 HcmV?d00001 diff --git a/testdb/data/databases/neo4j/neostore.propertystore.db.arrays.id b/testdb/data/databases/neo4j/neostore.propertystore.db.arrays.id new file mode 100644 index 0000000000000000000000000000000000000000..066eca9a678c6eb852823502d4c306cd04f98700 GIT binary patch literal 40960 zcmeI(OA5j;5CG6=b?XgWxRZJ)&*FtVgcs>qOiBVJ8)LzO@B(EzX@0yer;Ug);u5*d z&(}SLAzi6YBS3%v0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0tEg@;F``lmGd5& zcr1Avm+s9I&t=v8rNO$LQu0`LxF009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjX%1#%hxR>po^|KBuG{lD|o7)F2q0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0tEU5hWrnHTlKGbU83eSe(JB!MFIo}5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U yAV6RjfpM2zY(jtl0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5*BQs4~{2L;Cf literal 0 HcmV?d00001 diff --git a/testdb/data/databases/neo4j/neostore.propertystore.db.id b/testdb/data/databases/neo4j/neostore.propertystore.db.id new file mode 100644 index 0000000000000000000000000000000000000000..15f21b577d8f7756b54d0413daf74ad0a798b6ae GIT binary patch literal 98304 zcmeI*b$AqK7l!c};A_4jb=MTDL0xF6ySpoOcQ+jB?(Sad?v%Q_m%6)q>70G<$vNHK zgpxmcmGaDWh2NQXcLTYZO)2jtWLefG%NjE~Mh+XkSwUXB6>BXQvEAO>GvrqvQPyrQC0ToaI6;J^cPyrQC0ToaI6;J^cPyrQC z0ToaI6;J^cPyrQC0TmdN0=A7m8xI)c{r^@yQ2YO5^82Ivs(=cpfC{L93aEezsDKKn zfC{L93aEezsDKKnfC{L93aEezsDKKnfC{L%uv42Vs_ShU{9O_=ft^iZkz|_#rbf4TmTouUbql0jJKwqVi*w zEs0Cv(zpyRi_78ixB{+-E8)tx3a*N);p(^su8C{m+PDs`i|gU~xB+g6<@c!Idsbwd zu)ZnUzno#m=83EiZh>3kR=728gWKYExIONGJK|2bGwy=B;%>M*?ty#aUbr{zgZtus zxIZ3%2jW3^Fdl-PMx`UeQLK-S@^R(E^te<^UFu&s>Y^@{&lUAE)U4`ysYy~+fyhWVUCD!m+UA#q{)FsyNSzWwEoYW=O@L65F zMV!+fyhWVUCD!m+UA#q{)FsyNSzWwEoLbu@zK<5>HchwLhI-q|nQft`ZF$=~ zPiwYap4Mz*JgwPQcv`c~@3dyy-D%BU9FW#*^0lf>SSc9f>G^rOBGJay3Z9Cm;pun=o{4AS*?10~i|66_cmZCB7vaTt z30{hq;pKP*UWr%XFuWSC!E5n4ydH1B8}TN*8E?T`@ix32@4!2;wXajs;|N%Vx>Ns7Hjy8`uyT8;-oIIhR^EaE#jmuv4+p;;w|E&F0qEs>f$Zpq%N_B z&+6hW;-oIIhR^EaE#jmuv4+p;;w|E&F0qEs>f$Zpq%N_B&+6hW;-oIIhR^EaE#jmu zvBntBxjn-6@9hip%YFP(yUmXByfm#gzizje`~T&B@LfFUw`AU%bD;t%paLqO0xB?e z6tF)BH1~Qy`*TF+st?2N-`wj88;aW+>)gM6vDUNBdWT}IN7cGcRX_z)Km}Al1yn!< zR6qq(Km}Al1yn!7xt_wfV#5I@3?@e}+MKf}-Q3;Ytl!msfg{1(5%@9_ux5r4v;@fZ9R zd3{IrJLi8OUzb>Uy-BfDx$ew1>Gs_AlZqp6hqjMY9Qk-?`$WZ&+jVG;k9NHlM{fH< zW=HIV6X1k65l)Pg;G{SiPL5OHlsFYmjnm+?I2}%pGvJKah%+I3WqB9QyJ9!&jy%Wm zSva2+XT#Z%y|J9VvwRNL=ft^iZkz|_#rbf4TmTouUbql0oXqq(EJ9SFE>%Hvz0?n) zF6yGMc&s53#*R+mB_hvgua#Bo&^C-EtK8lS;u@i}}RU%(gfC43oQ!B_D$d>!Awk@zOQg>U0K_%6PO@8bvfA%27( z<0tqjeukgp7x*Q9g;F3xckWU30NdMd zDBc?DtlN^^UVZ$=!teM8^7oE8r}{qdDMa2GyI}b`if){DM_T_|zYl!gn_uT5xF{}$ zi{lcwBrb(Z<1)A`E{DtG3b-P!ge&7JxGJuOtK%BDCa#5R<2tx5u7~U62Dl+^gd5`~ zxG8Rin`0l`0=LAiaBJKKx5e#nd)xtc#GP@LTe}UDT!W(x3VnYF2f<)Fi1asEfMjdF0oCo)6w4PU;eC_^dA8B2MZO zYxt}#-Xc!w5^MOZF5V(e>Jn@CtS;UnPU;eC_^dA8B2MZOYxt}#-Xc!w5^MOZF5V(e z>Jn@CtS;UnPXBb5_;a@~H|_u1erdUnUs^uS&f6DnJGCKXTt T6;J^cPyrQC0TobzmJ9p|&K>YK literal 0 HcmV?d00001 diff --git a/testdb/data/databases/neo4j/neostore.propertystore.db.index b/testdb/data/databases/neo4j/neostore.propertystore.db.index new file mode 100644 index 0000000000000000000000000000000000000000..490638f31dc5ee6149880b37baac5276153fcfe7 GIT binary patch literal 8192 zcmeIuF$#b{3`Iegh=?pAqTc_g7Vf`+<)q1jK#Hm9n^q$#F(;P9n%ELOu_uni*~Y^w taVMT}u?P?#K!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB=Di1YT+v0KEVJ literal 0 HcmV?d00001 diff --git a/testdb/data/databases/neo4j/neostore.propertystore.db.index.id b/testdb/data/databases/neo4j/neostore.propertystore.db.index.id new file mode 100644 index 0000000000000000000000000000000000000000..4b752eb1339f4cd77bfd956e4a7dcd628773aef5 GIT binary patch literal 40960 zcmeI)K?=e!5CFh!^{7Aa;7#;VzQqsuhYhJ5sUgOeyeJ&CpK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk vn+S}X>|zrF1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ;Fkh#`U3^` literal 0 HcmV?d00001 diff --git a/testdb/data/databases/neo4j/neostore.propertystore.db.index.keys b/testdb/data/databases/neo4j/neostore.propertystore.db.index.keys new file mode 100644 index 0000000000000000000000000000000000000000..39d5c9665301e7431ec5d11d79243aaa5952484e GIT binary patch literal 8192 zcmeH_u};G<5QeP^T1r(x#fa3gVk1#b*z$CZb0>BjVX z^6>k+yU(YTTBwWXUa2{U2AhqsADJfew9Q`MKWSg&#~o#LxITX?HU8nFo2qeZcc4GH z%zE@Gfu)PRe-|rW3#qo^iYv}M%bEk(#ubWX=1&Rtt+D?) z@XZkyS+hP?eq`3rvwGV)@5F<^N?Um2Sz!wWTVcPhLQ44OwtenCq#9|NL+qS#RM=z@ wHyD5c7=Qs7fB_hQ0T_S*7=Qs7fB_hQ0T_S*7=Qs7fB_hQ0T_S*82DcUzf~vEEC2ui literal 0 HcmV?d00001 diff --git a/testdb/data/databases/neo4j/neostore.propertystore.db.index.keys.id b/testdb/data/databases/neo4j/neostore.propertystore.db.index.keys.id new file mode 100644 index 0000000000000000000000000000000000000000..5da2192c1aa5687ea6240687b61ed1ed4f0f7ce7 GIT binary patch literal 40960 zcmeI)F%E(-6b9f2y1MG(;AZqtp2Z7s2ruGUY|ZP!LP{cu$wxwdT6nbi7+*p}j1iZp z$9sA`N(|*Ja}ELo2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkL{j|8q|ueaRq zZkGET&+|LIy6~KDJ!Kv<4<(;@EeH@GK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB=CWf!fBuXF+%We^sIWf6w>vECB)p2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5Lgr#>fiq7UH>+2)ot8zX};Z;1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ xfWRgK<0h+Ega82o1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oU(Czz1gO1|I+b literal 0 HcmV?d00001 diff --git a/testdb/data/databases/neo4j/neostore.propertystore.db.strings b/testdb/data/databases/neo4j/neostore.propertystore.db.strings new file mode 100644 index 0000000000000000000000000000000000000000..d19598d74e5c5046e0090285895b3443642008be GIT binary patch literal 8192 zcmeIu0Sy2E48x#Gzx3-^0urb$3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK IfPv|O2On?%fdBvi literal 0 HcmV?d00001 diff --git a/testdb/data/databases/neo4j/neostore.propertystore.db.strings.id b/testdb/data/databases/neo4j/neostore.propertystore.db.strings.id new file mode 100644 index 0000000000000000000000000000000000000000..066eca9a678c6eb852823502d4c306cd04f98700 GIT binary patch literal 40960 zcmeI(OA5j;5CG6=b?XgWxRZJ)&*FtVgcs>qOiBVJ8)LzO@B(EzX@0yer;Ug);u5*d z&(}SLAzi6YBS3%v0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0tEg@;F``lmGd5& zcr1Avm+s9I&t=v8rNO$LQu0`LxF009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjX%1#%hxR>po^|KBuG{lD|o7)F2q0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0tEU5hWrnHTlKGbU83eSe(JB!MFIo}5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U yAV6RjfpM2zY(jtl0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5*BQs4~{2L;Cf literal 0 HcmV?d00001 diff --git a/testdb/data/databases/neo4j/neostore.relationshipgroupstore.db b/testdb/data/databases/neo4j/neostore.relationshipgroupstore.db new file mode 100644 index 0000000000000000000000000000000000000000..b72840ef50b6a432f92ecd6edaaf539fae606949 GIT binary patch literal 8192 zcmeIu0Sy2E48x#mx_@!ku>>SgT^KN6z<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK JfB^&30}o%s05bpp literal 0 HcmV?d00001 diff --git a/testdb/data/databases/neo4j/neostore.relationshipgroupstore.db.id b/testdb/data/databases/neo4j/neostore.relationshipgroupstore.db.id new file mode 100644 index 0000000000000000000000000000000000000000..066eca9a678c6eb852823502d4c306cd04f98700 GIT binary patch literal 40960 zcmeI(OA5j;5CG6=b?XgWxRZJ)&*FtVgcs>qOiBVJ8)LzO@B(EzX@0yer;Ug);u5*d z&(}SLAzi6YBS3%v0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0tEg@;F``lmGd5& zcr1Avm+s9I&t=v8rNO$LQu0`LxF009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjX%1#%hxR>po^|KBuG{lD|o7)F2q0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0tEU5hWrnHTlKGbU83eSe(JB!MFIo}5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U yAV6RjfpM2zY(jtl0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5*BQs4~{2L;Cf literal 0 HcmV?d00001 diff --git a/testdb/data/databases/neo4j/neostore.relationshipgroupstore.degrees.db b/testdb/data/databases/neo4j/neostore.relationshipgroupstore.degrees.db new file mode 100644 index 0000000000000000000000000000000000000000..aac2e7f48f38e3d46b42f1a97ef86a0079ebef6c GIT binary patch literal 40960 zcmeI)u?@m75CzanLcthx2zH>NWeFx=;4A}yy8<_eL_|V*X})adZ0n^wDG|{}?Baa8 zTqA}tUQd@P2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+0D=Dy*gvj$$g2)b zZgSk_b9#2+Hg`Q`3IYTO5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV6TLz|_V+ z<|beF|7R8I|1bS!>Io1aK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfWVtTH~s0q z?fTca-mG!ur} z7xyji<9B*>;jz6n-fgt}P~tt;L;?f|5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV6S1ptkX^ZU1ope^sIW|G?+5l>h+(1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2rLUs^>6=u*FW z7xyji<9B*>;jz6n-fgt}P~tt;L;?f|5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV6S1ptkX^ZU1ope^sIW|G?+5l>h+(1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2rLUs^>6=u*FW>SgT^KN6z<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK JfB^&30}tQI04D$d literal 0 HcmV?d00001 diff --git a/testdb/data/databases/neo4j/neostore.relationshiptypestore.db.names.id b/testdb/data/databases/neo4j/neostore.relationshiptypestore.db.names.id new file mode 100644 index 0000000000000000000000000000000000000000..066eca9a678c6eb852823502d4c306cd04f98700 GIT binary patch literal 40960 zcmeI(OA5j;5CG6=b?XgWxRZJ)&*FtVgcs>qOiBVJ8)LzO@B(EzX@0yer;Ug);u5*d z&(}SLAzi6YBS3%v0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0tEg@;F``lmGd5& zcr1Avm+s9I&t=v8rNO$LQu0`LxF009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjX%1#%hxR>po^|KBuG{lD|o7)F2q0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0tEU5hWrnHTlKGbU83eSe(JB!MFIo}5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U yAV6RjfpM2zY(jtl0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5*BQs4~{2L;Cf literal 0 HcmV?d00001 diff --git a/testdb/data/databases/neo4j/neostore.schemastore.db b/testdb/data/databases/neo4j/neostore.schemastore.db new file mode 100644 index 0000000000000000000000000000000000000000..e7792bca811b4508107934ada1cc30d6e34cc2b7 GIT binary patch literal 8192 zcmeIuu?YYG2m?XE!u>b4FiQxR<{{-(-8xApw-6vefB*pk1PBlyK!5-N0t5&UAV7cs R0RjXF5FkK+009CI1Qs6%01*HH literal 0 HcmV?d00001 diff --git a/testdb/data/databases/neo4j/neostore.schemastore.db.id b/testdb/data/databases/neo4j/neostore.schemastore.db.id new file mode 100644 index 0000000000000000000000000000000000000000..cfa777598e1851602191e622b957c6059a03a833 GIT binary patch literal 40960 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 literal 0 HcmV?d00001 diff --git a/testdb/data/databases/system/neostore.indexstats.db b/testdb/data/databases/system/neostore.indexstats.db new file mode 100644 index 0000000000000000000000000000000000000000..76eb43b3aa83e053dc7437b35ff44d78487f83fc GIT binary patch literal 49152 zcmeI)OAdlC5CG8niylDtp46T9)`1S1x>3X!!s~*eB~#m%xSB#KWnId-bnS4t_BS!6 z5gfv50c1a8?koEdBR^WkeAbVCe$9D4&+IeyV-suM;mdsK1PBlyFpa?DpxQL^&25&Y p?|4{)ifq;n>B^7=-A009C72oNAZfB*pk1PBlyK!5-N S0t5&UAV7cs0RjXFEE4$NWdIKV literal 0 HcmV?d00001 diff --git a/testdb/data/databases/system/neostore.labeltokenstore.db.id b/testdb/data/databases/system/neostore.labeltokenstore.db.id new file mode 100644 index 0000000000000000000000000000000000000000..fde73153d3bba4f630a8675fd81a24f0646277a2 GIT binary patch literal 40960 zcmeI)!41MN3;;kE7y*8LFd4J35JRvCvk+G`Nco`jfmG=%RaTR@jjm5uiHJkQH8Nh0 z=dGowU2RMdAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0y`2owY^@}{T{oV za~Xa93~nl%m-6pZ>#h0M!F`>R2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z0D%#K?Cqb|g6hOq?)(0AzbxNesQ*9meXJ!wfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C&1*SahzquIkb8s*?#2AV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly yK!5;&zX;@!`+@)g0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBn=x4;_>{{-Ct literal 0 HcmV?d00001 diff --git a/testdb/data/databases/system/neostore.labeltokenstore.db.names b/testdb/data/databases/system/neostore.labeltokenstore.db.names new file mode 100644 index 0000000000000000000000000000000000000000..c99c601d5b5b9052dbf841fd18e5309d48bf7f34 GIT binary patch literal 8192 zcmeIuAqs#%5QX6hf(C=9@FZrN_7Nr+R$ueB&RlLCe;^R-Bi1hNiPNY74v&FRT z+ehzJo2x+&T{PLK!OGOD=2?|Re!Qx3H6@Gh1up^!AbeALf4MIR5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7csfqe_i%nAhI literal 0 HcmV?d00001 diff --git a/testdb/data/databases/system/neostore.nodestore.db b/testdb/data/databases/system/neostore.nodestore.db new file mode 100644 index 0000000000000000000000000000000000000000..9df8d43829c9f53566013d9b2c38b143a613aa4a GIT binary patch literal 8192 zcmeIuu?>JQ3=ygJ1{t-wPZODH~ATOHTB1l;ZNKM8sATEwW#gt7e&XubN-& zFOIqG^&H#r)m?RMbqE0h1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNCfkH8BL CWC=U~ literal 0 HcmV?d00001 diff --git a/testdb/data/databases/system/neostore.nodestore.db.id b/testdb/data/databases/system/neostore.nodestore.db.id new file mode 100644 index 0000000000000000000000000000000000000000..1a980e23cb13bc48247656c1b2b2fedb5f526e8b GIT binary patch literal 40960 zcmeI)u?@m75CzZ+0VaTsg2|YLg&2ZGm<3;CQ@Dwo0x8lvDf+RUldPB0Q6l0HagVIe z>-{J(m8;At0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyKww7#$FkRJ-S6CG zu4VQ4o7~iRTiPSeHBUA3tAl5~7X%0pAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!CuAK%VViYQymP|E5Og|0D0mvjhkbAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zKwwp1%D?^hr~Yl+y4$$r+I(A=1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ wfWTh_@|XLH009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5ZJfC7m6eV>SgT^KN6z<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK JfB^&30}mg#06_o% literal 0 HcmV?d00001 diff --git a/testdb/data/databases/system/neostore.nodestore.db.labels.id b/testdb/data/databases/system/neostore.nodestore.db.labels.id new file mode 100644 index 0000000000000000000000000000000000000000..6eee274b14359bea3c3001c81a9e2fe3105cb8f8 GIT binary patch literal 40960 zcmeI)K@P$o5CFif`UJi8;LCiAAMz1?#J9*+FouiRgGrMiX%@E7km+#=5wVLnN4Cf9 zekoxpPswQn2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+z=i}4Wv{2Y-+dSJ zUA8{HldBfa%ktMrgW6p}o;tXGCiDpqAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5;&L4mC8AM4zo>;J13s{arE8q)|6AV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!CuQz?8TB_f`KkZl7r57Qf}&dyxPE0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk y1PBoLi$GqvuMr?XfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009Eq7I*^Fu>{co literal 0 HcmV?d00001 diff --git a/testdb/data/databases/system/neostore.propertystore.db b/testdb/data/databases/system/neostore.propertystore.db new file mode 100644 index 0000000000000000000000000000000000000000..fb217016af2af26ffc9079c4c897a1f4c92c945f GIT binary patch literal 8192 zcmeH}TS!zv7{|Y}?$)}lwe9M*uCBSdt7%!QX=TwvMYW|7`A{kmOH>3sbs>uA!NM%_ zMG&DIbP=P-NFS1jh%g_-NGRw+5)?tyL(o;|rM~~!Ij6(!p4_)yW?;_DnfcGme|~f3 z+a)4WesfZyllJBO;s`#vu$S9t&>5*34Kxrnoy;e)au-?fxU%QnIToURzGLXwk$qc! z`Ra)>_}yADbpIkWcu`Q_BFEus$ScqhGpT7H1^J@JzYV|y+Wv{#pI@9q8A2#Fej9xL5YC(8RGN0rb zLL`j*!5C5I68TWBAu2?vB?p8W@X~#6`v5#QXS}i9?bra366s!tGK+KOPXCua-nHdj z|M%CvKu;SwIF*)9k6LKVF5mvyu8Q>PAGrQlkr0e?<36VuN~ z)1B6|RHLVI?CrSidSXywO)Y9>qlYob&cKedy%x zZWbCisk`MDclqPde}{V0P%9Odo1 zuzn1Wc({r|z@bjveKFUIQsIH;>p8=rdm~5BU_c4yU^;k0EG(W9kMLK*=5aC_j_g;K zW(3weEJ-b;TTzrkEQA`KY;^DuCgBMu&X|NpEFDO-6lOK1a)=FKuXit_+vpkl8&a%0 zPGCR<=ecHA!5H@Dv9LVdkW!HxQX*PNQ5K7kQkmdU4bAqan{@XcM6Yn@Yo&=BJBCYU5^9a24C#J%c9%1oxzc{zAk&g z*YOCJUdDN8Vx&L^-zYwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK IfPv|O2On?%fdBvi literal 0 HcmV?d00001 diff --git a/testdb/data/databases/system/neostore.propertystore.db.arrays.id b/testdb/data/databases/system/neostore.propertystore.db.arrays.id new file mode 100644 index 0000000000000000000000000000000000000000..6eee274b14359bea3c3001c81a9e2fe3105cb8f8 GIT binary patch literal 40960 zcmeI)K@P$o5CFif`UJi8;LCiAAMz1?#J9*+FouiRgGrMiX%@E7km+#=5wVLnN4Cf9 zekoxpPswQn2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+z=i}4Wv{2Y-+dSJ zUA8{HldBfa%ktMrgW6p}o;tXGCiDpqAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5;&L4mC8AM4zo>;J13s{arE8q)|6AV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!CuQz?8TB_f`KkZl7r57Qf}&dyxPE0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk y1PBoLi$GqvuMr?XfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009Eq7I*^Fu>{co literal 0 HcmV?d00001 diff --git a/testdb/data/databases/system/neostore.propertystore.db.id b/testdb/data/databases/system/neostore.propertystore.db.id new file mode 100644 index 0000000000000000000000000000000000000000..e577d07fba1f736f589aeda83c03ccdacccd4428 GIT binary patch literal 40960 zcmeI)u?@m75CzZ+VFc(Xm;-iU78YU%7GV~Akxk(yatfqK@1*F*c22ThN=J!^L&P<* zKCkzq#8j>_rw9-rK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB=CV2^`B_&vn0Z zm${bJ=WlXT<7H`&xYxYZ%&!if^0$=2`1-SqK literal 0 HcmV?d00001 diff --git a/testdb/data/databases/system/neostore.propertystore.db.index b/testdb/data/databases/system/neostore.propertystore.db.index new file mode 100644 index 0000000000000000000000000000000000000000..1ab599176428f5250aa381d22cef10c38f393849 GIT binary patch literal 8192 zcmeIu-3o$05I|vNBSa)5%n&KH{O|qW&kOfFL~!nGT?mCYP=1qiAiOS98WD$xdt`lH z??;KLTxCuXAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0y`2omc5?qe&;T8 zEvwJpX3{_Vd%^>5?W-Nr4~=G(d?K!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk v1pXqBzuZ>@2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+z`g~(8dL>I literal 0 HcmV?d00001 diff --git a/testdb/data/databases/system/neostore.propertystore.db.index.keys b/testdb/data/databases/system/neostore.propertystore.db.index.keys new file mode 100644 index 0000000000000000000000000000000000000000..681ced28dae689d081e746c2c18acd746fed2f8c GIT binary patch literal 8192 zcmeH{O>fjN5Qd}j(Uww5g@h_V9J%eD_y-k-UQo4Ey+$S;vPOv={6U+4!9OnJNwR54 zoL)FiE}LZEJTrbWPL^e#vPX~CS@sb_dwFhbxz=Dl|6G47wor>rs9^2r^vjKUUQG@S*J^^O+eQ3$XaY`n29$D);NU+kwsIOutoFrGN$DB+O2HB zFpb?PfzGh|r^HH3Ll?(XH}{xwjVO|HANSB%qI+|rL0)Jy@r3$<+kbkwe~A?%>s^9X z811|j$U2HFrG4C{i8tP}J|tM!m(t}qvS^JR8HxAX*_|Vce1)Lo?&jnKQ}ni-7e35R zb9@9-G^-MRh)~VfqZI9q!h-N1b1@r47NxMFT}+)sU(Oo~xfNQPI-e{AS!7iz*HofS zd?<$Q8>?zz+lhnj2Bywp#lqBe(D>C{dDEE6l<~18jf|umLu}2G{@_U;}J`4X^<=zy{a=8(;%$fDQaN1AhUB C5{~u& literal 0 HcmV?d00001 diff --git a/testdb/data/databases/system/neostore.propertystore.db.index.keys.id b/testdb/data/databases/system/neostore.propertystore.db.index.keys.id new file mode 100644 index 0000000000000000000000000000000000000000..65cab0a22418b015fc34911994f5b094b470bc49 GIT binary patch literal 40960 zcmeI)u?@m75CzZ+VFc(X=wT*iVIhWK5oW;`*%WRfr$CDIPKthP=OpW;bd-oVL|h~5 z^Ljr@Oyw$biU0uu1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oTtjz_IN0T=zS7 znQK{n{w6myUY7QVd(B(T{OaIY?*#z@1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAJB9LeMr`j-l{=ccw`TxlK@hkxX1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oP8mnDTG`{i%N&x9&D>xi;U{B>@5i2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF x5Fqduf&AsZB0zuu0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0tEIg@CCtY1$_Vj literal 0 HcmV?d00001 diff --git a/testdb/data/databases/system/neostore.propertystore.db.strings b/testdb/data/databases/system/neostore.propertystore.db.strings new file mode 100644 index 0000000000000000000000000000000000000000..8119cb65a9997c54b0669eeb55d588b69811e170 GIT binary patch literal 8192 zcmeIuu@M3>3`9{46%bLyF=NS=ZG~jyRA5_n4TO|H$8eNDbjki~qn&v~^r8bh6Fv9) z)8l@-issFWSgg-2sh#!G&wCs) z*K&;cncP%3FXa)nTYYVidGBk2009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5LhFSz5R19sE&N)*!Qpd>SgT^KN6z<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK JfB^&30}o%s05bpp literal 0 HcmV?d00001 diff --git a/testdb/data/databases/system/neostore.relationshipgroupstore.db.id b/testdb/data/databases/system/neostore.relationshipgroupstore.db.id new file mode 100644 index 0000000000000000000000000000000000000000..6eee274b14359bea3c3001c81a9e2fe3105cb8f8 GIT binary patch literal 40960 zcmeI)K@P$o5CFif`UJi8;LCiAAMz1?#J9*+FouiRgGrMiX%@E7km+#=5wVLnN4Cf9 zekoxpPswQn2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+z=i}4Wv{2Y-+dSJ zUA8{HldBfa%ktMrgW6p}o;tXGCiDpqAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5;&L4mC8AM4zo>;J13s{arE8q)|6AV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!CuQz?8TB_f`KkZl7r57Qf}&dyxPE0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk y1PBoLi$GqvuMr?XfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009Eq7I*^Fu>{co literal 0 HcmV?d00001 diff --git a/testdb/data/databases/system/neostore.relationshipgroupstore.degrees.db b/testdb/data/databases/system/neostore.relationshipgroupstore.degrees.db new file mode 100644 index 0000000000000000000000000000000000000000..533388a92791fe01ec0ed178e6825c5dc7fbbb53 GIT binary patch literal 40960 zcmeI)u?@m75Czbmgn|K}r(qIWmS6$~W|?5Hkw}9`L?oo==F4_2wqDAUlB7=#IbF|} zWVq!yx|)Ij0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U_z!{2{hIrF)nSrl zuZ(HF7H1W1ALYrhrXWCo009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjY;3Y6ad zuD;~!{{O5({r{!kOg#Yt1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oQJ^=*pk| zr(ORxZ%?*)%TMcVUlJfdfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009E42=uF* q;t&D^2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkL{mjWX-cLRO^ literal 0 HcmV?d00001 diff --git a/testdb/data/databases/system/neostore.relationshipstore.db b/testdb/data/databases/system/neostore.relationshipstore.db new file mode 100644 index 0000000000000000000000000000000000000000..7d5e69b5b681af4d6bae91c90bc357bf0f5fb627 GIT binary patch literal 8192 zcmeIuu?@f=3Z=*TTviq&z_B1F6zks@x>C6kVTA8xgyRb7VYj z_e)DtyV{%}K!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1U4jaXnQ>^``vdr z*E0J2o?KNpzsf(S4D!T5MxHvj=8YggfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C71_iRWe_U#Y`~Ry7_5TN7k;e%TAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!Ct^fhoVe@4NmruF@J;{xx6gG64bv2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF x5Fqduf&AsZAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0tB`#@C1>|1l0fl literal 0 HcmV?d00001 diff --git a/testdb/data/databases/system/neostore.relationshiptypestore.db b/testdb/data/databases/system/neostore.relationshiptypestore.db new file mode 100644 index 0000000000000000000000000000000000000000..5a7a0b60b80e1df73f96b4c78484d7ec7c783620 GIT binary patch literal 8192 zcmeIu0SN#A48yR^zv<7$A%z-9lXQy!0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N K0t5&U_$zQ<`~U+0 literal 0 HcmV?d00001 diff --git a/testdb/data/databases/system/neostore.relationshiptypestore.db.id b/testdb/data/databases/system/neostore.relationshiptypestore.db.id new file mode 100644 index 0000000000000000000000000000000000000000..6eee274b14359bea3c3001c81a9e2fe3105cb8f8 GIT binary patch literal 40960 zcmeI)K@P$o5CFif`UJi8;LCiAAMz1?#J9*+FouiRgGrMiX%@E7km+#=5wVLnN4Cf9 zekoxpPswQn2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+z=i}4Wv{2Y-+dSJ zUA8{HldBfa%ktMrgW6p}o;tXGCiDpqAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5;&L4mC8AM4zo>;J13s{arE8q)|6AV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!CuQz?8TB_f`KkZl7r57Qf}&dyxPE0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk y1PBoLi$GqvuMr?XfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009Eq7I*^Fu>{co literal 0 HcmV?d00001 diff --git a/testdb/data/databases/system/neostore.relationshiptypestore.db.names b/testdb/data/databases/system/neostore.relationshiptypestore.db.names new file mode 100644 index 0000000000000000000000000000000000000000..1aa8cf651908b749d5e27d1bc899e72eee93dc0a GIT binary patch literal 8192 zcmeIup%K6!00hBzu~b1H5ez<||5ktwaHu_fYLnC)E6Fo=iq&z_B1F6zks@x>C6kVTA8xgyRb7VYj z_e)DtyV{%}K!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1U4jaXnQ>^``vdr z*E0J2o?KNpzsf(S4D!T5MxHvj=8YggfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C71_iRWe_U#Y`~Ry7_5TN7k;e%TAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!Ct^fhoVe@4NmruF@J;{xx6gG64bv2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF x5Fqduf&AsZAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0tB`#@C1>|1l0fl literal 0 HcmV?d00001 diff --git a/testdb/data/databases/system/neostore.schemastore.db b/testdb/data/databases/system/neostore.schemastore.db new file mode 100644 index 0000000000000000000000000000000000000000..7628a6bc479cf2f98770df3e57bbb86d446f7e52 GIT binary patch literal 8192 zcmeIup%H*U00Y6FL0}LF1Ub-#0$ zxt7)EZ*o)PZE24<*F4qCuMVE|UJxKafB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009Cc0(rK7sSU&D|C<_}|Bt*M&k`U&fB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z0D)D3DgXB0pZd3P>u%$gYx8Yg5+Fc;009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs w0Rn#!$Y1U&0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyKw#ejUqF`x`2YX_ literal 0 HcmV?d00001 diff --git a/testdb/data/databases/system/schema/index/range-1.0/3/index-3 b/testdb/data/databases/system/schema/index/range-1.0/3/index-3 new file mode 100644 index 0000000000000000000000000000000000000000..a4513aac07eee813b0fcf57dd27199d7a7366cdb GIT binary patch literal 49152 zcmeI*F>Zq}6adg4lEBct-AXRdEyw88J7lTUA~jihydI@DDIYLWstzcTDn)vh@W%!l z>oI;KB4Qn}i-?!!zN-2o%W4d20t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK;T9M>VBQ~(^|Jv%)Tt8y&0R4ao!tn@xawQ#WbxzfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72wW+UY5a$2j*{twBK1P1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfWSh5cDirVM1A}`o(^wK+>IwsA6<8P QoUT_*Y~K&v{`LIw4?H3h2mk;8 literal 0 HcmV?d00001 diff --git a/testdb/data/databases/system/schema/index/range-1.0/4/index-4 b/testdb/data/databases/system/schema/index/range-1.0/4/index-4 new file mode 100644 index 0000000000000000000000000000000000000000..8be2d417d113b0c33578545bb0e1398cecc5f838 GIT binary patch literal 49152 zcmeI*F-`+95CFhEj$B%3piCaYGg9$~G)O=Z8Xn6V_yV^V?@2@{q68t3#!|fT>g-sP za(!|{^bzZbc-)L#H-55J+>i7G2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ zz+V>_#tq)JO)gr@T(%lt?}w3bJ{xfM#BN@qEh`WpK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk7Ybw<|GuqJ_5PFV|7T59|G)4rGo1hd0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PFW=m`d^E4FFR+jP>X#`8+X@rw96V%@PR^AV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5;&UlO>QeI-Bu6Qh8HwFx=kBHT0_8I{K1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNCf0|K{gjeZ%!?tS;ReZFa#ZW)W0?d!wS E7wiWK-v9sr literal 0 HcmV?d00001 diff --git a/testdb/data/databases/system/schema/index/range-1.0/7/index-7 b/testdb/data/databases/system/schema/index/range-1.0/7/index-7 new file mode 100644 index 0000000000000000000000000000000000000000..28904a6b15a176f1ef03e9dd45f25f2a896c7e6a GIT binary patch literal 49152 zcmeI*F>b;z6adhl($JNu9pMl?Mknsjg#nJ{u`3cjSmz zL~J5r`_(Q(t63@@Tdo8M5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7e?e-~J` z1-|!1jy+~ymTJEqn~`ze8*uZ$VVHmtg{%Tje)L$nCEZ08~Srq~V2oNAZfB*pk1PBly lK!5-N0t5&UAV7cs0RjXF5FkL{j|5hI-tjHQ{rBN>_Y0xh1~LEu literal 0 HcmV?d00001 diff --git a/testdb/data/databases/system/schema/index/range-1.0/8/index-8 b/testdb/data/databases/system/schema/index/range-1.0/8/index-8 new file mode 100644 index 0000000000000000000000000000000000000000..a5f6f9ebe404bd726e04e23791d862d3c58ede2a GIT binary patch literal 49152 zcmeI*K}y3w6adhPwe<$Nv1L8>is9z|7T59|3CAQnNENJ0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0tCJa45j$~3jjlW&*i75jK_(AI6bgfmsv6a0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBly@Jj+0)Bi*PzZCkXK{o^l5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7e?KM)w+|Bupt)wfdqFS+c$^h^F}ynHcWb^DQ0G(ms>0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5)m6nKj=e#G)B-R*ZTd6#ojKj&s!KW_3v Sy}v(nb(@>^sm6 literal 0 HcmV?d00001 diff --git a/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 b/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 new file mode 100644 index 0000000000000000000000000000000000000000..7cd8c05d16c8a9f2370d852122320a53e39802b4 GIT binary patch literal 49152 zcmeI*OA5k33;@vhUAPwA_9z~}o%g?sjh(b8E{a7^c!e5gn8fCZe?L-0s|009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF{E5K6zs^&;)?JG^ zmq(4a!!R}8G2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5cng3 z$M^rU^}p@UYX4WP_fg}D@8;_t11b({reFG>HX6KEscIqt0t5&UAV7cs0RjXF5FkK+ jz*2#_8*^-h4lQ;|3(F@!fB*pk1PBlyK!5;&Ul+IogTMmD literal 0 HcmV?d00001 diff --git a/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 b/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 new file mode 100644 index 0000000000000000000000000000000000000000..b46881cf84623129ead19644552793df6999cc82 GIT binary patch literal 49152 zcmeI*Ne+TQ5CzZ@ha>3Lqj&&z-v2II+C?H^VIX2i9*KVG^nlMD)oMg^5!ZpZt>J+{oY zJnH=LK8?&_Z@}zA9AV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5;&p9^%u3R%EcydOBcAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0vi%| zeg8j8|5LvMQ17F*1yoM8*FOeSRv$@#009C72oNAZfB*pk1PBlyu%5v9{>^$TTZsSx S0t5&UAV7cs0Rja6Ebssw^#Xwa literal 0 HcmV?d00001 diff --git a/testdb/data/server_id b/testdb/data/server_id new file mode 100644 index 000000000..411a355a2 --- /dev/null +++ b/testdb/data/server_id @@ -0,0 +1 @@ +TISK”M–IbFwa@KX~O2Z0=A;mJ zw!L%Y;rMXh1Z*ZOJ}q$jGYFV`%TkLfu|}n#0h$+x;@W@Q@)O}tc@c=Fi7~!Z@h3Ob z4a&>cB)(#|q>eugiSihlqUJLRGZ6l4u!Bg?Sxy~)ib8EGO;MJ$$bgthX?z-ykB5KnAR+O3N=&NCl^6 zLsNy^%)HW))MAB_jH1-yjQpGwL=HB>nuSxg9E?QxQzKIV?6P-X-Iq|Kyj6ty^O!xy za`h~8u$h#`r!mQ8EyxiCdhP`Xe_lGL4|dsQ7f-7AQyuEh_dR#AH}CMEjz2A-hLS`D z-6}te@Mn#QKUnw5YHzCeQy1zM#%Uc-e`P?zj?(xvF(t`^P{r52haE-uQ*BlrSX_|N zhbsPrC9zr4zOXaQg@hfY{xl`49O9Q-mVof*7VW)YfAR_kQpKOJBBAzlq9sR-KULDL zDOvHkzsxuS;ZLu5Uf?$6l$aQ*_|pcOYBIy??W*U8P{p5SWVI7)ern%D_%q9JCfJ|n fcT>loworebZ*TDZoeD9N(sXM^R=RaDkADdO&Gw%* literal 0 HcmV?d00001 diff --git a/testdb/data/transactions/neo4j/neostore.transaction.db.0 b/testdb/data/transactions/neo4j/neostore.transaction.db.0 new file mode 100644 index 0000000000000000000000000000000000000000..b8df443f1d18bc14e94deefa7aa5c2c15e6300cb GIT binary patch literal 26816874 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

>-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

kg?F_=ZEO1-|K!YJvZDNVUNK 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ⅅLZH@`e-g<##J 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%0D9JV3Vgu^wYnsE4rR1=QSkZQsa8&XX;QbVcr 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

oNVUNI9a1gu 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

5=gwZQKjQZ4X%hg1vv!6DTG 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

X2%I zi#eoP;NlLc7Py2%ss%3TkZOTTIiyxQs)p1upB5YJtl+q*~ze4yhKnfX2%It2v}v;OY*k7Py8(ss*m;kZOTzIiyX2%In>nOf z;N}jg7Py5&ss(Q8kZOTjIiy*THwwOsTR14L#hSt>X2%IyE&v<;O-8o7PyB)ss--pkZOT@IiyX2%IhdHEL;NcFb z7I=h1ss$eDkZOTPIiy~=YJtZ&q*~zd4yhJ+fX2%Ir#Ylr;OP#j7I=n3ss*0ukZOTvIiyX2%ImpPX2%Iw>hL*;O!2n7I=q4ss-NZkZOT1>WnBYJvAT zq*~zp4yhLSfJ3SU{?;MY0)OX_YJtCZNVUKR9a1guA%|28eApq?0v~ZmwZKOmQZ4W? zhg1uE+#%HhpKwUEz&|*oTHqfYQZ4XL4yhLSq(iC&KIM>VfloW6THrGdsTTOGL#hS- z*&)>e|KgBpfq!*KwZP{bQZ4X#hg1uE!6DTGUvx;dz?U3SE%0TBR118?A=Lt3bx5_q z*BnwU@NW*O7WleDss+B`kZOT%I;2|QTMnrf__jl;1^(S3)dK(FkZOVNIHX$OyAG)q z_?|mz^@%rE$|zMR15spA=LuEb4azo?;TPt@CS!f z3;fX`)dGha(f|6#A^X6g9a1guCl09=IE+K81rFX2%IqdBBn;OGvi7C44Oss)bekZOTrIiybV#+psT@)*aB7EC3!KIw)dGL!kZOTHcSyCsX&q86a5{%n3;cyc zss;YiA=Lt>cSyCsUpb^&;0z9_7C56rss+yEkZOT5JEU6RuN_h?a2AJD3;c~kss+yK zkZOUmIiy

<+0GIEO>31JF(ExQ0Wj1+M9kYJqDxq*~zG4yhKnjzg*iuIrF$f$KS>THyK)sTR0_L#hRC z=#XlG8#$y};KmNA7PyH+ss(Q9kZOUOIiyq*~zK4yhKnk3*^j?(2|hf%`e6THyW;sTO#EL#hQH=#XlG z2RWo#;K2^57I=t5ss$eEkZOU4Iiy^;YJo>Nq*~z74yhJ+j6fD7I=z7ss*0vkZOUaIiyWh9YJqn-q*~zJ4yhJ+k3*^j-s_NRf%iG2THyT-sTTNvL#hS-)*;mbf9H^DfxmZ1 zwZI1*QZ4Wyhg1uE*df&dA8|;vz(*ZYE$}giR119EA=Lt(a7eYlKRBdX;2#}QE$~kc zsTTO8L#hQn<&bKDPdlVq;4==X7Wk|~ss;YpA=Lu^;*e^Ae|1Q;z~>xNE%14VR118; zA=Lt3bV#+pmmE?p@MVWo3w*^P)dF92NVUM%98xXtZw{#z__{-?1-{{sYJqP$q*~xx z4yhLSwnM4~{@o$f0{`KVYJu-Kq*~y+4yhLSotRD;J+PGE$|D6R15slA=LuEa!9qn zuN_h?@EeCz3;fn0)dIhBNVUN49a1gu2ZvM({LvxR0*4yO|N6%v`@o?cQZ4W&4yhJ6 zj6wsTMebL#hRi=#XlGBRQm6;K&ZC7C4GSss)bfkZOUWIiy

^bowZQQlQY~#50)OU^YJop@NVULe9a1fDI)_vX{DniR1^&_@)dHt?NVULUIiyyT=J^Esqi;QS7$7Px>zss%3SkZOSoIiyyT=J%Q>W4;PMWs7Px{# zss*m-kZOS|IiyyT=J>p7%a;Q9`!7Px^!ss(Q7kZOS&IiyyT=J+c~6K;Pwuw7Px~$ss--o zkZOTDIiyyT=J`#Gdq;QkJ&7I=U|ss$eCkZOSkIiy{yT=J$2p{0;PDQr7I=a~ss*0tkZOS^ zIiyyT=J=Q*TW;Q0=z7I=X}ss&!?kZOS!IiyyT=J*EytG;Pnov7I=e0ss-NYkZOT9Iiy

WkAYJs;oq*~zZ4yhJ+heN6b-szBPfpyT=J z_c^3m;QbD%7WjZess;YmA=LtZ=a6cFzjsKrzy}>tE$|_SR119AA=LsOaY(hmM;%fv z@G*x}3w+!m)dHVzNVUK}IHX$OA01LH@J|k@7Wkw?ss%pfkZOTXJEU6RGY+X1_^d;! z1^(F~)dK(GkZOT{bx5_q=NwWk@Og(+3w*&L)dF91NVUM198xXtWrtJ?e8nNv0$+7V zwZPXLQZ4Xr4yhLSx5)ewZQKkQZ4WY zhg1vv(IM3WhZ@=c`o|&rz@Z&dE$}A}sTMelL#hQ1>yT=J!#Si{;P4Kq7C3@Kss)bd zkZOS=IiyFYJsCUq*~zU4yhJ6hC`|aj_HtUfnzzOTHx3YsTMen zL#hS-)FIUZ$8|`x!0{YXEpU8?R12KIA=LsWbV#+pi5yZbaAJp43!KCu)dDAVNVUMp z98xWCa)(q4oWdd10;hCHwZN$yQY~<5hg1uk#v#=Lf98;Cfj@UhwZLf|QY~;ghg1vv zg+r5yuHb2+41;M@+W7C4VXss+yLkZOVRIiy5yuHOF5)k z;L;AM7PyQ`q*~z04yhKnibJXeuIi9# zfvY*BTHxvqsTR0~L#hR?>5yuHYdNG^;MxwU7PyW>ss*m=kZOVJIiy5yuHTREg!;MNYQ z7PyT=ss(QAkZOV3Iiy5yuHdpV?9;NA|Y7PyZ?ss--rkZOVZIiy>- zYJmqiq*~y?4yhJ+h(oFc9_o;4frmMyTHxUhsTO#IL#hQH>5yuHM>(Wg;L#4L7I=(9 zss$eFkZOU)Iiy5yuHXE~%=;MoqT7I=5yuHS2?6w;MESP7I=+Ass&!_ zkZOU~IiyWe8YJoR7q*~z34yhJ+i$kgf-s+HQfwwuNTHx&tsTO#L zL#hSd>5yuHcR8e5;N1?X7I=?Css-NbkZOVVIiyMAd;JXf~7Wke+ss+C9kZOS+IHX$OhYqP0_>n`Z z1%B+1YJs0Pq*~yo4yhLSnM0}te(sQJf&X+!wZMNlq*~y=9a1gu3x`w-{L&%S0>5%d zwZN|(QZ4Wshg1vv)*;mbzjH{n!0#PWE$|12R15skA=Lth8pZ$m$07T`p&e2!@Fxzb z7C4MUss#?~kZOU$Iiy5yuHV>zT+;MfkS7C4SWss;YkA=LuMbx5_q@f=buaD0bU3!K0q z)dDAUNVUL;98xWCVuw@X2%IvpJ+%;Oq{m7C47Pss+yJkZOT* zIiyX2%Ii#eoP;NlLc7Py2%ss%3TkZOTTIiyxQs)p1upB5YJtl+q*~ze4yhKn zfX2%It2v}v;OY*k7Py8(ss*m;kZOTzIiy

X2%I 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

5yuH zOF5)k;L;AM7PyQ`q*~z04yhKnibJXe zuIi9#fvY*BTHxvqsTR0~L#hR?>5yuHYdNG^;MxwU7PyW>ss*m=kZOVJIiy5yuHTREg! z;MNYQ7PyT=ss(QAkZOV3Iiy5yuHdpV?9;NA|Y7PyZ?ss--rkZOVZIiy>-YJmqiq*~y?4yhJ+h(oFc9_o;4frmMyTHxUhsTO#IL#hQH>5yuHM>(Wg;L#4L z7I=(9ss$eFkZOU)Iiy5yuHXE~%=;MoqT7I=5yuHS2?6w;MESP7I=+A zss&!_kZOU~IiyWe8YJoR7q*~z34yhJ+i$kgf-s+HQfwwuNTHx&t zsTO#LL#hSd>5yuHcR8e5;N1?X7I=?Css-NbkZOVVIiyMAd;JXf~7Wke+ss+C9kZOS+IHX$OhYqP0 z_>n`Z1%B+1YJs0Pq*~yo4yhLSnM0}te(sQJf&X+!wZMNlq*~y=9a1gu3x`w-{L&%S z0>5%dwZN|(QZ4Wshg1vv)*;mbzjH{n!0#PWE$|12R15skA=Lth8pHqk$07T`p&e2! z@Fxzb7C4MUss#?~kZOU$Iiy5yuHV>zT+;MfkS7C4SWss;YkA=LuMbx5_q@f=buaD0bU z3!K0q)dDAUNVUL;98xWCVuw@X2%IvpJ+%;Oq{m7C47Pss+yJ zkZOT*IiyX2%Ii#eoP;NlLc7Py2%ss%3TkZOTTIiyxQs)p1upB5YJtl+q*~ze z4yhKnfX2%It2v}v;OY*k7Py8(ss*m;kZOTz zIiyX2%In>nOf;N}jg7Py5&ss(Q8kZOTjIiy*THwwOsTR14L#hSt>X2%IyE&v<;O-8o7PyB)ss--pkZOT@Iiy

X2%I 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

yqMEpTLqR0|x%A=Ls$bx5_q(Hv4O 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%0D9JV3Vgu^wYnsE4rR1=QSkZQsa8&XX; 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

5yuH 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

5yuH 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

LI~ZhebqD}gznb9W||N}cWYla zO$ed8wQravgwWmEH%${l=x%L$(}XbSiQU?_OcO%rZfytCgb=!0+tD;3gznaMGEE4f zyR~ndCWO%4+Rmm4A#}I4i)lg#-L36vnh-*FYrB~ygwWmEcT5w)pr?0h-!)ALp}V!+ zO%p=sZfy_Kgb=!0+tV~5gznb%GEE4fyS2Sd6GG^2Z6DKw5V~9Yo@qh|-K~A!G$DlU z*7h|`2!lSjcj$hm2_bav(EUvlLg*>ALw{hJ5JLA3{h?_>2;DpMN2UoObnnmuOcO%r z-k}GYCWO$vLk}`d2%&q2jxbFKp?ilOY?=@TeO$NpW7C8Xx?B5+X+j7+rCR%`X+j9y zt^Le2A%yPMer}o&LU(JwFii-dyR~1MCWO%4+OJF#Lg;So*QN;}bhq{!(}XbSvEABl zO%p=sZtW1$gb;d4wRWg!LI~Zh9cG#kLU(J2n6=9p{G=9e=?$-Wlnh-*FYkxCM2%)>RV@(snpr?0hBTW-R=x*&e(}WOuO11WP z(}WPZTl-L3uGG$G8; zV|MQy`XAGT5W08hNu~)QbnnoUO%p=s-l3C?gwWmEou&yPbhmbwX+j9yt=(;!5JGor_n0PxLGRu>^j_115W08heWnQ^ z^px76_nRh!(7i(+Fii-ddxuUiO$ecThfXw22%&q2K4_W{LiY}R$TT5@?j8EDX+j9y zJMRmrN5v=x*(0(}WPZTYJScAq@JaZtYdmgb=!0 zd(AW6NiLU(I#m?nhK-P)U`2_ba1_LgZv2;HqsGffDgyS3@22_ba1Hq%1? z{Wokf{r`IiA#}GkvuQ#Y^t0XCET#z|bhkFEX+j7+rCOWKG$DlU)@CRIZP8m z=x%LJ(}WPZTbs)?A%yPM<~B_Tp}VztOcO%rZf#!EgfK&Iv`6pI`Aic+=-#38nuxUaF-8*y<(}WPZcj%&~2_bav(8Wv>Lg?P1 zi<>5dK_A|&En%7vLU(IRnkIzM-P%&72_ba1wzO$N2;HqMW10{`cWcXbA#}I)KGTE{x?5YzG$DlU*4}TL5JGor zYnvv7K~L`1)-g>8p}VzpO%p=sZf!l&gb=!0Ti-MxgznZpV44s@cWWOsO$ed8wGB)Y zLg;SoL#7EKbhoylX+j9yt$o-uAq;wt-k}?rCWO$vLpL@}2%&q2e#A5(gzg>sQPYGF zx_9WuOcO%r-l3bACWO$vLpL=|2%&q2e%v%6gzg>s3DblSx_9U&O%uYP5AW7CGffDg zyR}c5CWO%4+NVtuLg;R7bJK(nx?9`AG$DlU);?pJ5JGorpEXSgp}V!unI?qL-P)F> z2_ba1wv}l@81$%a?enGyA#}I)1=EBOx?B6AX+j9yt!-_Z5JGor+n6SV(B0aXOcO%r zZtcsa2_ba1wykMG2;Hr1XPOW~cWYlUO$dV?*R6fkG$DlU*1l$%5JGorUpGw%p}Vzj zm?nhK-P$)z6GG^2ZF|#%5V~9YmT5u=-L36lnh-*FYde}IgwWmEPNoTA(388hZ<{8B z(B0b3rU@Z*x3-IELI~Zh?P{73LU(JsnI?qL-P(6d6GG^2?YpK4A#}I4yJRKbR(j(B0Y}O%p=sZtYK|2_ba1_GiigwWmEm8Jt5V~8NXqpg0cWV!tCWO%4+C!!ZA#}I)uxUaF-K{-hnh-*FYmb^H zgwWmEW2Olqbhq}nX+j9ytvz9y5C%QETYJ(pA%yPMo-$1cp}V!GO%p=sZf%ljLI~Zh zJ!6^>LU(J=nkIzM-P&Z+gb=!0n_`*}LU(J=nI?qL-P-e}31QIVyR{cg6GG^2ZK`QP z2;Hr{Xqpg0cWW=1CWO%4+RLU1A#}I)ifKX!-L1W9nh-*FYp!t}Ibhq|~ zX+jwEly2=!(}WPZTYJkiA%yPMrkN&$(B0Z}(}WPZTbpTNyZ`;aV?%dqGn*!a(B0ZB zrU@Z*w>GP3LI~Zh&1RYqLU(Jknvxi zgwVZ1=P^wPp?inUYnl*3_YR%UG$DlU9Xh{hLI~YEbOFR6-*OC=x%LA(}WPZ zTYH;nLI~Zhtz?=ILU(I#H%$nkyS0@~6T+a!cWdu3O$ed8wRf5(gwWmEyG#>8=x%Kl z(}WPZTYI-@LI~Zht!kPOLU(JcnI?qL-P-D=2_ba1wuWg!2;Hr{$21`fdP=wUUekmS zx?5Y*G$DlU*4}5D5JGorYndj5(B0bmO%p=sZf$MTgb=!0TgNmZgznbXHBAViyS4R9 z6GG^2ZGF>(Fhh^ovv=qROcO%r-k~2fO$ecThi+h+5JLA3{g7!w2;Dn$L(_y1x_9V@ zO%p=s-k}?rCWO$vLpL@}2%&q2e#A5(gzg>sQPYGl=p(wdkC`Tf(B0Z5rU@Z*x3;Ni zLI~ZhecUu5gznZpVVV#^cWa+CO$ed8warWuLg;SoQ>FHFzC_U+6dEx5V~7C*fb%8 z?$&;6nh-*FYdRpPD9w(B0b4OcO%rZtdr$2_ba1_6yU55V~9YrD;M4-L3t~ zG$9One7E*%(}WPZTl?eN17&t(B0ZmrU@Z*xAq6qgb=!0`=e<>2;Hsy z$uuE^?$-Wnnh-*FYkx6K2%)>RqfHY+=x*&8(}WPZTl=eNLKyTxy+i+Inh-+w4n5X1 zA%yN7I?^;Dgzg=BoM}P`-8=N}rU@Z*@6dmkCWO$vLytF22%&q2o?w~~LiY|m(KI21 z?j8D1(}XbSW4pC~nI?qL-P*rR6GG^2?LVdoA#}HPl4(K+-L0K$nh-*FYp0kdgwWmE zsip}bbhmbzX+j9yt&K8G2%)>R(WVJu(3f;;r<*2((B0Y@rU@Z*w|1s!LI~Zhon@L3 zLU(Itn(2_ba1cCKkc2;HrnXPOW~cWdXHCWO%4+6ATwVbBkBYZsa(gwWmE zMWzWMbhmb~X+j9ytzBZ85JGorV@wl5=x%MSX+j9ytzBxG5JGormzgGn(B0bQrU@Z* zw|0eTLKyU0-P)C=2_ba1c9m&D2;Hq+ZJH25cWc*}CWO%4+O?($A#}HPooPY{-K|}3 znh-*FYd4rCgwWmEjiw19bhmbsX+jwELA^uAnI?qLy+g;FCWO$vLvJ=s2%&q2-eQ^% zLiY~6)ifc5?j3rYX+j9yJM?zbgb=!S=pCjBA$0H1J53Wp=-#1snI?omAKR_nZJH25 zcWd{UCWO%4+P$U;A#}HPpJ_q}-L2hknh-*FYY&(vgwWmE1k;2Nx?7uQnh-*FYY&Rsip}bbhq}RX+j9yt-WNL5C;8LxAwAWLI~Zh zy<(aWLU(JgnkIzM-P&uW2_ba1_PS|82;Hr{VVV#^cWZB&CWO%4+FPaxA#}Gk%`_o| z?$)N8CWIM!qY=GBXIjMWfB)~;(7i)vHcbejdxy?qnh-+w4xQCBA%yN7I-6-i2;Dn$ zcGH9qx_9UtrU@Z*@6b6-6GG_Tp>vrggwVZ1=Qd3UgC5zf&10GnLU(KPnkIzM-P(Mn z2_ba1Hos{?2;HqMV44s@cWVopCWO%4+CruYA#}I4uxUaF-K{NRnh-*FYm1sDgh7w# z))q5O2%)>R#Z41J=x%KZ(}WPZTU*jJA%yPMmNHEUp}V!EO%p=sZfzOUgb=!0Th=ro zgznasGffDgyS3#_6T+Y;bZaY^CWO%4+KQ$LA#}I)Hq(RS(B0ZQOcO%rZtb0>2_ba1_Ab+e5V~7i#WW!ddRn*kZqtMix?5Y-G$DlU)>bo3 z2%)>R)lCyZ=x%Kd(}WPZTYHabLI~Zhz1K7$gznbXG))MhyS4Y3CWO%4+FGUwVbCLb zhrZu5A%yN7y0&RT2;Dn$9n*vmx_9WhrU@Z*@6h#36GG_Tq3fF_gwVZ1KVX^=LiY~+ zplLz~-8*yx(}WPZcj$*q6T+ZJc554&CWO%4+J{XOLg;R7Bh!Qsx?9`WG$DlU);?mI z5JGorA2m$~p}Vz@nI?qL-P$Im2_ba1wy9}C2;HrH+%zE!dQ7+W3DblSx?B6CX+j9y zt!-wS5JGorpE6Adp}VzDn?$$nQnh-*FYo9Ys z2!o!`t!-(V5JGorTbU+=(B0bSO%p=sZtV-E2_ba1_C?c#5V~92+B6}A?$)+3O$ed8 zwJ(__gwWmEmrWBw=x%LW(}XbSY2Dg(rU@Z*xAqm&gb=!0`>JU|2;HrH%`_o|?$*9; znh-*FYu_+U2%)>RZ<;2A(B0bhrU@Z*xAra5gb=!0+rcy;%+O;-^bXz8G$DlU9lDcg zLI~YE^xLKhA$0H1olO%$=-#2bm?nhKy+e03O$ecThwf&Y5JLA3{f=ou2;DpMyQT>t zbnnpJO%uYPM|Nv_m?nhK-P)d}2_ba1wwGx_2;HsiZJH25cWe8YCWO%4+V@NoLg;So z`=$vYbhoyzX+j9yt?g%;5JGor`h(Lg;SoVAF&Ux?B6PX+j9yt^LF_Aq;v#xAs%hgb=!0 z`RUzsL^(B0avO%p=sZtXXw2_ba1_FL10 z5V~7C#55rcdRn)3sA)n7-K`yFnh-*FYloXAgwWmE5vB9fLI~Zh z9ch{nLU(INnI?qL-P#{a6GG^2?T@AjVbCLbhyKYlA%yN7`e)OG5W08hUrZB1=-#16 znr5W08hv8D+jbnnoSrU@Z*@6h8+6T+ZJc58n( zO$ed8wSSlR(@YaW=x%M4X+j9yt&KKK z2%)>R(@hgX=x*%{(}WPZTRYPoo$*BLU(KDm?nhK-P*aP2_ba1 zcAjZM2;HrnZ<-K7cWW1zCWO%4+J&YGA#}HPk!eB*-K|}0nh-*FYnPZNgh5a1*2b77 zgwWmESkr_Mx?8){G$DlU)-E$m2%)>R%S{tP=x*%_(}WPZTf5RUA%yPMt};ysp}V!K zO%p=sZtWV=gfK&Iba3y`YfTeE=-#2%nI?qLy+f}zO$ecThu&bC5JLA3z0ouwgzg=B zlW9T--8*!gX+j9yJ9NBhLI~YE^k&n95W08hEv5-!(8qOax0)t|(B0Z?rU@Z*w|2W} zLI~Zh-C>##LU(I-nkIzM-P&EI2_ba1cDHFl2;HsSW10{`cWd{WCWO%4+I^-8VbEi{ zwfjvILg;So0n>yKx?7uInh-*FYZFZqLg;SoLDPf~x?6k5G$DlU)*d!Z2%)>RM@$n! z=x*&%(}WPZTYJnjAq;wAxAwScLI~ZhJz<&RS4|T_=x*&b(}XbSgL{X* zZkiB6_YQr-G$DlU9r~teLI~YE^exkb5W08hG}D9-x_9Vw(}WPZcj!!u+WqhU9UHoL z=**@GA$0H1Sxgf`=-#2TnkIxnAJ?tTW||N}cWbkoCWO%4+8m|{A#}Gkr)fe6-L1`K znh-*FYjc|>gwWmEJf;aDbhkFIX+j9yt<7he5JGor^P47wL67a$7BEc+p}VyOO%p=s zZfzmcgb=!0Ti7%qgznZBF--`eyR}746GG^2Z86h?5V~7i+%zGC?$(wtO$ed8wIxjx z!k{O1YfG6XgwWmE(xwR^bhoyQX+j9ytu1Ss5JGor%b6yG(B0bdrU@Z*x3+?5LI~Zh zt!SDMLU(I#GffDgyS0@}6T+aUcWZAqO$ed8wUtd1Lg;So9i|B(bhq|S(}WPZTYHyj zLI~Zhtzw!GLU(KLHcbejyR}tK6GG^2Z8g(`5V~7i-83Q0&|?nn9lC~TLI~YE^gX5t zA$0H1_nIbz&{O~WbDH-8vo5u!X+j9yJM?{~2_bav(6vkxLg?P1?>9{dp?im}ZJH25 z_YPghG$DlU9lEY*LKyUM-P(Gl2_ba1w!UdX2;HrHz%(I*o=Ro^{rtbyK4_W{LU(H$ zm?nhK-P(st6GG^2Z9~(95V~9YuxUaF-K}k8nh-*FYa5#;gh7w();?mI5JGorA2m$~ zp}Vz@nI?qLQ>(R2OcO%rZf#T3gb=!0`?zUB2;HrH!Zaa-?$$nOnh-*FYnz!SgwWmE zr%V&VpeJ@~pEgYhp}V!sO%p=sZfy(Ggb;dawe}g)gb=!0`>bg~2;HrH&NLx}?$)+6 zO$ed8wXIAOLg;So^QH+Qbhq{e(}XbS>D}5FO%p=sZf$GRgb=!0+r~5@gq~WheaSQ- zgznb9Y?=^4cWc|4CWO%4+IFT1A#}I)71M+ex?B6IX+j9yt$ocjAq@K9-l1PNO$ecT zhknB}A%yN7`c2b>5W08h_NECTbnnn_nI?qLy+d~}O$ecThwf;a5JLA3-N`f|gzg>s zZPSDhx_9W#rU_xt$8~GFm?nhK-P*3E2_ba1wwq}}2;HrH$21{??$*9*nh-*FYrC5! zgwWmE9;OK)bhoyrX+j9yt?gx+5JGordz&VNL67a$_AyNep}V#3nI?qL-P-p}6GG^2 zZC}%b5V~92&om)~?$-7RznUh5(B0bKOcO%rsny!CrU@Z*w>Hu=A%yPMjx$XNp}V!enR z^Gp-Mpr7s5&Nod6p}VyUOcO%rZtX(Tgb;dawRVwdLI~ZhU2K{VLU(JIm?nhK-P#z_ zgb=!08*7>nLU(JInkIzM-P&cQ31QH?_YS?>G$DlU9eRanLI~YE^h(o&5W08hRi+6c zbnnosO%p=s-l5l+CWO$vL$5VW2%&q2UT2yRLiY~6-ZUYE?j3rAX+jwEVcpt|rU@Z* zw|0|hLI~ZhjWbOMp}V#5rU@Z*w|28>LI~Zh-C~*$LU(JonkIzM-P&!Y2_ba1cDrdp z2;HsSVVV#IeOkA6r)fe6-L2hanh-*FYj>L_gwWmEJ*EjEbhmb|X+j9yt=(su5JGor z_nRh!(B0YtrU@Z*w>H5vA%yPMCYmOMLEqG^J!qN`LU(HqnI?qL-P*&Z2_ba1_K0ah z2;HqcYMKy2cWaNCCWO%4+T*4PA#}I)glR$u-K{-onh-*FYfqUbgh4;stvzj;5JGor zlS~sr=x*&9(}WPZTYJ_tA%yPMCYvUN(B0Y;(}WPZTYJtlA%yPMo;OVhp}VygOcO%r zZf&Y*LYSfV+oN~ri>3)7bnnoYOcO%r-k~p>CWO#aYlpsKnh-+w4t>=$A%yN7`kHA% z2;DpMb<>0px_9UsrU@Z*@6b0*6GG_Tp>LTcgh3zPtxYpc2%)>R>81%GbhkFsV*d?j zlj;B8LkOX#R%Rl}!^u=x*&DrU@Z*xAsoc zgfQqmdWXKtG$DlU9lDBXLI~YE^xdWjA$0H1RZSB@=-#2LnI?qLy+cR^-L2&=x%L&(}WPZTl;`%LI~Zheb6)^40=?zwt;Cv2;HrH z$TT5@?$$OmO$ed8wGW#ngwWmEMy3fNbhoy#X+j9yt$oBaA%yPMK5Ci}LU(H)GffDg zyR}VB6T+a!b!(fNCWO%4+Q&^3Lg;So6Q&6vbhq|N(}WPZTieVuA%yPMK4qE^LU(JQ zHcbejyS2?t6GG^2Z41+c5V~9YjA=p`^yF^sv!)3lbhq|7(}WPZTien!A%yPMwlYl! zp}V!unH8wA%yPM4mM2)gPz>2{n#`igznaUVww;_cWXa2O$ed8wV#>YZsX+j9yJMC?gwWmEou&yP zbhmbwX+j9yt=(;!5JGor_n0PxL67g&?lnyap}V#FOcO%rZtZ^4gb=!0d%!dygznZR zm?nhK-P%Ocgb=!0d(bo?gznZJGEE4fyS0Z+6GG^2?Ge+2Fz6}W+M}ikA#}I)m}x=? z-K{-tnh-*FYfqRagwWmElcotFbhq}DX+j9ytvzj;5JGorlS~sr=x*&9(}WPZTYJ_t zAq;xY-l3CC6GG_Tp;Jr~Lg?P1&zUBK(7i*SH%$nkdxySYnh-+w4xMV65JLA3ebF=_ zgzg>sl4(K+-8=MU(}WPZcjzmo31QGjbZf7gCWO%4+H0l>A#}I)x@kfP-L1W0nh-*F zYj2t+gwWmETc!yibhkFmG$DlU)~1^#gwWmEOpDw7@BbYex?7vsG$9OnbhkE(X+j9y zt<7qh5JGorvzaD@(B0bXrU@Z*w>F1qLI~Zh&1sqtLU(I(nI?qL-P+uy2_ba1HjimS z2;HsCYnl)SJ-%C;&om)~?$+ivO$ed8wFOKQLg;R7LDPf~x?5YwG$DlU))qER2%)>R zMNAVy=x%LM(}WPZTU*RDA%yPM7B@`@gPzi@En%7vLU(IRnkIzM-P%&72_ba1wzO$N z2;HqMW10{`cWcXH%$nkyR|h;6GG^2?LDRmA#}I)UekmSx?5Y* zG$DlU*4}5D5JGorYndj5(B0bmO%p=sZf$MTgfQsQ-P$^)2_ba1wytSH2;Hr%XPOW~ zcWdjLCWO%4+6PP%Lg;SogQf`~bhoyFX+j9yt$oNeA%yPMHZ)BLp}VyYns71M+; z=p(wdubL)=(B0bCOcO%rZtd%)2_ba1_6^g75V~9YrfEV5-K}kJnh-*FYu_?W2%)>R z9ZVBK=x%LC(}WPZTieMrAq;wSxAtw*gb=!0+u1ZBgznaMF--`eyR}_S6GG^2Z8y_| z5V~9Yj%h*&-K~AsG$DlU)^;~d2%)>RJxmiq=x%LK(}XbS@!i^9rU@Z*x3;%wLI~Zh z?PHn{LU(K5GffDgyS49|CWO%4+PRADSkF zK~L${eq@>uLU(Him?nhK-P(bs2_ba1c93a82;HrXFii-dyS0N&6GG^2?Z>7GA#}I) z6Vrqcx?B6HX+j9yt^Le2Aq@JU-l0D?O$ecThyKDeA%yN7`b*P<5W08huS^p{=-#2f zHcbejdx!qUG$DlU9r|0-gb=!S=pm*FA$0H1LroJx=-#1+nI?omAKR@RZkiB6cWXzO zCWO%4+V4ygLg;So_ofLUbhmb-X+j9ytsP~W5JGore=to5p}Vy|nkIzM-P)f_6GG^2 z?a!tOVbGU!Ykx6K2%)>RqfHY+=x*&8(}WPZTl=eNLI~Zh{mnEXgznakHBAViyS0&~ z2_ba1cARNK2;Hsy-83PD?$-Wcnh*y4K(}_hX+j9yt({<+5JGorCz>XN(B0ZUO%p=s zZtY*D2_ba1_HWaK5V~9Yk7+^(-L0Kunh-*FYbTo~gwWmEDW(Zw&~J5XrHW&A%yPMMw=#t(B0bUrU@Z*w|0hULI~ZhooSj7LU(ItnI?qL-P+lv2_ba1 zc8+O681zBCL(er$2%&q2o@bg6LiY|m-!vhF?j3r8X+j9yJM==+gb=!S=tZUpA$0H1 zi%k(yd)@nh-*F zYd4rCgwWmEjiw19bhmbsX+j9yt&KBH2%)>R@umqObhmc1X+j9yt=(dp5JGorx0)t| z(B0Z?rU_xt4|Hp{nCWO%4+C8QTA#}HP zuW3RE-L2hcnh-*FYxkQbgwWmE1EvXK&~J5X6HF6A=x%MIX+j9ytvzU(5JGor51A%} z(B0a@rU@Z*xAur>LI~ZhJ!+Z|LU(JAnI?qL-P+@(2_ba1_JnCdn4$L@(L3}>(}WPZ zcj!~52_bav(5FokLg?P1lS~sr=-#2vm?nhKy+fZhO$ecThfX$42%&q2PBBdgp?ilu zXPOW~_YQsDG$9OnWViN$X+j9ytxYve2%)>R7flmF=x*&L(}WPZTYK3wA%yPMUNKDw zp}VzLO%p=sZtXSGgb=!0d)+i4gznbfFii-99@DM8X_^p1cWZB%CWO%4+BDOI5V~8N zZkiB6cWW~(VfVlPcWmfxZD!Mi5V~8N#WW#=?$%~CO$ed8wb@J)Lg;R7cGH9~=n380 z9Ht2&bhkFAX+j9yt<7bc5JGorbDJiF(B0ZRrU@Z*w>Gb7LI~Zh&1aerLU(KPnRB~24T=x%K((}WPZTU**RAq;v%@6csT6GG_Tq05>kgwVZ1morTW zp?ileZ<-K7_YPgbG$DlU9lD}vLim4l+hwrb<>9qqD0QKQ3hwUi?(XjHkl;=Nbt9?a zkdzi`xD_fSrEWmoQj#JqPzq^_gc3;J{@-%vx7s!L{&3C=d#=6D^UNJ)uMazP@6bg} z6GG_Tp^KR&gwVZ17dK4^p?ileVVV#IJ+50@(ljB2?$(wvO$ed8wWUoHLg;R78PkLi zx?5Y;G$DlU)|N9(2%)>Rt!$bQLU(Jc zm?nhK-P)?A2_ba1wwh@|2;Hr%ZkiB6cWY~yCWO%4+M1>bA#}I4mT5u=-L0){nh-*F zYwMUMgh5a4*48ym2%)>R^-L2&=x%L&(}WPZTid`iA%yPMHZ)BLp}Vz>OcO%rZf#@J zgb=!0+r%^>gznZhHBAViyS2?s6T+ZpbZeWNCWO%4+7_k>A#}I4rD;M4-K}k9nh-*F zYg?NpgwWmEHl_(7bhoyxX+j9yt!-zT5JGor+nXkY(B0Y&rU_w|eqmJa&>c+^Lg?P1 zJDDbg(7i)A%yN7x|?Z22;Dn$chiIrx_9UvrU@Z*@6bI> z6GG_Tp?jGogh7w%*7i0{2%)>ReM}QV=x%La(}WPZTieexA%yPM_BTxkp}VyMOcO%r zZtXzRgb=!0JIFL4gznZ3HcbejyR}116T+Y;bZdv2CWO%4+F_;%A#}HPxM@NN-K`yA znh-*FYe$+UgwWmEQKktYbhmc2X+j9ytsP^U5JGor$C@UD(B0Z`rU_xtle@L!O%p=s zZtVoqgb=!0JJB>DgznZ(GEE4fyR{Lf2_ba1Hqta9gznZ(HcbejyR}nH6GG^2?Nrl* z5V~7C%`_nldPcW)x@kfP-L0Krnh-*FYiF7!gwWmES*8ggbhmc4X+j9yt({|<5JGor z=b9#j(B0a3rU@Z*w|2g1LI~ZhU0|9J20f~G=qS^K5W08hXw!rcx_9V>rU@Z*@6d}( z6GG_Tq3<se$#{yx_9UYOcO%r-k~2fO$ecThknR3Aq;w4xAtMv zgb=!0`-o{m2;HrH)HET4?$$nLnh-*FYacgF2%)>Ri%kR zPnafz(B0Z6O%uYPCvR%S{tP=x*%_(}WPZTf5RUA%yPMt};ysgPz>2U2U2WLU(J|m?nhK-P$G$DlU)~+{A2!o!{t$o2X zA%yPMzG#{dLU(IlGEE4fyR|QyCWO%4+E+{yLg;So2GfKPx?8)^G$DlU)^0LQ2%)>R zn@tl!=x*&6(}XZfpEsRnvqJx_9W^rU@Z*@6dZp6GG_TpX+jwE z#BS}orU@Z*xAr~Lgb=!0`@U&H2;Hsyz%(I*?$&;2nh-*FYdRADbqG(B0Zk zOcO%rZtbV02_ba1cE4#t81$5G?E%w-5V~7?&@>^0?$&;0nh-*FYd<$l2%)>RUzjF@ z(B0ZEO%p=sZtYj52_ba1_G{CG5V~9YjcGy%-L3uBG$9OnX1De`(}WPZTl>9fLI~Zh z{lPRLgznZRnI?qL-P#{b6GG^2?IF{I5V~8NY?=^4cWYBj6GG^2?N6o&A#}I)uxUaV z^yuE9kC-Ne(7i(+HBAVidxt(|nh-+w4*j!fLI~YE^e?6fA$0H1$4wJL=-#1Em?nhK zy+fZgO$ecThyK+xA%yN7`jlxx81(pV?QfRIZYEn=x*)prU@Z*xAqRxgb=!0o69sIgznbnHcbejyR~rU@Z*@6dTn6GG_Tq4Sz1gwVZ1=QB+Rp?inUZ<-K7 z_YPgaG$DlU9lD@tLI~YEbRpA(FzE5!+QOy@A#}I4h-pFy-K{NZnh-*FYm1pCgwWmE z;-(29bhoyIX+j9ytu1Mq5JGorOPMBw(B0b7rU@Z*x3-LFLKyVKZf#l9gb=!0Th25g zgznasH%$nkyR{We6GG^2ZAH_B5V~7i$uuE^?$%Z|O$ed8wN*?LLg;R7RnvqJx?5Y# zG$9OnO1HMUX+j9yt*v325JGorYnmp6(B0ZvrU@Z*x3;!vLI~Zhtz()HLU(KHnkIzM z-P(Gl2_ba1w!UdX2;Hr1V44sHJ+oWe&@>^0?$$OkO$ed8wT(>^Lg;R76Vrqcx?9`S zG$DlU);2Ru2%)>R%}oy=g)S-8*y#(}WPZcj%6$2_bav(49;ZLg?P1 zJDVni(7i)ox?9`VG$DlU*7h?^2!o#3t?h4`5JGor2bd;=(B0aBrU@bR zv})}j(}WPZTRYe^A%yPM4lzv#p}Vz1O%p=sZtXDBgb=!0JKQuOgznakFii-9p3&7A@sCr?HJR95V~7C)-)l6?$(YoO$ed8wc||_Lg;So1k;2N zx?4NZG$DlU)=n}_2!o#4t&K2E2%)>Rk){bDbhmc0X+j7+ty(+9G$DlU)=o7|2%)>R z(@YaW=x*(F(}WPZTRX!vA%yPM&NNL3p}V!SOcTN^{o+ZzL(eu%2%&q2o@1I2LiY|m z*EAu7?j3rbX+j9yJM?_hgb=!S=mn+;A$0H1QKktYbnnp7rU@Z*@6ZcP6GG_Tp%5V~9YoM}P`-K~AzG$DlU)~+*62%)>R>rE3v=x*%`rU@Z* zxAsNTgb=!0`;uuw2;HrH*)$;x`lQ~WUolMxp?inkV44s@_YS?$G$DkZRy*`2(}WPZ zcj(Qg2_bav&|6FsLg?P1x0)t|(7i)%GffDgdxzd`nh-+w4!y%PAq@KBZtYIfgb=!0 zyUR2ogznb9YMKy2Ppj7MHcbejyR~~v6GG^2?Q5n9A#}I)b<>0px?B5(X+j9yt$oup zA%yPM?lnyagTAR-n_!v{LU(HuO%p=sZtYv92_f{fYVAJLgb=!0`?hI92;HrH$21{? z?$*9*nh-*FYu__X2%)>R@0%us(B0Y(OcTPO@9)-rXqpg0cWXZ~O$ed8wI7=%gwWHf zwV#+KgwWmEPfZg-=x*(P(}WPZTYJDXA%yPM9yCn|p}V!8nI?qL-P+Gh6T+aM?$&-` znh-*FYriy22%)>RUzsL^(9^25Uz;X`(B0Z^OcO%rZtb_G2_ba1_B+#r5V~9Yy=g)S z-L3t>G$DlU)+U)IgjxFR5xqnIXqpg0_YQr?G$DlU9Xi=GA%yN7I>j_0gzg>sC)0!w zx_9WqrU@Z*@6bm~6GG_Tp^us-gwVZ1A2Uq|p?in^*)$;xdQ7+W7t@3gx?6kPG$DlU z)}Am;2%)>RCruMV=x*(=rU@Z*xAv52LI~Zh{mnEXgzna!HcbejyR~Ob6GG^2ZK`QP z81&8E+TTqRLg;SoAEpT*bhq|T(}WPZTYJ_tA%yPMo-<7dp}V!`O%p=sZtVrrgb=!0 zn`W92LU(H~nkIzM-P*rQ6T+Y$=+<5`O$ed8wdtk_A#}I)vS~sH-L1W1nh-*FYcos} zLg;R7rfEV5-L1_w?|(jgZZY$J9)u9OTbtc9A%yPMUSpaNLU(I(m?nflKhv$f)-)l6 z?$%ysnh-*FYp*v=2%)>RH<%`b(B0Y_O%p=sZtYE`2_ba1_GZ(B5V~7?i)lg#-L1XV zG$DlU*4}2C5C%P>cj%m^2_bav(6^f=gwVZ1-(i{%LQkt5I+tle2;Dn$ZqtMix_9V1 zO%p=s-l6X@O$ecThrZi1A%yN7`X1AS5W08hJf;a@&||u_c}){S=x%L3(}WPZTbtiB zA%yPM7BEc+p}VyOO%p=sZfzmcgb=!0Ti7%qgznZBF--`eyR}746GG^2Z86h?FzB1R zwZ%;nLg;R73DblSx?5Y)G$DlU)|N6&2%)>RrA-q;=x%Kp(}WPZTU*vNA%yPMmNQKV zp}V!^O%p=sZfynAgfQp_y0sNe6GG^2Z6(u$5V~7i*)$=9?$%Z@O$ed8wN*_MLg;R7 zHPeI;x?5Y_G$DlU*48jh2%)>RHBA#j=x%K-(}XbSXS%huO%p=sZfzaYgb=!0Th}xp zgznbXGffDgyS4RA6GG^2Z3EMU5V~92&@>^0?$$OkO$ed8wT(>^Lg;R76Vrq+OTRdx zcj%_32_bav(9KK}Lg?P1o0}$t(7i*qFii-ddxvgmnh-+w4&BN$A%yN7y0vLS2;Dn$ z8`Fdkx_9WdrU@Z*@6hc`6T+a!bZgt2CWO%4+76}(A#}I4qiI42-L36pnh-*FYdf1J zgwWmEE~W_~bhoyvX+j9yt?g!-5JGoryPGD2(B0Y|rU_xtH+O4$nkIzM-P&HJ2_ba1 zwzp|Q2;HsiW10{`cWe8aCWO%4+J2@9A#}I4ziC1U-K`y9nh-*FYX_PpgwWmEL8b{| z&<}KL2b(5@(B0Z0rU@Z*w|1y$LI~Zh9cG#kLU(J2nXN z(B0ZerU@Z*w>H8wA%yPMMw%vs(B0a}rU@Z*w|0tYLKyUj-l3LU(H) zHBAViyS0y*CWO%4+Q&^3Lg;SoV$*~Wx?3A#nh-*FYhz6l!k{1M);?jH5JGorpEOMf zp}VzDnI?qL-P)&36GG^2?K7qcA#}HPiD^Oz-K||}nh-*FYnPcOgwWmE<)#TCbhmbe zX+jwEGu_&irU@Z*w|13jLI~ZhU2U2WLU(J|m?nhK-P$0cLI~ZheZw>%gznb9X_^p1cWd{WCWO%4 z+62>t5V~8NXqpg0cWd7=O$ed8wfjsH!k{1Q*1m0;5JGor-!V-Hp}V#3nkIzM-P-p| z6GG^2?fa$)A#}I)1Ji^Mx?B69X+j9yt^LR}A%yPMer%c$LU(IFF--`Ap4zSb)HET4 z?$+)%O$ed8wFgWSLg;SoLDPf~x?B61X+j9yt^M3IA%yPMeqovrLU(JwG))MhyR~1L zCWO%4+OJI$!k|a?4*iX3LI~YE^tYx7A$0H1-RKbt0m(B0Z!OcO%rZtZc?gb=!0d%`p!gzna!G))MDzNK6H zt7$?A-K{-knh-*FYkxCM2%)>Rr%e+==x*&9(}WPZTbpW{5JGore>Y7Cp}Vzzm?nhK z-P%7*6GG^2?OD@=Fz5%nwdYI|Lg;SodDDatx?6j}G$DlU)~1;zgwWmEi>3)7bhq{| z(}WPZTYJegA%yPMrkf^&(B0b0rU@Z*xAux@LKyVaZf%BXLI~Zh%`{C2p}V!&=CkjA zzxuMFyS3R(6GG^2?KP$eA#}GkhiO6x-L1XWG$DlU)?R0t5JGoruQyEyp}Vy=m?nf- z`o)pGL*Hnc5JLA3eUoWI2;DpM&87(nh-+w4t<+xLI~YEbWYQR z5W08h+f5Tf=-#34Fii-ddxy?tnh*v(wp*LqG$DlU*4}BF5JGor?=npYp}Vzrnyq=v%tA1x*t|=x%Kx z(}WPZTU*#PA%yPM7BNi-p}Vz3O%p=sZf!Bsgb=!0Tii4ugznasFii-dyR{`v6GG^2 zZ7I`)Fz5%nwWUoHLg;R78PkLix?5Y;G$DlU)|N9(2%)>RbA#}I4mT5u=-L0){nh-*FYwMUMgwWmEx~2&sbhoyiX+jwE$ljsrnv1vjG-8*y>(}WPZcj%_32_bav(9KK}Lg?P1o0}$t z(7i*qFii-99^0*LX_^p1cWYajCWO%4+SaBCA#}I4jcGy%-K}kFnh-*FYulM7gwWmE z_NECTbhoyHX+j9yt?g)<5JGorJDDbgLEqA??QEJ5LU(Jsm?nhK-P*3E2_ba1wwq}} z2;HsiZkiB6cWZl?CWO%4+McEfA#}I4muW%>-L36ynh-*FYx|fcgh4;pt?g@?5JGor z`mLU(HinI?qL-P*yX2_ba1c8F<02;Hq6YMKy2 zcWZ~4CWJvx?bZ%AO$ed8wIfUuLg;SoNYjK6x?4NSG$DlU){Zt!2%)>RV@wl5=x*&; z(}WPZTRYA)A%yPMjyFvRp}VycOcTPOFX$b5qG>`1-8=Lo(}WPZcjySygb=!S=t$Fq z5W08h$)*V*bnnnpOcO%r-l3Rb4(LL=x*&?(}WPZTRYD*A%yPM&Nod6p}VyUOcO%rZf%rl zLI~ZhjW$gPgTA+0yU;WtgznZZGEE4fyS4Y4CWO%4+WSlsLg;So{iX>abhq{a(}WPZ zTl=7CLI~ZheaJK+gznZpY?=^4cWWOpO$dX2s9XD}X+j9yt$oZiA%yPMK5m*2LU(Hy znnLU(JQFii-dyR}c6CWO%4+NVqtLg;So)20bw(64lBpD|4c zp}Vz9OcO%rZtYUjgb=!0yUa8pgznZZH%$nkyR|D!6GG^2?Ml;x5V~8t$}}N_?$)k0 zO$ed8wQEch!k{nc9Xif5A%yN7I^HxPgzg>sS<{3Nx_9WcrU@Z*@6gYgCWO$vLqBht z5JLA3z0Nctgzg=By=g)S-8=LPrU@Z*@6a!rCWJv>)2)5UG$DlU*1l|-5JGorUolMx zp}VykOcO%rZtX_Xgb=!0yU8>mgznaEHcbejyR}RyG#>8=x*(+rU@Z*w|2K_LI~Zh-D8>%LU(IlGffDg zyS1;ICWO%4+BZxS!k{1O*1l<)5JGor_nIbz(B0Yu(}WPZTbpQ_5JGor-!e@Ip}V#F zOcO%rZtdHq2_ba1_8rrN5V~9Yu4zID-K~AkG$9Q7m2U0(rU@Z*xAp_mgb=!0`=Mz< z2;Hsy$TT5@?$&;6nh-*FYdRpPD9w(B0borU@Z*xAuT(LI~ZhJ!qN`X6ds> z^$z`+X+j9yJM`zK2_bav&|jD)gwVZ1e`%T!LiY~+m1#l<-8=NxrU@Z*@6g|vCWO$v zLw{?U5JLA3{het-2;DpM_ofM9(BrzbKbR(j(B0Z3(}WPZTl=GFLI~ZhJ!F~?LU(JE zO%p=sZf%NbLI~Zh{mC>TgznZJHcbejyR}D56GG^2?NQT&Fz5;0+GC~(A#}I)XVZib zx?B5;X+j9ytvzm<5JGorPnafz(B0aTrU@Z*xAs@lgb=!0d&)E+gznbR z`Aic+=x%L((}WPZTU)?1A%yPM7Bo!=p}Vz(OcO%rZf#-Hgb=!0Tf{UW40>|6wy0@B z2;HqMW||N}cWaBACWO%4+7hM-A#}I4q-jD3-K{NUnh-*FYfGCZgwWmEGNuV3bhoyw zX+j9ytu1Go5C%P?TU*{VA%yPMRxnKnp}VyeO%p=sZfzyggb=!0TiG-rgznZ>F--`e zyR}tK6GG^2Z8g(`5V~7i-83PD?$*{YO$f8}i=%pnu4$SOLiY|`%QPW`?j5?eX+j9y zJ9Hh>gb=!S=(?r}A$0H1^-L2&=-#30nF* zwy|kK2;Hr1Vww;_cWaxPCWO%4+GeH+A#}I4xoJWO-K}k5nh-*FYg?KogwWmER;CFd zbhoy(X+j9yt!-nP5C%P=Tiez&A%yPMwlhr#p}V#1O%p=sZfytCgb=!0+tD;3gznaM zGEE4fyS1H76GG^2Z5Pvo5V~92)ifc5?$&lQO$dXY+^y|ynh-*FYkQa`gwWmEo~8*Q zbhoybX+j9yt?g}^5JGor`Rqf8URphxu%J=!!Ogzg=BjA=p$-8=MH(}WPZcj$4Z2_bav(Bn-LLg?P1 zCzvLL(7i)XG))MhdxxH6nh-+w4jo~d5JLA39ch{n20gA@JJ~cLgznZ(F--`eyR}nI z6GG^2?KIPb5V~7C-83PD?$*vQO$ed8wKGiR51J-~(B0aHOcO%rZtcUS2_ba1 z_7T&B5V~9YsA)n7-K~AhG$DlU);?~U5JGor7n>%8LC@&c#+W9A(B0Zt(}WPZTl<7* zLI~ZhebO``gznZpWttE|cWa+EO$ed8wa=I)gwWmEC8h}>bhmb?X+j9ytzBlC5N7GK zNB0iB+%zGC?j3rCX+j9yJM>D^gb=!S=vAf(A$0H1t4$L^=-#2%m?nhKy+g;DCWO$v zL&uvYgwVZ1KWmy0LiY~6)-)judVII`In#s?x?B6aX+j9ytzBoD5JGor*PAAU(B0Y> zOcO%rZtaVv2_ba1_9fGV5V~9YvS~sH-K~AaG$DlU)^0FO2!o#3t=(vv5JGorH<>1c z(B0b2rU@Z*w|0wZLI~Zh-D;W;LU(JonI?qL-P-M@2_ba1c86&~2;HsSX_^p1cWZZ< zCWJvx>DIn#nh-*FYj>L_gwWmEJ*EjEbhq|3(}WPZTl>0cLI~ZheZw>%gznb9X_^p1 zcWd{WCWO%4+62>t5V~8NXqpfPJ+oW;mT5u=-L2hcnh-*FYu`3a2%)>R@0ccp(B0a1 zO%p=sZtZ)f2_ba1_I=ZY5V~9YfoVbr-L3u5G$DlU)_!D~5C%QEcj%8z6GG_Tp+7NA z2%&q2{?s%fgzg=BziC1U-8=LF(}WPZcj$wr2_bav(4UzmgwVZ1e{Px(LiY~+g=sGgwWmEpG^}&=x*&VrU@Z*xAwScLKyUvZtV%vgb=!0 zd(t!^gznb!gwWmE-%S%j z=x*&FrU_xtGrP5ankIzM-P*IJ2_ba1_MB-#2;HqcZ<-K7cWW=0CWO%4+BDOI5V~7? z(KI21?$-Wgnh-*FYcH85gwWmEbkl?|OTRd}cj(Ke2_bav&{s?oLg?P1GfWdg=-#0- zO%p=s-l4NCVBi0K^<_i%4xQaJA%yN7`Wn-O5W08h9Ht2&bnnpDnkIzMy+dDTnh*v( ze$sy~n4fdbG4Jb56GG^2?G2_0A#}I)M$?24x?6jbX+j7+ofH4(_rK5mX48Zax?6jT zX+j9yt-aMWA%yPM-e#H*LU(I(nkIzM-P+qt6T+Y;PO3Y9hiO6x-L1`Knh-*FYjc|> zgwWmEJ53Wp=;?LtcbO)H(B0a*O%p=sZtXp$2_ba1HjimS2;HsCYnl*3cWd*RCWJvx znN)W^ziC1U-K{NPnh-*FYYUntgwWmELZ%5J^z=IS!lnr!bhoyMX+j9ytu1Pr5JGor zigfQsw-P*dQ2_ba1ww`H12;Hr%Z<-K7cWWD%CWO%4+J>eHA#}I4k!eB*-K}kG znh-*FYnzxRgwWmErltuYbhoydX+jwE#BObK(}WPZTie1kA%yPMwlqx$p}V!MOcO%r zZf$GRgb=!0+r~5@gznb1HBAViyS4316GG^2ZF|#%5V~92!89QZdP=vpqiI42-L36p znh-*FYdf1JgwWmEE~W_~bhoyvX+j9yt?g!-5JGoryPGD2(B0Y|rU@Z*x3;HgLI~Zh z?PZz}20gP|+uJlDgznb%F--`eyS05y6GG^2Z9mh55V~92-!vhF?$!=4O$ed8wF6BP zLg;SoAk%~px?4NgG$DlU)($aE2($D{Crzq7cBpAW2;DpMFw=w(x_9W|rU@Z*@6aPm z6GG_eb?zfg6GG_Tp+}h}gwVZ1k2XyRp?ilOW10{`_YOVQG$DlU9eSK;LKyVLlj_co zH%$nkyR{Qc6GG^2?L^ar5V~7C$uuE^o?ho3VVV#^cWWa}6GG^2?PSx05V~7C#WW#= z?$%Bdr@*CWO%4+Gx{+5V~8t z&@>^0?$$0cO$ec<*SX(onh-*FYwt5n2%)>R_nRh!(B0YxOcO%rZta7n2_ba1_94@R zFzBZz)t!IXG$DlU);?mI5JGorA2m$~p}Vz@nI?qL)9c(HH%$nkyS0l=6GG^2ZH#F` z2;HrXHBAViyR}c4CWO%4+9ypD!k|y;9r`KLgb=!S=%-B+Lg?P1pD|4cp?im3Vww;_ z_YS?(G$DlU9eSB*LI~YE^m5aL5W08h6{ZOxbnnnBO%p=s-l12SCWJv>+^t=0nh-*F zYuA`2gwWmEIMaj>x?3A>nh-*FYo9eu2%)>RYfTeE=x*(ErU@Z*xAu9{gb=!0yUsKr zgzna^H%$nGzNuULf@wks-K~AmG$DlU*1lw#5JGorUp7q$p}V!Om?nhK-P#SN2_ba1 zcB5%R2;HsSWSS5{cWXDBCWO%4+AXFDVbJ$?Yqy#vgwWmEZKeq!bhmc9X+j9yt=(ao z5JGorcbX=I(B0ZyrU@Z*xAs-jgb=!0yW2D&gznbvF--`eyS1;GCWJvh-K~AyG$DlU z*1lny5JGor-!x4Kp}VzvO%p=sZf$~TLI~ZhO*Bmip}VzjnI?qL-P(Po2_ba1_HEOI z5V~9Yj%h-erOzEPsrJ}+O%p=s-l5+!O$ecThkoBQA%yN7`UBI15PEu@`-i3pA$0H1 zADJeE(7i){Y?=^4_YVDuX+j9yJM^cf2_bav(ECjj!l1`YsylzcG$DlU)*duX2%)>R zpP43v(B0b4O%p=s>2>a3m?nhK-P$ir6GG^2?N_D=A#}I)Ytw`fx?B5=X+j9yt^L+C zAq@KFNpgwWmEv!)3lbhq}L zX+j9ytvzp=5C%P>cjybI2_bav&}pU#A$0H17flmF=-#3KGEE4fdxyScnh-+w4xMhA z5JLA3ec3c2gzg>sifKX!-8*!KX+j9yJ9MULLKyUzZf&*&|MO3Ni<$rPAcWA}+U%wY zA#}I)8qup}V!$nH=8De(B0ZwOcO%rZtbn62_ba1_BPXm5V~8N(=;K3?$+LJnh-*FYws{k z2%)>Rxl9v6=x%Lp(}WPZTYINzLKyS|-P*fM6GG^2?cJscA#}I)9@B&nx?7vaG$DlU z*5)-$2%)>R`Aic+=x%L((}WPZTU)?1A%yPM7Bo!=p}Vz(OcTPOpXt^XHcbejyR}73 z6GG^2ZBf&N5V~7i%rqf{?$#DJO$ed8wIxgwLg;R7Nz;T7x?5YyG$DlU)|NI+2%)>R zWlR&oEdA1mNwvq8HBAVidxtJ(nh-+w4qe_fA%yN7x`Js!2tB>dy`pJC2;Dn$CDViu zx_9WxrU@Z*@6c6D6GG_Tp{trEgwVZ1S2IlrgC5hZt!|nSLU(Ixm?nhK-P)R_2_ba1 zww7r^2;Hr%ZJH25cWdjICWO%4+PbC*A#}I4o@qh|-L0)}nh-*FYa5s*ghAijt!-$U z5JGor8<{4A(B0a`rU@Z*x3-CCLI~ZhZEBhjLU(JMnI?qL-P-1+2_ba1wuNaz2;Hr1 zX_^p1cWYajCWJvh(5-E4nh-*FYulJ6gwWmEwx$UobhoyhX+j9yt!;0b5JGorJD4Vf z(B0aOrU@Z*x3-gMLI~Zh?QEJ5LU(Jsm?nflKhv%4YMKy2cWb+uCWO%4+U}+aA#}I4 zhiO6x-L36unh-*FYkQd{gwWmE-lhp5bhoyTX+j9yt?g@?5JGor`3&$p?ilOYMKy2_YOVGG$DlU z9eTKFLI~YE^a#_0Fz7Me+L5LSA#}HPlxac;-K`yMnh-*FYsZ)-gwWmEv8D+jbhmb# zX+j9ytsQTg5JGorCzvLL(B0aJrU@Z*w|0_gLKyVT-P#D#gb=!08)=#lLU(H?nR511x|(B0YxO%p=sZtX*+ z2_ba1_F>b65V~9Yh-pFy-K~ApG$DlU);?yM5N7FfNA?c=xM@NN-8=MR(}WPZcjy?? zgb=!S=vdQ)5W08hCrlGU=-#29G))Mhdxw6?G$DlU9r|h0gb=!S=x0n5Lg?P1mzXAm zL67a$E;UUEp}V!qOcO%rZtZf@gb=!0yTUXfgzna^G))MhyS1xK6GG^2?P}A65V~8t z#xx;>?$*YcCWO%4+IZ81Fz8#lwa=O+gwWmEwWbLnbhq|7(}WPZTl>6eLI~ZhU1ypQ zLU(J|nou&yPbhmbwX+j9yt$o!rA%yPM?lw&bp}VzvOcO%rZtZKP2_ba1_I1;Q5V~9Y zhG{|w-K~AoG$DlU*6uY;2!kHkJ9L6+LI~YEbfRfO2;DpMTc!yibnnpnOcO%r-l5+% zO$ecThknO2A%yN7`d!n65W08h_e>K)=-#2yKx?6kDG$DlU)_!K15JGor zKQ~PXgTAF(`-N#j2;Hsy(ljB2?$&-~nh-*FYri&42%)>R->c`d(}WPZcj!M%6GG_Tq5m{Z2%&q2K5Lo~LiY}R&NLx}?j8EPX+j9y zJM;z9gb=!S=rq%W5W08hi>3)7bnnoAnI?omkL}i8GEE4fyS3@22_ba1_OfY02;Hr{ zVww;_cWX0D6GG^2ZKi2L2;HsCwvc`Q`_-2X-L1`Tnh-*FYp*d)2%)>RIZPA6pl|8c zUTc~VLU(JgGffDgyS3MwCWO%4+8az0Lg;Sojiw19bhq{<(}WPZTYIxRc}x?+pr>|g^O`1v(B0a6rU@Z*w>H0N zLI~ZhEnu1uLU(HmnkIzM-P%H?2_ba1wyq-jD3-8*zC(}WPZcj(fl2_bav&}B>$Lg?P1%bF&H(7i*K zGffDgdxtJ>nh-+w4qd@CAq;wKx3;2bLI~Zhtz?=ILU(H`nzXEn(B0a4rU@Z*x3<1%LI~ZhZD5)ZLU(H$nkIzM-P%T`2_ba1wy|kK2;Hr1Vww;J z{b0AYscAw8-K}kAnh-*FYnz)UgwWmE7N!XybhoypX+j9yt!-tR5JGorTbm|?(B0ZL zrU@Z*x3;ZmLI~ZhZD*Pg20gV~+uk%GgznaMFii-dyR{un6GG^2Z70)&5V~92*)$=9 z?$&lOO$ed8wOvgULg;R7H`9a=x?9`bG$DlU*7h(>2!p<$cj%s`2_bav(7j9(Lg?P1 zdz&VN(7i+VF--`edx!38nh-+w4&Bc*A%yN7y1!{c2;DpM0MmpJx_9V-rU@Z*@6dxx z6T+ac>DCT5O$ed8wL?r3Lg;SoP}77Ex?4NUG$DlU)($sK2%)>RBTN%Q=x*&u(}WPZ zTRX}$A%yPMjy6pQp}VzXOcTPO@9ox(HBAViyS3v?6GG^2?Re9K5V~7C!89R+?$%B; zO$ed8wUbN}Lg;R7glR$u-K~u@O$ed8wUbQ~Lg;So6w`z-=!d$sQ%w^>=x*&a(}WPZ zTRYt}A%yPM&M-{~p}Vy+O%p=sZtX17gb=!0JKHoNgznbPF--`eyR~yo6GG^2?L5s zQPYGFx_9WuOcO%r-k~2iO$ecThhA)&5JLA39b=jhLiY|GYnl)SeNDIa3DblSx?B6C zX+j9yt$oTgA%yPMK5d#1LU(JQF--`eyR}P96GG^2?NZZ(5V~8t%rqf{?$$0hO$ed8 zwJS^$!l3W%)~+;72%)>Rt4tF@=x*(5(}WPZTf4?IA%yPM#+fFB(B0a2(}WPZTl=hO zLI~ZhU2B>ULU(JQGffDgyS2}oCWJvh)U91-nh-*FYuB45gwWmE7fcgE=x*(crU@Z* zxArB|gb=!0`?6_52;HrH#WW#=?$&NFO$ed8wHr+nLg;SoCews4=vTV6n@tl!=x*&6 z(}WPZTf5aXA%yPMZZk~?p}V!)O%p=sZtV`!gb=!0yVEowgznbvGEE4fyS1;HCWO%4 z+TErJVU|93RPWGxOcO%r-l1PJO$ecThko5OA%yN7`VG^B5W08hH%${l=-#3CnkIzM zy+bFMCWO$vLnoRhgwVZ1zh#;bLiY~6&om(ndR({mZPSDhx?B5>X+j9yt$o)tA%yPM zzGs>cLU(K5H%$nkyR{#fCWO%4+7C?=Lg;SoN2UoObhq|n(}WPZTl2;HqcWSS5{cWaYP6GG^2ZHj3^81#&8?N6o&A#}I)uxUaF-K{-hnh-*F zYmb^HgwWmEW2Olqbhq|r(}WPZTlLg;So-KGg4bhq{% z(}WPZTbsu;A%yPM<~2K(eEX+j9yJ9Ht_ zgb=!S=)$H6A$0H1MNAVy=-#1=nkIzMy+ao>O$ecThc0fK5JLA3UBWaWgzg=>q-jD3 z-8*zC(}XbSaoyU|rU@Z*x3-LFLI~ZhEo+((LU(J+nI?qL-P-b|2_ba1wt{Iw2;Hr% zXqpg0cWWz|CWO%4+RCO0A#}I4ifKX^^n`A0RnvqJx?5Y#G$DlU)>b!72%)>RHB1vi z=x%LI(}WPZTU*OCA%yPM);3KDp}VzpOcO%rZf#xDgb=!0ThBBh40>|6w!UdX2;Hr1 zV44s@cWWD(CWO%4+D4`cA#}I4v1vjG-K}k6nh-*FYnz%TgwWmEW~K=tbhoy-X+j9y zt!-hN5C%P?Tien!A%yPMwlYl!p}V!MO%p=sZfzUWgb=!0+txH8gznb1GffDgyS432 z6GG^2Z3okY5V~92(KI21?$&lPO$dV?)jM=&(}WPZcjzvr2_bav&|OUvLg?P1yO}10 z(7i)H5V~7C*fb%8?$!=5O$ed8wL?u4 zLg;SoFw=xE=n380;id^8bhmbdX+j9ytsQBa5JGorN0}ys(B0b6rU@Z*w|0zaLI~Zh z9c!8pLU(J&nI?qL-P-Y{2_ba1c7ka_81&?B?L^ar5V~7C$uuE^?$$<_CWO%4+DOxc z5V~7C*)$=9?$%B*O$ed8wNp(KLg;SoG}D9-x?4NlG$DlU*3K|Z2!o!{t(|F_5JGor zXPG91(B0bErU@Z*w|0(cLI~Zhookv9LU(KDnI?qL-P-x42_ba1c7bU^2;HrXGEE4f zyS34#31OB#cXaR23r!P3=-#0hnI?qLy+hw?nh-+w4t<|#LI~YE^!=s@A$0H1511x| z(7i)HXqpg0_YVD#X+j9yJM_b*2_bav(2tlVgh7w*);?;Q5JGorA2Uq|p}Vz@n6e zLI~ZhU1ypQLU(J|n8=-#1UHBAVidxzd_nh-+w4!y@TA%yN7`Zd#p z5W08h*G&^b=-#2pA#}I)fN4Sq-K{-nnh*v( zrCa-%X+j9yt^M3IA%yPMeqovrLU(JwG))MhyR~1LCWO%4+OJI$Lg;SoH>L?8bhq|f z(}WPZTl<}9LI~Zh{oXVo40>j__6O615V~8NWSS5{cWZw%O$ed8wTDa-Lg;R7vS~sH z-K|YAO$ed8wLh6AgwWmE!=?!#bhq}1X+j9ytvza*5N7F@M)wYV%rqf{?j8DP(}WPZ zcj#YC6GG_Tp^uv;gwVZ1pD;}bp?iluX_^p1_YVE5X+j9yJM<~jgb=!S=-*5eLg?P1 zPn#x$L67g&o-s`bp}V!IrU@Z*xAu3_gb=!0`-f>l2;Hsy(=;K3?$(|)O$ed8wdYI| zLg;SodDDatx?6j}G$DlU)~1;zgh5a2)?PGC2%)>Rf0-tP(B0ZgrU@Z*w>I50A%yPM zUN%h#p}VzLOcO%rZf%BXLI~Zh%`{C2p}V!&7P0StzxuMFyS3R(6T+aUbZf6MO$ed8 zwK+@^Lg;SowWbLnbhq|8(}WPZTYJ4}LI~Zhy}>jggznbfXqpg0cWZAlO$ed8wKtn4 zgwWmETTBzepl5b#Z#7K_p}V!WnI?qL-P)X{2_ba1_IA^R5V~7?hiO6x-L1`Knh-*F zYjc|>gwWmEJ53Wp=x*&@rU@Z*xAtz+gfQsQQ~vWmP=3xi$Gq<`O$ecTht6Y~5JLA3 zo!2xWgzgyKx_9V;rU@Z*@6d%z6GG_Tp$nTP zgwVZ17cor;gC0Mn?tD?xgb=!0Tg)^egznZBH%$nkyR{`u6GG^jb?zli6GG^2Z7I`) z5V~7i+B6}A?$(wuO$ed8wPj5cLg;R7In#tN=!sM6&X+e$2%)>R6-*OC=x%LA(}WPZ zTU*IAA%vb;=U&+~A%yPMRxwQop}VzJO%p=sZf!Nwgb=!0TirAvgznbXFii-9o-(EG zd`;7Y5V~7i%QPW`?$*{eO$ed8wRKDrLg<-w?sZKQLg;R7J=25`x?5Y{G$DlU);2Ir z2%)>R4NVh5=x%Kz(}XbSnN#Y{H#SWOp}VzBOcO%rZf#T3gb=!0+srf}gq~UF-rO`H zgznb1Fii-dyR|J%6GG^2Z7b7+5V~92+B6}A?$)+3O$f8}%O~{?-PSZAgzg=>ooPY{ z-8*!9(}WPZcjykL2_bav&>c+^Lg?P1JDDbg(7i)A%yN7 zx|?Z281%*6+U}+aA#}I4hiO6x-L36unh-*FYkQd{gwWmE-lhp5bhoyTX+j9yt?g@? z5JGor`vS~sH-L0Ksnh-*FYp0qfgwWmEX{HGwbhmc8X+j9yt({?-5JGorXPPF2 z(B0ZurU@Z*w|2H^LI~Zhonx9127S_$+GFRMCWO$vL(el!2%&q2o^P5ELiY~6z%(I* zo>}J}WttE|_YNIxnh-+w4!zJcA%yN7dXZ^D2;DpMy`~8vbnnpjnI?omUp%Gm{Qag0 zA#}I)0n>yKx?B68X+j9yt$oNeA%vb;=l-y1LI~ZheZ({&gznZpYMKy2cWWOrO$ed8 zwU3)7gwWmE#ij{i&^Jw~J0D}35JGorV@(r6=x*&3rU@Z*xAsZXgb;dWo%>U!2_ba1 z_G#0E5V~9YjA=p$-K||>nh-*FYnPfPgwWmEWu^&X(DzTNJHOmCA%yPMt}smqp}Vy! zO%p=sZtW`5gb;dWo%?Fjgb=!0yT&vjgznbHnI?qL-P(B5gb=!0`>bg~2;Hq+Ynl)S z{q&T&^Us+kgwWmE=S>qr=x*&g(}WPZTf5#gA%vb;=l+6eLI~ZhebF=_gznb9WSS5{ zcWYlZO$ed8wXc{agwWmE4WDIn#nh-*F zYj>L_gwWmEJ*EjEbhq|3(}WPZTl>0cLI~ZheZw>%gznb9X_^p1cWd{WCWO%4+62>t z5V~8NXqpfPeRH?=Ez^V$x?8)?G$DlU*1m0;5JGor-!V-Hp}V#3nkIzM-P-p|6GG^2 z?fa$)A#}I)1Ji^Mx?B69X+j9yt^LR}Aq@I~ZtcgW2_ba1_7l^D5V~9YscAw8-L2hk znh-*FYY&(vgwWmEgQf`~bhq|1(}WPZTl=|bLI~Zh{lYXMgznaUX_^oQ{Y?$)N7CWO%4+TTqRLg;SoAEpUm z&^J%1JO8I?LI~ZhJ!_f}LU(J=nI?qL-P-e}2_f{%I`<2v2_ba1HqA64gznZ}G))Mh zyS0CrCWO%4+DoPhA#}Gk-83N#`hh8R=P#QkgwWmEE2aq{bhkFcG$DlU)@GU}gwQkV z+_NqEpZ~PQ%>Q{1Lg;R7cGH9qx?6jVX+j9yt<7PY5JGoruQg2wp}V!$nI?omKQm>v z|9brUdy=m=O$ed8wKte1gwWmE8%+~J=x*&zre}ZkiO}8Jn@tl!=x*&TrU@Z*xAs=k zgb=!0dz)!O2;HsCX_^p1cWZAqO$f8}%OiS+zQZ&jgzg-8*z{(}WPZcj!A! z6GG_Tq3<$H2%&q2zS}e*gzg>s9@B&nx_9V2rU@Z*@6dTo6GG_Tq4Sw0gh7w#*5)@& z2%)>R1xyn{=x%L6(}WPZTU*F9A%yPM7B)=?p}Vz3OcO%rZf#N1gb=!0Tg)^egznZB zH%$nkyR{`u6T+Zx?$(wxO$ed8wWUlGLg;R7Y14!dx?5YuG$DlU)|NF*2%)>RJy>6wdG9{Lg;R71=EBOx?5Y(G$DlU)>bl22!np0TU*&QA%yPMRxwQop}VzJO%p=s zZf!Nwgb=!0TirAvgznbXFii-dyR|h<6GG^2Z7tJ;5V~7i+cY7B?$*{ZO$dX2rdwOr zG$DlU*48sk2%)>R^-U8(=x%KT(}WPZTiehyA%yPMHZn~Jp}Vz>O%p=sZfz6Ogb=!0 z+tf56gznZhGffDC9x-LM|9bp;hi-0~5JLA3-NG~>gr53eZ#~<;-+N2bgb;dK>8(r? zLg<;Lw>C`(p?imJW10{`_YU3GG$DlU9lD+A&0c*XbnnpZO%p=s-l02~CWJwc>DG2M zO$ed8wVg~8Lg;R7XVZibx?9`DG$DlU)^;^b2%)>R-Aofg=x%Ly(}WPZTie4lA%yPM z_B2fhp}V!cOcTPOZ|>IiHcbejyS05x6GG^2ZC}%b5V~92&om)~?$-7RLrfFGpdaYg4mC{(p}V!iOcO%rZtZZ>gb=!0 zJHj*}gznakG))MhyS1ZC6GG^2?P$}45V~7C#xx;>?$(YqO$ed8wc|`5_UaRZex_SH z-ZUYE?$%B)O$ed8wG&MfLg;SoB-4Ztx?3Aznh-*FYa>k)Lg;SoWYdHYx?4NNG$DlU z)=o7|2%)>R(@Yb>EPejSNwfXeRYfKYD=x%MCX+j9yt&KNL2%)>R&zdHL(B0a#rU@Z*xAr;Hgb=!0`@CsF z2;Hq+XPOW~cWc+1CWJwcoHE;gJ^uaa{tKoFA@t+_h5v6Ge9<%^gq~XZOQs1S^t94n zHht}@PlTRX`YWahA$0H18%z^I=-#0>nkIzMy+dy@O$ecThu&$0 zcB^SZ2;HsSW||N}cWbwsCWO%4+8w3|A#}HPr)fe6-L2hanh-*FYhN`@2%)>RyG;{9 z=x*&E(}WPZTl<=6LKyTd-P+ep6GG^2?Hi^EA#}I)P1A%Bx?8)~G$DlU)+U%HgwWmE zMAL*2x?B5}X+j9yt=(su5JGor-!@GMp}V#3m?nflKiI8(*EAu7?$*9%nh-*FYu`6b z2%)>RADAYD(B0Y(O%p=sZtX{=?|b!$(B0aPO%p=sZtW+g2_ba1_EXb@5V~8t-!vf% zdTO`!fN4Sq-K{-nnh-*FYdRpPMFx(B0ZEOcO%rZta(*2_ba1_AAqb5V~9Y zwP`{K-L3t`G$DlU)_!Z65N7F@M^2jUzaIbobpJckgb@1C|HA*b4SsK$5JEpy`VXcF zA@sAQCz&RM(9=u*(KI21?j8D&X+j9yJ9M&XLI~YEbc$(02;DpMPo@bWbnnoIO%uYP z$98Lvm?nhK-P)t32_ba1_Lylx2;Hsy*)$=9?$-Wdnh-*FYmb{IgwWmE6Q&6vbhq}T z>4#r^B6PR*SJQ+Lx?6k7G$9Q7mTv8DrU@Z*xAwGYLI~ZhJ!6^>LU(IZO%p=sZtd@; z2_ba1_7Bs95V~9Yr)fe6-K{-qnh-*FYtNY`gwWmE^QH-5&<}QNFPJ8T(B0ZJ(}WPZ zTYJ$oA%yPM{$-jFLU(H~nI?qL-P&~1gb=!0d)YK0gznZ}F--`eyR{jn2_ba1Hq$gA z40>v}Hrrye{r^XQ|NGUK4c)EHZkiB6cWbXPO$ed8wK+@^Lg;SowWbLnbhq|8(}WPZ zTYJ4}LI~Zhy}>jggznbfXqpg0cWZAlO$dV?IpsfL@$=uG?%!;h5JLA3eT!*A2;DpM zt)>Yf^fdnF|NQ>Rcbg`J(B0a5OcO%rZfzdZgb=!0o7XfUgznbnGffDg zyS4dE6GG^2Z2{AS5V~7i&@>^0?$#DEO$dX&rCVFrG$DlU))p~M2%)>RMNJbz=x%K> z(}WPZTU*>TA%yPMmM~2Sp}VyuO%p=sZfz;kgb=!0TiP@sgznasF--`Aez03x)-)l6 z?$(wwO$ed8wdG9{Lg;R71=EBOx?5Y(G$DlU)>bl22%)>Rl}!^u=x%Kl(}WPZTU*sM zA%yPMRx?cqgPz*0t!|nSLU(Ixm?nhK-P)R_2_ba1ww7r^2;Hr%ZJH25cWdjICWO%4 z+PbC*A#}I4o@qh|-L0)}nh-*FYa5s*gh5}>J9IRolO%$=x%Kn(}XbSd%Lw=O%p=sZf!Tygb=!0+ubxFgznb%Fii-dyR|({ z6GG^2Z7=x*%*(}WPZ zTRYG+A%yPM4l+#$p}Vz%O%p=sZtW1$gb=!0JJd8GgznZ3GffDgyS2kj6GG^2?FiF^ zFz8phwIfXvLg;SoDAR-xx?4NiG$DlU){Zev2%)>RV@(r6=x*&e(}WPZTRYw~A%yPM zPB2Xfp}VycO%p=sZtWz~gfQp}dWViMO$ecThmJH&2%&q2o@|;BLiY|m#WW#=?j3rn zX+j7+W%mEw2B(=OgwT(dKHW4Sgzg=BhG{|w-8=M5(}WOuX8q-7nI?omU(>CfZJH25 zcWdXECWO%4+PS6)A#}HPo@qh|-L0K(nh-*FYZsU%gwWmEDAR-xx?3AA#}I)LDPf~x?B5@X+j9y zt$o-uA%yPMK4O{>LU(H)HBAViyS0y*CWJvh)UAEoG$DlU)-ERF{TM2bhkFv zG$DlU);?jH5JGorpEOMfp}VzDnI?qL-P)&36GG^2?K7qcA#}HPiD^O@^ef%krKSlX zbhmbyX+j9ytzB-K5JGorSC}S*(B0aVrU@Z*w|13jLI~ZhU2U2WLU(J|m?nhK-P$!9gb=!S=;urmLg?P1pEpeip?im3XPOW~Pn!LI zx54$M2_f{OrN3aB5JLA3{i10?2>oom_m@l)Lg?wGzigTi20gA@`-*8o2;HsSV44s@ zcWXDACWO%4+D)bjA#}HPvuQ#I-L2hXnh-*FYqy#vgwWmEZKeq!bhmc9X+j9yt=(ao z5C%P=Tf5UVA%yPM?lMgXp}V!OnkIzM-P+xz2_ba1c8_U72;HrH%`_o|?$*9;nh-*F zYu_+U2%)>RZ<;2A(B0a-rU_xtle@JErU@Z*w>HrRpPD9w(B0borU@Z*xAuT(LI~ZhJ!qN`LU(IFGffDgyS1O2 zCWJwc>K*zE(}WPZcjzxo6GG_Tp}#Us2%&q2{@OGlgzg>s8`FdkddlqoyA6J8nh-)i zUix>Y2_f{<(!V!N2%)Ey{)1^k2tBj(B-4a2=yBcJA59ZN=x*&H(}WPZTbpc}5JGor zQ%n;==x*&#rU@Z*xAw4ULI~ZhJz|;=LU(JAnkIzM-P&WO2_ba1_GiRznUh5(B0ZorU@Z*xAr&Fgb=!0d)hQ1gzna! zF--`eyS1sN31QHayS2ZYCWO%4+CNMaLg;SopQZ^Rbhq}bX+j9ytvzR&5JGor&zmNM z(B0Y#rU@Z*w>Hf*A%yPMUNlVzp}VzznI?om&*;`(GEE4fyS3@22_ba1_OfY02;Hr{ zVww;_cWX0D6GG^2ZKi2L2;HsCw)lTO|MmC3Uwzro-P-J?2_ba1_8QZK5V~8N!!#kx z(l3wd9r{|+gb=!S=<7@qLg?P1uQyEyp?inE!89R+?j8C@(}WOu((M1c4c=s$5JLA3 zeY0so2;DpMEv5+}^t1JsztuD$gq~jdZKerf(BrzbIZYEn=x*)prU@Z*xAqRxgb=!0 zo69sIgznbnHcbejyR~Lg;So-KGg4bhq{%(}WPZTbsu;Aq;v#w>Gb7 zLI~Zh&1aerLU(KPnRB~24T=x%K((}WPZTU**RA%yPMmN88T zp}VzZO%p=sZf!Z!gb=!0Ti!GwgznZ>Fii-9p3$wXXqpg0cWWz|CWO%4+RCO0A#}I4 zifKX!-L0)^nh-*FYpaZS=HbhoyKX+j9yt*vRA5JGorYndj5L67Pky0&RT z2;Dn$9n*vmx_9WhrU@Z*@6h#36GG_Tq3fF_gwVZ1H!w{Ip?imJXqpg0_YU32G$DlU z9lEh;LI~YEbQ9BrFz9jJ+NP!nA#}I4nQ1}@-K}kInh-*FYg?EmgwWmEmZk|IbhoyZ zX+j9yt!-_Z5JGor+n6SV(B0a$rU@Z*x3-;WLKyUfZf$$hgb=!0+rcy;gznaMG))Mh zyS1H66GG^2ZD-Sj5V~92#WW#=?$&lSO$ed8wcSh;Lg;R7chiIrx?9`BG$9Ona<{gp zX+j9yt?gx+5JGordz&VN(B0ZTrU@Z*x3;foLI~Zh?Pr=0LU(KXnJY*fb%8?$!=5O$ed8wL?u4Lg;SoFw=w(x?4NkG$DlU){Zbu z2%)>RBTW-R=x*&O(}WPZTRYk`A%yPMjxkLLv-J6+dxsutnh-+w4n58^A%yN7dc0{u z2;DpM1k;2Nx_9V_rU@Z*@6eM>6GG_Tp(9KaLg?P1BTW-R=-#0xnsc$nh-*FYp0negwWmE>81%GbhmbfX+j9yt(|F_5JGorXPG91(B0bErU@Z*w|0(c zLI~Zhookv9LU(KDnI?omPwdvtH%$nkyR{2U6GG^2ZIo$32;HrXHcbejyR{2V6GG^2 z?IP2J5c>bob=Tou(An39>6Em)ySux)yE_590lNXa2|EE>48l&pE(BCmEWmEy_4kg? zSsVA-{xQycuX`QGXZD<#&vhL%-`Y9VnnMWdd~4@cYYri-^R1m%tvQ6S&bM}cwdN4C z9-nXRf@;kngmu2P3#&DU5Z3wDE~?fXLRjZpySQ3&2w|OX?UHKEA%u0lwM(lthY;5J z)-J2o970&>+Y<`A@=o^S2)YRw^pb-uMLsx^lY*7?@1 ztkxVtSm#^2s#T1m)gmu2PYpOMe5Z3wDuC3M_LRjZpyRKSu2w|OX?fPoX zA%u0lwHvB6hoE)O{0_abT5||to!_B1Rcj6*tn)kc=4#C$gmr$0_N~?&LRjZ_XuoRB zA%t~)hxV`5970&%^`$!euv&ttvQ6S&hOA$t2KuZ*7+TJTeap8wCixG5Z3wDhE{71 zA*}PQ4Xf51LRjZp8(ytBgs{%HHlkW{2w|OX?U`!LA!t24-`ca)nnMWdd~45DYYri- z^Q}E!tvQ6S&bRhLwdN4QI^Wuh)tW;H>wIf3Rcj6*tn;nCT&+2Tu+F#kO10(?!aCpD ztJRuA2--LVyIOMyVV&Qh?^J6JA*}N|^xbOBA!yw{ z-`acCnnMWdd~5GlYYri-^R0bQtvQ6S&bRhqwdN4QI^Wty)tW;H>wIftsx^lY*7?>x zuGSnvSm#?CTdg^Su+FzOu3B>lVV!Sne6{8fv>u*s?UQQFA%u0lwNI-xhY;5J);_D& z970&32w|OXZF05d5W+g& z+LUU|A%u0lwePDnhY;5J)_$ng970&S~T)tW;H>wIg! zRBH|)tn;n?TCF*Ru+F#kTeap8!aCpD@70<^2--LFv~cz7zyJNRVV&Qh zjjJ_>5Z3t}+N4@@2w|Pyp-rnbhY;5J9ono~a|mIb-=WQ`HHQ$^`5oG#T5||to!_A? zt2Kw9b^m;8t*SML5Z3wDT32fhA*}PQwW-z|LRjZpYg?^3gs{%HHdD3c5W+g&TDxk^ zA%u0lwf5DTLkR19YaOaJhY;5J);d;e4k4`bt#zu_9D>%v^R0ER)*M1u=Ubb(T5||t zoo{WHYRw^pb-uM(t2KuZ*7??EtJWMsSm#@ty;^e!VV!Snj%v*zgmu2PIjc2?5Z3wD z=Bm~lLRjZpo4ZD3;<`BX<-`c#@nnMWdd~5SnYYri-^R3NatvQ6S&bPKe zwdN4QI^WuY)tW;H>wIeqRcj6*tn;lcT&+2Tu+F!(NVVn=!aCpDqScy1(0Y2lwZ*D6 zhY;5J))ueU970&--K~qgrzaVV&QhYgTIxLF-=m*4C=l970%6NVm3jwdN4QI^Wtl)tW;H>wIhLR%;F+ ztn;m{SFJgOu+F!(ezoQh!aCpD2GyEF2A*}PQ?NzNggs{%Hws*DW5W+g&+CJ5q zLkR19Yx`Df4k4`bt?gH>IfSszx3+(^<`BX<-`WAynnMWdd}{|*YYsu{F8LjLP_^a| z!aBc053bf6LRjZ_=pogbLkR2q4n4G5a|mIb-=T+9YYri-^E>qLYRw^pb$*8)QLQ%p@~s_HtvQ6S&bQX3T5||too}scwdN4Q zI^SBiYRw^pb-uM@t2KuZ*7??stJWMsSm#?izFKn#VV!U7glf$pgmu2P6RS0c5Z3wD zPO8=%g4P4`t({!0IfSszw{}Xk<`BX<-`c6wnnMWdd~2swYYri-^R1m;tvQ6S&bM|( zwdN4QI^Wuv)tW;H>wIh7t2KuZ*7??YRBH|)tn;n)tkxWY)+6(+omH(lgs{%Hc6PPq z5W+g&+BwylLkR19Yv)#L4k4`bt({k`IfSszw|0KD<`BX<-`WM$nnMWdd}|k0YYri- z^Q~P}tvQ6S&bM}PwdN4Co|JFxl4{K%gmu2PORF`95Z3wDF00lYLRjZp>s75egs{%H z*1KAB2w|OXtxvV)5W+g&+U3=nLkR19Ygbfj4k4`btzB8IIfSszw{}&v<`5dzJ-X(1 z=+)JlLkQ~$=^c7awdN4QI=@4&t=1euSm$@>b=8_f2nnMWdd~3HwIf>RBH|)tn;ni zS*udi?e1#LA%yjWbZhriYYri-^R3-mtvQ6S&bM}7wdN4QI^Wv; z)tW;H>wIeit2KuZ*7?>3Rcj6*tn;l6uGSnvSm#@NpjvYXVV!U7!D`JRXgw<5+C$Zv zLkQ~$>DC^u)*M1u=UaQET5||top0^YYRw^pb-uO7sx^lY*7?>RuhtwwSm#?CQmr|J zu+F#kM78D+!aCpDlhv9-2u+)}F4`970%6NVhh$T5||too{VewdN4Q zI^WvxYRw^pb-uL`)tW;H>wIg^RBH|)tn;lsTdg^Su+F#kT(#y9!aCpD^VOO|2--LVrCM_cVV&QhuU2agA*}N| z^tEcuA%t~)hrV8|IfSsz@6eIennMWd{0<#etvQ6S&hOCC)tW=lx_7>{H>x#<5Z3wD z-mKOfLRjZpd#hS=2w|OX?d@vKA%u0lwRfsDhY;5J*50kw970&5Z3wD##d_&A*}PQeNwGCgs{%H_Gz`|5W+g&+Go|8LkR19YZIz9hoJSS zd~2UqYYri-^R0bRtvQ6S&bRhuwdN4QI^WvFYRw^pb-uN)sx^lY*7?@HuGSnvSm#^& zrdo3dVV!U7+iJ}rgmu2P@2WM25Z3wDCRJ+=LF>u+)+SeL4k4`btxc)c970&CR za|mIbZ|#R_%^`$!zO^5#HHQ$^`PP1_)*M1u=Ue-^T5||top0@zYRw^pb-uMd!aBc08!hs`{}A)v|NGxB8`k+9+PGSC z2wL~fx7MUua|mHQA>CTjYRw^pb-uM`)tW;H>wIg?t2KuZ*7??2RBH|)tn;n4tkxVt zSm#@7RjoOMu+F#Ex>|DxVV!TSO||9_!aCnt+iJ}rXgw(3+Dz4&LkR19YwfBvhY;5J z*4kHV4k4`bt#zo@970&@8+<`BX<-`dR8nnMWdd~35* zYYri-^R3NVtvLj(N99|aty*&kVV!Sn_G--`gmu2PIjS{>5Z3wD=B(BnLRjZpo2y!L z2w|OXZSHE#A%u0lwRx&FhY;5J*5<9&970&)tW;H z>wIeqR%;F+tn;lcRINFLu+F!(aJA+T!aCpDBGsBh2GS!+x2tvQ6S&bPK^ zwdN4QI^Wt_)tW;H>wIf#S8EO-tn;m{Q>{6Ku+F!(ZnfqRv>udiZM|yEA%u0lwe_nt zhY;5J);6ft970&--KqpjvYXVV&Qh2UcqiA*}N|^q^|ZA%t~)haOz5IfSsz@6bc4 zHHQ$^`5k&_wdN4C?vroruxiaAgmu2P!>cui5Z3wDj;PigLRjZpJF;4H2w|OX?Wk(a zA%u0lwWF&whY;5J){d#x970&?Lk<`A?VoNw*eYRw^p zb-uOZsx^lY*7??suhtwwSm#?ip;~hYVV!U7#A?kUgmu2Pld3g`5Z3wDPOjD*LRjZp zJEdB42w|OX?bK?`A%u0lwbQCKhoJT7d~2syYYri-^R1mxtvQ6S&bM}EwdN4QI^SCN zYRw^pb-uM8)tW;H>wIfHt2KuZ*7?@Xs@5DrSm#?iyIOMyVV!U7oNCP>gmu2PbE`Fn zp!Jk|Yv)yK4k4`bt({-3IfSszw{}6b<`BX<-`a)MnnMWdd}|j~YYri-^Q~Q6tvQ6S z&bM|+wdN4QI^Wu*)tW;H>wIgMRcj6*tn;n)s@5EW*4^?uw0E`U5W+gYL;F-~4k4`b zJM{8u%^`$!eurLBtvQ6S&hOAGt2KuZ*7+TJRkh|2!aBc0uddb{LRjZ_=rz@vLkR2q z4!yQoa|mIb-=Wu4YYsu{KKa(JuhtwwSm#^2p;~hYVV!U7#%j$Wgmu2Po2oU35Z3wD zZm!lGLRjZp>szfkgs{%H)~{M~2w|OXt$(%V5W+g&+JI`!A%u0lwOgt+hoJS~d~3H> zYYri-^R3-htvQ6S&bM}ZwdN4QI^WtI)tW;H>wIf>R%;F+tn;niRjoOMu+F!3ceUma z!aCpDJ=K~+2YYri-^Q}EttvQ6S&bRhZwdN4QI^WvE)tW;H>wIgERBH|)tn;ls zTCF(*t*7K$d#qY>2w|OX?eS{OA%u0lwIS7-LkR19Yfn^b4k4`btvy+-IfSszxAs)E z<`BX<-`dmFnnMWdd}~9iHHQ$^`PPP2YYri-^Q{f9)*M2^dRn*q4joagIfSsz@6cze zHHQ$^`5pRfwdN4QI=@4otJWMsSm$@>^VOO|2ZRBH|)tn;mXUadKVu+F#kMYZM-!aCpDm(`j> z2d!aCntqeZJ<|NZZm4eNYsjjJ_>5Z3wDnpA5JA*}PQHLcbhLRjZpYgVl}gs{%H z*1TGC2wD%$x7MOsa|mIbZ>?pu<`BX<-&(6`%^`$!zO~lXnnMWdd~0p0HHQ$^`PSN2 zYYri-^R3NPtvQ6S&bQXCT5||too}suwdN4QI^SA{YRw^NJv!f7$7;wIf-S8EO-tn;nSQ>{6Ku+FzOZ?)zS!aCpD zeASvm2V%3^M2<`BX<-`Wb* znnMWdd}}LKYYri-^R2B^tvQ6S&bPL5wdN4QI^WtV)tW;H>wIggR%;F+tn;m{R;@XN zu+F!(dbQ>dv>uvoZH;QpA%u0lwKc0XhY;5J*4C=l970&2w|OXZO3ZOA%u0lwVkRphY;5J)^@Je970&?$w$@2FB3L(sZ!zO@6YHHQ$^`PL4s)*M1u z=UY3dT5||top0^nYRw^pb-uMjsx^lY*7?>Bt=1euSm#?itXgvjVV!U7@M_H=gmu2P zBdRrr5Z3wDj;z)kg4RRxtsPaZIfSszw{~>3<`BX<-`X+NnnMWdd~02*HHQ$^`PRBt zYYri-^R0EO)*M1u=UY3rT5||top0^9YRw^pb-uOZt2KuZ*7?>>sMZ{U)?@Rnomj0o zgs{%Hc2c$G5W+g&+R4?LLkR19Yo}Ce4k4`bt({t}IfSszw{}{!<`BX<-`eTbnnMWd zd~0V^YYri-^R1m(tvQ6S&bQXRT5||mPtCX1qgrzaVV!TSXSL=K!aCpDS=E|D2p?YRw^pb$*9lR;@XNu+Hz$ zUe%gI2T1m)gmu2PYpOMe5Z3wDuC3M_LRjZpyRKSu2w|OX?fPoXA%u0lwHvB6 zhY;5J)^4oU970&wIhdt2KuZ z*7?>3RBH|)tn;niQmr|Ju+F!3YqjPO!aCpDZPl7X23R%;F+tn;l6s@5DrSm#?CT&+0-t*7N%d!Sl#2w|OX?ZIlzA%u0lwTG%T zhY;5J)*i0b970&piA%t~)hdy1cIfSsz@6e&unnMWd{0<#ftvQ6S z&hOCS)tW;H>--KKQLQ&U@~u5ztvQ6S z&bRhLwdN4QI^Wuh)tW;H>wIf3Rcj6*tn;nCT&+2Tu+F#kO10(?!aCpDtJRuA2GL;a|mIbZ*6q7<`BX<-`X41nnMWdd~0u3 zYYri-^R2yAtvQ6S&bRhwIhPR%;F+tn;nCSFJgOu+F#kezoQh zv>uml?SpE~A%u0lwGXQ`hY;5J);_A%970&+@LkR19YhPDu4k4`bt$kCi zIfSszxAtwd<`5dz(|Y80=y%ncLkR2q4xLo3IfSsz@6gHBnnMWd{0^N`tvQ6S&hOCg zt2KuZ*7+U!L$&4*!aBc0f2`IVLRjZ_=ug#}LkR2q4*j`Wa|mIb-=V)$YYsu{e)-mZ zt=1euSm#^&ty*&kVV!U7_iD`{gmu2PKdLo{5Z3wD{;bvR@W2w|OX?eA*M zA%u0lwW-ybLkR19YtyPVhY;5J)}~i$4ngZ-`PLdOR{i?#f4^*4=UZ!BtvQ6S&bQX2 zT5||too}sawdN4QI^SBeYRw^pb-uOc)tW;H>wIf1sx^lY*7??2R%;F+tn;n4s@5Dr zSm#@7U9C9;t;gkCYg4T`gs{%H*0x%62w|OXZKi6?A%u0lwRY8-LkR19YwfEwhY;5J z);d&c4k4`bt#z!{970&wIgo zR%;F+tn;nSR;@XNu+FzOd$r~e!aCpD9Mzgb2Ags{%HHg~n= z5W+g&+C0^oLkR19Yx7oX4ngZ4`5ii6wdN4QI=@5buhtwwSm$@>0@a#B2wIg=S8EO-tn;m{P^~$Hu+F!(VzuTFv>ujkZKZ0>A%u0lwUw(ihY;5J z)>f(3970&HHQ$^`PSB`)*M1u=UZE|T5||too{We zYRw^pb-uN=t2Kw9^|*X%>r`tFA*}PQty`@*gs{%HwqCX75W+g&+WOU+LkR19Ya3K+ z4k4`bt!-GXIfSszx3*EW<`BX<-`d92nnMWdd~2IjYYri-^Q~=KtvLj(r{!DQtXgvj zVV!Sn^J>i@gmu2PEvhw#5Z3wDwyf41LRjZp+p1b~2w|OXZR={yA%u0lwQZ_3hY;5J z*0!zI970&gBZhY;5J9lB$+<`BX--MgrCM_cVV&QhyH;xsA*}N|bhm2FA%t~)hwfgjIfSsz@6bJ}HHQ$^ z`5n4vwdN4C?w@aMuWHR9gmu2Py{k2c5Z3wD_Nmq!LRjZp+qYVC2w|OXZNF;GA%u0l zwf(C#hY;5J)()uF970&&4^R0EQ)*M1u=UeMmtvQ6S&bM}KwdN4QI^WuH)tW;H z>wIg+S8EO-tn;m%P^~$Hu+F!3VzuTF!aCpDN!6M|2ni1g)p% zTRXK{a|mIbZ|$^d%^`$!zO~bwIfxRcj6*tn;m%U9C9;t$XHo=sDGzLkR2q4n4P8a|mIb-=XJK zYYri-^E>qXYRw^pb$*9lP^~$Hu+Hz$3#&DU5Z3t}dQr9J5W+gYLocq@970&S+(X6!aCntuWHR9gmu2P-qo5z2GB970&wIh1S8EO-tn;niP^~$Hu+F!3W3}cG!aCpDP1Tx12sPHggs{%H*1uYF2wIQNw>F?!a|mIbZ|#<9%^`$!zO`GcHHQ$^`POc$ z)*M1u=UcnIT5||top0@qYRw^pb-uMbt2KuZ*7?@%s@5DrSm#^2yIOMyVV!U7o@&h@ zXgxjO+P&49LkR19Yxh-a4k4`bt=(U(IfSszw>Gd^a|mIbZ*5Su<`BX<-`e16%^`$! zzO@IcHHQ$^`PLq+)*M1u=UaQIT5||top0^oYRw@utf%$N@6bo8HHQ$^`5pRbwdN4Q zI=@37tJWMsSm$@>--KKTCF(*t^4O&8&<73gs{%HHoRJM2w|OXZA7)^5W+g&+B4OfLkR19 zYtL3|4k4`btvy$*IfSszxAuIs<`BX<-`We+nnMWdd}}XOYYri-^R2y9tvLj(hv!>+ zxmt4wVV!U7m1@l)gmu2PSF1IL5Z3wDUaQs|LRjZpd%aq72w|OXZDh6P5W+g&+Nf&H zA%u0lwb9j@LkR19Yj0F*4k4`bt-V>TIRvf8=UaQLT5||top0^!YRw^pb-uNCsx^lY z*7?@nt=1euSm#@NuUc~mVV!U7{c6o2gmu2P52`hX5Z3wDKCIRpLRjZp`>0xT2w|OX zZA`W15VW42Z|&o1%^`$!zO}K{nnMWdd~4&XHHQ$^`PRl)YYri-^R0bStvQ6S&bRhy zwdN4QI^Wu7)tW;H>wIeysx^lY*7?>xuhtwwSm#^&qFQqZTKCNF&@ZbshY;5J9XhdE za|mIb-=SYsYYri-^E>qGYRw^pb$*9_Q>{6Ku+Hz$Z>u$j5Z3t}`dzi=5W+gYLnl>h z4k4`bJ9Kij<`BXwIf}S8EO-tn;l+t=1euSm#@tR;@XNu+FzOy;^e!VV!TS z(c;yw|Ni&OhIPKR#?_ib2#*uLo; z&8szs5Z3wDT2yNeA*}PQwXD`0LRjZpYgMf|gs{%H*1B4A2w|OXtxdJ&5W+g&TH9*P zA%u0lwVA3lhY;5J*4kBT4ngbb`PSN3YYri-Cvs)~`~5$+)}dN+2w|OXtz)(35W+g& zTBmBwA%u0lwa(R=LkR19Ycp4C4k4`bt<6%cIfSszw>E3F<`BX<-`Z@|nnMWdd~35; zYYyRm>y8834CyjvwHeN(ebd?a*G(Hu|M$06|9;f;pWk=<_n-d*8#jCmY~Aq546sSV z$G|oXpUeRN?+@^Qzv&O%_J1Gz^T`abS;NPC#hDsDnE^I$_!!u(;gcC)i-wPZ?HfLs z0k&-T7}%lVlNq3@0crQ2KN(d6cJg0Q)qtHnR5jqt9;zB}77tYoIID-M2IQdr^JlGU zz}fv*R5jon9;zB}P7hTLIG2a22AtbNRRhlBp{fDr^-$G-^LeOh!1+B?HQ)jssv2-X z4^<7gkcX-UT-ZZZ11{pBssaD~iw*tvJB6wN|NVcZ|Ands{P(-)f8hcR|Bir5G<-6{ zHvm-wF6p7F0hjVn)qqQTsA|AvJXAH{vL31$a5)cE4Y<6Ass>!aLsbK==%K0sSMpHR zfGc~bYQR-IR5jqL9;zCU{{jBb_eWI&uI|60ssY#VP}P8IdZ=o^wLDZc;MyLl8gLyC zRSmeVhpGl#&qGxMuJ56$0XOha)qop%sA|BCJXAH{#vZB~a1#$z4Y;X?ss`N5LsbKA z?%@Uv9|N~&_+*CfkE#aT(nD1PZsnn>0k`&0)qvZ0sA|A%JybQ|b{?u4aC;9`4Y-4c zss`NALsbLrL?CGJZ0nhSK)qrPvsA|A-JXAH{xgM$-@H`Jy z4S2qXss_BkLsbJ_=;2un9|JFH_+*CfkE#Z|*h5tVUgDvu0WbAX)qt0IsA|Ao9;zC! zw}+|*?Bk)T0WbGZ)qq!csA|9~JybQ|RUWDu@M;fL4S0=*ss_B)LsbJ_=b@?rulG>Z zfH!!kYQP&kR5jpD9;zDfW)D>j*w;f<1NQS!)qwpyR5joL4^<6#i-)QPywyWh1K#GL zssV5JP}P8Uc&KW?J3Ul2;9VXLX!sa-cf%($e1B9m;5{Cy8t`5ZRSkHbhpGm=-$PXc z4)jpffP*|#HQ-bo8t_>U zRSo!@hpGmA-a}ObzTly%0ble`)qpQ~IHKWW;L8o4%<%nD)qt;fsA|AhJybQ|YaXf^ z@O2MW4LH(6RRfOlP}P8=JybQ|8y>0}@J$a@4fvLass?=9LsbL5qUI1{~v|ssTUtP}P8AJybQ|I1g0~INn251AgM6ssTUs zP}P8+d8lf@2_C8%@N*AU4futJss{YhLsbJ#^zf60kAYt`d@{rLM^yuU?V+jxzwuDj zfZuwkYQXP2R5jov4^<5~*+W$WPVrFHfZuzlYQP^nR5jp_9;zDfCl6H(__K$q2K>cC zRRjL&p{fCY^H9}*zk8@^z&|`xHQ=8fsv7Vw4^<8Lw}+|*oa&*f0jGJWYQX6psv59S z!tLsbJV=Ao(q7xz%r zfJ=C&YQQBuR5jpI9;zB}X%AHmxQvIY23*!dRRb>Pp{fCw_fXY1McRbssVTRP}P8Yc&KW?Jv~%4;9ef88gOq9RSme0hpGnL z*F#kU?&qPZ0r&S%)qn?hsA|9iJybQ|K_03a@L&&B4S0x$ss=pNLsbJF=Ao(q5BE^j zfJb_^xHQ*^8sv7WA4^<6#nun?eJl#W81D@fbssYdRP}P9l zJybPd4-Zuh*waH*1D@rfssYdTP}P9vc&KW?b3Ifw;CUXZ8t{A%RSkH7hpGm=&_h)N zUgV*w0WbDY)qt0HsA|AVJybQ|Wge;;u$PCb2JG#jssa0WsA|B=JybQ|6&|V@@JbI= z4S1D@ss_B;LsbJ_S8t_gJRSkHThpGm= z+e1|Y-s7RF0q^xt)qwYTsA|CbJybQ|Ko3<7ILJd)0}l33)qoFpsA|9mJybQ|LmsLc z@L>;C4fu$Mss?=2LsbJl=Ao(qANNqzfI~b~HQ*B-sv7V~4^<8Ll!vMYeA+`*0}l02 z)qul1R5jpm4^<5~!b4R9KI5UP0iX3y)qu}=sA|CHJybQ|3m&Q(@I?<*4fv9Wss?=7 zLsbL5;-RVmU-eMcfUkL|YQWb$R5jp84^<5~%0pEHj`mR1fNyxHYQQ%=R5jpR9;zDf zZ4Xrq_>PCF27K2;RRg}~p{fDj_fXY$sC;13?E8t_LCRSo!) zhpGnr*+W$W{^Fsk0e|&S)quZwsA|C9JybQ|A0Db2@J|m_4fvObss{YqLsbJ#^-$G- z(>zo);B*gF4cMrO|M|y;J+QHdss?Q0p{fC!dZ=o^W*({ssUSisA|Ag z9;zC!wTG$(Y~!J-0o!`0YQUL1R5f5b4^<7=-a}ObcJNTufE_(lHDD(XRSnqLLsbLL z?4hawXYo+gfU|n2YQWh%R5jr29;zB}4i8lgIH!lI2As=7RRhlLp{fDr@le%(^LnUi z!1+8>HQ@Xnsv2+s4^<7gpogjkT*yOJ11{{LssR`AP}P8odZ=o^#XM9s;Nl*t8gK~@ zRSmeLhpGl#%0pEHF72VJ0hjSm)qu--sA|CFJXAH{@*b)ha0L%l4Y;C*ss>!iLsbK= z?4hawSMgBQfUA0_YQWVzR5jr09;zB}4G&cfxTc4y23*TSRRgZ=p{fDb@le%(>w2ha z!1X*-HQ@Rlsv2+u4^<7gp@*sl+{i;!18(f0ssT6gP}P8&dZ=o^%{){!;N~8x8gL5_ zRSmeMhpGnL%0pEHZtbC}0k`o`)qvZ2sA|CNJXAH{_8zJla0d@n4Y;F+ss`N2LsbLr z?4hawckxiwfV+CAYQWt*R5jr49;zB}4-ZuhxTlAz2HeX-RRiwrp{fD*@le%(`+BHq z!2LW_HQ@dpsv7VB4^<6#pogjkJjg>;10L+5ssRu2P}P8kdZ=o^!#q?q;Nc#s8t@1Y zRSkHghpGlV%0pEH9_^v30gv%e)qq_*R5f5%4^<7=%|lfK9_yj10gv-g)qux)sA|9y zJXAH{i5{vN@FWja4S2GLss=p8LsbKw>Y=IuPxDaKfTw$?YQQr*R5jq49;zC!yN9X< z?BSuR0egC=YQVERR5jq)9;zDf91m3uc&>-420YJ0RRf;yp{fBd@KDu&7ka2_z>7Ro zHQ>b_sv7VT4^<6#sfVftyv##Y1NQPz)quS{R5f594^<6#xreF-yuw3O177K&ssXR^ zP}P7}d#Gx_Ydlmn;I$sA8t^&~RSkH(hpGm=!9!I8-sqvK0dMk9)qpp9sA|Bz9;zC! zpNFaj?C+tf0S9=fYQS4OR5jqO9;zDfHV;(|c)N$H2E4;VRRiAXp{fDz@=(=)cYCO6 zzD-sv7V<4^<6#zlW*@9O$8{0S9@gYQVuBsv7VC4^<8Lpogjke8@vp13v7b zssSJIP}P8sdZ=o^$2?Ru;Nu>u8gPh*ss?<*LsbJl>7l9tpYl-EfKPj7l9tM|r4fz|kJ68t@GdRSo#2hpGmA%R^NIzU`r^ z0pIaZ)qwAMsA|CXJXAH{`yQ$q@BYQV2NR5jq& z9;zDf8xK_t_^pSk2K>%LRRd1)P}P8wJybQ|6c1Gm_`Qd!2K>Q8RRjL$p{fCY@=(=) zKYOTZz+XI6HQ=uvsv7V&4^<8LyN9X<{KG?41ODlussaDW zp{fCw@KDu&OM0kkz@@7sv2+^4^<7gtcR)wT+TyP11|5OssUH!oLsbK=@1d#zH}Fu^fE#+KYQT*=R5jqn9;zB}6Ax7lxT%M#2Hea;RReDB zp{fD5@KDu&TY9K!z^yz~HQ?4Bsv2+`4^<7gt%s@x+|EN)18(o3ssVTKP}P7tdZ=o^ zojg=E;LaYZ8gLg6RSmeShpGnL%|lfK?(U(g0r&7w)qs0?sA|ByJXAH{-X5wNa32p< z4Y;p|ss`N8LsbLr@1d#z5AaacfCqZ0YQTd$R5jqi9;zDf5D!%ic&LY}20Y9|RRbRG zp{fCo@KDu&M|!Agz@t1=HQ>=6sv7VZ4^<7=#Y0sCcJ)xzfZaS)HQ=!xsv7V(4^<6# zyoag=Ji$X%1D@!issT^(P}P7Zd#Gx_Q#@2P;He&}8t^m^RSkH$hpGlV!$VaAp6Q{g z0lRysYQP>Isv5AThpGlV%R^NIp6#Kk0nhPJ)qv-EsA|CTJXAH{`5vko@B$B24S1o4 zss_BsLsbJ_?4hawFY!>-fR}oxYQW1pR5f5P4^<7=+e1|Y_VG~FfR}ryYQQTzR5jq0 z9;zDfDi2i+c(sSB2E4{YRRdn@p{fC|^H9}**L$dHz#BYNHQ!GRv@AFXAfcJZ-YQTXWsv2;RhpGk~?4hawAMjAsfDd}8YQTp) zR5jqk9;zDf5f4=j_^5}f27JszRRccmp{fCgc&KW?Cp=U&;FBJz8t^F(RSo#GhpGk~ z>Y=Iuhk2-Kz~LUM8gPV%ss?<!GRvpYu@FfX{oVYQPsfR5jp>9;zDfB@a~% z__Bwp27JXsRRg~2p{fC2^H9}*uY0I!z>yxR8gP_{ss$IN3v015WW!)qvl7sA|9;JXAH{j~=QT z@Fx#d4fwN%ss{YULsbL*>Y=IufAdh)fWLdFYQR4{R5jqA9;zDfFAr4>__v3u2At}l zssX2YsA|CJ9;zC!Q8W8vjj9H0?4hawn|P>dz@{Fm8nBs%ss?QCp{fB}c&KW?mL94a zu$70Z25jx2ssY=0sA|Br9;zB}CJ$8&*v>;$1Ge{2)qov5R5f5n4^<7=$wO5GcJ@%! zfHQljYQR}MR5jqN9;zB}HV;(|IJ<|c2Asn~RRhlHp{fDr@=(=)b9<<2zA+ zsv2-U4^<5~zlW*@T);zB11{*HssR`BP}P77d#Gx_MLbkB;G!O?8gMZWRSmefhpGl# z!b4R9F6p7F0hjVn)qqQTsA|AvJXAH{vL31$a5)cE4Y<6Ass>!aLsbK==%K0sSMpHR zfGc~bYQR-IR5jqL9;zB}H4jw{xVnd`23*5KRRgZ+p{fDb@=(=)YkR0_z;!%SHQ>4) zsv2-T4^<7gzK5y?+`vOs18(S{ssT6hP}P7Nd#Gx_O*~XJ;HDm`8gMfYRSmeghpGnL z!b4R9Zt0<_0k`r{)qq=jsA|A%JXAH{wjQb)a61oG4Y<9Bss`M_LsbLr=%K0sck)ox zfIEArYQSAQR5jqP9;zB}HxE?}xVwj{2He9#RRiwnp{fD*@=(=)dwZyAzG; zsv2-V4^<7gzlW*@JitR$10Lw1ssRu3P}P73d#Gx_Lp)S9;GrI>8t^a=RSkH!hpGlV z!b4R99_gW~0gv)f)qqEPsA|AtJXAGc7Y|hp*wsT-19tOJ)qux(sA|CDJXAH{@gAxg z@B|N44S1r5ss=pCLsbKw?4hawPw`OIfTwz>YQWPxR5jq~9;zDf3=dTec&3M{2JG&k zssVd=sA|BT9;zDfEDu!;c(#YC20X_@RRf;up{fDT^H9}*=X6u&;-z z2JGjdssa0ZsA|9g9;zDf77tYoc&mr12E5HfRRiAcp{fDz@KDu&cY3I5z`HzDHQ?PI zsv7Vf4^<6#uZOAzyw5{b1K#hUssRUjsA|AL9;zB}u!pJ!e859h13u`XssSJJP}P7B zd#Gx_M?6$D;G-U@8t^d>RSo#KhpGk~;-RVmpYTxCfKPg;YQU#FR5jq!9;zB}sE4Ws z9Oj{_0f&32YQPa5sv7Va4^<8LtcR)we9l8v13vGessUf{P}P7hdZ=o^mpoK8;L9GW z8t@elRSo#6hpGmA%|lfKzV4x_0Y`eMYQRw*sv2;#hpGmA!$VaAzUiT=0pIda)qrn% zsA|A>JXAH{yB?|<@I4Pz4fwu?ss{YPLsbKQ=%K0sKk`u3fMYyVHQ>h{sv2;thpGk~ z=b@?r$9t%1z)w6>HQ=Wnsv7V!4^<5~!9!I8e(s^F0l)B2)qr1msA|B89;zDfD-Tr- z__c?s2K>fDRRezOp{fDD^H9}*lRQ*4;A9U~4LHR^RRezSp{fCY@KDu&KYFNYz@I!+ zHQ>)4sv7VY4^<8LtB0xv{LMpE1OD!zssaD-P}P8cdZ=o^zdTem;NKpq8gQzIss^0q zp{fC=d#Gx_M$P@tKQ`=vjXhK~U=t5j4cOE}RRcEjP}P9VJybPd3lCKd*wRB)1Ge%| z)qt%%R5f554^<7=)Op{fBF_fXY)qrbwsA|A9JybQ|S{|wzaBUA&4Y-bnss>!wLsbK= z=b@?r*Y{A>fE#$IYQPOWR5jp69;zB}V-HmgxQU0V2Hey`RReD3p{fBl_fXY4^<7gjfbiR+}1-?18(P`ssXq6P}P7tc&KW?9X(Vv;7%T@8gOS1 zRSmd{hpGnL)k9SS?&hJY0eAOM)qs0=sA|AHJybQ|ULL9%aBmM)4Y-eoss`NGLsbLr z=b@?r_xDiMfCqS}YQO_MR5jp19;zDfU=LLdc!-Cp20YY5RRbR8p{fB7_fXY5;3*!e8t_yPRSkHWhpGlV-9uFap5dXY0nhYM)qveSR5f4^ z4^<7=(?eAQp5>vc0nheO)qv-CsA|A-JybQ|c^;}7@O%$d4S0cvss_B!LsbJ_4HfX{iTYQX0`R5joW9;zDfMGsXC_>zaJ27K8=RRg}_ zp{fC2^-$G-uX(6yz}G!gHQ-1ORSh`GLsbKg_E6P;Z+NI`z&AZqHQ-wwsv7WZ4^<8L zj)$rSeAh!&1HR{>ssZ2kP}P7Rc&KW?4?R>h;71;+8gPtsv7W14^<5~(L+@Oe&wO60l)T8 z)qvl4sA|A(JybQ|cOI%5aFU0r2Au4nssX2XsA|CPJybQ|4<4!-@JA0-4fvCXss{Yo zLsbL*;-RVmfAvt+fWLXDYQWz;R5joq9;zDfPY+cM_?L&O2K?JYRRd1-P}P9bJXAH{ zbPrVx*rgYQR<=sv5Ah zhpGl_!jLsbJV?V+jxm+?^5fXjNQYQW_@R5jr89;zB}1rJpXxT1%u23*NQRRgZ!GRvkMmH~fX92NYQPgbR5jp< z9;zDfBo9>$c(RA820X<>RRf;tp{fB-^H9}*r+cVsz%x8lHQ<>Zsv5AnhpGnb;i0Ml zdwQs9z_UD5HQ?DEsv7Vd4^<6#u7|1yJkLW_1D@}pssS(XP}P7JdZ=o^i#${{;Kd%Q z8t@ViRSkHlhpGm=%tKWJ_VQ5GfW19bHDDhPRSkH#hpGm=!b4R9Ug@E#0k85<)qq!f zsA|A#JXAH{wH~S(@H!7w4S2nWss_BlLsbLb=%K0sZ}L#pfH!-nYQVl8sv5ALhpGnb z@1d#z2Y9Gzz*{_2HQ=otsv7V%4^<6#yN9X8t?%RRSo!{hpGmA$U{{FKJ1~Y0Uz;D z)qszBsA|B+JXAH{;~uISaEOPh27JOpRRcchp{fC&@=(=)PkX3pz@Z+h8gQ70sslFRRfOkP}P7Rd#Gx_u^y@#aGZy#1|099 zssTUoP}P8+dZ=o^&pcE$-~7l9tCwi!Az^^=1HQ?7Csv7Vc z4^<8Lt%s@x{LVvF15WZ#)qs;dR5jof4^<8Ly@#p>{J}$21ODitssVrUP}P7xd#Gx_ zUp!Pb;IAI48t^v{RSo#NhpGnr!$VaA{^_Br0srz))qsC{sA|Be9;zB}nun?eobI8j z0UNdSKmXXU2R8Ol)qqVrR5f5z4^<7=%tKWJHuq4~fGs>!HDF5*RSnq6LsbK|_E6P; zZ9G&pU|SDW4LFmBss?Q5p{fDfd#Gx_4j!r+u%m~n2JGaassTHDsA|BOJybQ|EFP*F za8?gh4LF;Jss^0hLsbLL;i0Ml=k!q3fOC1MYQVWYR5jo{9;zB}UJq3bIG=~A2AtnR zRRb>Ip{fBF^ib7+3wfw&z=b_jHQ*v1sv2-n4^<7gn1`wcT--xd11{mAssWeuP}P7- zd8lf@r9D(N;4&Vn8gN+;RSmeDhpGl#-a}ObuHd1n0ax@;)qpE`sA|BKJybQ|DjupD za8(ag4Y-!$LsbK=;i0Ml*Yr@;fNOcEYQVKUR5jo_9;zB}T@O_axSofq23+4m zRReC|p{fBl^ib7+8+oW|z>PgrHQ**5sv2-p4^<7gnTM(d+}uM|18(7=ssXq3P}P82 zd8lf@tvysV;5Htr8gN?=RSmeEhpGnL-a}Ob?%<)S0eAFJ)qp#BsA|BSJybQ|E*`2H za90mi4Y-?!ss`NMLsbLr;i0Ml_w-QJfO~nUYQVicR5jo}9;zB}Uk_CcxSxlr2Hf96 zRRbR2p{fB7^ib7+2YIM!z=J(hHQ*s0sv7W64^<6#n1`wcJlsQ710La_ssWGmP}P7( zd8lf@qdinL;4vPm8nBCpss`-pp{fD9d8lf@V?9(g;Bg+R8t`}zRSkH8hpGlV(L+@O zp5&pb0Z;Z&)qtmXsA|AdJybQ|X&$N?@N^GV4S0r!ss=pMLsbKI_fXYx3U{4QK z4S1G^ss=pULsbKw70D27J~-RRccfp{fC&_fXY?xf;5#0w8t`2Y zRSo!_hpGmA-$PXce&C_10YCIm)qo#)sA|A59;zDfV-HmgIMzc|1CH}h)qvwYR5joy z9;zDfQx8=Q_?d^Q2AtrbssTUuP}P86c&KW?FFjN>;6x8q4fvIZss{YpLsbKQY=Iun|Y{ez~&yR8nA_jss?Q7p{fB}d8lf@)*h-Fu#JbR z25jr0ssU&6P}P9#JXAGcdk<9&*ug_p19tRK)qtHmR5f5{4^<5~vxlk%oW(;`1J3H9 zssU&7P}P95d#Gx_IXqM~;G7<+8gMQTRSh_|hpGmg$3s;E&g-G70q65j)qwMRsA|9k zJXAH{f*z_Ga3K#>4Y;s}ss>!dLsbJV>Y=Iu7xPfnfQx&mYQQBtR5jp|9;zB}DGyZ* zxU`3=23*ENRRb>Tp{fCw^H9}*%X_G5z!f}HHQ@4Y;v~ss`M|LsbKA>Y=IuH}g={fSY@$YQQZ#R5jq19;zB}D-Tr- zxV49>2HeI&RReD8p{fD5^H9}*+k2>Lz#TkPHQx3;GQ0;8gMTURSmeehpGnL$3s;E?(3nd0r&Gz)qwkZsA|9i zJXAH{fgY+F@E{LW4S2AJss=p7LsbJF>Y=Iu5A#sffQNgiYQQ5rR5jp{9;zDfC=XQ) zc(jMA20X??RRebMP}P84JybPdHxE?}c&vx220YF~RRbRHp{fB-@KDu&Cwi!Az>_>w zHQ>n}sv7VV4^<6#s)wouJk3K@1D@`ossYdNP}P8EdZ=o^?jEWdu!o1L2JGpfssYdP zP}P8Ed#Gx_b39Zv;JF^E8t^<1RSkH)hpGm=z(Z97Ug)8!0Wb1U)qod!sA|AVJXAH{ zr5>sp@G=io4cN;=RRi|+P}P8aJXAH{Y=Iu zAM;SvfRB5qYQP~Lsv7VK4^<8Lq=%{oe9A*r13vAcssV?3sA|Ar9;zB}xQD6+9O0p= z0iW?u)qu}>sA|CHJXAH{^B$@i@C6T54fvvmss?^0Y`hNYQQ%!qLsbK=v*VYz;!)THQ;(4sv2;84^<7gfrqLF z+|WZ+18(G@ssT6lP}P8&c&KW?O+8dK;AS4G8gO$DRSmd>hpGnL(nD1PZsnn>0k`&0 z)qvZ0sA|A%JybQ|b{?u4aC;9`4Y-4css`NALsbLr@zzaQ8HQ+@asv7WO4^<6#iHE8NywpQg z177B#ssVd>sA|C89;zC!kB6!Tyxc=o176{wssXR`P}P7}d8lf@t36aT;58nq8t_^V zRSkHZhpGm=-a}Ob-r%9C0dMqB)qpp7sA|BQJybPdUk_Cc*v~^%1NQe&)qn#$R5jo& z9;zDfRu5GTc$hpGmA z-9uFaj`UE~fTKKAHQ;CuRSo!thpGmA(?eAQzU85+0pIpe)qwAKsA|A>JybQ|dmgG9 z@O=+e4fuhFss{YfLsbKQhstHQ-neRSh`KLsbKg_fXYG6E2K?4TRRezK zp{fBVd8lf@$sVd2aEgbj2K?SbRRjLup{fCY^ib7+KY6HXz@I%-HQ+BEsv7WD4^<8L zn}@0f{M|!U1ODNmssaD>P}P8cd8lf@zdckn;8YJ)4LHq1RRd1I@RhE@a4*wAXgnHpLRICDd*0cUAwHQ=lbtp=Q}q1Ax1H?$gXj)qnP&e_mvz_}V) z4LEm0s{!X}Xf@!x4Xp;8uc6g|^Eb2_aDj$a11{LmYQTjWS`D~xL#qK7X=pXzq7AJE zT&$thfQvV@8gPk*Rs;UGq1Av(HnbXWsfJbqF5S>-z-1a*4Y+JWs{xm5Xf@#S4Xp-T zp`q1)D>k$maHWP;1FqcAYQR+*S`D~rL#qK-YiKp#>J6<1T%)1YfNM6i8gQ+KRs*ix z&}zVS8d?pwZbPd9*K24s;Q9@%2Hc>b)qoo|v>I@uhE@Y^+|X*kO&VGaxM@SH0XJ)C zHQ?qAtp?npq1Av}HnbXWtA!v>NcBhE@X}+|X*kLmFBQcxXeb0S{|vHQ?b5tp+@z zq1Av#HnbY>sD@Sp9^KGtz+)O(4R~xrs{xN|Xf@#R4Xp+|p`q1)CpNSi@T7)T1D@Q_ zYQXNb~hE@Zf+R$pi(;8Y0czQ#t0ncb?HQ<>Itp+@+q1AwAH?$h?oQ75dp4-rB z!1Eef4S0S-s{t=)Xf@!44Xp;esG-$>7dNyT@REjB176zDYQW1HS`B!4L#qL=XlOOy zl?|;1ysDwqfLAxP8t|HiRs&w!&}zWz8d?o_eM74OZ)j*W;EfHf2E3`E)qpoQv>Nc1 zhE@aK+R$pi+ZtL8czZ*u0qcSq1AwQH?$h?o`zNf-rLY>!223n4S0V; zs{tQqXf@!24Xp-zsG-$>4>zNc0hE@Z<+R$pi z*BV+4_A2+lb@RNpC1Af}jYQWDLS`GMlL#qM5XlOOymkq53{HmeVfL}MX8t|Kj zRs(+9&}zW%8d?qbeM74Oe`shm;ExTh2K=d^)qp=Yv>Nc2hE@aq+R$pi-x^vC_zAOGD02W)6H;C~ug4LDFks{sdYXf@y< z4Xp+ow4v32gEh1oaPWp!0}j#9YQP~IS`9cI^qhE@ZP(a>tZF&kP9I95Ze z0mp7=HQ+c6tp*&oq1AxnHMAOV{DxKoPSDV5zzG{#4LDIls{to&Xf@y@4Xp;8w4v32 zlQpy&aPo#$15VMI^shE@a4(a>tZIU8CHI9Eff0q1ULHQ+oA ztp=R8q1Ax%HMAOV{)ScqF3`|wzy%vx4Y*K4s{t2oXf@y>4Xp-Tw4v32i#4I^9hE@YE)zE6dr5joexJ*N<0heuPHQ;g$tp;4aq1AvZG_)FU#fDY` zuGG+Kz?BI^BhE@Y^)zE6dts7bmxJ^T=0k>^vHQ;s)tp?n_q1AvpG_)FU$A(q|?$pp~z?~af z4Y*4~s{wayXf@z&4Xp;;y`j~Bdo;8faL)qqDdv>NcphE@X} z)zE6dqZ?WccuYg90gr8HHQ;d#tp+^4q1AvVG_)G<#D-P_p48B4z>^zV4fwx?Rs){W z&}zU_8(Ix`T0^S=Pj6^7;290A20XK&)qrO;v>Nd2hE@Zf)6icwR%R0ncw} zHQ)setp>cXq1AvFHMAP=;)YfOUeeHNz)Kri4R~2Ys{t=>Xf@y!4Xp;evZ2+0S2eU6 z@al$E176e6YQSq7S`BzzL#qL=Z)i2(4GpaZys@FxfHyU?8t~?ZRs-JB&}zV28(Ix` zTSKb>Z*OQd;2jOE2E4PO)qr<3v>Nd4hE@aK)6iNd3hE@Z<)6ie{X0t;2#aG2K=+3 z)qsCBv>Nd5hE@aq)6iMvtp*&Vq1AwcHnbXW zu!dFx4&Kmez#$r14LD>&s{w~I@{hE@ZP-_UBn2^v}rIAKGp0Vir`HQ>Yztp=Q=q1AwsHnbXWvW8XzPTtUJ zz$qG94LD^(s{yBKXf@!}4Xp;8rlHk<(>AmkaJq(815V%2YQPy9S`9d3L#qL2YG^g! z%nhvuoTZ`FfU`EV8gRCTRs+u7&}zUr8d?oFXG5z2=W1v*;M@(Z2Arp%)qwLhv>I@} zhE@a4-_UBn1sYlnxL`x80T*g$HQ>Sxtp;4Aq1AwkHnbXWv4&OyF5b{;z$F@54fx-N zRs$~C&}zV?8d?pwbVI8FmuYA<;Ia*^23)S8)qu-4v>I@QhE@Zv*wAXgl^R+NxN<|Q z0as~gHQ=fZtp;4Jq1Aw^H?$gXjfPeOuG!FPz_l7$4Y+ngs{z+(Xf@!v4Xp-Tuc6g| z>o>F-aD#?c18&&RYQT*eS`D~yL#qKdX=pXzrVXtI+^nJ1fSWh88gPq-Rs(L?&}zV~ z8d?pwbwjHGw`piK;I<8|2HdWp)qvYKv>I@ShE@aa*wAXgof=vVxN}3R0e5L=HQ=rd ztp?n!q1Ax9H?$gXkA_wQ?%B|4z`Yt;4Y+qhs{!|EXf@!z4Xp;;uc6g|`!}>2@PLL^ z10LAWYQTdUS`Bz`L#qJ~X=pXzp$)ADJglMBfQL7<8t{mQRs$Z{&}zV=8d?o_bVI8F zk7;N%;IR#@20X5z)qux0v>Nb)hE@Zf*wAXglNwqLcydFl0sq&~YQR$(S`Bz=L#qK# zYiKp#=?$$0Jfor2fM+(e8t|-!Rs){h&}zVQ8d?o_ZbPd9&ueHk;Q0-$2E3r5)qoc^ zv>NcDhE@Y!+|X*kOBz}Ycxgkc0WWK4HQ?n9tp>cJq1Av_HnbY>s)kkrUfs}Yz-t;> z4R~!ss{yZTXf@#V4Xp;ep`q1)H#W2y@TP`V1K!-wYQS3>S`Bz>L#qLAYiKp#?G3F4 zyrZGjfOj^u8t|@$Rs-JM&}zVY8d?o_Z$qmA?`vo^;QbA)27I8Q)qoE+v>NcChE@YU z+|X*kM;clU_-I3`0Uv8sfJbqKHbo2z-Jm-4ft$Bs{x;D zXf@#T4Xp-zp`q1)FE+Fq@TG=U1HRnQYQR?-S`GMWL#qK_YiKp#>kX|2e50Y&fNwUm z8t|=#Rs+7>&}zVU8d?qbZbPd9-)m?!;QI}&2K=C*)qo#1v>NcEhE@Z9+|X*kPa0Yc z_-R9{0Y7VKHQ?tBtp@y}q1Aw2HnbY>tAI^GhE@X(*3fFe!5dl) zI7CCM0f%g8HQ-PUtp*&rq1AxHG_)FU*oIaE4%g6Xz~LKO4LCwWs{u!BXf@zS4Xp+o zxuMm7qcpS{aMXrY1CG|vYQWJOS`9cxL#qMDY-ly$SPiWP9J`^_fa5f@8gSf(Rs)XL z&}zW(8(IxGK|`wnCv0dn;6x3r2AsH|)qs;Uv>I^IhE@Yk*3fFe$s1Y?I7LIN0jF$e zHQ-bYtp=RBq1AxXG_)FU+J;sGPS?8(Iyx zKtrnm7i?%X;6e?p23)wI)qsmMv>I^HhE@YE*3fFe#T!};xI{y%0sq_3YQQBMS`D~V zL#qLoZfG^&G7YT;T(+UrfXg+s8gTiBRs*ik&}zUH8(IyxQbVf&S8ixE;3^HR23)nF z)qtxtv>I^rhE@Zv(a>tZH5*zDxK=}}0oQJ5HQ+i8tp;4Tq1AxvHMAOV{f1TpZqU$b zzzrK(4Y*N5s{uD|Xf@y_4Xp;;w4v32n>Dl=aPx*%18&jKYQQZUS`D~WL#qL|ZfG^& zHVv%?+_s_BfZH{+8gToDRs-(P&}zUP8(IyxQ$wo(cW!7k;4TfV2Hdrw)quM-v>I^t zhE@aa(a>tZJsVmLxK~4~0rzfbHQ+uCtp?n;q1AxNcrhE@Y!)zE6ds~cJkcuhmA0k3UnHQ;p( ztp>clq1AvlG_)G<#)eh{-qg@)z?&Od4R}jKs{wCqXf@z%4Xp;ey`j~BcQmvb@Xm%- z1K!opYQVc2S`BzlL#qMrZD=*%eGRP!yuYENcqhE@YU)zE6dryE)g_)J5q0iSJXHQ;j%tpCC)qr0#v>NcshE@Z9)zE6duNzto_)SBr0l#f%HQ;v*tp@zQq1AvtG_)G<$A(q| z{?yQFz@Hmh4fsn#s{wy)Xf@z(4XpAij@Xv-;1OC;}YQVo6S`GM5L#qJ? z7`Fe9|L%bUHnbY>KMk!09H^nyfCD$Q8gP(?Rs#;&&}zWJ8d?oFctfiJhiGUu;E)Zi z1{|uP)qq1cv>I@jhE@X(+t6yj;Tl>EIDA8^0Y_+PHQh%KaGZu#1CHC!YQXUtS`9dUL#qKN zXlOOygbl3*oT#DIfD<>g8gP<^Rs&Aj&}zWR8d?oFc|)rKr)X$3;FJxm2Ary))qqns zv>I@lhE@Yk+t6yj=^9!MIDJE_0cU7vHQI@|hE@Zv-_UBn4H{YvxM4%90XJ%B zHQ>e#tp?nrq1Aw!HnbXWvxZg!Zr;#pz%3eD4Y*}Ps{yxaXf@#04Xp;;rlHk<+cvZs zaJz<918(2YYQP;DS`D~kL#qLIYG^g!&JC>w+@+z_fV(!d8gRFURs-(d&}zUv8d?pw zXG5z2_iAW0;NA_b2HdBi)qwjpv>I@~hE@aa-_UBn0~%Tlcwj@T0S{_uHQ>Pwtp+@# zq1AwgHnbY>u!dFx9^TMuz#|%34R~Zjs{xN{Xf@!`4Xp+|rlHk<$2PPY@VJIn10LVd zYQPg3S`Bz&L#qK#YG^g!$qlUr{9i+>0Z(aYHQ=cYtp+@;q1Aw=H?$h?jD}VNp4rf9 zz_S`!4S04#s{zkxXf@!u4Xp+|uc6g|=Qp$(@PdX`176tBYQT#cS`Bz{L#qKVX=pXz zr46kHysV+sfR{J48t{sSRs&wy&}zV|8d?o_bwjHGuW4vC;I$2{2E4AJ)qvMGv>Nb+ zhE@aK*wAXgn;KdTcymLm0dHw&HQ=octp>cUq1Ax5H?$h?j)qnP-r3M zfR8t{8t{pRRs%lS&}zV^8d?qbbVI8FpJ`|{;Ij>_27Ioe)qu}8v>Nb*hE@Z<*wAXg zml|3P_;N$50bgloHQ=iatpXf@!w z4Xp-zuc6g|?>Dp>@Pmd{1Af@hYQT>gS`GMdL#qKlX=pXzrwy$J{H&qXfS)(C8t{vT zRs(+7&}zW18d?qbbwjHGziDVS;I|E}2K=s})qvkOv>Nb-hE@aq*wAXgpBh>X_;W+6 z0e@*|HQ=uetp@z9q1AxDH?$h?kA_wQ{@KuKz`q(=4fuCMs{#LMXf@yf!}b61-#u`^ zhE@aqr=it=12wc7aNvek0}j&AYQRAoS`9c@L#qJ?Z)i2(5Dl#c9I~O+fI~I38gS@_ zRs#;x&}zV88(IxGTtlk?hi_;#;0O(^1{|@W)qo>4v>I^ahE@ZP($H$aQ5#wfI9fxi z0Y`6WHQ*Qxtp*&kq1Aw6HMAOV?1okYj?>U;z;PQ|4LDvys{zMvXf@yj4Xp;8u%Xp} z6E(CNaN>qm15VP=YQRYwS`9c^L#qKNZ)i2(6b-EgoU))qpcKv>I^chE@a4($H$aSsPjnI9o%j0cUS$HQ*c# ztp=R4q1AwMHMAOV?uJ$a&ePCpz54LDyzs{!Y4Xf@yh4Xp-Tu%Xp}3pKPFaN&kl z11{3gYQRMsS`D~ZL#qK7Z)i2(5)G{e{BJ|60herOHQ-VWtp;4Wq1AxPG_)FU*@jjF zF4xd%z~viS4Y)!>s{vPRXf@zU4Xp-TxuMm7t2DG4aMgxZ1FqK4YQWVSS`D~HL#qMT zY-ly$S`DoRT)Uywfa^508gSi)Rs*ir&}zW-8(IyxK|`wnH*9D%;6@Ft2Hd!z)qtBc zv>I^JhE@Y^*3fFe%^O+`xJ5&&0k>>uHQ-hatp?n>q1AxfG_)FU+lE#HZr9Li!0j7a z4Y)%?s{waxXf@zY4Xp;;xuMm7yEL>KaMy-b1Mb$)YQWtaS`D~IL#qMzY-ly$UJb1V z+`FOGfcrGG8gSo+Rs-(W&}zW_8(Ix`Ktrnm4{T^P;6V+o20XZ-)qsaIv>NcxhE@X} z*3fFe!y8%+ctk_10gr5GHQ-SVtp+^0q1AxLG_)G<*oIaE9@o%nz~dWQ4R}IBs{v1J zXf@zT4Xp+|xuMm7|7&P9;3*BQ20XQ))qtlpv>NdAhE@Zf(a>tZGaFhBcveHJ0nct| zHQ+f7tp+@|q1AxrHMAP={DxKoUeM5LzzZ8%4R}#Qs{t==Xf@y^4Xp;ew4v32mo>B+ z@bZRM176Y4YQQTSS`BzrL#qL=ZfG^&H4Uu>ytbj$fY&v&8u0ptRs-J9&}zUN8(Ix` zQ$wo(Z*FKc;4KZU2E4VQ)quA(v>NdChE@aK(a>tZI~!UJcvnNK0q<^THQ+rBtp>ce zq1Ax*HMAP={)ScqKG4u=zy}*z4fs$)s{tQwXf@y?4Xp-zw4v32k2SO!@bQLL13uBv zYQQHOS`GMAL#qLwZfG^&GYzcNdBhE@Z<(a>tZHyc_F_*O%!0pD(DHQ+l9tpv>NdDhE@aq(a>tZKO0&N_*X-#0sn4jHQ+xDtp*%m`2Iisy9W-~&}zW{G_)FU zpoUfh4&2acz(E>X4LE2+s{sdVXf@#A4Xp+oqM_A*LpHP;aHxh>0}kELYQSL{S`9dC zL#qLYYiKp#@C~g79HF7rfFm}v8gQhBRs)XQ&}zU@8d?oFYD235M{8&`;OGsl1{|ZI z)qrC*v>I@%hE@ZP-Oy^laT;0;IBr9$0mo}-HQ@LStp=Q+q1AvBHnbXWqJ~xjPTbIH zz)2cf4LE5-s{to#Xf@#E4Xp;8qM_A*Q#Q03aH@t@15Vx0YQSk4S`9dDL#qL&YiKp# z^bM^BoS~uBfHO9<8gQnDRs+u5&}zV08d?oFYeTC6XKQFR;Oq^p2Ardz)qrz0v>I@( zhE@a4-Oy^lc^X;`IB!F%0q1LIHQ@XWtp;46q1Av3HnbXWp@voiF5J*+z(pEb4Y+7S zs{t2lXf@#C4Xp-TqM_A*|7~bB;F1lk23)G4)qqPkv>I@khE@YE+t6yjI@mhE@Y^+t6yj?HXDQxP3#b0e5INc3hE@X}+t6yj;~H8Gczi>v0Z(XXHQNcdhE@Zf-_UBn3mRGtcws}U0WWH3HQ>b!tp>cLq1AwwHnbY>vW8XzUf$4Zz$+SB z4R~cks{yZSXf@!~4Xp;erlHk<*EX~o@VbUp176?IYQP&BS`Bz(L#qLAYG^g!%?+&v zyrrSlfVVcZ8t}G;Rs-JN&}zUt8d?o_XG5z2?`mi@;N1NcfhE@aK z-_UBn2O3%p_+Ue;0Uv5;HQ>Vytpv4&OyKHku3z$Y474fte3s{x;C zXf@!|4Xp-zrlHk<&o;Cg@VSOo13ur-YQPs7S`GMOL#qK_YG^g!%MGmte5Ik)fUh>R z8t}D-Rs+7?&}zUp8d?qbW<#q1-)d+z;M)zY27ITX)qw9dv>NcehE@Z<-_UBn4;oqx z_+dk<0Y7SJHQ>h$tp@z0q1Aw&HnbY>vxZg!e%{b(z%LqF4fth4s{y}iXf@#14XpI^2hE@Yk)X-|ci5prCI7vgR0Vi!} zHQ;0otp=RDq1Av>G_)FU%7#`0PSwzAz^NNr4LD6hs{yBNXf@z;4Xp;8zM<8CGc>ds zaK?sK1J2aYYQUKrS`9c$L#qL2ZD=*%Yz?gjoV}sdfO9mo8gR~rRs+t}&}zWB8(IxG zPeZE#=WS>;;Cv0O2Asd4)qo2$v>I^1hE@YE)X-|cg&SH8xJW~*0T*p(HQ-_mtp;4Y zq1Av(G_)GI^bhE@Zv($H$aRU29jxLQN20atHmHQ*Wztp;4Pq1AwEHMAOV?S@tZuG7$J zz;zp14Y*!Is{z+I^d zhE@aa($H$aT^m{rxLZT30e5d`HQ*i%tp?n)q1AwUHMAOV?}k&}zVA8(Ix`Ttlk?k8fx-;0X<_20XE$)qp28v>Nc_hE@aquc6g| zr!=%0@YIG@1D@8NczhE@Y!*3fFe%Ntq^ctu020k3RmHQ-eZ ztp>chq1AxbG_)G<+J;sGUf0lS!0Q`Y4R}LCs{wCpXf@zX4Xp;exuMm7w=}dG@YaS_ z1K!rqYQWnYS`BzdL#qMrY-ly$T@9@Uyt|>*fcG@C8t~qRRs-JG&}zW@8(IzcKtrnm zA8cqf;6n|q27I`o)qsyQv>NcyhE@YU*3fFe#~WG=_(Vgi0iSGWHQ-YXtpuU4fsMss{vnZXf@zV4Xp-zxuMm7uQaq8@YRM^1HRVKYQWbU zS`GL{L#qMbY-ly$TMexSe7m95fbTT48t~nQRs+7*&}zW<8(IzcK|`wnKWu0<;71Lu z2K>08)qtNgv>Nc!hE@Z9*3fFe&l_3|_(emj0l#c$HQ-kbtp@zMq1AxjG_)G<+lE#H ze%H`y!0#Jc4fsPts{wy(Xf@zZ4Xp~YQWzcS`GL|L#qM* zY-ly$Uk$AW{JWvmfd4eK8gPIS`~Udw9ynk_s{#Mh&}zVe8d?oFa6_vB2WeI@ThE@X(+0bghp&D8ZICMj+0f%X5HQ=xftp*&fq1AxHH?$gXgoaiF zj@Zy@z>ykS4LEW`s{u!8Xf@!d4Xp+ot)bO`qc^k~aEyjl1CH6yYQV7?S`9dML#qMD zX=pXzxDBla9Iv6(fa5o`8gPP!Rs&Ah&}zVm8d?oFaYL&CCuwLk;G_+$2Ar&+)qs;X zv>I@VhE@Yk+0bghsTx`hICVp-0jFtbHQ=-jtp=Q~q1AxXH?$gXhK5!H&e+guz?m9a z4LEZ{s{vI@UhE@aq zx1rU5OE$C`aH)n?11{arYQSY0S`D~tL#qLoYiKp#@(ry9T%n=WfGak%8gQkCRs*iw z&}zU{8d?pwYD235S8HfB;OY&n23(_|)qra@v>I@&hE@Zv-Oy^lbsAa?xNbwM0oQA2 zHQ@RUtp?nnq1AvJHnbXWqlQ)kZrspnz)c!j4Y+ATs{uD_Xf@#G4Xp;;qM_A*TQ;;B zaI1z^18&{WYQSw8S`D~uL#qL|YiKp#_6@BD+@Yb>fIBv{8gQqERs-(b&}zV48d?pw zYeTC6cWY=h;O-5r2Hc~e)qs08v>I@)hE@aa-Oy^leHvN~xNk$N0rzWYHQ@dYtp+@x zq1Au~HnbY>poUfh9^BAsz(X2Z4R~lns{s#dXf@#B4Xp+|qM_A*M>ez?@Ti7X10LPb zYQSR}S`Bz?L#qLgYiKp#@eQp8JfWf0fG0Mz8t|lsRs){g&}zW{HMAP=l!jIVp4!lA zz|$I94S0G(s{zkwXf@!O4Xp+|tD)6^XE(GO@SKKL1D@N^YQXavS`B!9L#qKVXlOOy zg$=C+yr`kofEPEk8t{^aRs&wz&}zWT8d?o_c|)rKuV`pB;FS%n2E3}F)qqzwv>Nc5 zhE@Y!+t6yj>l#`Oczr{w0dHt%HQcQq1AvlH?$h?mWEaX-rCS=z}p&H4S0J) zs{!w5Xf@!S4Xp;etD)6^cQ>>e@ScWN1K!)vYQXy%S`B!AL#qKFXlOOygAJ_)e5j$- zfDbpc8t{>ZRs%lT&}zWP8d?qbctfiJpJ-?`;FArl27Ica)qqbov>Nc4hE@YU+t6yj z=NeiK_Nc6hE@Z9+t6yj?;2VS_b!m@SlcO0}e1!{~!O|0|#tqHQ;|5S`9c*L#qJ?ZfG^&APubs9JHa;fP*!(8gTH2 zRs#;v&}zUT8(IxGR70x)hi+&!;4lrX1{}7b)quk_v>I^uhE@ZP(9mkY5gS?!I8sBa z0Y`3VHQ*=>tp*&mq1Aw+HMAOV^oCXgj?vI+z%d(I4LDXqs{zMuXf@zC4Xp+ox1rU5 z<2AGzaQuc=15VJ;YQPB_S`9c+L#qKNZfG^&Bn_I^whE@a4(9mkY85>#+I8#Hb0cUP#HQ+1_ ztp=R6q1Ax1HMAOV_J&pi&e70nz&RUQ4LDars{!Y3Xf@zG4Xp;8x1rU5^EI>@aQ=o? z11`|eYQO~>S`D~RL#qK7ZfG^&A`PtuT(qIpfQvP>8gTK3Rs$~4&}zW{HnbXW$%a+~ zF4fR#z@-~n4Y*80s{xm7Xf@z+4Xp-TzM<8CD>SqkaK(mJ1FqE2YQU8nS`D~LL#qK- zZD=*%Y7MOhT)m;yfNM0g8gR{qRs*ip&}zW78(IyxPD85!*KKGu;CcI^3hE@Y^)X-|cjT>4GxJg5+0XJ=EHQ;6qtp?n@q1Av}G_)FU%Z641Zq?9gz^xlv z4Y*B1s{yxdXf@z=4Xp;;zM<8CJ2bQ!aL0yL1Mbw&YQUWvS`D~ML#qLIZD=*%ZVjyl z+`XaIfO|Bw8gS2sRs-(U&}zWF8(IyxPeZE#_ibo3;C>CQ2Hd}))qn>yv>NchhE@X} z)X-|cgBw~6ct}I50S|3xHQ-?ltp+^2q1Av#G_)G<$c9z}9@Wrlz@r;l4R}mLs{xN~ zXf@z*4Xp+|zM<8CCp5Gg@Wh5z1D@2-YQU2lS`GNWhE@Zf($H$aQyW?hcv?fN0Z(se zHQ*Tytp+@^q1AwAHMAP=?1okYp3~53z;hc~4R~Hds{zk%Xf@yk4Xp;eu%Xp}7d5mR z@ZyG6176b5YQReyS`BzvL#qKVZ)i2(6%DNhyt1LyfLArN8u03dRs&ws&}zVI8(Ix` zT|=t@uWx8I;0+C}2E4JM)qpoOv>Nc{hE@aK($H$aTN_#pcw0lO0dH?;HQ*f$tp>ca zq1AwQHMAP=?uJ$a-qX-(zhzJ@ZpA513uEw zYQRSuS`GMEL#qKFZ)i2(6Ai5fe6pd{fKN5F8u00cRs%lM&}zVE8(IzcTtlk?pKoY2 z;0q0{27Ixh)qpQGv>Nc`hE@Z<($H$aR~uRl_*z4&0bg%uHQ*Z!tpNc|hE@aq($H$aUmIEt_*+A(0e^33HQ*l&tp@zFq1AwYHMAP=?}kI@I@> zhE@a4-q32mIT~6GIA=qv0q1IHHQ?M0tp=Q@q1Ax%HnbXWzJ^u<&fm~#zy%sw4Y*)K zs{t2kXf@!%4Xp-Tq@mS-i#D_xaIuC~11{dsYQQBLS`GN$hE@YE+0bghr5aidxO79S z0heiLHQ=%htp;4Kq1AxPH?$gXg@#rGuGr9Oz?B+W4Y+bcs{vPOXf@!f4Xp-Tt)bO` zt2eY7aE*pm1FqT7YQVJ`S`D~%L#qMTX=pXzx(%%cT(6&}zVq z8d?pwaYL&CH)&`!;HC|&2HdQn)qtBfv>I@WhE@Y^+0bghtr}VlxOGFT0k>&rHQ=@l ztp?n#q1AxfH?$gXhlW-I?%2?3z?~Xe4Y+eds{wauXf@!j4Xp;;t)bO`yEn8NaF2#o z1Mb<-YQVi3S`D~&L#qMzX=pXzz74Gg+^?b4fcrPJ8t{OIRs$Z`&}zVg8d?o_a6_vB z4{2yM;Gqqz20W~x)qsaLv>Nb;hE@X}+0bghqZ(QbcyvRn0gq{DHQ=!gtp+@^wU4R~@xs{#Ml&}zU_8d?o_YD235Pits3;OPym20Wvo)qrO< zv>NcNhE@Zf-Oy^la~fI=cy2?h0nck_HQ@OTtp>cHq1AvFHnbY>qJ~xjUfj@Xz)Koh z4R~oos{t=-Xf@#F4Xp;eqM_A*S2na7@T!JZ176+GYQSq6S`Bz@L#qL=YiKp#^$o2C zyrH4hfHyX@8t|ruRs-JL&}zV28d?o_YeTC6Z)<2Z;Oz~q2E3!8)qr<4v>NcPhE@aK z-Oy^ldm35|cyB|i0q<*QHQ@aXtpp@voiKHSi1z(*Qd4ftq7s{tQt zXf@#D4Xp-zqM_A*Pd2m~@TrDY13ul*YQSe2S`GMYL#qLwYiKp#^9`*Ae4(M$fG;+* z8t|otRs+7=&}zU}8d?qbYD235Uu$SJ;Oh;o27IHT)qrm{v>NcOhE@Z<-Oy^lcN$s^ z_-;e10pDwAHQ@UVtp@y{q1AvNHnbY>qlQ)ke%#P%z)u=l4ftt8s{uc2Xf@#H4XpNcQhE@aq-Oy^le;Qg1IKU|VfBbh3 z9I&C)fd6S|HQ+!Etp*&pq1AwcG_)FU(1un64%X0Wz`+|@4LC$Ys{w~>Xf@za4Xp+o zx}nv8!!)!SaM*@c0}j{FYQW(eS`9ctL#qKtY-ly$NDZw99J!&@fTJ|D8gSHxRs)XK z&}zWZ8(IxGMnkIs$82ad;8+c<1{}Mg)qvwPv>I^ShE@ZP*U)Of@f%tVI6*_J0Vix| zHQ+=Itp=R9q1AwsG_)FU(uP(8PS((Bz{wk04LC(Zs{yBMXf@ze4Xp;8x}nv8(=@ai zaN34e15Ve_YQX6mS`9cuL#qL2Y-ly$Obx9DoVlUZfU`8T8gSNzRs+t~&}zWh8(IxG zM?I^UhE@a4*U)Of`5RgdxIjaz0T*m&HQ+)Gtp;4U zq1AwkG_)FU(S}w7F4oX$z{ML{4Y))@s{#Mp&}zUX8(IyxR70x)mu_e^;4%%Z23)qG z)qu-2v>I^vhE@Zv(9mkY6&qR&xKcx_0atElHQ*`@tp;4Rq1Aw^HMAOV^@dghuF=qH zz%?6M4Y*cAs{z+;Xf@zE4Xp-Tx1rU5>ov3*aQ%i>18&gJYQPN}S`D~SL#qKdZfG^& zCJn6y+_a(9fSWb68gTQ5Rs(L)&}zUf8(IyxRYR)*w{B=P;5H4d2Hdux)qvYIv>I^x zhE@aa(9mkY9UEE=xKl%`0e5a_HQ+7{tp?n+q1Ax9HMAOV_l8yj?$OX{z&#sU4Y*fB zs{!|JXf@zI4Xp;;x1rU5`!%#0aQ}u@10K-OYQO^NdEhE@Zf(9mkY z6B}9$cv3^F0Z(pdHQ@gmS`BzgL#qK#ZD=*%X$`FgJiVdSfM+zc8t}}9Rs){Z&}zW5 z8(Ix`PD85!&uwTm;CT(L20Xu^)qoc?v>NcjhE@Y!)X-|ciyK-Ecu7O60WWQ6HQ;3p ztp>cjq1Av_G_)G<%7#`0Ue(ZQz^fZt4R}pMs{yZVXf@z<4Xp;ezM<8CH#D>w@WzH# z1K!loYQUQtS`BzhL#qLAZD=*%Z4IpkyuG2-fOj;s8t~4BRs-JE&}zWD8(Ix`PeZE# z?`>!`;C&6P2E4za)qoE)v>NcihE@YU)X-|chZ|ZA_((&m0UvE>HQ-|ntpNckhE@Z9)X-|cj~iMI_(?;n0Y7bMHQ;9rtp@zOq1Aw2G_)G<%Z641 ze$~)wz^@xx4fst%s{y}lXf@z>4XpgkN@t012(i8@IMW$ z1{|oN)qn#xv>I@bhE@X(+R$pi!5Uf(ICw*=0f%U4HQ zv>I@dhE@Yk+R$pi$r@S>IC(>>0jFqaHQH?$gXnub;bPTSCG!08%V z4LE&6s{v8d?oFe?zMQ7iefT;DQaU23)A2)qo2(v>I@chE@YE z+R$pi#Tr@-xOhXW0hefKHQ;|6S`D~lL#qLoYG^g!(haQ!T&AJbfXgI@=hE@Zv-q32mH5ytCxMoAE0oQ71 zHQ?F}tp;4Dq1AxvHnbXWy@pl;uHVpVzzrH&4Y*-Ls{uD^Xf@!*4Xp;;q@mS-n>Mr> zaI=P118&~XYQQZTS`D~mL#qL|YG^g!)(x!&+@_(`fZH~-8gRRYRs(L|&}zUP8d?pw zV?(O}cWP)g;LZ)L2Hd5g)quM;v>I@?hE@aa-q32mJsMgKxMxGF0rzTXHQ?S2tp?nu zq1Axht@UVtf10LSc zYQQ5JS`Bz)L#qLgYG^g!(G9HzJf@-5fX6np8t}M=Rs$a2&}zUF8d?o_VneF|Pikm2 z;K>cG2K-+`s{v1GXf@!e4Xp+|t)bO`r#G}3@Qj951D@H?YQVD^S`B!1L#qMLX=pXz zxecubJg=eEfaf=~8t{UKRs&wx&}zVo8d?o_aYL&CFKK8s;H3?%2E44H)qs~bv>Nb= zhE@Y!+0bghs~TDjcy&Xo0k3IjHQ==ktp>cVq1AxbH?$h?hK5!H-q_G;z?&Lc4R~`y zs{wCmXf@!i4Xp;et)bO`w>PvJ@Q#L71K!!tYQVc1S`B!2L#qMrX=pXzy$!7fysx3v zfcH1F8t{RJRs%lR&}zVk8d?qba6_vBA8BYc;G+$#27Iic)qsyTv>NbNb>hE@Z9+0bghuNqnn_;o|8 z0l#TzHQ=`mtp@zAq1AxjH?$h?hlW-I{@BoJz@Hjg4fu0Is{wy$Xf@!k4Xp{->eUfCDwO8gSr- zRs#;w&}zUz8(IxGSVOA;2XAOK;1CV11{|`X)qq1av>I^ehE@X()6i4o4LDjus{u!EXf@y%4Xp+ov!T_1 zV>PrIaO{Rw1CGI^ghE@Yk)6il ztp=R2q1AvhHMAOV=7v@S&eG6oz*!qw4LDmvs{v23)(L)qv|X zv>I^ThE@Zv*U)Of^&46ZxIsg!0XJ-DHQ+`Ktp?nI^VhE@aa z*U)Of{To^hctAs|0S|0wHQ+%Ftp+@}q1AwgG_)G<(1un69@fxmz{49_4R}ODs{xN} zXf@zb4Xp+|x}nv8$27DW@Yse{10L7VYQWNdGhE@aK(9mkY8yi{;cvC~G0dH<-HQ+4`tp>cc zq1Ax5HMAP=_J&pi-qFx%z&jgS4R}{Ws{!wBXf@zH4Xp;ex1rU5_cgQ{@cxEY13u8u zYQP5@S`GM6L#qKFZfG^&BMq$ve6*p}fR8n_8u0OkRs%lK&}zUZ8(IzcR70x)pKfS1 z;4=-a27I=m)qu}6v>NdFhE@Z<(9mkY7aLj)_)NdHhE@aq(9mkY9~)W?_)|lx0e^02HQ+A|tp@zHq1AxDHMAP=_l8yj{?X8C zz&{&W4ft0>s{#LRXf@zJ4Xp+oVD$b!{<{Yb*wAXg|1`83aG-`(0}kBKYQRAnS`9d8 zL#qJ?YiKp#;0>(?9HODsfI~L48gQtFRs#;*&}zV88d?oFY(uL7hihmx;P4Ht1{|TG z)qo>5v>I@vhE@ZP+|X*kQ5sqeIBG+y0Y__SHQ?wCtp*&Uq1Aw6HnbXWtcF$tj@{5| zz;PN{4LEK?s{zMrXf@#Y4Xp;8prO@(6E?IOaH57*15Vt~YQRYvS`9d9L#qKNYiKp# zI@x zhE@a4+|X*kSsGdmIBP?z0cUGyHQ?+Gtp=Qt+naFvEu1FqW8YQWVRS`D~*L#qMTXlOOynhmW6T&tngfNM9j8gQM4Rs*iv&}zW- z8d?pwenYDPH)v=z;D!yY2HdEj)qoo}v>I@ehE@Y^+R$pi%^F$_xOqdX0k>#qHQ<&F ztp?nxq1Av}H?$gXn}${cZrjjm!0j4Z4Y++ns{watXf@!D4Xp;;siDQw z1Mb?;YQWtZS`D~+L#qMzXlOOyo(-)A+^eD0fO|Kz8gQS6Rs-(a&}zW_8d?pwe?zMQ z4`^sL;DHUT20W;t)qn>#v>Nb`hE@X}+R$pi!x~x*cz8pr0gq^CHQNcVhE@Zf-q32mGa6bAcxFSZ0nch^HQ?C|tp+@&q1AxrHnbY>yoOc-p5M@FzzZ5$ z4R~Qgs{t=+Xf@!)4Xp;eq@mS-mo~H-@Un(h176NcXhE@aK z-q32mI~rOIcxOYa0q<&PHQ?P1tp>cOq1Ax*HnbY>zJ^u<-rvw_zy}&y4ftR~s{tQs zXf@!&4Xp-zq@mS-k2bU#@Uezg13uo+YQQHNS`GMQL#qLwYG^g!(+#Z#e5Rq*fX_Cx z8t}P>Rs%lY&}zUJ8d?qbVneF|UutMI;L8oI27INV)qt-yv>NcWhE@Z<-q32mHyTy@pl;zTePlzz-T)4ftV0s{uc1Xf@!+4Xp8t}V@Rs(+D z&}zUR8d?qbV?(O}e`;to;Li=M2K=R=)quY?v>NcYhE@aq-q32mKN?yM_-8|_0sm@f zHQ?V3tp@z3q1Au`jM4wcfA_!v8(IzcpN3Wg4%EALo~D+aL9&M0}j>DYQUizS`9c%L#qLYZD=*%a1E^n9KNB|fFm@t8gRshRs)XI z&}zVu8(IxGN<*swM{Q^|;Ajo41{}Si)qrC(v>I^ChE@ZP)zE6du^UAQ#7<1 zaLR^O15VY@YQU)*S`9c&L#qL&ZD=*%bPcTroW7yefHO3-8gRyjRs+t|&}zV$8(IxG zOGB#xXKiRT;A{=82AsX2)qry}v>I^EhE@a4)zE6dxf@yyI8Q^X0q1RKHQ;;=tp=RG zq1Av3G_)FU!G=}?F4WL!z=a!H4Y)`{s{t2nXf@zs4Xp-TyrI>AOEk0^@V^bM23)eC z)qqPiv>I^fhE@YE)6iI^h zhE@Y^)6i~xHQ){ntp?n&q1AvpHMAOV=Z01T?$Xd|z+D?!4Y*rF zs{wa!Xf@y-4Xp;;v!T_1do{EgaPNjz1Mbt%YQTLPS`D~gL#qMzZ)i2(0S&DNJg}kF zfCn|S8t~wTRs$Z=&}zU#8(Ix`SVOA;4{vBS;1Lb220XH%)qqDev>Nc}hE@X})6iNc-hE@Zf*U)Of^BYcfq1AwwG_)G<(uP(8Ue?fRz{?w24R}REs{yZUXf@zf4Xp;ex}nv8*EF;m@Y;q} z176qAYQXCoS`BzZL#qLAY-ly$O%1IEyt$#(fVVWX8t~SJRs-JF&}zWj8(Ix`M?NcNc;hE@Z<*U)Of_ZwOb_(4Of0Y7YLHQ+}Ltp@zKq1Aw&G_)G<(}q?9 ze%8=xz|R|64fsVvs{y}kXf@zh4XpVA;9m``2K>9B)qwvr zv>I@LG5i1c?;bc{L#qM*)6iLEehE@ZfmZ8;voinr=@bnC=2JDid)qrPYXfazL#qL=%+PAUt1`42@ahb$ z2D~Ois{yag&}zWzGPD}-`V6fGydguY0dLIEYQUQ^v>LEahE@ai&CqJVei>Q~cyoqU z1KyIM)quBVXf@z%8Cnf^dxlm6-jSizfOlqSHQ-$tS`B!2hE@aKlcCjs_hx7{;C&fd z4S0WsRs;6W&}zT|8CnfEFhi>WAIQ*Zzy~w58t|bEtpDh<@UaZ7 z27Ek2s{sdPXf@yy8CnfEI76!epUlu|z#$o04LCGIs{xxbv>I?&hE@YUm7&#uPiJT~ z;4>Lo4ft$^Rs%klq1AxTXJ|Fx3mIAs_+o}u1HP1@)qpQ&Xf@y~8CnhaYKB$=zLufY zfWtGi8gN90Rs)XA&}zWfGqf7;jSQ^@d^1C<0pH5dYQVQMv>Nc846O!yH$$rd-^8t{V*tp@xsL#qKl%Ft@Sk2ACya8!m?1CGwnYQQlWS`GL~hE@Z9nxWNzpJiw@ z;O7}y4fsWdRs(*Sq1Aw2WoR|v*BM$3_)UgZ1Ad#K)qvk+Xf@#X8CnhaLxxrZj?K_& zz;PK`4LCkSs{wz^&}zV+GPD}-=M1d|{3S!H0e{WVYQWzzv>I?ihE@aqo}tx%6En0L z@Q)0w2Aq_k)qsCyXf@zp8CnfEIYX-fr(|d~;M5GQ25h!ae*a@*4{V;H)qvAvXfI^H46O!SEJLdS7thdYz$G%Y8gR)Btp;2wL#qLo z&d_SWWiqrHaM=v423#&fs{xnK&}zUHGPD|S#SEI^L46O!S zEkmmTSI^LDz%??o8gR`Ftp;2xL#qMT&d_SWbuzRXaNP{823#*gs{vbQXf@#a8Cnh4 zCPS+MH^|Uxz_uA$4Y*;3Rs*)n&}zVqGPD|S;|#3^+$2M*0XNOiYQW7hv>I^p46O#- zB15YIx6IILz^yX08gT0jtp?mCL#qL|&CqJV?J~3)aQh6c2HYV-s{wb+&}zV)GPD|S z=M1d|+$BS+0e8*NYQWtxv>I^t46O#-BSWhJ_sr00z`ZiG8gTCntp?mDL#qMz&CqJV z{W7!~aQ_Ug20S1`s{s$p&}zVgGPD}-;0&z>JS0P_0T0d4YQV!Xv>Nd646Oz{B15YI zkIc|&z@sv>8t~{0tp+?ML#qLg&CqJV<1(}w@c0a^25g_9)qou`v>LEuhE@ZfkfGIp zCuV3h;7J);4R~^fRs)`rq1Aw=W@t5FrwpwIJS{`30Xt`CHQ?zPS`FAGL#qML$k1xQ zt{GYl*eye=0lQ~tHDHentp+?ZL#qML%Ft@Svoo|B@SF^-20S-Is{zl;&}zW*Gqf7; zf()$&yf8zn0WZqXYQT##v>Nb|46O#dG()QaduC`gV6P0V2JD@o)qs~}Xf@#F8Cnf^ zMTS-bUYViQfLCQ`HQ?15S`BzjhE@Y!o1xW!*JWrm;Pn|=4R}L_Rs-Icq1AvlWoR{E zpA4-A?3a$L#qLA&CqJV+cLBo@b(O?2D~Ffs{!xK&}zWDGPD}- z?hLI4yeC7e0q@PwYQXz4v>NdK46O$2pP|)&12VK4aA1a313r+U)qoFXXf@zN8Cnha zaE4X`K9Zr;fRAQqHQ-|zS`GMkhE@X(%Ft@SCo;4eaBzlJ13sCd)qq1Xv>I?|hE@YM zWoR|vunesRd@4h$0iVv$YQSeQv>Nc)46O!yE<>vUpU=>0z!x&K8t}yotpNb>46O$IGDE8Yzsk^Rz^^m38t|J8tp@xyL#qM5 z%g}1T?=!R-@P`bo1{|BA)qvwNv>I@HhE@aqn4#5xKV@h&;LjOa4fsojRs;T;q1AxD zWoR|vgbb|){5?af0Vif?HQ*l^S`9cUL#qM*%+PAUzcREMaB_xL15U}%YQU)(S`FB2 z;r#x`#va%_L#qL&$A%S`9c~hE@a4pP|)&3uI_D;DQ-i4Y*K-Rs$}aq1AwkWN04# zS`D~fhE@Z%&d_SW^)s{@uuXI^346O!im!Z{w8)axU;KmtR4Y)~$ zRs(LDq1Aw!WoR|v<{4TIxJ8Cm18$k2)qq=NXf@#08CngvO@>wjZkwUifZJtgHQ@Fc zS`D~EhE@aan4#5xJ7s7!;LaIZ4Y*5&Rs-&uq1Ax9WoR|v?ipGQxJQOo1MZoj)qs0t zXf@#88CngvPli?l?wg_2fcs@=HQ@dkS`BzWhE@X}n4#5x2W4nA;K3PM4R}a~Rs$ZI zq1AwgWoR|v;Tc*DctnO)10I>7)qqE3Xf@!`8Cnf^Oomni9-E=nfX8KMHQ@0XS`FAf zL#qKhWN0;D#|*6oJRw7?0Z+`(YQU2+v>Nc_46Oz{B}1zLPtDM3z)l%j4R~6HRs(j< z&}zWbGqf78ONLeho{^!|fL$}R8n9c2Rs(j=&}zUQ8Cnf^W`Nb+46O#dF+-~XZ_3bWz&;sT4cIqBs{#9EXf@!?8Cnf^ONLeh-kPD+fVX96HQ?Mu ztpNcu46O!yD?_UR-_Fo#z;`mV8t~l=tpGhG@WTwP2K*>P zs{udG&}zU@8CnfEIzy`g$7ERs(*Pq1Aw&XJ|Fx7a3X&_+^Gx1AdjE z)qr1TXf@zB8CnhaZH86@ewU%ufZu0mHQ)~!S`9chL#qMDWoR|v_zbNE{4qnT0e{NS zYQUc}v>Nc246O$IHAAZbf6LHnzzG>z4fuP8Rs&AV&}zUxGPD|SQifIo{+XfGfPZCZ zHQ?k7tp=Quq1Av>Gqf78*&_M8CnfEONLeh&YGdsfUPpL8gRA@tp=PuL#qMj$k1xQ zIWx2xaIOrk2An%Xs{!Z9&}zVWGqf6Tz6`AfoIgXW0T;;7YQP0Ev>I@s46O!SI76!e z7s=3Sz(q5(8gQ`;tp;2?L#qLo$k1xQB{Q@daH$Nf23$Hrs{xnE&}zVCGqf6TxeToa zTs}jq0awV-YQPmUv>I@w46O!SIYX-fSIN+7z*RG}8gR7?tp;2@L#qMT$k1xQH8Zpt zaIFlj23$Kss{z-^&}zVSGqf6Ty$r1eY@MOifa_;yHDH?ztp?m6L#qMXW@t6wh8bE7 z*e*k>0XNFfYQT*%v>I@e46O#-G()QaH_Om!z|AwX8gPpYtp?mOL#qL|%Ft@StuwS5 zaGMOR2HZA7s{yym&}zW#Gqf6ThYYO-+%ZF|0e8yKYQUW{v>I@i46O#-HAAZbcgxUf zz}+*n8gP#ctp?mPL#qMz%Ft@Sy)(2LaGwmV2HZD8s{!}R&}zW_Gqf7;fDEk$JTOD6 z0T0U1YQTdtv>Nb`46Oz{G()Qa56jSMz{4}N8t{k=tp+?YL#qLg%Ft@SqcgM`@R$s( z20S)Hs{xP8&}zWrGqf78eTG&8cF53bz>XPO4R}I^Rs)`xq1AvVWoR|v$r)M=cuIy= z1D=|p)qtHcv>NcV46O$2oT1f#r)Ow2V3!Q720SA}s{y-aXf&}zVQGPD}-+zhP-JTF750ng9SYQPIJv>Ncj46O#dC_}3OFV4_v zz)Lc;8t~E#tp@Cwq1AxBGPD}7cZOC2UY4QNfR|@zHQ*H)S`Bz*hE@Y!m7&#uS7&H7 z;58Xq4R~#aRs&v_q1AxbXJ|Fx4H;Sucw>fE1KyOO)qs66v>LE)hE@ai%g}1Tn=`Z; z@Rkg%2D~*xs{wDz&}zWjGqf7;jts2^yfZ_q0q@GtYQVcQv>Nc946O#dH$$rd@5|6? z!22__8nAzcRs#;m&}zVe8CnhaK!#QWKA54^fDdJ8HQ>V;S`GL}hE@YUnxWNzk7Z~z z;Nuxu4LB%6s{xNcK46O!yIzy`g zpUKc_z-KeG8t}OctpNc!46O$IEJLdS zKhMx=z%Mei8t}^utp@xmL#qM5&d_SWZ!)wR@Y@Wn2K+8Vs{y~y&}zURGPD|SY=%|? zj?2($!0{Pc4ftb*Rs;T&q1AvtXJ|FxFBw`5_-lq%1OAqw)qoQ+v>NdD46O#7n4#5x ze`IJi;G_(#2K+Nas{#MY&}zWR8CnfEB}1zLr)Fq1V6#Q@`yU&7VDk*E2An2Cs{vbN zXf@!p8CnfEU4~WzPM@LGfGsn$8gPaTtp=PiL#qL2%Ft@SnKQH+aFz_M2AnlRs{vbO zXf@z$8CnfEdxlm6&XJ+jfOBSOHQ-zsS`9dNhE@a4lcCjs^JZu@;CvZc4LE;>Rs$}O zq1Av3W@t6wLK#{OxNwG611^%G)qsm;Xf@zs8Cngvc!pL3E|Ht<**;CdNa4cIzEs{z-~&}zUo z8CngvL55ZXw$0FLzzs9B8n9i4Rs(L7q1AvJXJ|FxCK*}{xM_w~18$a~)qtC4Xf@y# z8CngvWrkJ*Zk3_cfLmv1HQ+WGS`D~uhE@Y^m!Z{w+h=Gs;0_sD4Y*^5Rs-&oq1Avp zXJ|FxE*V-4xNC-11MZfg)quNaXf@y-8CngvXNFb-?vNb)46Oz{ zF+-~XPs-40z>_ny8t{}1tp+?bL#qKhWoR|vX&G7#*f~S10Z-4+YQQcTS`BzchE@Z1 z&CqJVZW&q)*gZq50efUUS`BzshE@ZfouSo$=VWL#;JF!E4R~ILRs)`&q1AvF zWN0Nc*46O#dE<>vUug}nGz#B5O8t}#ptp>a)L#qM% zWN0;D-wdq=?3ba{fH!AoHQ+57S`Bz>hE@aKmZ8;vw`XWI;2jxS4R~jURs-IZq1AwQ zXJ|FxJsDaJcyESQ1KyXR)qwYBXfs{tR%&}zVk zGqf7;kqoT{d^AI=0UyiIYQV=cv>I?whE@YUk)hRqgEO=m@W~9V1{{*1)qq1Yv>LD} zL#qLYWoR|vQyE$f_;iL=13r_X)qu}tXf@z-8Cnhae1=v7zL25SfG=ifHQ-AbS`GMe zhE@ZNco46O$IDMPCPf6mZqz+W=78t~T)tp@xp zL#qKNWN0I^!46O!SAVaGG7tGLVz=blj8gStZtp;2qL#qK7&CqJV#WJ)SaPbVS z23#UTs{xnH&}zV?GPD|S=?tv~TqZ-S0hi6tYQW_(v>I^v46O!SAw#PHSIp3Az?Cwz z8gS(dtp;2rL#qK-&CqJV)iSgiaPLE=hE@ZvpP|)&Z8EePaDxo325g(5)qopjXf2HYw`s{yyp&}zVKGPD|S+YGG++%7|_0k_Z4 zYQP;bv>I^746O#-DMPCPch1miz+E!58gSPPtp?mJL#qLI&(LbXJuNch46Oz{C_}3O56;kPz(X>$8t~8z ztp+?SL#qJ~&(LbXBQmra@W>3U20SW5s{xPB&}zVAGPD}-*bJ=(JT6140gunnYQXjx zS`FACL#qKhW@t6w2^m@qcw&ZD1D=$j)qp2wXf@y|8Cnf^YKB$=cFNFdz|%6c8nAPQ zRs)`%q1Aw0GPD}-j0~*??3$s~fZZ~*8nAnYRs;6P&}zUlGqf7;tPHINJUc_H0nf?M zYQS?dv>Ncd46Oz{KSQelFUZhpzzZ|98t|eFtp>a}L#qKV$Ncv46O#dD?_UR@6OO_ztp>a=L#qMr&(LbX{ux>gI3Po-0S9Ji zHQ)moS`GMMhE@YUl%dst4`*mK;3FAY4ftq=Rs%kkq1AwoXJ|FxpbV`Bd?G`u0S9Mj zHQI@DhE@ZP$k1xQkr`SI_S`9cZL#qMDXJ|Fxj~QAG_)~^f z1OA+$)quZbXf@!k8CnhaTZUExPRP(|z~3{p8gOEURs;T#q1AwsGPD}-&kU^w{3}DN z0Vii@HQ}bWfYWAZHQ;m^S`9dThE@Z% z%+PAU88U3%cnqAe@uXR^*_-|MTdNlHS`9c;hE@a4oT1f#vt(#B;H(*14cIC}s{v=r z&}zWhGqf6Tjts2^oHIkK0q4rlYQVWOv>I@p46O#7H$$rd=gZJ)!1*(@8gPLOtp;2$ zL#qK7%Ft@Sg)_7oaFGnH23#~ls{t3w&}zWNGqf6Ti43gI@k z46O!SHbbicm&?#I^D46O!SD?_UR*Ur#tz;!aT8gShVtp;2#L#qK>XJ|Fx`Wadc z*d{}(0XN9dYQVM`S`D~ihE@Z%%g}1TjWVI^h3^!>!25!@M@;_f6tp?mSL#qL|%g}1T?K89*aEA=72HY`2 zs{wb)&}zV)Gqf6Tmkg~2+%-e10e8#LYQWtyv>I@a46O#-GefHZ_sY;}z`ZlH8gQQs ztp?mTL#qMz%g}1T{WG*0@PG`h20SoBs{s$n&}zVgGqf7;kPNK`JTybA0T0X2YQV!Y zv>Nb;46Oz{GDE8YkIK+$z@sxfr12PdOykM_e0{VU@YoEk20Si9s{xPC&}zW;8Cnh4 zAw#PHJ7#D#;0YO84R~UPRs)`tq1AvVXJ|FxDH&P~cxr}L19r;LYQWPnv>LE;hE@Zf zo}tx%T{5&9@Qe(t2JD)l)qveHv>LE`hE@ai$k1xQGc&Xr@T?5220S}Ms{zl+&}zVQ zGqf7;ybP@dJU>IL0WZkVYQPIKJge~-cv0iY|9pM48t~!_tp>a#L#qKV&CqJVo*7yV z*egS;0efd?HQ;3#S`B!4hE@Y!k)hRqS7vB6;8ht~4S02iRs&v>q1AxbW@t6wbs1U> zczuRe1KyCK)qpoNcP46O#dJHuNVkAe3zp8U_(N2>wv&CqJV`!ci|@cs;~2JD}q z)qn#sv>I?=hE@YUkfGIp4`ygJ;6oW&4ft?|Rs%kgq1AwoW@t6wV;Ncv_;`j^0}jg2 zYQQHlv>I@5hE@YUnW5EyLo&1)aA<~B12$!7HQ=xetpI@9hE@ZP$I@l46O!ik)hRq(`INj;B*;U4LE&I^M46O!im7&#uvt?*C;OrS%4LC=JRs+tNq1AwMWoR|v+!S-S`D~JhE@YEnxWNzi)Cmv;Nlrt z4Y)*xRs$}Xq1Av(WoR|v(ivI}xJ-st11_7P)qu-oXf@#S8CngvLWWiYu9%_KfGcHa zHQ>q_S`D~LhE@ZvnxWNzt7T|4;OZG#4Y)>zRs*h?q1AwEWoR|v+8J66xK4&v1FoB) z)qv||XfXf@!D8CngvQ-)Rp?wq03fV*U9HQ=rpS`D~chE@aao}tx%dt_)e;GP*;4Y*f^ zRs-&xq1AxLEOhE@Z1%+PAU6Ed_K@Wc$Q20ST4s{v2W&}zU_GPD}-)C{c#?3AI^fTv|>HDKoq ztp+?jL#qM1WN09UXY>HfEQ+HHQ+@VS`Bz{hE@Y!lA+armu6@+V9yM#2JDrg z)quS-v>NcT46O#dJVUDiugK79z$-Jf8t|$Ntp>b0L#qL=$D&S`Bz#hE@aKpP|)&{WG*0a6pDu0}jm4 zYQP6Fv>Nci46O!yC_}3OAI{Kfz(+E)8t~B!tpI?ohE@X(&CqJVrVOnH9G0QgfKO#;HQ>`3S`GM2hE@YUo1xW!&t+&e;PV+; z4fsNaRs+76q1AvdWoR|v%Nbe?_)3OW1HPJ})qt;MXf@#Q46Oznk)hRqBQvxb@bwI> z27Dt!s{!B4&}zW9GPD}-?F_93d?!Pz0pHEgYQXn0v>NdJ46O$IAVaGGKg`f-z>hMt z8t~%`tp*&Gq1Aw+Gqf6TOomniev+ZpfS+b)HQ;9%S`GMlhE@Z9k)hRqUuI}E;8z)1 z4fu72Rs(*Mq1AxjW@t6wcNtm@_}1OAYq)qrC&v>I?+hE@ZP&(LbXA2YNX@TUx| z2K+fgs{wz>&}zV6Gqf7;w+yWYoRFc_fWK#GHQ>Yytp@xfL#qKNWoR|vpBY*W_*aHj z15VD+YQQNOS`9cgL#qLsEt%i{*w_P`XJ|FxG#OeA*djx#0jJH-YQX6-v>I^w46O!i znW5EyGh}Er;EWks4LDPVRs+tQq1Ax1WN0I@Z46O#7 zGefHZ=gQD(z_~ND8gQNrtp=PoL#qMj%g}1T`7^W{aDfc123#;hs{t3v&}zViGqf6T zkqoT{Tr@+g0T;{AYQV)av>I@U46O!SGDE8Ym&(v;z@;;^8gQ8mtp;2+L#qLo%g}1T zis{vQa&}zVyGqf6Tl?<&0Ts1?h0awe=YQWVqv>I@Y46O!SGefHZ z*UHdpz_l~98gQKqtp;2-L#qMT%g}1T))`t2xPFFK1GdS~YQPOLv>LE&hE@Y^n4#5x z?J~3)aH9;Z2HZG9s{uF3&}zUI@$46O#-Izy`g zx5?0Iz-=?M8gRP|tp?maL#qLI$k1xQ9W%5VaHkBd2HZJAs{wb(&}zV4Gqf6Tw+yWY z+&x390r$wzYQQ}+v>I@)46O#-J434h_sP&|z20S=Js{s$m&}zU#Gqf7;unesRJUm0I0guSgYQQ5iv>NcJ46Oz{Izy`gkIB$# zz+*GC8t}Lbtp+?kL#qMXXJ|EGhYYO-?3kg|fG1>VHQ}&}zVoGPD}-;tZ_@ zyd*=b0WZzaYQUZuS`FAML#qLMXJ|FxWf@uxczK3a174A#)qq!KXf@zf8Cnf^b%s_0 zUX!8KfY)YdHQ;p_S`B!8hE@aKkfGIpH)d!x;7u7?4cI3`s{#9FXfb3L#qMr$k1xQJ2SKz@U9H42E02%s{!xH&}zVYGqf7;z6`Af zygx&$0sCiYHQ;~@tp*&Jq1Av7WN0tp*&Nq1Av-W@t6wkPNK`9GaokfK3@%4LB@As{xNb*46O!yF+-~XU&_#Gz?U<$8t|12tpNd146O$ICPS+Mzs=BU!0$4&8u0rJtp@xdL#qMDW@t6w zxD2fZ9G{`pfIntvHQ-MfS`GMfhE@aqlA+arzh-DP;BOgP4LBh~s{wz{&}zVm8Cnha zM}}4dPRh_~z&|sz8t|_Stp=Q&q1Av>GPD|SYKB$=Hd`vc|FN+LHqX#%z-cnH8n8u% zRs&9(q1AxXWoR|v^ch+W*fK+_0cXh2YQPyYv>I@x46O#7IYX-fXUWiNz*#f28n9J{ zRs+tKq1Ax1XJ|Fx92r^-IA?}d1J0G9)qrznXf@zG8CnfEZ-!O_&X=Lpfb(Z)HQ)jn zS`D~hhE@YEl%dst3ukCG;364X4Y+8ARs$}Uq1AwkXJ|Fx5*bLEehE@ZfmZ8;voinr=@bnC=2JDid)qrPYXfaz zL#qL=%+PAUt1`42@ahb$2D~Ois{yag&}zWzGPD}-`V6fGydguY0dLIEYQUQ^v>LEa zhE@ai&CqJVei>Q~cyoqU1KyIM)quBVXf@z%8Cnf^dxlm6-jSizfOlqSHQ-$tS`B!2 zhE@aKlcCjs_hx7{;C&fd4S0WsRs;6W&}zT|8CnfEFhi>WAIQ*Zzy~w58t|bEtpDh<@UaZ727Ek2s{sdPXf@yy8CnfEI76!epUlu|z#$o04LCGIs{xxb zv>I?&hE@YUm7&#uPiJT~;4>Lo4ft$^Rs%klq1AxTXJ|Fx3mIAs_+o}u1HP1@)qpQ& zXf@y~8CnhaYKB$=zLufYfWtGi8gN90Rs)XA&}zWfGqf7;jSQ^@d^1C<0pH5dYQVQM zv>Nc846O!yH$$rd-^8t{V*tp@xsL#qKl%Ft@Sk2ACya8!m?1CGwnYQQlW zS`GL~hE@Z9nxWNzpJiw@;O7}y4fsWdRs(*Sq1Aw2WoR|v*BM$3_)UgZ1Ad#K)qvk+ zXf@#X8CnhaLxxrZj?K_&z;PK`4LCkSs{wz^&}zV+GPD}-=M1d|{3S!H0e{WVYQWzz zv>I?ihE@aqo}tx%6En0L@Q)0w2Aq_k)qsCyXf@zp8CnfEIYX-fr(|d~;M5GQ25h!; ze*a@*4{V;H)qvAvXfI^H46O!SEJLdS7thdY zz$G%Y8gR)Btp;2wL#qLo&d_SWWiqrHaM=v423#&fs{xnK&}zUHGPD|S#SEI^L46O!SEkmmTSI^LDz%??o8gR`Ftp;2xL#qMT&d_SWbuzRXaNP{8 z23#*gs{vbQXf@#a8Cnh4CPS+MH^|Uxz_uA$4Y*;3Rs*)n&}zVqGPD|S;|#3^+$2M* z0XNOiYQW7hv>I^p46O#-B15YIx6IILz^yX08gT0jtp?mCL#qL|&CqJV?J~3)aQh6c z2HYV-s{wb+&}zV)GPD|S=M1d|+$BS+0e8*NYQWtxv>I^t46O#-BSWhJ_sr00z`ZiG z8gTCntp?mDL#qMz&CqJV{W7!~aQ_Ug20S1`s{s$p&}zVgGPD}-;0&z>JS0P_0T0d4 zYQV!Xv>Nd646Oz{B15YIkIc|&z@sv>8t~{0tp+?ML#qLg&CqJV<1(}w@c0a^25g_9 z)qou`v>LEuhE@ZfkfGIpCuV3h;7J);4R~^fRs)`rq1Aw=W@t5FrwpwIJS{`30Xt`C zHQ?zPS`FAGL#qML$k1xQt{GYl*eye=0lQ~tHDHentp+?ZL#qML%Ft@Svoo|B@SF^- z20S-Is{zl;&}zW*Gqf7;f()$&yf8zn0WZqXYQT##v>Nb|46O#dG()QaduC`gV6P0V z2JD@o)qs~}Xf@#F8Cnf^MTS-bUYViQfLCQ`HQ?15S`BzjhE@Y!o1xW!*JWrm;Pn|= z4R}L_Rs-Icq1AvlWoR{EpA4-A?3a$L#qLA&CqJV+cLBo@b(O? z2D~Ffs{!xK&}zWDGPD}-?hLI4yeC7e0q@PwYQXz4v>NdK46O$2pP|)&12VK4aA1a3 z13r+U)qoFXXf@zN8CnhaaE4X`K9Zr;fRAQqHQ-|zS`GMkhE@X(%Ft@SCo;4eaBzlJ z13sCd)qq1Xv>I?|hE@YMWoR|vunesRd@4h$0iVv$YQSeQv>Nc)46O!yE<>vUpU=>0 zz!x&K8t}yotpNb>46O$IGDE8Yzsk^R zz^^m38t|J8tp@xyL#qM5%g}1T?=!R-@P`bo1{|BA)qvwNv>I@HhE@aqn4#5xKV@h& z;LjOa4fsojRs;T;q1AxDWoR|vgbb|){5?af0Vif?HQ*l^S`9cUL#qM*%+PAUzcREM zaB_xL15U}%YQU)(S`FB2nf(68#va%_L#qL&$A%S`9c~hE@a4pP|)&3uI_D;DQ-i4Y*K-Rs$}aq1Awk zWN04#S`D~fhE@Z%&d_SW^)s{@uuXI^346O!i zm!Z{w8)axU;KmtR4Y)~$Rs(LDq1Aw!WoR|v<{4TIxJ8Cm18$k2)qq=NXf@#08Cngv zO@>wjZkwUifZJtgHQ@FcS`D~EhE@aan4#5xJ7s7!;LaIZ4Y*5&Rs-&uq1Ax9WoR|v z?ipGQxJQOo1MZoj)qs0tXf@#88CngvPli?l?wg_2fcs@=HQ@dkS`BzWhE@X}n4#5x z2W4nA;K3PM4R}a~Rs$ZIq1AwgWoR|v;Tc*DctnO)10I>7)qqE3Xf@!`8Cnf^Oomni z9-E=nfX8KMHQ@0XS`FAfL#qKhWN0;D#|*6oJRw7?0Z+`(YQU2+v>Nc_46Oz{B}1zL zPtDM3z)l%j4R~6HRs(j<&}zWbGqf78ONLeho{^!|fL$}R8n9c2Rs(j=&}zUQ8Cnf^ zW`Nb+46O#dF+-~XZ_3bWz&;sT4cIqBs{#9EXf@!?8Cnf^ zONLeh-kPD+fVX96HQ?MutpNcu46O!yD?_UR-_Fo#z;`mV8t~l=tpGhG@WTwP2K*>Ps{udG&}zU@8CnfEIzy`g$7ERs(*Pq1Aw& zXJ|Fx7a3X&_+^Gx1AdjE)qr1TXf@zB8CnhaZH86@ewU%ufZu0mHQ)~!S`9chL#qMD zWoR|v_zbNE{4qnT0e{NSYQUc}v>Nc246O$IHAAZbf6LHnzzG>z4fuP8Rs&AV&}zUx zGPD|SQifIo{+XfGfPZCZHQ?k7tp=Quq1Av>Gqf78*|PclkBvRBd4^U4PLrY4fGsk# z8gSYStp=PfL#qL&&(LbXmKj8CnfEONLeh&YGdsfUPpL z8gRA@tp=PuL#qMj$k1xQIWx2xaIOrk2An%Xs{!Z9&}zVWGqf6Tz6`AfoIgXW0T;;7 zYQP0Ev>I@s46O!SI76!e7s=3Sz(q5(8gQ`;tp;2?L#qLo$k1xQB{Q@daH$Nf23$Hr zs{xnE&}zVCGqf6TxeToaTs}jq0awV-YQPmUv>I@w46O!SIYX-fSIN+7z*RG}8gR7? ztp;2@L#qMT$k1xQH8ZptaIFlj23$Kss{z-^&}zVSGqf6Ty$r1eY@MOifa_;yHDH?z ztp?m6L#qMXW@t6wh8bE7*e*k>0XNFfYQT*%v>I@e46O#-G()QaH_Om!z|AwX8gPpY ztp?mOL#qL|%Ft@StuwS5aGMOR2HZA7s{yym&}zW#Gqf6ThYYO-+%ZF|0e8yKYQUW{ zv>I@i46O#-HAAZbcgxUfz}+*n8gP#ctp?mPL#qMz%Ft@Sy)(2LaGwmV2HZD8s{!}R z&}zW_Gqf7;fDEk$JTOD60T0U1YQTdtv>Nb`46Oz{G()Qa56jSMz{4}N8t{k=tp+?Y zL#qLg%Ft@SqcgM`@R$s(20S)Hs{xP8&}zWrGqf78eTG&8cF53bz>XPO4R}I^Rs)`x zq1AvVWoR|v$r)M=cuIy=1D=|p)qtHcv>NcV46O$2oT1f#r)Ow2V3!Q720SA}s{y-a zXf&}zVQGPD}-+zhP-JTF750ng9SYQPIJ zv>Ncj46O#dC_}3OFV4_vz)Lc;8t~E#tp@Cwq1AxBGPD}7cZOC2UY4QNfR|@zHQ*H) zS`Bz*hE@Y!m7&#uS7&H7;58Xq4R~#aRs&v_q1AxbXJ|Fx4H;Sucw>fE1KyOO)qs66 zv>LE)hE@ai%g}1Tn=`Z;@Rkg%2D~*xs{wDz&}zWjGqf7;jts2^yfZ_q0q@GtYQVcQ zv>Nc946O#dH$$rd@5|6?!22__8nAzcRs#;m&}zVe8CnhaK!#QWKA54^fDdJ8HQ>V; zS`GL}hE@YUnxWNzk7Z~z;Nuxu4LB%6s{xNcK46O!yIzy`gpUKc_z-KeG8t}OctpNc!46O$IEJLdSKhMx=z%Mei8t}^utp@xmL#qM5&d_SWZ!)wR@Y@Wn2K+8V zs{y~y&}zURGPD|SY=%|?j?2($!0{Pc4ftb*Rs;T&q1AvtXJ|FxFBw`5_-lq%1OAqw z)qoQ+v>NdD46O#7n4#5xe`IJi;G_(#2K+Nas{#MY&}zWR8CnfEB}1zLr)Fq1V6)}& z`yU&7VDk*E2An2Cs{vbNXf@!p8CnfEU4~WzPM@LGfGsn$8gPaTtp=PiL#qL2%Ft@S znKQH+aFz_M2AnlRs{vbOXf@z$8CnfEdxlm6&XJ+jfOBSOHQ-zsS`9dNhE@a4lcCjs z^JZu@;CvCz(c9ptjVR?{t$AS^>p@|?LT$|p+*r4st^C|8*4Dhx zjrE|gUa7X`1$Vtj`MFoFt$E=a>(+~w>s4xN4xq6f6xOTO)*M1(-FmU|bFWrga|n&~ zps-%Ow&oBT>%rmH)~KyHgvPo}xRy0*YYw5Y9vs$d)z%zBW8EfP%i6UyhtOCL4(oMl zYYxG6xV3d_YYw5YZWFF$z1o^XXsic^b?e%iLujnqglk#9w&oBT>%n2&rncq~8tWn9 z);6fEIfTZ#ZMc@UwKa#(SPu#74Qp!-p|NfouBBaV%^@__L&AEa+L}Xf9d2#o+L}XX ztlNfb*`&7S5E|%^@__ZNs%}R$FrjjrEYQ-n_Qv5E|>IaBExC)*M1(-7Z|q zmbEp9&{#Kx^;WethtOEJ3)ixBZOtJx)=go(O>NB~xDL0rZEejVG}i6HwQN^ga|n%f zQ&?|bTXP7Fb-QpaJJi-3LSx+&);reL971C~A>7(dwKa#(Sa%B7vU6?CAvD$#!g`n5 znnP%;JB4f6wYKIE8tVyRy<2U~A-E2=wtH>OAvD&V!nN#CTXP7F^@OnAv$p0C8tYEs zTK1}~IfTY~LRjxzTXP7F^~7*%`_$GPLSx-IT+6<-HHXkxPYmn*YHJRmvF;qMW&hfm zLujlghV=opHHY9j+}eS)HHXkxcMjKbP;Jd2G}aTt`rz7{Lujl!hif^cw&oBT>xp4~ zXl>0QG}e>CtsPcda|n%fmvAkI*VY_DV?8OXkEpFVgvPo{xRxVpYYw5Yo)p$c)z%z> z>u_sF*VY_DW8EcO%Q3YzhtOD03hQHQYYw5Y?h>x$xZ0XSXsjoN_3^behtOF66>hD4 zZOtJx)?LH3bf~R4gvR=>uEvMGj971FLS6FwdtvQ6odP=yp(`suDp|S2BuBCHr z%^@__Q^NZ6+L}XXth=hxO8g6p2;`hwb; zLvY={TwhpQa|o`7m+OmaYYxHn*m8YwZOtJx)~!2~%`d5~IRw|e%JrqSHHYAOK)LQ& zTXP7mN0jScwKa#}dR)2gU0ZVqt~<0WZtb$#nnQ5it6X1RTXP7m2bAk8YHJR`^@wtP zWo^wNxE@!oud1y%gvNSMhqC$AwKa#}x>vcrrncq~Tn{MM*Vfj(|M`IH5#{>2+L}Xf zJ+53|Ut4nst~<0WZtaHJnnQ5it6bk$TXP7m2bAlZYHJR`^@wuar?%!0T#qZ)eQRqD zp|Nh=v25P2w&oCA_b%5r*VY_@>w)F^mfD&_a6PhI-&$L92(HJM>)UE;4#9QDmc^~z zUR!eru6vj3J8EkV!S%p$eP?aWA-En{uJ5X?IRw|^%k|y0HHXkx59(Mpzo)k55M1{z z*Z0=e9D?hC<@&zbnnQ3svRvO^TXP7m$CvB=wKa#}x?{`Y)&|tp9D?iK<$7Rk%^|oR zSgs$atvLkOBg^%JwKa#}dVINlsJ7-1Tz4y*KU`aL2(J5->qly94#D-%a{Xv+%^|oR zRjwbatq1(`0oRku_2acQhv2$f%i`7s)z%z>>ptcBiQ1Y&a6PnK53a2_1lOa=^^>(V zhv0g0xgJtma|n%f>+WUqp|v%K;JRsM-P4#D-5a{X#;%^|q%-mk+jzhv0g2xgJ?ta|o`dlmDtOTYI;*<`7)>E7$MU)*OQCVdeV$ z+L}XfJ*HfLP+M~duBVpk4{K`we|>)7qLta6PPCe^y&_2(HJJ>(6Uz4#D-* za{WbZ%^@__gWH$QzpSk}1lK*w^;fm^=zl)ox_`O;y0+#JTn{hT-_+I|g6py6`rF!? zLvY=`WpQiY)z%z>>z?KM``VgAaNWOL|4>_V2(E{h>#?;phv0f_xgJ+ra|n%fn+|33 z@wGLF;JR12{;{^^5L^!^*FV+P9D?f+<@)E^nnQ3su3Z08TXP7mJG3lr?bq6xLvY=z zT>n;Ea|o^nl$LvTH!T>n*Da|o`-mFvm1HHYB3L(AgUrqtFPg6m%8dTMRWA-En;uA43Y z-``I0f6H+Qu1A#X=Cw74;CfuSo~E|u5E|m_w z1lJ?W_4Kthhv0gAxo%loa|o_Gmd$6VtvLkOz038CwKa#}dSJPpskY`2T#qc*GuPG} zg6r|+dY0OnLujlAcPyLFT3d4nu6vj3R<$*U;Cf)Wo~^d#5L}Ne*R$8w9D?id<$8|V znnQ5iv1~qPZOtLL?p?0us;xN$*8|J-+_g1_;Cf`ao~O3v5L}Nh*Ynoa9D?g^W%K!J zYYxG6pK?8aZOtLL9$Ky!sI55!*Q3hyg0(e=;CgboUZ}R_5L|aFn=f2ja|o{cl!xzO zRBg>6xE@`um#(cj1lLo_^)j_Jhv2$<*?igBnnQ5iw_Gn*TXP7mo67a_wKa#}dUUy7 zp|<7_Tu&+2E7sN=LSsF+d)a)Y+L}Xf-M3t?Tw8MpuA9pBDz!C-;CghqUbVL75L{0w z*Q?dm9D?iaW%Jc*YYxG6-*UZ1ZOtLLZYtMn*47+?>(S+Ut=gJHa6P45uU%Vn2#s}{ z9%b`&YHJR`b-!}GZf(sWxE@xn*Q>2L1lMEAb?e%iLvTH{T(4hSa|o_`l+D}J)*OQC ze&u?D+L}XfJ*-@}t*to(*JH}{hP5?^;CgDgZdY4#2#xjN9%b{5YHJR`b-!}Gac#{Z zxE@xnH>s^T1lMEA^`^Bohv0f@x!$a{<`7)>D4TCyTXP7m`<3f0YHJR`^{{fiWo^wN zxE@okx2ml<1lLo`_13jDhtOCLX|IRw`u%JrVLHHYAOT)Ez>w&oCAcPN|h zU0ZVqu6vd1eQIkC!S#T0y>D&JA-En-M!Zhv0f(x$aO~a|o_Smg|nSHHYAO ze7QcMw&oBT>meP><|o$H9D?iK<@%)BnnQ3suw0*9TXP7mN0#eTYHJR`_4smqYHiIS zxb9ds?^IiJ2(EjV>(gp$4#D-na^1PM<`7(uEZ3*k)*OQC@#VTpZOtLL?p8KGqqgP{ zT=yy0U2AI&!S&E`-L1Cf5L}Nc*WGJt4#D;0a^0i0<`7(WE1RELTXP7m`;_amYHJR` z_0V#Cc5TfexE@um&#A3B1lNuIRw{J%JoIHHHYB3d)fTr+L}Xf-M3s{Qd@HfuA9pBrL{GO;Cghq?pa%N z2(G7;>t3}rhtOCL>0UPPU0ZVquKSkj%W7*5!F5x)zPz^P5L}Ng*H_fm9D?g9<@(Cn znnQ5iy=;C}ZOtLL?pv;}uB|x)*G=X6n%bH}a6P(QUt3#q2(G7;>+5Q34xzDb+oNoL zeQnJlxb9c3Z>X&~1lPmL^^LVPhv0flxxT5k<`7&@E!TZ&YYxG6kFt5++L}Xf-LG8t ztF1W%*Tc&7&9ya$;Cf8CzNNP25L{0!*SFTz971C~q(|BOw%VFQaNVz5-(FjD2(E{f z>pN;|4#D-9a(!oQ%^|p+TCVS^tvLkOJ<8^H*VY_@>we|>p4ys2a6PPC-&-%bJ4#D-*a(#bo%^@__P3_C({cCFu!FA7aJ)pMc5M1{!*8^*74#D;Ca{WMU%^|oR zTdp6htvLkO?aSs5)z%z>>z?KM;o6!*aNWOLKT=zB2(E{h>ql#A4#D-Drn@aNVn1KT}(C z2(AZ|>t}0g4#D+^a{XLw%^|oRSFWG0tvLkO9m?h})Ycq=>t5yh#oC%fa6O=0zf@au z2(Cwz>z8Y54#D-fa{Wqe%^@__?K+mtU#+b<1lPUG^=q{?hv0f(xgK6ya|o_Smg^C< zHHYAOe7PQ3TXP7mJC@B~udO)**S*X28?`lu;Cf)WezUgb5L}Ne*KgI<9D?id<@)W~ znnP%;n>v=w->I!R1lPUG^}Dq-hv0f(xqh#<<`7(uEZ6VX)*OQC@#Xr1+L}Xf-LY)` zVQtMJxb9u9KdP-c1lI%0^~bd}hv0f-xgJ$pa|o`-m+R5BHHYB3TiJX}ZOtLL?o+Nm zsjWE#*F($or?oYQ;CfWK{;am<5L{0#*Pqwc9D?g^W%Dm;YYxG6pK|?WZOtLL9$K!y zs;xN$*Q3hy*R?f=;Cgbo{-(C(5E|=t-OJ|R*47+?>%QgsyV{yVaNSg{zpt%11lOa> z^$)c*hv0fjxgJ|va|o`xm(9o3)*OQCzU6v+ZOtLLZYtM5*47+?>(S-oQlZX|NB=(*}ELboJii#SOMWcW~viEOBkNuqY z|D0nV>^^#3GkJfHne4eU7ay`^bF7zzy!!qCfG?`)b7hF;tHwx$VT=*iZ*m?nfNef_k)`Rz;-!q9VC-`+GK485rJ9ZVC# z&?{Qs(KI0py}tFGOcTP;)B5IjHcbda&uM)Z(}XbeqSm{bCWN6^w7#opLKu2|>${mI zgeiT>^uGDsO%uY5t^}S6K!qC(E=Jzp82t&_p zeP7drF!bWqyO}10p;xxPpJ_rEdPD2`nWSS6$-q3mv(}Xbe^uGC?rU_x_xvlpyO$b9TZoRi@LKu2w>wQcU!q6L9?`xV6 zrt~Q@`sVwYCWN8qwcg(}Aq>5w^#P^{Vdzz@4>U~(Lr=6m$TT4gJ)>`auxUaVdS2^8 zOcTP;OIknJG$9PVs`W!m6T;9Ftq(O#2vhp{8GZAInkIyy=e0h}G$9PVr1is06T;A| zS|4tj5Qd&;{czKSF!YSR`4OfGVd#0SA7PphhF;S8k){b@=vA$cG))LYPqcoNX+ju! zX5aiM(}Xbe{ML^)O$b9TZGE(9LKu2=>tjq4!qA&qA8VQrhMw6se~f8D75y_0vrg!qA&rKf^R3OzG=q z_03N(O$b9TX#GsngfR57*3U9c2t%)F{cO{OF!biuCz>XNp=b5YpJSR3hF;M6xuywW z=w+>+XPOX(Ueo&drU_x_&8=Txnh>V+DYN_LFEmXELoaOoBGZI0^zzm(HcbdauWkJj z(}XbeWb2ojCWN79_sw5snh=Iw*!m>XgfR5-)-N|r2t%)J{R-2BF!W^WlT8!Cl)ip; z-~5%P31R4ktzTuD5QbjfdYWlM781%`=*iYIOcTP;v-{?+HcbdaFKqo9(}Xbe z^4704O$bA;ZT&jagfR4E>(`qmgeiUFw7&TpOcTP;b6THbnh=Iw)cRD@gfR4q)~A^! zgrV2BexqqZ73#FLrU_x_xvl4!CWN6Ew?5xAAq>5;^#!I0VdxF5FEmXEQ~I-U%@grQfpey?dl79{dL(gmd0n>yq^pe&e zG))LYuWJ1v(}XbeMC%WmCWI+{yMfygrR5j%|B+E5Qd)D`s1bvVdy2TKVg~>hF;bBlcot_=!w>!GEE3W&+MCj+B6{y zJ-_v5OcTP;OIv@|G$9PVy7fh-31R3>tv_d)5Qd)FH~+k8LKu2}>qVvsVd$l;7n>%8 zp;xzFVwwtC5BgrO%}|JpPmOzE4Z_04}{nh=Jb)B3lj31R3(t*31R3Bt*wlRhgrQfq{rE5Fls5w_12~dVdzz@w=qo!Lr=8c)-)ju zJ)>{FooPZCdS2`8O%uYnh=Iw)p|$MgfR3(>sy&7grR5l&2Md*5Qd)L`ZlHs zVd$l;cQQ=~L$7YVvuQ#YdQ(O$bA;ZhZ&S zgfR4`)^{{b2vhp>S$*?6nI?px7qq^!X+ju!S?jx)CWN8awBFS;Aq>5_^<7O9!qBt& z=65qq2tzMueRtD@F!Zw4_b^QeL$7IlPt$}j^yb$0GEE3m`leZZ^Lv{ngrOI-zK>}_ z7j#-8geiUc?7sOPrU_x_g{}8AO$b9TZ@rgkLKu2&>%C1A!qAhg_c2WfL(lG; z?`xV6hF;iuKhuOT^zzpGnuG$9N<+4?}!gfOLVn%y@)$TT4gy|DGcrU_x_ z<*g4fO$bA;ZT(==gfR4E>xY;ogrR5m%?~wA2tzMy{ZP|{F!b`)hnXgXq1U#4m}x>7 zdb0K5rU_w6-!iRl{&3TTF!Y?(N0=srp%=A&glR$;dPVC;nkIyy*S9{>G$9N!VE*!qDqmA7h#jrt}%p`{u`*CWN8qwtkFhLKu2+ z>&KcVgrQfqew=AS7E6T;Bb`{vIu zO$bBJZGD1iLKu2+>t~uKgrQfqewJxM75QbjT z`njeFVdzz@pJ$p7hMs8seA9$5^o+jw3rrKj(DPcq&@>?oy`=SvOcTP;t6IOsOj4grS$TewArL75#_3KO%!q7AO=C3zR2t&_r{RY#7F!a*arYL9pO$b9T zXg%9BAq>5&^_iv#Vdyoj-)x!?hTh!zEv5-!O5ZZ8Z~j)(gfR4i)@PX}grS$Uew%4R z70;y z5T^7Qv-{?AOcTP;3tP`MO$b9TZ#~a6Aq>5?_4%d=Vd%-$7nml5p=bBaFEmXELoaOo zF4KfC^zzp4HcbdauWkJv(}XbeWb5~uCWI+{%j~}S`%DwU&QNG$9N<+4@7K31R5jee(~SCWN6Eww`aA5QbjfdVy&|7 z(}XbeqSl`=O$bA;X#H8!gfR5_))$#3geg61df)tWrU_x_xvf8Mnh=Iw+&2!CVdxF5mzXAmp{MuFzhIgWhMwE{V$*~$^y1cEG))LYuWbD#(}XbehSpy;O$bwZ z^Yp&?S4LDWGffCnde)4-`Et{QF!a3E-!M%GLoaFlP1A%h^s3h1 zGEE3WPqhBFX+ju!M&JB9rU_x_d9A-|nh=Iw()xR*31R3}t-o)Y5Qd&;{R7j4Fr_!o z=$rr0G$9N5$^-oL_!q5|~SC}S*p=b2XSDGe-q35+;WttF% zUefxfrU_x_RjscuO$b9zwEmfCLKu2x-~8vM31R5@t$$&f5Qbjb`j@5&Vd&MZuQW{v zLvL#RE7OE9^vu5buT2xe(DPgW#xx-ey|ndjO%uY=ryhXWSS6$-rV}nrU_w6Z=TgRzt%J%485TBUrZCi(92r?)ifaty{7fwOcTP; zn_I6lO$bBJ>YM-FG$9PVp!IswgfR57)*DO{!q974Pnafzp*Od_&NLxR=~=V;=KnBF z2tzMy{ZG?`F!b`)8%-0!&}&=&%QPVjJ=yx-rU_x_*?sftO%uY<3tQh{nh=Iw-ugz< zgfR5l*8ee02t!Y{zR5HpOzF+D`{p;BCWN6Ew!XzQAq>5|^(NDVF!b8in@tnK(37nv zO%uY->}BtN|L?IwFKoS~X+ju!dF!oA6T;AITW@We5Qd&?y^U!?_^;mi>K!kc zcGZ7R#P^-I-gR5kgb?}~+<$-mpWeg|30uS{_hjJooPY{-L2i;G$DlU*6v`M5JGorcQj21p}Vy^nI?qL-P)Z^6GG^2 z?JlMXA#}I4t7$?QdQrD_SJQ+Lx?8)OX+j9Su3EdhX+j9yt=+>kA%yPM?rEA3LU(KT zGEE4fyS00pCWO%4+I>tDLg;SozNQHwbhoyfX+ju!MYnc8(}WPZTf4t$LI}OCT6=(L zLI~ZhJR15Fb`=x*&G(}WPZTRYe^ zA%yPM4lzv#p}VyQn(8e`yr+YA@sGS4>e5)p(jc|)HET4zM=GCrU@bRWa)>Q zCWO#y>v!bCO%p=sYfC@eG$DkZD1C%!LI{0B=|`9*gwT_vA8DEphMv={9ch{nLU(JA zGEE4fyS1ZC6GG^2?a`(QA#}HPv}r;J-K`yCnh-*FYsZ=`1-K{;zG$DlU)}Cyd5JGor$C)OC(B0Zo zOcO%rZtbb22_ba1_B7Lk5V~7C-ZUW$y`o!tx@kfP-K{;tG$DlU)=n@@2%)>RXPPF2 z(B0azOcO%rZtdBo2_ba1cA{xQ2;Hqc$21{??$(}bnh-*FYtJ)H2t%*$)}C*g5JGor zFEC9Ap}VygnkIzM-P(&x6GG^2?Zu`EA#}I)64Qhbx?6jxX+j9yt-Z`NA%yPMPBKjh zp}V!0nmp}Vy=nI?qL-P#$Z31R5P z-P%mkgb=!0n`N31La(dVW}7C2(B0aZrU@Z*xAtb!gb=!0dy8p82;Hr{)ifc5?$*vS zO$ed8wYQljgwWmE+f5U~&?~#OvrQ91=x*&C(}WOuUA1Ri%b(j=x*(ErU@Z*xAu9{gb=!0TV$FLLU(J6O%uYCWO%4+H%u` z5V~9YhG{|w-K~AoG$DlU*1lz$5Qg5+t$o`xA%yPMzGIpYLU(K5HBAViyS49`CWO%4 z+V@QpLg;So2c`)jbhq|H(}WPZTls zOVfl9x_9W6rU_x_x!u~YOcO%rZtd5m2_f{lYV9|s2_ba1_FL105V~8t$}}N_?$&;1 znh-*FYpYEYLg;R7jcGy%-L0)PO$ed8wX01N!qAJmwcnd2gwWmEA50TM=ylcFHKqw6 zbhq|L(}WPZTl9-h=#|~t zI@5#@x?B6ZX+j9Su3B4fnh-*FYa2`xLg;R7!Zaa-?$)j|O$ed8wSSl5tTl=?ZLI~ZhU2mEYLa(dVZZJ&M1) zp?in!V44typ4+YMXqpg0cWbvYO$ed8wOgAegwWmEZA=qF=x%K%(}WPZTie+*A%yPM zZflwlLU(Jsm?nhK-P-L;6GG^2?e?Y#Vd%x(+8s<2Lg;Soj;0AAbhmaV(}WPZTf4Jq zLI~Zh-NiH^gznaMHBAViyS2NTCWO%4+TBbOLg;So?xqPLbhma7(}Xbe%5LqRrU@Z* zw{|bngb=!0ySHgV2;HsS$21{??$+*Wnh-*FYrB~ygwWmE{Y(===x*))rU@Z*xAp+j zgb=!0d!T7T7ReN7WW=x%L4(}WPZTif3>Ax!B*XY>v|z%(I*?j3rdX+j9Su6F1_rU@Z* z@6dxy6GG_Tp@*0zgwVZ1A8eWsLiY}Rh-pFy-8=M9(}WPZcj!Y+6GG_Tp@*3!grVnk zYY#I`2%)>R!%Y)H=x*)drU@Z*w|0bSLI~ZhJ;F30gznZJX_^p1cWXzQCWO%4+M`Sp zLg;SoDAR-xx?6j+X+ju!Nw;>iX+j9ytsP^U5JGor$C@UD(B0Z&OcO%rZtbzA2_ba1 z_Bhjo5V~7?ylFxR-K{;rG$DlU)}CmZ5JGorPclsiL$B)Ao@|;BLU(J&nI?qL-P%)3 z6GG^2?Wv{-A#}I)G}D9-x?4NmG$DlU)}C&f5JGor&oE60p}VycOcO%rZta<-31R4o zZtYp72_ba1_H5IH5V~7C(KI21?$(}Tnh-*FYtJ=J2%)>R=b0vi(B0beO%p=sZtVr8 z2_ba1_CnKy5V~7?k!eC0dPeWi7n>%8(7i)nVww;__YQrjX+j9yJM?9y2_bav(34CP zLg?P1FE>pHp?inE!Zaa-?j3rvX+j9yJM@*N2_bav&{vrzgrVnkYtu{Igb=!0d%bBw2;Hr{!89R+?$%B* zO$b9T>DEp)O$ed8wbM)!Lg;Sojiw19bhmc8X+j9yt-Z-KA%yPM&M-{~p}V!2rU@Z* zw>HZ(A%yPMW}7C2(B0aZrU_x_Ro&W~O%p=sZtX3m2_ba1_Eyt`5V~7C%QPW`?$+LB znh-*FYi~DA2%)>RvrQ91=x*&C(}WPZTRYb@A%yPM&NEF2Lr-*T?=VdWp}VzrnkIzM z-P#<}gb=!0n`@d7LU(KPOcO%rZtZ;2gb=!0yTCLdgznZZG))MhyR~Fk z=x*(srU@Z*xAra5gb=!0`?hI92;HrH$21{??$*9*nh-*FYu__X2t&{49r}IKgb=!S z=nqU2Lg?P1KQv7Up?in^$TT5@?j8DL(}WPZcj!+{6GG_Tp({)iLg?P1D@_wZ=-#2L zOcO%r-l0D=O$bBJ>(;I?O$ed8wV#bhmb`X+j9yt^LI`A%yPM{%V>KLU(I_GffDgyR~(u2_ba1_IJ~S5V~7i zZ<-K7cWWC=6T;9F-P(j{LI~ZhU1ypQLU(KbFii-dyS0CsCWO%4+D6la5V~9YmuW%> z-L3uGG$DlU)~+{A2%)>R8%z^I=x*&s(}Xbe%-*5@F--`edxzd+nh-+w4!zklA%yN7 zdW&g72;Dn$lW9T--8*!%X+j9yJ9N@CA%yN7y2U>B{`dbL8@hMsmZk|IbnnouOcTP; z^SiaJO%p=sZfzUWgb=!0+txH8gznb1GffDgyS4326GG^2Z3okY5V~92(KI21?$&N) znh-*FYqvH{2%)>R+n6SVp_g`RJDDbg(B0b3rU@Z*w{~08gb=!0+r=~?gznaEXPOW~ zcWbvdO$ed8wL6$5gwWmE9ZeHL=x*&!rU@Z*w{~aKgfR5#ZtX6n2_ba1wySAE2;HsS z)ifc5?$+*Rnh-*FYj-zI2%)>RdzdDK(B0ZSO%p=sZtY&C2_ba1c5l;!5V~8tk7+^} zdQ-P{U(XU2;Dn$AJc>ox_9WlrU@Z*@6i2B z6GG_Tq5GRAgwVZ14=_y#p?ilOXqpg0_YOVCG$DlU9eS{7LKu2}w|0nWLI~ZhJ=ioM zgznZJVww;_cWZ~5CWO%4+CxnfLg;SoFw=w(x?6jgX+j9ytsQQf5JGor4>wH+p}Vys zOcTP;OS`p4m?nhK-P$8f6GG^2?MTyv5V~7?lxac;-K`yEnh-*FYmYWf2%)>RqfHY+ z=x*&8(}WPZTRYY?A%yPM9%GsihF;yRJ=QcKgznZJXPOW~cWaL~O$ed8wI`S+gwWmE z6HOCB=x*&vrU@Z*xAtVygb=!0JI*vAgzna!Vww;_cWX~IO$bA8>eilSnh-*FYsZ@= zgwWmE(@hgX=x*&9rU@Z*w|0VQLI~ZhJ<~KHgzna!WttE|cWci!O$ed8wG&MfLg;So zIi?9=N*_9_cj$9X6GG_Tq0ci-2%&q2KHoGUgzg>s0@H*Lx_9UcO%p=s-k~otO$ecT zhrZY}A%yN7`V!NG5W08hOHC6(=-#0(GffCXFX+}zGEE4fyS0~_CWO%4+AB;GLg;So zWYdHYx?6jtX+j9yt-Z=LA%yPMrkN&$(B0Z}(}WPZTbp5;5JGoruQp8xLoe&rUSpaN zLU(JgHBAViyS3MuCWO%4+UrddLg;So4W%(B0Y_ zO%p=sZtZl_gfR4)ZtYE`2_ba1c7|y}2;HsCG))MhyR})S2_ba1Hrq5IgznbPG))Mh zyR|o)CWO%4+FMK$Lg;Sot)>YfbhmbvX+ju!bGP<3(}WPZTYI}{LI~Zhoo$*BLU(KD zm?nhK-P*aP2_ba1cAjZM2;Hr{!!#j;?$+LEnh-*FYjaE!Lg;R7u4zITdRFhyd8P>= zbnnpfO%p=s-k}$mCWO$vLoYN<2%&q2zRNTrgzg>sZqtMix_9V%OcO%r-l6X`O$ecT zhrZ7=A%yN7`hL@dF!X|M?E|I>A#}I)LDPf~x?B5@X+j9yt$o-uA%yPM=9?yj(B0Ys z(}WPZTU%(F5JGorA2Ce`p}Vz@nkIzM-P*@Y6T;BTy0wp+CWO%4+9ymCLg;SolcotF zbhq{?(}WPZTl=(WLI~Zhea18)gznZpYnl*3cWW1!CWO%4+UHCYLg;So^QH-5=r!Hi zBGZHrx?5Xpnh-*FYfDTMLg;So3#JJnbhmb~X+j9yt$oonA%yPMzGRvZLU(IlHcbej zyS1;FCWO%4+E+~z!qA($wXc~bgwWmEC8h}>bhmb?X+j9ytzBlC5JGorUpGw%p}V!q zO%p=sZf&V)LI~ZhEi+9Bp}V!^rU@Z*xAqOwgfOKqnbkY=o2CgNbnnn_nI?qLy+glk znh-+w4*ia4LI~YE^t+}BA$0H1@0liq(7i*yZ<-K7_YVDmX+j9yJM@R92_bav&>xv5 zgrOI7YdRpO_|u(B0Y!(}WPZTU%+G5JGort4tF@=x*(&rU@Z*w|0eTLI~Zh z{me8WgznaUZkiB6cWb{eO$b9T>(+j0nh-*FYgd{kgwWmEuS^p{=x*)TrU@Z*xAq&; zgb=!0`>kn02;Hq+WttE|cWb{hO$ed8wbiBxA#}I4#xx-ey{21RYnl*3cWYOhCWO%4 z+V4#hLg;So52gtrbhmbmX+j9yt^Lt7A%yPM{$!dELU(I_HcbejyR~ag6GG^2?JuSY zVd%}>+Fwl*Lg;SoZ>9+$bhoz7G$DlU*8Xmq5JGor>rE3v=x%L;X+j9ytxcFFgwWmE zb*2d+bhq{o(}WPZTl=SJLKu2h@6e5=2_bav(0`dGgwVZ1|81HOLiY~6-ZUYE?j3rA zX+j9yJM>1=gb=!S=zmNTLg?P1H<>1c(7i)%Hcbejdxzd)nh=Iw(5-DUO$ed8waump zA#}GkX_^p1cWYbhYwv&m@3En~wJl8(Lg;R7E7OD!x?9`YG$DlU*0wQC2%)>RZA}wG z=x%L0(}XbevTkjA(}WPZTid}jA%yPMb~H^0p}VzPnI?qL-P)~96GG^2?KY+fA#}I4 zlW9T--L36xnh-*FYqvE`2%)>RT}%_g&}+K2+nFYW(B0bYO%p=sZtV`H2_ba1c1P2M z5V~8tlW9T--L2i(G$DlU*6w1O5JGoryP771(B0ZyO%p=sZtZTS31R5X-P+wv6GG^2 z?H;BHA#}HPPt$}Dx?8)KX+j9yt=-!+A%yPM?qiw|LU(KTHBAViyS3d+6GG^2?S7^S zA#}HPf7668r4OCmJM;mj2_bav&^X+j9yJ9JOe zgb=!S=w7A?A$0H1y-gEB=-#3Gm?nhKy+ijkO$b9T?AG=(O$ed8wf#*KLg;So0MmpJ zx?4NYG$DlU)($dF2%)>RgH01c=x*&0(}WPZTYIo+LI~ZhJ;XF2gznZ3HBAUZFYneK zYMKy2cWZ~4CWO%4+QUo}Lg;SoaMOekx?6j=X+j9ytsP;S5JGork1$OLp}Vz5nkIzM z-P)0+2_ba1_9)YYF!b7P?I_cP5V~7?v}r;J-K`yMnh-*FYsZ)-gwWmEv8D+jbhq{x z(}WPZTYIc&LI~ZhJCgznZJZ<-K7cWX~DO$b9zc56>GO$ed8wI`V-gwWmElT8ys z=x*&e(}WPZTYHLWLI~ZhJ=HWJgzna!W||N}cWcL+CWO%4+S5%FLg;So8Kwzg=-ItP zPcTggp?ilu(=;K3?j8Cp(}WPZcj&WC6GG_Tp(mOqgwVZ1pJSR3LiY}Ru4zID-8=Mo zrU@Z*@6hL)CWO$vLtkK;5QbjZt-a7RA%yPMUSygOLU(H~HcbejyS0~?CWO%4+DlCn zLg;SoWu^%sbhmbrX+j9yt-ahdA%yPMUSXOLLU(H?nNZ zhF;sPy}>jggznZ(F--`eyR}nI6GG^2?KIPb5V~7?qiI42-L0K&nh-*FYi}}52%)>R zGfWdg=x%MMX+j9yt<5q`2t!YHYqL!gLg;SoOw)uAx?6j*X+j9yt-ZxGA%yPM-fEf< zLU(ItnI?qL-P+qs6GG^2?d_%sA#}HPwrN5L-L0Ktnh>V+C9`{no@<&ALiY|m&om)~ z?j8CL(}WPZcj!A!6GG_Tp>s?VLg?P1b4?RM=-#38OcO%r-l6B4CWO$vLoYB*2%&q2 zUTB&ShF;jMy~{KqgznbfZJH25cWdu4O$ed8wfCAPgwWmE`%Du;=x*)(rU@Z*xAp^0?$$nHnh-*F zYacaD2%)>RkC`Tf(B0a{O%p=sZtWAM2_ba1_DR!(5V~9Ylxad3dTqD%Y14!dx?B5< zX+j9yt$o%sA%yPME;3CBp}V!unI?qL-P-3(6GG^2ZINk02;HqMHcbejyR{{z2_ba1 z_65^~F!W@%cCl$f2;HrH(KI21?$*9!nh-*FYhN}^2%)>Rub3u;(B0ZsO%p=sZtZKP z2_ba1c8O_12;Hq+YMKy2cWalKCWN79_YVEKX+j9yJM?nXgb=!S=u*>!5W08hGSh?* zx_9Vu(}WPZcjz}v6GG_Tq2Dx32%&q2e#sZPSDhx_9VzOcTP;3%j-NnkIzM z-P-p|6GG^2?fa$)A#}I)1Ji^Mx?B69X+j9yt^LR}A%yPMer%c$LU(IFF--`eyR{Xj z2_ba1w$d~q486QtTVRHKqw6bhozFG$DlU)~+^92%)>R-RV@wl5=!t6WSkr_Mx?6jU zX+j9ytv%K>A%yPM9%q^mLU(JAH%$nkyR|2nCWO%4+7nF^Lg;SoNu~*5N*^}8x8Rda z6GG_Tg2$OAgwXwWho_h(gwXwWho_n*gwVZ1pJtj6LiY|m-ZUYE?j8Dc(}WPZcjz-r z6GG_Tp(mIogwVZ1pJ|#9hMwE4JR zmzpMo(B0b0OcO%rZtWz~gb=!0d%0;s2;Hr{!Zaa-?$%B=O$ed8wO5)ZgwWmEt4tHZ z&?~#OX{HGwbhkF$G$DlU)@GO{gwWmEt4$L^=x*&brU@Z*xAt1ogb=!0d!1=Q2;Hr{ z-ZUYE?$+L5nh-*FYp0kdgrPTdYp0qfgwWmEX{HGwbhq|K(}WPZTRYt}A%yPM-ej5( zLU(Itm?nhK-P%mkgb=!0n`N31LU(JkO%p=sZtYCdgfR5<-l1R3r!P3=x*&@rU@Z*xAtz+gfR5tZtXp$2_ba1_FmJ35PG6od!K1S2;Hr{-!vhF z?$$nFnh-*FYacXC2%)>R51A%}(B0aHO%p=sZf(A4LI~ZhEig?8L$B=C7Mdo6(B0Zc zOcO%riE8bmrU@Z*xArm9gb=!0`?zUB2;HrH!Zaa-?$$nOnh-*FYo9Vr2%)>RPn#x$ z(B0Z+OcTP;8@jd6nkIzM-P%Q_2_f`Ewe~sFgb=!0`@CsF2;HqMGEE4fyS2rp2_ba1 zw!}0cgznb9V44s@cWW1$CWO%4+80d|!j!&jdhgILnI?qLy+gljnh-+w4*iO0LI~YE z^sA-`A$0H1ubC!<(7i)1F--`edxu_Xnh-+w4!z7YA%yN7`gPNU5W08h<)#T?=(*k6 zQqzPGx?5Xjnh-*FYs*a&Lg;So8>R^%bhq|R(}WPZTlRADAYD(B0Y(O%p=sZtX{=2_ba1_G8n85V~9Y ziD^Oz-L0)KO$ed8wUwp`A#}I4$}}N_?$&;4nh=Iw*{xk+nh-*FYdRpPMFx z(B0ZEOcO%rZta(*2_ba1cBN@T2;Hsy$}}N_?$&;7nh-*FYrio~2%)>R- zYyU7!2%)>Rf0`zQ(B0Zb(}WPZTl<%3LI~Zh{o6Dlgzna^H%$nkyR{ok6GG^2?MBmt zF!bVX?LVdoA#}HPlW9T-JyEUQY?=^4cWbwpCWO%4+9uP45V~92Y?=^4cWaZT2_ba1 zw#EMcJ>*f7|IZg8gznb1G))MhyS1%M6T;9dyS1%N6GG^2Z5z{s5PG6o+txH8gznb1 zGffDgyS4326GG^2Z3okY5V~92(KI21?$&N)nh-*FYqvH{2%)>R+n6SVp*M7EJDDbg z(B0b3rU@Z*w{~08gb=!0+r=~?gznaEXPOW~cWbvdO$ed8wL6$5gwWmE9ZeHL=x*&! zrU@Z*w{~aKgfOKKo6$S;E~W_~bnnnzO%p=s-l2CjO$ecThu+OJA%yN7dUw-=5W08h zJxmiq=-#3CG))Mhdxzf3G$DlU9eQumgb=!S=zUBR!qD@&wfmYTgwWmEZl(z#bhmat z(}WPZTf4t$LI~ZhJ-{>}gznZJXqpg0cWb+wCWO%4+Jj6JLg;R757UGYx?9`RG$9PV zq+8p|G$DlU*7i0{2%)>ReM}QV=x%La(}WPZTieexA%yPM_BTxkp}VyMOcO%rZtXzR zgb=!0JIFL4gznZ3HcbdaujL^&p}V!iO%p=sZtdZw2_ba1c7$m{7snh-+w4t<2_bav z(Bn)KLg?P1Pccmhp?ilu)ifatJ+E7PnrT7^-K`yOnh-*FYfm>#2%)>RXP730(B0Yz zrU@Z*xAsiagb=!0dzNWJ2;Hqc+cY7B?$%B;O$ed8wda^7grS#oYtJ=J2%)>R=b0vi z(B0beO%p=sZtVr82_ba1_CnKy5V~7?k!eB*-L1XYG$DlU)?Q+o5JGorFEvdFp}V!0 znI?pxS9NPAnI?qL-P+4d6GG^2?G>g8A#}HPvS~sH-L1XSG$DlU)?Q_r5JGor(@YaW z=x%MgX+j9yt<5k^2%)>RSDPk;p(nbv*O(@R(B0Z=O%p=sZtZoZ2_ba1_IlHV5V~7? zgK0tt-L0Ksnh-*FYp0qfgwWmEX{HGwbhq|K(}WPZTRYt}Ax!DZX7mnylW9T--8=LQ z(}WPZcj!#hgb=!S=q%HO5W08hY}14gx_9WArU@Z*@6b1!CWO$vL*HVW5JLA3eXD6g z2;DpMEYpNA^t^8EZKeq!bhq|)(}WPZTRYn{A%yPM&M{30p}VznO%p=sZtXnNgb=!0 zdxvR42;Hr{(=;K3?$+j*CWO%4+Fa9wF!YjcZJudD2;HrnZ<-K7cWW1zCWO%4+J&YG zA#}I)F4Ke%x?6jIB2A%yPM7MLc4(B0ZX(}WPZTlbg~2;Hq+WSS5{cWa+BO$ed8wa=R-grR5j4qarL5JLA3U2K{VLiY|`Vww;__YVDn zX+j9yJM?1Hgb=!S=od{BLg?P1UouSyp?imZ*)$=9?j8CS(}WPZcj#A56T;B*y0x#F zCWO%4+9jq5A#}HPscAw8-K||_nh-*FYhO1_2%)>R%S{tP=x%MPX+j9ytt~T62%)>R z<)#TCbhq{m(}Xbel5XvrrU@Z*xAra5gb=!0`?hI92;HrH$21{??$*9*nh-*FYu__X z2%)>R@0%us(B0Y(OcO%rZtaJr2_ba1_9N4TF!ZW!?Z>7GA#}I)6Vrqcx?5Xenh-*F zYb#9?Lg;R7m1#l<-L3u9G$DlU)~+y32%)>RpP43v(B0b4O%p=sZtWMQ31R4oZta(* z2_ba1cBN@T2;Hsy$}}N_?$&;7nh-*FYrio~2%)>R-F`Ap}V!enI?qL-P$_S zgb=!0`@3mE2;Hr%H%$nkyR{9b2_ba1Hes3&LU(J|nI?qL-P%7)6GG^2?VqLzVd$mZ z+D6la5V~9YmuW%>-L3uGG$DlU)~+{A2%)>R8%z^I=x*&s(}WPZTlejY5O$ed8wH-_oLg;R7 zN7IB5x?8)IX+j9yt=-x*A%yPMZeyAdLU(IBnI?qL-P+Ek2_ba1c3abg5V~92#WW!d zJ+pV{?MxFw=-#2XH%$nkdxze^G$DlU9ePL8gb=!S=$%XxLg?P1cQ#E3p?ink#WW#= z?j5?TX+j9yJM^xm2_bav(7Tx?grVnmYj-zI2%)>RdzdDK(B0ZSO%p=sZtY&C2_ba1 zc5l;!5V~8tk7+^(-L2i%G$DlU)^;;Z2%)>R`mLU(HinI?qL-P*yX2_ba1c8F<0 z2;Hqc*fb%8?$#b+nh-*FYloU9grPTeYY#O|2%)>R!%P!G=x*&{rU@Z*w|2N`LI~Zh zJ=`=QgznakFii-dyR}D{CWO%4+9OR9Lg;SoNYjK6x?6jcX+oINht298dX#BG2;DpM z(WVI@bnnokO%p=s-l4~sCWO$vLyt902%&q2KE^a5gzg>sSkr_Mx_9W~OcO%r-l2~- zO$ecThd#kHAq>5sTYI8uLI~ZhJ;^j7gzna!Y?=^4cWcL)CWO%4+EYvuLg;Sosip}b zbhq|2(}WPZTRYw~A%yPMo^F~DLU(J=Fii+UFYDG$Fii-dyR~PUCWO%4+Otd(Lg;So z*`^60bhmb*X+j9ytv$yyA%yPMo@<&ALU(J=GffDgyS3+=CWO%4+6zn*!q98FwHKNu zgwWmEi%b(j=x*)BrU@Z*xAqd#gb=!0d#Pzc2;Hr{%rqf{?$%B+O$ed8wU?VFgwWmE zD@+qY=x*&~(}Xbe=5FnkrU@Z*xArR2gb=!0n`W92LU(J^O%p=sZf%BXLI~Zhz1lP( zgznZ}W10{`cWbXTO$ed8wbz*@gwWmE>rE5F(6f4nzQHshgzg=BifKX!-8=MD(}WPZ zcj#%R2_bav&^MYUgwVZ1Pd7~np?inE$uuE^?j3rDX+j9yJ9MULLI~YEbe3sC7YfbhmbvX+j9yt-Z}OA%yPM-fo%@ zLU(Itn(31R4E-P*aP2_ba1cAjZM2;Hr{!!#j;?$+LEnh-*FYjaE!Lg;R7 zu4zID-L1_tO$ed8wew9ALg;So0@H*Lx?8)@G$9PVrdxZLX+j9yt-aecA%yPM-eZ~& zLU(KLHBAViyS4Y3CWO%4+WSotLg;So1EvWfbhq|F(}WPZTlqr=-#1=OcO%r-l2<46GG_Tp-W5?Lg?P1UocGwLoevoE;daFp}Vy&nkIzM z-P)H-6GG^2?aQVKA#}I)71M+ex?B6IX+j9yt$ocjA%yPME-_6Ap}Vz9O%p=sZtXJD zgfR57Ztd%)2_ba1cDZRn2;HqMHBAViyR~Je2_ba1w%jx!gznb9VVV#^cWd7?O$ed8 zwQrdwgwWmEw@nj5=x*&hrU_x_HQm~GO%p=sZtZ)f2_ba1_I=ZY5V~9YfoVbr-L3u5 zG$DlU)_!D~5JGorKQ>JWp}V!8m?nhK-P#J%gb=!0TWOjQhThz*tujprp}V!8nkIzM z-P#qV2_ba1_A}Fj5V~9YxoJWO-L3t?G$DlU)_!T45JGorSDGe-(B0avOcO%rZtd5m z31R42y+eOvnh-+w4*jiZLI~YE^eWSY5W08h?@SXy=-#2LO%p=s-l1zu6GG_Tp=(VO zLg?P1SDPk;(7i){Z<-K7_YVDoX+ju!LAQ2|X+j9yt^Lt7A%yPM{$!dELU(I_Hcbej zyR~ag6GG^2?JuSYA#}I)SJQ+Lx?B63X+j9yt*tXn2%)>Rzndn6p_g@Q>rE3v=x%L; zX+j9ytxcFFgwWmEb*2d+bhq{o(}WPZTl=SJLI~ZhZ8S{?p}VzznI?qL-P*rR6GG^2 z?RwLMF!Y*k?FQ3?5V~8t(KI21?$-Wenh-*FYd4uDgwWmE&87(R&87(?|=XAu|sd}*0wZF2%)>RtxOX_=x%Lm(}WPZTieDo zA%yPMwlz%%p}V#1OcO%rZf$$hgb=!0+rcy;gznaMG))MhyR}=HCWI+{*zDe+w>C`( zp?ink#xx;>?j5?5X+j9yJ9KB$gb=!S=xt3CLg?P1yO<_~(7i)%XPOW~_YS?iX+j9y zJM<2w2_bav&^wwYgrOI9Yj-kD2%)>RJDVni(B0ZyOcO%rZf#f7gb=!0yQ^tJ2;HsS z%`_o|?$+*Znh-*FYxgis2%)>RdzvPM(B0a-OcTP;%e%FEnox?9`VG$DlU*7h?^2%)>R{Y?`> z=x*%*(}WPZTRYG+Aq+j)tsP{V5JGor2b(5@(B0Z0rU@Z*xAtJugb=!0dx&X52;Hq6 zYMKy2cWVzdO$ed8wZlvkLg;SoVWtTobhmc6X+ju!cJI)Kn z^uliKSkr_Mx?6jUX+j9ytv%K>A%yPM9%q^mLU(JAH%$nkyR|2nCWO%4+7nF^Lg;So zNu~)Qbhq|o(}WPZTRYA)Aq>5|TYHLWLI~ZhJ=HWJgzna!W||N}cWcL+CWO%4+S5%F zLg;So8Kwy#bhmbbX+j9ytv%B;A%yPMo@JU4LU(J=HcbdaukF@OG))MhyS3+-CWO%4 z+H*}4Lg;Sod8P>=bhq|=(}WPZTYG_NLI~Zhz0fovgznZ}WSS5{cWW;;O$ed8wU?MC zgrO(9wU?SEgwWmE%S;nO=x*&K(}WPZTYI@_LI~Zhy}~phgznZ(HcbejyR}!ECWO%4 z+N(?xLg;R7nrT7^-K|YGO$bx^ve~^uXP730(7i)nZJH25_YQrHX+j9yJM^`t2_bav z(ASwJgwVZ1UvHWaLiY}RgK0tt-8=LY(}WPZcj&362_bav(9=v4!q5x5wKtk3gwWmE z>81%Gbhq{<(}WPZTRX!vA%yPMW|}61(B0ZB(}WPZTbpf~5JGorXPPF2(B0abO%p=s zZtX3m31R5v-P&7C6GG^2?JU!T5V~7?n`uG_-L1XdG$DlU*3LFf2%)>Rb4(LL=x*&? z(}WPZTRYD*A%yPM-eH;$LU(KLG))LYukF_6m?nhK-P&B!gb=!0n`fF3LU(KDnR_nIbzp(new_n9Vy(B0bm zO%p=sZtVl62_ba1_CeEx5V~9YkZD2)-K~AtG$DlU*5;cggwWmE0@H*Lx?5Xlnh-*F zYacO92t&{A9r{tzgb=!S=*LVGLg?P1A2&@1p?imZ!Zaa-?j8C`(}WPZcj%`~6GG_T zp`SKQ2%&q2e#SH*gzg>sS<{3Nx_9VBrU_x_h27fcOcO%rZte4?2_ba1w#YOggznZB znA#}I)4by}Wx?B6EX+j9yt$oWhA%yPMzHOQiLU(K5F--`e zyS49{CWO%4+V@NoLg;So`=$vYbhq{c(}XbeWViN1(}WPZTlJM`zK z2_bav&|jD)gwVZ1e`%T!LiY~6(ljB2?j8Co(}WPZcj&K86GG_Tp}#Rr2%&q2{?;@h zgzg=Bm1#l<-8=MmrU_x_Io;Z7(}WPZTU%qA5JGorYfTeE=x*(5(}WPZTl>9fLI~Zh z{lPRLgzna^F--`eyR|=>CWO%4+Mi4lLg;So&!!1s=tbSywWbLnbhq{w(}WPZTl=eN zLI~Zh{mnEXgznbXnI?qL-P+$x6GG^2ZM|ti2;Hr1Fii-dyR`|^gb=!0yUsKr485XT z`-f>l2;Hsy(=;K3?$$P%CWO%4+P_Q_Lg;So-=+y6bhmcBX+j9yt=(Xn5JGorH<~7d z(B0a9OcO%rZtW)1gfR5_ZtZ5%gb=!0yTvpigznZhnI?qL-P&f;gb=!0n>0-bp}Vy$ z4zl;Z|M%F?-P)F>2_ba1wv}l@2;Hr1ZJH25cWc|2CWN7<^$y+EG$DlU9lD)qLI~YE zbbHf;5W08h4yFkqbnnm|O%p=s-l4ZLO$ecThu+#WA%yN7dK=S(5W08hPNoSVbnnoe zO%uYkA%yPM z?rEA3LU(KTGEE4fyS00pCWO%4+I>tDLg;SozNQHwbhoyfX+ju!MYnc8(}WPZTf4t$ zLI~ZhJ-{>}gznZJXqpg0cWb+wCWO%4+Jj6JLg;R757UGYx?9`RG$DlU*7h<@2%)>R zy-gFs(CfRkeM}QV=x%La(}WPZTieexA%yPM_BTxkp}VyMOcO%rZtXzRgb=!0JIFL4 zgznZ3HcbejyR}116GG^2?ZKuAVM-r9y?5wCOcO%r-l2z@CWO$vLmz6I5JGSK@9^XM z&Rg$#m}x=?-8=MQrU@Z*@6f|d6GG_Tp$|7r2%&q29$}ggLiY}RglR$u-8=M=rU_x_ zx!u~4rU@Z*xArL0gb=!0JIXX6gx*MH|NZ%Ytv%W_A%yPMjy6pQp}VzXOcO%rZtYmp zgb=!0dyHv92;Hqc)-)l6?$#b>nh=Iw+^s#{G$DlU)}COR5JGorPc%&kp*L1*Pclsi zp}VywnR=b0vip*M7E&o@m7p}Vygm?nhK-P#LH6GG^X)!K_p6GG^2?Zu`EA#}I)64Qhb zx?6jxX+j9yt-Z`NA%yPMPBKjhp}V!0nRS*8ggbhkF!G$DlU*3L9d2%)>RH=8De(B0Zw zOcO%rZtbn62_ba1c9v;E2;Hr{%`_o|?$+LJnh=Iw*{z*znh-*FYv-6IgwWmExuyvr zbhmb%X+j9yt-ZrEA%yPM-f5Z;LU(I(OcO%rZf&kR_n9Vy(B0bmO%p=s zZtVl62_ba1_CeExFr_b_-aGU|rU@Z*@6ZpMCWO$vL+6_&gwPvnhb}Np2%&q2E;LOD zp?imZ#55sRi%b(j=x*(ErU@Z*xAu9{gb=!0TV$FLLU(J6 zO%uY zX+j9yt$o)tA%xyot$oilA%yPMzHgckLU(IFFii-dyR{#hCWO%4+K)^VLg;So$EFD( zbhq{s(}Xbe^xmN>OcO%r-k~c^6GG_Tp{q<2Lg?P1KQ&DVp?im3VVV#^_YVD;X+j9y zJM`zK2_bav&|jD)gwVZ1e`%T!LiY~6(lj9qJ-1u?m1#l<-L3uFG$DlU)_!A}5JGor zzcoz=p}V!KOcO%rZtZub2_ba1w%RlygznbXm?nhK-P&5ygb=!0yV^7%486Ep`@LyG z2;Hsy!89R+?$)j`O$ed8wLh9BgwWmEpG*@%=x*)LrU@Z*w|1>*LI~Zh{lzpPgznb< zYMKy2cWZw$O$bA;?AF$qCWO%4+TTqRLg;R7y=g)S-K}jfO$ed8wF%RN5V~8t&NLx} z?$-Wcnh-*FYyUJ&2%)>Rjiw19bhq{|(}XbehHmZOrU@Z*w|2d0LI~Zh-C&v!LU(I7 znkIzM-P(Ul6GG^2?IzQN5V~8t*)$=9?$&NGO$ed8wN0i8A#}I4*)$BDFA4xKbj z2%&q2ZgKE`=iyP4|IZg8gzg=>rD;M4y|H%aR;CFdbnnouO%p=s-l5x=CWO$vL$@_e z2%&q2ZfBYhLiY~c-ZUYE?j5>=X+ju!UbnWRX+j9yt=-BrA%yPMZf%+nLU(JoF--`e zyS1H66GG^2ZD-Sj5V~8tt!Y9C-L36nnh-*FYqv8^2%)>R+nXkYp_g=PcQ8!|p}Vy^ znkIzM-P)Z@6GG^2?arnNA#}HP7t@3gx?9`TG$DlU*6wPW5JGorcQZ{0p}V!anr znh-+w4n52?Aq+jQTYH#kLI~Zh9d4QsLU(HqH%$nkyR{=s6GG^2?GdI4A#}I)NYjK6 zx?4NaG$DlU)*fY=5JGorN0}ys(B0ajO%uYRr%(B0bcrU@Z*xAt_?gb=!0dxmL32;Hrn zV44s@cWciyO$b9zbZgHtO$ed8wP%|qgwWmEiKYo5bhq{#(}WPZTYIi)LI~ZhJUCWO$vLtkQ=5JLA3eW__e z2;DpMWu^%sbnnoUOcO%r-k~oyO$ecThrYrzA%yN7da`Lk2;DpMm8J~A#}Gk%QPW`?$&0TCWO%4+L@*aVdz!e+M7)iLg;SoEv5+}bhq|a z(}WPZTRY1%A%yPM-e#H*LU(I#H%$nkyS1}T6GG^2?HtpD5V~7C*EAu7?$*vTO$b9z zbZhT0O$ed8wRf5(gwWmE9Mgmlx?7uTnh-*FYx7JKLg;SoeA9#wx?8)zG$DlU)-E(n z2%)>RcbO)H(B0a*O%uYsLDPf~x_9V@OcO%r-k~2hO$ecTht4-m2%&q2E-+09L(l8h7Mdo6(B0ZcOcO%r zZtbI{2_ba1_A%3h5V~9YxM@NN-K~AXG$DlU);?*P5JGorpE6Adp}VzDnR#ij`%bhoy|G$DlU z*1lkx5JGor7n>%8(B0Y>O%uYnI?qL-P)H;6GG^2?JK4UA#}I)RnvqJx?B62 zX+j9ytzBZ85JGormzpMo(B0Z)rU@Z*xAt|@gb=!0yWBJ(3_a1UEj3LDp}VzZrU@Z* zx3=6gA%yPMzG0dWLU(K5G))MhyR~nbCWO%4+P6&;Lg;SoJEjRCbhq|h(}WPZTl=1A zLKu2x@6hj?CWO$vLw{hJ5JLA3{h?_>2;DpMN2UoObnnm~nP1Bp}VzfO%p=sZtX9o2_ba1_E*z{5V~9Yn`uG_-L0)N zO$ed8wZEGtgwWmEdeejux?9^|nh=KG)U8dJCWO%4+I6N0A#}I)57UGYx?B6FX+j9y zt!*?-2%)>Rf0-tP(B0aox_9VJ zrU@Z*@6ek~6GG_Tp|_YOgwVZ1H<>1c(7i)9nR|Br6FjJmWe-1kqaba!`mcXxMp*9?jx27{u4K`UV}DAEWBw!okmgaQUwBQu16 zh%hS303$PhzkfOAKK-5R*e{;v#a^GyTo=b;_Q_iJOr{ATbhkFMX+j9yt<7SZ5JGor zvzjJ^LEqc0&1RYqLU(JknV^ zLU(IBnkIxnkL%WUGEE4fyS1H76GG^2Z5Pvo5V~92)ifc5?$&lQO$ed8wcSkRy-gFspeJ{0`DJzDnh-*FYws~l2%)>RGfWdg=x*)3 zrU@Z*xAs2Mgb=!0JJU2FgznbfZ<-K7cWY;vCWO%4+6PP%Lg;SogQf{#(Brzb51A%} z(B0aHO%p=sZtZN-gb=!08)cdhLU(KDm?nhK-P%V?6GG^2?W3j%A#}HPu4zID-K~Ah zG$DlU);?~U5C%QDTl<7*LI~ZhooAX5LU(KDnOA$0H1%S{tP=-#1Mm?nhKy+f}wO$ecThhAlx5C%QE zTl>6eLI~ZheZe##gznb9Xqpg0cWYlVO$ed8wX01NLg;R7v}r;J-K||?nh-*FYhN}^ z2%)>Rub3u;(B0a#rU_xtW4g7knkIzM-P(1g2_ba1cD-pr2;HsSV44s@cWXDACWO%4 z+D)bjA#}HPvuQ#I-L2hXnh-*FYqy#vgwWmE*Gv<_pvQGtt12;HrH&om)~?$*9L_gwWmEJ*EjEbhmb|X+j9yt&K5F z2%)>R`%Du;=x*%?rU_xtqk4z_&@>^0?j3r+X+j9yJM>4U2_bav&>x#7gwVZ1e`1;t zLiY~+scAw8-8=LF(}WPZcj$wr2_bav(1%PDLg?P151S^0L67d%erB2wLU(IFH%$nk zyR}D56GG^2?NQT&5V~7?%rqf{?$&-`nh-*FYriy22%)>RUzsL^(B0avO%p=sZtZc? zgfQqa-P#kT2_ba1_8ZfL5V~9Yt!Y9C-L3u3G$DlU)_!lA5JGore=to5p}V!QrU@Z* zxAsTVgb=!0d(t!^gznbHnI?omkL%XPnRKbt0mK~L`1UNlVzp}V!em?nhK z-P%j02_ba1_E*z{5V~7?*)$=9?$%y0O$ed8wF#yPA#}I)H`9a=x?B6ZX+j9yt^LC^ zAxzbqp3^(@RnvqJx_9V5O%p=s-l6|8O$ecThrVW-5JLA3ooJd6LiY}R-83PD?j8Du zX+j9yJM>M{gb=!S=p@sG5W08hzfBXups(rH-ZD)Hp}V!orU@Z*w>HHzA%yPMrdi*f z|9<;pLw9S_nkIzM-P&}f2_ba1Hoa*=2;HsCV44s@cWX16CWO%4+B-}W!l3W#*4}BF z5JGor?=npYp}V!2OcO%rZf$1Mgb=!0o5eICgzna6HBAViyS3R&6GG^2ZFbXy5V~8N z!!#j;?$+isO$dV?->uDMnh-*FYjc|>gwWmEJf;aDbhkFIX+j9yt<7he5JGor^P47w z(B0YsrU@Z*x3-{ZLI~ZhEo7PyLU(HmnRWla;ppwHRbxadN=x%LY z(}WPZTU*aGA%yPM);CQEp}VyWOcO%rZf!%;gfQs)y0wi=6GG^2ZDZ4f5V~92#55s< z?$$OnO$ed8warWuLg;R7bJK(nx?9`AG$DlU*0wZF2%)>RtxOX_=x%Lm(}XbS@!i@s zrU@Z*x3;ZmLI~ZhZD*PgLU(K1n2%)>RJxvor=x%K<(}WPZTie?- zA%yPM_AyNep}VzxO%p=sZf!r)gb=!0+ut-HOx5?C(>wG4(}WPZcj$qp2_bav(1T19 zLg?P12b(5@(7i(sF--`edxsusnh-+w4n52?A%yN7dbnvq2;DpM2-AcRx_9W2rU_xt z*K}(~nI?qL-P+Nn2_ba1c8qC42;Hq6Ynl*3cWcL)CWO%4+VQ3dA#}HPf@wks-L0Ky znh-*FYbTi|gwWmE$)*Wm(D!v~rRGffjh=x*)( zrU@Z*w|16kLI~ZheZVv!gznZpXqpg0cWWOqO$ed8wGW#ngwWmE*`^60bhkFjG$9On zO1E~7X+j9yt$oBaA%yPMK5Ci}LU(KDnkIzM-P*@Y6GG^2?c=5iA#}I)3DblSx?4NX zG$DlU*3LIg2%)>RPnsr#L7&q*^i!q@A$0H1Pn#x$(7i)HW10{`_YS?lG$DlU9eSZ@ zLI~YE^di%Q5W08h#ij`%bnnnhOcO%r-l3P8CWO$vLoYK;2!p<+Tl=hOLI~ZheaRFPbKV(B0aX zOcTPO@9WmCHcbejyS34#2_ba1c8zI52;HrH*)$=9?$*9ynh-*FYuB14gwWmES4|T_ z=x*&g(}WPZTf5#gA%yPMZZJ&X+j9yt$o)tA%yPMzGs>cLU(K5 zH%$mr^_bIohu&?P5JLA3y~i{mgzg=BuW3RE-8*!QX+j9yJM=!&gb=!S=nqU2Lg?P1 zKQv7Up?inkZ<-K7_YVD$X+j9yJM_n<31QF|c56Q|O$ed8wV#?MgwWmE1EvWfbhq}P zX+j9ytvzI#5JGor51S^0(B0b4OcO%rZtdr$2_ba1_K0ah2;HqcYMKxReOtHom}x=? z-L3t?G$DlU)_!T45JGorzcNh-p}VzTn?$&;5 znh-*FYriv12!np4Tl>9fLI~Zh{lPRLgznbHnkIzM-P#{b6GG^2?Mc&w5V~6%XPOW~ zcWdKK6GG^2?J3iQ5V~7?+B6}A?$(|$O$dX2xm$bIG$DlU*8XIg5JGor&zUBK(B0be zrU@Z*xAuZ*LI~Zh{n<1jgznZ}G))MhyS2ZVCWO%4+DoPhA#}I)SJQ+r=+k?s2_bav(AP{8!k{ng)+U-JgwWmE>!t}Ibhq|~X+j9yt-WcQ5JGorlS~sr=x*)b zrU@Z*xAvB4LI~ZhO*Tykp}VyyrU@Z*w>HfN_WbwTA3NyVy0vLd6GG^2Z93D05V~8N z-ZUYEp7`HG@^kj-7o5Q~A%yPMW;9I*p}Vzrm?nhK-P$`%6GG^2?Omn`A#}GklW9T- z-L1`Rnh*y4NVhhNX+j9yt<7qh5JGorvzaD@&=aZbzrX*}+U%wYA#}GkhiO6x-L1`O znh-*FYjc?F0px?5YrG$DlU*48vl2%)>RwM-L2=x%Lo(}XbS+q<=OOcO%rZf#xDgb=!0 zThBBhgznbXH%$nkyR{8W6GG^2Z9~(95V~92$TT5@?$$OoO$ed8wM|SDLg;R7Q`3Yn z=tsM?%}f(Q=x%Lu(}WPZTie1kA%yPMwlqx$p}V!MOcO%rZf$GRgb=!0+r~5@gznb1 zHBAViyS4316GG^2ZF|#%Fz8phwH-_oLg;R7N7IB5x?9`HG$DlU)^;{c2%)>RT}%@~ z=x%LS(}WPZTieYvA%yPMb~jB3p}Vy`OcO%rZf#G~gfQq4y+ijhO$ecThwg2f5JLA3 z-N!T`gq~PCbYIhi5W08hex?Z_bnnppO%p=s-k}GWCWO$vLk~1f2%&q29%PyjLiY|m z*fb#w`l4>_5YvPZx?4NcG$DlU)($gG2%#rdYloXAgwWmE5vBRTTBzepkL|M zZZ%B^p}V!OnI?qL-P&!Y2_ba1cDrdp2;HsSVVV#^cWYlaO$ed8wL47{Lg;SoF4Ke% zx?B5(X+j9yt$oupAq;v%@6d0VCWO$vL%(gB5JLA3{f=ou2tBcO=yy#MLg?P1-!n}J zp?imZ-!vhF?j3r!X+j9yJMR2TT(}=x*&n z(}XbS+q<=gOcO%rZtY>ygb=!0`H)^A%yPM{%D#I2K`F6_M~Y-2;HrX zGffDgyS4GA2_f{vYV9f0gb=!0d)hQ1gzna!F--`eyR~Oc6GG^2?N6o&A#}I)oM}P` z-K{-unh>Vy%}4eQeZe##gzg>sXVZibx_9V{rU@Z*@6f-PCWO$vLtipY2%&q2{?#-g zgzg>svS~sH-8=LZ(}WPZcjyGugb=!S=-*5e!k{ni*8Xmq5JGor|1eDmp}VzLO%p=s zZtb6@2_ba1_Ak?f5V~7?%`_o|?$#!nCWO%4+UuqXA#}I)hG{|w-L1W8nh*wkN4GY~ zG$DlU*8Xjp5JGorZ2_ba1_Ab+e5V~8N z$uuE^?$%~DO$ed8wOLFPLg;R7R?~zKx?7vgG$DlU)@CGzFLI~Zh&10GnLU(KPnkIzM-P(Mn2_ba1Hos{?2;HqMV44s@cWVop zCWJwc>>aw0X+j9yJ9J^wgb=!S=pv>GA@s!Bp^KU(gwVZ17c)%=p?ileZkiB6_YPgc zG$DlU9lE4xLI~YEbScw>5W08h(xwSv&=+@W%a|sF(B0ayrU@Z*x3-*VLI~ZhEpM6- zLU(H`m?nhK-P($#2_ba1wvuT=2;Hr%Y?=^4cWbMdCWO%4+N!1rVbFJUYpaZS=HbhoyKX+j9yt*vRA5JGorYndj5(B0bFrU@Z*x3-RHLI~Zht!tVPLU(KHnI?qL z-P-!531QHWb!!`#CWO%4+J>eHA#}I4k!eB*-K}kGnh-*FYnzxRgwWmErltuYbhoyd zX+j9yt!-|a5JGorTbL$<(B0aWrU_xt6S}pnOcO%rZf$GRgb=!0+r~5@gznb1HBAVi zyS4316GG^2ZF|#%5V~92!89R+?$&lRO$ed8wVg~8Lg;R7XVZi*RgW3jJ9HP*gb=!S z=&q&-A$0H1-Aofg=-#2bnb5JLA3-ODr~gzg=>w`oEM-8*z2 z(}WPZcj&&R31QF|cWe8ZCWO%4+Ww{qA#}HPfN4Sq-K`yHnh-*FYX_MogwWmE!KMiz zbhmbhX+j9ytsQEb5JGorhnXgX(B0bMrU_xtcXVqsQPYGFx_9WgrU@Z*@6eB#CWO$vLqBes5JLA3{e)>k2;DpMJkx|Q=!?6x z^Gy>%=x*(krU@Z*xArO1gb=!0`?P672;HrH#xx;>?$$0aO$ed8wF^xXLg;SoBGZHr zx?8*0G$DlU)-Ewk2!p<(Tf5XWA%yPME;CICp}V!unkIzM-P-3&6GG^2?Q+wE5V~8t z!Zaa-?$)j}O$ed8wW~}MLg;So^QH+Qbhq{e(}XbS$GWvInkIzM-P)H-6GG^2?P}A6 z5V~6%ZJH25cWc*}CWO%4+LuieLg;SoE2aq{bhmb`X+j9yt$o!rA%yPMt}{&tgPzc> zU2mEYLU(I7m?nhK-P(<&2_ba1c9UsB2;HsSY?=^4cWbwpCWO%4+O4JuA#}I)HPeI; zx?8)=G$DlU)^0aV2!lSmcjz6a2_bav(65^&gwVZ1?=(#ap?inkWttE|_YVDrX+j9y zJM^2T2_bav&~KS0gwVZ1zipZjLiY~+j%h*&-8=NVrU_xtS9fdQGffDgyS49|CWO%4 z+TErJA#}HPk7+^(-L2hgnh-*FYhz3kLg;SoKGTE{x?B5!X+j9yt^Lq6A%yPM?l(;c zgTA+0`;lov2;Hsy*fb%8?$&-{nh-*FYdR2TT(}=x*&n(}WPZTYJbfA%yPM z9yUz~p}V!8nI?qL-P+Gh6T+aM?A9JJO$ed8wMR`8Lg;SoG1G()x?B5&X+j9yt^Lw8 zA%yPMer1{vLU(JwHcbejyS2wn6GG^2?FrL_5V~9YjcGy{^jqE9Z%q?I=x*(IrU@Z* zxAuF}gb=!0`-5ph2;HrXHBAViyR|=>CWO%4+LNXUA#}Gk&NLx}?$*YeCWO%4+Eb

RznLb4(B0bKO%p=sZtWkY2_ba1_Nr+@2;Hsy(=;Ir`rdBsU#1Bmbhq}J zX+j9ytxYsd2%)>R*G&^b=x*%|(}WPZTYJ+qA%yPMCYdIL(B0aRxl9v6=x%Lp(}XZpZ$7Gb=sczg zA$0H1c}){S=-#38nI?qLy+h|WO$ecThb~~65JLA3UC=Zkgzg=>kZD2)-8*z)(}WPZ zcjzLf2_bav&_zuX!k|ZYYm1pCgwWmE;-(29bhoyIX+j9ytu1Mq5JGorOPMBw(B0b7 zrU@Z*x3-LFLI~ZhEo+((LU(J+nI?qL-P-b|31QGb!72%)>RHB1vi=x%LI(}XbSaoyTl zrU@Z*x3;!vLI~Zhtz()HLU(KHnkIzM-P(Gl2_ba1w!UdX2;Hr1V44s@cWWD(CWO%4 z+D4`cA#}I4v1vjW^yF@B6Vrqcx?9`SG$DlU);2Ru2%)>R%}o$6GG_Tp}U(Vgh7w) z*7h(>2%)>RJxvor=x%K<(}WPZTie?-A%yPM_AyNep}VzxO%p=sZf!r)gb=!0+ut-H zgznZ3Fii-dyR`#N6T+a!bZZBhCWO%4+QFs?A#}HPh-pFy-K`yJnh-*FYloR8gwWmE z;id^8bhmbdX+j9ytsQBa5JGorN0}ys(B0b6rU_xt81%Gbhq|y(}WPZTYHabLI~Zhone{~LU(KLHBAVi zyS4Y3CWO%4+L@*aVX7W8s(0x7O%p=s-l1oiCWO$vLqA}e5JLA3{h(<=2;DpML#7EK zbnnm)n`1-K~AeG$DlU)~+^92%)>R(WVJu(388hYfKYD=x*)HrU@Z* zxAqm&gb=!0yVf)zgznb9YMKy2cWc*~CWO%4+V!RhA#}HPgK0tt-L2hdnh-*FYd4uD zgh7w$9eT5ALI~YE^cK^E5W08ht)>YfbnnownI?qLy+dy^O$ecThu&_Q5JLA3y~8vi zgzg>sb<>0px_9WErU@Z*@6fwU6T+ZJcWd7;O$ed8wQrgxgwWmEw@ed4=x*)XrU@Z* zxAq;=gb=!0`>tt12;HrH&om)~?$*9L_gwWmEJ*Ej^&||u_drcEU=x%L{ zX+j9yt=(su5JGorKQK)Qp}VyonkIzM-P--82_ba1_9N4T5V~9Yv1vjG-L3t^G$DlU z)_!W55C%Q2TYJDXA%yPM9yCn|p}Vz*OcO%rZtY>ygb=!0`9fLI~Zh{lPRLOx2s8(>rvmX+j9y zJM@pH2_bav&?ik3Lg?P1<4hAm=-#2@O%p=s-l0#KCWO$vL!UNH2%&q2K4Y2?LiY}R z)-)l6?j8Ck(}XbSYr3`POcO%rZtZ!~gb=!0d%-jzgznbt1;nh-*FYpa?jgwWmE zYNiPxbhoy;X+j9yt*v325JGorYnmp6(B0ZvrU@Z*x3;!vLI~Zhtz()HLU(KHnkIxn zPwCdyGffDgyS4RA6GG^2Z3EMU5V~92&@>^0?$$OkO$ed8wT(>^Lg;R76Vrqcx?9`S zG$DlU);2Ru2%)>R%}o=+R6XXL-l1EVCWO$vL$@?d2%&q2Ze^MfLiY~c+B6}A?j5>~ zX+j9yJ9Jyqgb=!S=ys+FA$0H1?M)Lx=-#0_m?nhKy+e02O$dX&rd!*|G$DlU)^;{c z2%)>RT}%@~=x%LS(}WPZTieYvA%yPMb~jB3p}Vy`OcO%rZf#G~gb=!0+siZ|gznb% zHcbeFzOP%`$21{??$-7-O$ed8wf#&JLg;R7f765zx?4NIG$DlU)($jH2%)>RgG>`b z=x*&`(}WPZTRX%wA%yPM4mC{(gC5_l9cG#kLU(J2nR6HOCB z=x*&K(}WPZTRYh_A%yPMPBBdgp}VzHO%p=sZtXPFgb=!08)2FdLU(H;O%p=sZtZl_ zgfQrHdWXK-G$DlU9r_;Agb=!S=ozL7A$0H1_nIbz(7i+7XPOW~_YOVNG$DlU9r}LL zgb=!S=vk%-A$0H1511x|(7i)HXqpfPeNDIaA=88qx?B6OX+j9yt(|R}5JGorqf8S* z=x*&C(}WPZTlqr=x*%`rU@Z*xAsNTgb=!0`;uuw z2;Hq+ZJH25cWa|f6GG^2?HbdB5V~9YvS~sH-K~AaG$DlU)~+>82vhZIr}Yl~s%b(9 z-8=L;(}WPZcj)z|2_bav&>Kt>Lg?P1H<~7d(7i)%GEE4fdxzd^nh-+w4!y-RA%yN7 zdaG$d2;DpMYo-Zd&=+=Vx0xn{(B0bYrU@Z*w|0kVLI~Zhecd!6gznbvG))MhyS2Ma z6GG^2?Hi^EA#}I)P1A%Bx?B5}X+j9yt$o`xAq@JqZtXj!2_ba1_FdD25V~9Yo@qh| z-K~A!G$DlU*6ub<2%)>RdrT8T=x*&^(}WPZTN`7V5JGor_n9Vy(B0Y(OcTPOAL-V9 zXqpg0cWd{XCWO%4+K)^VLg;So$EFD(bhq{s(}WPZTl=YLLI~ZhJz$y;LU(HqnkIzM z-P%K@2_ba1_ONL}81&2C+RscALg;So=cWlEbhq}1X+j9ytvza*5JGorkC`Tf(B0ZE zOcO%rZta(*2_ba1_AAqb5V~9YwP`{K-K{-tnh*wkTJO*&OcO%r-l4xSO$ecThyK2;Dn$oM}QB z^o8Bpc+-Rsx?6k7G$DlU)}A&^2%)>RXG{}9=x*&<(}WPZTl6NiLU(I#m?nhK-P)U`2_ba1Hpw(0gznbR=}i+t z=x%KW(}WPZTbt1|A%yPM-eH;$rs^|CjQ#Jw9)8X~{etf_O$ecThrY`+A%yN7I+JNa z2;Dn$X48ZadJ-r8@9+Pddlu7#5W08htfmPebnnpFOcO%r-l4ObCWO$vL+3C}2%&q2 z&S{zu27S@ky7ReA6GG^2ZEn+q5V~8N$21{??$+itO$ebU)w$<0O$ed8wfRjGLg;R7 z0n>yKx?5Y&G$DlU))q2N2%)>Rg-sK}pl=^rcfN>eLI~ZhEozz&LU(J6nI?qL-P+=& z2_f{PI`RH%$nGer0Uk`5LAPA#}I4rfEV5-L0)R?M)Lx=x%KX(}WPZTiekzA%yPMb}~%}p}V!6 zO%p=sZfzISgb=!0+toB74EpwNZ8y_|5V~92-83PD?$-7&O$ed8wLMJ}Lg;R7FVln& zx?9`ZG$DlU*7h+?2%)>ReN7WW=x%L4(}WPZTif3>Aq@J_ZtVcmgb=!0JJ2*CgznZ3 zGEE4fyS0N&6GG^2?GV$15V~7C)HET4?$!=7O$ed8wZlylLg;So2-AcRx?4NaG$9Q7 zm2T}Q(}WPZTRYk`A%yPMjxkLLp}VzXO%p=sZtXbJgb=!0JKi)QgznZ(Fii-dyR{Qd z6GG^2?IhEL5V~7C*)$PLI~Zh zooSj7LU(KLH%$nkyS1}S6GG@ob?y(CCWO%4+6PS&Lg;SoL#7EKbhq|l(}WPZTRYn{ zA%yPMMwuprLEk>M?))6ngb=!0`-o{m2;HrH)HET4?$*vVO$ebU)ww@rnh-*FYacgF z2%)>RPnafz(B0a3rU@Z*w|2g1LI~ZhebO``4EoWrb?2WlO$ed8wNINSgwWmEXG{}9 z=x*%-(}WOuQl0xk(}WPZTf4|KA%yPME;daFp}Vz9OcO%rZtYUjgb=!0yUa8p4EmL^ zb?2WoO$ed8wa=L*gwWmE<)#TCbhmbeX+j7+sm^_+X+j9ytzBiB5JGorpEpeip}Vy& zm?nhK-P#vT6GG^2?MtQ!VbCLbhhA-(5JLA39c`KrLiY~6#xx;>?j8DN(}WPZcj#A4 z6GG_Tq1T!wgwVZ1ziOHgLiY~6&NLx}?j3r)X+j9yJM;$AgfQrfy0sfk6GG^2?IzQN z5V~8t*)$=9?$&NGO$ed8wOdUSLg;SoYo-Yybhmb!X+j9yt=(>#5JGorcbF!G(B0bC zO%uYPZ|~ObG))MhyS2Ma6GG^2?Hi^EA#}I)P1A%Bx?B5}X+j9yt$o`xA%yPMzGIpY zLU(K5HBAViyS49`CWO%4+V@Qp!k{1R*6ub<2%)>RdrT8T=x*&^(}WPZTN`7V5JGor z_n9Vy(B0Y(OcO%rZtaJr2_ba1cE4#t2;Hsy$TT5@?$&;6nh*y4O1JhC(}WPZTl=YL zLI~ZhJz$y;LU(HqnkIzM-P%K@2_ba1_ONL}2;Hsy%rqf{?$&;8nh-*FYmb;FgwWmE zqoxUAsy=h%*xF-{nI?qLy+eOtnh-+w4*jKRLI~YE^jD?{A@rm=_peP8Lg?P1kDDfh z(7i*SFii-ddx!qUG$DlU9r|0-gb=!S=&~AwO$ed8wLh6AgwWmEbEXL)bhq}rX+j7+sm}d^X+j9yt^L_FA%yPMUNlVzp}V!e zm?nhK-P%j02_ba1_E*z{FzCm|)}6m>nh-*FYp<9lgwWmE1k;2Nx?B63X+j7+sm}d( z(}WPZTlVbBxC)}2o@O$ed8wbxA( zLg;So4by}Wx?6kGG$DkZROg;#nh-*FYyUP)2%)>Rw@ed4=x%MYX+j9ytxYja2%)>R zX*T`uMQ$_Y|9KI@phxx&oz^rVgzg2k=Lg?P1 z?=VdWp?inE(=;K3?j8Cr(}WPZcj!!}2_bav(3wpW!k{ni)@CtH2%)>RSxpl{=x%K` z(}WPZTbtc9A%yPM<}ghNp}Vy?O%p=sZf!2pgb=!0o7*%YgznbnF--`eyR~^u6T+bH z=+@>lO$ed8wfRjGLg;R70n>yKx?5Y&G$DlU))q2N2%)>Rg-sJe=x%Kh(}WPZTU*pL zA%yPM7Bfubf02%)>R6-^VupeJ-|E14#Q(B0a~rU@Z*x3-FD zLI~Zht!kPOLU(JcnI?qL-P-D=2_ba1wuWg!2;Hr%X_^p1cWY~zCWO%4+S;ZGVXA&@ zzF2l(7i*~HBAVidxx%Pnh-+w4qe|gA%vb(=ib0HA%yN7x}j-82;Dn$Bh!Qs zx_9WtrU@Z*@6b(56GG_Tp_`f}gh5~2t!-wS5JGoro0}$t(B0Y=rU@Z*x3;BeLI~Zh zZDpDeLU(Ihn znkIxnKh~}7WttE|cWZl_CWO%4+CHWUA#}I4uW3RE-L36snh-*FYx|ofgwWmE0j3Ed zbhmb(X+j9ytsP{V5JGor2b(5@K~Lz`4lzv#p}Vz1O%p=sZtXDBgb=!0JKQuOgznak zFii-dyR{=t6GG^2?I_cP5V~7C+B6}A?$(YmO$ed8wPQ^a!k|a?4n58^A%yN7dc0{u z2;DpM1k;2Nx_9V_rU@Z*@6eM>6GG_Tp(mRrgwVZ1Pccmhp?im(YMKy2_YOVHG$DlU z9Xi4^Aq@KBZf&G#LI~Zhoo<>CLU(KLHcbejyS4Y2CWO%4+8L$^A#}I)UekmSx?6jn zX+j9yt(|F_5JGor?>9{dp}V!SOcTPO@95S(V44s@cWWOsO$ed8wGWvlgwWmEhfNbg z=x*(7(}WPZTN`DX5JGor=a?ph(B0ZcOcO%rZtbI{2_ba1cCKkc81!S^+Q&>2Lg;So z%8(B0Z4rU@Z*w|1#%LI~ZhU1pjPLU(JQ zHBAViyS2}mCWO%4+U2GRA#}HPg=s<<^x3^buQW{vp?im3WttE|_YVEMX+j9yJM;^t z2_bav&@Y-MgwVZ1zhs&aLiY~6+B6}A?j1VXG$DlU9eRyvLI~YE^vk9RVbE81YhN)< z2%)>RYfTeE=x*(+rU@Z*w|1RrLI~ZhU2mEYLU(I7m?nhK-P(<&2_ba1c9UsB2;HsS zY?=^4cWbwpCWJxX+pXPdnh-*FYhN=>2%)>R+e{Ne=x*(H(}WPZTf4(FA%yPMzHXWj zLU(I-nkIzM-P&EI2_ba1_6^g75V~9YrfEVL^poA%w@ed4=x*)XrU@Z*xAq;=gb=!0 z`>tt12;HrH&om)~?$*9L_gwWmEJ*EjEbhmb|X+j9yt&K5F2!npBTf5IR zA%yPMeqfpqLU(IFG))MhyS4jG6GG^2?MJ2wA#}I)W7C8Xx?B5+X+j9yt^L$AA%yPM z9xzP^p}VyQO%uYP&+Z-ikZD2)-8=MQ(}WPZcj(Vd6GG_Tp+7fG2%&q2K4O{>LiY}R z)HET4?j8D=X+j9yJMCWJxX z+pRrmnh-*FYvW84Lg;R7ylFxR-K{-knh-*FYfqadgwWmEGo}e4bhq}bX+j9yt^LU~ zA%yPMo-<7dp}V!`O%uYPpX}CNFii-dyR|=?CWO%4+KZ+MA#}I)7t@3gx?6k6G$DlU z*8Xam5JGorFPkQW(B0ZArU@Z*w>H5vA%yPM{$`pG2K`pI_IJ~S5V~9YhiO6x-L1W9 znh-*FYyUJ&2%)>Rf0-tP(B0Z=rU@Z*w>HrR zIZYEn=x%K;(}WPZTbtW7A%yPM<}pnOp}VztO%p=sZf!o(gb=!0o8L4cgznZBFii-d zyR`*P6T+a!b!!WmCWO%4+QOy@A#}I4h-pFy-K{NZnh-*FYm1pCgwWmE;-(29bhoyI zX+j9ytu1Mq5JGorOPMBw(B0b7rU_xtle@KLOcO%rZf#l9gb=!0Th25ggznasH%$nk zyR{We6GG^2ZAH_B5V~7i$uuE^?$%Z|O$ed8wN*?LLg;R7Rnvqp=uy2xS2Ilrp?im} zZkiB6_YPgdG$DlU9lEAzLI~YEbS=|_5W08h+NKF1bnno0OcO%r-l6N7CWO$vL)SA+ z2%&q2u5X$U20gl4+rTs-gznZhG))MhyS0r>6GG^2ZDZ4f5V~92#55s(+KLO$ed8 zwOvgULg;R7H`9a=x?9`bG$DlU*7h(>2%)>RJxvor=x%K<(}WPZTie?-A%yPM_AyNe zp}VzxO%uYPCwFW6nI?qL-P-=92_ba1c7SO@2;Hq6Xqpg0cWVckCWO%4+QFs?A#}HP zh-pFy-K`yJnh-*FYloR8gwWmE;id^;s(x)$@6aPm6GG_Tp+}k~gwVZ1k1|aNp?ilO zZJH25_YOVAG$DlU9eS*3LI~YE^f=Rm5W08h@umqObnnm;OcO%r-k~R&CWJwc?$%B+ zO$ed8wUbQ~Lg;So6w`zdx?4NdG$DlU)=o1`2%)>R5vBR zcbg`J(B0a5OcTPO$8>9Fm?nhK-P(Ii6GG^2?R};RA#}HPrfEV5-L1XfG$DlU*3L3b z2%)>R511x|(B0YxO%p=sZtX*+2_ba1_F>b6Fz9jJ+S#TFA#}Gk$}}N_?$*vRO$ed8 zwU3x4gwWmEM@LI~ZhU2B>ULU(IlHBAViyS3{~6T+a! zbZgg}CWO%4+6|@&A#}HPqiI42-L2hZnh-*FYd4!FgwWmEEv5+}bhmb^X+j9yt$ocj zA%yPMZZk~?p}V!)O%uYP$8~FWm?nhK-P+ep6GG^2?M~B#5V~8t%QPW`?$*9xnh-*F zYu_|Y2%)>RZRCruMV=x%MCX+j9yt&KNL2%)>R zr%V&VpvQM>Pn#x$(B0ZIrU@Z*xAv@QLI~Zh{mC>Tgzna!GffDgyS3*{6GG^2?FG|> z5V~9YvuQ#I-L1W7nh-*FYkx6K2!o!|t-WNL5JGore>F`Ap}V!0O%p=sZtWG*gb=!0 zn_!v{LU(I_GffDgyS2ZYCWO%4+CNMaLg;SoRnvqJx?B6FX+jwEIlV*wWttE|_YQr{ zG$DlU9Xio8A%yN7`nqXC2;DpM4by}Wx_9WCrU@Z*@6bu62_bav(0`jIgwVZ1-!e@I zp?il;HcbeFzNTB7Vww;_cWcvZZqI+e{js6DwP{TgLg;R7I@5#@x?7vxG$DlU)@CqG z2%)>R8BG&H=x*&DrU@Z*xAsocgb=!0dzWcK81#MJ+DxViA#}GkvuQ#I-L1`Hnh-*F zYqOdrgwWmEY^DhzbhkFUX+j9yt<7PY5JGorbDAcE(B0ZxrU@Z*w>GzFLKyV;ZfzdZ zgb=!0o7XfUgznbnGffDgyS4dE6GG^2Z2{AS5V~7i&@>^0?$#DEO$ed8wS`R+Lg;R7 z5z~Yax?5Y+G$9OnO1HL{X+j9ytu1bv5JGorOPD5v(B0aSrU@Z*x3-jNLI~ZhEp3_* zLU(J+m?nhK-P*FI2_ba1ww!4~2;HqMZ<-LM>etTc9lC;PLI~YEbVbvI5W08hN~Q@R zbnnoWO%p=s-l40QCWO$vLsvCT2%&q2u4bALLiY|`-83PD?j5>@X+j9yJ9JIcgfQr9 zy0x`T6GG^2ZEe$p5V~7i$21{??$*{dO$ed8we?IBLg;R7eba;xx?9`8G$DlU);2Uv z2%)>RjZ70l=x%Le(}XbS`?|GFOcO%rZf#T3gb=!0+srf}gznZhH%$nkyR|J$6GG^2 zZA;UH5V~92$}}N_?$)+8O$ed8wQWojLg;R7ThoLv=<(g!cBTm-bhoy>X+j9yt?gi% z5JGorJDMhh(B0ZjrU@Z*x3;rsLI~Zh?P8h`LU(JsnkIzM-P&%Z2_ba1w!3LU81$5G zZ4c9g5V~92(=;K3?$-7)O$ed8wY^OfLg;R7AJc>ox?9`VG$DlU*7h?^2%)>R{Y?`> z=x*%*(}WPZTRYG+Aq@JQ-k}GXCWO$vLk~7h2%&q29%7mhLiY|m)HET4?j3rVX+j9y zJM?hVgb=!S=nR z<4hAm=x*(J(}WPZTRXutA%yPMPBcvjp}Vz{OcO%rZtY~#gb=!0JH<31gznZ(HBAVE zzOP$5%`_o|?$$<_CWO%4+DOxc5V~7C-83PD?$+LInh-*FYws~l2%)>RGfWdg=x*)3 zrU@Z*xAs2Mgb=!0JJU2F40?RG_I}fZ5V~7C%QPW`?$$nFnh-*FYacXC2%)>R51A%} z(B0aHO%p=sZtZN-gb=!08)cdhLU(KDm?nhK-P%V?6T+aUbZZ|qO$ed8wR24qLg;So zW2Olqbhq|#(}WPZTl<7*LI~ZhooAX5LU(KDn`1-K~AeG$DlU)~+^92%)>R(WVJu(6@DK*O(@R(B0aX zO%p=sZtW|k2_ba1cCBeb2;HrH)ifc5?$)j|O$ed8wd+k2Lg;So2GfKPx?8)^G$DlU z)^0LQ2!np4Tf5mbA%yPMZZS;=p}VzPO%p=sZtZKP2_ba1cAIHJ2;HsSZkiB6cWZZ; zCWO%4+Sg4JLg;SoPSb=Cx?8);G$9Q7R@0liq(B0biO%p=sZtZT#k4EnU*q4%05gwVZ1 z$CxIB(7i+NGffDgdx!qOG$DlU9r{Dlgb=!S=>4V%A$0H1ADJeE(7i){Y?=^4_YVDu zX+j9yJM^cf31QF|c54rqCWO%4+JmMEA#}I)kZD2)-K{-rnh-*FYdRpPMFx z(B0Z2rU@Z*xAv%MLI~ZhJ!YB^LU(JwFii-9zO7sPrD;M4-L3t~G$DlU)_!f85JGor zkDDfh(B0Y-rU@Z*xAq&;gb=!0`>kn02;Hsy&NLx}?$&;9nh-*FYkx3J2!np4TN`Vd z5JGore>6=9p}VywO%p=sZf%@tLI~ZhjW&gzna! zHBAViyR|==CWJx1+^s!lnh-*FYtNe|gwWmE3#JJnbhq|r(}WPZTYJ$oA%yPM{$iRC zLU(H~nI?qL-P&JG6GG^2?Pb%15V~7?#WW#I)n|?99Xi1@A%yN7`Zv>r5W08h-%S%j z=-#3KFii-ddxySinh-+w4*jQTLI~YE^k1e4A$0H1*Gv;a=-#0dO%p=s-l4CXCWJv> z)UCZ?nh-*FYj2t+gwWmEB-4Ztx?B6VX+j9yt-WQM5JGorlT8ys=x%L_X+j9ytxdCq zJ^%go$A<3KrZr6np}V!|OcTPOZ|~NoH%$nkyR{ii6GG^2ZAR0C5V~7?hiO6x-L1XT zG$DlU*4|~B5JGorGnpoY(B0b1rU@Z*w>FDuLI~Zh&1#wu2K{KaHk)Ze2;HsCZkiB6 zcWZN)CWO%4+MK2dA#}GkmuW%>-L1`Snh-*FYx9^UgwWmEyru~ubhkF2X+j9yt<7(m z5C;89x3++3LI~ZhEohn$LU(HmnI?qL-P*#Y2_ba1wuos$2;HqMYMKy2cWaB8CWO%4 z+Tx}OA#}I4glR$u-K{NYnh*v(V*G#qs^{nI(=WJ`X+j9yJ9KH&gb=!S=rX1WA$0H1 zWla-8=qa4|zrX);?&VAqLg?P1%bO;I(7i)fFii-ddxx%Qnh-+w4qeGKA%yN7y0U3P z81zNs>&{m(O$ed8wN*_MLg;R7HPeI;x?5Y_G$DkZQs-X7G$DlU*48vl2%)>RwM-L2 z=x%Lo(}WPZTU*C8A%yPM)-_ECgT8%y-T8W^2_ba1w!UdX2;Hr1V44s@cWWD(CWO#a z>f9TdCWO%4+Qy~{A#}I4iD^Oz-K}kEnh-*FYnz!SgwWmE=B5c@(2tI5JFF>bMI!F5JGoryPGD2 z(B0Y|rU@Z*x3;HgLI~Zh?PZz}LU(I>n`b=-#0Rn=LiY|m&om)~?j3r*X+j9yJM@#L2_f{9I`^kc z6GG_Tp`SKQ2%&q2e#SH*gzg=BfoVbr-8=L`(}WPZcj!f?31QF|jjubu*fb%8?$$0b zO$ed8wM$JCLg;SoGSh?*dP<%9v!)3lbhq|7(}WPZTf5veA%yPMt}smqp}Vy!O%p=s zZtW`5gfQsa$Jd>I-ZUYE?$*9wnh-*FYhN@?2%)>RFPSEU&{OK%SDPk;(B0Z-(}WPZ zTf4?IA%yPMzHFKhLU(IlF--`eyR~ag6T+Y$9bb3;RnvqJx?8)>G$DlU)~+{A2%)>R z8%z^I=qYvX8%+~J=x*&M(}WPZTf5mbA%yPMZZS;=p}VzPO%p=sZtZKP31QH$jITSt z%`_o|?$&NMO$ed8wL44`Lg;So>!t}I^praHou&yPbhmbwX+j9yt$o8ZA%yPMzG<2e zLU(K5GEE4fyR~ndCWNW_tdYG#zhjyZLiY~+u4zID-8=MqrU@Z*@6hj?CWO$vL+>_C z2%&q2-eZ~&LiY~6*EAu7?j1VDG$DlU9eST>LI~YE^arL1VbB+MYdR`%M!< z=x*&trU@Z*xAtSxgb=!0`-y2n2;Hsy)HET4?$#bKO$ed8wFgZTLg;SoA=88qx?6kL zG$9Q7j&AK|rU@Z*xAt?>gb=!0d&D#$gznZJHBAViyS2wm6GG^2?H8sAA#}I)OVfl9 zx?B5|X+j9yt^L|GA%yPM9yd)0gMO@Ad%`p!gznaUW10{`cWb{jO$ed8wcnX0gwWmE z?@bdz=x*%~rU@Z*w>H)^A%yPM{%D#ILU(IVnkIzM-P$hKRy=a;cLiY~+i)lg#-8=Lp(}WPZcj#YD6GG@Ib?%o<6GG_Tp|6-GgwVZ1 zCzvLL(7i+dW||N}_YVELX+j9yJM31QF|kFPs_)ifc5?$-Wknh-*FYyUD$2%)>R z*Gv;a=qYvXiKYo5bhq}pX+j9yt-WEI5JGorZ<;2A(B0Z3(}WPZTl=?ZLKyTNFb$LI~Zh z&1`zQx8Dfet<7SZ5JGorvzjJ^(B0Z>rU@Z*w>G zGEE4fyS2GZ6GG^2Z64Ev5V~8N*EAu7?$+irO$ed8wfRjGLg;R70n>yKx?5Y&G$DlU z))q2N2%)>Rg-sK}RQ>wM-l2<_CWO$vLl-qo2%&q2E@qk#LiY|`+%zGC?j5>>X+j9y zJ9J6Ygb=!S=u)N$A$0H1rA-q;=-#2rm?nhKy+fBZO$dX&xLaG!G$DlU)|NL-2%)>R z6-*OC=x%LA(}WPZTU*IAA%yPMRyMu#+i!&K)>bi12%)>RRZSB@=x%K_(}WPZTU*^U zAq@JCZfypJ_q}-8*!D(}XbSi@UW0OcO%rZtXzRgb=!0 zJIFL4gznZ3HcbejyR}116GG^2?NHN%5V~7C%rqf{?$!=BO$ed8wIfUuLg;SoNYjKc z=sUW#qf8S*=x*(3(}WPZTRX-yA%yPMjx|jPp}V!?OcO%rZtZx}gb=!0JHa#|gznZ( zG))MhyS0-{6GG^2?PSwOzx~FbAM4gmF--`eyR}nI6GG^2?KIPb5V~6%VVV#^cWWa} z6GG^2?R3+G5V~7?w`oEM-L1XHG$DlU*3K|Z2%)>R_nIbzK~Lz`-e;N+LU(ItnkIzM z-P-$26GG^2?JU!T5V~9YfN4Sq-K~AlG$DlU);?sK5JGorA2v-0p}V!SO%p=sZf%rl zLKyVfW2gC_*MGj%=-#29G))MDzPelclxac;-K~Av^to@p z5xQIZjA=p$-K||qr z=x*%`rU@Z*xAsNTgb=!0`;uuw81$3f+SR5BA#}Gk+B6}A?$)j`O$ed8wJ)0{gwWmE zS4RF{TM2bhmb&X+j9yt^L3>A%yPMerTEyLU(KTn7GVbJ$>YdRpPD9w(B0YtrU@Z*xAvfELI~ZhJ!F~?LU(Hqo4)_;H$r!7 zKQm1Tp}V!8n81$3f+GC~(A#}I)3)6%Ux?B6DX+j9yt^LY0 zA%yPMer=i%LU(JAnnLU(I_G))MhyR|1x6GG^2ZJcRB2;HrXH%$nkyS1lG6GG^2?P=45 z5V~7?#xx;J)n|0px?6k0G$DlU*4{Kt2%)>RNu~)Qbhq|z(}WPZ zTYJkiA%yPMCYvUN(B0Y;(}WPZTbpL9Y5xCLKmYyq#}0a2w>GV5LI~ZhO=p@ALU(J^ znRnM@Nx=x%Lh(}XbS z$=%v4rU@Z*w>GP3LI~Zh&1RYqLU(Jkn5JEp&dN z-L36ynh-*FYx|fcgwWmEzNQHwbhoyjX+j9yt?h4`5JGor2bd;=(B0aBrU@Z*w|0X+j9yt?gi%5JGorJDMhhL67Jix|3-_2;Dn$XVZib zx_9UR15Fb`=x*&G(}WPZTRYe^Aq;v#w|0nWLI~ZhjWSILp}V!wrU@Z*w|1y$ zLI~Zh9cG#kLU(J2nDG=hO$ed8 zwPQ^aLg;SoIMaj>x?4NmG$DlU)=n@@2%)>R6HOCB=x*&K(}WPZTN`7V5JGorV@(r6 z=x*&~(}XbSS>4(xrU@Z*w|1&&LI~Zhoo1R4LU(JYnn(}WPZTf5#gA%yPMZZJ&F@ zgwWmE-KGg4bhmboX+j9ytxYmb2%)>R$)*V*bhmb|X+j9yt=(su5JGor_nRh!LC@~i z9xzP^p}VyQO%p=sZtWq{gb=!0d)PD~gznZJF--`eyR}D66GG^2?J?7Y5V~7?+%zGC z?$(|#O$ed8wI@vz!k|a?4t>frA%yN7I>j_0gzg~A#}I) zH`9bL=!xCh-%S%j=x*&FrU@Z*xAuZ*LI~Zh{nIodgznb)wYg0bLg;Sob*2d+bhkE-X+j9yt-anfAq;wUw>Gb7 zLI~Zhy}>jggznbfXqpg0cWd*RCWO%4+M7%hLg;So&87(942!8=V8Lg?P13!5f{(7i+7WttE|_YQrxX+jA7O1abhq{a(}WPZTl=7CLI~ZheaJK+gznZpY?=^4cWaB9CWO%4 z+G3^&VbBx1wU3x4gwWmEM@RubC!<(B0bCO%p=sZtWYU2_ba1_D$1-5V~7i)-)l6 z?$*9#nh*v(vUljWO%p=s-l5BxCWO$vLzg#A2%&q2u3(xFLiY|`(KI21?j5?4X+j9y zJ9K5!gb=!S=qjcOA$0H1RZSB@=-#2LnI?omkL}i0H%$nkyR|h;6GG^2ZB5gJ5V~7i z%QPW`?$*{eO$ed8wRKDrLg;R7UDJdRx?5Y%G$DlU*48&o2%)>R4NMclpeJ@~-!V-H zp}VyWO%p=sZfzsegb=!0+t@TAgznb9Ynl*3cWd7>O$ed8wM|SDLg;So`=$vYbhq{c z(}WPZTl=ADLKyVaZtX{=2_ba1_G8n85V~9YiD^Oz-L3u9G$DlU)_!K15JGorKQ~PX zp}VzTm?nhK-P$ir6GG^2?N_D=A#}I)Ytw`<=-J)cZ%h+H=x*(|rU@Z*xAr^Jgb=!0 z+tf56gznZhGffDgyS2?t6GG^2Z41+c5V~92(ljB2?$)+4O$ed8wXIDP!W{kbX1znV zF--`edxvgonh-+w4&BZ)A%yN7y1i*a2;Dn$2h)TQx_9V~rU@Z*@6er06GG_Tp*x!< zgwVZ1cQH)}p?in!YMKxReMq;qn`uG_-K~uCWO%4+KHwKA#}HPl4(K+-K~u=O$ed8wXvoNA#}HP zvS~sH-L0Ksnh-*FYp0qfgwWmEX{HGwbhmc8X+jwEX1zntFii-ddxxHBnh-+w4n4~> zA%yN7dbVjo2;DpM9Mgmlx_9WgrU@Z*@6hv16GG_Tq34?>gwVZ1FEC9Ap?impGffDC zKBQY4Z<-K7cWW1#CWO%4+C`=bA#}HPv1vjG-K||>nh-*FYnPfPgwWmEWu^%sbhmc7 zX+j9ytzBW75JGorSDGe-L0{0VU1gdOLU(Idn2O$ecThdyDN z5JLA3ebO``gzg>slxac;-8*!OX+j9yJ9MgPLI~YE^l8(CFz8X;+B2pJA#}I)tZ70B z-K|YCO$ed8wcnd2gwWmEA50TM=x*(grU@Z*w>I50A%yPM{$!dELU(I_HcbejyS2ZV zCWJwc>(*wNCWO%4+Fwl*Lg;SoIn#s?x?6kRG$DlU)@GU}gwWmE-%Jxi=x*)rrU@Z* zxAqUygb=!0d%-jzgznb-L3uGG$DlU)?PGC2%)>RmrN5v=x*&l zrU@Z*xAwAWLI~Zhy<(aWLU(JgnkIzM-P&uW2_ba1Hp?_24Ep(QZMJDb2;HsCwY=T` z{@<~oyS2GZ6GG^2?RBOJA#}Gkk7+^(-L1XeG$DlU*5)-$2%)>RH<%`b(B0Y_O%p=s zZf!o(gfQsMdxyTsG$DlU9r|X|gb=!S=vzz^Lg?P1^P47w(7i+7YMKy2_YPgaG$DlU z9r`xYgb=!S=-W*bLg?P1?=VdWp?ileXqpfPJ*rz<$TT5@?$+LEnh-*FYYUqugwWmE zyG#>8=x*)ZrU@Z*x3-9BLI~Zhy~i{mgznbfYnl*3cWdu6O$ed8wfCDQgh7w%);?gG z5JGorA2dw}p}VyYnI?qL-P(su6GG^2ZBf&N5V~7i%rqf{?$$nHnh-*FYacaD2%)>R z#Z41J=x%KZ(}XbSN!{9#rU@Z*x3-jNLI~Zheati=gznasHcbejyS0y-CWO%4+9ymC zLg;SolcotFbhq{?(}WPZTl=(WLI~Zhea18)4Ep(Q?X#u{A#}I)In#s?x?B6aX+j9y zt$o2XA%yPMmN88Tp}Vy&nkIzM-P)H-6GG^2?aQVKA#}I)71M+ex?B6IX+oHzU*5cT z=+{gWLg;D#zkk;=*Z=!|;IEq|gwVZ1zhRmXLiY~+rfEV5-8*zy(}WPZcj&iF6GG_T zq2D%52%&q2E@zq$LiY|`-ZUYE?j5>R zjZ70l=x%Le(}XbSN!{9aO%p=sY1P{IOcO%rZfz6Ogb=!0`@U&H2;Hsyz%(I*?$&;2 znh-*FYdRADbqG(B0ZkOcO%rZtbV031QIBcWXa0O$ec zt!Y9C-8*zU(}WPZcj)$}31QHqy0sll6GG^2ZAa6D5V~92$uuE^?$&lTO$ed8wOvdT zLg;R7SJQ+Lx?9`LG$DlU)<&2ngwWmENYjK6x?9`bG$9OnT(`D|X+j9yt?g-=5JGor zdzmJL(B0bJrU@Z*x3-UILI~Zh?Q5D4LU(KXnI?qL-P-=92_ba1c7SO@2;Hq6XqpfP zJ*ite$TT5@?$!=AO$ed8wL?r3Lg;R7lxac;-K~u_O$ed8wL?u4Lg;SoFw=w(x?4Nk zG$DlU){Zbu2%)>RBTW;+pr7y7jxtRMp}V!CO%p=sZtWP;gb=!0JJvKIgznakGffDg zyS3v@6GG^2?F7?=5V~7C(KI21?$%B+O$ed8wK1j%VUFH;i{7DQO%p=sX|+R7Hcbej zdxxH4nh-+w4n5U0A%yN7dYWlM2;DpMbkl?ox_9UqrU@Z*@6a<%6GG_Tp=X&UgwVZ1 z&o)g6gC5RYfTfvpeJ{0*O?}S(9^25 z38o1lbhkFqG$DlU)~+{A2%)>R8%z^I=x*&s(}WPZTf50LA%yPMZZ=H_p}VzPOcO%r zZtYgngfQrt-P&!Y2_f{fYVCH@gb=!0yTddggznbvG))MhyS2Ma6GG^2?QYYA5V~8t z$21{??$#!mCWO%4+GNv&5V~8t*EAsvdW+tn_n9Vy(7i+NH%$nkdxt(?nh-+w4t>xx zA%yN7`jBZt2;DpMVbg>Vx_9U!rU@Z*@6bn06GG_Tp^up+gwVZ1A2&@1gC5+k>m z-?5>)wYg0bLg;Sob*2enj(&NI-l6lDCWO$_YKOkwG$DlU9XhXRLI~YE^bMv7A$0H1 zH<~7d(7i+FGffDgdxyTsG$DlU9r|X|gb=!S=vzz^Lg?P1^P47wL67d%-fEfRcbX=I(B0a?rU@Z* zxArd6gfQsw-P*fN6GG^2Z4uLi5V~7?k7+^(-L1XXG$DlU*4}5D5JGor?>9{dp}VyY zm?nhK-P#9D6GG^2?L(#sA#}I)Vbg>#=*ivMqNWKUbhoycX+j9yt$oBaA%yPMK5Ci} zLU(J6nR zPnafz(B0Z6O%p=sZtYX12_ba1_G#0E5V~9YjA=p$-K~ArG$DlU);?#N5JGorpEpei zp}Vy&m?nflZ_zt+8PkLix_9UoO%p=s-l1PIO$ecThkn^KA%yN7`W4fJ5W08hS4|T_ z=-#1UGffDgdxw7AG$DlU9r_K^gb=!S=r>Ih!k|ZYYs;D@gwWmEw@ed4=x*)XrU@Z* zx3-*VLI~ZhEpM6-LU(H`m?nhK-P($#2_ba1wvuT=2;Hr%Y?=^4cWbMdCWJwc@77i| zO$ed8wbe`$Lg;R7b<>0px?5YrG$DlU*48vl2%)>RwM-L2=x%Lo(}WPZTU*C8A%yPM z)-_ECp}V#9OcTPOCwFV>n^0?$$OkO$ed8wT(>^ zLg;SoyQT>tbhq|B(}WPZTie7mA%yPMzHgck20gP|`+;df2;Hsy&@>^0?$&-}nh-*F zYdRpO_|u(B0ZkO%p=sZtZ8L2_ba1_H)yO5V~9Yg=sRk){bDbhoy?j1VTG$DlU9eT29LI~YE^c2&C5W08hsip~G z&?j|kr%(B0bUrU@Z*w|0hULI~ZhooSj7LU(ItnI?qL-P+lv2_ba1c8+O62;Hrn zYnl*3cWdXFCWO%4+WDplVbIrgYZsU%gwWmEIMaj>x?3A>nh-*FYZsa(gwWmEMWzWM zbhmb~X+j9ytzBZ85JGormzpMo(B0Z)rU@Z*w|2Q{LKyT@-P#qV2_ba1cBN@T2;Hq+ zWttE|cWYOhCWO%4+BK#LA#}HPt!Y9C-K||`nh-*FYZFWpLg;R7qG>`1-K|}3nh*y4 zTDNwCX+j9yt=(vv5JGorH<>1c(B0b2rU@Z*w|0wZLI~Zh-D;W;LU(JonI?qL-P-M@ z2_ba1c86&~2;HsSX_^q`=$%LO4!z4XA%yN7dbepp2;DpM9@B&nx_9U#(}WPZcj#o( zgb=!S=)I;1A$0H1`%Du;=-#3Cns1CWO%4+S8^9A#}I)jA=p$-K{-qnh-*FYtu{RnWhOLbhq|5(}WPZTl>3dLI~Zh{lhdN40=|#_JV0b2;Hsy(=;K3 z?$-Wgnh-*FYyUP)2%)>R7flmF=x*&L(}WPZTlN{l8;F_YR%gG$DlU9r`-cgb=!S z=sczgA$0H1*PAAU(7i+FHBAVidxyTkG$9OnOty~8vi zgznZBG))MhyS0T(6GG^2?VY9xA#}I4uxUaF-L1XLG$DlU*4}NJ5JGori@8gzg>s1=EBOx_9U@rU@Z*@6a!r zCWO$vL%(F25JLA3{jzC781$HK?JK4UA#}I)RnvqJx?B62X+j9yt$p1zA%yPMzG0dW zLU(K5G))MhyR~Ia6GG^2?OUb^A#}I)ZPSDhx?5Y$G$9OnLbtZOX+j9yt*v015JGor zE1D*R(B0ZfrU@Z*x3;orLI~Zhtzw!GLU(JcnkIzM-P&rV2_ba1wz_FT2;Hr%VVV#I zJ*8V)(=;K3?$*{aO$ed8wY5zXLg;R79n*vmx?5YR^-U8(=x%KT z(}WPZTlA%yPMerTEyLU(IFGEE4fyR{#iCWJwc=pFhK(}WPZcj!+|6GG_T zp+7TC2%&q2{@gSngzg>s3)6%Ux_9U=O%p=s-l4xTO$ecThyL0$A%yN7`Ww@P5W08h zZ%q@zpvQD;zcWn;p}VzBO%p=sZf!Hugb=!0+uSrEgznb1Fii-dyR|J%6GG^2Z7b7+ z5V~92+B6}A?$)+3O$ed8wQWrk!k{N~YulM7gwWmE_NECTbhoyHX+j9yt?g)<5JGor zJDDbg(B0b3rU@Z*x3-IELI~Zh?P{73LU(JsnI?qL-P#D#gfQqS-P%aggb=!0+ubxF zgznb%Fii-dyR|({6GG^2Z7(B0a>rU@Z*w|0nWLI~ZhjWSILp}V!wrU@Z* zw|1y$LI~Zh9cG#kLU(J2nR@umqObhmb)X+jwE)Nbt}(}WPZTf5jaA%yPME-_6Ap}Vz9O%p=s zZtXJDgb=!0yWBJ(gzna^Fii-dyR|D#6GG^2?JCoR5V~8t+B6{ydUm&VjcGy%-K||~ znh-*FYuA}3gwWmE1k;2Nx?7uQnh-*FYuB45gwWmE4Wp zA#}I)fN4Sq-K{-nnh-*FYY&+wgwWmE!=?!#bhq}1X+j9ytvza*5C%Q5TYJnjA%yPM z9yd)0p}VywOcO%rZtY3agb=!0d&)E+gzna+m?nhK-P%;sgb=!0d)hQ1gzna!F--`e zyR~Oc6T+aUc5Bm26GG^2?f0e$A#}I)2h)TQx?B6BX+j9ytxY#g2%)>RKba~A#}I)H`9a= zx?B6ZX+j9yt^LC^A%yPMUNB7vp}VzznkIzM-P*rQ6GG^2?cb&eVUB)zWbe=yO%p=s z-k~psifKX!-8=ME(}WPZcj#-T2_bav&{?JlA$0H1 z*`^60bnno)RX>_7>BG5V~8N-!vhF?$+LF znh-*FYYUhrgwWmE+e{Ne=x*)prU@Z*xAqRxgb=!0ThKHigznZBGEE4fyR~gpl5e$A2Lk{p}VyYn^3LiY~+glR$u-8=M?rU@Z*@6b<~CWO$vLqBbr5JLA3{fucs2;DpMv!)3lbnnp5 znI?omkL}hzZ<-K7cWYlTO$ed8wPj2bLg;Soi>3)7bhq{;(}WPZTl=zULI~ZheZ@2( zgznb9YMKy2cWYlWO$ed8wXd5dgh5a2*1lny5JGor-!x4Kp}VzZO%p=sZtYv92_ba1 z_HEOI5V~7i&NLx}?$(w!O$ed8wG~VgLg;R7Mbm^3x?5YxG$9OnYPYtsX+j9yt*v63 z5JGortC}W+(B0ZX+j9yt!-$U5JGor8<{4A z(B0a`rU@Z*xAtArgb=!0`<`h+n4@3atas=prU@Z*@6hj?CWO$vLw{hJ5JLA3{h?_> z2;DpMN2UoObnnm~nRZA}wG z=x%L0(}WPZTif0=A%yPMb}&r{p}VymO%uYP@9EZdGEE4fyS1H76GG^2Z5Pvo5V~92 z)ifc5?$&lQO$ed8wGpNXA#}Gk(ljB2?$&lUO$ed8wLMG|Lg;R7Pt$}j=;yk%y-X8A z=x%Lq(}WPZTieGpA%yPM_BBlip}V#HOcO%rZf$?lgb=!0JHRv{gznZ3G))MhyS0N% z6GG^2?O@Y{FzC&ChaO^@5JLA39c7vjLiY|GZJH25_YOVOG$DlU9eS8)LI~YE^l;OJ z5W08h5vBRGffjh=x*&S(}WPZTRYn{A%yPM z&M{30p}VznO%uYP@9EagGffDgyS4L86GG^2?E=$;5V~6%XPOW~cWdKK6GG^2?LyOp z5V~8t$TT5@?$$0gO$ed8wM$GBLg;SoQqzPm=;yk%%S;nO=x*(D(}WPZTf4$EA%yPM zt~5;up}V!KOcO%rZtZH*gb=!0yT&vjgzna^HBAViyS3{~6GG^2ZGve+n4@>yym#nC z(}WPZcj)z|2_bav&>Kt>Lg?P1H<~7d(7i)%GEE4fdxzd^nh-+w4!y-RA%yN7daG$d z2;DpMHq(RHR zcbO)H(B0a*O%p=sZfz0MgfQsmyS4Y2CWO$_tF`xabhq{a z(}WPZTl=7CLI~ZheaJK+gznZpY?=^4cWaB9CWO%4+G3^&VUB)v^WLE!F--`edxw71 zG$DlU9lE$_LI~YEbP3ah5W08hlBNkEbnnomOcO%r-k~2eO$ecThc0cJ5JLA3{kUmD z2;DpM6Q&7a(4)GwPnsr#(B0anOcO%rZtc^i2_ba1_8HTJ5V~9YtZ70B-K~AjG$DlU z);@2V5JGorUocGwp}VzZOcO%rZtaVv31QIVy0tHvCWO%4+LuieLg;SoE2aq{bhq|Z z(}WPZTl<=6LI~Zhecd!6gznb9VVV#^cWd7?O$ed8wPj5cLg;SoTc!zN(385gZ<{8B z(B0Z{rU@Z*x3;`#LI~ZhtzeoELU(H`nkIzM-P%f~2_ba1wz6qL2;Hr%Vww;_cWbMf zCWO%4+G?f=VbITaYpa_kgwWmE8m0*$bhoyqX+j9yt*vF65JGorYnvv7(B0ZPrU@Z* zx3;cnLI~Zht!J7LLU(KHn{q^rU@Z*@6e4*6GG_T zp&OefgwVZ1ziXNhLiY~+o@qh|-8*y>(}WPZcj)&`6GG_Tp+7K92%&q2{?Ifb40=?z z_9N4T5PEvG_G8n85V~9YiD^Oz-L3u9G$DlU)_!K15JGorKQ~PXp}VzTm?nhK-P$ir z6GG^2?N_D=A#}I)Ytw`<=yBcJZ%h+H=;_tkZ%q?I=x*(IrU@Z*x3;NiLI~ZhZDyJf zLU(JMnejX~O$eclVF3_cKihp?in!Z<-K7_YOV4G$DlU9eSW?LI~YE z^dQrO5W08h!KMizbnnnZOcO%r-l3yR6GG_Tp`%R`Lg?P1hngmYL67d%4l_*%p}V!i zO%p=sZtV!ugb=!0JJK{EgznakGEE4fyS1ZD6GG^2?HJR95V~7C)-)l6?$(YoO$ed8 zwc||_!l1`@YbTf{gwWmEiKYo5bhmbrX+j9yt&K5F2%)>Rv8D+jbhmc0X+j9yt({_; z5JGorr}LiY}x zXqpg0_YS?@G$DlU9eRUlLI~YE^hVQ!FzC_U+D)bjA@uZW?Pk-25V~8t#WW#=?$&NK zO$ed8wcAV+Lg;SocGH9qx?8)$G$DlU*6uV-2%)>RyG#>8=x*(9(}XbS@!i@zrU@bR z^lELAX+j9ytxYyf2%)>RdrcEU=x*&k(}WPZTf5&hA%yPM9xzP^p}VyQO%p=sZtWq{ zgb=!0d)PD~40>|6_K0ah2tB=8d(<=`gznZJGffDgyS2wn6GG^2?FrL_5V~7?(ljB2 z?$(|%O$ed8wJD|vA#}Gk)ifc5?$(|*O$dXY*{wZenh-)yuhyP5O$ed8wP~gaA#}I) zd((svx?B5$X+j9yt^Lt7A%yPMrkf^&(B0afOcO%rZtc&e2_ba1_7~HHFh{?-MeooV zrU@Z*@6f-RCWO$vL!UEE2%&q2K5v>3LiY}xX_^p1_YVD=X+j9yJM{0S2_bav(0`aF zgwVZ1UocGwp?in^(=;IrdUUt;FVln&x?B6VX+j9yt-WZP5JGorFPSEU(B0a9OcO%r zZtZ2$gb=!0d&M*%gznZ}HBAViyS3L$6GG^2ZI)?581(pVZMJDb2;HsCwaR}#R+pds ze;$Mox?7vuG$DlU)?R0t5JGor^Oz=t(B0bWO%p=sZf#!Egb=!0dxL302;Hr{(KI21 z?$+irO$dXY+^xOIG$DlU*4}KI5JGorZ!t{>p}V#DO%p=sZtbn62_ba1wt#6u2;Hr{ z%`_o|?$+LJnh-*FYws{k2%)>R1x*vepl5b#3z;T_(B0ZQO%p=sZf#-Hgb=!0dzWcK z2;Hr{+cY7B?$#DDO$ed8wfC4NgwWmEdrcEU=x*(OrU@Z*xAuP1gfQqWdWU|%G$DkZ zUOV)IrU@Z*@6ZpKCWO$vLqBYq5JLA3UDPxogzg=>m}x=?-8=LnrU@Z*@6eB$CWO$v zLl-wq2%&q2E@7Gw20gl4ThcTkgznasGEE4fyS0y*CWO%4+R~;8A#}I)anpnlx?B5% zX+j9yt$oroA%yPMK4qE^LU(JQHcbejyS2}lCWJwc@76wRnh-*FYo9Ys2%)>R&zmNM z(B0Y>OcO%rZfzOUgb=!0`=V(=2;HrH$uuE^?$*9+nh-*FYhN)<2%)>RubL)=K~L`1 zzGj*bLU(IlH%$nkyR~naCWO%4+BZ!TLg;R7S<{3Nx?B5}X+j9yt$o`xA%yPMmNQKV zp}V!^O%p=sZfynAgfQrt-P($#2_ba1wvuT=2;Hr%Y?=^4cWbMdCWO%4+N!1rA#}I4 znrT7^-L0)|nh-*FYipP$gwWmEnx+XMbhoyaX+jwEZoNa-Hcbejdxx%Lnh-+w4qewY zA%yN7x}Ir52;Dn$eba;xx_9UXrU@Z*@6hjtbhq|B(}WPZTie7mA%yPMzHgckLU(IFFii-dyR{#hCWO%4+K)^VLg;So z$EFD(bhq{s(}WPZTl=YLLKyUQ-P+Gg6GG^2?dPTmA#}I)3)6%Ux?B6DX+j9yt^LY0 zA%yPMer=i%LU(JwF--`eyS3k%CWO%4+V4ygLg;R7Q`3Yn=%>21%}f(Q=x%Lu(}WPZ zTie1kA%yPMwlqx$p}V!MOcO%rZf$GRgb=!0+r~5@gznb1HBAViyS4316GG^2ZF|#% zFzDC1wH-_oLg;R7N7IB5x?9`HG$DlU)^;{c2%)>RT}%@~=x%LS(}WPZTieYvA%yPM zMwljq(B0Zd(}WPZTie|=-#0Rm?nhKy+aQ)O$dWNsare9G$DlU)($pJ z2%)>RLrfDw=x%M4X+j9yt&KKK2%)>RLroJx=x*&W(}WPZTRYq|A%yPMjxbFKp}Vys zO%uYPuj|&1GEE4fyS1ZD6GG^2?HJR95V~7C)-)l6?$(YoO$ed8wc||_Lg;So1k;2N zx?4NZG$DlU)=n}_2%)>RF{TM&&`))1V@(r6=x*&~(}WPZTRX)xA%yPMPBl#kp}V!y zOcO%rZtZl_gb=!0JHs>~gznbPG))MhyS1}S6GG^2?QGM8FzDC1wR21pLg;SoT+@UQ zx?4NXG$DlU*3LIg2%)>R3rrJ2=x%MCX+j9yt&KNL2%)>R3r!P3=x*&I(}WPZTf5ja zA1c(B0b2rU@Z*w|0wZLI~Zh-D;W;20fu$yUjEqgznaE zH%$nkyR|z^6GG^2?M~B#5V~8t%QPW`?$+)$O$ed8wR=nxLg;R7l4(K+-K|YFO$ed8 zwR=qy!l0*gYxkKZgwWmE{iX>abhq|^X+j9ytvzU(5JGor51A%}(B0a@rU@Z*xAur> zLI~ZhJ!+Z|LU(JAnI?qL-P+@(31QH)y0s@v6GG^2?Mc&w5V~7?$}}N_?$)N5CWO%4 z+Emko5V~7?+B6}A?$(|$O$ed8wP#HeLg;R7nrT7^-L3uJG$9OnMDNf)m?nhKy+i+K znh-+w4xMhA5JLA3{gY`z2;DpM&!!0>bnno=m?nhKy+dc1CWO$vL;q@;5JLA3easylFxh^q6jKrfEV5-L3u2G$DlU*8Xmq5JGor|1eDmp}VygOcO%rZtb6@2_ba1 z_Ak?f5V~9Yw`oEM-L1W7nh-*FYcH85gh5Z}*8XFf5JGorFPkQW(B0ZArU@Z*xAv-O zLI~Zhy=IyaLU(JkOcO%rZf&+{LI~Zh&9$oC|Nh^xp}V!YO%p=sZtZoZ31QGvy0v*s z6GG^2?e(S!A#}GkuW3RE-L1XBG$DlU*4}8E5JGor^O+`u(B0abOcO%rZtcyc2_ba1 z_7>BG5V~8N-!vf%dRDjgR?~zKx?5YoG$DlU*4}2C5JGorZ#PW{p}Vzrm?nhK-P(et z2_ba1wvcH;2;Hr{(=;K3?$#DIO$ed8wRf2&ggN@v5xqm-ZJH25_YPgeG$DlU9r_;A zgb=!S=zC2QLg?P1?=wvZp?inE-!vhF?j8C8(}WPZcjyOA6GG_Tp&v3$2%&q2e%Lf2 z40=qrwy0@B2;HqMW||N}cWWOpO$ed8wU3%6gwWmE;-(29bhoyIX+j9ytu1Mq5JGor zOPMBw(B0a{OcO%rZf$APgfQp{-P*@Z6GG^2?GvU6A#}I)Nz;T7x?B5{X+j9yt$o@w zA%yPMK4Y2?LU(JQHBAViyS2}mCWO%4+UHFZLg;So3#JKS&{Mj#WlR%7=x*(crU@Z* zxArB|gb=!0`?6_52;HrH#WW#=?$*9)nh-*FYhN=>2%)>RubU=>(B0ZMOcO%rZta_< z31QH)y0v9Z6GG^2?OUb^A#}I)ZPSDhx?5Y$G$DlU)|NL-2%)>R6-*OC=x%LA(}WPZ zTU*IAA%yPMRyIutp}VzJOcTPONAwO|)ifc5?j5?CX+j9yJ9Kr^gb=!S=o+R8A$0H1 zHBA#j=-#1gnI?qLy+hYFO$ecThpuCq5JLA3UDq@rgzg=>o@qiD^q6jKeba;xx?9`8 zG$DlU*1lt!5JGor8=5AB(B0ZbrU@Z*x3;lqLI~Zheb+Q0gznb9XPOW~cWaxNCWO%4 z+V@Qp!k{N~YdRADSkF(B0aPOcO%rZtcgW2_ba1_7l^D5V~9YscAw8-L3u1 zG$DlU)_!i95JGorzc5V*p}VzTnkIxnPwCcvWttE|cWb{kO$ed8wcnT~gwWmEZ%q?I z=x*(IrU@Z*x3;NiLI~ZhZDyJfLU(JMnR9ZeHL=x%K%(}WPZ zTie+*A(B0a>rU@Z*w|0nWLI~ZhjWSILgPz!}jW$gP zp}Vz1O%p=sZtXDBgb=!0JKQuOgznakFii-dyR{=t6GG^2?I_cP5V~7C+B6}A?$(Ym zO$ed8wPQ^a!l0*iYsZ-;gwWmE@umqObhmbbX+j9yt(|C^5JGorCz&RM(B0Y?(}WPZ zTN`Vd5JGorCz~dO(B0Z8rU@Z*w|1&&LKyVyZtXPFgb=!0JKZ!PgznbPFii-dyR|b- z6GG^2?JU!T5V~7C+cY7B?$*vRO$ed8wR24qLg;SoJkx{_x?4NnG$9OnWbe=mOcO%r z-l5}66GG_Tq2o;xLg?P17n&x7(7i)1GEE4fdxu_Znh-+w4!y)QA%yN7dZ}qb2;DpM zGSh?*x_9X1rU_xtW4pC0OcO%rZtY6bgb=!0yUH{ngzna^HcbejyR~af6GG^2?OM}> z5V~8t&NLx}?$#!lCWO%4+CgfK_HI%(7i){Z<-K7_YVDoX+j9yJM@pH2_bav(CMZLA$0H1Kba~A#}I)H`9a= zx?B6ZX+j9yt^LC^Aq;wAxAuZ*LI~Zh{nIodgznbGzFLI~Zhz0NctgznbnF--`eyS3MwCWO%4+PtO-A#}I)2GfKv z=-J)c8%+~J=x%L3(}WPZTYHmfLI~Zhz1cJ&gznbfVww;_cWd*TCWO%4+FMN%Lg;R7 z0n>yKx?6jjX+j9yt-akeAq;wC@6dOcCWO$vLl-nn2%&q2E@YYzLiY}Rr)fe6-8*z) z(}WPZcj&uJ6GG_Tq3A#}I)LDPf~x?B5@X+j9yt$o-uA%yPM7Bx)>p}V!kOcO%rZtWwc2_ba1 z_EFP>FzAWh+Tx}OA#}I4glR$u-K{NYnh-*FYfG6XgwWmE$4nDK=x%Lk(}WPZTl=_a zLI~ZheZn*$gznZpX_^p1cWa+AO$dXY+O2)sG$DlU);?pJ5JGorpEXSgp}V!unI?qL z-P-3(6GG^2?F*&}A#}I4jA=p$-K~AmG$DlU*1lw#5JGorUp7q$gPz^3eZ@2(gznb9 zYMKy2cWYlWO$ed8wXd5dgwWmEH%t>k=x*(srU@Z*x3;WlLI~Zheakcnh-*FYwMdPgwWmE2Brxibhq{$(}WPZTiehyAq@J0Zfzse zgb=!0+t@TAgznb9Ynl*3cWd7>O$ed8wM|SDLg;So`=$vYbhq{c(}WPZTl=ADLI~Zh z{m3*SgznaUY?=@TeNVUc6Vrqcx?B6HX+j9yt^Le2A%yPMer}o&LU(JwFii-dyR~1M zCWO%4+OJF#Lg;So*QN;}bhq{!(}WPZTl=kPLKyUO-P-R=6GG^2ZBx^P5V~92%rqf{ z?$$OpO$ed8wJl5&Lg;R7OVfl9x?9`IG$DlU*0wfH2%)>RZA=qF=x%LW(}XbS&3cD! zXPOW~_YU3OG$DlU9lC>QLI~YEbVt*K5W08hPNoSVbnnoeO%p=s-l4mgCWO$vLw7Yz z2%&q2?q-@0LiY|GVVV#IeMq-9(ljB2?$&lUO$ed8wLMG|Lg;R7Pt$}Dx?9`JG$DlU z*7i0{2%)>ReM}QV=x%La(}WPZTieexA%yPM_BTxkgTA0!JHRv{gznZ3G))MhyS0N% z6GG^2?O@Y{5V~7C#55sRBTW-R=x*&O(}WPZTRYk`A%yPMjxkLLp}VzXO%p=sZtXbJgb=!0JKi)Q zgznZ(Fii-dyR{Qd6T+aM>()*(O$ed8wK1j%A#}Gk)-)l6?$%B=O$ed8wNp$JLg;So zRMUhIx?4NVG$DlU)=oD~2%)>RGfWdg=x*&y(}XZbkJ!9-=vk%-A$0H1vrQ91=-#2{ zm?nhKy+hA6O$ecThn{De5JLA3J>N7Tgzg=BfoVbr-8*!gX+j9yJ9NBhLI~YE^g`2w zFz8X;+C`=bA#}HPv1vjG-K||>nh-*FYnPfPgwWmEWu^%sbhmc7X+j9ytzBW75JGor zSDGe-(B0ZqrU@Z*w|2E@LKyV8ZtWV=gb=!0yVf)zgzna^GffDgyR`|X2_ba1HqkU8 zgzna^H%$nkyR{ok6GG^2?MBmt5V~8t$uuE^?$&NLO$dXY)UDlOnh-*FYqy#vgwWmE zZKeq!bhmc9X+j9yt=(ao5JGorcbX=I(B0ZyrU@Z*w|2K_LI~Zh-D8>%LU(JEOcTPO zpYPTtnsxM@NN-8=LN(}WPZcj%L*2_bav(5Flj zLg?P1Q%n;==-#1IO%p=s-l0#MCWO$vL!U8C2%&q2K5Lo~20f}R*Gv;a=x%M6X+j9yt<5$~2%)>RxmLIP-~T&y(9d^kbDJiF(B0bW zOcO%rZfzdZgb=!0d%bBw2;HsCYnl*3cWZAjO$ed8wKtk3gwWmEe5MH@bhq{<(}WPZ zTYIxgpvQG=LU(JQG))MhyR}c5CWO%4+NVtuLg;SoGo}e4bhq|d(}WPZTl<`8LKyV(-P-3( z6GG^2?F*&}A@q!DZ5h*q5V~9YqG>`1-K~AeG$DlU*1l|-5JGorUolMxp}V!OnkIzM z-P+eo6GG^2?dzrqVbGiR4*iB{LI~YE^qZy$A$0H1Wla-8=-#2ef~^O$ed8wN*?LLg;R7 zRnvqJx?5Y#G$DlU)>b!72%)>RHB1vi=x%LI(}WPZTU*OCA%yPM);3KDp}VzpOcTPO z$8~G#nkIzM-P(Gl2_ba1w!UdX2;Hr1V44s@cWd7 zCWO$vL$^0g2%&q2?qHe_LiY~c(KI0pdUUt8lW9T--L36xnh-+IsMdBdO$ed8wOvgU zLg;R7H`9a=x?3Aznh-*FYa>k)Lg;R7chiIrx?9`BG$DlU*7h__2!kHqt?gx+5JGor zdz&VN&@-yFeM}QV=x%La(}WPZTieexA%yPM_BTxkp}VyMOcO%rZtXzRgb=!0JIFL4 zgznZ3HcbeFp4_b+Vww;_cWa|e6GG@2)!Jy&gb=!0JJd8GgznZ3GffDgyS2kj6GG^2 z?FiF^5V~7C(ljB2?$(YnO$ed8wWCcF!k}k%YsZ)-gwWmEv8D+j^o(llIMaj>x?4Nm zG$DlU)=n@@2%)>R6HOCB=x*&K(}WPZTN`7V5JGorV@(r6=x*&~(}XbSEqaHZVww;_ z_YOVPG$DlU9eSE+LI~YE^mNmN5W08h8Kwy#bnnnJO%p=s-l1oiCWO$vL(eu%2%&q2 zo@1I2LiY|m*EAsvdUUsTo@qh|-L0K(nh-*FYZsU%gwWmEIMaj>x?3A>nh-*FYZsa( zgwWmEMWzWMbhmb~X+j9ytzBZ85JGormzpMoL67g&E;CICp}V!qO%p=sZtV)wgb=!0 zyV5ivgzna^GEE4fyS1xL6GG^2?HbdB5V~8t)-)l6?$)j|O$ed8wF#yPVbGJiwTY$) zA#}HPy=g)S-L2hVnh-*FYd4xEgwWmEO{NJUbhmc1X+j9yt=(dp5JGorx0)t|(B0Z? zrU@Z*w|2W}LKyVSZtV`!gb=!0yVEowgznbvGEE4fyS2Mb6GG^2?H<#F5V~8NWSS5{ zcWaYP6GG^2?OxM_5V~8t&om)~?$+)%O$c-JtSx$nK46*^0o>4pWA=88q zx_9WqrU@Z*@6bm~6GG_Tp^us-gwVZ1A2Uq|p?iluZkiB6_YQr+G$DlU9r~ncLKyVu zZtW@4gb=!0n_`*}LeHqyrkW;%(B0b8rU@Z*xAu%_LI~ZhJ!_f}LU(J^OcO%rZteG` z2_ba1_6O615V~9YqiI4I^!RRVx@kfP-L3t}G$DkZQLX*iG$DlU*8XCe5JGorGfWdg z=x*(=rU@Z*xAvTALI~ZhJ#U&2LU(I3O%p=sZtZWT31QHayS2ZYCWO%4+CNMaLg*RQ z+6$%$A#}I)Pt$}Dx?B5~X+j9yt^M0HA%yPMUNlVzp}V!0OcO%rZtXv&2_ba1_OfY0 z81&3;?G@965V~7?)ifc5o>8s6W||N}cWbju6GG^2ZMJDb2;HsCwZ?zn%<{AU&w~&` zcWZN-CWO%4+UracLg;R79@B&nx?6j_X+jwE7QI8~HBAVidxyTkG$DlU9r{Mogb=!S z=zOLLA$0H1H<>1c(7i+7Y?=^4_YQrFX+j9yJ9K{2gb=!S=vz$_Lg?P13z#N^L67d% z-e#H*LU(I#H%$nkyR~RcbO)H z(B0a*O%p=sZfz0MgfQsw-P(Ih6GG^2?Y*W6A#}I)KGTE{x?6j{X+j9yt$n~WA%yPM zK4_W{LU(H)GEE4fyR{FSCWO%4+M=cjA#}I4m}x>7^yF^sBc=%T zA%yPMmM~2Sp}VyuO%p=sZfz;kgb=!0`(7i*yVVV#^_YVE0X+j9yJ9Jsogb=!S=(kK0!k|y;*1m0;5JGor%b6yG z(B0bdrU@Z*x3+?5LI~Zht!SDMLU(H`nI?qL-P+2g2_ba1wu)&&2;Hr%YMKy2cWbMe zCWJv>*R8E?nh-*FYipP$gwWmEnx+XMbhoyaX+j9yt*vdE5JGor>zF2l(B0a)rU@Z* zx3->XLI~Zht#6tTLU(H$m?nflKh>>$$21{??$$OmO$ed8wT(;@Lg;R7W7C8Xx?B6M zX+j9yt$oilA%yPMHZe^Ip}V#3nRADbqG z(B0ZkOcO%rZtbV02_ba1_A}Fj5V~9YxoJWO-L3t?G$DlU)_!T45JGorzcNh-p}VzT znL?8bnnpLnkIzMy+eOznh-+w4&Br=A%yN7x|wN02;Dn$bJK(nx_9Un zrU@Z*@6atx6GG_Tp<9_IgwVZ1w>C`(gFdNS+r~5@gznb1HBAViyS4316GG^2ZF|#% z5V~92!89R+?$&lRO$ed8wVg~8Lg;R7XVZibx?9`DG$DlU)^;^b2!p<^TieYvA%yPM zMwljq(B0Zd(}WPZTie|elu%O$ed8wf#*KLg;So0MmpJx?4NYG$DlU)($dF2%)>RgH01c=x*&0 z(}WPZTN`DX5JGorqfHY+=x*&$(}XbS*SfXCOcO%rZtZZ>gb=!0JHj*}gznakG))Mh zyS1ZC6GG^2?P$}45V~7C#xx;>?$(YqO$ed8wc|_^Lg;Soc+-S1M~@iMJM;w8gb=!S z=!vEYA$0H1lS~sr=-#1YOcO%r-l1bn6GG_Tp(mRrgwVZ1Pccmhp?im(YMKy2_YOVH zG$DlU9eTQHLKyUzZtV=ygb=!0JJU2FgznbPGEE4fyS1}T6GG^2?HtpD5V~7C*EAu7 z?$*vTO$ed8wew9ALg;So0@H*Lx?3A(nh*v(p<5eonh-*FYZsa(gwWmEMWzWMbhmb~ zX+j9ytzBZ85JGormzpMo(B0Z)rU@Z*w|2Q{LI~ZhU16FKLU(IdnkIxnPwCdKGEE4f zyS1xL6GG^2?HbdB5V~8t)-)l6?$)j|O$ed8wF#yPA#}Gk(KI21?$)k1O$ed8wHr(m zLg;SoM$?2a=vm#`O{NJUbhmc1X+j9yt=(dp5JGorx0)t|(B0Z?rU@Z*w|2W}LI~Zh z-C>##LU(I-nkIzM-P&EI2_ba1cDHFl81#tVq4$_3gwVZ1Cz&RM(7i(^nsfN4Sq-8=L_(}WPZcj!Z=2_bav(1%SE!l1`=Ymb;F zgwWmEqoxTVbhq}HX+j9ytvzm<5JGorPnafz(B0aTrU@Z*xAv52LI~ZhO)*Ufp}V!I zrU@Z*xAwGYLKyUfZtWS6GG^2?GL62A#}I)N7IB5 zx?7uWnh-*FYkx9L2%)>RKbt0m(B0Z!OcTPOr*vyGOcO%rZtbt82_ba1_MB-#2;Hqc zZ<-K7cWX0E6GG^2?Qfox?6kMG$DlU)?P792%)>RS4|T_=x*&b z(}WPZTbpH?5a#GvBYKC4ht6%95JLA3eVu7S2;Dn$9@B&n zx_9X7O%p=s-l6lFCWO$vL*HPU5JLA3eWPhY2;Dn$KGTFS=rP^en@kfz=x*)JrU@Z* zxAqp(gb=!0o8L4cgznbfYMKy2cWVonCWO%4+S^PMLg;So?WPGKbhq{n(}WPZTU*dH zAq;v#x3-XJLI~Zhz0))ygznZBHcbejyR~R51S^0(B0ai zrU@Z*x3-vRLI~ZheZ({&gznZpYMKy2cWaBACWO%4+7hM-VbHU>wIxjxLg;R7Dbs`y zx?B60X+j9ytu1Yu5JGorA2&@1p}VzDm?nhK-P$Kj6GG^2?Ng=+A#}I)Y14!dx?B5< zX+jwEh~A-}HBAVidxw6`G$DlU9r}6Ggb=!S=od^ALg?P1%a|sF(7i*yXqpg0_YVD% zX+j9yJM_z@2_bav(65*#gwVZ1ziOHg20f-*`RWla-8=x*&>rU@Z*xAtw*gb=!0Th25ggznasH%$nkyR{We6T+Y;bZaY`CWO%4 z+DfJgA#}I4vS~sH-L0)+nh-*FYpa?jgwWmEYNiPxbhoy;X+j9yt*v325JGorYnmp6 z(B0ZvrU_xtQ@XXaO%p=sZfzaYgb=!0Th}xpgznbXGffDgyS4RA6GG^2Z3EMU5V~9Y zj%h*&-K}kCnh-*FYa5v+gwWmE#-<5j(6hR=@0uor(B0biOcO%rZfz6Ogb=!0`@U&H z2;Hsyz%(I*?$&;2nh-*FYdRADbqG(B0ZkOcO%rZtbV031N;NF|v2)&rB0S z=-#0}H%$nkdx!qQG$DlU9r{btgb=!S=&wu@Lg?P1zcx(>p?in^#xx;>?j8DD(}WPZ zcj)g-6GG_Tp_`f}gh7w();2Ru2%)>R%}oRk){bDbhoy?odUm&VkZD2)-K`yLnh-*FYloO7gwWmEDAR-xx?3A!LI~YEbc|_281&d~ zZLDcR2;HrnY?=^4cWbAZCWO%4+Nq`qA#}HPnrT7^-L0K&nh-*FYiF1ygwWmEnWhOL zbhmbvX+j9yt(|R}5C%Q5TRX=zA%yPM&NWR4p}V#7OcO%rZtZ;2gb=!0yTCLdgznbH znI?qL-P(B5gb=!0yU;WtgznZZGEE4fyS0l=6T+aUc59cICWO%4+NGumA#}HPnQ1}@ z-K|}2nh-*FYgd>igwWmEm8Jt2;DpM4%37Xx_9WErU@Z*@6fwU6GG_T zp?8}mgwVZ1?=ejXp?il;GEE4fdxuUoO$ecThu&+N5C%QATf5IRA%yPM?l(;cp}VyQ zOcO%rZtX$Sgb=!0d&o2)gznZJHcbejyR}D56GG^2?NQT&5V~7?%rqf{?$#bRO$dXY z*sVQbnh-*FYfqXcgwWmEQ>F!gwWmE)20a_bhq}5X+j9ytvzd+ z5JGor(@Yb>|3}wd1>Hg4Ul+&S-Q8UyxVyW%yETH>p~bz$p#p88P^C%*>QLN5i)--U zLEejh*PA_O&*Fl+&l&j5B6;?FIg`-c+ViFfVS;|DTYJGYA%yPMUNlVzp}V!0OcO%r zZtZ2$gb=!0d&M*%gznZ}HBAViyS1^V2_ba1_L^xz2;Hr{ZkiB6cWZB$CWHz4^KR`; z(}WPZTYJkiA%yPM-Zo7Lp}VzrOcO%rZf%@tLI~Zhy=$5fLU(KLnI?qL-P-%62_ba1 z_JL_a2;HrHXqpfv=rekUeq@>uLiY~+*fb%8?j1VbG$DlU9r}rBLI~YE^i$J>5W08h zXQl}ubnnp5O%p=s-k}q1W8eS&-^YgT9XhdTLI~YEbQ05qFhO72txam05JGorlbI%j z(B0bPrU@Z*w>E`oLI~ZhO=+4CLU(IZnI?qL-P+Wq2_ba1HjQaQ2;HqsYnl*3cWcv` zCWHz4&Tegb(}WPZTbsc&A%yPMW;9I*p}V!2OcO%rZf$1Mgb=!0o5eICgzna6HBAVi zyS3R&6GG^2ZFbXy5V~8N!!#jG&`))1bDAcE(B0ZxrU@Z*w>GzFLI~Zh&10GnLU(KP znkIzM-P(Mn2_ba1Hos{?2;HqMV44s@cWVopCWO%4+CruYVS@g=TU*#PA%yPM7BNi- zp}Vz3O%p=sZf!Bsgb=!0Tii4ugznasFii-dyR{`v6GG^2Z7I`)5V~7i+B6}A?$(wu zO$h&|XL@?-JB}VR1A%uReT3g*T zA*8O>hL|RV)YaNh(}a+^S{r7X5K>ob!%Y)H>S}Eb(}a+^T3gdJA*8O>)-p{9sjIcM zO%p=uYHc0Ugb;dcwYIKlLP%Y$t!J7LQdev1nJZA=qF>S}FU(}a+^THDSvA*8O>wl_@(sjIaeOcO%r@zvUnrU@Z+ zwYHOKLP%Y$?QEJ5Qdeucm?nhO)!MG62_bd0wwq}}NL{V%ZkiBMS8IEiCWO@0+McEf zA$7I3muW%>J!a_OPkVctCWO?(2lYOt2_f~GgL+@ngphjeLA{@8LP)*tpx)m!A*3ET zs1Gnr2&qR8>H|#^Lh4fn^+BcyA@ym4`e4(9kot^4eTZp72>o2OcBpAWNL{TRW||OE zS8IoxCWO@0+7YG+A$7HOq-jD(U9BBunh;V~Ye$J6HF6A>T2yo(}a+^T06-!A*8O>zF?XVQdesuOcO%tYHg%xLP%Y$ zjWSILsjIcorU@Z+wRW;;LI^#sT06xwA*8O>PBl#ksjIcqOcO%tYVCB>gpj&gJHs>~ zq^{P^G))MptF`HOG$Ev}*3LCe2&t>J^Gp-M z1buGb4bC@B2&rp_USOIKQr8Z>&@>^Wt{r-jX+lU{JM?1Hgpj&+=q08JA$9H0OHC6( z>e``~nI?qPwL>pAO$e!LhhAZt5JLCe;9I5%A$7I(ZPSF1x>~!^G$Ev})~+&52&t>J zt4$L^>T2y8(}a+^TD#UXA*8O>t}{&tsjIc?O%p=uYV8Kogb=##1~-}}gw)mAcT5vP z>T2z~rU@Z+we~&Jgpj&g`@U&HNL{VnWSS6CS8F$$CWO@0+7C<~!JpO_|u)YaNgO%p=u zYVBvH2_bd0_H)yOkh)s?g=sobzcWn;sjIc$n6=9scVP+$uuFP zt{wVk(}a+^cIaKE2_bdu(7R0&Lh9O~e=$u6scVP+)ifcbt{wU}(}a+^cIe+t6GH0R zq5m*V2%-CK@K4i(kh)s?muW&sU9H_?nh;V~YxkNagw)mAzfBWD>T2yi(}a+^TD#vg zA*8O>9xzP^sjIaIO%p=uYV9G@gb=##1`nGigw)mABc=%ob zkDDfh)YaM(rU@Z+wKm2yA*8O>o-|DesjIdBm?nhO)!Khe6GG^|8$4y25K>obPn#x$ z)YaNErU@Z+wf3xOLP%Y$J!hH_QdeuwnUNub!sjIcIrU@Z+wf356LP%Y$y>6NiQdetlm?nhO)!Lh;2_bd0 z_LgZvNL{VHZJH2LS8MN>CWHz4mcAQ|GffDoYlpsTnh;Xg4t>uwA*8My`o3vGNL@Sh z1Ji_%x_0P?rU@Z+?a+@*6GH0Rp&y$jgw(Y|$D1aE)U`uDF--`e`)=^5X+lU{t$k*i z5K>obpPMFx)YaNV+y3AGUA5uo1Ah@h>S}Fb(}a+^TARc)A*8O>CN)h6sjIcgOcO%t zYHf1Ugpj&go5D09gzme+l%@$Gb+tB?X+lU{txav35K>ob)0ifN)YaOwrU@Z+wKkn; zLP%Y$O>deIQdes;m?nhO)!K}v2_bd0Hj`;W2;FysnN1Ty>S}Ek(}a+^TAS50A*8O> zW;0C)sjIcwO%p=uYHbeFgpj&go6|HQq^{QHGEE4ntF^gJ6GG~0Z64Ev5W4RM^O`1v z)YaO2rU@Z+wKl(LLP%Y$Enu1uQdesWnkIzQ)!IU)2_bd0wy{SwG$Ev})>bx62&t>J zRZJ5?>S}FO(}a+^T3gLDA*8O>RyR!usjIairU@Z+wKmi=A*8O>hM6XW(0w-;ZkiBM zS8HpSCWO@0+M1>bA$7I3mT5vrU9GKcnh;V~YwMUMgw)mAx~2&sb+xvhX+lU{t*vjG z5K>ob8<-}9(0w=9&@>^WuGTg(O$e#0wT(>^Lh5R56Vrr{x?0=RG$Ev});2Ru2&t>J z%}oS}EZ(}a+^THDezA*8O>wlYl!q5E#IwP`{~U9D|nnh;V~YulP8gw)mAcBTm- zb+xv=X+lU{t?gi%5K>obJDMhh)YaNfrU@Z+wYIZqLP%Y$?P8h`Cg^+mZm_FqLP%XZ zbT`w4kh*s0?xqPLb?wkSOcO%t+M#=zCWO?rL-#UG2&rp_?roY7Qr8aM$21|Nt{u9s zX+lU{J9IzOgb=##2K$>Pgw)mA0j3Edb+vY&X+lU{tsP{V5K>ob2b(5@)YaM{rU@Z+ zwRWg!LP%Y$9cG#kQdet-nJqf8S*>T2z1(}a+^T06!x zA*8O>jx|jPsjIc)OcO%tYVCN_gpj&gJHa#|q^{OZG))MptF@C%6GG^|8+^euA*8O> zMwljq)YaNZ(}a+^S{r4W5K>obqfHY+>T2y|(}a+^T06xwA*8O>PBl#ksjIcqOcO%t zYVCB>gb=##24|Qigw)mAnWhOLb+z_I(}a+^TKke|LP%Y$ec3c2q^{P!VwwT2yQ(}WPZ?*?a^CWO?rL%(5~5K`9;{ibO`NL@Sh9Mgo5 zx_0QfrU@Z+?a=c~6GH0Rq34?>gw(Y|FEC9AscVN`XqpgG*ABhNG$DlUyTQe#2_bd0 zc8O_1NL{U6YMKyIS8JDobSDGe- z)YaNmrU@Z*-wm!dO$e#0wQEchLh5SmTGND(x>~!=G$Ev})~+{A2&t>J8%z^I>T2yq z(}a+^TKkS^LP%Y$eb+Q0q^{P!XPOW~_ub(8rU@Z+wRV$fLP%Y$-E5i=Qdes~Fii-l ztF<4RCWO@0+K)^VLh5Sm7Sn`~x>~!{G$Ev})_!c75K>obx0xn{(0wJpP43v)YaP0O%p=uYV8-M2_bd0_Dj=*kh)sC!!#kJuGW5Knh;V~ zYri&42ov<{eK+`xX+lU{JM_1v2_bdu(BGLRgw(Y|e{Y%)Qr8Z>(=;KZt{wUZ(}a+^ zcIY2X6GH0Rp?@+>2&rp_{@FAkq^=!$muW%>-FJh#O%p=uYV9wk2_bd0_E*z{kh)s? zn`uHwU9J7yG$Ev}*8X9d5K>ob|1?bqsjIbrnI?qP)!IF#2_bd0cCTqd2;Fysf14(R z)YaO3rU@Z+wRXR0LP%Y$Jz$y;QdesankIzQ)!IX*2_bd0_ONL}NL{TxVww_4+nh;V~Ypz!Lh9O~@0ccp)U`v$nI?qPwL{-EO$e!LhrVZ; z5K`9;ecv=8gzme+2c`)jb+z`PX+lU{t$k#g5K>obADbqG)YaN}(}a+^TKmK_A*8O> zJ~d4UsjIcmOcO%tYVC8=gpj&gn`k@x{`dbrHgw+&CN@n7sjIa~OcO%tYHd=}gpj&g zo6IyJq^{N`H%$nstFC5Olz7D zQdeu!nI?qP)!Ou?2_bd0HiKzGNL{VXXqpgGS8FqwCWO@0+RUa2A$7Gji)lhgU9HV( znh;V~YqOaqgwTCAnB6oXq^{QHFii-ltF<{z6GG~0Z7$P}pxG$Ev}))p{L2ovgw)mAvZe_kb+xvfX+lU{tu1ew5K>obE0`vP)YaOGrU@Z+wYHLJ zLP%Y$t!$bQQdeuMm?nhKZ&quonkIzQ)!J&N2_bd0wz_FTNL{TBF--`mtF@t~2_bd0 zHq103q^{P6nobo0ukq(4SXp zo0=ws)YaN%rU@Z+wYIrwLP%Y$ZDE=aQdetRnkIzQ)!J632_bd0wzX+ONL{UMW10|B zS8LmvCWO@0+IFT1A@oy22e-lYrU@Z+?a&=e6GH0Rp*xx;gw(Y|cQQ=~scVPsY?=^K z*ACsqG$Ev}9lEP&LP%XZbT`w4kh*s0?xqPLb?wkSOcO%rm#VcrO%p=uYHcsmgpj&g z+uJlDq^{QXF--`mtF?Vi6GG~0Z9mh5kh)si-!vhluGS7PO$e#0wF6BPLh5SmAk%~p z`ps(XVAF(`HLG$Ev})($mI2&t>J!%P!G>T2z9(}a+^T06otA*8O>jx_4)nh;V~YokmPLg>${wb7;tA$7HOvS~s{U9FvB znh;V~Yp0qfgw)mAX{HGwb+vZ7X+lU{t({?-5K>obXPPF2)YaM-O%p=uYVAv=31Nah zx9IhLh9O~=a?ph(0w;J*EAuduGY>oO$e#0wew9ALh5Sm0@H+$x>~!? zG$Ev})-Ezl2&t>Ji%kT2y0(}a+^TD#OVA*8O>E;CICq5E!dxoJX3U9DYVnh;V~ zYu_?W2&t>JZ<{8B)YaORrU@Z+wRV+hLP%Y$U2U2WQdeu&m?nhO)!MbD2_bd0cAaTL z2;Fys>rE3v>T2x<(}a+^TD#FSA*8O>zGIpYQdeu=HBAVqtF`Z$CWO@0+V@QpLh5Sm zCewtFx>~#0G$Ev})_!1`5JLCe;D@FOA$7I(Bh!SCx>~!%G$Ev})^0UT2&t>JADbqG z)YaN;rU@Z+wRXE{LP%Y${lqjOq^{O}YMKyIS8G2rO$ed;Zt!!{gpj&+=r2qYLh9O~ zzcftT2yzrU@Z+wf1Mzgpj&gyUR2oq^{QPHcber ztF^zFCWO@0+Fwl*Lh5SmZ>9+$bl(mBZkiBMS8M+;O$e#0wSSr>gw)mAzf2QC>T2yC z(}a+^TD#XYA*8O>{%x8NQdevDnI?qP)!O~02_bd0_JCT2yF(}a+^ zT6@?uA*8O>9x+V_sjIa|O%p=uYV9%8gpj&gd)zc3q^{PUFii-ltFoM6GG~0?K#tgkh)rX z-ZUYkuGU^KO$e#0wHHkj!UTOw-wj?eO$e!LhrVo@5K`9;eZ@2(q^=$Ms%b(k>e``inkIzQwL{-BO$ed;Zt%8gLP%Y$yq^{Q9H%$nstF;eI6GG~0?L*Uqkh)s?$TT6OuGT&_ zO$ed;ZZO_7A*8O>J~2%QsjIb5O%p=uYV9-Agpj&g``k1kq^{N`+TOnZ{lAY*U9C-Q znh;V~Ym=BJgw)mAq^1cWb+tB`X+j9ycZ11I6GG~0Z3@$bkh)r%(ljBYuGXe9O$e#0 zwW&=LLh5R58q}poG$Ev})}}K}2&t>J=}i+t>S}EU(}WPZ?*=oPCWO@0+DxVi zA$7GjvuQ#|U9HVxnh;V~YqOdrgw)mAY^Dhzb+tCTX+lU{t<7PY5K>obbDAcE)YaNt zrU@Z*-wozAO$e!Lht6Y~5K`9;o!2xWq^=!0pJ_r!T|0Ds(}a+^cIX182_bdu&;?Bs zLh9O~3z;T_)U`twHcberYlkjknh-+w-C$AEgpj&gTg)^eq^{N$H%$nstF{S#G$DlUyTS6N2_bd0wt{Iw zNL{V1XqpgGS8FSoCWO@0+RCO0A$7I3ifKYfU9GKZnh;V~YpaZS=Hb+tCc zG$DlUyTMS?gpj&g8)ljiQdeukO%p=uYHbbEgpj&gThlZlq^{Q1GEE4ntF^UF6GG~0 zZ5`8ukh)r1*EAuduGZEwO$ed;Zm_;-LP%Y$ZD5)ZQdesmnkIzQ)!Ig;2_bd0wy|kK zNL{UMVww`HLG$Ev})($mI2&t>J!%P!G=)M~qZkiBMS8GR@CWO@0 z+L5LSA$7HOlxadpU9BB$nh;V~YsZ)-gw)mAv8D+jb+vY!X+lU{tsQTg5K>obCzvLL z(0w;J(KI2XuGUU6O$e#0wJ(?^gw)mA2-Ad+x>_4)nh;V~YokmPLh5R5v}r;}U9FvL znh;V~Yp0kdgw)mAsip}bbl(k5GffDoYloh0nh;Xg4n4y(A*8MydZuYYNL@Shi>3)7 zb?wkEnI?qPwL`ybnh;Xg4*iO0LP%XZ^sA-`A$9H0ubC!<(0w=fx@kg4U9FvEnh;V~ zYiFA#gw)mAH%t>k>T2zqrU@Z+wRVnaLP%Y$ookv9Qdeu|nI?qP)!O-{2_bd0c7bU^ z2;Fys3r!P3>T2yG(}a+^TD#aZA*8O>E-_6AsjIb1O%p=uYV9)9gpj&gyWBJ(q^{Pk zFii-ltF>>LCWO@0+P6&;Lg>C5TxpsRQdetNnI?qP)!Nmj2_bd0c8zI5NL{U6Ynl*J zS8LaqCWO@0+V!RhA$7HOgK0uYU9H_{nh;V~Yu_Jn@tl!>T2x=rU@Z+we~~Pgpj&g`;lovNL{VnVww{%V>KQdet#GffDotF^zICWO@0+CNMaLh5SmpQZ^Rb+z^{ z(}WPZ?*{jnCWO@0+P$U;A$7I(Z_|X3x>~!>G$Ev}*6ue=2&t>J2TT(}>T2yl(}a+^ zT6@SeA*8O>9yUz~sjIa|OcO%rz8gGhnh;V~Ymb>Ggw)mAJCruMV>T2yjrU@Z+wf0}rgpj&gd&)E+q^{PUHcbej`)=@zX+lU{JM>x8gpj&+ z=yRqCA$9H0=S>qr>e`_%m?nhOwL@PtO$e!LhrVQ*5K`9;ec3c2q^=$MifKYfT|4wu z(}WPZ?*?N{6GG~0?KRVckh)rX-83PjuGZc#O$e#0wKq)@Lh5SmEz^XMx>|eNG$Ev} z*4{Bq2&t>Jai$3&b+z`cX+j9ycZ2s#6GG~0?S0dPkh)s?z%(JGuGT&@O$e#0wU0~_ zLh5SmW7C9?x>_4=nh;V~YoC}Vgw)mAr=|%Zb+z`HX+j9ycZ1JO6GG~0ZK56Q```cj z*woe9#HI-$b+tB$X+lU{txam05K>oblbI%j)YaPLrU@Z+wKj!mLP%Y$O=+4CQdetJ znI?qLeK(leG$Ev})}}E{2&t>JX-yMC>S}E|(}a+^TASW9A*8O>W-v_%sjIaaO%p=u zYHcRdgpj&go7prWq^{OxF--{nUk^KG%#gu9`)pRzgpj&+=xnA5A$9H0*-aBd>e``m zm?nhOwL|ALO$e!Lht6f15K`9;o!c}aq^=!0k7+_kT|0DM(}a+^cIbSj2_f`z)!O`~ z2_bd0wt#6uNL{ThXqpgGS8EHICWO@0+QOy@A$7I3h-pGdU9Bx@nh;V~Ym1pCgw)mA z;-(29b+xvHX+j7+wpv@#G$Ev})|N6&2&t>JrA-q;>S}En(}a+^T3gmMA*8O>mNQKV zsjIc+O%p=uYHbD6gpj&gThTNjq^{OhGEE4f$5m@9nJjZ70l=rKbFx537y2_bdu&`nGeLh9O~o0=ws)U`u5GffDoYlm)bnh;Xg4&A~u zA*8Myx}|ACNL@R0E7OFKx_0Q+rU@Z+?a*yZ6GG_csJT}=~0>S}E_(}WOuY_+z# zX+lU{t?gl&5K>obdzvPM)YaNvrU@Z+wYIluLP%Y$?PHn{QdevHnkIzQ)!Kfh2_bd0 zw!djYNL{TRV44s@kE_-WG))MptF?nn6GG~0?O@Y{kh)qs#55tKuGS7UO$e#0wZlvk zLh5SmaMOg4x>`HJG$Ev}){Zny2&t>Jqf8S*=<(Is(WVI@b+vYkX+lU{tsQHc5K>ob z$C)OC)YaPYrU@Z+wRVDOLP%Y$ooJd6QdesynI?qP)!G+K6GG~0ZG>q;n4r(=yTM4) zgpj&+=qS^Kkh*s0Xw!s{x_0QvrU@Z+?a)(96GH0Rp{JTAgw(Y|PcuyjscVOxZkiBM z*A6|yG$Ev}9eSo|LI~Y=gD;vUgw)mAmrN5v>T2!FrU@Z+we}U$gpj&g`>JU|NL{Uc z%`_pTuGYS8nh;V~YiF4zgw)mA*`^60b+z^l(}WPZ?*`vAO$e#0wR21pLh5SmT+@V* zx>`HWG$Ev}*3LIg2&t>J3rrJ2>T2ym(}a+^TD!E;daFsjIb1OcO%rz8hR> znh;V~YnPcOgw)mA<)#TCb+vYdX+lU{t$oWhA*8O>zHOQiQdetNnkIzQ)!J322_bd0 zcC~3jNL{U6W10{`_ub%H(}a+^TD#6PA*8O>t~X5xsjIacOcO%tYVAhTgpj&g`;KWs zNL{Uc*EAuduGYS1nh;V~Yu`6b2&t>Jn@kfz=)N1=Y?=^K*AD%GX+lU{JM@R92_bdu z&>xv5gw(Y|Z!t{>scVPcYMKyI*AD%$X+lU{JM=cwgpj&+=obzc5V*sjIbLnkIzQ)!H4V2_bd0_AAqbkh)s?wP`{~ zU9J7bG$Ev})_!Z65JLCe;CH48A$7I(d((uFx>~!_G$Ev}*8X6c5K>obe>6=9sjIa= znI?qP)!Ls;6GG~0?Jm=Vkh)sC+cY7huGaoynh-+w-QcgL2_bd0_BYdnkh)s?yJob|1wPosjIbnOcO%tYVBUrgpj&g`?qOANL{VnXPOW~_ub%r z(}a+^T6@4WA*8O>9yCn|sjIbzOcO%tYVBdugpj&gd&D#$q^{N;HBAVqtF^~W6GG~0 z?QzqDkh)rX!ZaaF(6{#8V2o)(NL@ShNz;Uox_0P)OcO%t+M)k7O$e!LhdyPR5K`9; zecCi3q^=$MjA=qhT|4wy(}a+^cIb1a2_bdu(C1APLg>C5ykMFTQdes)nkIzQ)!Iv@ z2_bd0_OfY0NL{VHVwwC5 zylI*cQdetlnI?qP)!N&p2_bd0_Ks;nNL{UsGffDotF?Dc6GG~0?LE_kkh)rX-!vhl zuGT&C5d}NvsQdesqn}pcG$Ev})}}U12&t>JX-pGB>S}FT(}a+^TAR)^A%yO` z!StpHA$9H08B7yG>e`_*nkIzQwL@nzO$e!Lht6!85K`9;oy9aEq^=!0t7$?=T|0C( z(}a+^cIfP;2_bdu&^b&KLg>C5%xRhsQdetpnI?qP)!N*q2_bd0HjimSNL{VXYnl*J zS8MZ`CWO@0+We*oA$7I3fN4TVU9Bx>nh;V~YYUksgwTCASlBcnq^{N$F--`mtF=W< z6GG~0Z86h?kh)r1+%zGiuGW??O$e#0wIxjxLh5R5Dbs|Ix>{S>G$Ev})|N3%2%-CK zu&il9NL{ThXPOXFS8L0gCWO@0+6tx#A$7I3qG>`%U9GKTnh;V~Yb%>3gw)mADy9h` zb+xvtX+lU{t*vI75JLCeV0F`kkh)qMVwwNL{V%Y?=^KS8KbNCWO@0+ODPvA$7I3 zn`uHwU9IhInh;V~YkQa`gw)mAo~8*Qb+xvaX+j9ycZ0o66GG~0Z6DKwkh)si*EAud zuGaQ5O$e#0wf#*KLh5Sm0Mmq!x>`HXG$Ev})($dF2&t>JgH01c>T2x}(}WPZ?*@mO zCWO@0+F_;%A$7HOxM@O2U9BBqnh;V~Ye$+Ugw)mAQKktYb+vZ1X+lU{tsP^U5K>ob z$C@UD)YaN?rU@Z*-wlp8O$e!Lhn`@X5K`9;J<&8Fq^=!$l4(LnT|4v(rU@Z+?a&dX z2_bdu(2=GIA$9H0QKktYb?wm6rU@Z+?a-4=6GG^|8=PXA5K>obr!t}Ib+vYuX+lU{t(|R}5K>ob-!M%GsjIbbnkIzQ)!I3x2_bd0 zcCKkcNL{U+XPOW~_ub%p(}a+^TD!nBA*8O>E;LODsjIb%OcO%tYVBgvgpj&gyTmjh zq^{O3HBAVqtF_Ba6GG~0?Q+wEkh)sC!Zaa-?z_RaOcO%tYVF&m2_bd0cBN@TNL{U6 zWttFDS8G?BCWO@0+BK#LA$7HOt!Y9?U9DYbnh;V~YuB45gw)mA4WQr8asfoVcW zT|4xLrU@Z+?a&{YCWO#^H@L+#A*8O>ZZ%B^sjIagnQ2_bd0cDrdpNL{V{ z#55tKuGW5Pnh;V~YdJpPMFx)YaNAOcO%rz8n0~G$Ev}*6uJ(2&t>JUzsL^ z)YaOrO%p=uYV9|s2_bd0_FL10kh)s?ooPZyU9J7zG$Ev}*6uV-2&t>JKbR(j(0w=f zqiI4&U9J7eG$Ev}*8Xgo5K>obcbO)H)YaPErU@Z+we}a&gpj&g`>Sa}NL{V{%`_pT zuGao;nh;V~YyU7!2%-CK@K4i(kh)s?muW&sU9H_?nh;V~YxkNagw)mAzfBWD>T2yi z(}a+^TD#vgA*8O>9xzP^sjIaIO%p=uYV9G@gb=##1`nGigw(Y|A2Ce`scVNmYMKyI z*A9KmG$Ev}9s0OwLP%XZ^a<01kh*s07}JE1x_0Q3rU@Z+?a=?2CWO?rL;q`<5JLCe z;3?CDkh)rX+B6}guGXG0O$e#0wP#HeLh5SmIn#uYx>|eQG$Ev})?P482&t>J7flmF z>T2yJ(}a+^T6@_vA%yO`!7HW-A$7I(s%b(29x>|d~ zG$Ev}*4{Kt2&t>Jw@ed4>T2z6(}a+^T6@PdA%yO`!8p@|kh)rX*EAuduGZc&O$e#0 zwf9XELh5Sm1Ji_%x?20tG$Ev});=;#2&t>Jk4+Oo>S}GgX+lU{t$kve5JLCe;8W9t zkh)s?%rqgSuGT&`O$e#0wTX7J?|=XAV^dda6PqT4)YaM~rU@Z+wKl0~LP%Y$O=g-9 zQdet}nfLP%XZbOzIekh*s0jHU@8b?wlZOcO%rm#VdyO%p=uYHb$N zgpj&go7FTSq^{OxGffDotF_rp6GG~0Z4T3fkh)r%(=;KZuGZ!Uekn-x>}phG$Ev}*5)@&2&t>J1xyn{>S}F4(}a+^T3g68A*8O>7B)=? zsjIa`OcO%tYHd-|gpj&gTg)^eg#MsfTii4uq^{PMFii-ltF{S_G$Ev})>bf02%$f()>br42&t>Jl}r;t z>S}Fe(}a+^T3f|5A*8O>Ry9ossjIcsOcO%tYHfAXgpj&g8)BLeQdet3O%p=uYHgTl zLJ0lT(7|mm+%zGit{u9DX+lU{J9JIcgpj&+=vt-;A$9H0wM`R3>e`{}m?nhOwL{l6 zO$e!LhpuOu5K`9;UEeezq^=#hfoVbr{Zh5Ip=m-$U9D|onh;V~Ya5#;gw)mACZ-7? zb+xvsX+lU{t!-wS5K>obo0}$t)YaM+rU@Z+wYH^cLP%Y$ZDpDeLcdw9ZEczmQdeu+ zm?nhO)!MeE2_bd0ww-B0NL{UMZ<-KNS8F?%CWO@0+K#3PA$7I3lW9UoU9IhGnh;V~ zYrB{xgwP*UYrC2zgw)mAZl(z#b+xv;X+lU{t?gl&5K>obdzvPM)YaNvrU@Z+wYIlu zLP%Y$?PHn{QdevHnkIzQ)!Kfh2_f|7)!P212_bd0c7SO@NL{TRXqpgGS8E5ECWO@0 z+QFs?A$7HOh-pGdU9BBznh;V~YloR8gw)mA;id^8b+vYcX+oHw&+EIvk){bDb?wlj zOcO%t+M!3ACWO?rLys{{2&rp_9&4HqQr8YW&NLyUt{r;3X+lU{JM;w8gpj&+=!vEY zA$9H0lS~sr=)N0#!89SHuGU7FCWO@0+DOxckh)qMWttFDS8Jn96GG~0?PSx0kh)qs z#WW$LuGUU9O$e#0wbM)!Lh5Smbkl?oy6*;Om?nhO)!Lb+2_bd0_C?c#kh)s?l4(Ln zU9ElDG$Ev}*1lqz5K>obUo}k#sjIcGnI?qP)!Nrh6GG~0?JU!T5W4RMXPYL3)YaNI zOcO%tYVDh*2_bd0c8+O6NL{U+Ynl*JS8L~)CWO@0+WDplA$7HOfoVcWU9DYcnh;V~ zYZsX&gwTCAxY#ryq^{O3F--`mtF=o_6GG~0?K0DZkh)sC+%zGiuGX$FO$e#0wQrdw zgw)mAw@nj5>T2yu(}a+^TD!_LA%yO`!PTY-A$9H0YfKYD>e`{#nkIzQwL`BnO$e!L zhhA@*5K`9;y}>jgq^=!$qiI4&T|4wUrU@Z+?a=RJADSkF)YaOLOcO%tYV8)&gpj&gyVW!yq^{O}Y?=^K zS8KPKCWO#^H@Mw2A*8O>eqx#sQdes~HBAVqtF@n*CWO@0+RsfBLh5Sm7p4gzb+z_O z(}a+^TD!wEA*8O>er1{vQdeugHcbej`)=?X(}a+^TKlbOLP%Y${mwKYq^{O}Z<-KN zS8I2gCWO@0+8<04Lh5SmkERJBb+z^<(}a+^TKltULP%Y$-DR2(LigR^ZqtO2x?1~- zX+lU{t^L(BA*8O>{$`pGQdet#H%$nstF?caCWO@0+CNPbLh5SmU#1Bmb+vYnX+lU{ zt=(&y5GLqb`)=@W(}a+^cIbVk2_bdu(ECjjLh9O~511x|)U`t&G))MpYll8$nh;Xg z4t>}(A*8My`iN;lNL@ShQPYHwx_0PerU@Z*-whr&O$e#0wI@syLh5R5jA=qhU9CN7 znh;V~YyUA#2&t>J|C%O*)YaNkrU@Z+wf3}WLP%Y$J!6^>QdeuwnkIzMeK&Z{G$Ev} z)}A*_2&t>J7fcgE>T2yp(}a+^T6@VfA*8O>UN%h#sjIbDOcO%tYVB3igpj&g8*7>n zQdeuQnI?qLeK&aBG$Ev}*4{8p2&t>JH%${l>T2yR(}a+^T6^0xA*8O>-Z4!GsjIbd zrU@Z+wf3%QLP%Y$y=R&bQdev5nJk4zIn>T2y{(}a+^ zS{rYg5K>obpO_|u)YaOjrU@Z+wf325LP%Y$eQuf%Qdese?QGxw{@=%j?z_RnrU@Z+ z?a)a~6GH0Rp_7^>gw(Y|Co@e5scVN$ZkiBM*AAV+G$Ev}9Xh3HLP%XZbSl$?kh*s0 z)TRj`b?wk;OcO%rz8g$ynh;V~Ytxw~gw)mA^ri_Rb+tBwX+lU{t<7kf5K>obGnpoY z)YaO|rU@Z+wKj`sLP%Y$&1#wuQdeuUnI?qLeK(lhG$Ev}*5)ux2&t>JIZYEn>S}E+ z(}a+^TASN6A*8O><}pnOsjIblO%p=uYHdE#gpj&go8L4cq^{N$Fii-d`);tHX+lU{ ztu17l5K>ob3!5f{)YaM|rU@Z+wYI2fLP%Y$EoPb!Qdet>nmNiWXsjIc+OcO%tYHfMbgpj&gTfsCTq^{Oh zG))MptF@I(6GG~0ZDrGhkh)r1#WW#I(D(M;U{%wEkh*s0YNiPxb?wmAO%p=u+Mz>C z6GH0Rp+ij*Lh9O~!%P!G>e`{hO%p=u+M#QhCWO?rL)SD-2&rp_u4S4KLigQZZPSF1 zx>{SuG$Ev}*48ym2&t>J^-L2&>S}F$(}a+^THC-hA*8O>HZ)BLsjIb(OcO%tYHefF zgpj&g+r%^>gzme+rltuYb+xvcX+lU{t!-|a5K>obTbL$<)YaOSrU@Z+wYHUMLP%Y$ zZEczmQdeu+m?nhO)!MeE2_bd0ww-B02;Fys?M)Lx>S}EV(}a+^THDbyA*8O>b}~%} zsjIb}O%p=uYHb(Ogpj&g+toB7q^{O>GffDotF_%t6GG~0Z4c9g5W4RMdzvPM)YaNv zrU@Z+wYIluLP%Y$?PHn{QdevHnkIzQ)!Kfh2_bd0w!djYNL{TRV44t8S8E5FCWO@0 z+CioXA#~pj4mM2)scVNGVww`HVG$Ev}){Zw#2&t>J6HF6A z>T2yo(}a+^T06-!A*8O>zF?XVQdesuOcO%tYHg%xLP%Y$jWSILq5Ezy+B6}guGUUA zO$e#0wNp$JLh5SmRMUizx>`HUG$Ev})=oD~2&t>JGfWdg>T2yw(}a+^TKl4DLP%Y$ zeaSQ-gzme+mrWBw>T2yPrU@Z+wf0rhgpj&g`nO$e#0wX;nV zLh5Sm8>R^%b+z_Q(}a+^T06%yA%yO`!MUahA$7HOo@qizU9FvOnh;V~YZsU%gw)mA zg{BE1b+vYpX+lU{tzB%I5K>obmzXAm)YaOhrU@Z+wRV|lLYSc6=)1w?rU@Z+?a(Vs z6GH0Rq2Dr12&rp_e%mx5q^=!$rD;M)T|4wD(}a+^cIefn2_bdu&}&Q+Lh9O~*P14T z)U`veGffDg`)+W(X+lU{t=(Xn5K>obH<~7d)YaN|OcO%tYVEtG2_bd0_C3>tkh)s? zzG*^8U9H_@nh;V~Yd4!Fgw)mA4@?t6=)N2L&@>^WuGW5Jnh;V~Yqyvtgw)mAt)>Yf zb+z_m(}a+^TD#3OA*8O>ZZ}N`sjIc0m?nhO)!I)@6GG~0?PsP5A#~pjer}o&Qdeug zFii-ltF>R6CWO@0+8w3|A$7I(E7OFKx?20SX+lU{t^LL{A*8O>eruW#QdeugGffDo ztF_;oCWO#^H@MR@A*8O>{$QFAQdet#G))MptF=FwCWO@0+Mi7mLh5SmF4KgNx>~#2 zG$Ev}*8XCe5K>obe>F`AsjIcWnI?qLeK+{KX+lU{JM2_bdu(0`gHgw(Y||7DsG zQr8Z>$21|Nt{r->X+lU{JM`bC2_bdu(ECgiLh9O~_nRh!)U`t&Fii-d`)=@{X+lU{ ztvzI#5K>ob51S^0)YaM}rU@Z+wf3lKLP%Y$J!YB^Qdet_n`1-FJhROcO%tYVBpygpj&gd&M*%q^{OpHBAVq ztF^JF2_bd0_L^xzNL{VHZkiBMS8H#WCWO@0+MA{cA$7I(mT5u=-FJhxO%p=uYV94< zgpj&g8)upjQdev5nkIzQ)!KWe2_bd0_P%LCNL{UcV44t8S8E@dCWO@0+DE1dA$7I( zv1vm1|N4$&#ta$!v(LtxCWO?rLq9Q12&rp_erlQ!Qr8as%rqgSt{wWhX+lU{J9MI5 z?EByU``FaALnk&(2&rp_PGXu6Qr8Zh)HETat{pm=X+jA7+>pW6CO1t8sjIaqOcO%t zYHdo>gpj&go60mHq^{PcHcberM-0B&G^Pn5b+tCFX+lU{txac|5K>ob)0-xQ)YaMy zrU@bR*dc?jHlt}mNL{VXWSS6CS8FqyCWO@0+AO9CA$7Gjt7$?=J!0_HW;0C)sjIcw zO%p=uYHbeFgpj&go6|HQq^{QHGEE4f#|;^LwYg0bLh5R59@B)7x>}ppG$Ev}*5)%! z2&t>J`Ari->Jfvlwt#6uNL{ThXqpgGS8EHICWO@0+QOy@A$7I3h-pFyJ$}gGt1W7p z5K>obi{StG$Ev} z)|NF*2&t>Je`_znI?qPwL@1nO$e!L zhpu9p5K`9;UDY%pq^=#hnrT8vT|0Dj(}a+^cIXh(gb@0^WuGTg(O$e#0wT(>^Lh5R56Vrr{x?0=RG$Ev});2Ru z2&t>J%}oS}EZ(}WOuT(!2PX+lU{t!-tR5K>obTbm|?)YaNHrU@Z+wYIHkLP%Y$ zZD*PgQdeu+nKB6GG~0ZCBHT zkh)si%`_pTuGV%pO$e#0wLMG|Lh5R5Pt$~ux?0=IG$Ev}*7i0{2&t>JeM}R=1byC^ zA%ojsU(U~(sYeXH+CioXA$9H0gH01c z>e``)m?nhOwL=dzO$e!LhaP5{5JEpUWboAvH%$nstF`% zU9FvDnh;V~YhN%;2&t>J5vBLP%Y$oot#AQdeuI zm?nhO)!M112_f{jA%m}WnrT8vU9FvNnh;V~YiF1ygw)mAnWhOLb+z_I(}a+E#Nexa z$uuFPuGYS6nh;V~YhN)<2&t>JubL)=)YaP8OcO%r@k0h*?dzrqA$7HOmT5vrU9FvM znh;V~Yu_+U2&t>JZ<;2A)FTF8?HtpDkh)qs*EAuduGY>oO$e#0wew9ALh5Sm0@H*L zy6*-TnkIzQwL>p5O$e!LhhA)&5K`9;y~H#jq^=!$scAw;T|4wL(}a+^cIf4%2_bdu z&?`(6Lh9O~-!e@IscVOR+cY7B?z_R2rU@Z+wRV+hLP%Y$U2U2WQdeu&m?nhO)!MbD z2_bd0cAaTLNL{U6Z<-KNS8F$zCWO@0+Kr|OA$7I(9n*vmy6*~#0G$Ev})_!1`5K>obKQv7UsjIagnI?qP)!Hql2_bd0cB^SZ z2;FysADbqG)YaN;rU@Z+wRXE{LP%Y${lqjOq^{O}YMKyIS8G2rO$e#0wV#_Ngw)mA zFH93c>T2zmrU@Z+wRVSTLI~Y=gI}2@gw)mAuT2v|>T2ybrU@Z+wf0-ngpj&g`<-b* zNL{V{-ZUYkuGa1}O$e#0wLh39gw)mAA59ZN>T2yzrU_w!zIDuy!A13F(}a+^cIaKE z2_bdu(7R0&Lh9O~e=$u6scVP+)ifcb9x?c8e=|)8scVP+-83Pjt{wUh(}a+^cIZD% z6GH0Rq5m>X2%(=FGWcrum?nhO)!MzL2_bd0_HWaKkh)sC&om*VuGa21O$ez+48Ga} zrU@Z+wf3NCLP%Y$J!F~?QdesansA)n-U9CN4nh;V~Ymb{I zgw)mA6Q&6vb+tCeG$EuOG5BgvnkIzQ)!Khd6GG~0?Z2i8A$7I(lxadpU9CNBnh-*d z8#4H6&zL5J)YaOvrU@Z+wf3B8LP%Y$J#U&2Qdes)m?nhOBL-jXMbm_kx>|e5G$Ev} z)?PME2&t>JS4T2y((}WOu{E)#{8*7>nQdeuQnI?qP)!OT(2_bd0_J(OfNL{VH zX_^pHj~INlw@ed4>T2z6(}a+^T6@PdA*8O>#+fFB)YaO%rU@Z*-woa~O$e!LhrVx` z5K`9;{lGLKq^=$Mp=m-$T|4w6(}a+^cId~Z2_bdu(D9}TA$9H0PfQa+>e`{7nkIzQ zwL?EMO$ed;Zt%HjLP%Y$O|x>}pWG$Ev})+RMg2&qR7 z{<=1qX+lU{txay45K>obQ}po zG$Ev})}}K}2&t>J=}i+t>XC!3&0v}kQdes;nkIzQ)!Iy^2_bd0HnV9$NL{VXVww;_ z_uXJt(}a+^TAR%@A*8O>W;aa;sjIa)OcO%tYHd!_gphjVU~6-kCWO@0+T5lIA$7Gj zk7+_kU9HV)nh;V~Yx9{VgwTCAnBO!Zq^{N$Fii-ltF;A96GG~0Z6VWykh)r1*fb%e z9y!?BBBlu;b+xvrX+lU{tu1Dn5K>obi<>5d)YaM&rU_w!zIV)!!B<<-G$Ev}9lDfh zLP%XZbZOIskh*s0GNuV3b?wk)O%p=u5reO`oM}QxT|0Dn(}a+^cIXPG2_bdu&=pM+ zLh9O~E14#Q(0w;p*)$=fuGUsDO$e#0wN*_MLh5R5HPeKUx>{S^G$Ev})`plSgw)mA zP}78vx>_4%nh;V~Yr{J zZA=qF=)N0lYnl*JS8LmuCWO@0+V-XiA$7I3gK0uYU9IhCnh;V~Yde`Hgw)mA&ZY?= zb+xvOX+lU{t?g=>5K>obyO}10&|`)U{*=4BX+lU{J9H1zgpj&+=$@ttA$9H0y-X8A z>e``unJV@(r6>T2yc(}a+^T07n}A*3ET z_-ZGZCWO@0+KHwKA$7HOl4(LnU9Ek=G$Ev})<&2ngwW%L4!+t*(}a+^S{r4W5K>ob zqfHY+>T2y|(}a+^T06xwA*3ET_-dz`CWO@0+G(ZZo2CgNb?wk|OcO%t+M(x~CWO?rL(el! z2&rp_o^P5EQr8Z>z%(JGt{r-zX+lU{JM<#cgpj&+=*6Z9A$9H0OH30&=)N0VYMKyI zS8JDobSDGe-)YaNmrU@Z+wRW{> zLP%Y$U1ORMLigR^TGND(x>~!=G$Ev})~+{A2&t>J8%z^I>T2yq(}a+^TKkS^LP%Y$ zeb+Q0q^{P!XPOXFS8LxlO$e#0wVO;6Lg>C5+-#Z~!{G$Ev})_!c75K>obx0xn{)YaPUrU@Z+we}O!gb=##20t}T2&t>J zpP43v)YaP0O%p=uYV8-M2_bd0_Dj=*kh)sC!!#kJuGW5Knh;V~Yri&42&t>J-obe=|)8sjIcW zn%QdevDnkIzQ)!M&J6GG~0?LO0l z5PIy;!B@NAG$Ev})*diT2&t>J2Tc<~>T2yF(}a+^T6@?uA*3ET_-c=sCWO@0+M}ik zA$7I(m}x>tU9CNCnh;V~YfqRagwW%L4!+tL(}a+^T6@woA*8O>{$rXDQdevLHBAVq ztF@<06GG~dgRl0qX+lU{tvzF!5K>ob&zdHL)YaN^rU@Z+wf4MeLI^#6=-{ipV44t8 zS8FetCWO@0+DoPhA$7I(vS~s{U9G)hnh;Wt9DKD`O%p=uYHh4(LP%Y$y=IyaQdeuQ zn}puG$Ev})}}B`2&t>JDNPeX>S}E&(}a+E z)ZnX4ZJH2LS8LOlCWO@0+O(z#A$7GjooPY{{Xw-hy=g*7J#6sRW-v_%sjIaaO%p=u zYHcRdgpj&go7prWq^{OxF--`mM-9H(tfmPeb+tB|X+lU{t<7$l5K>obbC@QC(4SXp zbDAcE)WZf}Z7$Pn&2O3zQdesW zm?nhO)!Krl2_bd0wvcH;2>sO1!GG_CO%p=u+M$b>CWO?rLl-qo2&rp_E@qk#Qr8Y$ z+%zGi9y$1GOPD5v)U`vGG))MpYlkjnnh;Xg4qe(bA*8Myx{PT;2>nvEwybGFNL{Th zXPOXFS8L0gCWO@0+6tx#A$7I3qG>`%U9GKTnh;V~Yb%>3gw)mADy9h`b+xvtX+lU{ zt*vI75JJCMt*vgF5K>obLrfDw>S}GMX+lU{tqn6x2&t>J;id^8b+xvJX+lU{t*vRA z5K>obYndj5)YaPBrU@Z+wYH9FLJ0jqwYIKlLP%Y$t!J7LQdev1nob+n6SV)YaOyrU@Z+wYHsULP%Y$ZEu}Z-0QV$#a8F?qugpj&+=+34IA$9H0T}%@~>e`{ZnkIzQwL^C^O$ez+ z4Zhm$rU@Z+?a)0;6GH0Rp?jJpgw(Y|_cBcgq5E#Iw`oF1J#6sR_AyNesjIbpO%p=u zYHdH$gpj&g+ut-Hq^{NuFii-lM-9H(fu;!|b+vYoX+lU{tsQKd5K>obhnOaW(0w;J z)HETa9ya)DhnXgX)YaPIrU@Z+wRVJQLP%Y$9ch{nQdet7nI?qPqXu8?Xw!s{x>`HN zG$Ev}){Zqz2&t>J<4hAm=)M~qZ<-KN4;y^76HF6A>T2yo(}a+^T06-!A*8O>zF?XV zQdesuOcO%tQG>5G(ljBYuGU7GCWO@0+Gx{+kh)qs*)$=9?z_P$rU@bSu)$Y5)ifcb zuGUU7O$e#0wbM-#Lh5Sm4AX>=x>`HaG$EuOHTY^@G))MptFobSC}S*(0w=fmT5vrU9ElF zG$Ev})~+;72&t>Jt4tF@>T2z3(}a+^TD!(HA*8O>t~E^vsjIc?OcO%tYVCT{gpj&g zyTLRegzme+jiw19b+z^#(}a+^TKlePLP%Y$ea|!@q^{P!Z<-KNS8F$!CWO@0+Rdg3 zA$7I(1Ji_%x?208X+lU{t^LR}A%yO`!7ZiJ z+f5Tf>T2yLrU@Z+wf0lfgpj&g`~!}G$Ev}*8Xjp5K>ob_n9Vy)T0Jp?S9jQkh)rXz%(JGuGStjO$e#0wTDa- zLg>C5JZzc}QV$z^wMR@7Lh5SmQPYHwx>|e8G$Ev})*d%a2&t>JCrlGU>QRHQHpVm| zq^{PUG))MptF`}_CWO@0+J8+GLg>C5JY|{?QV$z^wWm!JLh5Sm8PkN2x>|eIG$Ev} z)}Av>2&t>J=S>qr>QRHQ_JV0bNL{VHXqpgGS8FesCWO@0+RLU1A#~pjUNKDwscVP6 zYMKyI*A5+Pnh;Xg4t>ouA*8My`nqXCNL@Sh4by~>x_0QBrU@Z+?a;SO6GH0Rp>LZe zgw(Y|-!V-Hq5Ezy&NLyUuGZc)O$e#0wf9UDLh5Smeba=Hx?20dG$Ev});=^%2&t>J zk4zIn>T2y{(}a+^S{rYg5K>obpO_|u(0w=f)HETauGT&?O$e#0wa-lxLh5R5qTT=R z_on{-_y0aNb+tCJX+lU{txaN@5K@mG{5^D1(}a+^TAR!?A*8O>CO1t8sjIaqOcO%r zz8g$wnh;VCAAGf`OcO%tYHe!Mgpj&go5nODq^{PcHBAVqtF`G&6GH0IgReHdX+lU{ zt<7MX5K>obGnyuZ)YaNdrU@Z*-wkFqO$e!n55C$grU@Z+wKl71LP%Y$&1RYqQdeuU znJxlI#7>S}Es(}XZV-`jVCc}){S>S2Sg zHlJxiNL@R0e$#}Ix_0OSrU@Z+?a&2H6GH0Rp$nNNgw&%3Uu|L2gpj&+=pv>GA$9H0 zMNJbz>e``;nI?qLeK%O#G$Ev})|N0$2&t>JB~24T>S}E%(}a+^T3gyQA*8O>mN88T zsjIbRO%p=uYHc~wgpj&gTi!Gwq^{OhFii-d`);tJX+lU{t*vC55K>obE1M>S)YaN5 zrU@Z+wYI8hLP%Y$t!A1KQdeuMn{SyG$Ev}*48#n2&t>JbxadN>S}FW(}a+^T3gRFA*8O>);CQE zsjIaOOcO%rz8h?4nh;V~Ya5v+gw)mA#-<4&b+xvMX+lU{t!-+W5K>obo0%qr)YaPN zrU@Z+wYG(6LP%Y$ZE2biQdetRnI?qLeK*+JG$EuOKKN7aHl_(7b?wk?O%p=u+M(N- zCWO?rL$^0g2&rp_?qHe_QjZ>dwH-|pLh9O~JDDbg)U`u*HcberYlrS)nh-+w-C$SK zgphjp;H&Lsnh;V~YrC5!gw)mA9;OK)b+xvqX+lU{t?gx+5K@mGe6_tz6GG~0Z6DKw zkh)si*EAuduGaQ5O$ed;Zm_>;LP$M)@YN15O$e#0wF6BPLh5SmAk&19x>`HfG$Ev} z)($aE2&qR8zS^Ot2_bd0c9>~GNL{TRZkiBMS8GR@CWO#^H#pKXA*3EY_-aR)CWO@0 z+R>&7A$7HOjA=qhU9BB!nh;V~YsZ-;gw&%4U+s9)gpj&gJHa#|q^{OZG))MptF@C% z6GG^|8+^euA*3EY_-Z3e6GG~0ZKP>JNL{UsGEE4ntF_Ul2_bd0cCu+gNIiP+)lM-@ z2&t>JQ%w^>>T2yY(}a+^T07k|AxzM3^xfbL(}a+^cIcU=2_bdu&@Y-Mgw(Y|zhs&a zQr8asvS~s{T|4wErU@Z+?a;59CWO?rL%(L45K`9;{kmyFNL@ShEYpM#y6*;Onob7nvr6(0w~#3G$Ev})~+y32&t>J zZob*O?}S z)YaPcrU@Z+wRVGPLP%Y$-DsK+Qdeu=F--`mtF`Z%CWO@0+V@NoLg>C5eBU%7q^{O( zGEE4ntF@a=6GG~0?FXg_A$7I(L(_zix?1~@X+lU{t=(dp5K>obx0)t|)YaOLO%p=u zYV9`Dgb=##2Dh6ggw(?a7u8Qp6GH0Rp+7ZE2&rp_{>(HXq^=$MbJK*7x_0OJznLb4)YaPGO%p=uYV9AU2_g09!B_jIX+lU{ zt^Lb1A*8O>?lDaWsjIbnO%p=sz8n18G$EuOKKN?)nI?qP)!O~02_bd0_JC9yLt}sjIceOcO%rz8gGlnh;VCAAGeZ zOcO%tYHf^ZLP%Y$J!zT{QdevLF--`mtF`}{CWO?Z2Vdo-s`b zsjIbTO%uZZ*Taq-Gi31J`#IBukh*s0^QH+Qb?wj>OcO%t+MzF+CWO?rLtipY2&rp_ zzHFKhQr8ZB#WW$Lt{wWSX+lU{J9MmRLP%XZ^fl9j5c;`l?RC?Hkh)rX!!#kJuGZc( zO$e#0wYN+YLh5SmZPSF1x>|e3G$Ev}*2bA8gw)mAyQT>tb+z`MX+lU{t-WuW5JHcw z);=&z2&t>J4^0z7>T2yH(}a+^TKm{EA*8O>#+xRD)YaN2rU@Z+wf3oLLP%Y$eP)^v zQdeuAnCMNWI43@86S}CWO@0+GM5) zA$7GjxoJX3U9C-Fnh;V~Yg3vggw!VwzS>l#2_bd0HnnL&NL{T>W10{`kFVCIHBAVq ztF`G&6GG}W248J@(}a+^TART%A*8O>W;9I*sjIb_OcO%tYHeoIgpm5=!B?BbG$Ev} z)@C(L2&t>J*-R5c=rKbF|H)@JO$e!n59&Eg6GH0Rp>vuhgw(Y|=Q2$QscVPMZJH2L z*AAV>G$EuOJ@{(#nkIzQwL|AKO$e!Lht6-B5K`9;UBEOUgnq7CThKHiq^{N$GEE4n ztF?tq6GG~0Z4uLikh)r1)HETauGSVaO$e#0wZ%;nLh5R53Dbm-x>{S(G$Ev})|N6& z2%*PTYfGCZgw)mAGNuV3b+xvvX+lU{tu1Go5K>ob%bO;I)YaMwrU@Z+wYH*ZLP%Y$ ztz?=IQdes$n$48GcqrU@Z+wYHOK zLP%Y$?QEJ5Qdeucm?nhO)!MG62_f~#gRi!mX+lU{t?h1_5K>obdzdDK(0w=9(=;KZ zuGaQ4O$e#i7<{$8O%p=uYHc6Wgpj&g+t)N9q^{QXGffDotF`@26GG~f2Vd;~(}a+^ zT077*A*8O>4l+#$q5E!duxUa_U9BBrnh;X2G5BhSnkIzQ)!JdE2_bd0cDQLmNL{TR zVVV$9S8GR_CWO={55C$_rU@Z+wRW^=LP%Y$9b=jhLigR^Skr`%x>`HVG$Ew^e{|ht zv@Ue{eSHuK6+uB1MG*l32@9o8i6|-tDN1*#NarcKySux)ySux)yHg&2kIesB<6dK) z7rtQg*$2L34!M_?dobVNtF3365K>ob>zgKo)YaMsrU@Z+wYH&YLP%Y$ZDg7dQg1%^ zY8#s-gw)mACZ-7?b+xvsX+j9ycZ1DL6GH0Rp_`i~gw(Y|N17&t)U`uLnI?qPwL?dn zCWO?rL&umVgw(Y|$C@UD)U`vmFii-lYlm)Wnh;Xg4&BN$A%yO`!Pce;A$7I3jcGzi zU9D|vnh;V~YulM7gw)mA_NECTb+xvGX+lU{t?g)<5K>obJDDbg)YaO~rU@Z+wYH0C zLI~Y=gI!G%Lh5R5H`9cWx?0=aG$Ev}*7h(>2&t>JJxvor>S}E-(}a+^THD(+A*8O> z_AyNesjIbpO%p=uYHdH$gb=##2K$>Pgw)mA0j3Edb+vY&X+lU{tsP{V5K>ob2b(5@ z)YaM{rU@Z+wRWg!LP%Y$9cG#kQdet-nJqf8S*>T2z1 z(}a+^T06!xA*8O>jx|jPsjIc)OcO%tYVCN_gpj&gJHa#|q^{OZG))MptF@C%6T&!s zdfyFBHcberYlogobmzpMo)YaN$rU@Z*-wiG|O$e#0 zwJS^$LhAVjU+qfMgpj&gyUH{nq^{PkHcbertF>!P6GG~0?OM}>kb3jMSG&$MA*8O> zt~X5xsjIacOcO%rz8le``CnkIzQwL_mWO$e!LhdynZ5K`9; zea18)q^=$MtZ70>T|4wS(}WPZ?*`ACCWO@0+6$%$A$7I(qG>`%U9G)jnh;V~YcHE7 zgw)mAE2aq{b+z`YX+lU{t-WTN5K>obubU=>)YaM>rU@Z*-wob0O$e#0wYN+YLh5Sm zZPSF1x>|e3G$Ev}*4{Nu2&t>J_e>K)>T2zM(}a+^TKm8>A*8O>J~T}TsjIb*OcO%r zz8idOnh;V~YoC}Vgw)mAr=|%Zb+z^%(}a+^TKmj2A*8O>##`oppQ8Hbzd!%BsjIc| zO%p=uYV8ZA2_bd0Hi2nENL{Uc(KI21?z_Q+rU@Z+wKkDyLP$Mi@Kf%@rU@Z+wKj=q zLP%Y$eaSQ-q^{P!Y?=^KS8HD}O$ez+4!+u?rU@Z+wf0rhgpj&go6IyJjMKOG-C%Ol zgpj&+=+{gWLhAVjU+wFr2_bdu&?!t4Lh9O~Q<^4()U`vuVVV$9*AAV^G$EwkeDKx2 zX_^pH*AD%bX+lU{J9KK(gb=##2H!SK2&t>J@0ccp)YaNFrU@Z+wf0@pgpj&g`<`h+ zNL{T>Ynl*JS8LxlO$e#0wdqU~Lh5Sm2c`)jb+tCVX+j9ycY_&B6GG~0ZAR0Ckh)s? zp=m-$U9HVznh;V~YcrcBgw)mAET#z|b+z^*(}a+^TAS50A*8O>W;0C)sjIcwO%p=s zz8lP8nh;V~YdJpO_|u)YaNgO%p=uYVBvH2_bd0_H)yOkh)r%(=;KZuGW5G znh;V~Yriy22&t>Jxl9v6=)N1wZJH2LS8MZ_CWO@0+PtO-A$7GjpJ_r!U9Al7B)=?sjIa`OcO%tYHd-| zgphjV;HxcWnh;V~Ym1vEgw)mA5~c|ubl(mBYMKyIS8Gd}CWO>O24C%OrU@Z+wf1+@ zgpj&gTgo&cq^{PMHcbertF>iJ6GG~dgRi!%X+lU{tu1Go5K>ob%bO;I(0w;p!89SH zuGUsGO$e!n48Gb*rU@Z+wYIWpLP%Y$tzw!GQdeuMnkIzQ)!J&N2_f~!!B<<|G$Ev} z*48jh2&t>JHBA#j=)N1QWttFDS8M+;O$e!n48GbwO%p=uYVBX92_bd0wzg?PNL{V{ z+cY7huGZEuO$ez+4!+vDrU@Z+wYHvVLP%Y$t#6tT#_8AlZm@xALP%XZbVJjGkh*s0 zMy3fNb?wlNO%p=u+M%16CWO?rLpL=|2&rp_Zf2SgQr8aM+%zGit{pnkG$Ev}9XiT1 zA%yO`!D!Qjkh)qMW10|BS8HQU6GG~0Z41+ckh)si(ljBYuGY3PO$e#0wXIDPLh5R5 z8`Ff4x?0=TG$Ev}*0wWE2%-CKu)S$QNL{V%V44t8S8F?(CWO@0+D@hkA$7I3vuQ#| zU9Ih6nh;V~YrC2zgw)mAZl(z#b+xv;X+lU{t?gl&5JLCeU{BM8kh)si%QPXRuGaQ8 zO$e#0wS7zzLh5R5U(J156V_>T2yk(}a+^T06)zA%yO` z!NH~pA$7HOh-pGdU9BBznh;V~YloR8gw)mA;id^8b+vYcX+lU{tsQBa5K>obN0}ys z)YaP2rU@Z+wRVhYLI~Y=gJVq-Lh9O~$C)OC)I$ar)$yhYA$9H06HF6A>e`_vnkIzQ zwL?!bO$e!Lhn{Sj5K@mEe6>?d6GH0Rp{JTAgw(Y|Pcuyjq5E!dx@kg4U9FvAnh;VC z8GN-fO%p=uYV9o3gpj&gJKHoNq^{P^F--`mtF?1Y6GG~dgRgd;X+lU{t(|Y05K>ob z7nml5(0w^WuGTIxO$e!n48GdMrU@Z+wRVYVLP%Y$U22*TQdeu2nI?qP)!OBz z2_f~!!B@M&G$Ev})~+;72&t>Jt4tF@=)N0VZJH2LS8LapCWO>O24C%3(}a+^TD#6P zA*8O>t~X5xsjIacOcO%tYVAhTgphjV;H%wanh;V~Yd4!Fgw)mAEv5+}bl(kbHBAVq ztF_xq6GG}CgRgeGX+lU{t=(ao5K>obcbX=I)YaNurU@Z+wRX2@LP$Mw@YU`yO$e#0 zwR=qyLh5SmKGTFSPOtO$T!Vk*_nRh!)U`t&Fii-lYll8)nh;Xg4t>ZpA*8My`mkw2 zNL@Sh5z~Z_x_0QJrU@Z+?a;?e6GH0Rp^uv;gw(Y|pD;}bp`WkTo-|DesjIc8OcO%t zYVB#$gpj&gd&V>&q^{PUHBAVqtF`A$6GG~0?RnFLkh)rX!89SHuGU^OO$e#0wU|eHG$Ev})?PDB2&t>J*G&^b>T2x`(}a+^T6@zpA*8O> z-ZD)HsjIcOO%p=uYV94q^{Q9H%$nstF;eI6GG~0?L*Uq zkh)s?$TT6OuGT&_O$e#0wNFeFLh5SmQ`3Zyx?1~>X+jA7S+(|=X+lU{t&O+r|33fq z&wqdZZBtikXqpgGS8EfQCWO?Z20x!q zY?=^KS8J1)CWO$B&pr5if5|iQ}O$e!LhfZ#q5K@mEe6_EcCWO?rL%(jC5K`9;ox(IBgnqtSo6zGIpYQdeu!m?nhO)!KJW z6GG_MtF`Z$CWO@0+O(z#A$7I(eba=Hx>}pgG$Ev})_!1`5K>ob)0-xQ)YaMyrU@Z+ zwKk(^LP%Y${m?Waq^{OxGEE4f->=qYHcbertF>876GG~0?MJ2wA$7Gjt7$?=U9HV# znh;V~YqOgsgw)mA9Ht2&b+z_m(}a+^TKkDO$e#0wO^Pfgw)mAFHI9d>S}E+(}a+^TASN6A*8O><}pnOsjIblO%p=uYHdE# zgfLF;-gko`rU@Z+?a-m72_bdu&|#(tA@$I~&&b0~6GH0Rp(9KaLh9O~zcNh-scVPM zZ<-KN*AD%)X+lUnYVg$-Fii-lYlr^EG$DlUyTNZw6GG~0Z9&t7kh)s?ooPZyJ#_HZ zes7u(Qdet#Fii-ltF?tp6GG~0?T@AjA$7I(C)0$Gdeq>n{n<1jq^{QfVww;__uXJ& z(}a+^T3f_4A*8O>7Bx)>sfP}}+G3^&A$7I3xM@O2U9Bx)nh;V~YkxIO2&t>JB~24T z>QRHQ_BYdnkh)s?yJYRj4?gw)mAa;6C( zb+xvobE1D*R)T0JpZ6(u$kh)r1*)$=9?z_P%rU@Z+wYI8hLP%Y$ zt!A1KQV$(`wbe}%Lh5R54by~>x>{S)G$Ev}*48pj2&t>Jf0!nO)T0Jp?VqLzA$7I( zFVln&y6*;SnHZx5KsjIckO%p=u zYHg%xLP%Y$jWSILsjIcorU@Z+wKm2yA*8O>#+oLC)YaM+rU@Z*-wn1jO$e#0wXIAO zLh5R5Ytw{~x?0=DG$Ev}*0wcG2&t>J?MxFw>S}F!(}a+^THC=iA*8O>b~H^0sjIb} zOcO%rz8mapnh;V~YrB{xgw)mAuBHhgb+xveX+lU{t?h1_5K>obdzdDK)YaOarU@Z+ zwYHaOLP%Y$?QNP6QdevHm?nhKeK*+GG$Ev}*7h?^2&t>J{Y?`>>T2x((}a+^T077* zA*8O>4l+#$sjIbvO%p=uYV8oygpj&gJJd8Gq^{NuGffEN^yz&!INUTLq^=!$glR%Z zT|4wh(}a+E=-{F{$}}OQt{r-`X+lU{JMQRHQcD!jq zNL@Sh1k;2Ny6*-jnkIzQ)!Ip>2_bd0cCu+gNIi7$)lM-@2&t>JQ%w^>>T2yY(}a+^ zT07k|A*8O>&M-{~sYeaI+L@*aA$7HOmT5u=-FJhtO%p=uYV91;gpj&gJJ&QJq#io> zYUi0Igw)mA`KAdWb+vYZX+lU{tzBrE5K>ob7nvr6)T0Jp?PAk}kh)sC#55s~!+G$Ev})~+^92&t>JYfKYD z>QRHQcCBebNL{U6XPOW~_ub%n(}a+^TD!qCA*8O>ZZu5@sfP}}+D)bjA$7HOvuQ#| zU9H_>nh;V~Yqy#vgw)mAZKeq!^{ByDyWKP)q^{QPFii-d`)+WjX+lU{JM=Eogpj&+ z=-s9XA$9H0drT8T>e`|AnkIzQwL|YSO$e!Lhu&|R5K`9;eZVv!q^=$MplL!#T|4w4 z(}WPZ?*CWO@0+9Re3A$7I(sA)n-U9CN4nh;V~Ymb{Igw)mA6Q&6vb+z`SX+lU{ ztvzL$5K>obPn#x$)YaNErU@Z*-wmEMO$e#0wdYI|Lh5SmdDDcDx>|d|G$Ev})?PGC z2&t>JmrN5v>T2y}(}a+^T6@JbA*8O>UNub!sjIcuOcO%rz8k!5nh;V~Yj2n)gw)mA zo2CgNb+z`EX+lU{t-WoU5K>ob@0ccp)YaO%rU@Z+wf3HALP%Y$y>FTjQdesqm?nhK zeK+{fG$Ev});=;#2&t>Jk4+Oo>T2y1(}a+^TKm*AA*8O>{$rXDQdeuAnI?qP)!KN= z{qOUB|NQso-!^r%Hoj>>NL{Uc!89R^)3^8CU;@*Gkh*s07flmF>e`_bnkIzQLkAbt zM5YNLb?wlJO%p=u+M$z}CWO?rL%(F25K`9;{jzC7NIh!s)xKhy5K`9;ozyfTgzme+ zS4|T_>S}E=(}a+^TASQ7A*8O>zGj*bQdetVH%$nstFJX-pGB>T2z~ zrU@Z+we~&Jgpj&go7OZTq^{P!Z<-KNS8LOmCWO#^H~4{RLP%Y$O>deIQdes;m?nhO z)!K}v2_bd0_CwQzkh)r%$uuFPuGVHYO$e#0wOLFPLh5SmN2UoOb+tCDX+j9ycZ1nX z6GG~0ZFbXykh)r%!!#kJuGW5Rnh;V~YdJpPD9w)YaP0OcO%tYVGHy2_bd0 zHm7MqNL{V{!Zaa-?z_P+O%p=u+M#oqCWO?rL+3V42&sn+e#)K4G$Ev}9XhXRLP%XZ zbUxFBkh*s05YvQ^x_0PL(}a+E^x&%vGffDoYljXuO$ed;ZZN_$A*8O>er1{vQdev9 zneruW#QdesWnkIzQqX%E@ccuv;b+z_; z(}WPZ?*@M`O$e#0wS`O*Lh5SmkERJB^{~NL`;%!xNL{V{*)$=fuGaoynh;V~YYUqu zgw)mABBlu;_2|J@Thufmq^{N$GffDg`);tfX+lU{tu0}i5K>obe>F`AsfP`|+LERT zA$7I(H`9cWx?20YX+lU{tu1Am5K>obOPeNy)T0MqZ5h*qkh)r1)-)l6?z_QqrU@Z+ zwYI!zLP%Y$tzeoEQV$z^wG~YhLh5R5CDVkEx>{S=G$Ev})>bi12&t>JRZSB@>d}L* zwwh@|NL{V1ZkiCr>DT*iu!deHA$7I3k!eCmU9D|wnh;V~YnzxRgw)mArltuYb+xvcX+lU{t!-|a5JLCe zV5Dh6NL{UsGEE4ntF_Ul2_bd0HpVm|q^{P+nkIzQ)!G)O2_bd0wxwx8NL{UMWttFD zS8H3FCWO@0+BT*MA#~pjwlz%%sjIc^OcO%tYHfSdgpj&g+rcy;q^{O>G))MptF@g> z6GG~0ZD-Sjkh)si#WW$LuGV%nO$e#0wcSh;Lg>C5>~5M6Qdetxm?nhO)!Lq>2_bd0 zwwGx_NL{V%ZJH2LS8My2CWO@0+Pd}L*cBE-SNL@ShDAR-xy6*-@nJ<4qGn z>T2x-(}a+^T07A+A*8O>PBKjhsYegK+R3H~A$7HOifKX!-FJgiO%p=uYV9=Bgpj&g zJKZ!Pq#ic-YG;@xgw)mAnWhOLb+vYuX+lU{t(|R}5K>ob=a?ph)T0Mq?OfA@kh)qs z&om)~?z_SHrU@Z+wRVANLP%Y$U1*vRQV$z^wTny>Lh5SmV$+0>x>~!$G$Ev})-E+o z2&t>J%S;nO>d}L*cDZRnNL{U6VVV#^_ub%1(}a+^TD!_LA*8O>t~N~wsfP`|+BK#L zA$7HOt!Y9?U9DYbnh;V~YuB45gw)mA4WscVPcYMKyI*ABhSG$Ev}9eTTILP%XZ^bXU6kh*s0ou&yPb?wl* zOcO%t+M#!wCWO?rL+>$72%(>@*6uY;2&t>J`%Du;>T2zN(}a+^T6@4WA*8O>9yCn| zsjIbzOcO%tYVBdugpj&gd&D#$q^{N;HBAVqtF^~W6GG^htF^~X6GG~0?FrL_kh)rX z(ljBYuGXG1O$e#0wWm!JLh5Sm8PkN2x>|eIG$Ev})}Av>2&t>J=S>qr>T2x;(}WQE z?P~2s(}a+^T6@VfA*8O>UN%h#sjIbDOcO%tYVB3igpj&gd(AWw z6GG~0?M>5!kh)rX%QPW`{|eRG$Ev} z);=&z2&t>J4^0z7>T2yH(}a+^TKm{EA*8O>J~2%Qp&y=ma2tGTnh;Xg4*id5LP%XZ z^fS|hkb2nQU-@{;|L>3V&wqdZZBy3{9p5w|q^=$M1=EC(x_0OUrU@Z+?a(ipCWO?Z z2VZSM(}a+^cIZT=2_f{;)!M|S2_bd0Hi>CMNL{Uc$uuFPuGYS6nh;V~YhN)<2&t>J zNlg<%>T2z)rU@Z+wKkb)LP%Y$O>UYHQdetVGffDgU#`}^ZkiBMS8G$4CWO@0+LWdV zA$7I(4by~>x>}pcG$Ev}*1l<)5K>ob-!e@IsjIcAO%p=uYVF&m2_bd0_8rrN5c=(E zZ5q>rkh)s?u4zI@U9El3G$Ev})}}R02&t>J@0%us)YaN_rU@Z+we|zkgpj&go8B}b zq^{OxFii-ltF;+T6GG^ZtF<4RCWO@0+DxViA$7GjvuQ#|U9HVxnh;V~YdJ zSxpl{>S}E^(}a+^TAST8A*8O><}ghNsjIagnvrggw(Y|=Qd3UsmBby z+B~KSA#~pj<~2z#x?1~7Bo!= zsfQ1~+V4ygLh5Sm_ofLUb+z^f(}a+^T3g68A*8O>{%D#IQjZyYwLh6AgwTCA__Jw3 zNL{V{#WW$LuGSVdO$e#0wM9%5Lh9jzuePXZLP%Y$EoPb!Qdet>n{SxG$Ev})|NI+2&sn;zS=UT2_bd0 zwybGFNL{ThXPOXFS8L0gCWO@0+6tx#A@!KSS6k6EA%yO`!AhnHA$9H0l}!^u>e`{J zm?nhOwL@1mO$e!LhpuLt5K`9;UEMSxq^=#hhG{}bT|0D5(}a+^cIaBB2_bdu(0`aF zgwTCA_@`+?NL{V{%QPXRuGZEzO$e#0wSSu?gw)mAI;IIBb+xvxX+lU{t*vL85K>ob z>zgKo)YaMsrU@Z+wYH&YLI~Y=gN;lRLh5R5W7C9?x?0=BG$Ev});2Xw2&t>J%}f(Q z>S}Fs(}a+^S{rGa5K>obqf8S*>S}GYX+lU{t&K5F2%-CKFxE67q^{PsFii-ltFfwWnYJby& zkh*s00j3Edb?wjtO%p=u+Mx%TCWO?rLk~7h2&u;mzS<$C2_baf4GuL;2&t>J!%P!G z>T2z9(}a+^T06otA*3EY_-aR*CWO@0+EJznA$7HOv}r;}U9BBsnh;V~YsZ=`HiG$Ev}*3L0a z2&sn;zS_B_2_bd0cAjZMNL{U+Z<-KNS8ErTCWO@0+J&YGA@!KSSG&kGA%yO`!NsNt zA$7HOiD^PeU9DYenh;V~YnPcOgw(?aU+r?!gpj&gyTUXfq^{PkG))MptF^046GG~0 z?P}A6kb2DEt6gK75JLCe;9Ap!kh*s0b*2d+b?wmWO%p=u+Mzd?CWO?rLvJ)q2&rp_ z-ej5(Qr8Z>*)$=ft{r-dX+lU{JM>o5gpj&+=xwG6A#~pjZZ}N`sjIa+OcO%tYVA(b zgpj&gyUR2oq^{QPHcbertF?Pf6GG~0?OxM_kh)sC&om*VuGa21O$e#0wFgWSLg>C5 zJZPE_QdesanI?qP)!M_R2_bd0_K0ahNL{TxYMKyIS8I=%CWO@0+T*4PA$7I(glR%Z zU9CN7nh;V~YfqUbgwTCAc-k}}q^{PUF--`mtF>oM6GG~0?K#tgkh)rX-ZUYkuGU^K zO$e#0wHHkjLh5SmCDVkEx>|eLG$Ev})?P792%-CK@TzG-NL{VHW||OES8K1ECWO@0 z+8d?`A$7I(rfEV*U9G)knh;V~Yj2w-gw)mAJEjRCb+z`cX+lU{t-WWO5XR}-`)=^Q zX+lU{JM;t7gpj&+=!d2WA$9H0k4zIn>fwWn>SNP{kh*s0C#DG@b?wkkO%p=u+M)k3 zO$e!Lhkj<75K@mBe6{gb_}?Gtpa1^++lKDD!T6>LA$7I(1=EC(x>}pSG$Ev}*1l+( z5K<2xe6zHXWjQdetJm?nhO)!LM% z2_bd0_6^g75W4RMQ<)}&)YaNIO%p=uYVBL52_bd0HnnL&NL{Uc+cY7huGYR|nh;V~ zYtxt}gw)mAcTE#Q>T2zKrU@Z+wKlD3LI~Y=gYTOrgw)mAbfyU*b+z^b(}a+^TASW9 zA*8O>W-v_%sjIaaO%p=uYVC)n2_bd0Hj`;WNL{VXY?=^KS8KDFCWO#^H~5ihLP%XZ zbXL=Zkh*s0Y^Dhzb?wmEO%p=u5rd!C<}ghNscVP+*fb%et{wUl(}a+^cIZz{6GH0R zp+7TC2&u;ozS_@C6GG^|8_a2%5K>obzc5V*sjIbLnkIzQ)!JO92_f}}!B?BxG$Ev} z*5)xy2&t>Jc}){S>S}F1(}a+^S{q`T5K@mFe6^vb2_baf4ThN}gw)mAaMOg4x>_4y znh;V~Yris02&qR5zS{hz2_bd0_G{CGkh)r1z%(JGuGW5Inh;V~Yri#32&u;ozS@GO z2_baf4Sr{u5K>obzc){%o2M zQdet#F--`mtF?tq6GG~-gRi!TX+j9ycY{Su6GG~0Z86h?kh)r1+%zGiuGW??O$ez+ z48Gc5O%p=uYHdl=gpj&g`{%M*JQdevLGEE4ntF^UF6GG~0?cb&eA#~pj)-g>8sjIbhO%p=uYHdB!gpj&g zTi-Mxq^{OBFii-ltF;YH6GG~0Z6ni!kh)si*fb%euGTg&O$e#0wM|VELg>C5Y-XAe zQdeu6nob+nFYW)YaPdrU@Z+wYGz4LP%Y$ z?P!`1Qdes`nI?qP)!NRc2_bd0wu@;(2;FysT}=~0>e`{ZnI?qPwL^C|O$e!LhwfpT z5K@mATvU6SCWO?rL-#UG2&rp_?roY7Qr8aM$21|Nt{u9sX+lUncJS5qGffDg`);tm zX+lU{tsP*R5K>ob2bv~?)YaNSrU@bSh{0Do*fb%euGS7QO$e#0wL?u4Lh5SmFw=yP zx>`HjG$EuOJNRlxm?nhKeK$DLG$Ev}){Zhw2&t>JqfHY+>T2y6(}a+E#NewPYnl*J zS8KrO$e#S4!+ts zrU@Z*-wn<+O$e#0wew69Lh5SmeA9%Gx>~!yG$EuOG5Bg1nkIzQ)!Id-2_bd0cCl$f zNL{U6Vwwu2Vde``K znI?qPwL`BqO$e!LhhAfv5K`9;z1B1#q^=!$ooPZyT|4x8(}a+^cIXYJ2_f|J)!L1w z2_bd0c9UsBNL{VnY?=^KS8KPJCWO@0+O4JuA$7HOn`uHwU9H`2nh;V~Yj>C?gw)mA zou&yPb+vYvX+jA7dbM`9X+lU{t=(gq5K>ob_nIbz)YaO3rU@Z+wRXR0LP%Y$Jz$y; zQdesankIzQ)!IX*2_bd0_ONL}NL{TxVww;_zhA9AYMKyIS8I=%CWO@0+T*4PA$7I( zglR%ZU9CN7nh;V~YfqUbgw)mA)20a_b+z`4X+lU{tvzd+5K>ob&zUBK(4SRn&zmNM z)YaMxrU@Z+wf3TELP%Y$y=0mYQdes)nob zpPD9w)YaO5OcO%t5rePxnQ1~uU9F9`;{U#1|NQso-!^r%Hoj>>NL{Uc!89SHuGS_n zO$e#Sj+ehCn_%iMnkIzMuUBgmnkIzQ)!Ia+2_bd0HnC|!NL{T>Vwwav`4>`GYm=HLgw)mAS4|T_>S}E=(}WQE{c3G;(}a+^TKk%5LP%Y$ zecd!6q^{PcFii-ltFobQ=2A) z(4SRn-!@GMsjIc`m?nhO)!HJ z=}Z$s>T2x=rU@Z+wKlzJLKvra@4LYarU@Z+?a&!b6GH0Rp+7WD2&rp_&SaVpQr8Zh z*)$=ft{pmyX+lU{JM>4U2_bdu&{<6rLh9O~vzeaZ^Dm^X9Xh*dLI~Y=gE>qSLh5Sm z$EFD(b+z^r(}a+^TKlPKLP%Y${me8Wq^{O}ZkiBMS8H>cCWO@0+AmBKLh5Smm!=6J zb+tB^X+j9ycZ0c26GG~0Z64Evkh)r%*EAuduGZ!=O$e#0wIQYnA$7Gj)HETauGWT` zCWO@0+Hli^kh)qMVVV$9S8KmAO$ed;ZZN-TLP%Y${n|7kq^{N$Fii-ltF_;lCWO@0 z+HXx0Lh5R5LDPhgx?204X+lU{t^M9KA*8O>{$QFAQdesWnI?qLeK+`{=>LP%Y$Eo_<)Qdet>m?nhO)!L$_2_bd0wwP%`NL{ThZkiBM zS8Gd{CWO#^H~6b*LP$ODc=_wU|J&Y@rU@bSki_HtSO3j4A*3EQsQ+%75K@mA)JvHr zgw(Y|mo`lZsW%(^y_Ydf2&qR7>Saw6Lh8|jdO6dCkb3N(Ufwhzgzme+3Z@Amb+xvl zX+lU{t*vC55K>obE1M>S)YaN5rU@Z+wYI8hLP%Y$t!A1KQdeuMnT2yDrU@Z+wf0Zbt9<^2)YaO*OcO%tYHe-Pgpj&g`?qOANL{V1 zW10|BS8MBobV@(r6>S}EZ(}a+^THDezA*8O>wlYl!sjIcEO%p=uYHb_Sgpj&g+txH8q^{Ps zGffEN^yz&!*xocDq@HKI{Po{Y_dA#-gw*pT{=aRoqiI4&J#S}E- z(}a+^THD(+A*8O>_AyNesjIbpO%p=uYHdH$gpj&g+ut-Hq^{NuFii-ltF;476GG~0 z?I6>H5W4RM2b(5@)YaM{rU@Z+wRWg!LP%Y$9cG#kQdet-n&NNL3sjIcKOcO%tYVB;(gpj&gJI6F3q^{P^HBAVqtF`k?6GG~0?R?XOkh)sC zz%(I*?z_Q-rU@bSyyNAs|9-l^$TT6O9+LR~w!y`w2_f~cL4Ap7LP$MgP+w}A5K?b4 zs4p{32&p$4)R&tkgw!Jk^%bTGA@%4%eWhtaNIiB?UuBvQLigR^YSV;}x>~!&G$Ev} z)~+>82&t>J>r4|u>T2zJ(}a+^TD!qCA*8O>ZZu5@sjIb{OcO%tYVBszSAYJ6)YaN8 zrU@Z*-wkdxO$e#0wcAV+Lh5SmcGHBAx>~!#G$Ev}*6uV-2&t>JyG#>8>T2z7(}a+^ zTD!+IA*8O>?lnyasjId7OcO%rz8lobkC-Ne)YaOfrU@Z+wf2~4LP%Y$J#Ly1QdetFm?nhKeK&a0G$Ev})}As=2&t>J zr%e+=>T2y7(}a+^T6@+sA*8O>o-<7dsjIc;O%p=uYV8Hngpj&gd(ku@q^{OpGEE5M z^zD5&c-i#RpMN3sJmclB|9-lEobpO_|u)YaOjrU@Z+ zwe}y=gb=##2A`QGgw)mAcq@(f|NpB0UL%Cm)!O)`2_bd0_65^~kh)r%z%(JGuGYS2 znh;V~YZIC#gw)mAM5YNLb+tCJX+lU{txaN@5JLCe;7g_nA$7I(Wz&R^x?1~+X+lU{ ztxam05K>obUo}k#sjIcgOcO%tYHf1Ugpj&g`%q^{PcGEE4ntF>>MCWO@0+P6#-Lh5R5YSV;}x?20TX+lU{t$oKdA*8O> zrZG(jsjIc`nkIzMeK+`?X+lUn@BjXZ`T2kT_tX8frU@Z+?a=R=CWO?(27mAAOcO%t z+Mz!%O$e!LhfZ&r5K`9;oxwCAq^=!0qiI4&T|4xLrU@Z+?a-M_6GG^|8_aB)5K>ob zvzR7?)YaOLOcO%tYHe22gpj&go6R&Kq^{OxH%$nstF<{y6GG~0?Z>7GA$7I(6Vrr{ zx?20GX+j9ycY~jqCWO@0+RsfBLh5R5PSb>tx?1~%X+lU{t^Lw8A*8O><}ytPsjIcQ zO%p=uYHc3Vgpj&go7XfUq^{QHGffDg`))AAG$Ev})`prUgw)mAFw=yPx>_4h(Lh5SmSEdOeb+tCXX+lU{t^L|GA*8O>7BEc+sjIc$m?nhKeK+{6X+lU{tu1Jp z5K>obzcWn;sjIc$nob ze=$u6obOPeNy)YaNDrU@Z+wYIEj zLP%Y$EoYh#Qdeusn zRy9ossjIcsOcO%tYHfAXgpj&gTf;OVq^{Q1G))MptF^UE6GG~0?H{HIA$7I(Pt$~u zx?1~}X+j9ycZ0P}6GG~0?cb&eA$7I3j%h+jU9GKanh;V~YwMXNgw)mA`lbmXb+xvE zX+lU{t!-$U5K>ob8<{4A)YaO?rU@Z*-wie~O$e#0wM|VELh5R5Gt-2Sx?0=ZG$Ev} z)<&8pgw)mADAR_4;nh;V~Yhz3kLh5R5tZ70>U9D|lnh-+w-C#@8gpj&+=vJl) zA$9H0txXd`>e`{(m?nhOwL`ZxO$e!Lhi+$@5K`9;-QF}Iq^=#hgK0uYT|0C~(}a+^ zcIZx~2_baf4R$t72&t>JT}%@~>S}FQ(}a+^THDPuA*8O>b~jB3sjIa;OcO%tYHd%` zgpj&g+siZ|q^{QXHcbertF?Vh6GG^|8|-VE5K>ob`mQdesSnI?qP)!MjxbFK zsjIakO%p=uYV9b~gpj&gJK8iMq^{PEF--`mtF>cI6GG~0?Ksnfkh)qs-ZUYkuGUU4 zO$ed;Zg8S$LP%Y$on)F2Qdesyn)Bgpj&+=y|3I zA$9H0^Gy>%>e`_fm?nhOwL>p7O$e!LhhAiw5K`9;z1TD%q^=!$iD^Oz{dBcobSDPk;)YaNGrU@Z+wRWv( zLP%Y$U1ypQLcd(CU2mEYQdes?m?nhO)!L1w2_bd0c9UsBNL{VnY?=^KS8KPJCWO@0 z+O4JuA$7HOn`uHwU9H`2nh;V~Yj>C?gwStSYj>I^gw)mAU8V^kb+vZ4X+lU{t=(gq z5K>ob_nIbz)YaO3rU@Z+wRXR0LP%Y$Jz$y;QdesankIzQ)!IX*2_f{y)!M_R2_bd0 z_K0ahNL{TxYMKyIS8I=%CWO@0+T*4PA$7I(glR%ZU9CN7nh;V~YfqUbgw)mA)20a_ zb+z`4X+jA7@Z5vj;91jzkh*s0bEXL)b?wmSO%p=u+MzF)CWO?rLtiva2&rp_zGRvZ zQr8ZB*)$=ft{wV{X+lU{JM>l4gpj&+=xe44A@tML+UuqXA$7I(hG{}bU9G)onh;V~ zYj2q*gw)mA+olO2b+z`6X+lU{t-WiS5K>ob@0liq)YaPirU@Z+wf2E&LJ0kGwf3QD zLP%Y$ePo&tQdesqnT2x^rU@bR+tu0xrU@Z+wf05Rgpj&go6s~Nq^{N`GEE4ntF?(u z6GG~0Z4%Rjkh)s?l4(LnU9ElDG$Ev}*1lqz5K>oblbR-k&>vT8Uo}k#sjIcgOcO%t zYHf1Ugpj&g`R^%b+tB?X+lU{t$oup zA&k?9_TAuHrU@Z+?a--B6GH0Rq2D%52&rp_e#bN+q^=!0jcGziT|4x}pXG$Ev})_!D~5K>obvzjJ^(0wcCWO@0 z+AmBKLg>C5{L(Zbq^{QHGEE4ntF^gJ6GG~0Z64Evkh)r%*EAuduGZ!=O$e#0wIQYn zA$7Gj)HETauGWT`CWO@0+Hli^5W4RMBTN%Q>T2y*rU@Z+wKl(LLP%Y${n|7kq^{N$ zFii-ltF_;lCWO@0+HXx0Lh5R5LDPhgx?204X+lU{t^M9KA%yO`!5>T$Lh9O~3z;T_ z)U`wZXqpgG*AD%YX+lU{JM_<{2_bdu(7%`_gw(Y|7dA}@scVNWVwwobe=|)8sjIcWnmN!iZsjIaWOcO%tYHdZ+gpj&g zTgfybq^{OhHcbertF={36GG~0ZB^5Rkh)r1%`_pTuGUsJO$ed;Zm@=FLP%Y$t!bJN zQdethnI?qP)!IKy6GG~0?VqLzA$7I(FVlpOx>{S?G$Ev}*8Xjp5K>ob>zF2l)YaO$ zrU@Z*-woC?O$e#0we?LCLh5R51Ji_%x?0=NG$Ev});2Ot2&t>JjZG6m>S}Eh(}a+^ zTHDk#A*8O>HZx5KsjIckO%uX6eQDnfMw%vs)U`uLnI?qPwL?dnCWO?rL&umVgw(Y| z$C@UD)U`vmFii-lYlm)Wnh;Xg4&BN$A*8Myy0vLSNL@R08`Fdky6*J156V_=)M~qXqpgGS8E5ECWO@0+QFs?A$7HOh-pGdU9BBz znh;V~YloR8gw)mA;id^8b+vYcX+lU{tsQBa5K>obN0}ys(0w;J+B6}guGWq*O$e#0 zwPQ^aLh5SmIMalXx>`HlG$Ev})=n@@2&t>J6HOCB>T2yI(}a+^T07Y^A*8O>PBBdg zq5E!ds%b(~!zG$Ev})^0RS2&t>Jn@kfz z=)N1=Y?=^KS8KPJCWO@0+O4JuA$7HOn`uHwU9H`2nh;V~Yj>C?gw)mAou&yPb+vYv zX+lU{t=(;!5K>ob_n0Px(0wz#x>|eCG$Ev} z)*doV2&t>JhfNbg>T2x~(}a+^T6@$qA*8O>9y3h{|eLG$Ev})?P792&t>JS4|T_>T2yZ(}a+^T6^6zA*8O> z-Y`uFsjIa&O%p=uYV9r4gb=##25*}tgw)mAJEjRCb+z`cX+lU{t-WWO5K>ob@0%us z)YaMtrU@Z+wf3QDLP%Y$ePo&tQdesqnJ|ClC()YaN& zrU@Z+wKm==_VeGLf7{g6+W4jkA$7I(1=EC(x>}pSG$Ev}*1l+(5K>ob6PhN3)YaNV zrU@Z*-wh@obKQK)QsjIc=O%p=uYHbG7gpj&g zo6$5Ogzme+4^0z7>S}E!(}a+^TASH4A*8O>W-(0&sjIagnI?qP)!MA42_bd0Hk)Ze zNL{VXZkiBMS8H>aCWO@0+K){WLg>C5{KPaNq^{O}YMKyIS8G2rO$e#0wV#_Ngw)mA zoTdpOb+z^j(}a+^TKlDGLP%Y$&1ISpQdetpnJ`Aic+ z>S}F>X+lU{tqnCz2&t>JVWtTob+tC!G$Ev})<&2ngw)mAuS^p{>S}F%(}a+^TKlzW zLKvq%?YqGOrU@Z+?a<$tCWO?rLw{?U5K`9;UC=Zkq^=$MJJW=ax_0RAO%p=u+M$0i zO$e!Lhc0BA5K`9;{iA6@NL@ShPo@bWbl(mBY?=^KS8IPUO$e#0wS`R+Lh5R55z~Z_ zx>{S*G$Ev}))q5O2&t>J#Z41J>S}EX(}a+^TKlVMLP%Y$Eoqt%LigR^Z>9+$b+z_) z(}a+^T3gCAA*8O>mNrcYsjIbROcO%tYHeB5gpj&gTh25gq^{PMH%$nstF;wO6GG~0 zZAH_B5W4RME14#Q)YaO`rU@Z+wYG|BLP%Y$t!kPOQdeuMnI?qP)!OQ&2_bd0wuWg! zNL{V1X_^pHS8HpTCWO@0+CNMaLg>C5{L?fcq^{QfWttFDS8HpVCWO@0+P_T`Lh5R5 z9n*x6x>{S;G$Ev}*48sk2&t>J^-U8(>S}ER(}a+^THDYxA%yO`!A7PDA$9H0jZG6m z>e`{3m?nhOwL>>GO$e!Lhi+z?5K`9;-P|-Gq^=!0(ljBYt{pncG$Ev}9Xi@HA*8My zI>t01gzme+Skr`%x?0=9G$Ev}*0wZF2&t>JtxOX_>S}Fk(}a+^THD4nA*8O>wlz%% zsjIc^OcO%tYHfSdgpj&g+rcy;gzme+j;0AAb+xvWX+lU{t?g`@5K>obyO<_~)YaOq zrU@Z+wYHmSLP%Y$?QWV7Qdetxm?nhO)!Lq>2_bd0wwGx_2;Fysy-gEB>S}Et(}a+^ zTHDt&A*8O>_A^ZgsjId9O%p=uYV82igpj&gJJ2*Cq^{NuGEE4ntF?no6GG~0?GV$1 z5W4RMhngmY)YaNyrU@Z+wRX5^LP%Y$9buXfQdet7nkIzQ)!I>}2_bd0cC=|iNL{TR zW10|BS8KS8HdQCWO@0 z+F7OvA$7HOwrN60U9FvCnh;V~Yv-CKgw)mAd8P>=b+vZBX+lU{tzBT65K>ob7n&x7 z)YaNWrU@bR>($!DrU@Z+wRVYVLP%Y$U22*TQdeu2nI?qP)!OBz2_bd0c7obH=8De)YaN8rU@Z+wRWp%LP%Y$-Da8)LVs4R-ENu?Qdett zm?nhO)!Ln=2_bd0c9&^FNL{VnZJH2LS8Ml}CWO@0+P$U;A$7HOpJ_r!U9H`3nh;V~ zYY&(vgwT)AJ-7`XG))MpYll8$nh;Xg4t>}(A*8My`iN;lNL@ShQPYHwx_0PerU@Z+ z?a;?f6GH0Rp--45gw(Y|pEOMfscVNmWttE|KVPjqZJH2LS8LChCWO@0+Owt!A$7I( zoM}QxU9CNDnh;V~YcH54gw)mAi>3)7b+z`AX+lU{t-WlT5K>obub3u;(63i(ubL)= z)YaN+rU@Z+wf4GcLP%Y$yob|1nJnsjIcmOcO%tYHhq#?dQKg|F)q&tJcOhO$e#0wJ(?^gw)mA1f~fg zb+z_I(}a+^TAR=`A*8O>CNfP3sjIb#O%p=uYHbqJgpj&g`;uuwNL{Uc*)$=H(}(um z;47vHA$9H0Nlg<%>e``SHBAVqYllu|nh;Xg4xQXIA*8My`Zd#pkh*s0*G&^b>e``G zm?nhOwL_;gO$e!LhknB}A%yO`!BnORA$7I(P1A&sx?1~|X+lU{txav35K>ob-!@GM zsjIc`m?nhO)!HobGn*!a)YaN7rU@Z* z-wl3bnh;V~YqOdrgw)mAY^Dhzb+tCTX+lU{t<7PY5K>obKQ>JWsjIc0m?nhO)!I)@ z6GG~0?PsP5A$7I(bJK(ny6*;ankIzQ)!Hvi6GG~0?U$wrA$7GjmuW&sU9HV+nh;V~ zYx9^Ugw)mAyru~ub+tC1X+lU{tqn0v2&t>Jp{5BTbl(kznI?qPwL^!SCWO?rLr0h< zgw(Y|e`T5wQr8Zh-!vhlt{wVo(}a+^cIX182_bdu(BGIQgw(Y|e`}f$Qr8Y$&@>^0 z?z_S7OcO%tYVG%?2_bd0_6O61kh)r1$TT6OuGao&nh;V~Ykx9L2&t>JKbt0m)YaNw zOcO%tYHeZDgpj&gTf{UWgzme+qNWKUb+xvbX+lU{tu1bv5K>obOPD5v)YaNwO%p=u zYHdl=gpj&g`C5EMuAwQdeusnkIzQ)!K5V z2_bd0w!CRVNL{V1V44t8S8FSpCWO@0+DfJgA$7I3vS~s{U9GKRnh;V~Ypa?jgwTCA zSj{vcq^{OhH%$nstF<*u6GG~0ZB5gJkh)r1%QPXRuGaoxnh;V~YyUJ&2&t>Jf0-tP z)YaPBrU@Z+wf1k*gfLED+INF>OcO%t+M(;3CWO?rL)SA+2&rp_u5X$UQr8aMz%(JG zt{u9eX+lU{J9Hz{gpj&+=*FfAA$9H0O-vI)>e`{3nkIzMeK*+5G$Ev});2dy2&t>J zk){bDb+tCiG$Ev})<&Bqgw)mA7}JE1x>_4+nh;V~Yg?Emgw)mAmZk|Ib+xvYX+j9y zcZ01>6GG~0Z5z{skh)si)-)lcuGY3QO$e#0we3w4Lh5R52h)U*x?0=OG$Ev})^;*Y z2&t>JolO%$>S}El(}WPZ?*_Y?CWO@0+HR%^A$7I3yJob``HPG$Ev})($pJ2&t>JLrfDw>T2y!(}a+^T06`%A*8O>4mV8*sjIakOcO%rz8f5A znh;Xg4n4{=A*8MydbDXmNL@Sh7}JE1x_0QXrU@Z+?a<>)6GH0Rp~sshgw(Y|PcTgg zscVOxXqpgG*A6|&G$DlUyTQq(2_bd0c8Y02NL{U+YMKyIS8J!4CWO@0+UceVA$7HO zhG{}bU9FvInh;V~YiF4zgw)mA*`^60b+vYmX+j9ycY||H6GG~0?L5~!~G$Ev})-Ewk2&t>JOHC6(>T2yW(}WPZ?*^Bf zCWO@0+7+e=A$7HOrD;M)U9DYZnh;V~Ygd~lgw)mAHKqw6b+vY_X+lU{tzBoD5K>ob z*PAAU)YaMzrU@Z*-wkdwO$e#0wVO;6Lh5SmX48a_x>~!%G$Ev})^0UT2&t>J+e{Ne z>T2zF(}a+^TD!wEA*8O>?lesZsjIcSOcTO5{b=6}?lw&bscVPcW10|B*ABhcG$Ev} z9eST>LP%XZ^nTNXkh*s01EvWfb?wjxO%p=u+My4bCWO?rLmxIx2&rp_K4O{>LigR^ zQPYHwx>|e8G$Ev})*d%a2&t>JCrlGU>T2yt(}a+^T6@YgA*8O>o;FPgsjIbTOcO%t zYVBFmgpj&gd(Jc=gzme+^QH+Qb+z__X+lU{t-WZP5K>obFPSEU)YaO{rU@Z+wf2f> zLP%Y$y=s~eQdeuQnI?qP)!OT(2_bd0_J(Of2;FysH%${l>T2yR(}a+^T6^0xA*8O> z-Z4!GsjIbjO%p=uYVAGKgpj&gd*3u6q^{OJFii-ltF;eJ6GG~0?IY8K5W4RMADbqG z)YaN2rU@Z+wf3oLLP%Y${l_#Rq^{OJGffDotF`e~v!DO|{M)9k*2XtY2&t>JFPJ8T z)YaMqrU@Z+wf05Rgb=##1{0blgw(Y|Co)Y4scVN$Y?=^K*AAV;G$Ev}9r`8Hgpj&+ z=$B0sLh9O~UolMxscVN$YMKyI*AD%vX+lU{J9IMBgb=##29uj6gw)mA*Gv;a>T2!l zrU@Z+wKj!mLP%Y$O=+4CQdeu=Fii-ltF@_26GG~0?VF|vA$7I(Ez^XMx>}psG$DlU zyTP|j6GG~0?K`FkA$7GjjcGziU9ElBG$Ev}*1l(&5K>ob)0!rP)YaPeO%p=uYHd2x zgpj&g`+;dfNL{T>Z<-K7_uXIy(}a+^TAR@{A*8O>erTEyQdes;nI?qP)!NLa2_bd0 zHj8OONL{V{$TT6OuGVHXO$e#0wb@J)Lh5R5cGH9qy6*;am?nhO)!L6u6GG~0?I)%Q zA$7I(Q`3Zyx?200X+lU{t^M3IA*8O><}^(RsjIbLm?nhO)!Hvj6GG~0Z7$PeruW# zQdesWnkIzQ)!Oe&6GG~0?f0e$A$7I(2h)U*x>{SvG$DlUyTKn#6GG~0?N6o&A$7I( zXVZj`x?1~-X+lU{tu1Vt5K>obiobe=|)8sjIcWne`|IHcberYlp65nh;Xg4qewYA*8Myx}Ir5NL@R0eba;x zy6*-Xm?nhO)!K%p2_bd0wvlNk)Lh5R5lxac;-FJi0rU@Z+wKm2yA*8O>#+oLC)YaM+rU@Z+wYH^cLP%Y$ zZDpDeQdetRnb~H^0 zsjIb}OcO%tYHerJgpj&g+r=~?q^{O>HBAVqtF_%s6GG~0ZFkdzkh)si!!#j;?z_RB zrU@Z+wYHaOLP%Y$?QNP6QdevHm?nhO)!M$M2_bd0wx4N2NL{V%Z<-KNS8E5DCWO@0 z+JUACA$7HOkZD5re|nxV56?CD?>;-&G$Ev}9eRjqLP%XZ^ib1;kh*s0VWtTob?wl@ zO%p=u+M!37CWO?rLyt5~2&rp_9%Y&kQr8YW+B6}gt{r-eX+jA7bhUP@X+lU{tsQ5Y z5K>ob$D1aE)YaMvrU@Z+wRWOuLP%Y$on)F2Qdesynob7nml5&~I037n&x7)YaNWrU@Z+wRW*-LP%Y$U1FLLQdeu2 znkIzQ)!JpI2_bd0cDZRnNL{U6VVV$9S8G?ACWO@0+Eu0rA@s-9+SR5BA$7HOjcGzi zU9DYfnh;V~YuA}3gw)mA^`;3Sb+vYbX+lU{t=(vv5K>obH<>1c)YaO}rU@Z+wRVeX zLJ0lv+=JWTR?~!#x_0PorU@Z+?aab+z_@X+lU{tvzU(5K>ob51A%} z)YaOo)k_M~Y-NL{Tx zWttFDS8Gq3CWO@0+B2pJA$7I(tZ70>U9CN5nh;V~YtNe|gw)mA3#JJnb+z`QX+lU{ zt-WNL5JJCQt-WlT5K>obub3u;)YaOnrU@Z+wf356LP%Y$y>6NiQdetlm?nhO)!Lh; z2_bd0_LgZvNL{VHZJH2LS8MN>CWO!*S8MN@CWO@0+Iyx6A$7I(zG*^8U9Ej!nh;V~ zYaf~>gw)mAN2UoOb+z`fX+lU{t$kve5K>obpPD9w)YaO5OcTO5eOTWOJ~K@SscVOh zx4QlO_vha>b?wmcO%p=u+M!=CO$e!LhfZLc5K`9;{i10?NL@R0Leqqhx_0P9rU@Z+ z?a+x$6GH0Rp_7;yTtNL{Uc*)$=fuGYR{nh;V~Ym=HLgw)mAS4|T_>S}E= z(}a+^TASQ7A*8O>zGj*bQdetVH%$nstFob-!M%GsjIcAOcO%t zYVDh*2_bd0_AS$dkh)r%+B6}guGYS7nh;V~Yu_JX-pGB>T2z~rU@Z*-wnQJ znh;V~Ytx!0gw)mA_e~Q*>S}E|(}a+^TKj=%LP%Y$O>deIQdes;m?nhO)!K}v2_bd0 z_CwQzkh)r%$uuE^?z_RvrU@Z+wKj`sLP%Y${m3*Sq^{OxHBAVqtF_ro6GG~0ZFbXy zkh)r%!!#kJuGW5Rnh;V~YdJpPD9w(0w=fnQ1~uT|4yWrU@Z+?a(<*6GH0R zp}#Oq2&rp_{?ardq^=!0muW&sT|0Dc(}a+^cIZ5&2_bdu(0NT0Lh9O~^O+`u(0w-; zVwwT2x|rU@Z+wYHFH zLP%Y${n0cbq^{QfWSS6CS8IPZO$e#0wZE7qgwTCASlBcnq^{N$F--`mtF=W<6GG~0 zZ86h?kh)r1+%zGiuGW??O$e#0wZEDsgw)mAlBNkEb+z_4(}a+^TKl_cLI~Y=gQZLp zLh5R5Y14#|x>{StG$Ev})|NF*2&t>JS}Fy(}a+^T3f+1A*8O>Ry0irsjIb> zOcO%tYHelHgfLED)^~$dOcO%t+M%nOCWO?rLsv6R2&rp_u5OwTQr8Y$!!#kJt{u9j zX+lU{J9I76gpj&+=s!#oLh9O~|1?bqscVP+%QPW`?z_R-rU@Z+wf1k*gpj&gTgNmZ zq^{Q1HBAVqtF`q^6GG~0ZGF>(kh)siz%(JGuGTg*O$e#0wT(;@Lh5R5W7C8Xy6*;? zm?nhO)!L?}2_bd0wwY-{NL{UMZkiBMS8F3p6GG~0ZIo$3NL{UsHcbertFobTbm|?)YaNHrU@Z+wYIHkLP%Y$ZD*Pg zQdeu+nb~Q~1sjIc! zOcO%tYHfGZgpj&g+ru;=q^{QXG))MptF^sM6GG~0ZEw?rkh)si$21{??z_RhrU@Z+ z?a=*96GH0Rq5GRAgw(Y|4=_y#scVNGXqpgG*A6|%G$Ev}9eS{7LP%XZ^bpg8kh*s0 zp{5BTb?wl@OcO%rz8f5Fnh;V~Ye$$Sgw)mAk){bDb+vYsX+lU{tsQNe5K>ob$CxIB z)YaOtrU@Z+wRW6oLP%Y$9dDWtQdesym?nhKeK$DKG$Ev})=n}_2&t>JlT8ys>T2y2 z(}a+^T07M=A*8O>PBTpisjIcqO%p=uYV8cugpj&gJJU2Fq^{P^GEE4f`)+WyX+lU{ zt({|<5K>ob=b9#j)YaN~rU@Z+wRXN~LP%Y$U0|9JQdesinkIzQ)!Id-2_bd0cCl$f zNL{U6Vww;__ub%9(}a+^TD#0NA*8O>E;mgGsjIasOcO%tYVAtXgpj&gyUH{nq^{Pk zHcbertF>!P6GG~0?OM}>kh)sC&NLy6(~tGt;Cj=9kh*s04W)ifcbt{r-tX+lU{JM?zbgpj&+=pCjBA#~pj?lesZ zsjIcSOcO%tYVB^*gpj&gyT>#kq^{QPHBAVqtF`+~6GG~0?S9jQkh)rXz%(JGuGStj zO$e#0wTDa-Lg>C5JZzc}Qdet_m?nhO)!L(`2_bd0_LylxNL{TxZkiBMS8Gq0CWO@0 z+LNXUA$7I(lxadpU9CNBnh;V~YtNV_gwTCAc-Ax_q^{PUGffDotF`A%6GG~0?FG|> zkh)rX(KI2XuGU^MO$e#0wU|eHG$Ev})?PDB2%-CK@VaS2NL{VH zVVV$9S8H#YCWO@0+FPaxA$7I(wrN60U9G)inh;V~YwwySgw)mAd!`8?b+z`sX+lU{ zt$kpc5JLCe;6u}dkh*s0N2UoOb?wlPO%p=u+M%DACWO?rL;pXz?x_jb^X{T}Y}>YN z+qP}nwr$%t?>bs1d;W9J{hMh*NL@ShchiKBx_0Ov zrU@Z+?a+a?wC}(Fd^UCM(1A@8Lh9O~gP10S(0w-;)HETauGR)KO$e#0wZTmjLh5R5 z2-Ad+x>_63G$Ev})`l`o2&t>Jp-mG)>S}Em(}a+^S{v3hA*8O>hBHkFq5EzyylFy6 zU9F8^nh;V~Ya^N_gw)mANTvxPb+tCKX+lU{t&L)u5K>obqnaj!)YaN(rU@Z+wKlqG zLP%Y$jbWM)LigQZOw)vrx>_5{G$Ev}*2XqX2&t>JaZD3J>S}FV(}a+^S{u(aA*8O> z#y3p}sjIaKOcO%tYHdQ(gpj&go5(aFgzme+#HI-$b+tB$X+lU{txam05K>oblbI%j z)YaPLrU@Z+wKj!mLP%Y$O=+4CQdetJnI?qP)!Nji2_bd0HjQaQ7@&XeyTP=k2_bdu z(CJJQLh9O~)0-xQ)U`urFii-lYlqHgnh;Xg4xPy~A*8MyIobbC@QC)YaOYrU@Z+wKkV&LP%Y$&25?xQdev9m?nhO z)!MwK2_bd0HlJxiNL{VXZ<-KNS8EHHCWO#^H(1a#A*8O>7BWo;sjIbxO%p=uYHbnI zgpj&gThufmq^{N$GffDotF^^V6GG~0Z3)wakh)r1(ljBYuGW?^O$ed;Zm_gzLP%Y$ zEn}JxQdeusnkIzQ)!K5V2_bd0w!CRVNL{V1V44t8S8FSpCWO@0+DfJgA$7I3vS~s{ zU9GKRnh-+w-C$MIgpj&gTg@~fq^{OhH%$nstF<*u6GG~0ZB5gJkh)r1%QPXRuGZEz zO$e#0wRKDrLh5R5UDJe+x>{S$G$DlUyTSUV2_bdu&<#uzLh9O~8=5AB)U`u5GEE4n zYlm)Znh;Xg4&B5wA*8Myx~XYGNL@R0Gt-2Sx_0R1rU@Z+?a(bu6GG^|8*FKs5K>ob zTbU+=)YaP7rU@Z+wYH6ELP%Y$ZEKnkQdeu+nI?qP)!O!^2_bd0wu5OxNL{V%XqpgG zS8F?&CWO#^H`v)UA*8O>b}>x|sjIbJO%p=uYHc^ugpj&g+ubxFq^{QXFii-ltF=8% z6GG~0Z7`HI zG$9Po2fRJUU;lk}qG>`%T|4w7(}a+^cIe5b2_bdu&{IqkLh9O~r`HOG$Ev}*3LCe2&t>J z^Gp*$>T2zL(}a+^TD!nBA*8O>E;LODsjIb%OcO%tYVBgvgpj&gyTmjhg#M~pyVNux zq^{O3GffDotF_Bb6GG~0?F!R`kh)sC(ljBYuGX$HO$e#0wX01NLh5Sm8q~!| zG$Ev})~+*62%&$h)~+{A2&t>J8%z^I>T2yq(}a+^TD!?KA*8O>{$`pGQdet#H%$ns ztF@a=6GG~0?H1F7kh)s?hiO7cU9J7oG$DlkqguPwG$Ev})^0OR2&t>J+f5Tf>T2x{ z(}a+^TD#LUA*8O>?lMgXsjIcSO%p=uYV97=gpj&gyVo=!q^{QPGffDg-=6cY+u(lF zgpj&+=mVw+A$9H02Tc<~>e`_XnI?qPwL>2^O$e!LhdyGO5K`9;ebh7|q^=$Mm}x>t zT|4w~(}a+^cIXqP2_f{y)!LJ$2_bd0_LONtNL{TxZJH2LS8LChCWO@0+Owt!A$7I( zFVlpOx?20UX+lU{tvzR&5K>ob&zmNM)YaMxrU@bRSJm2!rU@Z+wf2%}LP%Y$y=obADSkF)YaNYrU@Z+ zwf3=TLP%Y$ePWsrLjO^%eQKHzQdeuAnI?qP)!OH#2_bd0_JwIeNL{UcX_^pHS8M+< zO$e#0wXaMQLh5SmzorQxb+z`jX+lU{t$kyf5C-TA`fl*8X+lU{JM=r#gpj&+==Y`x zA$9H0A50TM>e`_{nkIzQwL^b0O$e!LhyHAu5K`9;{lzpPq^=$Mt7$?=T|4xDrU@Z* z-wl2Lh5Sm57UH@x>_4(EBpTY&u3FtYXh4mgw)mAAf^c+b+tCAX+lU{ ztqo?H5K>obgPSIV)YaM$rU@Z*-wlQ|O$e#0wV_NCLh5R5Xw!s{x>_5?G$Ev})`m4r z2&t>J;Y<@k>S}Fx(}a+^S{uPMA*8O>Ml?+bsjIb-OcO%rz8j2enh;V~YonMZgw)mA zsHO=ab+tB{X+lU{t&MJ)5K>obW0)p{)YaOUrU@Z+wKkS%LP%Y$jcu9`Qdeu^m?nhK zeK#1_G$Ev}*2XhU2&t>J@l6v#>S}EQ(}a+^TAR=`A*8O>CNfP3sjIb#O%p=uYHbqJ zgpj&go76NRq^{N`GffDg`))9~X+lU{J9G-ugpj&+=#-`jA$9H0sZ0|>>e``GnobbDAcE)YaNtrU@Z* z-wozAO$e#0wRubvLh5R5Uekn-x>}phG$Ev}*5)@&2&t>J1xyn{>S}F4(}a+^T3g68 zA*8O>7B)=?sjIa`OcO%rz8frRnh;V~Ym1pCgw)mA;-(29b+xvHX+lU{tu1Mq5K>ob zOPMBw)YaP3rU@Z+wYH3DLP%Y$Eo+((QdeusnI?qLeK%O%G$Ev})>bf02&t>J6-^UD z>S}Ez(}a+^T3gvPA*8O>RxwQosjIbBO%p=uYHc;sgpj&gTirAvq^{Q1Fii*p^gVqy zSkp8iq^=#hmT5vrT|0Db(}a+^cIY~$2_bdu&~;4{Lh9O~>zO8m)U`v`H%$nsYlm)N znh;Xg4&Bf+A*8Myx{+x@2;FysjZG6m>S}Eh(}a+^THDk#A*8O>HZx5KsjIckO%p=u zYHbVCgpj&g+tM^4q^{PsGEE4ntF^676GG~0Z5z{s5W4RM+nOeX)YaN{rU@Z+wYI%! zLP%Y$?O>V^Qdes`nkIzQ)!I&`2_bd0wzFwMNL{V%VwwC59B7&lQdesSnI?qP)!Mnh;Xg4n5g4A*8MydWva62;Fys zQ%w^>>T2yY(}a+^T07k|A*8O>&M-{~sjIa!O%p=uYV9o3gpj&gJKHoNq^{P^F--`m ztF?1Y6GG~0?L5CWO@0+7+e=A#~pjt~5;usjIcCOcO%tYVB&%gpj&g zyT&vjq^{PkHBAVqtF`M)6GG~0?RwLMkh)sC!89SHuGVfeO$e#0wVO;6Lg>C5{LM5W zq^{QfZkiBMS8F$$CWO@0+AXFDA$7I(57UH@x?20EX+lU{t=(#x5K>obx0xn{)YaPU zrU@Z+wRVSTLKvXm>bt?6rU@Z+?a;eS6GH0Rp?8}mgw(Y|?=ejXscVPcYnl*J*ABhU zG$Ev}9eTfMLP%XZ^a0a^kh*s0gQf`~b?wlHOcO%rz8gGjnh;V~Ymb;Fgw)mAqoxTV zb+z`GX+lU{tvzm<5K>obPnafz)YaOPrU@Z+wf2;0LP%Y$J#Cs0Qdeuwm?nhKeK&a4 zG$Ev}*8XLh5K>ob|29nssjIc;OcO%tYVCQ`gpj&gd%-jzq^{OpG))MptF@O*6GG~0 z?Pb%1kh)rX#WW#=?z_ROrU@Z+wf356LP%Y$y>6NiQdetlm?nhO)!Lh;2_bd0_LgZv zNL{VHZJH2LS8MN>CWO@0+PkI+A$7I(o@qh|-FJicO%p=uYV8Blgpj&g`_MEYq^{OJ zGEE4ntF@0!6GG~0?Gw|4kh)s?)HETauGT&?O$e#0wa-lxLh5Sm3)6%Uy6*;GnkIzQ zwL|}7nh;Xg4*kkBA*8My`d`z8kh*s0*QN;}b?wk^OcO%t+M(Z?CWO?rL%%ak2&rp_ zes7u(Qr8as!89R+?z_Q{rU@Z+wf2)~LP%Y${cM^LQdeugm?nhO)!MJ72_bd0_CM2v zkh)s?%`_pTuGW4xO$e#0wLeS~Lh5R5psnru??0an-FJh5O%p=uYHbkHgpj&g8`Lx* zq^{NmGffDotF^&R6GG~0Z3xqZkh)qM(ljBYuGWS!O$e#0wV_QDLh5R57}JChy6*7vbl(j|H%$nstF_60G$Ev}*2XtY2&t>J2}~2h0R4O44JI^A2&rp_PGp)8Qr8Zh*fb%e zt{pmwX+lU{J9JXhgpj&+=wzk|A$9H0$xRbN>e``Gm?nhOwL_;gO$e!LhfZah5JLCe zU~1EZkh)r%#xx}pTG$Ev})@C$K2&t>JnM@Nx z>S}Ff(}a+^TARf*A%yO`!K|hUA$7Gjn`uHwU9HV-nh;V~Yjc<;gw)mAoTdpOb+tB^ zX+lU{t<7zk5K>ob^Oz=t)YaO&rU@Z+wKkt=LI~Y=gZWJpLh5R50n>z#x>{S%G$Ev} z))q2N2&t>Jg-sJe>S}Ef(}a+^T3ggKA*8O>7Bfuob%bF&H)YaN@rU@Z+wYI!zLP%Y$tzeoEQdes$ znkIzQ)!Is?2_baf4OTWy2&rp_u40-HQr8Y$)ifcbt{u9XX+lU{J9Kr^gpj&+=o+R8 zA$9H0HBA#j>e``enI?qPwL{l7O$e!LhpuCq5JLCeU|rLMkh)r1&om*VuGZE!O$e#0 zwGB)YLh5R5L(_zix?0=FG$Ev});2ax2&t>JO-vI)>S}FM(}a+^THDMtA%yO`!RDq3 zA$7I3g=s=aU9D|tnh;V~Yg?Hngw)mA)}{#|b+xvQX+lU{t!-ob+nFYW)YaPd zrU@Z+wYGz4LI~Y=gB?v1Lh5R5C)0$Gx?0=WG$Ev})^;&X2&t>JT}=~0>S}E_(}a+^ zTHD<;A*8O>_ApHdsjIa;O%p=uYHcsmgb=##278+(gw)mAKBfsFb+xvyX+lU{t?g%; z5K>ob`UU?Re9Kkh)qs!89SHuGUU8O$e#0wUbN}Lh5SmWYdI@ zx>`HMG$Ev})=o7|2&t>J(@YaW>T2zD(}a+^T06ruA%y&N591sjIcK zO%p=uYV91;gpj&gJJ&QJq^{P^GffDotF`k@6GG~0?E=$;kh)sC&@>^WuGTIxO$edC zt=29!O$e#0wM$GBLh5SmQqzQxx>~!;G$Ev})-E?q2&t>JD@+qY>T2yu(}a+^TD!_L zA*8O>t~N~wsjIbXOcO%rU#qoiO%p=uYVA7Hgpj&gyWTV*q^{O(Fii-ltF;?V6GG~0 z?IzQNkh)s?n`uHwU9J7yG$Ev})^0XU2&t>JTTBx|=-21`>o)j@X+lU{JM^EX2_bdu z&|6ItLh9O~x0xn{)U`uzH%$nsYlq%pnh;Xg4!zSfA*8MydY5TJNL@ShZqtO2x_0P2 zrU@bR`_Fob&zdHL)YaO*OcO%tYVF^q2_bd0_MB-#2>orf_Pl9ANL{VHV44t8 zS8FetCWO@0+DoPhA$7I(vS~s{U9G)hnh;V~YpobZXCWO?rL;qu%5K`9;{mL{Uq^=$MU(_5=G$Ev})&@0A2&t>J!AuiE=)M~aZkiBMS8GFobBbX+H(0w-;(KI2XuGU5} zO$e#0wUJE|Lh5R56w`!|x>_66G$Ev})J(M=OV>S}Ea(}a+^S{u_eA*8O> z#xhL^q5EzywrN60T|0Cf(}a+^cIddK2_bdu(D6(YLh9O~VVV$9 zS8G$6CWO@0+Ek_qA$7GjwP`{~U9C-Hnh;V~Ytx!0gw)mAbfyU*bl(l8H%$nstF;+S z6GG~0ZAR0Ckh)r%$uuFPuGVHYO$e#0wOLFPLh5R5R?~!#x>}pfG$Ev})@CJ zIZP8m=)N1wX_^pHS8H>bCWO@0+T5lIA$7Gjk7+_kU9HV)nh;V~Yx9{Vgw)mA{H6&Z zb+xvDX+lU{tu1Jp5K>ob3z;T_(0w;p*fb%euGSVYO$e#0wM9)6Lh5R5G1G*Qx>{S@ zG$Ev})|N0$2&t>JB~24T>S}E%(}a+^T3gyQA*8O>mN88T1N1$8H(1s*A*8Myx}0f3 zNL@R0dDDcDx_0OarU@Z+?a&oX6GH0Rp(~jtgw(Y|S2j%uscVO>Vwwx>{S)G$Ev}*48pj2&t>JwM`R3>S}Er(}a+^T3gpN zA*8O>)-z2AsjId1O%p=uYHb74gb=##1{<0tgw)mAMy3fNb+xv!X+lU{t!-kO5K>ob zo0=ws)YaN%rU@Z+wYIrwLP%Y$ZDE=aQdetRnkIzQ)!J632_baf4YoE-2&t>JZA=qF z>S}FU(}a+^THDSvA*8O>wl_@(sjIaeOcO%tYHdf;gpj&g+sQN`q^{O>HcbertF>KB z6GG^|8|-SD5K>obyO}10)YaPVrU@Z+wYG<8LP%Y$?P;12QdetxnI?qP)!N>s2_bd0 zwvTB-NL{V%Ynl*JS8My3CWO#^H`w1aA*8MydVpy{NL@ShK+}Yfx_0P6rU@Z+?a+fw z6GH0Rp@*0zgw(Y|4>e5)scVNGW||OE*A6}0G$Ev}9eRXmLI~Y=gCk87Lh5SmDAR`HhG$Ev}){Zev2&t>JV@(r6>T2yc(}a+^T07n}A*8O>PB2XfsjIaUO%p=uYV9P` zgb=##1}B>)gw)mADW(Y_b+vY?X+lU{t(|6?5K>obr<*2()YaMJ^Gp*$>T2zL(}a+^TD!nBA*8O>E;LOD zsjIb%OcO%tYVBgvgpj&gyTmjhq^{O3HBAVqtF_Ba6GG^|8(eOh5K>obSC}S*)YaOR zrU@Z+wRV+hLP%Y$U2U2WQdeu&m?nhO)!MbD2_bd0cAaTLNL{U6Z<-KNS8F$zCWHa{ zt-c%FXqpgG*ABhOG$Ev}9r`!Zgpj&+=-*8fLh9O~H=8De)U`uzF--`mYlr^BG$Ev} z9r{nxgpj&+=&hy+A$9H0+e{Ne=)N1=ZkiBMS8I2eCWO@0+MT8eA$7HOmuW&sU9H`1 znh;V~YxkHYgw)mAy`~8vb+vY%X+lU{t=(^$5K>ob511x|(0w;}&@>^WuGSthO$e#0 zwTDd;Lh5Sm5z~Z_x>|eGG$Ev})*drW2&t>J$4wJL>T2x?(}a+^T6@woA*8O>o-$1c zq5E#|v}r;}U9CN1nh;V~YtNb{gw)mAzf2QC>T2!ZrU@Z+wf3B8LP%Y$J#U&2Qdes) zm?nhO)!K`u2_bd0_L6Br2;FysmrWBw>T2y3(}a+^T6@(rA*8O>UNcPysjIcuO%p=u zYV8fvgpj&gd($)_q^{Q9GEE4ntF^aH6GG~0?H$vE5W4RM@0uor)U`w3GffDoYlpsX znh;Xg4*kG1A*8My`k`q;NL@ShBh!SCx_0QtrU@Z+?a)t56GH0Rp`V&2gw(Y|KQm1T zq5E#|xoJX3U9Ej#nh;V~YhRisgw)mAe@qiX>T2yP(}a+^TKlhQLP%Y$eQlZ$Qdeu= zm?nhO)!MhF2_bd0_MK@$2;Fys?@bdz>T2x=(}a+^TKmy7A*8O>elkr6sjIc0O%p=u zYV8-(gpj&g`_(idq^{QfXPOXFS8KnSCWO@0+V7?bA#~pj{xD4lsjIbtwzcoS|9m!e zwKlM6LP%Y$4Pu%QQdet(nkIzQ)!JaD2_bd0Hn?d*NL{TBVVV$9S8GF>CWO@0+EAtm zA#~pjhBi$IsjIbNOcO%tYHe84gpj&g8_qN#q^{P6H%$nstF;kK6GG~0ZA8}pU zG$DlUyTO#E2_bd0HkD~YNL{T>ZJH2LS8LOlCWO@0+O(z#A$7GjooPZyU9C-Tnh;V~ zYcrT8gw)mAjHU@8b+tB=X+j9ycY~Qt6GG~0Z5Gpnkh)r%)ifcbuGVHVO$e#0wb@M* zLh5R54%38?x>}plG$Ev}*5)!z2&t>JxlI#7>S}Es(}WPZ?*{XlCWO@0+I*%7A$7Gj zziC29U9Bx(nh;V~YYUntgw)mALZ%5Jb+xvzX+lU{tu11j5K>obi<%~c)YaNzrU@Z* z-whTwO$e!Lhc0275K`9;UD7lmq^=#hlxadpT|0DX(}a+^cIYyu2_bdu&}B^%Lh9O~ z%b6yG)U`vGH%$nsYlp62nh-+w-C#x2gpj&gTgfybq^{OhHcbertF={36GG~0ZB^5R zkh)r1%`_pTuGUsJO$e#0wKYr=Lh5R5P1A&sx>{SyG$DlUyTRI~2_bd0wvK5+NL{V1 zYnl*JS8MB;CWO@0+WMvmA$7I3foVcWU9D|snh;V~Ya5v+gw)mA#-<4&b+xvMX+j9y zcY{q$6GG~0Z8Ot^kh)si+%zGiuGY3NO$e#0wJl8(Lh5R5E7OFKx?0=XG$Ev}*0wQC z2&t>JZA}wG>S}E}(}WPZ?*`kOCWO@0+76}(A$7I3qiI4&U9Ih8nh;V~Ydf1Jgw)mA zE~W_~b+xvuX+lU{t?g!-5K>obyPGD2)YaM^rU_wyKH%*+{`&8;Jxvor>e``unI?qP zwL|wdO$e!LhwfvV5K`9;-PbfBq^=#hpJ_r!T|0Dt(}a+^cIW}72_bdu&;v~qLh9O~ z2bm^>&>vT82b(5@)YaM{rU@Z+wRWg!LP%Y$9cG#kQdet-nobrobmzgGn)YaPMrU@Z+ zwRVMRLP%Y$U1^#SQdetNnI?qLZ_oMHZE&?|LP%XZ^cvHIkh*s0wWbLnb?wmWOcO%t z+M(B*CWO?rLvJum2&rp_-e{T-Qr8Z>$uuFPt{wU}(}a+^cIe+t6GG^ZtF@a=6GG~0 z?H1F7kh)s?hiO7cU9J7oG$Ev})^0UT2&t>J+e{Ne>T2zF(}a+^TD!wEA*8O>?lesZ zsjIcSOcO%rud21XO%p=uYV97=gpj&gyVo=!q^{QPGffDotF`-06GG~0?E%w-kh)rX z&@>^WuGSthO$e#0wTDd;Lh5Sm5z~Ya`p0VRQPYHwx>|e8G$Ev})*d%a2&t>JCrlGU z>T2yt(}a+^T6@YgA*8O>o;FPgsjIbTOcO%tYVBFmgpj&g`nO3_HWaKkh)rX z&NLyUuGXG6O$e#0wHHhiLh5SmMbm_kx>|e5G$Ev})?PME2&t>JS4T2y((}a+^ zT6@hjAq>zL^xfcf(}a+^cIX?X2_bdu&^JvJLh9O~Z`&A*8My`krY*NL@Sheba=Hx_0OXrU@Z*-wi%AO$e#0wU0~_Lh5SmW7C9?x?20h zG$Ev});={&2&t>J&rB0S>T2zC(}a+^TKmE@A*8O>zBEk;sjIdBm?nhKeK+{ZG$Ev} z*8Xdn5K>obUz;X`)YaNIrU@Z+wf3!PLP%Y$eP@~wQdeu=nS+ zNL{V{WSS5{_ub%U(}a+^TKmN`A*8O>el<-9sjIdBnI?qP)!J{S2_bd0_Pc39NL{V{ zVVV$9S8D@pXWxJS`E2THZD7-ckh)qM#55se``Wm?nhKeK#1>G$Ev}*2XeT2&t>Ju}u>~>S}Eq(}a+^S{v6iA*8O>#xqR_ zsjIc|O%p=uYHb43gpj&go6s~Nq^{N`GEE4f`))9?X+lU{txaN@5K>oblbR-k)YaN# zrU@Z+wKlnFLP%Y$O<|f4QdetJnkIzQ)!J012_bd0HnnL&NL{T>W10{`_uXJx(}a+^ zTAR)^A*8O>rZ-IpsjIaaOcO%tYHdc-gpj&go5?gGq^{OxHcbertF>876GG~0ZC2BS zkh)r%%`_o|?z_S4rU@Z+wKj)oLP%Y$&1sqtQdetpnI?qP)!N*q2_bd0HjimSNL{VX zYnl*JS8MZ`CWO@0+We*oA$7I3fN4S)pzrCs!Gfje`_TnC5ENz+) zQdeusm?nhO)!MSA2_bd0ww!4~NL{ThZ<-KNS8FSnCWO@0+KQ$LA$7I3l4(LnU9GKb znh;V~Ypa+hgwTCASk*Kkq^{OhGffDotF_fl6GG~0Z4J|ekh)r1(=;KZuGZEvO$e#0 zwY5zXLh5R59n*x6x>{S;G$Ev}*48sk2%-CKu)b+RNL{UMV44t8S8E%ZCWO@0+D4`c zA$7I3v1vj`U9D|mnh;V~Ynz%Tgw)mAW~K=tb+xv+X+lU{t!-hN5JLCeU`x}4kh)si z$}}OQuGY3TO$e#0wQWojLh5R5ThoM)x?0=LG$Ev}*0wiI2&t>J9ZVBK>S}FA(}a+^ zTHDDqA%yO`!Oo@$A$9H0T}%@~>e`{ZnkIzQwL^C^O$e!Lhwg5g5K`9;-NQ5?q^=#h zr)fe+T|0Cy(}a+^cIe)w2_bdu(0xo3Lg>C5>}#43QdevHnI?qP)!P212_bd0c7SO@ zNL{TRXqpgGS8E5ECWO@0+QFs?A$7HOh-pGdU9BBznh;V~YloR8gwTCAINUTLq^{PE zFii-ltF`HlG$Ev} z)=n@@2%-CKaH45KNL{U+WSS6CS8FGmCWO@0+9{?9A$7HOs%b(5JLCe;B3=`kh)qs$21|NuGY>qO$e#0wew69Lh5Sm zeA9%Gx>~!yG$Ev})-E(n2&t>Ji%b(j>T2y`(}a+^TD!zFAq>!O_1)l7(}a+^cIaiM z2_bdu(92B|Lh9O~SC}S*)U`veG))MpYlmKCnh;Xg4!znmA*8MydW~s9NL@ShTGND( zx_0PwrU@Z*-wm!eO$e#0wHr(mLh5SmM$?3lx>~!*G$Ev}*8XOi5K>obe>Y7CsjIb{ zO%p=uYV8)&gpj&g`-f>lNL{V{(=;K3?z_RQrU@Z+wRW3nLP%Y$-ENu?Qdettm?nhO z)!Ln=2_bd0c9&^FNL{VnZJH2LS8Ml}CWO@0+P$U;A$7HOpJ_q}-FJigO%p=uYV85j zgpj&gd(bo?q^{N;GEE4ntF?zs6GG~0?Ge+2kh)rX)HETauGStiO$e#0wZ}~pLh5Sm z3DblSy6*;0nkIzQ)!I|02_bd0_Oxk2NL{TxW10|BS8LCjCWO@0+P_Q_Lh5Sm-=+y6 zb+z`KX+lU{tvzp=5K>obFPJ8T(0w;}(KI2Xt{wW4X+lU{JM?AKgpj&+=qsiPA$9H0 zS4|T_>e`{NnI?qPwL@PwO$e!LhrVH&5K`9;ebY1{q^=$MmT5u=-FJhxO%p=uYV94< zgpj&gd)G7}q^{Q9GffDotF`w{6GG~0?E}+^WuGT&>O$e#0wU12`Lh5Sm z6Vrqcy6*;`nkIzQ)!JvK2_bd0_PJ?7NL{UcVVV$9S8HFICWO@0+J8(FLh5SmE7OFK zx?20MX+lU{t$l5p5K>ob-JpG^}&>T2y5(}a+^TKm;BA*8O>{%4vHLigR^H`9cWx?20)G$Ev} z*8VU}2&t>Jfws5rzyEwTb+tCIX+lU{tqo$D5K>obgPJCU)YaNxrU@Z+wKlkELP%Y$ z4PlxP2I$}WZZM>2LP%XZbSTq=kh*s0(549?b?wk$OcO%t+M&amCWO?rLx(d>2&rp_ z4sV(eQr8Y0!89SHt{pm}X+lU{J9H$|gb=##1|yp$gw)mAD5eP^b+tCCX+lU{t&L`y z5K>obqnjp#)YaM;rU@Z+wKk?{LP%Y$jb)k;QdetZnJ z@k|p!>S}F#(}a+^TARQ$A*8O>CNxb5sjIb#OcO%tYHecEgpj&go5VCBq^{N`HBAVq ztF_5Y6GG^|8%%DR5K>obQLSGQdeu!m?nhO)!MYC z2_bd0Hl1lgNL{T>Z<-KNS8FqvCWO#^H<-~hA*8O>W-?6(sjIb_O%p=uYHb$Ngpj&g zo7FTSq^{OxGffDotF_rp6GG~0Z4T3fkh)r%(=;KZuGZ!obOPVHx)YaNjrU@Z+wYIcr zLP%Y$En}JxQdeusnkIzQ)!K5V2_baf4VE`e2&t>J6-*OC>S}F8(}a+^T3g99A*8O> zRyIutsjIbBOcO%tYHd~1gpj&gTg@~fq^{OhH%$nstF<*u6GG^|8?0%X5K>obYndj5 z)YaPBrU@Z+wYH9FLP%Y$t!tVPQdev1nI?qP)!O=|2_bd0wt;CvNL{UMXqpgGS8E%Y zCWO#^H`v%TA*8O>HZe^IsjIb3O%p=uYHc&qgpj&g+uSrEq^{PsFii-ltFobdz&VN)YaNPrU@Z+wYINmLP%Y$?Pr=0QdevH znt zU9BB%nh;V~Ye$$Sgw)mAk){bDb+vYsX+jA7ZMAl^X+lU{tsP^U5K>ob$C@UD)YaN? zrU@Z+wRXH|LP%Y$onV>}QdesynkIzQ)!Ip>2_bd0cCu+gNL{U+Vww;_|5~k`YMKyI zS8J!4CWO@0+UceVA$7HOhG{}bU9FvInh;V~YiF4zgw)mA*`^60b+vYmX+lU{t(|L{ z5K>ob=b0vi(67(=*KKgVX+lU{JM;q6gpj&+=!K>UA$9H0i%b(j>e`_fnp4 zO$e!LhhA!$5K`9;z05Qrq^=!$xoJX3T|4v&(}WQE{c7z>(}a+^TD!_LA*8O>t~N~w zsjIbXOcO%tYVBIngpj&gyUsKrq^{PkH%$nstF;?U6GG~0?MBmtkh)sC$uuE^{=8cI zn`uHwU9J7yG$Ev})^0XU2&t>JTTBx|>T2yDrU@Z+wf0Zbgpj&gyVW!yq^{O(GffDo ztF_xr6GG~0?GDp~5c=C{?M~B#kh)sC%QPXRuGa20O$e#0wR=nxLh5SmUekn-x>~!> zG$Ev}*6ue=2&t>J2TT(}>T2yl(}a+^T6@SeA%y<5T6@?uA*8O>9x+V_sjIa|O%p=u zYV9%8gpj&gd)zc3q^{PUFii-ltF(}a+^cIdxN6GH0Rq0gBngw(Y|pEpeiscVP6V44t8*A9KrG$Ev}9r}`K zLP%XZ^kvh8kh*s0E2aq{bl(kLHBAVqtF_lm6GG~0?RC?Hkh)rX!!#kJuGZc(O$e#0 zwYN+YLh5SmZPSF1x>|e3G$Ev}*4{Nu2&t>J_e>K)=)N1gZ<-KNS8E@bCWO@0+J~kI zA$7I(k!eCmU9Ej=nh;V~YoC}Vgw)mAr=|%Zb+z`HX+lU{t$l8q5K>obUzjF@(0w=f z(ljBYuGaoznh;V~YhRfrgw)mAe@zoY>T2z4(}a+^TKmQ{A*8O>zBNqobznCV3)YaOrrU@Z+we~;L zgpj&g`^_{Vq^{O}H%$nstF=E&6GG~0ZJ-_O`|m%W4c&KxflU)a>e``$m?nhOwL=Fr zO$e!LhYn_%5K`9;9o#e_q^=!0glR%ZT|0D0(}a+^cIZ&12_bdu(4kEeLh9O~!_62G$Ev})Jkxdgq>S}Ei z(}a+^S{v0gA*8O>Ml($aq5Ezyx@kg4U9F8_nh;V~Yh#)wgw)mASf&Xfb+tCOX+lU{ zt&L-v5K>ob}paG$Ev})+RPh z2&t>JNlX($>S}FL(}a+^TAR!?A*8O>CO1t8sjIaqOcO%tYHdo>gpj&go60mHgzme+ z)TRj`b+tB)X+lU{txap15K>ob)0rlO)YaPbrU@Z+wKjukLP%Y$&1jksQdes;nI?qP z)!NLa2_bd0Hj8OO7@+U%yTPoc2_bdu(Ai8ALh9O~vzsP_)U`wBFii-lYlqHhnh;Xg z4xP(1A*8MyI=5*;NL@R09@B)7x_0QirU@Z+?a=v56GG^|8_aK-5K>ob3z#N^)YaO8 zrU@Z+wYHFHLP%Y$Eo_<)Qdet>m?nhO)!L$_2_bd0wwP%`NL{ThZkiBMS8Gd{CWO#^ zH(1g%A*8O>mNHEUsjIc6O%p=uYHb)U`vmGEE4nYlm)anh;Xg4&BByA*8Myx~*wKNL@R0JJW=a zx_0RHrU@Z+?a&=e6GG^|8|-MB5K>obJDDbg)YaO~rU@Z+wYH0CLP%Y$?P{73Qdeuc znI?qP)!Oc+2_bd0wufm#NL{V%X_^pHS8IEjCWO#^H`v=WA*8O>_AyNesjIbpO%p=u zYHdH$gpj&g+ut-Hq^{NuFii-ltF;476GG~0?I6>Hkh)qs*fb%euGS7QO$ed;Zg8k+ zLP%Y$9cG#kQdet-nU9BBwnh-+w-QalBgpj&gJHa#|q^{OZG))MptF@C%6GG~0?PSx0kh)qs#WW$L zuGUU9O$e#0wbM)!Lh5Smbkl^8x>`HKG$9PoZ};8cOw)vrx_0PUrU@Z+?a;GL6GH0R zq34(;gw(Y|&oxa5scVOxXPOXF*A6}3G$Ev}9eROjLP%XZ^g`2wkh*s0MWzWMbl(jw zHcbertF=o^6GG~0?NZZ(kh)sC%rqgSuGTI$O$e#0wJS^$Lh5SmO4Edpx>~!+G$Ev} z)~+^92&t>JYfKYD=)N0VYnl*JS8LaqCWO@0+V!RhA$7HOgK0uYU9H_{nh;V~Yd4uD zgw)mA-%Jxi>T2!prU@Z+wRW> zZZk~?sjIcyO%p=uYV8iwgpj&gyVEowq^{QPGEE4ntF^mL6GG~0?H<#F5W4RM_nIbz z)YaO3rU@Z+wRXR0LP%Y$Jz$y;QdesankIzQ)!IX*2_bd0_ONL}NL{TxVwwqr>T2x;(}a+^T6@tnA*8O> zUNTJxsjIb@O%p=uYV8%%gpj&gd(|`{q^{OpGffDotF_ln6GG~0?G4j}5W4RMZ<;2A z)YaNsrU@Z+wf44YLP%Y$yUq^{OJH%$nstF||NL{UcW10|BS8LyzCWO@0+IOZ2 zA$7I(y=g*7U9J6Knh;V~Yd@MMgw)mAPo@bWb+z`hX+lU{t^Hz}5C-T!`fl*6X+lU{ zJM@312_bdu(BDiGLh9O~zndn6)U`wZFii-lYljZBqkaGV=d-D6hYoC-5K`9;9mF&t zq^=!0sA)n-T|0Cz(}WPZ?*@aLCWO@0+7PA*A$7Gjq-jD(U9Amenh;V~YeSnRgw)mA zFs2D1b+tCEX+lU{tqo_I5K>ob!<#0A)YaMurU@Z*-wj4IO$e#0wUJB{Lh5R5WYdI@ zx>_5>G$Ev})J(M%IU>S}Ft(}a+^S{uVOA*8O>#xzX`sjIcIOcO%rz8j2f znh;V~YvY(Egw)mAxTXmqb+tC0X+lU{t&MM*5K>ob6PPB1)YaOArU@Z+wKkDyLP%Y$ zO>CMFQdet}m?nhKeK(lYG$Ev})+RGe2&t>J$xRbN>S}EY(}a+^TAR`|A*8O>rZPe`_*nob z3z{Z`)YaNTrU@Z*-whTvO$e#0wM9%5Lh5R5QPYHwx>{SzG$Ev}))qHS2&t>JB}@}S z>S}FC(}a+^T3gCAA*8O>mNrcYsjIbROcO%rz8frSnh;V~Ys;A?gw)mA@}>zPb+xvF zX+lU{t*vO95K>obE14#Q)YaO`rU@Z+wYG|BLP%Y$t!kPOQdeuMnI?qLeK%O$G$Ev} z*48jh2&t>JHBA#j>S}E*(}a+^T3g#RA*8O>)-g>8sjIbhO%p=uYHdB!gpj&gTi-Mx zq^{OBFii*p^nq{B@z;N!ZD^VhQr8aM$TT6Ot{u9uX+lU{J9HD%gpj&+=%%I#A$9H0 z%}f(Q>e`{3n)S z6GG~0Z9CJ1kh)si-ZUYkuGV%iO$e#0wH-|pLh5R5C)0$Gx?0=WG$Ev})^;&X2%*2K z)^;^b2&t>J-Aofg>S}Fw(}a+^THC`kA*8O>_B2fhsjIcUOcO%tYHe@Rgpj&g+s8B^ zq^{QXHBAVqtF`@16GG@8tF`@26GG~0?Euq+kh)qs&@>^WuGS7RO$e#0wS!F)Lh5Sm z5YvQ^x>`HbG$Ev})($gG2&t>J!%Y)H>T2x>(}WQEk815m(}a+^T06=#A*8O>jy6pQ zsjIbPOcO%tYVBClgpj&gJI*vAq^{PEH%$nstF;qM6GG~0?L^arkh)qs$uuE^etXWp zZiACe6GH0Rp{JN8gw(Y|Pc=;lscVOxW||OE*A6}1G$Ev}9eRdoLP%XZ^i0!)kh*s0 zS*8ggb?wlzO%p=u+M(x|CWO!*S8L~*CWO@0+Igl4A$7HOzG*^8U9DYUnh;V~YZsa( zgw)mAMWzWMb+vY}X+lU{tzBZ85K>obmzpMo)YaN$rU@bRSJm3(rU@Z+wRVMRLP%Y$ zU1^#SQdetNnI?qP)!Nmj2_bd0c8zI5NL{U6Ynl*JS8LaqCWO@0+V!RhA$7HOgK0tt z{bRLuqiI4&U9H_@nh;V~YkxCM2&t>Jzndn6)YaO}rU@Z+wRVeXLP%Y${lhdNq^{Qf zX_^pHS8KPLCWO@0+HIx@A@m>B+U=$ZA$7HOhiO7cU9H_|nh;V~Yj>F@gw)mA-KGg4 zb+vYnX+lU{t=(&y5K>ob_n9Vy)YaPkrU@Z+wf2B%LKvVg?7P8(rU@Z+?a+rz6GH0R zp%0rTgw(Y|A2Ce`scVNmYMKyI*A9KmG$Ev}9s0OwLP%XZ^a<01kh*s0lcotFb?wln zOcO%rz8gGknh;V~YtNV_gw)mAv!)3lb+z^{(}a+^TKl(YLP%Y$J!hH_QdeuwnUNub!sjIcuOcO%tYVCE? zgpj&gd&4v#q^{Q9G))MptF^aG6GG~0?QPS9kh)rX$21{??z_RerU@Z+wf3HALP%Y$ zy>FTjQdesqm?nhO)!K)q2_bd0_K|5qNL{UcY?=^KS8Jb`CWO@0+NY)oA$7I(nQ1}@ z-FJh}O%p=uYV8Ztgpj&g`_eQaq^{QfW10|BS8HFHCWO@0+J8+GLh5SmYtw{~x?20j zG$Ev}*1k1O2&t>J?@SXy=)N0#Z<-KN*AD%`G$Ev}9r~kbLP%XZ^e5AVkh*s0&!!0> zb?wk!OcO%t+M&OiCWO?rL;q)*5K`9;{mnEXq^=$MyJz8kh)r%$TT6OuGS_tO$e#0wMk49Lh5R5QqzQxx>}peG$Ev})+RSi2&t>JDNGZ> z0DW)Y4W=|r2&rp_PGy=9Qr8Zh+B6}gt{pm!X+lU{J9Jvpgpj&+=yawDA$9H0=}i+t z>e`_*m?nhOwL@n#O$e!Lht6c05JLCeU}n>Vkh)r%#WW$LuGVHXO$e#0wb@J)Lh5R5 zcGHBAx>}pVG$Ev}*5))#2&t>Jxl9v6>S}Fn(}a+^TARl-A%yO`!MvskA$7GjpJ_r! zU9HV;nh;V~YYUhrgw)mAf~E-}b+xvTX+lU{tu1Vt5K>obi{S(G$Ev})|N6&2&t>JrA-q;>S}En(}a+^T3gmMA*8O> zmNQKVsjIc+O%p=uYHbD6gb=##1}mB-gw)mAN~Q@Rb+xv#X+lU{t*v635K>obtC}W+ z)YaN*rU@Z+wYIuxLP%Y$tznuFQdethnkIzQ)!JI72_baf4c0bI2&rp_u49@IQr8Y$ z*EAudt{u9bX+lU{J9K^1gpj&+=mw?e`_jnI?qPwL>>HO$e!Lhi+n; z5JLCeU{lkCkh)si%rqgSuGTg;O$e#0wJl5&Lh5R5OVfmqx?0=HG$Ev}*0wfH2&t>J zZA=qF>S}FU(}a+^THDSvA%yO`!S<#JA$7I3gK0uYU9IhCnh;V~Yde`Hgw)mA&ZY?= zb+xvOX+lU{t?g=>5K>obyO}10)YaPVrU@Z+wYG<8LI~Y=gFQ_XLh5R5FVlpOx?0=Y zG$Ev}*7h+?2&t>JeN7WW>S}F2(}a+^THD_=A*8O>4lqp!sjIaEO%p=uYV9D?gb=## z1_zragw)mAA*Kl-b+vY=X+lU{tsQ2X5K>obhnpsZ)YaM%rU@Z+wRWUwLP%Y$9c7vj zQdet7n`% zT|4w7(}a+^cIe5b2_bdu&{IqkLh9O~rob zXPPF2)YaNqrU@Z+wRW~?LP%Y$onx91Qdeu|nkIzQ)!KQc2_bd0cD`vsNL{U6V44s@ z_ub$^(}a+^TD!E;daFsjIb1OcO%tYVA_fgpj&gyUa8pq^{O3H%$nstFUQdeu&nI?qP)!Ox@2_bd0 zc7tg`NL{VnXqpgGS8F$!CWO@0+TTnQLh5Sm@1_YMbl(kbHcbertF>E96GG~0?H{HI zA$7I(Pt$~ux>~!{G$Ev})^0OR2&t>J+f5Tf>T2x{(}a+^TD#LUA*8O>?lMgXq5E!d zw`oF1T|4w1(}a+^cIdsP2_bdu(ECgiLh9O~_nRh!)U`t&Fii-lYll8)nh;Xg4t>Zp zA*8My`mkw2NL@Sh5z~Yay6*;$nkIzQ)!JjG2_bd0_PA+6NL{TxVVV$9S8Gq2CWO@0 z+Eb|eDG$Ev})?PAA2&t>JmrWBw>T2y3(}a+^T6@(rA*8O>UNcPyq5E#| zx@kg4U9G)gnh;V~Yj2t+gw)mATc!yib+z`kX+lU{t-WKK5K>ob@0uor)YaO1rU@Z+ zwf4SgLP%Y$ePEgpLigR^L(_zix?20lG$Ev});=~(2&t>JPfQa+>T2y%(}a+^TKmj2 zA*8O>J~vGWsjIawOcO%tYVAwYgpj&g`;Tct7@+^?yTMnc2_bdu(Epkygw(Y|zcx(> zscVORW10|B*AD&GG$Ev}9r~SVLP%XZ^n25Ukh*s052gtrb?wj}O%p=u+Mz$0CWO#^ zH~85!A*8O>elbl5sjIbLO%p=uYVCif2_bd0_M2%!NL{V{ZkiBMS8IQmCWO@0+CV$o z_uqd$o4Q&X*fb%euGR)IO$ed;ZZN26LP%Y$4Q84UQdet(nU9Amgnh-+w-C%grgpj&g8^JUoq^{OR zG))MptF@6#6GG~0ZDiAgkh)qM#WW$LuGU61O$e#0wb4uyLh5R5bkl^8x>_5I2_bd0HkN5ZNL{UsZJH2LS8L;#CWO@0+PJ0(A$7Gjo@qizU9F98nh;V~YZI6z zgw)mAgr*50b+tB;X+j9ycY}#d6GH0Rp_7;rZY_lsjIc= zO%p=uYHbG7gpj&go6$5Oq^{OxGEE4ntF@U;6GG~0Z5Gpnkh)r%)ifcbuGVHVO$ed; zZZNxPLP%Y$&0(4lQdetpnkIzQ)!JO92_bd0Hn(X)NL{VXW10|BS8MZ{CWO@0+I*%7 zA$7GjziC29U9Bx(nh-+w-C#k}gpj&gTgWsaq^{N$HcbertF=W;6GG~0ZBf&Nkh)r1 z%rqgSuGSVeO$e#0wIxgwLh5R5Nz;Uox>{SxG$DlUyTQ_?2_bd0wv1^)NL{ThYnl*J zS8L0eCWO@0+VZ9eA$7I3f@wlXU9GKXnh;V~Yb%*1gw)mA%BBe+b+xvNX+rpaecOSr z&+*rPpRH<|5K`9;UClHhq^=#hx@kg4T|0CQ(}a+^cIcX>2_bdu(6vkxLh9O~Ynvv7 z)U`v`F--`mYlp6Dnh;Xg4qeYQA%uRvT3g>VA*8O>HZV;HsjIaOO%p=uYHcIagpj&g z+t@TAq^{OBF--`mtF=u{6GG~0Z8Ot^kh)si+%zGiuGY3NO$ebsuhzCSO$e#0wXIAO zLh5R5Ytw{~x?0=DG$Ev}*0wcG2&t>J?MxFw>S}F!(}a+^THC=iA*8O>b~H^0sjIb} zOcO%rZ>zPPO%p=uYHb(Ogpj&g+toB7q^{O>GffDotF_%t6GG~0Z4c9gkh)si(=;KZ zuGaQ4O$e#0wY^OfLh5R5AJc>o`qyf0U(J156V_>T2yk z(}a+^T06)zA*8O>4mM2)sjIa^OcO%tYVAu7gpj&+=y9eAA$9H0<4qGn z>e`_vm?nhK?^kOlnkIzQ)!Ip>2_bd0cCu+gNL{U+Vwwob=b0vi z)YaPgrU@Z+wRVANLP%Y$U1*vRQdesinI?qP)!N0T2_bd0c8O_12>orfcByGXNL{U6 zW||OES8JD>CWO@0+7+e=A$7HOrD;M)U9DYZnh;V~Ygd~lgw)mAHKqw6b+vY_X+lU{ ztzBoD5JLZ2tzB=L5K>obH<%`b)YaOJrU@Z+wRV$fLP%Y${mnEXq^{QfZkiBMS8F$$ zCWO@0+AXFDA$7I(57UH@x?20EX+jvFFYLR)t)>Yfb?wmGOcO%t+M&0bCWO?rL+>z6 z2&rp_-f5Z;Qr8Z>%QPXRt{r-}X+lU{JMobPnafz(0w;}(ljBYuGXG1O$e#0wWm!JLh5Sm8PkN2x>|eIG$Ev}*8XLh5K>ob z|29nssjIc;OcO%tYVCQ`gpj&gd%-jzgzme+i>3)7b+z`AX+lU{t-WlT5K>obub3u; z)YaOnrU@Z+wf356LP%Y$y>6NiQdetlm?nhO)!Lh;2_bd0_LgZv2;Fysw@nj5>T2yB z(}a+^T6@-ZM=IsjId3O%p=uYV8Blgpj&g`_MEYq^{OJGEE4ntF@0!6GG~0 z?Gw|45W4RMpPD9w)U`uDGffDoYlnVrnh;Xg4*kM3A*8My`lV??NL@ShKc)#Gb?wlv zOcO%t+M)k7O$e!Lhkk9E5K`9;{l+vQgzme+x26dpb+z`LX+lU{t$lBr5K>obKbR(j z)YaOLrU@Z+wf2)~LP%Y${cM^LQdeugm?nhO)!MJ72_bd0_CM2v5W4RMznLb4)YaPW zrU@Z+wf2W;LP%Y$4YZ4W|NZB)sjIbtO%p=uYHbkHgpj&g8`Lx*q^{NmGffDotF^&R z6GG~0Z3xqZ5W4RMLz*Up)YaNhrU@Z+wKlYALP%Y$4P%-RQdeuknkIzQ)!J~T2_bd0 zHoR#}pTG$DlUyTOd62_bd0Hj`;WNL{VXY?=^KS8KDF zCWO@0+N`DtA$7Gjn`uHwU9HV-nh;V~Yjc<;gw)mAoTdpOb+tB^X+j9ycZ0c26GG~0 zZ64Evkh)r%*EAuduGZ!=O$e#0wfRjGLh5R50n>z#x>{S%G$Ev}))q2N2&t>Jg-sJe z>S}Ef(}WPZ?*@ySCWO@0+G3^&A$7I3xM@O2U9Bx)nh;V~YfG9Ygw)mAQl<$Zb+xv% zX+lU{tu14k5K>ob%bF&H)YaN@rU@Z*-wl>GO$e!Lhpu3n5K`9;UC}flq^=#hl4(Ln zT|0DT(}a+^cIYam2_bdu&{a(nLh9O~tC=Q*)U`ubH%$nsYlp63nh-+w-C#}Agpj&g zTgx;dq^{Q1HcbertF?7Z6GG~0ZC%rZkh)r1&om*VuGZE!O$e#0wGB)YLh5R5L(_zi zx?0=FG$DlUyTQh$2_bd0wuxy%NL{UMYMKyIS8JP@CWO@0+UBMSA$7I3g=s=aU9D|t znh;V~Yg?Hngw)mA)}{#|b+xvQX+j9ycY|$B6GG~0Z9CJ1kh)si-ZUYkuGV%iO$e#0 zwH-|pLh5R5C)0$Gx?0=WG$Ev})^;&X2&t>JT}=~0>S}E_(}WPZ?*_Y@CWO@0+8(9} zA$7I3r)fe+U9Ih9nh;V~YkQj}gw)mAKBfsFb+xvyX+lU{t?g%;5K>ob`obCz>XN)YaNarU@Z+wRW;;LP%Y$ono30LigR^RMUizx>`HU zG$Ev})=oD~2&t>JGfWdg>T2yw(}a+^T06@$A*8O>&NfX5sjIbfOcO%tYVBOpgpj&g zJI^#Bgzme+`KAdWb+vYZX+lU{tzBrE5K>ob7nvr6)YaO>rU@Z+wRVYVLP%Y$U22*T zQdeu2nI?qP)!OBz2_bd0c7T2yO(}a+^TD#gbA*8O>t}#srsjIbX zO%p=uYVA7Hgpj&gyWTV*q^{O(Fii-ltF;?V6GG~0?IzQN5W4RMe=|)8scVP+-83Pj zt{r-_X+lU{JM%QdevDnkIzQ)!Kcg2_bd0cE4#t zNL{TxV44t8S8ETNCWO@0+C!!ZA#~pj9yUz~sjIa|OcO%tYVA?egpj&gd(1Q;q^{N; zH%$nstFC5JZqW|QdevLGEE4n ztF?cdCWO@0+H|e7G$Ev}*4{Qv2&t>J zcT5vP>T2y>(}a+^T6@nlAq>!e^xfcn(}a+^cIXGD2_bdu&<{-$Lh9O~ADJeE)U`uD zHcberYlnVfnh;Xg4*k?LA*8My`k84$NL@ShbJK*7x_0OnrU@Z*-wnPrO$e#0wf~qV zgw)mASEdOeb+z_i(}a+^TKn2GA*8O>zA;S*sjIbbO%p=uYVAAIgpj&g``$Dmq^{O} zFii-d`)=@~X+lU{t^H)05K>obKbt0m)YaNArU@Z+wf3uNLP%Y${m(QZq^{O}GffDo ztF_-v6GG~0?GMw0kh)qMXjl9G`_E@X_uXJ%(}a+^S{uYPA*8O>1~p9xsjIcYOcO%t zYHe`Sgpj&g8^Sapq^{P6G))MptF@s_6GG~0ZD`Ykkh)qM#xx;>?z_RTrU@Z+wKkk- zLP%Y$4R4wdQdesum?nhO)!K-r2_bd0Hj-&VNL{UsY?=^KS8Jn~CWO@0+Nh=pA$7Gj znrT7^-FJi0O%p=u+M#2ZCWO?rL&r2t2&rp_j%Ate`_bm?nhKeK(lUG$Ev})+RDd2&t>JiA@ti>S}Eg(}a+^ zTAS1~A*8O>CNoV4sjIcgO%p=uYHbSBgpj&go6ob)0!rP)YaN_rU@Z+wKlzJLP%Y$&0v}kQdes;nkIzQ)!Iy^2_bd0HnV9$NL{VX zVww;__uXJt(}a+^TAR%@A*8O>W;aa;sjIa)OcO%tYHd!_gpj&go69sIq^{QHHcber ztF?Jd6GG~0ZC=xakh)r%&om)~?z_SKrU@Z+wYGq1LP%Y$Eohn$QdesWnI?qP)!M?Q z2_bd0wuos$NL{ThYMKyIS8I!zCWO@0+Tx}OA$7I3glR$;pbva|j=%oZS=Hb+xvJX+lU{ zt*vRA5K>obYndj5)YaPBrU@Z+wYH9FLJ0j;wYIKlLP%Y$t!J7LQdev1nob+n6SV)YaOyrU@Z+wYHsULP%Y$ZEuC;%scVNGY?=^K*A6|zG$DlkxLP~Z zG$Ev})($gG2&t>J!%Y)H>T2x>(}a+^T07D-A*8O>jxtRMsjIc4O%p=uYV8=)gpj&g zJJvKIq^{PEGffDgzpB=bH%$nstF;qM6GG~0?L^arkh)qs$uuFPuGUUAO$e#0wNp$J zLh5SmRMUizx>`HUG$Ev})=oD~2&t>JGfWdg=pU=KGffjh>T2yQ(}a+^T07e`A*8O> z&M{30sjIbfO%p=uYVADJgpj&gJKr=Rq^{O3Fii-ltF;SF6GG~0?IP2J5c-d5?PAk} zkh)sC#55tKuGTI!O$e#0waZKsLh5Sma?^y6x>~!!G$Ev})~+;72&t>Jt4tF@>T2z3 z(}a+^TD!(HAq>zL_TAuG(}a+^cIb7c2_bdu(CbYTLh9O~H<%`b)U`wZkFL88x`nQz zHBNVTcMA%rCkYW10|CJ#3|a{b6chv%FhLO%M5Rob=b0vi)YaPgrU@Z*-wiG>O$e#0wF^xXLh5SmBGZJBx>~!~G$Ev})-Ewk2&t>J zOHC6(>T2yW(}a+^TD#mdA*8O>t}smqsjIasO%p=sz8hR+nh;V~Ygd~lgw)mAHKqw6 zb+vY_X+lU{tzBoD5K>ob*PAAU)YaMzrU@Z+wRWRvLP%Y$-DH{&Qdes?nJ+e{Ne>T2zF(}a+^TD!wEA*8O>?lesZsjIcSOcO%tYVB^*gpj&g zyT>#kq^{QPHBAVi`)+WbX+lU{JM@0jgpj&+=mVw+A$9H02Tc<~>e`_XnI?qPwL>2^ zO$e!LhdyGO5K`9;ebh7|q^=$Mm}x>tT|4w~(}WPZ?*>npCWO@0+LNXUA$7I(lxadp zU9CNBnh;V~YtNV_gw)mAv!)3lb+z`KX+lU{tvzp=5K>obFPJ8T)YaOHrU@Z*-wj?e zO$e#0wU|eHG$Ev})?PDB2&t>J*G&^b>T2x`(}a+^T6@zpA*8O> z-ZD)HsjIcOO%p=sz8kz_nh;V~YwwySgw)mAd!`8?b+z`sX+lU{t$kpc5K>oblk8yM z|2_EF)YaOgrU@Z+wKkb)LP%Y$O>UYHQdetJm?nhKeK(lWG$Ev})}}H|2&t>JsZA3? z>S}Eo(}a+^TAS81A*8O>rZY_lsjIc=O%p=uYHbG7gpj&go6$5Oq^{OxGEE3WeL>$1 zW;RU-scVPMVww}phG$Ev}*5)@&2&t>J1xyn{>S}F4(}a+^ zT3g68A*8O>7B)=?sjIa`OcO%tYHd-|gpj&gTg)^egzme+;-(29b+xvHX+lU{tu1Mq z5K>obOPMBw)YaP3rU@Z+wYH3DLP%Y$Eo+((QdeusnI?qP)!K(l6GG~0ZF$p#5W4RM zE0`vP)YaODO%p=uYV9MY2_bd0wxVf5NL{V1WSS6CS8FSqCWO@0+DAC5tYMlEQr8asq-jD(T|0D5(}a+^ zcIc-}6GH0Rp`SKQ2&rp_e#SH*q^=#hmT5vrT|4x%rU@Z+?aJbxjjO>S}F0(}a+^TKke|LP%Y$t#6tT zQdesmm?nhO)!LU$6GG^|8+^qyA*8O>zG|8fQdetVGffDotF^D2CWO@0+BZxSLh5R5 zL(_zix?0=FG$Ev});2ax2&t>JO-vI)>T2zqrU@Z*-wnQHnh;V~Yu`3a2&t>J@0ccp z)YaOirU@Z+wYHgQLP%Y$ZEl(nQdetRm?nhO)!LS(2_bd0wv}l@NL{UMZJH25_ub&T zrU@Z+we~&Jgpj&g+r~5@q^{PsHBAVqtF`S+6GG~0ZF|#%kh)s?zG*^8U9J7VG$Ev} z)_!Q35K>obKQc`SL;XPC4SsBz5K`9;-N7^=q^=#hqiI4&T|4wArU@Z+?a-f^CWO?r zLw7Pw2&rp_?rfS6Qr8asnQ1~uT|4yWrU@Z+?a*CJ6GG^|8|-SD5K>obzc5V*sjIc! zOcO%tYHfGZgpj&g`=x0@NL{V{$}}OQuGW5Snh;V~YkQa`gw)mAo~8*Qb+xvaX+j9y zcZ1)UCWO@0+HXx0Lh5Smccuv;b+z_;(}a+^TKj`(LP%Y${n0cbq^{QXHcbertF?Vh z6GG~0?N6o&A$7I(XVZiby6*=2nkIzQ)!JW76GG~0Z9mh5kh)si-!vhluGao)nh;V~ zYkxCM2&t>J156V_>T2yk(}a+^TKl_cLP%Y$9b}piLigR^AEpT*b+z_S(}a+^TKku2 zLP%Y$9c-EqQdet-m?nhO)!Lz^2_bd0c9>~GNL{TRZkiBMS8M+^O$e#0wf~qVgwTCA z_^)X~NL@Sh2-Ad+x_0Q1rU@Z+?a-r46GH0Rp+}o0gw(Y||7V&IQr8YW#xx26GG~0?KIPbkh)qs-83PjuGY>lO$e#0wKGiC5oMoC2Qdetdn~!&G$Ev})~+>82%-CKaGhyFNL{U6Z<-KNS8F$zCWO@0+Kr|OA$7HOlW9UoU9H`0 znh;V~Yqyvtgw)mAt)>Yfb+vYzX+lU{t=(>#5Qh4Lz8l9{dscVNmV44t8*A9KqG$DlU zyTL=I2_bd0_ONL}NL{TxVwwF|e5G$Ev})?PME2&t>JS4T2y((}WPZ?*^}#CWO@0+UuqXA$7I(hG{}b zU9G)onh;V~Yj2q*gw)mA+olO2b+z`6X+lU{t-WiS5K>ob@0liq)YaPirU@Z*-wi%6 zO$e#0wMllg@BbcrZ0c%lQqzQxx>}peG$Ev})+RSi2&t>JDNGYW>S}FD(}a+^TARu= zA*8O>rZ!CosjIbVOcO%rz8g$ynh;Xg4xP?4A*8MyI=yK^NL@R02GfL)x_0P{rU@Z+ z?a-M_6GH0Rp);E%gw(Y|XE99(scVPMYMKyI*AAV{G$DlUyTRbCWO@0+T5lIA$7Gjk7+_kU9HV)nh;V~Yx9{Vgw)mA{H6&Zb+xvDX+j9y zcY_5@6GG~0Z6VWykh)r1*fb%euGSVYO$e#0wM9)6Lh5R5G1G*Qx>{S@G$Ev})|N0$ z2&t>JB~24T>S}E%(}WPZ?*>boCWO@0+A^jIA$7I3tZ70>U9Bx=nh;V~YacRA2&t>J zS}ET(}a+^TKlkRLP%Y$eZ({&q^{OhG))Mh`);t3X+lU{t*vaD5K>obA2m$~ zsjIb*nI?qP)!N5R6GG~0ZH#F`NL{UsHBAVqtF>{a2_bd0Hr_NLq^{N`m?nh(ug~7@ zo-w2U-)9p|6GH0Rp{tlCgw(Y|S2axtscVO>W||OE*A89XG$Ev}9r_8=gpj&+=o+R8 zA$9H0Pnsr#)U`v`G))MpYlnWyG$Dk3q+0v5X+lU{t$oHcA*8O>)-p{9sjIcmnkIzQ z)!OGw6GG~0?enGyA$7I(1=EC(x>{S?G$Ev}*1l+(5K>ob>zF2l(9cwB>zXEn)YaO0 zrU@Z+we}^`gpj&gTi-Mxq^{OBFii-ltFob-!V-HsjIb3O%p=scdE6`OcO%tYHf4Vgpj&g+rl&JZA}wG=zGSFZiDSi6GH0R zq1&4#gw(Y|zi*llQr8asfoVcWT|4xLrU@Z+?a&{YCWO?rLw{_V5K`9;-N7^=q^=#h zqiI4&T|4wArU@bRBh}hZO%p=uYHcUegpj&g+u1ZBq^{O}W||OES8G2vO$e#0wOvdT zLh5R5SJQ-$x?1~%X+lU{t?g!-5K>obyPGD2(9cwBzcftT2zGrU@Z+wf1|{gb@0bYV8lE z2_bd0_D9o%kh)si+cY7huGaQ3O$e#0wLh6Agw)mApG^}&>S}FY(}a+^TKkJ>LP%Y$ z?Pr=0QdevHnJf0!nO)YaNQO%p=uYVBX92_bd0cCcwe80x+IZg7ZcLP%XZ^ib1;kh*s0VWtTo zb?wl@O%p=u+M)k8O$e!LhyKSjA*8My`d`z8kh*s05vB{%4vHQdeuom?nhO)!MP92_bd0cARNKNL{TRZ<-KNS8FGjCWO@0+KHwK zA$7HOl4(LnU9FvLnh-+w-QX0{gpj&gJJmEHq^{OZGffDotF_Zj6GG~0?F`d|kh)qs z(=;KZuGY>nO$e#0wX;nVLh5Sm9Mgo5x>`HeG$DlUyTN&;2_bd0cD`vsNL{U6V44t8 zS8ErVCWO@0+C`=bA$7HOv1vj`U9DYWnh;V~YnPfPgw)mAWu^%sb+vZ6X+j9ycY`ZT z6GG~0?Ml;xkh)sC$}}OQuGX$LO$e#0wQEchLh5SmTGND(x>~!=G$Ev})~+{A2&t>J z8%z^I>T2yq(}WPZ?*=!SCWO?rLvJ=s2&rp_-eQ^%Qr8Z>)ifcbt{r-tX+lU{JM?zb zgpj&+=pCjBA$9H0J53Wp>e``qnI?qPwL|YVO$ed;Zg7ujLP%Y$-D{c|eQG$DlUyTJ>l2_bd0_M&M*NL{VHWSS6CS8FeuCWO@0+AF3BA$7I(s%b(< zU9G)lnh;V~YpR^%b+z`UX+j9ycZ0V~6GG~0?QPS9kh)rX$21|NuGZc) zO$e#0wf9UDLh5Smeba=Hx?20dG$Ev})+QM&l{G&Y`4=IiuGS_sO$e#0waH8q!cZUA zcZ11I6GH0Rp;MS9gw(Y|r!-9nscVN$WttFD*AAW9G$EuOydC`Sv1Xclo@q=ILh9O~ z)0!rP)U`vWGffDoYllv6nh;Xg4xPa?A%yO`!HlK}A$7GjlW9UoU9HV*nh;V~YqOXp zgw)mAtfmPe_2BKWwb@J)Lh5R5cGHBAx>}pVG$Ev}*5))#2&t>Jxl9v6=)N1wZJH2L zS8MZ_CWO@0+PtO-A$7GjpJ_r!U9HV;nh;VC-VR$^z%(JGuGSVbO$e#0wS`O*Lh5R5 zVbg?=x>{SrG$DlUyTPKS2_bd0wwP%`NL{ThZkiBMS8Gd{CWO@0+LERTA@$(xu(hR3 z6GG~0ZE4elkh)r1#xxC5e8@B*q^{PMH%$nstF;wO6GG~0 z?Zc)CA$7I(5z~Z_dhmAG+KQ$LA$7I3l4(LnU9GKbnh;V~YacaD2&t>JkC`Tf(0w=f zxM@O2T|0D)X+lU{J9MmRLP%XZbew5INL@R0ylFy6T|0DwX+lU{J9MIHLP%XZbQRNt zkh*s0s-_7cb?wmAOcO%rz8kD=nh;V~Yo9Pp2&t>JHB1vi>T2zirU@Z+wYH{dLP%Y$ zeabW;q^{OJZJH2LS8Ja!O$e#0wY5wWLh5Smv!)3lbl(j=XPOXFS8Ja)O$e#0wJ(?^ zgw)mA+NKF1b+z_I(}a+^T3g37A*8O>)-_ECsjId1OcO%tYVAv=2_bd0w!UdX2;Fys z4NMb4>T2!FrU@Z+we}U$gpj&g`>JU|NL{Uc%`_pTuGYS8nh;V~Yu_+U2&t>J4NVh5 z>S}Ex(}a+^THDw(A%yO`!6v2&A$7I(P1A&sx?1~|X+lU{t$o`xA*8O>zGIpYQdeu6 znkIzQ)!JsJ2_bd0wz+9SNL{UMVVV$9S8H3ECWN8B?w&D&E%pEY@_+vu@U2V}Lh9O~ zTbm|?)U`vuYnl*J*AD%jX+lU{J9HbKB6GG~0 zZCBHTkh)s?g=s=aU9IhAnh;VC-VR&a-83PjuGW5Onh;V~Yris02&t>JUz;X`)YaM^ zrU@bRD`Q4m+tV~5q^{QXGEE4ntF_;lCWO@0+HXx0Lh5Smccuv;_2BKWwcnd2gw)mA zA50TM>T2zerU@Z+wYIluLP%Y$?PHn{LccR+w6#B(CWO@0+Mi7mLh5R5U(obe=|)8sjIaEOcO%tYVAPNgb=##27fnA z2&rp_9%PyjQr8ashiO7cT|4xjrU@Z+?a+UjCWO?rLk~7h2&rp_9%7mhQr8YW)HETa zt{r-qX+lU{JM?hVgb=##2LCoq2&t>J|ClC()YaO5O%p=uYV8Qqgpj&gJJK{Eq^{PE zGEE4ntF@y|6GG~0?SG~TA$7HOjA=qhU9BB!nh-+w-QYOWgpj&gJKi)Qq^{OZFii-l ztF;qN6GG~0?IhELkh)qs*)$=fuGUU5O$e#0wNp(KLh5SmG}DBTx>`HkG$DlUyTKWz z2_bd0cBW}UNL{U+WttFDS8HdRCWO@0+Bv2PA$7HOu4zI@U9FvGnh;V~Yv-FLgw)mA z1*Qohb+vY(X+j9ycY}*e6GG~0?PAk}kh)sC#55tKuGTI!O$e#0waZKsLh5Sma?^y6 zx>~!!G$Ev})~+;72&t>Jt4tF@>T2z3(}Xb8&)qX-bcbGJnh;Xg4!zbiA*8MydYx%P zNL@ShdeelEx_0OdrU@bS;O%gS-e{T-Qr8Z>$uuFPt{r-_X+lU{JMJJ4_Qo>T2yy(}a+^TD!|MA*3F>9kzD2X+lU{t=(gq z5K>ob_nIbz)YaO3rU@Z+wRXR0LJ0lLn9T2z2(}a+^T6@McA*8O>o;6JfsjIc;OcO%t!P{YL&zmNM)YaMxrU@Z+wf3TELP%Y$ zy=0mYQdes)ndhmAG z+MA{cA$7I(mT5vrU9G)snh;V~YwwsQgw)mAyQT>tbl(l$GffDoYlpsXnh;Xg4*kG1 zA*8MyI>}%i_V<4eJ~nmj&`C`bLh9O~lbI%j)U`t=H%$nsYllu@nh;Xg4xQ38A*8My zI+bZc2;FyssZA3?>S}Eo(}a+^TAS81A*8O>rZY_lsjIc=O%p=u!Q0{QYcrT8gw)mA zjHU@8b+tB=X+lU{t<7wj5K>obvzR7?(0w}plG$EuOydAbSmuW&sU9HV+nh;V~Yx9^Ugw)mAyru~ub+tC1X+j9ycZ2y&6GG~0 zZ2{ASkh)r1&@>^WuGSVZO$e#0wS`R+Lh8ZWVQY(+CWO@0+M=cjA$7I3m}x>tU9Bx{ znh;V~YfG3WgwTCASkg2hq^{PMGEE4ntF@&~6GG~0Z5h*qkh)r1)-)lc9=sj4ww!4~ zNL{Uc$TT6OuGW?}O$e#0wG~VgLh5Sm!=?#gsJDAy%;4wi|NZ6ve!sy-OcO%t+Mz3& zCWO?rLsv3Q2&rp_u56kRQr8assA)n-Js2Cq);?yM5K`9;{kUmDNL@R0jA=qhT|0EF zX+lU{J9M0BLJ0jtwKm=~A*8O>CYUCK)YaNV(}a+^T3f|5A*8O>Ry9ossjIcsOcO%t zYHfAXgpj&g`-EviNL{V1VVV$9S8Ja%O$ec1sMgjrO$e#0wNIHQgw)mAr%e+=>T2yX zrU@Z+wYHXNLP%Y$ebzJ~q^{OJXPOXFS8Ja)O$e#0wJ(?^gw)mA+NKF1^c&UM7flmF z>S}Er(}a+^T3gpNA*8O>)-z2AsjIawnI?qP)!O=|2_bd0wt;CvNL{Uc*)$=fuGYR{ znh;V~YhN`@2%$fy*1l$%5K>obUpGw%sjIbbm?nhO)!K%p2_bd0wvlNe`{3nI?qP zwL>>IO$e!Lhi+k-5K<4`4!6OUrU@Z+?a-}E6GH0RpJZA}wG>S}E}(}a+^THD?zHgckQV-q^Tl;}&LP%Y${m?Wa zq^{O}WSS6CS8G2uO$e#0wH-_oLg*L9j<&X=X+lU{t^LF_A*8O>erlQ!Qdes`nI?qP z)!NRc2_g01?Xb0S}Fw(}a+^TKlDGLP%Y${mL{Uq^{O}ZJH2L58e)2+ru;=q^{QXG))MptF^sM6GG~0 z?Kh?gA$7I(ThoLP`h&5ft^Lk4A*8O>es7u(Qdet#Fii-ltF=FxCWO@0+TNxKA@$(x zu(f?m6GG~0?N6o&A$7I(XVZj`x?0=UG$Ev}*8XCe5Qcj1z8maknh;Xg4&C20A*8My z`d8D0kh*s0-%Jxi>e`_Pm?nhOwL=dyO$e!LhyL9(A*8MydXQ;CNL@ShAEpT*b?wl9 znkIzMeK+`*X+lU{tsQKd5K>obhnOaW)YaOdrU@Z+wRV_kLP%Y$9d4QsQdevLHcber ztF`}_CWO@0+J8+GLh5Sm2-AcRy6*-@nkIzQ)!I>}2_bd0cC=|iNL{V{&om*VuGWq* zO$e#0wPQ^aLh5SmIMalXx>`HlG$Ev})=n@@2&t>J6HOCB=)N1AWSS6CS8FGmCWO@0 z+9{?9A$7HOs%b(5K>obXPYL3 z(0w;J$21|NuGY>qO$e#0wew69Lh5SmeA9%Gx>~!yG$Ev})-E(n2&t>Ji%b(j>T2y` z(}a+^TD!zFA*8O>E;UUEp&uAKxJ+f5Tf>T2x{ z(}a+^TD#LUA%uQm>}YFunI?qP)!N;r2_bd0c8_U7NL{VnYnl*JS8Ml~CWO?3x5L)% zH%$nstF;GA6GG~0?LpIokh)rX$TT6OuGStlO$edi7(3e9Bc=%obkDDfh)YaM(rU@bS;O(%rCruMV>T2yN(}a+^T6@|wA*8O>o-s`bsjIbTO%p=s z55|tR_MB-#NL{TxZ<-KNS8FerCWO@0+KZ+MA$7I(l4(LnJ$O58?Pb%1kh)rX#WW$L zuGU^PO$e#0wbx7&Lh5Smb<>0})W`MR;0@D+kh*s0o2CgNb?wl%OcO%t+M#coCWO?r zL*Fq?2&rp_zH6EgQr8ZB&om*Vt{wWmX+lU{JM;t7gpj&+=p=(5OMn0O;A2Dg-C$DF zgpj&go6IyJq^{N`H%$nstF6u2&u=7{s}yTX+lU{t<7kf5K>obGnpoY)YaO|rU@Z+ zwKj`sLP$M$J8W%M(}a+^TAR%@A*8O>W;aa;sjIa)OcO%rz8lPGnh;Wt8*Oba(}a+^ zTASN6A*8O><}pnOsjIblO%p=uYHdE#gphjhcG%kdrU@Z+wYGq1LP%Y$Eohn$QdesW znI?qLeK%OxG$EuOH`>}FrU@Z+wYI2fLP%Y$EoPb!Qdet>ne`_nGEE4nYlkjx znh;Xg4qd@CA*3FB;XAD5!=?!#b?wlPm?nhOwL@1lO$e!LhpuFr5K`9;UD-4tgzme+ zM@T2y{rU@Z+wf1q-gpj&g8)KRfQdetZO%p=uYHgfpLP%Y$jWRxwQoq5E#Is%b(S}Eb(}a+^TKlAF zLP%Y$t!bJNQdeuAGEE4ntF=#?CWO@0+Gk7?Lg>C5tYw-IQdeuAHBAVqtF_OWCWO@0 z+UHFZLh5Sm3#JJnb+xv(X+lU{t$oonA*8O>)-g>8sjIbhO%p=uYHdB!gb=##246Bw z2&t>J^-U8(>S}ER(}a+^TKlqTLP%Y$eZ@2(q^{P!YMKyIS8HE0O$e#0wXd5dgw)mA zH%t>k>S}F6(}Xb8*Y(|CBh!SCdfe!;*w{27q^=#hiD^PeT|4xfrU@Z+?a*(TCWO?r zL%(gB5K<4`4wuDuOcO%t+M%18CWO?rLpL)`2&rp_Zf=?oLigQZ3)6& z)YaNnrU@Z+wYIfsLP%Y$eb+Q0q^{P!XPOXF58e)2+r~5@q^{PsHBAVqtF`S+6GG~0 zZF|#%5W4RM-#1MNsmG1B_5;&|kh)s?p=m-$U9J7dG$Ev})_!c75K>obJD4Vf)PuLf z)^;>a2&t>JpO_|u)YaNgO%p=uYHcUegb=##20NQ3gw*3kTl<-5LP%Y${oFJmq^{O> zF--`mtF>KC6GG~0?H8sAA@$(xu(jPx6GG~0ZFkdzkh)s?rD;M)U9J7fG$DlUyTPwb z6GG~7qpj^>nh;V~YkQg|gw)mAUZx2lb+z^z(}a+^TKlbOLP$M$J8bQDrU@Z+wf1|{ zgpj&g`-5phNL{V{(KI21?z_R>rU@Z+?a+Np6GH0Rp?@+>2&rp_{@FAkq^=#huW3R^ zT|4wIrU@Z+?a=*96GH0Rq5GRAgw(Y||7w~LQr8asn`uG_-FJfnOcO%tYVAPNgpj&g z`@3mENL{TRWSS6CS8M+;O$e#0wSSr>gw)mAzf2QC>T2y^(}a+^T06uvA*8O>4mC{( zq5E!dm}x>tU9BB%nh;V~YyUP)2&t>J|ClC()YaO5O%p=uYV8Qqgpj&gJJK{Eq^{PE zGEE4ntF@y|6GG~0?SG~TA#~pjjxkLLsjIbPO%p=uYVA1Fgpj&gJKi)Qq^{OZFii-l ztF;qN6GG~0?IhELkh)qs*)$=fuGUU5O$e#0wNp(KLg>C5oMxI3QdeuIne``Km?nhOwL`BoO$ed;Zg7=pLP$Msw6&{E6GG~0?HbdBkh)sC)-)lc zuGX$IO$e#0wd+k2Lh8ZWVQV*-CWO@0+Kr|OA$7HOlW9UoU9H`0nh-+w-QX6}gphjN zXlu8cCWO@0+HIx@A$7HOyJI^gw%t#!`ALHO$e#0wYyCdLh5Sm z9@B)7x>~!}G$DlUyTN^?2_f~k(bn!aO$e#0wFgWSLh5SmLDPhgx>|e4G$Ev})*d!Z z2&o5ehpjzgnh;V~Ymb^Hgw)mAW2Olqb+z`mX+j9ycY`NP6GG~7qpdw@nh;V~YfqUb zgw)mA)20a_b+z`4X+lU{tvzd+5K<4`4qJQ9G$Ev})}A*_2&t>J7fcgE>T2yp(}WPZ z?*=cKCWO?rLti#c2&rp_zG9jXQr8ZB)ifcbt{wWCX+lU{JM?wagpj&+=o_X9A$9H0 zH%${l>e``inI?qPwL{-FO$ed;Zt#w2LP%Y$y=$5fQdev5nI?qP)!O@}2_bd0_JL_a zNL{T>GU%tj|9kMUsjIa~O%p=uYHc#pgpj&go7^-Zq^{PcFii-d`))9$X+lUne)P}K zsZ0|>>S}Fj(}a+^TARi+A*8O>rZr6nsjIc=OcO%t!Q0`Vq0^ftgw)mA45kSob+tC5 zX+lU{t<7Yb5JLCeU}n>Vkb3-RYqOXpgw)mAtfmPeb+tB|X+lU{t<7$l5K>obbC@QC z)PuLf*5))#2&t>Jxl9v6>S}Fn(}a+^TARl-A%yO`!MvskA@%st*5)%!2&t>J`Ari- z>S}EP(}a+^T3gUGA*8O>7BWo;sRwU|tu1Vt5K>obikh*s0(xwR^b?wk)OcO%t!IyBu z)|NF*2&rp_E@zq$Qr8askZD3lT|0Dn(}WQEk!o!P(}a+^TKlkRLP%Y$eZ({&q^{Oh zG))MptF@I(6GG~0ZDrGhkh)s?sA)n-U9El0G$Ev});?~U5K>obV@wl5=x3_6v8D+j zb+tCmG$Ev}*2bGAgw)mA1k;3&x>}oPnh;V~Ypa+hgw)mAs-_7cb+xvdX+lU{t*vgF z5K>obpD;}bpJ&zdHL)YaPOOcO%tYVGr;2_f`5)!G+K6GG~0ZEe$pkh)s?qG>`%U9GKS znh;V~YwMaOgw)mAdZq~>b+z^-(}a+^T3g>VA*8O>HZV;HsjIawni#RH z2_g0PQTJtxOX_>S}Fk(}WQEnQHC3rU@bS_|ewB zXPOXFS8LmtCWO@0+P0<%A$7I3ooPZyU9D|znh;VC-VR&)zG*^8U9J7VG$Ev})_!Q3 z5K>obKQc`SpJolFx# z>cQJ#Ydf1Jgw)mA&rB0S>T2!hrU@Z+wYH0CLJ0j%wYIBiLP$M+w6$NDCWO@0+HR%^ zA$7I3yJobdzvPM)YaNvrU_xF z_vyRAZ%h+H>e`{dHBAVqYlr^MG$Ev}9r}CIgpj&+=pRfILh9O~e>6=9scVPsZJH2L z*ACssG$Ev}9r`EJgpj&+=$}m!Lg>C5>}#43Qdet#F--`mtF`@16GG~0ZGY2*kh)s? zt7$?=U9J7iG$Ev})($XD2&t>J15Fb`>T2!prU@Z+wRVtcLI~Y=gMXMNgw)mAKTQ)t z>T2y@rU@Z+wRW&+LP%Y$9b%dgQdet-nkIzQ)!JdE2_bd0cDQLmNL{V{+cY7huGaoz znh-+w-Qd5b2_bd0c7$m{NL{TRX_^pHS8GR^CWO@0+R>&7A$7I(KhuPex>`HNG$Ev} z){Zqz2&t>J<4hAm>T2zH(}WPZ?*=EBCWO@0+KHwKA$7HOl4(LnU9FvLnh;V~Yp0kd zgw)mAsip}bb+vYyX+lU{t(|U~5K>obXP730)YaOVrU@Z*-wn<(O$e#SkM7X3O%p=u z+M(x|CWO?rL(er$2&rp_o@bg6Qr8YW-!vhl9=sjy&~!|G$DlUyTNs)2_g0P(bldvO$e#0wHr(mLh5Sm zM$?3lx>~!*G$Ev})^0XU2&o5ehppXWnh;V~Yqy#vgw)mAZKeq!b+vZ8X+j9ycY`}j z6GH0oqpjU(nh;V~Yj>F@gw)mA-KGg4b+vYnX+lU{t=(&y5K<4`4qLm=G$Ev}*6ue= z2&t>J2TT(}>T2yl(}WPZ?*JM@T2yV(}a+^ zT6^3yA*3F>9k%v_X+lU{tvzX)5K>obPnjl!)YaP4rU_xFkMFy|Go}e4b?wk+O%p=u z+M&;xCWO?rL!UQI2&rp_zF?XVQr8ZB(KI2Xt{wW4X+lU{JM?AKgpj&+=qsiPA$9H0 zS4|T_=)N1gW||OES8K1ECWO@0+8d?`A$7I(rfEV*U9G)knh;V~Yj2w-gw)mAJEjRC zb+z`cX+lU{t-WWO5K>ob@0%us(0w=fz%(JGuGS_Q{7m%se-A!3b+tCBX+lU{txaZ{ z5K>oblba@l)YaM)rU@Z+wKk<`LP$M$JNy%PD$|6Jx>}psG$Ev})}}E{2%-CKFs*4q zNL{T>XPOXFPZ<4bZ+g>&kh)r%!89SHuGVHWO$e#0wV6y4Lh5R5X48a_dhmAG+AO9C zA$7Gjt7$?=U9HV#nh-+w-C%apgpj&go5M6Aq@FO^+MK2dA$7GjmuW&sU9HV+nh;V~ zYx9^Ugw)mAyru~u_2BKWwfRgFLh5R5e$#}Ix>{SnG$DlUyTO8{2_g0P(OMQVO$e!L zhc0ZI5K`9;UBomYq^=#hsA)n-T|0C!(}a+E@a4p?mc>mILh9O~OPD5v)U`vGG))Mp zYlkjnnh-+w-C$|cgpj&gTgEgYq^{PMHBAVqtF`4!6GG~0?L(#sA$7I3ylFy6U9GKP znh;V~YacdE2&t>JkC-Ne)YaOGrU@Z*-wjqWO$e#0wUtd1Lh5SmqoxTVb+z^}(}a+^ zTKl+ZLP%Y$jWJCKsjIcIrU@Z+wKmQ)A*8O>#+xRD)YaMq(}WPZ?*)-+8BsjIb5 znI?qLeK+{DX+lU{t$oHcA*8O>)-p{9sjIcmnkIzQ)!OGw6GG~0?enGyA$7I(1=EC( zx>{S?G$Ev}*1l+(5K>ob>zF2lp}xNF2J4z8gw(Y|*E3BBsV9ssi!Yfbgw(Y|*EdZF zscVOBV44t8*AD%%X+lU{JM=522_g01?QmIq)ifcbt{wU{(}a+^cIekl6GG^|8+^kw zA*8O>HZ)BLsV9uKwvlNS}FM(}WPZ?*^NhCWO@0+UBMSA@zjO*0wNB2&t>JElm?b>S}E((}a+^ zTHD$*A*8O>zH6EgQV-q^Tl=1ALP%Y$ZDX1cQdeu+nkIzMeK*+7G$Ev}*0wiI2&pHG zw)TC~gpj&g`+;dfNL{V{&@>^WuGW5Jnh;V~Yder}o&Qdeucm?nhO)!MG6 z2_g01?Xb09m?nhO)!J^R2_bd0w!3LU2;FysUz#R_)U`u@WttFD*AD%)X+lU{J9H1z zgpj&+=$@ttA$9H0y-X8A>e`{dF--`mYlr^UG$Ev}9r`=dgpj&+=C5{J}IK zq^{QfXqpgGS8IElCWO@0+CHWUA$7I(C)0$Gx?20QX+lU{t?g@?5K>obe=$u6sjId9 zOcO%tYHfehgb=##27fh82&t>JznLb4)YaMnrU@Z+wRWIsLP%Y${oOPnq^{NuGEE4n ztF?caCWO@0+CNPbLh5SmU#1Bmb+vY|X+j9ycY{Mr6GG~0?NHN%kh)qs%rqgSuGS7W zO$e#0wSSu?gw)mAe@qiX>T2!3rU@Z+wRVJQLP%Y$9ch{nQdet7nI?qLeK$DTG$Ev} z*8XRj5K>ob$CxIB)YaOtrU@Z+wRW6oLP%Y$9dDWtQdesym?nhO)!K=s2_bd0c9LmA zNL{U+Y?=^;`uV;aoMM^~Qr8YW)ifcbo-n#YPcuyjscVOxZkiBM*A6|yG$Ev}9eSo| zLP%XZ^eoeakb3ZTxI@o2O$e!Lhn{1a5K`9;J=ZiLgzme+d8P>=b+vZBX+lUnVYIai zOcO%tYVAVPgpj&gyT~*lq^{O3HcbertF=o^6GH02+hJ>$nkIzQ)!JpI2_bd0cDZRn z2;FysD@+qY>T2yu(}a+E!f0z(nI?qP)!Nmj2_bd0c8zI5NL{U6Ynl*JS8LaqCWO?3 zx5L)1H%$nstF;?U6GG~0?MBmt5W4RMH<>1c)YaO}rU@bSgwfV+F--`mtF>EA6GG~0 z?Kabdkh)sC-83PjuGa1_O$ez6Z-=ejX_^pHS8I2fCWO@0+TErJA#~pj?lDaWsjIbn zO%p=u38SsuXPOXFS8Mm1CWO@0+5@HuA$7I(plL!#U9CN2nh;VC-VR%P*fb%euGStg zO$e#0wMR`8Lg>C5JZ72@Qr8ZB+%zGit{wV>X+lU{JM>A@gpj&+=u@T%A$9H0r%e+= z>e`{tm?nhOwL_mZO$e!LhdyVT5K`9;ecm)7gzme+3#JJnb+z`QX+lU{t-WNL5K>ob zFPkQW)YaN6rU@Z+wf3rMLP%Y$y=IyaQdeuQnT2z6(}a+^T6@PdA*8O>-Zf1KsjId3OcO%tYVCc~gpj&g`@l3Iq^{N`8T>o_{ojL+ zOrZ7zisV9zpy*8z3LP%Y$O=X%8QdetJnW-v_%q5EzyqiI4&U9HVznh;V? z9Bpl8(}a+^TARf*A*8O>W;IO+sjIcwOcO%tYHfDYgphjhcG%h+rU@Z+wKk_|LP%Y$ z&1ISphI;!4#*F@Y&uy9zQr8Zh$21|No-q3Np4T)Xq^=!0pJ_r!T|0Ds(}a+^cIX18 z2_bdu&;?BsLh8XEjKkIzGEE4nYlkjunh;Xg4qe1FA%uRST3ggKA*8O>7Bfukh)s?m}x=?{YJI+anpp5x>_4!nh;V~Yhz6lLh5R5oM}QxU9F8bO$e#0 zwF#yPA$7Gj(KI2XuGUsDO$e#0wN*_MLh5R5HPeI;`h#k1b<>29x?1~$X+lU{t*v32 z5K>obpEOMfsjIa$O%p=uYVA{|2_bd0_G#0Ekh)s?jA=qhU9GKUnh;V~Yo9eu2%#Ss zJNotc=S&kq>e`{7H%$nsCyxHTzhIgWQr8Y$+cY7ht{wVC(}a+^cIY~$2_bdu&~;4{ zLh8ZW;Wk*$G$Ev}9r`8Hgpj&+==!D!A@mc~+6JZxA$7I(Wz&R^dg5qnUolMxsjIcG znkIzQ)!Nrg6GG~0?dzrqA$7I(4by~>dhmAG+J>eHA$7I3k!eCmU9D|wnh-+2P_1oZ znh;V~Yu_|Y2&pHIw)QR4gpj&g`?hI9NL{Uc$21|NuGTg+O$e#0warWuLh8ZWVQZV4 zCWO@0+7_k>A$7I3rD;M4{YJI6m1#mqU9D|xnh;V?9Bu8prU@Z+we~&Jgpj&g+r~5@ zq^{PsHBAVqtF`S+6GH02+hJ?ln6GG~0?FXg_A@m2;+7C?=Lh5SmN2UoO z^~BNEer%c$Qdes`m?nhO)!L4x2_bd0_7l^Dkh)s?scAw;J$O58Z70)&kh)si*)$=f zuGW5Lnh=J1pS~OX+%zGit{u9IX+lU{J9Jmmgpj&+=r2qYLh9O~yO}10)U`u*H%$ns zYlr^QG$Ev}9r`QNgpj&+=&wx^Lh9O~dzdDK(0w=9(=;KZuGaQ4O$e#0wcnT~gw)mA zZ%q?I>T2zGrU@Z+wf1|{gpj&g`-5phNL{V{(KI2XuGaQ8O$e#0wS7zzLg>C5{K+&S zq^{QfY?=^KS8My4CWO@0+Fwi)Lh5R5KhuPex?0=cG$Ev}*8Xam5K>obe=|)8sjIaE zOcO%tYVAPNgb=##27fnA2&t>JgG>`b>T2yDrU@Z+wf0Zbgpj&g`tU9BB%nh-+w-QeG*2_bd0_8-%Pkh)s?uW3R^U9BBq znh;V~Ye$+Ugw)mAQKktYb+vZ1X+lU{t^Ln5A*8O>jxkLLsjIbPO%p=sz8f58nh;Xg z4n5v9A*7x-x`HOG$Ev} z*3LCe2&t>J^Gp*$>cQJ#Yv-FLgw)mA1*Qohb+vY(X+j9ycY}*e6GG~0?PAk}kb2^1 zYnPZNgw)mArKSlXb+vYxX+lU{tzB-K5K>obSC}S*)PuLf)~+;72&t>Jt4tF@>T2z3 z(}WPZ?*`YHCWO@0+O?($A@#)3)~+*62&t>J>rE3v>T2x<(}a+^TD#FSA*8O>ZZb^> zsRwU|t=(*z5K>obx0oh`)YaOprU@Z*-wkdvO$e#0wcAY-Lh6a5t=(ao5K>obcbX=I z)YaNurU@Z+wRX2@LP%Y$-D8>%QV-q^Tf5gZA*8O>?lVmYsjId7O%uXUAK!O_2TT(} z>e`_XnkIzQwL>2=O$e!LhdykY5K`9;eZ({&q^=$MsA)n-T|4wK(}a+^cIe}#2_bdu z&?ih2Lh9O~Pnsr#(0w;}$}}OQuGXG5O$e#0wP#EdLh5SmS<{4&x>|eAG$Ev})}A*_ z2&t>J7fcgE>T2yp(}a+^T6@VfA*8O>UN%h#q5E#|ifKYfU9G)pnh;V~Yp!t}Ib+z_}X+lU{t-WcQ5K>obZ|eRG$Ev});=&z2&t>JNd`ZU{r%sAk4;^zO=_ADQdet}nI?qP)!O8y2_bd0Hicob3z#N^)YaO8rU@Z+wYHFHLP%Y$Eo_<)Qdet>m?nhO z)!L$_2_bd0wwP%`NL{ThZkiBMS8Gd{CWO#^H(1g%A*8O>mNHEUsjIc6O%p=uYHbT2!drU@Z+wKm2yA*8O>#+oLC z)YaNJ(}WPZ?*`*d6GG~0ZGve+NL{T>G))MptF={36GG~0ZB^5Rkh)r1%`_pTuGUsJ zO$e#0wNIEPgw)mA8m0*$b+z_M(}Xb8*Z19EP1A&sx_0QNOcO%t+M%B|O$e!18C@2i zF--`mYlp67nh;Xg4*jfYLP%XZ^mC>OA$9H0&zmNM)PuLfW$^{mgpj&+=-Q?UA#~pj zzG#{dQdev1m?nhO)!MqI2_f|=qphuHnh;V~YhN-=2&t>J^-U8(>S}ER(}a+^TKlqT zLP$M$J8bPMrU@Z+wf0rhgb=##246Ex2&t>JubU=>)YaNIOcO%tRYqIe&@>^WuGTg( zO$e#0wT(>^Lh5R56Vrr{x?20DX+lUncsp$ETc!yib+z_w(}WPZ?*`v7O$e#0wM|VE zLh5R5Gt-2SdX>@EHaATOsjIauOcO%tYHdr?gpj&g+sZT{q^{PsHcber2XBY1eb+Q0 zq^{P!XPOW~_uXI{(}a+^THDq%A*8O>wlhr#saF|oZF|#%kh)s?zG*^8U9J7VG$Ev} z)_!Q35K>obKQc`SsRwU|t^L?EA*8O>b}&r{q5E#IqiI4&T|4wArU@Z+?a-f^CWO?r zLw7Pw2&rp_?rfS6Qr8asnQ1~uT|4yWrU@Z+?a*CJ6GH0Rp}U$Ugw(Y|e_@&sLigQZ zH`9cWx?0=aG$Ev})_!T45K>obzcNh-sjIbLnA&NL{V{-ZUYkuGaownh;V~YkxFN2&t>Jy-gEB>S}Et z(}a+^TKkh}LP%Y${n<1jq^{QXHBAVqtF^zFCWO#^H`vcKA*8O>_BTxksjIcWnkIzQ z)!N@o6GG~0?Euq+kh)qs&@>^WuGao;nh;V~YX_Mogw)mAKTH!s>T2zurU@Z*-wpm{ znh;V~YX_Sqgw)mAA*Kl-b+vY=X+lU{tsQ2X5K>obhnpsZ)YaO*O%p=uYVAL!2_bd0 z_FvP4kh)qs!ZaZa_49o(}a+EmC+sgKhuPex_0O>rU@Z+ z?a*UQ6GH0Rp~smfgw(Y|k2g&SsRwU|JM;w8gpj&+=!vEYA#~pjPBKjhsjIb`HKG$Ev}*3L9d2&o5ehpnAunh;V~ zYiFA#gwTCAIL9<0q^{P^HBAVqtF`k?6GG}$Mq4}IG$Ev})-Etj2&t>J3r!P3>T2yG z(}a+^TD#aZA*3F>9kzCfX+lU{tzBxG5JLCe;4;&Mkh)sC+%zGiuGX$FO$e!18Ex%K z(}a+^TD!_LA*8O>t~N~wsjIbXOcO%tYVBIngphjhcG%i=rU@Z+wRXK}LI~Y=gBwf} zLh5SmM$?3lx>~!*G$Ev3Wwf=MO%p=uYV8)&gpj&gyVW!yq^{O(GffDotF_xr6GH02 z+hJ>Wm?nhO)!Ln=2_baf4el~c2&rp_-ffx?Qr8Z>$21|Nt{r->X+lU{JM=!&gpj&+ z=>4V%A$9H02TT(}>e`_XnkIzQwL>2=O$e!LhdykY5JLCe;1Sb=kh)rX)HETauGSti zO$e#0wZ}~pLh5Sm3Dbm-x>|eEG$Ev})}As=2&t>Jr%e+=>T2y7(}a+^T6@+sA%yO` z!E>ewA$7I(ylFy6U9G)fnh;V~YcHB6gw)mAOQs1Sb+z`gX+lU{t-WHJ5K>obubL)= z)YaN+rU@Z+wf4GcLI~Y=gEveQLh5SmP1A&sx>|e7G$Ev}*4{Qv2&t>JcT5vP>T2y> z(}a+^T6@nlA*8O>-ZxDMsjIaQOcO%tYHgCi=k@o04?Z?@-wh@;O$e#0waH8qLh5R5 za?^y6dezZwFokJCNL{T>X_^pHS8G$5CWO@0+SH~AA$7GjjcGziJ$O6Z2Gg1*gw)mA zbfyX6|Le22zh}(ouh{ga2_bdu&>2h{SnG$Ev}))q8P2&t>Jg-jDd z=x3_6g-sJe>S}Ef(}a+^T3ggKA*8O>7Bfu_4!nh;V~Yhz6lLh5R5oM}QxU9F8bO$e#0wF#yPA$7Gj(KI2XuGUsDO$edy z89VwF_Nt}{A$9H0)l3sY>e`{Jn{S`G$Ev});2Ir2&q>cZSBjZ2_bd0_7&5Fkh)s?s%b(ob8=EGC)YaN1rU@bSs-vxa(=;KZuGYR~ znh;V~Yu`3a2&t>J@0ccp)YaOirU@bS;O(%r%}f(Q>S}Fs(}WQEooa0h(}a+^THDez zA*8O>wlYl!saG9sZEMqnkh)s?u4zI@U9El3G$Ev}*0wQC2&t>JZA}wG>cQJ#YulM7 zgw)mA_NED8sQ2l+!S_uQLh9O~KQK)QscVP+&@>^Wt{wU#(}a+^cIb~y6GH0Rp*xr+ zgw(Y|cQj21scVP+#55tKt{wVQ(}a+^cIZx~2_baf4R$t72&t>JpP43v)YaP0O%p=u zYHb(Ogpj&g+toB7q^{O}VVV$9S8KbOCWO@0+U}+aA$7I(OVfmqx?1~{X+j9ycY|M> zCWO@0+8(9}A$7I3r)fe+U9Ih9nh;V~Yrio~2&t>J-{$`pGLigR^0Mmq!x>`HXG$Ev}*8Xmq5K>ob z2bm^>)YaNQOcO%tYVDt<2_bd0_Ak?fkh)qs*fb%euGS7QO$e#0wL?u4Lg>C59A=sj zQr8YW+%zGit{wVs(}a+E)zKaLAJc@8x_0P)O%p=u+M!37CWO?rLyt5~2&rp_9%Y&k zQV-q^cj(ck2_bdu(EphxgwTCAIL0&~q^{PEHBAVqtF_}y6GG}$M_W7IG$Ev})=n@@ z2&t>J6HOCB>T2yI(}a+^T07Y^A*3F>9kzCgX+lU{t(|I`5JLCe;55^Okh)qs-83Pj zuGY>lO$e!19c}GQ(}a+^T06@$A*8O>&NfX5sjIbfOcO%tYVBOpgphjhcG%i^rU@Z+ zwRXN~LI~Y=g9}U(Lh5SmLeqqhx>~!)G$Ev3b+omMO%p=uYV8u!gpj&gyVNuxq^{O3 zGffDotF_Bb6GH02+hJ>0m?nhO)!LP&2_baf4X!dx2&t>Jt4$L^>T2y8(}a+E)zQ|j zHBAVqtF`M)6GG~0?RwLMkh)sC!89SHuGVfeO$ez6Z-=ejWSS6CS8F$$CWN6rzV8ON zm?nhOwL@<;O$e!Lhu&tI5K`9;z1=h+q^=!$hiO7cT|4wn(}a+^cIaKE2_bdu(7R0& zLh9O~_n0Px)U`wJHBAVi`)+WbX+lU{t=(^$5K>ob511x|)YaO9rU@Z+wf2x{LP%Y$ zJ#3l~Qdet_m?nhO)!L(`2_bd0_LylxNL{TxZkiB6_ub$L(}a+^T6@woA*8O>o-$1c zsjIc8O%p=uYV8@*gpj&gd)71|q^{PUGffDotF`A%6GG~0?FG|>kh)rX(KI21?z_QD zrU@Z+wf3@ULP%Y$y<(aWQdeuQnkIzQ)!J*O2_bd0_PS|8NL{VHVVV$9S8H#YCWO@0 z+FPaxA$7I(wrN5L-FJg`OcO%tYVBRqgpj&gd(Si>q^{Q9H%$nstF;eI6GG~0ZIZ#S zLVy4F;A2x)Ym=HLgw)mAWTpurb+tCRX+lUncspDcQe`_*m?nhOgY<{B%xIbr zQr8Zh$uuE^?z_RvrU@Z+wKj`sLP%Y$&1#wuQdeuUnI?qP)!OW)2_bd0Hiv0KNL{VX zX_^pHS8H>bCWO@0+T5lIA$7Gjk7+^(-FJg|O%p=uYHdE#gpj&go8L4cq^{N$Fii-l ztF;A96GG~0Z6VWykh)r1*fb%euGSVYO$e#0wM9)6Lh5R5G1G()y6*;ynU9Bx=nh;V~YacRA2&t>J zobA2m$~ zsjIb*nI?qP)!N5R6GG~0ZH#F`80zc$ZZOs~A*8MyI?gm9q^=!0-ZUYkt{pnTG$Ev3 zZFE^oG))MpYlp64nh;Xg4qeqWA*8Myx|(T1NL@R0b<>29dhm9*EIwhH5JLCeU=7oR zkh)s?q-jD(U9GKYnh;V~Yo9Vr2&q>aZSB*h2_bd0_8HTJkh)r1%QPXRuGT(lnh;V~ zYo9Ys2&o5ehpm0yG$DlUyTKPs6GG~0ZEe$pkh)s?qG>`%U9GKSnh;X2Hrm>{rU@Z+ zwYHvVLP%Y$eaSQ-q^{Q1H%$nstF;YG6GH02+hJ>8Hcbej`)=?R(}a+^TKlSLLP%Y$ zea$o>q^{P!ZkiBMuQuA+H%t>k>S}F6(}a+^THDApA*8O>Ha1NNsjIb3OcO%t!P{YL z-!x4Kq5E#|Ez^XMx?20TX+lU{t$oKdA*8O>HZ@HMsaG3qZ8Ot^kh)si+%zGiuGY3N zO$e#0wJl8(Lh5R5E7OFKdhmAG+SaBCA#~pjzH6EgQr8aso@qizT|0Ce(}a+^cIdXI z2_bdu(CthULh9O~+nXkY)U`vuZ<-KN*AD%GX+lU{JM@R92_bdu&>xv5gwTCA__1k1 zNL{V%V44t8S8F?(CWO@0+D}XqLh5Smr=|%Zb+xvWX+lU{t?g`@5K>obKQm1TsjIc0 znJUzjF@)YaN{%D#IQdetxn4l+#$L;ZZ;4gO)85K`9;{ikU{NL@ShU#1Bmb?wlDO%p=u)kb&dA*Kl-b?wkY zO%p=u+M$P;CWO?rLk~Ai2&rp_{@XMmq#nE-?$H03CWO#^H~6n}2_f}rqpclnnh;V~YyUG%2&t>JV@wl5>T2y+(}a+^T071(A*3F>9kzD7 zX+j9ycY_m56GG~0?L^arkh)qs$uuFPuGUUAO$e!18*S|r(}a+^T07M=A*8O>PBTpi zsjIcqO%p=uYV8cugphjhcG%jPrU@Z*-wn<(O$e#0wX;nVLh5Sm9Mgo5x>`HeG$Ev3 zZM3!XOcO%tYVCZ}gpj&gyTCLdq^{O3G))MptF?J%S;nO>T2zB(}a+Ewb9nDFii-ltFKt>Lh9O~H<~7d)U`uzGEE4nYlq%! znh;Xg4!y-RA*8MydaG$dNL@ShHq(TVx_0R8rU@Z*-wp0CO$e#0wL47{Lh5SmF4KgN zx>~#2G$Ev}*6uM)2&t>JdrcEU>T2yi(}a+^TD#vgA*8O>9xzP^sjIaIO%p=sz8gGb znh;V~YY&?ygw)mABc=%obkDDfh)YaM(rU@Z+wf3ZGLP%Y$ zJ!P5@QdetFnJ=S&kq>T2zI(}a+^T6@7XA*8O>UNlVz zsjIb@OcO%tYVBpygpj&gd&M*%q^{OpHBAVi`)=@>X+lU{t-WrV5K>obZ8)YaOX zrU@Z+wf2^2LP%Y$y=|HhQdev5m?nhO)!MtJ2_bd0_MT}%NL{VHZ<-K>diw{)jP9`y zOcO%t+M$yS{%QLAzXu}prG$Ev})@CtH2&t>JSxpl{>S}E^(}WQEg=%ef(}a+^ zTARZ(A*8O><}^(RsjIcQOcO%tYHe=Qgpj&go5wUEq^{QHHBAVqtF`$|6GG~0ZGO{) zkh)r1z%(I*exq7j&@>^WuGSVZO$e#0wS`R+Lh5R55z~Z_x>{S*G$Ev}))q5O2&t>J z#Z41J>S}EX(}a+^T3gaIA*8O>mNHEUp+BhBmNrcYsjIbROcO%tYHeB5gpj&gTh25g zq^{OJWSS6CS8L0gCWO@0+6tx#A$7I(Vbg?=x?1~)X+lU{t*vO95JEpNcJyoHl}r;t z>e`_zn{SqG$Ev});?*P5K>obYnmp6)PuLf);?vL5JJCDt$o@wA*8O>K4Y2? zQdethnI?qP)!JuG6GH0MM_c=xX+lU{t$p4!A*8O>zF?XVQdethnT2!FrU@Z+ zwe}U$gpj&g`>JU|NL{Uc%`_pT9=sj4_I1;Q5c-2^?Hi^EA$7I3p=m-$U9D|onh;V~ zYa5#;gw(5#wzi3BLP%Y$ebY1{q^{P!WttFDS8LxkO$e#0weOfFgw%t#!`3!6O$bB1 zPu~qTGffDoYlm)bnh;Xg4&A~uA*8Myx}|ACNL@R0E7OFKx_0Q+rU@Z+?a=RJADbqG)YaM!rU@Z+wYH;aLP%Y${lqjOgzme+PfZg->S}E#(}a+^ zTHDz)A*8O>erB2wQdes~H%$nstF>KB6GG~0ZCBHTkh)s?g=s=aU9IhAnh;V~YrC5! zgwTCA_@!w=NL{V{$}}OQuGW5Snh;V~YkQa`gw)mAo~8*Qb+xvaX+lU{t^LL{A*8O> zeruW#QdeugGffDotF_;oCWO#^H~52TLP%Y${n0cbq^{QXHcbertF?Vh6GG~0?N6o& zA$7I(XVZj`x?0=UG$Ev}*8XCe5K>ob`HLP%XZ z^Z?U@kh*s0fu;!|_3EQL^zWt#A$9H0gG>`b>e`|IFii-lYlr^RG$Ev}9r`cRgphjh zcDO?iHcbej`)+WEX+lU{tsQEb5K>obhnXgX)YaPIrU@bS>Z7gw+cY7huGaoznh;V~ zYyUM(2&t>JBTN%Q>T2ys(}a+E@OIeRQKktYbl(k*HcbertF`}`CWO@0+A*dHA$7HO ztZ70>z4~Zt$C)OC)YaPYrU@Z+wRVDOLP%Y$ooJd6QdesynI?qPgSW%hPBu*lq5E!d zifKYfU9FvJnh;V~Yp0negw)mA>81%G_3ERoone{~QdetdnkIzQ)!JF62_bd0cD89k zNL{U+W10|B58e)2JJ&QJgzme+d8P>=b+vZBX+lU{tzBT65K>ob7n&x7)T@uSc9Cg9 zNL{U6Y?=^KS8JD;CWO@0+NGumA$7HOnQ1~uJ$O58?Q+wEFx1EQ-QWt-gpj&+=#{1k zA$9H0t4tF@>e``KnJn@tl!>T2y4(}a+^TD#RWA*8O>ZZk~?sjIcyO%p=uYV8iw zgpj&gyVEowq^{QPGEE4ntF^mL6GG^|8{A`>5K>ob_nIbz)YaO3rU@Z+wRXR0LP%Y$ zJz$y;QdesankIzQ)!IX*2_bd0_ONL}NL{TxVww9yd)0 zsjIaoOcO%tYVAqWgpj&gd&)E+q^{PUHcbertF>oL6GG~0?OD@=kh)rX&NLyUuGXG6 zO$ed;Zt#L>LP%Y$y=a;cQdes)nI?qP)!NIZ2_bd0_KImjNL{VHYMKyIS8K1CCWO@0 z+UuqXA$7I(hG{}bU9G)onh-+w-QX?Lgpj&+=-Z|VA$9H0cT5vP>e`|2nkIzQtB>x` z_e>K)>e`|2ncIyNe(q+Pe4fcn z6GG^|8%%DR5K>obQAuZ`?EH+X+lU{txaQ^5K>ob z)0!rP)YaN_rU@Z+wKlzJLP%Y$&0uobbDAcE)YaNtrU@Z*-wozAO$e#0 zwRubvLh5R5Uekn-x>}phG$Ev}*5)@&2&t>J1xyn{>S}F4(}a+^T3g68A*8O>7B)=? zsjIa`OcO%rz8frRnh;V~Ym1pCgw)mA;-(29b+xvHX+lU{tu1Mq5K>obOPMBw)YaP3 zrU@Z+wYH3DLP%Y$Eo+((Qdeus{U5sSDfrd{-@bl2Mknbw>99MtZQHhO+qP}nw(UmP z>DacD_nh~iarUe|Yy2+u&8p9HH7?fN-+F49CWHa{nZ6rLX_^pH*AAV^^hAGrkh*s0 z)TRj`b?wk;OcO%t+M&~$CWO?rL#H!M2&rp_PH&nJQr8Zh!89SHt{pm~X+lU{J9H+~ zgb=##1~Z!`gw)mAET#z|b+tCDX+lU{t<7ed5K>obvzsP_)YaM?rU@Z+wKk_|LP%Y$ z&1ISpQdetpnJ`Aic+>S}F%(}a+^T3f(0A*8O>7Bo!= zsjIbxOcO%tYHeZDgpj&gTf{UWq^{N$HBAVqtF^^U6GG^|8!T>`5K>obOPD5v)YaOO zrU@Z+wYHS$h5q;;b+xv%X+lU{tu14k5K>ob%bF&H)YaN@rU@Z+wYI!zLP%Y$tzeoE zLigQZMbm_kx>{SwG$Ev})>bx62&t>JRZJ5?>S}FO(}a+^T3gLDA*8O>RyR!usjIa$ zOcO%tYHdx^gpj&gTgx;dgzme++NKF1_3VS>-~arN=sKneA@!Vz2l*epu4zI@J@>$R zJ=27cdftKc`lbmX^{xZ!4NMb4>fHy{8=5AB)O!xBH!@8KsrMdOZ)}obTbL$<)YaOSrU@Z+wYHV%jsEx`b+xv&X+lU{ zt!-nP5K>ob+nOeX)YaN{rU@Z*-wn1mO$e#0wH-_oLh5R5N7ICmx?0=GG$Ev})^;{c z2&t>JT}%@~>S}FQ(}a+^THDPuA*8O>b~jB3sjIa;OcO%rz8mamnh;V~YkQd{gw)mA z-lhp5b+xvSX+lU{t?g@?5K>ob`mQdesSnI?qL zeK$DRG$Ev})($aE2&t>JLroJx>T2yU(}a+^T07h{A*8O>jxbFKsjIakO%p=uYV9b~ z2mSFu>T2z1(}a+^T06!xAq>!;_1)lD(}a+Ewn6gmf4ob=bI*k)YaMrrU@Z*-wiG_O$e#0wTny>Lh5SmV$+0>x>~!$G$Ev})-E+o z2&t>J%S;nO>T2zB(}a+^TD!tDA*8O>t~5;usjIcCOkecJ2ci3JaJ6YdNL{U6W10|B zS8LarCWO@0+I6N0A$7HOy=g*7U9H_tx>~!-G$Ev}*6ub<2&t>J zdrT8T>T2y?(}a+^TD#9QA%yO`!TqKQA@%HobVEj z51A%})bkFkA2v-0sdpV%KVq5?Qtv*ne$+G}q~3F2{g`P&NWJ&K`f<~Qkb2*N^%JHE zA#~pjo-|DesjIc8Oh5F;2dS&Ir%e+=>T2y7(}a+^T6@+sA*8O>o-<7dsjIc;O%p=u zYV9AU2_bd0_D|D-FJh3nJ|C%O*(0w;}-83PjuGZc#O$e#0 zwKq)@Lh5SmEz^XMx>|eNG$Ev}*4{Bq2&t>JcTE#Q>T2yh(}a+^T6^C#A*8O>J}^xP zq5E#|p=m-$U9Ej&nh;V~Yag2?gw)mAC#K)|e&+i@3;GJOcO%tIR@6> znkIzQa}BJ&GffDo=NVXkZ<-KN?=rCd!89SH-fdw0qiI4&y~n`%C)0$Gdar@?&!!0> z^*#gZUrZB1=(nr2UriH2>T2yb(}a+^TKnBJA*8O>2HAg*|NpPw|Ni5#sjIa=nI?qP z)!Lw@2_bd0HkfHbNL{TBZkiBMS8GFMlekXsjIaSO%p=uYV9wk2_f{? z)!Im=2_bd0HnM3#NL{UsVww#x+d{sjIc|OcO%tYHfVegpj&g zo4_<7q^{QfW||OES8IPaO$e#0wFylVLh5R5BGZHr`qf$g-*=op{{5eC_Y<2Ygw(Y| zCoxS3scVN$YMKyI*AAV`G$Ev}9Xh#bLP%XZbPCgikh*s0l%@$Gb?wlpOcO%t+M!dM zCWO?rL#HuK2%+Du)}}R02&t>J=}Z$s>S}Fz(}a+^TART%A*8O>W;9I*sjIb_OcO%t zYHeoIgpj&go5eICq^{OxHBAVqtF_ro6GG^ZtF_rp6GG~0Z4T3fkh)r%(=;KZuGZ!< zO$e#0wYg0bLh5R59@B)7x>}ppG$Ev}*5)%!2&t>J`Ari->S}EP(}WQE>uPO5(}a+^ zT3g68A*8O>7B)=?sjIa`OcO%tYHd-|gpj&gTg)^eq^{N$H%$nstF{S_G$Ev})>bf02&t>J z6-^UD>S}Ez(}a+^T3gvPA*8O>RxwQo1N529x_0Oq zrU@Z+?a(z%6GH0Rp=+5Ygw(Y|*EUTEscVO>W10|B*A89RG$Ev}9lD-rLI~Y=gY``l zLh5R51Ji_%x?0=NG$Ev});2Ot2&t>JjZG6m>S}Eh(}a+^THDk#A*8O>HZx5KsjIck zO%p=uYHbVCgb=##23wjYgw)mAR;CFdb+xv&X+lU{t!-nP5K>ob+nOeX)YaN{rU@Z+ zwYI%!LP%Y$?O>V^Qdes`nkIzQ)!I&`2_baf4R$t72&t>JT}%@~>S}FQ(}a+^THDPu zA*8O>b~jB3sjIa;OcO%tYHd%`gpj&g+siZ|q^{QXHcbertF?Vh6GG^|8|-VE5K>ob z`mQdesSnI?qP)!M`HgG$Ev})=n`^ z2&t>JQ%w^>>T2yY(}a+^T07k|A*8O>&M-{~sjIa!O%p=uYV9o3gb=##24|Zlgw)mA zIi?9Ab+vY`X+lU{t(|9@5K>ob=bI*k)YaMrrU@Z+wRWLtLP%Y$U1XXNQdesinJ%S;nO>T2zB(}a+^TD!tDA*8O>t~5;usjIcCOcO%tYVB&% zgpj&gyT&vjq^{PkHBAVqtF`M)6GG^|8(eRi5K>obH<%`b)YaOJrU@Z+wRV$fLP%Y$ z-E5i=QdeuYm?nhO)!MD52_bd0cAIHJNL{VnZkiBMS8I2eCWHa{+P)jyX_^pH*ABhQ zG$Ev}9eTHELP%XZ^d8fMkh*s0y`~8vb?wmmOcO%t+M)NGCWO?rLmx0r2&rp_K4_W{ zQr8ZB$TT5@?z_RmrU@Z+wf2ZT2x;(}a+^T6@tnA*8O>UNTJxq5E#|vS~s{U9G)h znh;V~YpT2yZ(}a+^TKlhQLP%Y$y>6NiQdetlm?nhO)!Lh;2_bd0 z_LgZv2;Fysw@nj5>T2yB(}a+^T6@-ZM=IsjId3O%p=uYV8Blgpj&g`_MEY zq^{OJGEE4ntF@0!6GG~0?Gw|45W4RMpPD9w)U`uDGffDoYlnVrnh;Xg4*kM3A*8My z`lV??NL@ShE7OFKx_0Q-rU@Z+?a*&b6GH0Rq2HP&gw(Y|zcWn;q5E#|y=g*7U9J6K znh;V~Yd@MMgw)mAPo@bWb+z`hX+lU{t^Hz}5K>obznUh5)YaN=rU@Z+wf4JdLP%Y$ z4RXN$dn>Bn|Ni5#q5E#|C)0$Gx>_65G$Ev})&?_82&t>J!A%oF>S}EW(}a+^S{u?d zA*8O>hB8eEsjIc2O%p=uYHb+Pgpj&g8`d--gzme+aHa_%b+z_q(}a+^S{vRpA*8O> zMlekXsjIaSO%p=uYV9wk2_bd0Hj-&VNL{UsY?=^KS8Jn~CWO@0+Nh=pA#~pjMl($a zsjIcoO%p=uYHbYDgpj&g8`Cr)q^{P+GEE4ntF^zHCWO@0+SsNEA$7Gjj%h+jU9F94 znh;V~YvY+FgaP{5z8j2hnh;Xg4xPX>A*8My`Zv>rkh*s0-%S%j>e`_bnkIzQwL>Q| zO$e!LhfZvo5K`9;oy0UDq^=!0scAw;T|0C#(}WPZ?*@~bCWO@0+7zYob)0-xQ)YaMyrU@Z*-wkFo zO$e#0wV6y4Lh5R5X48a_x>}pXG$Ev})@C(L2&t>J*-R5c>S}Fv(}a+^TARZ(A*8O> z<}^(RsjIcQOcO%rz8lPKnh;V~Yx9^Ugw)mAyru~ub+tC1X+lU{t<7(m5K>ob3z#N^ z)YaO8rU@Z+wYHFHLP%Y$Eo_<)Qdet>m?nhKeK%OtG$Ev}))q5O2&t>J#Z41J>S}EX z(}a+^T3gaIA*8O>mNHEUsjIc6O%p=uYHbe`_zn zb+xv>X+lU{t!-eM5K>ob8=5AB)YaNXrU@Z*-wif4O$e#0wM|SDLh5R5Q`3Zyx?0=J zG$Ev});2dy2&t>JEld+a>S}FE(}a+^THDGrA*8O>wl+-&sjIbZOcO%rz8h?7nh;V~ zYulM7gw)mA_NECTb+xvGX+lU{t?g)<5K>obJDDbg)YaO~rU@Z+wYH0CLP%Y$?P{73 zQdeucnI?qLeK*+MG$Ev}*7h(>2&t>JJxvor>S}E-(}a+^THD(+A*8O>_AyNesjIbp zO%p=uYHdH$gpj&g+ut-Hq^{NuFii*p^yhsyIM6g9q^=!$kZD3lT|4w((}a+^cIY9d z2_bdu&_hiVLh9O~hnXgX)U`toH%$nsYlj|Tnh;Xg4n5K|A*8MydX#BG2;FysqfHY+ z>T2y6(}a+^T07P>A*8O>jx$XNsjIc)O%p=uYV8Emgpj&gJJB>Dq^{OZGEE4ntF@C& z6GG~0?G)355W4RMrC5TxpsRQdetN znI?qP)!Nmj2_bd0c8zI5NL{U6Ynl*JS8LaqCWO@0+V!RhA$7HOgK0uYU9H_{nh;V~ zYd4uDgwTCAxY;xzq^=!$i)lhgT|4wv(}a+^cIa)U2_bdu(A!NDLh9O~cbF!G)U`wJ zG))MpYlq%tnh;Xg4!zqnA*8MydXH&B2;FysdrcEU>T2yi(}a+^TD#vgA*8O>9xzP^ zsjIaIO%p=uYV9G@gpj&gd)PD~q^{N;F--`mtF=c>6GG~0?J?7Y5W4RMkDDfh)YaM( zrU@Z+wf3ZGLP%Y$J!P5@QdetFnC5{L?fcq^{QfWttFDS8M+^O$e#0wHHhiLh5SmMbm_kx>|e5G$Ev})?PME z2&t>JS4T2y((}a+^TKkV_LI~Y=gV#(GLh5SmzorQxb+z`oX+lU{t-WEI5K>ob zZ<;2A)YaNsrU@Z+wf44YLP%Y$yuQr8as*fb%et{wV`X+lU{JM>f2gpj&+=x3%0A$9H0 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%0D9JV3Vgu^wYnsE4rR1=QSkZQsa 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

4eZ4t!-{PA+$zoTbND= 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

T2yDrU@Z+wf4MeLP%Y$ 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


obTbU+= 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%0D9JV3Vgu^wYnsE4rR1=QSkZQsa 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%0D9JV3Vgu^wYnsE4r zR1=QSkZQsa8&XX;QbVcrO}J1)stFfvNHyUi4XGwvv?0}mi#4R0aPfvz z6E4w^YQiNOQcbv2L#hdvZb&uZG7YIFT(%+Agv&LgnsE7sR1>bykZQse8&XZUQbVc< zS8hl(;VKQOCS0{4)r6}xq?&N`hEx--(U5AwH5*b*xK=}|3D<5&HQ_o9sU}>vA=QNI zHKdww{f1N%ZqSfw!VMczO}J4*stGr4NHyUm4XGyFv?0}mn>D1GaPx*#6K>IvYQilW zQcbv3L#he4Zb&uZHVvsJ+_oXrgxfWwnsEDuR1@ydkZQsm8&XZUQ$wl=cWy{E;VuoS zCfv0l)r7k>q?&N|hEx;o(U5AwJsVO@xK~4}3HNSDHQ_!DsV3aFA=QNYHKdww|Atf( z9?+0#!UG#pO?Xg4stFHnNHyUh4XGwPv?0}m|7l1y;eQ)aO?X&CstFHoNHyUR4XGwP zvLV%k|7%D!;ZY5#COol;!{ctb;~32$sjHQ`MSsV2O+A=QMpG^CpF z)`nCQ-qw(6!rL2CO?XE`stNCGNHyVI4XGx)yCKzt_cWxM@ZN@06W-U5YQp;)Qcd_k zL#hcMY)CcXLk+1We7GUigpV|&n()zvR1-edkZQum8&Xa9L_?|xpKM4q;ZqH%CVaXf z)r8M9q?+*AhEx+i*N|$$=NnQ@_(DUf314hTHQ`GQsV026A=QMhG^CpF)rM3PzSfXx z!q*#8P54GbstMn0NHyVG4XGx4yCKzt?=+;E@ZE+~6Ta7wYQpy$Qcd_lL#hcsY)CcX zM-8ba{J0_2gr78|n()(xR1<#IkZQuu8&Xa9MMJ6yzidb~;a3f*Cj7b~)r8+Pq?+*C zhEx-N*N|$$?;BE0_(Mag34d%zHQ`SUsV4lnA=QMxG^CpF*M?LR{??Fc!rvQGP54Jc zstNyWNHyVK4XGylyCKzt|1_kUaDcV@{_)?vaKMIC6AsjnYQljVQcXBWL#hb}ZAdlY zU=67z9K0dbghMo>nsCU5R1*%>kZQuA8&XX;Ohc*(hiynT;cyM9CLF#Y)r2E7q?&NV zhEx-d)R1bzksDG?I7&mR2}f;6HQ{ItsU{q~A=QLqG^Cnv%!X7Gj@6KA!m%4tO*l?N zstLz!NHyVj4XGv^zaiCx6EvinaKeUE6He5SYQl*dQcXBXL#hcUZAdlYWDTh%oV+2` zgi|!6nsCa7R1;3skZQuI8&XX;O+%^)r)@|z;dBkDCY-(@)r2!Nq?&NXhEx;I)R1bz znHy3~I7>sS31@9cHQ{UxsV1DgA=QL)G^Cnv&W2PI&ef1=!nqq#O*l_OstM<9NHyVn z4XGxazaiCx3pAvfaKVOD6E4({YQlvZQcbu>L#hcEZAdlYVhyP#T)ZLGgiAD}nsCX6 zR1+@MkZQuE8&XZUOhc*(mu*Nj;c^YBCS1ND)r2cFq?&NWhEx--)R1bzl^aq`xJpB+ z30G}MHQ{OvsU}>#A=QLyG^Cnv&4yGHuGNrg!nGSxO}I`&stMO^NHyVl4XGwvzaiCx z8#JVvaKnaF6K>RyYQl{hQcbu?L#hckZAdlYW(}z(+`J*xgj+PEnsCd8R1O?Xp7stIpyNHyUt4XGx)wIS7nw>6}i z@b-pO6W-B~YQj4kQcZYQL#heyZb&uZJq@WQytg6Mg!eV1n(+RHR1-eXkZQsQ8&Xa9 zP(!K-A8trB;Uf*HCVaFZ)r5~Vq?+*YhEx+i(U5AwCmT{t_*6rx37>9AHQ_T2sV023 zA=QM>HKdyG`G!;zzR-|r!WSD-P54qnstI3iNHyUr4XGx4wIS7nuQjBa@b!jN6TZ=q zYQi@gQcd_)L#heiZb&uZI}NEOe77Ohgzq(^n(+OGR1<#CkZQsY8&Xa9QA4T;KW<1h z;U^8LCj7J^)r6llq?+*ahEx-N(U5AwFB?)#_*Fxy3BPVgHQ_f6sV4lkA=QN6HKdyG z`-W5#{?L$W!XFz_P54tostJE?NHyUv4XGylwIS7nzcr+q@b`vP6aLYVYQjGoQcd_* zL#he?Zb&uZKMkoS9AKTkfBbhZ9IzqPgab9CnsDHTR1*%;kZQs~8&XX;SVO7_2X9C< z;Sdd}CLFRM)r3Peq?&N(hEx*{(~xSyVH;9SI9x-j35Rb;HQ@*isU{q;A=QKP6jaO{Ru6OPl6YQk|FQcXBs zL#heKZ%8%a1P!SsoUkF)gcCKSnsDNVR1;3pkZQt78&XX;SwpG`CvQkK;S>$2CY-V% z)r3ksU}>pA=QK{HKdww<%U!fuF{Zd!c`kmO}JV^ zstH$bNHyUa4XGwvvmw=lYc-^raP5Xv6Ry*cYQl9JQcbvCL#heaZ%8%a1`Vku+^`|l zgc~)ansDQWR1*NHyUe z4XGyFvmw=ldo`q*aPNjx6YkTHYQlXRQcbvDL#he)Z%8%a0S&1pJg_0vga3KCVamk)r223q?+)cIO*leBstHGINHyU|4XGv^xgphrqco(N zaMXrW6OPu9YQoVQQcXBUL#heKY)CcXSPiKr9J?XagyS@%nsD5PR1=QZkZQv58&XX; zK|`tuCu~SH;Y1CoCY-n-)r6BYq?&NjhEx+y){tt#$s1BlI7LIM38!pGHQ`hZsV1Dd zA=QM_G^Cnv+J;mUPS=oX!s#1QO*lhCstIRoNHyV14XGxaxgphrvoxfdaMp%Y6VBF< zYQotYQcXBVL#heqY)CcXTn(uvoVy{_g!43{nsDBRR1?nEkZQvD8&XZUKtrkt7i>s1 z;X)0mCS157)r5;Qq?&NihEx+S){tt##T!yhxI{y$372e0HQ`bXsU}>yA=QM-G^Cnv z*@jdTF4vH1!sQ!MO}IisstH$YNHyU~4XGwvxgphrt2CsVaMgxX6Ry^fYQohUQcbu< zL#heaY)CcXS`DctT)QFFgzGeb(kZQv98&XZUK|`tuH*82X;YJOqCfv9o z)r6Zgq?&NkhEx-7){tt#%^OlpxJ5&%3Ab!WHQ`nbsV3aIA=QN2G^Cnv+lEvVZr6}% z!tEPUO}IltstI>&NHyV34XGyFxgphryELSlaMy-Z6YkcKYQo(cQcbu=L#he)Y)CcX zUJa=x+`A#wg!?q4nsDESR1@ykkZQvH8&XYpKtrkt4{S&^;Xw_lCOo(y)r5yMq?+*1 zhEx;&ryV9H@aTqA6CTr$YQke1 zQcZYVL#hdnZ%8%a2@RHQ@&hsV4leA=QK*HKdyGYQk?DQcd_>L#heCZ%8%a4-Kg%{IMa`gg-T; zn(*g_R1^NvkZQtT8&Xa9TSKY|e{V=N;U5jDCj7G@)r5aFq?+*WhEx;&(~xSy0oLpL z$A9<20UJ_HI8Z~X2?uUSHQ^u)sU{q>A=QL~HKdww@P0`;aQcQ+6VA|(YQh;CQcXBhL#hd9Zb&uZEDfn9oV6jsA=QM7HKdww@rG0rF42%`!X+D0O}JD;stK2FNHyUy4XGwvwjtGo%Qd8$ zaQTK*6RyyZYQhy8Qcbv0L#hc^Zb&uZDh;V7T(u$9gsU~AnsD`oR1>bzkZQs;8&XZU zRzs=@*KSBP;W`beCS126)r9Lcq?&O3hEx-7(2#1v4I5HTxKTr@2{&#?HQ^==sV3aC zA=QMNHKdww^M+ItZqblx!Yvz8O}JGJ)r7Y+q?+*7hEx;Y){tt#+Z$3%ct=C33GZx3HQ`+isV2O;A=QNU zG^CpF-iA~Y-q(<7!uuOiP53}VstF%#NHyU@4XGx4xFOYqk2Iv3@X>};6F%0EYQo1G zQcd_oL#hd%Y)CcXQw^yme7YgkgwHgjn(*0%R1-eekZQu`8&Xa9LPM$vUu;M<;Y$sv zCVaUe)r7A!q?+*6hEx;2){tt#*Beqz_(nsj3Eyl;HQ`$gsV028A=QNMG^CpF-G)>X zzSody!uK0eP541WstG@ANHyU{4XGylxFOYqpERVJ@Y9A=6Moi^YQoPOQcd_pL#heC zY)CcXR}HBq{JJ64gx@rzn(*6(R1<#JkZQv38&Xa9LqnsV1DiA=QKnG^Cnv!G=^5F4T}}!i5`BO}I!ystFfu zNHyVN4XGwvydl+uOEjdKaLI;L6E4+|YQm)(Qcbu_L#hdvZAdlYat)~_T)rXIgex?p znsCL2R1>b$kZQt}8&XZUN<*p%S8Yf&;c5-3CS1KC)r4y_q?&NehEx--)sSk!wHs1R zxK2Z=3D<2%HQ{;%A=QK%G^Cnv!-iB7Zq$%!!i^hJO}I%zstGr3NHyVR4XGyF zydl+uTQsDaaLa~N6K>UzYQn7>Qcbu`L#he4ZAdlYb`7Z}+`b{zggZ2(nsCR4R1@yh zkZQu68&XZUOGBy&cWp>D;cgA7CfvOt)r5OAq?&NghEx;o)sSk!y&F3HNPC zHQ{~@sV3aNA=QKjG^CpFz=l*49@LO(!h;)9O?XH{stFHmNHyVq8d6R8--c8Z9@da* z!owRk8Vgc;V})VCOozw)r7}2q?+*fhEx-t(2#1v z6B|-Zcv3^E2~TcFHQ^}@sU|$NA=QMZHKdyG^oCRup3#tM!ZRCEO?XyAstM0-NHyU( z4XGwPw;|Pp=QX67@cf2U6JF4eYQhT}QcZYKL#hccZb&uZB@L-2ytEn(*?5 zR1;p&kZQs!8&XYpRYR%?uWm>+;WZ7ZCcL&G)r8kIq?+*hhEx;Y(2#1v8yiwhcvC~F z32$ylHQ_A{sV2O&A=QMpHKdyG_J&jw-qDb1!aEyMO?X#BstNCINHyU-4XGx)w;|Pp z_cf%N@cxEW6F$(8YQhH_Qcd_!L#hcMZb&uZBMqr0e6%6egpW0(n(*<4R1-eYkZQsw z8&Xa9R70u>pKeGs;WG`XCVaLb)r8MAq?+*ghEx;2(2#1v7aLMd_)sV1DiA=QKnG^Cnv!G=^5F4T}}!i5`BO}I!ystFfuNHyVN z4XGwvydl+uOEjdKaLI;L6E4+o;eVfnOE;vNaG8cw6E543YQp6jQcbvgL#hc^Xh=2T ziVdkIT&W?|gey0snsAkdR1>b+kZQu!8d6QTdPAxS*JwyJ;hGJpCS0o_)r4y|q?&M@ zhEx--+mLF)^%_!5xPC*b2{&j+HQ|O0sV3a0A=QK%H>8?ylZI3iZrYG)!p#~|O}KeO zstLDfNHyV>4XGyFs^P}}J`1;QNHyU$4XGyFwjtGo+cl(`aQlW-6YkKEYQh~GQcbv1 zL#hdPZb&uZE)A(B+_fRqgu6AQnsE1qR1@yekZQs`8&XZUS3{}^_ijiv;XVziCfv6n z)r9*sq?&O5hEx+C(2#1v0~=CJcu+&C2@h^aHQ^x*sU|$MA=QNcX-GBUe;ZOwcvwTK z2@h{bHQ^Br5B~RAcw|GW3IErSYQm!$QcZYtL#hdnX-GBUu??vvJgy!Ocy>do z3D0RrHQ~7psU|$HA=QNEH>8^If`(KRUf7Uo!iySGO?YubstGS?NHyW54XGx)tRdBe zmp8oN-)G?!4XGx)vLV%kS2d)X@al$C6JFDhYQk$9QcZYWL#hd{Z%8%a4GpO#ys;tG zgf}&$n(*d^R1@CPkZQtP8&XYpTSKY|Z*NF7;T;XBCcLvD)r5C7q?+*VhEx;Y(~xSy zdmBO&aO8$m6OPi5YQj+) zQcXBoL#hc!Z%8%a7!9c=9J3+Sgkv?NnsDrfR1=QVkZQtl8&XX;UPG!0$8ShA;RFq- zCY-P#)r1o@q?&NzhEx+y(vWJxNgGm4I9Wrg2`6tzHQ^KusV1DVA=QLaHKdww>V{Mk zPScQT!f6{)O*macstKoWNHyUM4XGxau_4ujGc}}|aOQ?o6VB3*YQk9?QcXBpL#hd9 zZ%8%a91W=^oUqA=QLSHKdww>4sDjF4K@|!etv$ zO}Jb`stK2GNHyUK4XGwvu_4ujD>bB=aOH+n6Ry&bYQj|;Qcbv8L#hc^Z%8%a8V#u? zT(cq7gljdVnsDugR1>b#kZQtp8&XZUUPG!0*KbHQ;RX$0q?&N!hEx-7 z(vWJxO&d~8xLHH02{&&@HQ^QwsV3aAA=QLiHKdww>xNVlZqtxz!fhK;O}Je{stLDm zNHyUO4XGyFu_4ujJ2j-5aOZ|p6YkQGYQkL`Qcbv9L#hdPZ%8%a9u27`+_NFognKol znsD!iR1@ygkZQtx8&XZUUqh-1_isow;Q^JiZ~-geNqln()MiR1==mkZQt{8&XYpN<*p%Pi;sw;b{%2COo|%)r4m>q?+)| zhEx-t)sSk!vl~)PcuqsA3D0dvHQ{*;sU|$XA=QKzG^CpF!iH26Ueu6k!iyVHO?XK| zstGS`NHyVQ4XGx)ydl+uS2U!W@XCf%6JFJjYQn1O@X3Z$6F$|DYQm=*Qcd_wL#hd%ZAdlYa}B8`e7+&ogfBFtn()Pj zR1?0`kZQu08&Xa9N<*p%Uu{S=;cE@4CVagi)r4;}q?+)}hEx;2)sSk!w;NJT_)bHr z3Eyo=sV02CA=QK*G^CpF!-iB7e$wA=QM7 zG^Cnv(S}qLF4mB0!o?d>O}IoustK2DNHyV74XGwvx*^qs%QU2#aM^}b6E4?~YQp6k zQcbu*L#hc^Y)CcXN)4$dT)83DgsU{9nsC*IR1>b&kZQu!8&XZUMnkFz*K9~N;aUx; zCS1EA)r9Lbq?&NuhEx--*N|$$^&3)6xIsgz2{&v=HQ`1LsV3aGA=QMNG^Cnv(}q+N zZq|@$!p$2}O}IrvstLDjNHyVB4XGyFx*^qs+ccz_aNCAd6K>a#YQpUsQcbu+L#hdP zY)CcXP7SFh+_@pugu67PnsC>KR1@yjkZQu+8&XZUM?hEk@ZpA36F$)r3Daq?+*OhEx;&(vWJx zUmH?Q_*+A&34d=$HQ^r(sV4lhA=QL`HKdyG?}k(p{?m|Z!T~n!`^SIx!T}pnO*l|P zstE^fNHyUg4XGv^v?0}mgEgd@aPWpy6AsakYQiBKQcXBiL#hdfZb&uZFb%0D9JV3V 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
obH<~7d)YaNerU@Z+wRW>ZZk~?sjIcyO%p=u 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 literal 0 HcmV?d00001 diff --git a/testdb/data/transactions/system/checkpoint.0 b/testdb/data/transactions/system/checkpoint.0 new file mode 100644 index 0000000000000000000000000000000000000000..9b639e7748f745a2b5e919f988fc6753718f5607 GIT binary patch literal 592 zcmd;JKmm-53=E8Yi!`Q**z4OxMrJPXVJk{a&M!(~Pt3_o&r3}KDWE3cF6iSLR)6-LnQd1O?DixGm z5=#=35{pw6GV?M^6q56E3vyCRQd9Jl6dV*vDm+uH6pUdmCYIjI6XuNYC$BF=-?i24qcj$>Q6Hw{8^k)T9T4qo`>W?b7Fmls*d}Va3uiZH)@Um literal 0 HcmV?d00001 diff --git a/testdb/data/transactions/system/neostore.transaction.db.0 b/testdb/data/transactions/system/neostore.transaction.db.0 new file mode 100644 index 0000000000000000000000000000000000000000..b4a446aec49aefc09a28b47cb1d4c18acbe78fbc GIT binary patch literal 19725 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 sTcfa!X=7Zz{*|Bo7m;fiZvX%Q literal 0 HcmV?d00001 diff --git a/testdb/logs/debug.log b/testdb/logs/debug.log new file mode 100644 index 000000000..51243137a --- /dev/null +++ b/testdb/logs/debug.log @@ -0,0 +1,11709 @@ +2024-04-03 04:12:30.004+0000 INFO [o.n.g.f.m.GlobalModule] Logging config in use: Embedded default config 'default-server-logs.xml' +2024-04-03 04:12:30.184+0000 WARN [o.n.k.i.JvmChecker] The max heap memory has not been configured. It is recommended that it is always explicitly configured, to ensure the system has a balanced configuration. Until then, a JVM computed heuristic of 4294967296 bytes is used instead. If you are running neo4j server, you need to configure server.memory.heap.max_size in neo4j.conf. If you are running neo4j embedded, you have to launch the JVM with -Xmx set to a value. You can run neo4j-admin server memory-recommendation for memory configuration suggestions. +2024-04-03 04:12:30.184+0000 WARN [o.n.k.i.JvmChecker] The initial heap memory has not been configured. It is recommended that it is always explicitly configured, to ensure the system has a balanced configuration. Until then, a JVM computed heuristic of 268435456 bytes is used instead. If you are running neo4j server, you need to configure server.memory.heap.initial_size in neo4j.conf. If you are running neo4j embedded, you have to launch the JVM with -Xms set to a value. You can run neo4j-admin server memory-recommendation for memory configuration suggestions. +2024-04-03 04:12:30.223+0000 WARN [o.n.i.p.PageCache] The server.memory.pagecache.size setting has not been configured. It is recommended that this setting is always explicitly configured, to ensure the system has a balanced configuration. Until then, a computed heuristic value of 6442450944 bytes will be used instead. Run `neo4j-admin memory-recommendation` for memory configuration suggestions. +2024-04-03 04:12:30.223+0000 WARN [o.n.i.p.PageCache] Reflection access to java.nio.DirectByteBuffer is not available, using fallback mode. This could have negative impact on performance and memory usage. Consider adding --add-opens=java.base/java.nio=ALL-UNNAMED to VM options. +2024-04-03 04:12:30.492+0000 INFO [o.n.i.d.DiagnosticsManager] + ******************************************************************************** + [ System diagnostics ] + ******************************************************************************** + -------------------------------------------------------------------------------- + [ System memory information ] + -------------------------------------------------------------------------------- + Total Physical memory: 16.00GiB + Free Physical memory: 64.91MiB + Committed virtual memory: 38.29GiB + Total swap space: 2.000GiB + Free swap space: 1.552GiB + + -------------------------------------------------------------------------------- + [ JVM memory information ] + -------------------------------------------------------------------------------- + Free memory: 165.7MiB + Total memory: 260.0MiB + Max memory: 4.000GiB + Garbage Collector: G1 Young Generation: [G1 Eden Space, G1 Survivor Space, G1 Old Gen] + Garbage Collector: G1 Old Generation: [G1 Eden Space, G1 Survivor Space, G1 Old Gen] + Memory Pool: CodeHeap 'non-nmethods' (Non-heap memory): committed=2.438MiB, used=1.265MiB, max=5.570MiB, threshold=0B + Memory Pool: Metaspace (Non-heap memory): committed=20.06MiB, used=19.77MiB, max=-1B, threshold=0B + Memory Pool: CodeHeap 'profiled nmethods' (Non-heap memory): committed=4.250MiB, used=4.236MiB, max=117.2MiB, threshold=0B + Memory Pool: Compressed Class Space (Non-heap memory): committed=2.250MiB, used=2.104MiB, max=1.000GiB, threshold=0B + Memory Pool: G1 Eden Space (Heap memory): committed=148.0MiB, used=62.00MiB, max=-1B, threshold=? + Memory Pool: G1 Old Gen (Heap memory): committed=100.0MiB, used=17.37MiB, max=4.000GiB, threshold=0B + Memory Pool: G1 Survivor Space (Heap memory): committed=12.00MiB, used=10.93MiB, max=-1B, threshold=? + Memory Pool: CodeHeap 'non-profiled nmethods' (Non-heap memory): committed=2.438MiB, used=1.040MiB, max=117.2MiB, threshold=0B + + -------------------------------------------------------------------------------- + [ Operating system information ] + -------------------------------------------------------------------------------- + Operating System: Mac OS X; version: 12.7.4; arch: x86_64; cpus: 8 + Max number of file descriptors: 10240 + Number of open file descriptors: 229 + Process id: 41993 + Byte order: LITTLE_ENDIAN + Local timezone: America/New_York + Memory page size: 4096 + Unaligned memory access allowed: true + + -------------------------------------------------------------------------------- + [ JVM information ] + -------------------------------------------------------------------------------- + VM Name: Java HotSpot(TM) 64-Bit Server VM + VM Vendor: Oracle Corporation + VM Version: 17.0.2+8-LTS-86 + JIT compiler: HotSpot 64-Bit Tiered Compilers + VM Arguments: [-agentlib:jdwp=transport=dt_socket,address=127.0.0.1:55973,suspend=y,server=n, -Dvisualvm.id=74127630719069, -javaagent:/Users/jnr6/Library/Caches/JetBrains/IntelliJIdea2023.2/captureAgent/debugger-agent.jar=file:/private/var/folders/b1/xx8_hppd0m39d2zftdhdftt4001hc2/T/capture.props, -Dfile.encoding=UTF-8] + + -------------------------------------------------------------------------------- + [ Java classpath ] + -------------------------------------------------------------------------------- + [classpath] /Users/jnr6/.m2/repository/it/unimi/dsi/fastutil/8.5.13/fastutil-8.5.13.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-codec-http/4.1.101.Final/netty-codec-http-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/scala-library/2.13.11/scala-library-2.13.11.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-command-line/5.16.0/neo4j-command-line-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-epoll/4.1.101.Final/netty-transport-native-epoll-4.1.101.Final-linux-x86_64.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-common/4.1.101.Final/netty-common-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.16.0/jackson-databind-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-consistency-check/5.16.0/neo4j-consistency-check-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-values/5.16.0/neo4j-values-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-dbms/5.16.0/neo4j-dbms-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-analysis/9.6/asm-analysis-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-planner/5.16.0/neo4j-cypher-planner-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/antlr/antlr4-runtime/4.8/antlr4-runtime-4.8.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-api/3.2.13/docker-java-api-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/activation/jakarta.activation-api/1.2.1/jakarta.activation-api-1.2.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-planner-spi/5.16.0/neo4j-cypher-planner-spi-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-resource/5.16.0/neo4j-resource-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-servlet/10.0.17/jetty-servlet-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-cache/1.13.0/shiro-cache-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-javacc-parser/5.16.0/neo4j-cypher-javacc-parser-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/sun/istack/istack-commons-runtime/3.0.8/istack-commons-runtime-3.0.8.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-configuration2/2.9.0/commons-configuration2-2.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-compress/1.21/commons-compress-1.21.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/containers/jersey-container-servlet/2.34/jersey-container-servlet-2.34.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-kqueue/4.1.101.Final/netty-transport-native-kqueue-4.1.101.Final-osx-aarch_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-concurrent/5.16.0/neo4j-concurrent-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/mysql/1.17.4/mysql-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/mockito/mockito-core/5.7.0/mockito-core-5.7.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher/5.16.0/neo4j-cypher-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-capabilities/5.16.0/neo4j-capabilities-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-notifications/5.16.0/neo4j-notifications-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-import-util/5.16.0/neo4j-import-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-config/5.16.0/neo4j-cypher-config-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/containers/jersey-container-servlet-core/2.34/jersey-container-servlet-core-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-io/5.16.0/neo4j-io-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-locator/2.6.1/hk2-locator-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-lang3/3.13.0/commons-lang3-3.13.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.16.0/jackson-core-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/mysql/mysql-connector-j/8.2.0/mysql-connector-j-8.2.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-classes-epoll/4.1.101.Final/netty-transport-classes-epoll-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/objenesis/objenesis/3.3/objenesis-3.3.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-server/2.34/jersey-server-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-client/2.34/jersey-client-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-ast-factory/5.16.0/neo4j-cypher-ast-factory-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-handler/4.1.101.Final/netty-handler-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j/5.16.0/neo4j-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/google/code/gson/gson/2.9.0/gson-2.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-logging/5.16.0/neo4j-logging-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-webapp/10.0.17/jetty-webapp-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-core/9.8.0/lucene-core-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-kernel-api/5.16.0/neo4j-kernel-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcutil-jdk18on/1.76/bcutil-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/bitbucket/inkytonik/kiama/kiama_2.13/2.5.1/kiama_2.13-2.5.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-common/5.16.0/neo4j-common-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/junit/junit/4.13.2/junit-4.13.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-index/5.16.0/neo4j-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport/4.1.101.Final/netty-transport-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-util/9.6/asm-util-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/jctools/jctools-core/4.0.2/jctools-core-4.0.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-graphdb-api/5.16.0/neo4j-graphdb-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/jdbc/1.17.4/jdbc-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-runtime-util/5.16.0/neo4j-cypher-runtime-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/collections/eclipse-collections-api/11.1.0/eclipse-collections-api-11.1.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-unsafe/5.16.0/neo4j-unsafe-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-server/10.0.17/jetty-server-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcprov-jdk18on/1.76/bcprov-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-slotted-runtime/5.16.0/neo4j-cypher-slotted-runtime-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-layout-template-json/2.20.0/log4j-layout-template-json-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-fulltext-index/5.16.0/neo4j-fulltext-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/net/java/dev/jna/jna/5.8.0/jna-5.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-util/10.0.17/jetty-util-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-expressions/5.16.0/neo4j-expressions-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-transport/3.2.13/docker-java-transport-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/commons-logging/commons-logging/1.2/commons-logging-1.2.jar + [classpath] /Users/jnr6/IdeaProjects/policy-machine-core/target/classes + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-testkit/1.10.0/junit-platform-testkit-1.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-core/1.13.0/shiro-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-physical-planning/5.16.0/neo4j-cypher-physical-planning-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-storage-engine-util/5.16.0/neo4j-storage-engine-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-ast/5.16.0/neo4j-ast-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-core/2.20.0/log4j-core-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-params/5.9.0/junit-jupiter-params-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/external/jakarta.inject/2.6.1/jakarta.inject-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/inject/jersey-hk2/2.34/jersey-hk2-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/hamcrest/hamcrest/2.2/hamcrest-2.2.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jaxb/jaxb-runtime/2.3.2/jaxb-runtime-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-logical-plans/5.16.0/neo4j-cypher-logical-plans-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-xml/10.0.17/jetty-xml-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar + [classpath] /Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar + [classpath] /Users/jnr6/.m2/repository/org/codehaus/jettison/jettison/1.5.4/jettison-1.5.4.jar + [classpath] /Users/jnr6/.m2/repository/com/propensive/mercator_2.13/0.2.1/mercator_2.13-0.2.1.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jaxb/txw2/2.3.2/txw2-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-resolver/4.1.101.Final/netty-resolver-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar + [classpath] /Users/jnr6/.m2/repository/org/awaitility/awaitility/4.2.0/awaitility-4.2.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-codec/4.1.101.Final/netty-codec-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-buffer/4.1.101.Final/netty-buffer-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-hash/1.13.0/shiro-crypto-hash-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/info/picocli/picocli/4.7.5/picocli-4.7.5.jar + [classpath] /Users/jnr6/.m2/repository/com/profesorfalken/jPowerShell/3.0/jPowerShell-3.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-cipher/1.13.0/shiro-crypto-cipher-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-lang/1.13.0/shiro-lang-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-token-api/5.16.0/neo4j-token-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-bolt/5.16.0/neo4j-bolt-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-record-storage-engine/5.16.0/neo4j-record-storage-engine-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-epoll/4.1.101.Final/netty-transport-native-epoll-4.1.101.Final-linux-aarch_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-ir/5.16.0/neo4j-cypher-ir-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/test-utils/5.15.0/test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter/5.10.0/junit-jupiter-5.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/app/neo4j-server-test-utils/5.15.0/neo4j-server-test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/rnorth/duct-tape/duct-tape/1.0.8/duct-tape-1.0.8.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/modules/scala-collection-contrib_2.13/0.3.0/scala-collection-contrib_2.13-0.3.0.jar + [classpath] /Users/jnr6/.m2/repository/org/slf4j/slf4j-api/2.0.0/slf4j-api-2.0.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-analysis-common/9.8.0/lucene-analysis-common-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/com/propensive/magnolia_2.13/0.17.0/magnolia_2.13-0.17.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-event/1.13.0/shiro-event-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-api/2.20.0/log4j-api-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-classes-kqueue/4.1.101.Final/netty-transport-classes-kqueue-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/net/bytebuddy/byte-buddy-agent/1.14.9/byte-buddy-agent-1.14.9.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/validation/jakarta.validation-api/2.0.2/jakarta.validation-api-2.0.2.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/database-commons/1.17.4/database-commons-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-front-end/5.16.0/neo4j-front-end-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-procedure/5.16.0/neo4j-procedure-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-import-tool/5.16.0/neo4j-import-tool-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/ws/rs/jakarta.ws.rs-api/2.1.6/jakarta.ws.rs-api-2.1.6.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.10.3/jackson-annotations-2.10.3.jar + [classpath] /Users/jnr6/.m2/repository/com/google/protobuf/protobuf-java/3.21.9/protobuf-java-3.21.9.jar + [classpath] /Users/jnr6/.m2/repository/io/projectreactor/reactor-core/3.6.0/reactor-core-3.6.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-wal/5.16.0/neo4j-wal-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-ssl/5.16.0/neo4j-ssl-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-unix-common/4.1.101.Final/netty-transport-native-unix-common-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-config-core/1.13.0/shiro-config-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-codegen/5.16.0/neo4j-codegen-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-tree/9.6/asm-tree-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-rewriting/5.16.0/neo4j-rewriting-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-backward-codecs/9.8.0/lucene-backward-codecs-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-lock/5.16.0/neo4j-lock-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-schema/5.16.0/neo4j-schema-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/collections/eclipse-collections/11.1.0/eclipse-collections-11.1.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/luben/zstd-jni/1.5.5-10/zstd-jni-1.5.5-10.jar + [classpath] /Users/jnr6/.m2/repository/commons-codec/commons-codec/1.16.0/commons-codec-1.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/jaxrs/jackson-jaxrs-json-provider/2.16.0/jackson-jaxrs-json-provider-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-expression-evaluator/5.16.0/neo4j-cypher-expression-evaluator-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/testcontainers/1.17.4/testcontainers-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/test/neo4j-harness/5.15.0/neo4j-harness-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/javassist/javassist/3.25.0-GA/javassist-3.25.0-GA.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-core/1.13.0/shiro-crypto-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-commons/1.9.0/junit-platform-commons-1.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-utils/2.6.1/hk2-utils-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/io-test-utils/5.15.0/io-test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/annotations/5.16.0/annotations-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-interpreted-runtime/5.16.0/neo4j-cypher-interpreted-runtime-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-cache/5.16.0/neo4j-cypher-cache-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jetbrains/annotations/17.0.0/annotations-17.0.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-layout/5.16.0/neo4j-layout-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/reactivestreams/reactive-streams/1.0.4/reactive-streams-1.0.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/licensing-proxy/zstd-proxy/5.16.0/zstd-proxy-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-security/5.16.0/neo4j-security-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-common/2.34/jersey-common-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/scala-reflect/2.13.11/scala-reflect-2.13.11.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/junit-jupiter/1.17.4/junit-jupiter-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-random-values/5.15.0/neo4j-random-values-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-transport-zerodep/3.2.13/docker-java-transport-zerodep-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-diagnostics/5.16.0/neo4j-diagnostics-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-http/10.0.17/jetty-http-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/cypher-ast-factory/5.16.0/cypher-ast-factory-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-configuration/5.16.0/neo4j-configuration-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-exceptions/5.16.0/neo4j-exceptions-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-util/5.16.0/neo4j-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-id-generator/5.16.0/neo4j-id-generator-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/seancfoley/ipaddress/5.4.0/ipaddress-5.4.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-io/10.0.17/jetty-io-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/commons-io/commons-io/2.11.0/commons-io-2.11.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-queryparser/9.8.0/lucene-queryparser-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/xml/bind/jakarta.xml.bind-api/2.3.2/jakarta.xml.bind-api-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-kernel/5.16.0/neo4j-kernel-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-fabric/5.16.0/neo4j-fabric-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-spatial-index/5.16.0/neo4j-spatial-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-procedure-api/5.16.0/neo4j-procedure-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/sun/xml/fastinfoset/FastInfoset/1.2.16/FastInfoset-1.2.16.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-lucene-index/5.16.0/neo4j-lucene-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/net/bytebuddy/byte-buddy/1.14.9/byte-buddy-1.14.9.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-query-router/5.16.0/neo4j-query-router-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-csv/5.16.0/neo4j-csv-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/toolchain/jetty-servlet-api/4.0.6/jetty-servlet-api-4.0.6.jar + [classpath] /Users/jnr6/IdeaProjects/policy-machine-core/target/test-classes + [classpath] /Users/jnr6/.m2/repository/com/github/ben-manes/caffeine/caffeine/3.1.8/caffeine-3.1.8.jar + [classpath] /Users/jnr6/.m2/repository/com/profesorfalken/WMI4Java/1.6.3/WMI4Java-1.6.3.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/vintage/junit-vintage-engine/5.10.0/junit-vintage-engine-5.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-collections/5.16.0/neo4j-collections-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/assertj/assertj-core/3.24.2/assertj-core-3.24.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-graph-algo/5.16.0/neo4j-graph-algo-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.9.0/junit-jupiter-engine-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jvnet/staxex/stax-ex/1.8.1/stax-ex-1.8.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/app/neo4j-server/5.16.0/neo4j-server-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-monitoring/5.16.0/neo4j-monitoring-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-macros/5.16.0/neo4j-cypher-macros-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jprocesses/jProcesses/1.6.5/jProcesses-1.6.5.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-api/2.6.1/hk2-api-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.9.0/junit-jupiter-api-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-security/10.0.17/jetty-security-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcpkix-jdk18on/1.76/bcpkix-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-engine/1.9.0/junit-platform-engine-1.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-slf4j-provider/5.16.0/neo4j-slf4j-provider-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-kqueue/4.1.101.Final/netty-transport-native-kqueue-4.1.101.Final-osx-x86_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-data-collector/5.16.0/neo4j-data-collector-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/server-api/5.16.0/server-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-native/5.16.0/neo4j-native-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/module/jackson-module-jaxb-annotations/2.16.0/jackson-module-jaxb-annotations-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm/9.6/asm-9.6.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/jaxrs/jackson-jaxrs-base/2.16.0/jackson-jaxrs-base-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar + + -------------------------------------------------------------------------------- + [ Library path ] + -------------------------------------------------------------------------------- + /Users/jnr6/Library/Java/Extensions + /Library/Java/Extensions + /Network/Library/Java/Extensions + /System/Library/Java/Extensions + /usr/lib/java + /Users/jnr6/IdeaProjects/policy-machine-core + + -------------------------------------------------------------------------------- + [ System properties ] + -------------------------------------------------------------------------------- + sun.jnu.encoding = UTF-8 + sun.arch.data.model = 64 + user.timezone = America/New_York + visualvm.id = 74127630719069 + sun.java.launcher = SUN_STANDARD + user.country = US + sun.boot.library.path = /Library/Java/JavaVirtualMachines/jdk-17.0.2.jdk/Contents/Home/lib + sun.java.command = gov.nist.csd.pm.pap.neo4j.ImportTest + jdk.debug = release + sun.cpu.endian = little + user.home = /Users/jnr6 + user.language = en + file.separator = / + intellij.debug.agent = true + sun.management.compiler = HotSpot 64-Bit Tiered Compilers + user.name = jnr6 + path.separator = : + file.encoding = UTF-8 + jnidispatch.path = /Users/jnr6/Library/Caches/JNA/temp/jna13292390674361007552.tmp + jna.loaded = true + jboss.modules.system.pkgs = com.intellij.rt + user.dir = /Users/jnr6/IdeaProjects/policy-machine-core + native.encoding = UTF-8 + sun.io.unicode.encoding = UnicodeBig + + -------------------------------------------------------------------------------- + [ (IANA) TimeZone database version ] + -------------------------------------------------------------------------------- + TimeZone version: 2021e (available for 601 zone identifiers) + + -------------------------------------------------------------------------------- + [ Network information ] + -------------------------------------------------------------------------------- + Interface utun2: + address: fe80:0:0:0:ce81:b1c:bd2c:69e%utun2 + Interface utun1: + address: fe80:0:0:0:bbf5:1c30:4238:57b2%utun1 + Interface utun0: + address: fe80:0:0:0:73be:4eb:3f31:a891%utun0 + Interface llw0: + address: fe80:0:0:0:c0a6:71ff:fe04:534c%llw0 + Interface awdl0: + address: fe80:0:0:0:c0a6:71ff:fe04:534c%awdl0 + Interface en0: + address: 192.168.1.247 + Interface lo0: + address: fe80:0:0:0:0:0:0:1%lo0 + address: 0:0:0:0:0:0:0:1%lo0 + address: 127.0.0.1 + + -------------------------------------------------------------------------------- + [ Native access information ] + -------------------------------------------------------------------------------- + Native access details: Native access is not available for current platform. + + -------------------------------------------------------------------------------- + [ DBMS config ] + -------------------------------------------------------------------------------- + DBMS provided settings: + server.bolt.enabled=true + server.bolt.listen_address=localhost:9999 + server.directories.neo4j_home=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + Directories in use: + server.directories.data=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data + server.directories.dumps.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/dumps + server.directories.import=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + server.directories.lib=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/lib + server.directories.licenses=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/licenses + server.directories.logs=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/logs + server.directories.neo4j_home=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + server.directories.plugins=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/plugins + server.directories.run=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/run + server.directories.script.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/scripts + server.directories.transaction.logs.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions + + -------------------------------------------------------------------------------- + [ Packaging ] + -------------------------------------------------------------------------------- + Could not read packaging info: java.nio.file.NoSuchFileException: /Users/jnr6/IdeaProjects/policy-machine-core/testdb/packaging_info + +2024-04-03 04:12:30.651+0000 INFO [o.n.d.i.DefaultIdentityModule] Generated new ServerId: ServerId{54490f53} (54490f53-4b94-4d0f-9604-023c3fe1be5e) +2024-04-03 04:12:30.652+0000 INFO [o.n.d.i.DefaultIdentityModule] This instance is ServerId{54490f53} (54490f53-4b94-4d0f-9604-023c3fe1be5e) +2024-04-03 04:12:31.692+0000 INFO [o.n.d.d.DatabaseLifecycles] Creating 'DatabaseId{00000000[system]}'. +2024-04-03 04:12:31.925+0000 INFO [o.n.b.BoltServer] Using connector transport KQueue +2024-04-03 04:12:32.060+0000 INFO [o.n.b.BoltServer] Configured external Bolt connector with listener address localhost/127.0.0.1:9999 +2024-04-03 04:12:32.060+0000 INFO [o.n.b.BoltServer] Bolt server loaded +2024-04-03 04:12:32.078+0000 INFO [o.n.d.d.DatabaseLifecycles] Starting 'DatabaseId{00000000[system]}'. +2024-04-03 04:12:32.881+0000 INFO [o.n.i.d.DiagnosticsManager] [system/00000000] + [system/00000000] ******************************************************************************** + [system/00000000] [ Database: system ] + [system/00000000] ******************************************************************************** + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Version ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] DBMS: community record-aligned-1.1 + [system/00000000] Kernel version: 5.16.0 + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Store files ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] Disk space on partition (Total / Free / Free %): 500068036608 / 109545222144 / 21 + [system/00000000] Storage files stored on file store: apfs + [system/00000000] Storage files: (filename : modification date - size) + [system/00000000] neostore: 2024-04-03 04:12:32.662+0000 - 8.000KiB + [system/00000000] neostore.counts.db: 2024-04-03 04:12:32.718+0000 - 0B + [system/00000000] neostore.indexstats.db: 2024-04-03 04:12:32.747+0000 - 0B + [system/00000000] neostore.labeltokenstore.db: 2024-04-03 04:12:32.621+0000 - 0B + [system/00000000] neostore.labeltokenstore.db.id: 2024-04-03 04:12:32.620+0000 - 0B + [system/00000000] neostore.labeltokenstore.db.names: 2024-04-03 04:12:32.607+0000 - 8.000KiB + [system/00000000] neostore.labeltokenstore.db.names.id: 2024-04-03 04:12:32.606+0000 - 0B + [system/00000000] neostore.nodestore.db: 2024-04-03 04:12:32.529+0000 - 0B + [system/00000000] neostore.nodestore.db.id: 2024-04-03 04:12:32.528+0000 - 0B + [system/00000000] neostore.nodestore.db.labels: 2024-04-03 04:12:32.509+0000 - 8.000KiB + [system/00000000] neostore.nodestore.db.labels.id: 2024-04-03 04:12:32.469+0000 - 0B + [system/00000000] neostore.propertystore.db: 2024-04-03 04:12:32.583+0000 - 0B + [system/00000000] neostore.propertystore.db.arrays: 2024-04-03 04:12:32.565+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.arrays.id: 2024-04-03 04:12:32.564+0000 - 0B + [system/00000000] neostore.propertystore.db.id: 2024-04-03 04:12:32.582+0000 - 0B + [system/00000000] neostore.propertystore.db.index: 2024-04-03 04:12:32.549+0000 - 0B + [system/00000000] neostore.propertystore.db.index.id: 2024-04-03 04:12:32.548+0000 - 0B + [system/00000000] neostore.propertystore.db.index.keys: 2024-04-03 04:12:32.531+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.index.keys.id: 2024-04-03 04:12:32.530+0000 - 0B + [system/00000000] neostore.propertystore.db.strings: 2024-04-03 04:12:32.551+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.strings.id: 2024-04-03 04:12:32.550+0000 - 0B + [system/00000000] neostore.relationshipgroupstore.db: 2024-04-03 04:12:32.640+0000 - 8.000KiB + [system/00000000] neostore.relationshipgroupstore.db.id: 2024-04-03 04:12:32.639+0000 - 0B + [system/00000000] neostore.relationshipgroupstore.degrees.db: 2024-04-03 04:12:32.738+0000 - 0B + [system/00000000] neostore.relationshipstore.db: 2024-04-03 04:12:32.588+0000 - 0B + [system/00000000] neostore.relationshipstore.db.id: 2024-04-03 04:12:32.587+0000 - 0B + [system/00000000] neostore.relationshiptypestore.db: 2024-04-03 04:12:32.605+0000 - 0B + [system/00000000] neostore.relationshiptypestore.db.id: 2024-04-03 04:12:32.605+0000 - 0B + [system/00000000] neostore.relationshiptypestore.db.names: 2024-04-03 04:12:32.590+0000 - 8.000KiB + [system/00000000] neostore.relationshiptypestore.db.names.id: 2024-04-03 04:12:32.589+0000 - 0B + [system/00000000] neostore.schemastore.db: 2024-04-03 04:12:32.624+0000 - 8.000KiB + [system/00000000] neostore.schemastore.db.id: 2024-04-03 04:12:32.623+0000 - 0B + [system/00000000] Storage summary: + [system/00000000] Total size of store: 72.00KiB + [system/00000000] Total size of mapped files: 72.00KiB + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Transaction log ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] Transaction log files stored on file store: apfs + [system/00000000] Transaction log metadata: + [system/00000000] - current kernel version used in transactions: V5_15 + [system/00000000] - last committed transaction id: 1 + [system/00000000] Transaction log files: + [system/00000000] - existing transaction log versions: -1--1 + [system/00000000] - no transactions found + [system/00000000] Checkpoint log files: + [system/00000000] - existing checkpoint log versions: -1--1 + [system/00000000] - no checkpoints found + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Id usage ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] ArrayPropertyStore[neostore.nodestore.db.labels]: used=1 high=0 + [system/00000000] NodeStore[neostore.nodestore.db]: used=0 high=-1 + [system/00000000] StringPropertyStore[neostore.propertystore.db.index.keys]: used=1 high=0 + [system/00000000] PropertyIndexStore[neostore.propertystore.db.index]: used=0 high=-1 + [system/00000000] StringPropertyStore[neostore.propertystore.db.strings]: used=1 high=0 + [system/00000000] ArrayPropertyStore[neostore.propertystore.db.arrays]: used=1 high=0 + [system/00000000] PropertyStore[neostore.propertystore.db]: used=0 high=-1 + [system/00000000] RelationshipStore[neostore.relationshipstore.db]: used=0 high=-1 + [system/00000000] StringPropertyStore[neostore.relationshiptypestore.db.names]: used=1 high=0 + [system/00000000] RelationshipTypeStore[neostore.relationshiptypestore.db]: used=0 high=-1 + [system/00000000] StringPropertyStore[neostore.labeltokenstore.db.names]: used=1 high=0 + [system/00000000] LabelTokenStore[neostore.labeltokenstore.db]: used=0 high=-1 + [system/00000000] SchemaStore[neostore.schemastore.db]: used=1 high=0 + [system/00000000] RelationshipGroupStore[neostore.relationshipgroupstore.db]: used=1 high=0 + [system/00000000] NeoStore[neostore]: used=-1 high=-1 + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Metadata ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] EXTERNAL_STORE_UUID (Database identifier exposed as external store identity. Generated on creation and never updated): 8e4fd9af-0e04-47d8-a19c-cdb72dbda752 + [system/00000000] DATABASE_ID (The last used DatabaseId for this database): null + [system/00000000] LEGACY_STORE_VERSION (Legacy store format version. This field is used from 5.0 onwards only to distinguish non-migrated pre 5.0 metadata stores.): -3523014627327384477 + [system/00000000] STORE_ID (Store ID): StoreId{creationTime=1712117552660, random=4552926301767966796, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1} + [system/00000000] +2024-04-03 04:12:32.900+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] Requirement `Database unavailable` makes database system unavailable. +2024-04-03 04:12:32.900+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] DatabaseId{00000000[system]} is unavailable. +2024-04-03 04:12:32.913+0000 WARN [o.n.k.i.s.MetaDataStore] [system/00000000] Missing counts store, rebuilding it. +2024-04-03 04:12:32.922+0000 WARN [o.n.k.i.s.MetaDataStore] [system/00000000] Counts store rebuild completed. +2024-04-03 04:12:32.948+0000 INFO [o.n.k.d.Database] [system/00000000] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/system/neostore.transaction.db.0] at version=0 +2024-04-03 04:12:32.965+0000 INFO [o.n.k.d.Database] [system/00000000] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/system/checkpoint.0] at version=0 +2024-04-03 04:12:32.969+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [system/00000000] Scanning log file with version 0 for checkpoint entries +2024-04-03 04:12:33.018+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] Fulfilling of requirement 'Database unavailable' makes database system available. +2024-04-03 04:12:33.018+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] DatabaseId{00000000[system]} is ready. +2024-04-03 04:12:33.406+0000 INFO [o.n.k.i.a.i.IndexPopulationJob] [system/00000000] Index population started: [Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' )] +2024-04-03 04:12:33.494+0000 INFO [o.n.k.i.a.i.IndexPopulationJob] [system/00000000] Index creation finished for index [Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' )]. +2024-04-03 04:12:33.515+0000 INFO [o.n.k.i.a.i.IndexPopulationJob] [system/00000000] Index population started: [Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' )] +2024-04-03 04:12:33.562+0000 INFO [o.n.k.i.a.i.IndexPopulationJob] [system/00000000] Index creation finished for index [Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' )]. +2024-04-03 04:12:33.582+0000 INFO [o.n.k.i.t.l.c.CheckPointerImpl] [system/00000000] Checkpoint triggered by "Database init completed." @ txId: 3 checkpoint started... +2024-04-03 04:12:34.127+0000 INFO [o.n.k.i.t.l.c.CheckPointerImpl] [system/00000000] Checkpoint triggered by "Database init completed." @ txId: 3 checkpoint completed in 543ms. Checkpoint flushed 74 pages (0% of total available pages), in 57 IOs. Checkpoint performed with IO limit: unlimited, paused in total 0 times( 0 millis). +2024-04-03 04:12:34.132+0000 INFO [o.n.k.i.t.l.p.LogPruningImpl] [system/00000000] No log version pruned. The strategy used was '2 days'. +2024-04-03 04:12:34.320+0000 INFO [o.n.k.i.a.i.IndexPopulationJob] [system/00000000] Index population started: [Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:DatabaseName {name, namespace}), indexProvider='range-1.0' )] +2024-04-03 04:12:34.387+0000 INFO [o.n.k.i.a.i.IndexPopulationJob] [system/00000000] Index creation finished for index [Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:DatabaseName {name, namespace}), indexProvider='range-1.0' )]. +2024-04-03 04:12:34.436+0000 INFO [o.n.k.i.a.i.IndexPopulationJob] [system/00000000] Index population started: [Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Database {name}), indexProvider='range-1.0' )] +2024-04-03 04:12:34.488+0000 INFO [o.n.k.i.a.i.IndexPopulationJob] [system/00000000] Index creation finished for index [Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Database {name}), indexProvider='range-1.0' )]. +2024-04-03 04:12:34.561+0000 INFO [o.n.k.i.a.i.IndexingService] [system/00000000] Constraint Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0' ) is ONLINE. +2024-04-03 04:12:34.562+0000 INFO [o.n.k.i.a.i.IndexingService] [system/00000000] Constraint Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0' ) is ONLINE. +2024-04-03 04:12:34.907+0000 INFO [o.n.k.i.a.i.IndexPopulationJob] [system/00000000] Index population started: [Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:User {name}), indexProvider='range-1.0' )] +2024-04-03 04:12:34.953+0000 INFO [o.n.k.i.a.i.IndexPopulationJob] [system/00000000] Index creation finished for index [Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:User {name}), indexProvider='range-1.0' )]. +2024-04-03 04:12:34.995+0000 INFO [o.n.k.i.a.i.IndexPopulationJob] [system/00000000] Index population started: [Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:User {id}), indexProvider='range-1.0' )] +2024-04-03 04:12:35.050+0000 INFO [o.n.k.i.a.i.IndexPopulationJob] [system/00000000] Index creation finished for index [Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:User {id}), indexProvider='range-1.0' )]. +2024-04-03 04:12:35.080+0000 INFO [o.n.k.i.a.i.IndexingService] [system/00000000] Constraint Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0' ) is ONLINE. +2024-04-03 04:12:35.080+0000 INFO [o.n.k.i.a.i.IndexingService] [system/00000000] Constraint Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0' ) is ONLINE. +2024-04-03 04:12:35.083+0000 INFO [o.n.s.s.s.UserSecurityGraphComponent] Initializing system graph model for component 'security-users' with version -1 and status UNINITIALIZED +2024-04-03 04:12:35.093+0000 INFO [o.n.s.s.s.UserSecurityGraphComponent] Setting up initial user from defaults: neo4j +2024-04-03 04:12:35.094+0000 INFO [o.n.s.s.a.CommunitySecurityModule] CREATE USER neo4j PASSWORD ****** CHANGE REQUIRED +2024-04-03 04:12:35.136+0000 INFO [o.n.s.s.s.UserSecurityGraphComponent] Setting version for 'security-users' to 4 +2024-04-03 04:12:35.153+0000 INFO [o.n.s.s.s.UserSecurityGraphComponent] After initialization of system graph model component 'security-users' have version 4 and status CURRENT +2024-04-03 04:12:35.171+0000 INFO [o.n.s.s.s.UserSecurityGraphComponent] Performing postInitialization step for component 'security-users' with version 4 and status CURRENT +2024-04-03 04:12:35.178+0000 INFO [o.n.d.d.DatabaseLifecycles] Creating 'DatabaseId{fefd0874[neo4j]}'. +2024-04-03 04:12:35.181+0000 INFO [o.n.d.d.DatabaseLifecycles] Starting 'DatabaseId{fefd0874[neo4j]}'. +2024-04-03 04:12:35.188+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected configured format for store /Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j: RecordFormat:PageAlignedV5_0[aligned-1.1] +2024-04-03 04:12:35.325+0000 INFO [o.n.i.d.DiagnosticsManager] [neo4j/fefd0874] + [neo4j/fefd0874] ******************************************************************************** + [neo4j/fefd0874] [ Database: neo4j ] + [neo4j/fefd0874] ******************************************************************************** + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Version ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] DBMS: community record-aligned-1.1 + [neo4j/fefd0874] Kernel version: 5.16.0 + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Store files ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] Disk space on partition (Total / Free / Free %): 500068036608 / 109544144896 / 21 + [neo4j/fefd0874] Storage files stored on file store: apfs + [neo4j/fefd0874] Storage files: (filename : modification date - size) + [neo4j/fefd0874] neostore: 2024-04-03 04:12:35.301+0000 - 8.000KiB + [neo4j/fefd0874] neostore.counts.db: 2024-04-03 04:12:35.312+0000 - 0B + [neo4j/fefd0874] neostore.indexstats.db: 2024-04-03 04:12:35.315+0000 - 0B + [neo4j/fefd0874] neostore.labeltokenstore.db: 2024-04-03 04:12:35.274+0000 - 0B + [neo4j/fefd0874] neostore.labeltokenstore.db.id: 2024-04-03 04:12:35.273+0000 - 0B + [neo4j/fefd0874] neostore.labeltokenstore.db.names: 2024-04-03 04:12:35.261+0000 - 8.000KiB + [neo4j/fefd0874] neostore.labeltokenstore.db.names.id: 2024-04-03 04:12:35.260+0000 - 0B + [neo4j/fefd0874] neostore.nodestore.db: 2024-04-03 04:12:35.203+0000 - 0B + [neo4j/fefd0874] neostore.nodestore.db.id: 2024-04-03 04:12:35.202+0000 - 0B + [neo4j/fefd0874] neostore.nodestore.db.labels: 2024-04-03 04:12:35.189+0000 - 8.000KiB + [neo4j/fefd0874] neostore.nodestore.db.labels.id: 2024-04-03 04:12:35.189+0000 - 0B + [neo4j/fefd0874] neostore.propertystore.db: 2024-04-03 04:12:35.244+0000 - 0B + [neo4j/fefd0874] neostore.propertystore.db.arrays: 2024-04-03 04:12:35.234+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.arrays.id: 2024-04-03 04:12:35.232+0000 - 0B + [neo4j/fefd0874] neostore.propertystore.db.id: 2024-04-03 04:12:35.244+0000 - 0B + [neo4j/fefd0874] neostore.propertystore.db.index: 2024-04-03 04:12:35.220+0000 - 0B + [neo4j/fefd0874] neostore.propertystore.db.index.id: 2024-04-03 04:12:35.219+0000 - 0B + [neo4j/fefd0874] neostore.propertystore.db.index.keys: 2024-04-03 04:12:35.205+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.index.keys.id: 2024-04-03 04:12:35.204+0000 - 0B + [neo4j/fefd0874] neostore.propertystore.db.strings: 2024-04-03 04:12:35.222+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.strings.id: 2024-04-03 04:12:35.221+0000 - 0B + [neo4j/fefd0874] neostore.relationshipgroupstore.db: 2024-04-03 04:12:35.289+0000 - 8.000KiB + [neo4j/fefd0874] neostore.relationshipgroupstore.db.id: 2024-04-03 04:12:35.288+0000 - 0B + [neo4j/fefd0874] neostore.relationshipgroupstore.degrees.db: 2024-04-03 04:12:35.313+0000 - 0B + [neo4j/fefd0874] neostore.relationshipstore.db: 2024-04-03 04:12:35.245+0000 - 0B + [neo4j/fefd0874] neostore.relationshipstore.db.id: 2024-04-03 04:12:35.245+0000 - 0B + [neo4j/fefd0874] neostore.relationshiptypestore.db: 2024-04-03 04:12:35.259+0000 - 0B + [neo4j/fefd0874] neostore.relationshiptypestore.db.id: 2024-04-03 04:12:35.259+0000 - 0B + [neo4j/fefd0874] neostore.relationshiptypestore.db.names: 2024-04-03 04:12:35.246+0000 - 8.000KiB + [neo4j/fefd0874] neostore.relationshiptypestore.db.names.id: 2024-04-03 04:12:35.246+0000 - 0B + [neo4j/fefd0874] neostore.schemastore.db: 2024-04-03 04:12:35.275+0000 - 8.000KiB + [neo4j/fefd0874] neostore.schemastore.db.id: 2024-04-03 04:12:35.275+0000 - 0B + [neo4j/fefd0874] Storage summary: + [neo4j/fefd0874] Total size of store: 72.00KiB + [neo4j/fefd0874] Total size of mapped files: 72.00KiB + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Transaction log ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] Transaction log files stored on file store: apfs + [neo4j/fefd0874] Transaction log metadata: + [neo4j/fefd0874] - current kernel version used in transactions: V5_15 + [neo4j/fefd0874] - last committed transaction id: 1 + [neo4j/fefd0874] Transaction log files: + [neo4j/fefd0874] - existing transaction log versions: -1--1 + [neo4j/fefd0874] - no transactions found + [neo4j/fefd0874] Checkpoint log files: + [neo4j/fefd0874] - existing checkpoint log versions: -1--1 + [neo4j/fefd0874] - no checkpoints found + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Id usage ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] ArrayPropertyStore[neostore.nodestore.db.labels]: used=1 high=0 + [neo4j/fefd0874] NodeStore[neostore.nodestore.db]: used=0 high=-1 + [neo4j/fefd0874] StringPropertyStore[neostore.propertystore.db.index.keys]: used=1 high=0 + [neo4j/fefd0874] PropertyIndexStore[neostore.propertystore.db.index]: used=0 high=-1 + [neo4j/fefd0874] StringPropertyStore[neostore.propertystore.db.strings]: used=1 high=0 + [neo4j/fefd0874] ArrayPropertyStore[neostore.propertystore.db.arrays]: used=1 high=0 + [neo4j/fefd0874] PropertyStore[neostore.propertystore.db]: used=0 high=-1 + [neo4j/fefd0874] RelationshipStore[neostore.relationshipstore.db]: used=0 high=-1 + [neo4j/fefd0874] StringPropertyStore[neostore.relationshiptypestore.db.names]: used=1 high=0 + [neo4j/fefd0874] RelationshipTypeStore[neostore.relationshiptypestore.db]: used=0 high=-1 + [neo4j/fefd0874] StringPropertyStore[neostore.labeltokenstore.db.names]: used=1 high=0 + [neo4j/fefd0874] LabelTokenStore[neostore.labeltokenstore.db]: used=0 high=-1 + [neo4j/fefd0874] SchemaStore[neostore.schemastore.db]: used=1 high=0 + [neo4j/fefd0874] RelationshipGroupStore[neostore.relationshipgroupstore.db]: used=1 high=0 + [neo4j/fefd0874] NeoStore[neostore]: used=-1 high=-1 + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Metadata ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] EXTERNAL_STORE_UUID (Database identifier exposed as external store identity. Generated on creation and never updated): 485f4e4f-d438-40c9-a4ed-0bc1099d976f + [neo4j/fefd0874] DATABASE_ID (The last used DatabaseId for this database): null + [neo4j/fefd0874] LEGACY_STORE_VERSION (Legacy store format version. This field is used from 5.0 onwards only to distinguish non-migrated pre 5.0 metadata stores.): -3523014627327384477 + [neo4j/fefd0874] STORE_ID (Store ID): StoreId{creationTime=1712117555300, random=260265064831090288, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1} + [neo4j/fefd0874] +2024-04-03 04:12:35.327+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] Requirement `Database unavailable` makes database neo4j unavailable. +2024-04-03 04:12:35.327+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] DatabaseId{fefd0874[neo4j]} is unavailable. +2024-04-03 04:12:35.330+0000 WARN [o.n.k.i.s.MetaDataStore] [neo4j/fefd0874] Missing counts store, rebuilding it. +2024-04-03 04:12:35.330+0000 WARN [o.n.k.i.s.MetaDataStore] [neo4j/fefd0874] Counts store rebuild completed. +2024-04-03 04:12:35.341+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/neo4j/neostore.transaction.db.0] at version=0 +2024-04-03 04:12:35.355+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/neo4j/checkpoint.0] at version=0 +2024-04-03 04:12:35.357+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [neo4j/fefd0874] Scanning log file with version 0 for checkpoint entries +2024-04-03 04:12:35.360+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] Fulfilling of requirement 'Database unavailable' makes database neo4j available. +2024-04-03 04:12:35.360+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] DatabaseId{fefd0874[neo4j]} is ready. +2024-04-03 04:12:35.388+0000 INFO [o.n.k.i.a.i.IndexPopulationJob] [neo4j/fefd0874] Index population started: [Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' )] +2024-04-03 04:12:35.445+0000 INFO [o.n.k.i.a.i.IndexPopulationJob] [neo4j/fefd0874] Index creation finished for index [Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' )]. +2024-04-03 04:12:35.458+0000 INFO [o.n.k.i.a.i.IndexPopulationJob] [neo4j/fefd0874] Index population started: [Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' )] +2024-04-03 04:12:35.505+0000 INFO [o.n.k.i.a.i.IndexPopulationJob] [neo4j/fefd0874] Index creation finished for index [Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' )]. +2024-04-03 04:12:35.518+0000 INFO [o.n.k.i.t.l.c.CheckPointerImpl] [neo4j/fefd0874] Checkpoint triggered by "Database init completed." @ txId: 3 checkpoint started... +2024-04-03 04:12:36.110+0000 INFO [o.n.k.i.t.l.c.CheckPointerImpl] [neo4j/fefd0874] Checkpoint triggered by "Database init completed." @ txId: 3 checkpoint completed in 591ms. Checkpoint flushed 74 pages (0% of total available pages), in 57 IOs. Checkpoint performed with IO limit: unlimited, paused in total 0 times( 0 millis). +2024-04-03 04:12:36.110+0000 INFO [o.n.k.i.t.l.p.LogPruningImpl] [neo4j/fefd0874] No log version pruned. The strategy used was '2 days'. +2024-04-03 04:12:36.173+0000 INFO [o.n.b.p.c.c.n.SocketNettyConnector] Bolt enabled on localhost:9999. +2024-04-03 04:12:36.173+0000 INFO [o.n.b.BoltServer] Bolt server started +2024-04-03 04:12:36.177+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] id: 266B93A8C1445AE734BA77BB99FDF56964B6082641ED1A3E87435C6A5111E836 +2024-04-03 04:12:36.177+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] name: system +2024-04-03 04:12:36.177+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] creationDate: 2024-04-03T04:12:32.66Z +2024-04-03 04:12:37.765+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] Shutdown started +2024-04-03 04:12:37.765+0000 INFO [o.n.b.BoltServer] Requested Bolt server shutdown +2024-04-03 04:12:37.766+0000 INFO [o.n.b.p.c.c.ConnectionRegistry] Stopping remaining idle connections for connector bolt +2024-04-03 04:12:37.766+0000 INFO [o.n.b.p.c.c.ConnectionRegistry] Stopped 0 idling connections for connector bolt +2024-04-03 04:12:37.768+0000 INFO [o.n.d.d.DatabaseLifecycles] Stopping 'DatabaseId{fefd0874[neo4j]}'. +2024-04-03 04:12:37.774+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] Requirement `Database unavailable` makes database neo4j unavailable. +2024-04-03 04:12:37.774+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] DatabaseId{fefd0874[neo4j]} is unavailable. +2024-04-03 04:12:37.775+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Waiting for closing transactions. +2024-04-03 04:12:37.776+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] All transactions are closed. +2024-04-03 04:12:37.776+0000 INFO [o.n.k.i.t.l.c.CheckPointerImpl] [neo4j/fefd0874] Checkpoint triggered by "Database shutdown" @ txId: 7 checkpoint started... +2024-04-03 04:12:38.237+0000 INFO [o.n.k.i.t.l.c.CheckPointerImpl] [neo4j/fefd0874] Checkpoint triggered by "Database shutdown" @ txId: 7 checkpoint completed in 460ms. Checkpoint flushed 37 pages (0% of total available pages), in 37 IOs. Checkpoint performed with IO limit: unlimited, paused in total 0 times( 0 millis). +2024-04-03 04:12:38.237+0000 INFO [o.n.k.i.t.l.p.LogPruningImpl] [neo4j/fefd0874] No log version pruned. The strategy used was '2 days'. +2024-04-03 04:12:38.705+0000 INFO [o.n.d.d.DatabaseLifecycles] Stopped 'DatabaseId{fefd0874[neo4j]}' successfully. +2024-04-03 04:12:38.705+0000 INFO [o.n.d.d.DatabaseLifecycles] Stopping 'DatabaseId{00000000[system]}'. +2024-04-03 04:12:38.706+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] Requirement `Database unavailable` makes database system unavailable. +2024-04-03 04:12:38.706+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] DatabaseId{00000000[system]} is unavailable. +2024-04-03 04:12:38.706+0000 INFO [o.n.k.d.Database] [system/00000000] Waiting for closing transactions. +2024-04-03 04:12:38.706+0000 INFO [o.n.k.d.Database] [system/00000000] All transactions are closed. +2024-04-03 04:12:38.707+0000 INFO [o.n.k.i.t.l.c.CheckPointerImpl] [system/00000000] Checkpoint triggered by "Database shutdown" @ txId: 37 checkpoint started... +2024-04-03 04:12:39.513+0000 INFO [o.n.k.i.t.l.c.CheckPointerImpl] [system/00000000] Checkpoint triggered by "Database shutdown" @ txId: 37 checkpoint completed in 806ms. Checkpoint flushed 69 pages (0% of total available pages), in 69 IOs. Checkpoint performed with IO limit: unlimited, paused in total 0 times( 0 millis). +2024-04-03 04:12:39.514+0000 INFO [o.n.k.i.t.l.p.LogPruningImpl] [system/00000000] No log version pruned. The strategy used was '2 days'. +2024-04-03 04:12:40.031+0000 INFO [o.n.d.d.DatabaseLifecycles] Stopped 'DatabaseId{00000000[system]}' successfully. +2024-04-03 04:12:40.035+0000 INFO [o.n.b.BoltServer] Shutting down Bolt server +2024-04-03 04:12:40.035+0000 INFO [o.n.b.p.c.c.ConnectionRegistry] Stopping 0 connections for connector bolt +2024-04-03 04:12:40.036+0000 INFO [o.n.b.p.c.c.ConnectionRegistry] Stopped all remaining connections for connector bolt +2024-04-03 04:18:35.785+0000 INFO [o.n.g.f.m.GlobalModule] Logging config in use: Embedded default config 'default-server-logs.xml' +2024-04-03 04:18:35.962+0000 WARN [o.n.k.i.JvmChecker] The max heap memory has not been configured. It is recommended that it is always explicitly configured, to ensure the system has a balanced configuration. Until then, a JVM computed heuristic of 4294967296 bytes is used instead. If you are running neo4j server, you need to configure server.memory.heap.max_size in neo4j.conf. If you are running neo4j embedded, you have to launch the JVM with -Xmx set to a value. You can run neo4j-admin server memory-recommendation for memory configuration suggestions. +2024-04-03 04:18:35.962+0000 WARN [o.n.k.i.JvmChecker] The initial heap memory has not been configured. It is recommended that it is always explicitly configured, to ensure the system has a balanced configuration. Until then, a JVM computed heuristic of 268435456 bytes is used instead. If you are running neo4j server, you need to configure server.memory.heap.initial_size in neo4j.conf. If you are running neo4j embedded, you have to launch the JVM with -Xms set to a value. You can run neo4j-admin server memory-recommendation for memory configuration suggestions. +2024-04-03 04:18:35.993+0000 WARN [o.n.i.p.PageCache] The server.memory.pagecache.size setting has not been configured. It is recommended that this setting is always explicitly configured, to ensure the system has a balanced configuration. Until then, a computed heuristic value of 6442450944 bytes will be used instead. Run `neo4j-admin memory-recommendation` for memory configuration suggestions. +2024-04-03 04:18:35.994+0000 WARN [o.n.i.p.PageCache] Reflection access to java.nio.DirectByteBuffer is not available, using fallback mode. This could have negative impact on performance and memory usage. Consider adding --add-opens=java.base/java.nio=ALL-UNNAMED to VM options. +2024-04-03 04:18:36.222+0000 INFO [o.n.i.d.DiagnosticsManager] + ******************************************************************************** + [ System diagnostics ] + ******************************************************************************** + -------------------------------------------------------------------------------- + [ System memory information ] + -------------------------------------------------------------------------------- + Total Physical memory: 16.00GiB + Free Physical memory: 115.1MiB + Committed virtual memory: 38.29GiB + Total swap space: 2.000GiB + Free swap space: 1.552GiB + + -------------------------------------------------------------------------------- + [ JVM memory information ] + -------------------------------------------------------------------------------- + Free memory: 148.0MiB + Total memory: 260.0MiB + Max memory: 4.000GiB + Garbage Collector: G1 Young Generation: [G1 Eden Space, G1 Survivor Space, G1 Old Gen] + Garbage Collector: G1 Old Generation: [G1 Eden Space, G1 Survivor Space, G1 Old Gen] + Memory Pool: CodeHeap 'non-nmethods' (Non-heap memory): committed=2.438MiB, used=1.208MiB, max=5.570MiB, threshold=0B + Memory Pool: Metaspace (Non-heap memory): committed=20.13MiB, used=19.77MiB, max=-1B, threshold=0B + Memory Pool: CodeHeap 'profiled nmethods' (Non-heap memory): committed=3.938MiB, used=3.927MiB, max=117.2MiB, threshold=0B + Memory Pool: Compressed Class Space (Non-heap memory): committed=2.313MiB, used=2.121MiB, max=1.000GiB, threshold=0B + Memory Pool: G1 Eden Space (Heap memory): committed=156.0MiB, used=84.00MiB, max=-1B, threshold=? + Memory Pool: G1 Old Gen (Heap memory): committed=100.0MiB, used=23.58MiB, max=4.000GiB, threshold=0B + Memory Pool: G1 Survivor Space (Heap memory): committed=4.000MiB, used=3.395MiB, max=-1B, threshold=? + Memory Pool: CodeHeap 'non-profiled nmethods' (Non-heap memory): committed=2.438MiB, used=983.9KiB, max=117.2MiB, threshold=0B + + -------------------------------------------------------------------------------- + [ Operating system information ] + -------------------------------------------------------------------------------- + Operating System: Mac OS X; version: 12.7.4; arch: x86_64; cpus: 8 + Max number of file descriptors: 10240 + Number of open file descriptors: 227 + Process id: 42640 + Byte order: LITTLE_ENDIAN + Local timezone: America/New_York + Memory page size: 4096 + Unaligned memory access allowed: true + + -------------------------------------------------------------------------------- + [ JVM information ] + -------------------------------------------------------------------------------- + VM Name: Java HotSpot(TM) 64-Bit Server VM + VM Vendor: Oracle Corporation + VM Version: 17.0.2+8-LTS-86 + JIT compiler: HotSpot 64-Bit Tiered Compilers + VM Arguments: [-Dvisualvm.id=74494328883025, -javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=56055:/Applications/IntelliJ IDEA.app/Contents/bin, -Dfile.encoding=UTF-8] + + -------------------------------------------------------------------------------- + [ Java classpath ] + -------------------------------------------------------------------------------- + [classpath] /Users/jnr6/.m2/repository/it/unimi/dsi/fastutil/8.5.13/fastutil-8.5.13.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-codec-http/4.1.101.Final/netty-codec-http-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/scala-library/2.13.11/scala-library-2.13.11.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-command-line/5.16.0/neo4j-command-line-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-epoll/4.1.101.Final/netty-transport-native-epoll-4.1.101.Final-linux-x86_64.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-common/4.1.101.Final/netty-common-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.16.0/jackson-databind-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-consistency-check/5.16.0/neo4j-consistency-check-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-values/5.16.0/neo4j-values-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-dbms/5.16.0/neo4j-dbms-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-analysis/9.6/asm-analysis-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-planner/5.16.0/neo4j-cypher-planner-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/antlr/antlr4-runtime/4.8/antlr4-runtime-4.8.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-api/3.2.13/docker-java-api-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/activation/jakarta.activation-api/1.2.1/jakarta.activation-api-1.2.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-planner-spi/5.16.0/neo4j-cypher-planner-spi-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-resource/5.16.0/neo4j-resource-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-servlet/10.0.17/jetty-servlet-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-cache/1.13.0/shiro-cache-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-javacc-parser/5.16.0/neo4j-cypher-javacc-parser-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/sun/istack/istack-commons-runtime/3.0.8/istack-commons-runtime-3.0.8.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-configuration2/2.9.0/commons-configuration2-2.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-compress/1.21/commons-compress-1.21.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/containers/jersey-container-servlet/2.34/jersey-container-servlet-2.34.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-kqueue/4.1.101.Final/netty-transport-native-kqueue-4.1.101.Final-osx-aarch_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-concurrent/5.16.0/neo4j-concurrent-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/mysql/1.17.4/mysql-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/mockito/mockito-core/5.7.0/mockito-core-5.7.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher/5.16.0/neo4j-cypher-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-capabilities/5.16.0/neo4j-capabilities-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-notifications/5.16.0/neo4j-notifications-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-import-util/5.16.0/neo4j-import-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-config/5.16.0/neo4j-cypher-config-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/containers/jersey-container-servlet-core/2.34/jersey-container-servlet-core-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-io/5.16.0/neo4j-io-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-locator/2.6.1/hk2-locator-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-lang3/3.13.0/commons-lang3-3.13.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.16.0/jackson-core-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/mysql/mysql-connector-j/8.2.0/mysql-connector-j-8.2.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-classes-epoll/4.1.101.Final/netty-transport-classes-epoll-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/objenesis/objenesis/3.3/objenesis-3.3.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-server/2.34/jersey-server-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-client/2.34/jersey-client-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-ast-factory/5.16.0/neo4j-cypher-ast-factory-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-handler/4.1.101.Final/netty-handler-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j/5.16.0/neo4j-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/google/code/gson/gson/2.9.0/gson-2.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-logging/5.16.0/neo4j-logging-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-webapp/10.0.17/jetty-webapp-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-core/9.8.0/lucene-core-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-kernel-api/5.16.0/neo4j-kernel-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcutil-jdk18on/1.76/bcutil-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/bitbucket/inkytonik/kiama/kiama_2.13/2.5.1/kiama_2.13-2.5.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-common/5.16.0/neo4j-common-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/junit/junit/4.13.2/junit-4.13.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-index/5.16.0/neo4j-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport/4.1.101.Final/netty-transport-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-util/9.6/asm-util-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/jctools/jctools-core/4.0.2/jctools-core-4.0.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-graphdb-api/5.16.0/neo4j-graphdb-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/jdbc/1.17.4/jdbc-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-runtime-util/5.16.0/neo4j-cypher-runtime-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/collections/eclipse-collections-api/11.1.0/eclipse-collections-api-11.1.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-unsafe/5.16.0/neo4j-unsafe-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-server/10.0.17/jetty-server-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcprov-jdk18on/1.76/bcprov-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-slotted-runtime/5.16.0/neo4j-cypher-slotted-runtime-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-layout-template-json/2.20.0/log4j-layout-template-json-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-fulltext-index/5.16.0/neo4j-fulltext-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/net/java/dev/jna/jna/5.8.0/jna-5.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-util/10.0.17/jetty-util-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-expressions/5.16.0/neo4j-expressions-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-transport/3.2.13/docker-java-transport-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/commons-logging/commons-logging/1.2/commons-logging-1.2.jar + [classpath] /Users/jnr6/IdeaProjects/policy-machine-core/target/classes + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-testkit/1.10.0/junit-platform-testkit-1.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-core/1.13.0/shiro-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-physical-planning/5.16.0/neo4j-cypher-physical-planning-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-storage-engine-util/5.16.0/neo4j-storage-engine-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-ast/5.16.0/neo4j-ast-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-core/2.20.0/log4j-core-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-params/5.9.0/junit-jupiter-params-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/external/jakarta.inject/2.6.1/jakarta.inject-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/inject/jersey-hk2/2.34/jersey-hk2-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/hamcrest/hamcrest/2.2/hamcrest-2.2.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jaxb/jaxb-runtime/2.3.2/jaxb-runtime-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-logical-plans/5.16.0/neo4j-cypher-logical-plans-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-xml/10.0.17/jetty-xml-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar + [classpath] /Users/jnr6/.m2/repository/org/codehaus/jettison/jettison/1.5.4/jettison-1.5.4.jar + [classpath] /Users/jnr6/.m2/repository/com/propensive/mercator_2.13/0.2.1/mercator_2.13-0.2.1.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jaxb/txw2/2.3.2/txw2-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-resolver/4.1.101.Final/netty-resolver-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar + [classpath] /Users/jnr6/.m2/repository/org/awaitility/awaitility/4.2.0/awaitility-4.2.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-codec/4.1.101.Final/netty-codec-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-buffer/4.1.101.Final/netty-buffer-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-hash/1.13.0/shiro-crypto-hash-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/info/picocli/picocli/4.7.5/picocli-4.7.5.jar + [classpath] /Users/jnr6/.m2/repository/com/profesorfalken/jPowerShell/3.0/jPowerShell-3.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-cipher/1.13.0/shiro-crypto-cipher-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-lang/1.13.0/shiro-lang-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-token-api/5.16.0/neo4j-token-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-bolt/5.16.0/neo4j-bolt-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-record-storage-engine/5.16.0/neo4j-record-storage-engine-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-epoll/4.1.101.Final/netty-transport-native-epoll-4.1.101.Final-linux-aarch_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-ir/5.16.0/neo4j-cypher-ir-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/test-utils/5.15.0/test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter/5.10.0/junit-jupiter-5.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/app/neo4j-server-test-utils/5.15.0/neo4j-server-test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/rnorth/duct-tape/duct-tape/1.0.8/duct-tape-1.0.8.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/modules/scala-collection-contrib_2.13/0.3.0/scala-collection-contrib_2.13-0.3.0.jar + [classpath] /Users/jnr6/.m2/repository/org/slf4j/slf4j-api/2.0.0/slf4j-api-2.0.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-analysis-common/9.8.0/lucene-analysis-common-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/com/propensive/magnolia_2.13/0.17.0/magnolia_2.13-0.17.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-event/1.13.0/shiro-event-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-api/2.20.0/log4j-api-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-classes-kqueue/4.1.101.Final/netty-transport-classes-kqueue-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/net/bytebuddy/byte-buddy-agent/1.14.9/byte-buddy-agent-1.14.9.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/validation/jakarta.validation-api/2.0.2/jakarta.validation-api-2.0.2.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/database-commons/1.17.4/database-commons-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-front-end/5.16.0/neo4j-front-end-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-procedure/5.16.0/neo4j-procedure-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-import-tool/5.16.0/neo4j-import-tool-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/ws/rs/jakarta.ws.rs-api/2.1.6/jakarta.ws.rs-api-2.1.6.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.10.3/jackson-annotations-2.10.3.jar + [classpath] /Users/jnr6/.m2/repository/com/google/protobuf/protobuf-java/3.21.9/protobuf-java-3.21.9.jar + [classpath] /Users/jnr6/.m2/repository/io/projectreactor/reactor-core/3.6.0/reactor-core-3.6.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-wal/5.16.0/neo4j-wal-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-ssl/5.16.0/neo4j-ssl-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-unix-common/4.1.101.Final/netty-transport-native-unix-common-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-config-core/1.13.0/shiro-config-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-codegen/5.16.0/neo4j-codegen-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-tree/9.6/asm-tree-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-rewriting/5.16.0/neo4j-rewriting-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-backward-codecs/9.8.0/lucene-backward-codecs-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-lock/5.16.0/neo4j-lock-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-schema/5.16.0/neo4j-schema-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/collections/eclipse-collections/11.1.0/eclipse-collections-11.1.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/luben/zstd-jni/1.5.5-10/zstd-jni-1.5.5-10.jar + [classpath] /Users/jnr6/.m2/repository/commons-codec/commons-codec/1.16.0/commons-codec-1.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/jaxrs/jackson-jaxrs-json-provider/2.16.0/jackson-jaxrs-json-provider-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-expression-evaluator/5.16.0/neo4j-cypher-expression-evaluator-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/testcontainers/1.17.4/testcontainers-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/test/neo4j-harness/5.15.0/neo4j-harness-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/javassist/javassist/3.25.0-GA/javassist-3.25.0-GA.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-core/1.13.0/shiro-crypto-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-commons/1.9.0/junit-platform-commons-1.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-utils/2.6.1/hk2-utils-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/io-test-utils/5.15.0/io-test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/annotations/5.16.0/annotations-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-interpreted-runtime/5.16.0/neo4j-cypher-interpreted-runtime-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-cache/5.16.0/neo4j-cypher-cache-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jetbrains/annotations/17.0.0/annotations-17.0.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-layout/5.16.0/neo4j-layout-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/reactivestreams/reactive-streams/1.0.4/reactive-streams-1.0.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/licensing-proxy/zstd-proxy/5.16.0/zstd-proxy-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-security/5.16.0/neo4j-security-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-common/2.34/jersey-common-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/scala-reflect/2.13.11/scala-reflect-2.13.11.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/junit-jupiter/1.17.4/junit-jupiter-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-random-values/5.15.0/neo4j-random-values-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-transport-zerodep/3.2.13/docker-java-transport-zerodep-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-diagnostics/5.16.0/neo4j-diagnostics-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-http/10.0.17/jetty-http-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/cypher-ast-factory/5.16.0/cypher-ast-factory-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-configuration/5.16.0/neo4j-configuration-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-exceptions/5.16.0/neo4j-exceptions-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-util/5.16.0/neo4j-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-id-generator/5.16.0/neo4j-id-generator-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/seancfoley/ipaddress/5.4.0/ipaddress-5.4.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-io/10.0.17/jetty-io-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/commons-io/commons-io/2.11.0/commons-io-2.11.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-queryparser/9.8.0/lucene-queryparser-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/xml/bind/jakarta.xml.bind-api/2.3.2/jakarta.xml.bind-api-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-kernel/5.16.0/neo4j-kernel-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-fabric/5.16.0/neo4j-fabric-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-spatial-index/5.16.0/neo4j-spatial-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-procedure-api/5.16.0/neo4j-procedure-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/sun/xml/fastinfoset/FastInfoset/1.2.16/FastInfoset-1.2.16.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-lucene-index/5.16.0/neo4j-lucene-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/net/bytebuddy/byte-buddy/1.14.9/byte-buddy-1.14.9.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-query-router/5.16.0/neo4j-query-router-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-csv/5.16.0/neo4j-csv-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/toolchain/jetty-servlet-api/4.0.6/jetty-servlet-api-4.0.6.jar + [classpath] /Users/jnr6/IdeaProjects/policy-machine-core/target/test-classes + [classpath] /Users/jnr6/.m2/repository/com/github/ben-manes/caffeine/caffeine/3.1.8/caffeine-3.1.8.jar + [classpath] /Users/jnr6/.m2/repository/com/profesorfalken/WMI4Java/1.6.3/WMI4Java-1.6.3.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/vintage/junit-vintage-engine/5.10.0/junit-vintage-engine-5.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-collections/5.16.0/neo4j-collections-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/assertj/assertj-core/3.24.2/assertj-core-3.24.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-graph-algo/5.16.0/neo4j-graph-algo-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.9.0/junit-jupiter-engine-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jvnet/staxex/stax-ex/1.8.1/stax-ex-1.8.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/app/neo4j-server/5.16.0/neo4j-server-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-monitoring/5.16.0/neo4j-monitoring-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-macros/5.16.0/neo4j-cypher-macros-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jprocesses/jProcesses/1.6.5/jProcesses-1.6.5.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-api/2.6.1/hk2-api-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.9.0/junit-jupiter-api-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-security/10.0.17/jetty-security-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcpkix-jdk18on/1.76/bcpkix-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-engine/1.9.0/junit-platform-engine-1.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-slf4j-provider/5.16.0/neo4j-slf4j-provider-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-kqueue/4.1.101.Final/netty-transport-native-kqueue-4.1.101.Final-osx-x86_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-data-collector/5.16.0/neo4j-data-collector-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/server-api/5.16.0/server-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-native/5.16.0/neo4j-native-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/module/jackson-module-jaxb-annotations/2.16.0/jackson-module-jaxb-annotations-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm/9.6/asm-9.6.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/jaxrs/jackson-jaxrs-base/2.16.0/jackson-jaxrs-base-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar + + -------------------------------------------------------------------------------- + [ Library path ] + -------------------------------------------------------------------------------- + /Users/jnr6/Library/Java/Extensions + /Library/Java/Extensions + /Network/Library/Java/Extensions + /System/Library/Java/Extensions + /usr/lib/java + /Users/jnr6/IdeaProjects/policy-machine-core + + -------------------------------------------------------------------------------- + [ System properties ] + -------------------------------------------------------------------------------- + sun.jnu.encoding = UTF-8 + sun.arch.data.model = 64 + user.timezone = America/New_York + visualvm.id = 74494328883025 + sun.java.launcher = SUN_STANDARD + user.country = US + sun.boot.library.path = /Library/Java/JavaVirtualMachines/jdk-17.0.2.jdk/Contents/Home/lib + sun.java.command = gov.nist.csd.pm.pap.neo4j.ImportTest + jdk.debug = release + sun.cpu.endian = little + user.home = /Users/jnr6 + user.language = en + file.separator = / + sun.management.compiler = HotSpot 64-Bit Tiered Compilers + user.name = jnr6 + path.separator = : + file.encoding = UTF-8 + jnidispatch.path = /Users/jnr6/Library/Caches/JNA/temp/jna15730937095053768034.tmp + jna.loaded = true + user.dir = /Users/jnr6/IdeaProjects/policy-machine-core + native.encoding = UTF-8 + sun.io.unicode.encoding = UnicodeBig + + -------------------------------------------------------------------------------- + [ (IANA) TimeZone database version ] + -------------------------------------------------------------------------------- + TimeZone version: 2021e (available for 601 zone identifiers) + + -------------------------------------------------------------------------------- + [ Network information ] + -------------------------------------------------------------------------------- + Interface utun2: + address: fe80:0:0:0:ce81:b1c:bd2c:69e%utun2 + Interface utun1: + address: fe80:0:0:0:bbf5:1c30:4238:57b2%utun1 + Interface utun0: + address: fe80:0:0:0:73be:4eb:3f31:a891%utun0 + Interface llw0: + address: fe80:0:0:0:c0a6:71ff:fe04:534c%llw0 + Interface awdl0: + address: fe80:0:0:0:c0a6:71ff:fe04:534c%awdl0 + Interface en0: + address: 192.168.1.247 + Interface lo0: + address: fe80:0:0:0:0:0:0:1%lo0 + address: 0:0:0:0:0:0:0:1%lo0 + address: 127.0.0.1 + + -------------------------------------------------------------------------------- + [ Native access information ] + -------------------------------------------------------------------------------- + Native access details: Native access is not available for current platform. + + -------------------------------------------------------------------------------- + [ DBMS config ] + -------------------------------------------------------------------------------- + DBMS provided settings: + server.bolt.enabled=true + server.bolt.listen_address=localhost:9999 + server.directories.neo4j_home=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + Directories in use: + server.directories.data=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data + server.directories.dumps.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/dumps + server.directories.import=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + server.directories.lib=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/lib + server.directories.licenses=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/licenses + server.directories.logs=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/logs + server.directories.neo4j_home=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + server.directories.plugins=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/plugins + server.directories.run=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/run + server.directories.script.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/scripts + server.directories.transaction.logs.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions + + -------------------------------------------------------------------------------- + [ Packaging ] + -------------------------------------------------------------------------------- + Could not read packaging info: java.nio.file.NoSuchFileException: /Users/jnr6/IdeaProjects/policy-machine-core/testdb/packaging_info + +2024-04-03 04:18:36.362+0000 INFO [o.n.d.i.DefaultIdentityModule] Found ServerId on disk: ServerId{54490f53} (54490f53-4b94-4d0f-9604-023c3fe1be5e) +2024-04-03 04:18:36.363+0000 INFO [o.n.d.i.DefaultIdentityModule] This instance is ServerId{54490f53} (54490f53-4b94-4d0f-9604-023c3fe1be5e) +2024-04-03 04:18:37.166+0000 INFO [o.n.d.d.DatabaseLifecycles] Creating 'DatabaseId{00000000[system]}'. +2024-04-03 04:18:37.361+0000 INFO [o.n.b.BoltServer] Using connector transport KQueue +2024-04-03 04:18:37.482+0000 INFO [o.n.b.BoltServer] Configured external Bolt connector with listener address localhost/127.0.0.1:9999 +2024-04-03 04:18:37.482+0000 INFO [o.n.b.BoltServer] Bolt server loaded +2024-04-03 04:18:37.497+0000 INFO [o.n.d.d.DatabaseLifecycles] Starting 'DatabaseId{00000000[system]}'. +2024-04-03 04:18:37.777+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [system/00000000] Scanning log file with version 0 for checkpoint entries +2024-04-03 04:18:37.857+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [system/00000000] Selected RecordFormat:PageAlignedV5_0[aligned-1.1] record format from store /Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system +2024-04-03 04:18:37.857+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [system/00000000] Selected format from the store files: RecordFormat:PageAlignedV5_0[aligned-1.1] +2024-04-03 04:18:38.469+0000 INFO [o.n.i.d.DiagnosticsManager] [system/00000000] + [system/00000000] ******************************************************************************** + [system/00000000] [ Database: system ] + [system/00000000] ******************************************************************************** + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Version ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] DBMS: community record-aligned-1.1 + [system/00000000] Kernel version: 5.16.0 + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Store files ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] Disk space on partition (Total / Free / Free %): 500068036608 / 109544579072 / 21 + [system/00000000] Storage files stored on file store: apfs + [system/00000000] Storage files: (filename : modification date - size) + [system/00000000] database_lock: 2024-04-03 04:12:32.900+0000 - 0B + [system/00000000] neostore: 2024-04-03 04:12:32.662+0000 - 8.000KiB + [system/00000000] neostore.counts.db: 2024-04-03 04:18:38.280+0000 - 48.00KiB + [system/00000000] neostore.indexstats.db: 2024-04-03 04:18:38.328+0000 - 48.00KiB + [system/00000000] neostore.labeltokenstore.db: 2024-04-03 04:12:39.430+0000 - 8.000KiB + [system/00000000] neostore.labeltokenstore.db.id: 2024-04-03 04:18:38.209+0000 - 40.00KiB + [system/00000000] neostore.labeltokenstore.db.names: 2024-04-03 04:12:39.454+0000 - 8.000KiB + [system/00000000] neostore.labeltokenstore.db.names.id: 2024-04-03 04:18:38.194+0000 - 40.00KiB + [system/00000000] neostore.nodestore.db: 2024-04-03 04:12:39.416+0000 - 8.000KiB + [system/00000000] neostore.nodestore.db.id: 2024-04-03 04:18:38.051+0000 - 40.00KiB + [system/00000000] neostore.nodestore.db.labels: 2024-04-03 04:12:32.509+0000 - 8.000KiB + [system/00000000] neostore.nodestore.db.labels.id: 2024-04-03 04:18:38.027+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db: 2024-04-03 04:12:39.442+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.arrays: 2024-04-03 04:12:32.565+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.arrays.id: 2024-04-03 04:18:38.116+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.id: 2024-04-03 04:18:38.131+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.index: 2024-04-03 04:12:39.477+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.index.id: 2024-04-03 04:18:38.086+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.index.keys: 2024-04-03 04:12:39.464+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.index.keys.id: 2024-04-03 04:18:38.071+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.strings: 2024-04-03 04:12:39.367+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.strings.id: 2024-04-03 04:18:38.100+0000 - 40.00KiB + [system/00000000] neostore.relationshipgroupstore.db: 2024-04-03 04:12:32.640+0000 - 8.000KiB + [system/00000000] neostore.relationshipgroupstore.db.id: 2024-04-03 04:18:38.238+0000 - 40.00KiB + [system/00000000] neostore.relationshipgroupstore.degrees.db: 2024-04-03 04:18:38.307+0000 - 40.00KiB + [system/00000000] neostore.relationshipstore.db: 2024-04-03 04:12:39.378+0000 - 8.000KiB + [system/00000000] neostore.relationshipstore.db.id: 2024-04-03 04:18:38.143+0000 - 40.00KiB + [system/00000000] neostore.relationshiptypestore.db: 2024-04-03 04:12:39.405+0000 - 8.000KiB + [system/00000000] neostore.relationshiptypestore.db.id: 2024-04-03 04:18:38.171+0000 - 40.00KiB + [system/00000000] neostore.relationshiptypestore.db.names: 2024-04-03 04:12:39.392+0000 - 8.000KiB + [system/00000000] neostore.relationshiptypestore.db.names.id: 2024-04-03 04:18:38.157+0000 - 40.00KiB + [system/00000000] neostore.schemastore.db: 2024-04-03 04:12:39.490+0000 - 8.000KiB + [system/00000000] neostore.schemastore.db.id: 2024-04-03 04:18:38.224+0000 - 40.00KiB + [system/00000000] schema: + [system/00000000] index: + [system/00000000] range-1.0: + [system/00000000] 3: + [system/00000000] index-3: 2024-04-03 04:12:39.549+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.321+0000 - 48.00KiB + [system/00000000] 4: + [system/00000000] index-4: 2024-04-03 04:12:39.558+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.437+0000 - 48.00KiB + [system/00000000] 7: + [system/00000000] index-7: 2024-04-03 04:12:39.569+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.907+0000 - 48.00KiB + [system/00000000] 8: + [system/00000000] index-8: 2024-04-03 04:12:39.591+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.997+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.996+0000 - 192.0KiB + [system/00000000] token-lookup-1.0: + [system/00000000] 1: + [system/00000000] index-1: 2024-04-03 04:12:39.526+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:33.516+0000 - 48.00KiB + [system/00000000] 2: + [system/00000000] index-2: 2024-04-03 04:12:39.539+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:33.409+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:33.515+0000 - 96.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.321+0000 - 288.0KiB + [system/00000000] - Total: 2024-04-03 04:12:33.407+0000 - 288.0KiB + [system/00000000] Storage summary: + [system/00000000] Total size of store: 1.078MiB + [system/00000000] Total size of mapped files: 408.0KiB + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Transaction log ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] Transaction log files stored on file store: apfs + [system/00000000] Transaction log metadata: + [system/00000000] - current kernel version used in transactions: V5_15 + [system/00000000] - last committed transaction id: 37 + [system/00000000] Transaction log files: + [system/00000000] - existing transaction log versions: 0-0 + [system/00000000] - oldest transaction 2 found in log with version 0 + [system/00000000] - files: (filename : creation date - size) + [system/00000000] neostore.transaction.db.0: 2024-04-03 04:12:32.000+0000 - 19.26KiB + [system/00000000] - total size of files: 19.26KiB + [system/00000000] Checkpoint log files: + [system/00000000] - existing checkpoint log versions: 0-0 + [system/00000000] - last checkpoint: CheckpointInfo[transactionLogPosition=LogPosition{logVersion=0, byteOffset=19725}, storeId=StoreId{creationTime=1712117552660, random=4552926301767966796, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1}, checkpointEntryPosition=LogPosition{logVersion=0, byteOffset=360}, channelPositionAfterCheckpoint=LogPosition{logVersion=0, byteOffset=592}, checkpointFilePostReadPosition=LogPosition{logVersion=0, byteOffset=592}, kernelVersion=KernelVersion{V5_15,version=14}, kernelVersionByte=14, transactionId=TransactionId[transactionId=37, checksum=-1026009811, commitTimestamp=1712117555154, consensusIndex=-1], reason=Checkpoint triggered by "Database shutdown" @ txId: 37, consensusIndexInCheckpoint=true] + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Id usage ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] ArrayPropertyStore[neostore.nodestore.db.labels]: used=1 high=0 + [system/00000000] NodeStore[neostore.nodestore.db]: used=6 high=5 + [system/00000000] StringPropertyStore[neostore.propertystore.db.index.keys]: used=44 high=43 + [system/00000000] PropertyIndexStore[neostore.propertystore.db.index]: used=31 high=30 + [system/00000000] StringPropertyStore[neostore.propertystore.db.strings]: used=3 high=2 + [system/00000000] ArrayPropertyStore[neostore.propertystore.db.arrays]: used=1 high=0 + [system/00000000] PropertyStore[neostore.propertystore.db]: used=59 high=58 + [system/00000000] RelationshipStore[neostore.relationshipstore.db]: used=2 high=1 + [system/00000000] StringPropertyStore[neostore.relationshiptypestore.db.names]: used=2 high=1 + [system/00000000] RelationshipTypeStore[neostore.relationshiptypestore.db]: used=1 high=0 + [system/00000000] StringPropertyStore[neostore.labeltokenstore.db.names]: used=5 high=4 + [system/00000000] LabelTokenStore[neostore.labeltokenstore.db]: used=4 high=3 + [system/00000000] SchemaStore[neostore.schemastore.db]: used=11 high=10 + [system/00000000] RelationshipGroupStore[neostore.relationshipgroupstore.db]: used=1 high=0 + [system/00000000] NeoStore[neostore]: used=-1 high=-1 + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Metadata ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] EXTERNAL_STORE_UUID (Database identifier exposed as external store identity. Generated on creation and never updated): 8e4fd9af-0e04-47d8-a19c-cdb72dbda752 + [system/00000000] DATABASE_ID (The last used DatabaseId for this database): null + [system/00000000] LEGACY_STORE_VERSION (Legacy store format version. This field is used from 5.0 onwards only to distinguish non-migrated pre 5.0 metadata stores.): -3523014627327384477 + [system/00000000] STORE_ID (Store ID): StoreId{creationTime=1712117552660, random=4552926301767966796, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1} + [system/00000000] +2024-04-03 04:18:38.797+0000 INFO [o.n.k.i.a.i.IndexingService] [system/00000000] IndexingService.init: indexes not specifically mentioned above are ONLINE. Total 6 indexes. Processed in 149ms +2024-04-03 04:18:38.801+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] Requirement `Database unavailable` makes database system unavailable. +2024-04-03 04:18:38.802+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] DatabaseId{00000000[system]} is unavailable. +2024-04-03 04:18:38.862+0000 INFO [o.n.k.d.Database] [system/00000000] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/system/neostore.transaction.db.0] at version=0 +2024-04-03 04:18:38.865+0000 INFO [o.n.k.d.Database] [system/00000000] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/system/checkpoint.0] at version=0 +2024-04-03 04:18:38.866+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [system/00000000] Scanning log file with version 0 for checkpoint entries +2024-04-03 04:18:38.869+0000 INFO [o.n.k.i.a.i.IndexingService] [system/00000000] IndexingService.start: indexes not specifically mentioned above are ONLINE. Total 6 indexes. Processed in 0ms +2024-04-03 04:18:38.899+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] Fulfilling of requirement 'Database unavailable' makes database system available. +2024-04-03 04:18:38.899+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] DatabaseId{00000000[system]} is ready. +2024-04-03 04:18:39.009+0000 INFO [o.n.s.s.s.UserSecurityGraphComponent] Performing postInitialization step for component 'security-users' with version 4 and status CURRENT +2024-04-03 04:18:39.009+0000 INFO [o.n.s.s.s.UserSecurityGraphComponent] Updating the initial password in component 'security-users' +2024-04-03 04:18:39.022+0000 INFO [o.n.d.d.DatabaseLifecycles] Creating 'DatabaseId{fefd0874[neo4j]}'. +2024-04-03 04:18:39.025+0000 INFO [o.n.d.d.DatabaseLifecycles] Starting 'DatabaseId{fefd0874[neo4j]}'. +2024-04-03 04:18:39.045+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [neo4j/fefd0874] Scanning log file with version 0 for checkpoint entries +2024-04-03 04:18:39.062+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected RecordFormat:PageAlignedV5_0[aligned-1.1] record format from store /Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j +2024-04-03 04:18:39.062+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected format from the store files: RecordFormat:PageAlignedV5_0[aligned-1.1] +2024-04-03 04:18:39.321+0000 INFO [o.n.i.d.DiagnosticsManager] [neo4j/fefd0874] + [neo4j/fefd0874] ******************************************************************************** + [neo4j/fefd0874] [ Database: neo4j ] + [neo4j/fefd0874] ******************************************************************************** + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Version ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] DBMS: community record-aligned-1.1 + [neo4j/fefd0874] Kernel version: 5.16.0 + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Store files ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] Disk space on partition (Total / Free / Free %): 500068036608 / 109544583168 / 21 + [neo4j/fefd0874] Storage files stored on file store: apfs + [neo4j/fefd0874] Storage files: (filename : modification date - size) + [neo4j/fefd0874] database_lock: 2024-04-03 04:12:35.327+0000 - 0B + [neo4j/fefd0874] neostore: 2024-04-03 04:12:35.301+0000 - 8.000KiB + [neo4j/fefd0874] neostore.counts.db: 2024-04-03 04:18:39.269+0000 - 48.00KiB + [neo4j/fefd0874] neostore.indexstats.db: 2024-04-03 04:18:39.294+0000 - 40.00KiB + [neo4j/fefd0874] neostore.labeltokenstore.db: 2024-04-03 04:12:38.210+0000 - 8.000KiB + [neo4j/fefd0874] neostore.labeltokenstore.db.id: 2024-04-03 04:18:39.220+0000 - 40.00KiB + [neo4j/fefd0874] neostore.labeltokenstore.db.names: 2024-04-03 04:12:38.182+0000 - 8.000KiB + [neo4j/fefd0874] neostore.labeltokenstore.db.names.id: 2024-04-03 04:18:39.208+0000 - 40.00KiB + [neo4j/fefd0874] neostore.nodestore.db: 2024-04-03 04:12:38.172+0000 - 8.000KiB + [neo4j/fefd0874] neostore.nodestore.db.id: 2024-04-03 04:18:39.077+0000 - 40.00KiB + [neo4j/fefd0874] neostore.nodestore.db.labels: 2024-04-03 04:12:35.189+0000 - 8.000KiB + [neo4j/fefd0874] neostore.nodestore.db.labels.id: 2024-04-03 04:18:39.065+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db: 2024-04-03 04:12:38.196+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.arrays: 2024-04-03 04:12:35.234+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.arrays.id: 2024-04-03 04:18:39.134+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.id: 2024-04-03 04:18:39.149+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.index: 2024-04-03 04:12:38.160+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.index.id: 2024-04-03 04:18:39.103+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.index.keys: 2024-04-03 04:12:38.151+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.index.keys.id: 2024-04-03 04:18:39.089+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.strings: 2024-04-03 04:12:35.222+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.strings.id: 2024-04-03 04:18:39.121+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshipgroupstore.db: 2024-04-03 04:12:35.289+0000 - 8.000KiB + [neo4j/fefd0874] neostore.relationshipgroupstore.db.id: 2024-04-03 04:18:39.255+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshipgroupstore.degrees.db: 2024-04-03 04:18:39.281+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshipstore.db: 2024-04-03 04:12:35.245+0000 - 0B + [neo4j/fefd0874] neostore.relationshipstore.db.id: 2024-04-03 04:18:39.162+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshiptypestore.db: 2024-04-03 04:12:35.259+0000 - 0B + [neo4j/fefd0874] neostore.relationshiptypestore.db.id: 2024-04-03 04:18:39.193+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshiptypestore.db.names: 2024-04-03 04:12:35.246+0000 - 8.000KiB + [neo4j/fefd0874] neostore.relationshiptypestore.db.names.id: 2024-04-03 04:18:39.181+0000 - 40.00KiB + [neo4j/fefd0874] neostore.schemastore.db: 2024-04-03 04:12:36.054+0000 - 8.000KiB + [neo4j/fefd0874] neostore.schemastore.db.id: 2024-04-03 04:18:39.238+0000 - 40.00KiB + [neo4j/fefd0874] schema: + [neo4j/fefd0874] index: + [neo4j/fefd0874] token-lookup-1.0: + [neo4j/fefd0874] 1: + [neo4j/fefd0874] index-1: 2024-04-03 04:12:38.253+0000 - 48.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.459+0000 - 48.00KiB + [neo4j/fefd0874] 2: + [neo4j/fefd0874] index-2: 2024-04-03 04:12:38.266+0000 - 40.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.390+0000 - 40.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.459+0000 - 88.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.390+0000 - 88.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.390+0000 - 88.00KiB + [neo4j/fefd0874] Storage summary: + [neo4j/fefd0874] Total size of store: 880.0KiB + [neo4j/fefd0874] Total size of mapped files: 192.0KiB + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Transaction log ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] Transaction log files stored on file store: apfs + [neo4j/fefd0874] Transaction log metadata: + [neo4j/fefd0874] - current kernel version used in transactions: V5_15 + [neo4j/fefd0874] - last committed transaction id: 7 + [neo4j/fefd0874] Transaction log files: + [neo4j/fefd0874] - existing transaction log versions: 0-0 + [neo4j/fefd0874] - oldest transaction 2 found in log with version 0 + [neo4j/fefd0874] - files: (filename : creation date - size) + [neo4j/fefd0874] neostore.transaction.db.0: 2024-04-03 04:12:35.000+0000 - 3.650KiB + [neo4j/fefd0874] - total size of files: 3.650KiB + [neo4j/fefd0874] Checkpoint log files: + [neo4j/fefd0874] - existing checkpoint log versions: 0-0 + [neo4j/fefd0874] - last checkpoint: CheckpointInfo[transactionLogPosition=LogPosition{logVersion=0, byteOffset=3738}, storeId=StoreId{creationTime=1712117555300, random=260265064831090288, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1}, checkpointEntryPosition=LogPosition{logVersion=0, byteOffset=360}, channelPositionAfterCheckpoint=LogPosition{logVersion=0, byteOffset=592}, checkpointFilePostReadPosition=LogPosition{logVersion=0, byteOffset=592}, kernelVersion=KernelVersion{V5_15,version=14}, kernelVersionByte=14, transactionId=TransactionId[transactionId=7, checksum=1516686099, commitTimestamp=1712117556227, consensusIndex=-1], reason=Checkpoint triggered by "Database shutdown" @ txId: 7, consensusIndexInCheckpoint=true] + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Id usage ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] ArrayPropertyStore[neostore.nodestore.db.labels]: used=1 high=0 + [neo4j/fefd0874] NodeStore[neostore.nodestore.db]: used=1 high=0 + [neo4j/fefd0874] StringPropertyStore[neostore.propertystore.db.index.keys]: used=22 high=21 + [neo4j/fefd0874] PropertyIndexStore[neostore.propertystore.db.index]: used=12 high=11 + [neo4j/fefd0874] StringPropertyStore[neostore.propertystore.db.strings]: used=1 high=0 + [neo4j/fefd0874] ArrayPropertyStore[neostore.propertystore.db.arrays]: used=1 high=0 + [neo4j/fefd0874] PropertyStore[neostore.propertystore.db]: used=9 high=8 + [neo4j/fefd0874] RelationshipStore[neostore.relationshipstore.db]: used=0 high=-1 + [neo4j/fefd0874] StringPropertyStore[neostore.relationshiptypestore.db.names]: used=1 high=0 + [neo4j/fefd0874] RelationshipTypeStore[neostore.relationshiptypestore.db]: used=0 high=-1 + [neo4j/fefd0874] StringPropertyStore[neostore.labeltokenstore.db.names]: used=2 high=1 + [neo4j/fefd0874] LabelTokenStore[neostore.labeltokenstore.db]: used=1 high=0 + [neo4j/fefd0874] SchemaStore[neostore.schemastore.db]: used=3 high=2 + [neo4j/fefd0874] RelationshipGroupStore[neostore.relationshipgroupstore.db]: used=1 high=0 + [neo4j/fefd0874] NeoStore[neostore]: used=-1 high=-1 + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Metadata ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] EXTERNAL_STORE_UUID (Database identifier exposed as external store identity. Generated on creation and never updated): 485f4e4f-d438-40c9-a4ed-0bc1099d976f + [neo4j/fefd0874] DATABASE_ID (The last used DatabaseId for this database): null + [neo4j/fefd0874] LEGACY_STORE_VERSION (Legacy store format version. This field is used from 5.0 onwards only to distinguish non-migrated pre 5.0 metadata stores.): -3523014627327384477 + [neo4j/fefd0874] STORE_ID (Store ID): StoreId{creationTime=1712117555300, random=260265064831090288, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1} + [neo4j/fefd0874] +2024-04-03 04:18:39.370+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.init: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 46ms +2024-04-03 04:18:39.371+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] Requirement `Database unavailable` makes database neo4j unavailable. +2024-04-03 04:18:39.372+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] DatabaseId{fefd0874[neo4j]} is unavailable. +2024-04-03 04:18:39.375+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/neo4j/neostore.transaction.db.0] at version=0 +2024-04-03 04:18:39.377+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/neo4j/checkpoint.0] at version=0 +2024-04-03 04:18:39.379+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [neo4j/fefd0874] Scanning log file with version 0 for checkpoint entries +2024-04-03 04:18:39.380+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.start: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 0ms +2024-04-03 04:18:39.381+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] Fulfilling of requirement 'Database unavailable' makes database neo4j available. +2024-04-03 04:18:39.381+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] DatabaseId{fefd0874[neo4j]} is ready. +2024-04-03 04:18:39.427+0000 INFO [o.n.b.p.c.c.n.SocketNettyConnector] Bolt enabled on localhost:9999. +2024-04-03 04:18:39.427+0000 INFO [o.n.b.BoltServer] Bolt server started +2024-04-03 04:18:39.430+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] id: 266B93A8C1445AE734BA77BB99FDF56964B6082641ED1A3E87435C6A5111E836 +2024-04-03 04:18:39.430+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] name: system +2024-04-03 04:18:39.431+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] creationDate: 2024-04-03T04:12:32.66Z +2024-04-03 04:21:09.094+0000 INFO [o.n.g.f.m.GlobalModule] Logging config in use: Embedded default config 'default-server-logs.xml' +2024-04-03 04:21:09.254+0000 WARN [o.n.k.i.JvmChecker] The max heap memory has not been configured. It is recommended that it is always explicitly configured, to ensure the system has a balanced configuration. Until then, a JVM computed heuristic of 4294967296 bytes is used instead. If you are running neo4j server, you need to configure server.memory.heap.max_size in neo4j.conf. If you are running neo4j embedded, you have to launch the JVM with -Xmx set to a value. You can run neo4j-admin server memory-recommendation for memory configuration suggestions. +2024-04-03 04:21:09.254+0000 WARN [o.n.k.i.JvmChecker] The initial heap memory has not been configured. It is recommended that it is always explicitly configured, to ensure the system has a balanced configuration. Until then, a JVM computed heuristic of 268435456 bytes is used instead. If you are running neo4j server, you need to configure server.memory.heap.initial_size in neo4j.conf. If you are running neo4j embedded, you have to launch the JVM with -Xms set to a value. You can run neo4j-admin server memory-recommendation for memory configuration suggestions. +2024-04-03 04:21:09.287+0000 WARN [o.n.i.p.PageCache] The server.memory.pagecache.size setting has not been configured. It is recommended that this setting is always explicitly configured, to ensure the system has a balanced configuration. Until then, a computed heuristic value of 6442450944 bytes will be used instead. Run `neo4j-admin memory-recommendation` for memory configuration suggestions. +2024-04-03 04:21:09.288+0000 WARN [o.n.i.p.PageCache] Reflection access to java.nio.DirectByteBuffer is not available, using fallback mode. This could have negative impact on performance and memory usage. Consider adding --add-opens=java.base/java.nio=ALL-UNNAMED to VM options. +2024-04-03 04:21:09.510+0000 INFO [o.n.i.d.DiagnosticsManager] + ******************************************************************************** + [ System diagnostics ] + ******************************************************************************** + -------------------------------------------------------------------------------- + [ System memory information ] + -------------------------------------------------------------------------------- + Total Physical memory: 16.00GiB + Free Physical memory: 322.5MiB + Committed virtual memory: 38.29GiB + Total swap space: 2.000GiB + Free swap space: 1.552GiB + + -------------------------------------------------------------------------------- + [ JVM memory information ] + -------------------------------------------------------------------------------- + Free memory: 148.1MiB + Total memory: 260.0MiB + Max memory: 4.000GiB + Garbage Collector: G1 Young Generation: [G1 Eden Space, G1 Survivor Space, G1 Old Gen] + Garbage Collector: G1 Old Generation: [G1 Eden Space, G1 Survivor Space, G1 Old Gen] + Memory Pool: CodeHeap 'non-nmethods' (Non-heap memory): committed=2.438MiB, used=1.211MiB, max=5.570MiB, threshold=0B + Memory Pool: Metaspace (Non-heap memory): committed=20.13MiB, used=19.77MiB, max=-1B, threshold=0B + Memory Pool: CodeHeap 'profiled nmethods' (Non-heap memory): committed=4.563MiB, used=4.503MiB, max=117.2MiB, threshold=0B + Memory Pool: Compressed Class Space (Non-heap memory): committed=2.313MiB, used=2.121MiB, max=1.000GiB, threshold=0B + Memory Pool: G1 Eden Space (Heap memory): committed=156.0MiB, used=84.00MiB, max=-1B, threshold=? + Memory Pool: G1 Old Gen (Heap memory): committed=100.0MiB, used=22.82MiB, max=4.000GiB, threshold=0B + Memory Pool: G1 Survivor Space (Heap memory): committed=4.000MiB, used=3.093MiB, max=-1B, threshold=? + Memory Pool: CodeHeap 'non-profiled nmethods' (Non-heap memory): committed=2.438MiB, used=1.214MiB, max=117.2MiB, threshold=0B + + -------------------------------------------------------------------------------- + [ Operating system information ] + -------------------------------------------------------------------------------- + Operating System: Mac OS X; version: 12.7.4; arch: x86_64; cpus: 8 + Max number of file descriptors: 10240 + Number of open file descriptors: 227 + Process id: 42896 + Byte order: LITTLE_ENDIAN + Local timezone: America/New_York + Memory page size: 4096 + Unaligned memory access allowed: true + + -------------------------------------------------------------------------------- + [ JVM information ] + -------------------------------------------------------------------------------- + VM Name: Java HotSpot(TM) 64-Bit Server VM + VM Vendor: Oracle Corporation + VM Version: 17.0.2+8-LTS-86 + JIT compiler: HotSpot 64-Bit Tiered Compilers + VM Arguments: [-Dvisualvm.id=74647662238119, -javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=56143:/Applications/IntelliJ IDEA.app/Contents/bin, -Dfile.encoding=UTF-8] + + -------------------------------------------------------------------------------- + [ Java classpath ] + -------------------------------------------------------------------------------- + [classpath] /Users/jnr6/.m2/repository/it/unimi/dsi/fastutil/8.5.13/fastutil-8.5.13.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-codec-http/4.1.101.Final/netty-codec-http-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/scala-library/2.13.11/scala-library-2.13.11.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-command-line/5.16.0/neo4j-command-line-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-epoll/4.1.101.Final/netty-transport-native-epoll-4.1.101.Final-linux-x86_64.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-common/4.1.101.Final/netty-common-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.16.0/jackson-databind-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-consistency-check/5.16.0/neo4j-consistency-check-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-values/5.16.0/neo4j-values-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-dbms/5.16.0/neo4j-dbms-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-analysis/9.6/asm-analysis-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-planner/5.16.0/neo4j-cypher-planner-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/antlr/antlr4-runtime/4.8/antlr4-runtime-4.8.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-api/3.2.13/docker-java-api-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/activation/jakarta.activation-api/1.2.1/jakarta.activation-api-1.2.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-planner-spi/5.16.0/neo4j-cypher-planner-spi-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-resource/5.16.0/neo4j-resource-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-servlet/10.0.17/jetty-servlet-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-cache/1.13.0/shiro-cache-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-javacc-parser/5.16.0/neo4j-cypher-javacc-parser-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/sun/istack/istack-commons-runtime/3.0.8/istack-commons-runtime-3.0.8.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-configuration2/2.9.0/commons-configuration2-2.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-compress/1.21/commons-compress-1.21.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/containers/jersey-container-servlet/2.34/jersey-container-servlet-2.34.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-kqueue/4.1.101.Final/netty-transport-native-kqueue-4.1.101.Final-osx-aarch_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-concurrent/5.16.0/neo4j-concurrent-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/mysql/1.17.4/mysql-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/mockito/mockito-core/5.7.0/mockito-core-5.7.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher/5.16.0/neo4j-cypher-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-capabilities/5.16.0/neo4j-capabilities-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-notifications/5.16.0/neo4j-notifications-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-import-util/5.16.0/neo4j-import-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-config/5.16.0/neo4j-cypher-config-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/containers/jersey-container-servlet-core/2.34/jersey-container-servlet-core-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-io/5.16.0/neo4j-io-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-locator/2.6.1/hk2-locator-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-lang3/3.13.0/commons-lang3-3.13.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.16.0/jackson-core-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/mysql/mysql-connector-j/8.2.0/mysql-connector-j-8.2.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-classes-epoll/4.1.101.Final/netty-transport-classes-epoll-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/objenesis/objenesis/3.3/objenesis-3.3.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-server/2.34/jersey-server-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-client/2.34/jersey-client-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-ast-factory/5.16.0/neo4j-cypher-ast-factory-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-handler/4.1.101.Final/netty-handler-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j/5.16.0/neo4j-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/google/code/gson/gson/2.9.0/gson-2.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-logging/5.16.0/neo4j-logging-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-webapp/10.0.17/jetty-webapp-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-core/9.8.0/lucene-core-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-kernel-api/5.16.0/neo4j-kernel-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcutil-jdk18on/1.76/bcutil-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/bitbucket/inkytonik/kiama/kiama_2.13/2.5.1/kiama_2.13-2.5.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-common/5.16.0/neo4j-common-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/junit/junit/4.13.2/junit-4.13.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-index/5.16.0/neo4j-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport/4.1.101.Final/netty-transport-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-util/9.6/asm-util-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/jctools/jctools-core/4.0.2/jctools-core-4.0.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-graphdb-api/5.16.0/neo4j-graphdb-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/jdbc/1.17.4/jdbc-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-runtime-util/5.16.0/neo4j-cypher-runtime-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/collections/eclipse-collections-api/11.1.0/eclipse-collections-api-11.1.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-unsafe/5.16.0/neo4j-unsafe-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-server/10.0.17/jetty-server-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcprov-jdk18on/1.76/bcprov-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-slotted-runtime/5.16.0/neo4j-cypher-slotted-runtime-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-layout-template-json/2.20.0/log4j-layout-template-json-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-fulltext-index/5.16.0/neo4j-fulltext-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/net/java/dev/jna/jna/5.8.0/jna-5.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-util/10.0.17/jetty-util-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-expressions/5.16.0/neo4j-expressions-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-transport/3.2.13/docker-java-transport-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/commons-logging/commons-logging/1.2/commons-logging-1.2.jar + [classpath] /Users/jnr6/IdeaProjects/policy-machine-core/target/classes + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-testkit/1.10.0/junit-platform-testkit-1.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-core/1.13.0/shiro-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-physical-planning/5.16.0/neo4j-cypher-physical-planning-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-storage-engine-util/5.16.0/neo4j-storage-engine-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-ast/5.16.0/neo4j-ast-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-core/2.20.0/log4j-core-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-params/5.9.0/junit-jupiter-params-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/external/jakarta.inject/2.6.1/jakarta.inject-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/inject/jersey-hk2/2.34/jersey-hk2-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/hamcrest/hamcrest/2.2/hamcrest-2.2.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jaxb/jaxb-runtime/2.3.2/jaxb-runtime-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-logical-plans/5.16.0/neo4j-cypher-logical-plans-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-xml/10.0.17/jetty-xml-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar + [classpath] /Users/jnr6/.m2/repository/org/codehaus/jettison/jettison/1.5.4/jettison-1.5.4.jar + [classpath] /Users/jnr6/.m2/repository/com/propensive/mercator_2.13/0.2.1/mercator_2.13-0.2.1.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jaxb/txw2/2.3.2/txw2-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-resolver/4.1.101.Final/netty-resolver-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar + [classpath] /Users/jnr6/.m2/repository/org/awaitility/awaitility/4.2.0/awaitility-4.2.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-codec/4.1.101.Final/netty-codec-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-buffer/4.1.101.Final/netty-buffer-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-hash/1.13.0/shiro-crypto-hash-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/info/picocli/picocli/4.7.5/picocli-4.7.5.jar + [classpath] /Users/jnr6/.m2/repository/com/profesorfalken/jPowerShell/3.0/jPowerShell-3.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-cipher/1.13.0/shiro-crypto-cipher-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-lang/1.13.0/shiro-lang-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-token-api/5.16.0/neo4j-token-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-bolt/5.16.0/neo4j-bolt-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-record-storage-engine/5.16.0/neo4j-record-storage-engine-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-epoll/4.1.101.Final/netty-transport-native-epoll-4.1.101.Final-linux-aarch_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-ir/5.16.0/neo4j-cypher-ir-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/test-utils/5.15.0/test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter/5.10.0/junit-jupiter-5.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/app/neo4j-server-test-utils/5.15.0/neo4j-server-test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/rnorth/duct-tape/duct-tape/1.0.8/duct-tape-1.0.8.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/modules/scala-collection-contrib_2.13/0.3.0/scala-collection-contrib_2.13-0.3.0.jar + [classpath] /Users/jnr6/.m2/repository/org/slf4j/slf4j-api/2.0.0/slf4j-api-2.0.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-analysis-common/9.8.0/lucene-analysis-common-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/com/propensive/magnolia_2.13/0.17.0/magnolia_2.13-0.17.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-event/1.13.0/shiro-event-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-api/2.20.0/log4j-api-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-classes-kqueue/4.1.101.Final/netty-transport-classes-kqueue-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/net/bytebuddy/byte-buddy-agent/1.14.9/byte-buddy-agent-1.14.9.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/validation/jakarta.validation-api/2.0.2/jakarta.validation-api-2.0.2.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/database-commons/1.17.4/database-commons-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-front-end/5.16.0/neo4j-front-end-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-procedure/5.16.0/neo4j-procedure-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-import-tool/5.16.0/neo4j-import-tool-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/ws/rs/jakarta.ws.rs-api/2.1.6/jakarta.ws.rs-api-2.1.6.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.10.3/jackson-annotations-2.10.3.jar + [classpath] /Users/jnr6/.m2/repository/com/google/protobuf/protobuf-java/3.21.9/protobuf-java-3.21.9.jar + [classpath] /Users/jnr6/.m2/repository/io/projectreactor/reactor-core/3.6.0/reactor-core-3.6.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-wal/5.16.0/neo4j-wal-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-ssl/5.16.0/neo4j-ssl-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-unix-common/4.1.101.Final/netty-transport-native-unix-common-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-config-core/1.13.0/shiro-config-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-codegen/5.16.0/neo4j-codegen-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-tree/9.6/asm-tree-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-rewriting/5.16.0/neo4j-rewriting-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-backward-codecs/9.8.0/lucene-backward-codecs-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-lock/5.16.0/neo4j-lock-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-schema/5.16.0/neo4j-schema-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/collections/eclipse-collections/11.1.0/eclipse-collections-11.1.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/luben/zstd-jni/1.5.5-10/zstd-jni-1.5.5-10.jar + [classpath] /Users/jnr6/.m2/repository/commons-codec/commons-codec/1.16.0/commons-codec-1.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/jaxrs/jackson-jaxrs-json-provider/2.16.0/jackson-jaxrs-json-provider-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-expression-evaluator/5.16.0/neo4j-cypher-expression-evaluator-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/testcontainers/1.17.4/testcontainers-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/test/neo4j-harness/5.15.0/neo4j-harness-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/javassist/javassist/3.25.0-GA/javassist-3.25.0-GA.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-core/1.13.0/shiro-crypto-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-commons/1.9.0/junit-platform-commons-1.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-utils/2.6.1/hk2-utils-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/io-test-utils/5.15.0/io-test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/annotations/5.16.0/annotations-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-interpreted-runtime/5.16.0/neo4j-cypher-interpreted-runtime-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-cache/5.16.0/neo4j-cypher-cache-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jetbrains/annotations/17.0.0/annotations-17.0.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-layout/5.16.0/neo4j-layout-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/reactivestreams/reactive-streams/1.0.4/reactive-streams-1.0.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/licensing-proxy/zstd-proxy/5.16.0/zstd-proxy-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-security/5.16.0/neo4j-security-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-common/2.34/jersey-common-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/scala-reflect/2.13.11/scala-reflect-2.13.11.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/junit-jupiter/1.17.4/junit-jupiter-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-random-values/5.15.0/neo4j-random-values-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-transport-zerodep/3.2.13/docker-java-transport-zerodep-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-diagnostics/5.16.0/neo4j-diagnostics-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-http/10.0.17/jetty-http-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/cypher-ast-factory/5.16.0/cypher-ast-factory-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-configuration/5.16.0/neo4j-configuration-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-exceptions/5.16.0/neo4j-exceptions-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-util/5.16.0/neo4j-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-id-generator/5.16.0/neo4j-id-generator-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/seancfoley/ipaddress/5.4.0/ipaddress-5.4.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-io/10.0.17/jetty-io-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/commons-io/commons-io/2.11.0/commons-io-2.11.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-queryparser/9.8.0/lucene-queryparser-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/xml/bind/jakarta.xml.bind-api/2.3.2/jakarta.xml.bind-api-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-kernel/5.16.0/neo4j-kernel-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-fabric/5.16.0/neo4j-fabric-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-spatial-index/5.16.0/neo4j-spatial-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-procedure-api/5.16.0/neo4j-procedure-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/sun/xml/fastinfoset/FastInfoset/1.2.16/FastInfoset-1.2.16.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-lucene-index/5.16.0/neo4j-lucene-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/net/bytebuddy/byte-buddy/1.14.9/byte-buddy-1.14.9.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-query-router/5.16.0/neo4j-query-router-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-csv/5.16.0/neo4j-csv-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/toolchain/jetty-servlet-api/4.0.6/jetty-servlet-api-4.0.6.jar + [classpath] /Users/jnr6/IdeaProjects/policy-machine-core/target/test-classes + [classpath] /Users/jnr6/.m2/repository/com/github/ben-manes/caffeine/caffeine/3.1.8/caffeine-3.1.8.jar + [classpath] /Users/jnr6/.m2/repository/com/profesorfalken/WMI4Java/1.6.3/WMI4Java-1.6.3.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/vintage/junit-vintage-engine/5.10.0/junit-vintage-engine-5.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-collections/5.16.0/neo4j-collections-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/assertj/assertj-core/3.24.2/assertj-core-3.24.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-graph-algo/5.16.0/neo4j-graph-algo-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.9.0/junit-jupiter-engine-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jvnet/staxex/stax-ex/1.8.1/stax-ex-1.8.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/app/neo4j-server/5.16.0/neo4j-server-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-monitoring/5.16.0/neo4j-monitoring-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-macros/5.16.0/neo4j-cypher-macros-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jprocesses/jProcesses/1.6.5/jProcesses-1.6.5.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-api/2.6.1/hk2-api-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.9.0/junit-jupiter-api-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-security/10.0.17/jetty-security-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcpkix-jdk18on/1.76/bcpkix-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-engine/1.9.0/junit-platform-engine-1.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-slf4j-provider/5.16.0/neo4j-slf4j-provider-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-kqueue/4.1.101.Final/netty-transport-native-kqueue-4.1.101.Final-osx-x86_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-data-collector/5.16.0/neo4j-data-collector-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/server-api/5.16.0/server-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-native/5.16.0/neo4j-native-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/module/jackson-module-jaxb-annotations/2.16.0/jackson-module-jaxb-annotations-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm/9.6/asm-9.6.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/jaxrs/jackson-jaxrs-base/2.16.0/jackson-jaxrs-base-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar + + -------------------------------------------------------------------------------- + [ Library path ] + -------------------------------------------------------------------------------- + /Users/jnr6/Library/Java/Extensions + /Library/Java/Extensions + /Network/Library/Java/Extensions + /System/Library/Java/Extensions + /usr/lib/java + /Users/jnr6/IdeaProjects/policy-machine-core + + -------------------------------------------------------------------------------- + [ System properties ] + -------------------------------------------------------------------------------- + sun.jnu.encoding = UTF-8 + sun.arch.data.model = 64 + user.timezone = America/New_York + visualvm.id = 74647662238119 + sun.java.launcher = SUN_STANDARD + user.country = US + sun.boot.library.path = /Library/Java/JavaVirtualMachines/jdk-17.0.2.jdk/Contents/Home/lib + sun.java.command = gov.nist.csd.pm.pap.neo4j.ImportTest + jdk.debug = release + sun.cpu.endian = little + user.home = /Users/jnr6 + user.language = en + file.separator = / + sun.management.compiler = HotSpot 64-Bit Tiered Compilers + user.name = jnr6 + path.separator = : + file.encoding = UTF-8 + jnidispatch.path = /Users/jnr6/Library/Caches/JNA/temp/jna12214014348561551387.tmp + jna.loaded = true + user.dir = /Users/jnr6/IdeaProjects/policy-machine-core + native.encoding = UTF-8 + sun.io.unicode.encoding = UnicodeBig + + -------------------------------------------------------------------------------- + [ (IANA) TimeZone database version ] + -------------------------------------------------------------------------------- + TimeZone version: 2021e (available for 601 zone identifiers) + + -------------------------------------------------------------------------------- + [ Network information ] + -------------------------------------------------------------------------------- + Interface utun2: + address: fe80:0:0:0:ce81:b1c:bd2c:69e%utun2 + Interface utun1: + address: fe80:0:0:0:bbf5:1c30:4238:57b2%utun1 + Interface utun0: + address: fe80:0:0:0:73be:4eb:3f31:a891%utun0 + Interface llw0: + address: fe80:0:0:0:c0a6:71ff:fe04:534c%llw0 + Interface awdl0: + address: fe80:0:0:0:c0a6:71ff:fe04:534c%awdl0 + Interface en0: + address: 192.168.1.247 + Interface lo0: + address: fe80:0:0:0:0:0:0:1%lo0 + address: 0:0:0:0:0:0:0:1%lo0 + address: 127.0.0.1 + + -------------------------------------------------------------------------------- + [ Native access information ] + -------------------------------------------------------------------------------- + Native access details: Native access is not available for current platform. + + -------------------------------------------------------------------------------- + [ DBMS config ] + -------------------------------------------------------------------------------- + DBMS provided settings: + server.bolt.enabled=true + server.bolt.listen_address=localhost:9999 + server.directories.neo4j_home=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + Directories in use: + server.directories.data=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data + server.directories.dumps.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/dumps + server.directories.import=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + server.directories.lib=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/lib + server.directories.licenses=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/licenses + server.directories.logs=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/logs + server.directories.neo4j_home=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + server.directories.plugins=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/plugins + server.directories.run=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/run + server.directories.script.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/scripts + server.directories.transaction.logs.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions + + -------------------------------------------------------------------------------- + [ Packaging ] + -------------------------------------------------------------------------------- + Could not read packaging info: java.nio.file.NoSuchFileException: /Users/jnr6/IdeaProjects/policy-machine-core/testdb/packaging_info + +2024-04-03 04:21:09.647+0000 INFO [o.n.d.i.DefaultIdentityModule] Found ServerId on disk: ServerId{54490f53} (54490f53-4b94-4d0f-9604-023c3fe1be5e) +2024-04-03 04:21:09.648+0000 INFO [o.n.d.i.DefaultIdentityModule] This instance is ServerId{54490f53} (54490f53-4b94-4d0f-9604-023c3fe1be5e) +2024-04-03 04:21:10.421+0000 INFO [o.n.d.d.DatabaseLifecycles] Creating 'DatabaseId{00000000[system]}'. +2024-04-03 04:21:10.625+0000 INFO [o.n.b.BoltServer] Using connector transport KQueue +2024-04-03 04:21:10.703+0000 INFO [o.n.b.BoltServer] Configured external Bolt connector with listener address localhost/127.0.0.1:9999 +2024-04-03 04:21:10.703+0000 INFO [o.n.b.BoltServer] Bolt server loaded +2024-04-03 04:21:10.717+0000 INFO [o.n.d.d.DatabaseLifecycles] Starting 'DatabaseId{00000000[system]}'. +2024-04-03 04:21:10.951+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [system/00000000] Scanning log file with version 0 for checkpoint entries +2024-04-03 04:21:10.998+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [system/00000000] Selected RecordFormat:PageAlignedV5_0[aligned-1.1] record format from store /Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system +2024-04-03 04:21:10.998+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [system/00000000] Selected format from the store files: RecordFormat:PageAlignedV5_0[aligned-1.1] +2024-04-03 04:21:11.610+0000 INFO [o.n.i.d.DiagnosticsManager] [system/00000000] + [system/00000000] ******************************************************************************** + [system/00000000] [ Database: system ] + [system/00000000] ******************************************************************************** + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Version ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] DBMS: community record-aligned-1.1 + [system/00000000] Kernel version: 5.16.0 + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Store files ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] Disk space on partition (Total / Free / Free %): 500068036608 / 109537165312 / 21 + [system/00000000] Storage files stored on file store: apfs + [system/00000000] Storage files: (filename : modification date - size) + [system/00000000] database_lock: 2024-04-03 04:12:32.900+0000 - 0B + [system/00000000] id-buffer.tmp.0: 2024-04-03 04:18:38.801+0000 - 0B + [system/00000000] neostore: 2024-04-03 04:12:32.662+0000 - 8.000KiB + [system/00000000] neostore.counts.db: 2024-04-03 04:21:11.433+0000 - 48.00KiB + [system/00000000] neostore.indexstats.db: 2024-04-03 04:21:11.479+0000 - 48.00KiB + [system/00000000] neostore.labeltokenstore.db: 2024-04-03 04:12:39.430+0000 - 8.000KiB + [system/00000000] neostore.labeltokenstore.db.id: 2024-04-03 04:21:11.352+0000 - 40.00KiB + [system/00000000] neostore.labeltokenstore.db.names: 2024-04-03 04:12:39.454+0000 - 8.000KiB + [system/00000000] neostore.labeltokenstore.db.names.id: 2024-04-03 04:21:11.336+0000 - 40.00KiB + [system/00000000] neostore.nodestore.db: 2024-04-03 04:12:39.416+0000 - 8.000KiB + [system/00000000] neostore.nodestore.db.id: 2024-04-03 04:21:11.176+0000 - 40.00KiB + [system/00000000] neostore.nodestore.db.labels: 2024-04-03 04:12:32.509+0000 - 8.000KiB + [system/00000000] neostore.nodestore.db.labels.id: 2024-04-03 04:21:11.153+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db: 2024-04-03 04:12:39.442+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.arrays: 2024-04-03 04:12:32.565+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.arrays.id: 2024-04-03 04:21:11.249+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.id: 2024-04-03 04:21:11.273+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.index: 2024-04-03 04:12:39.477+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.index.id: 2024-04-03 04:21:11.212+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.index.keys: 2024-04-03 04:12:39.464+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.index.keys.id: 2024-04-03 04:21:11.194+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.strings: 2024-04-03 04:12:39.367+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.strings.id: 2024-04-03 04:21:11.230+0000 - 40.00KiB + [system/00000000] neostore.relationshipgroupstore.db: 2024-04-03 04:12:32.640+0000 - 8.000KiB + [system/00000000] neostore.relationshipgroupstore.db.id: 2024-04-03 04:21:11.389+0000 - 40.00KiB + [system/00000000] neostore.relationshipgroupstore.degrees.db: 2024-04-03 04:21:11.462+0000 - 40.00KiB + [system/00000000] neostore.relationshipstore.db: 2024-04-03 04:12:39.378+0000 - 8.000KiB + [system/00000000] neostore.relationshipstore.db.id: 2024-04-03 04:21:11.289+0000 - 40.00KiB + [system/00000000] neostore.relationshiptypestore.db: 2024-04-03 04:12:39.405+0000 - 8.000KiB + [system/00000000] neostore.relationshiptypestore.db.id: 2024-04-03 04:21:11.322+0000 - 40.00KiB + [system/00000000] neostore.relationshiptypestore.db.names: 2024-04-03 04:12:39.392+0000 - 8.000KiB + [system/00000000] neostore.relationshiptypestore.db.names.id: 2024-04-03 04:21:11.303+0000 - 40.00KiB + [system/00000000] neostore.schemastore.db: 2024-04-03 04:12:39.490+0000 - 8.000KiB + [system/00000000] neostore.schemastore.db.id: 2024-04-03 04:21:11.370+0000 - 40.00KiB + [system/00000000] schema: + [system/00000000] index: + [system/00000000] range-1.0: + [system/00000000] 3: + [system/00000000] index-3: 2024-04-03 04:18:38.719+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.321+0000 - 48.00KiB + [system/00000000] 4: + [system/00000000] index-4: 2024-04-03 04:18:38.733+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.437+0000 - 48.00KiB + [system/00000000] 7: + [system/00000000] index-7: 2024-04-03 04:18:38.759+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.907+0000 - 48.00KiB + [system/00000000] 8: + [system/00000000] index-8: 2024-04-03 04:18:38.785+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.997+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.996+0000 - 192.0KiB + [system/00000000] token-lookup-1.0: + [system/00000000] 1: + [system/00000000] index-1: 2024-04-03 04:18:38.672+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:33.516+0000 - 48.00KiB + [system/00000000] 2: + [system/00000000] index-2: 2024-04-03 04:18:38.688+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:33.409+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:33.515+0000 - 96.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.321+0000 - 288.0KiB + [system/00000000] - Total: 2024-04-03 04:12:33.407+0000 - 288.0KiB + [system/00000000] Storage summary: + [system/00000000] Total size of store: 1.078MiB + [system/00000000] Total size of mapped files: 408.0KiB + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Transaction log ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] Transaction log files stored on file store: apfs + [system/00000000] Transaction log metadata: + [system/00000000] - current kernel version used in transactions: V5_15 + [system/00000000] - last committed transaction id: 37 + [system/00000000] Transaction log files: + [system/00000000] - existing transaction log versions: 0-0 + [system/00000000] - oldest transaction 2 found in log with version 0 + [system/00000000] - files: (filename : creation date - size) + [system/00000000] neostore.transaction.db.0: 2024-04-03 04:12:32.000+0000 - 19.26KiB + [system/00000000] - total size of files: 19.26KiB + [system/00000000] Checkpoint log files: + [system/00000000] - existing checkpoint log versions: 0-0 + [system/00000000] - last checkpoint: CheckpointInfo[transactionLogPosition=LogPosition{logVersion=0, byteOffset=19725}, storeId=StoreId{creationTime=1712117552660, random=4552926301767966796, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1}, checkpointEntryPosition=LogPosition{logVersion=0, byteOffset=360}, channelPositionAfterCheckpoint=LogPosition{logVersion=0, byteOffset=592}, checkpointFilePostReadPosition=LogPosition{logVersion=0, byteOffset=592}, kernelVersion=KernelVersion{V5_15,version=14}, kernelVersionByte=14, transactionId=TransactionId[transactionId=37, checksum=-1026009811, commitTimestamp=1712117555154, consensusIndex=-1], reason=Checkpoint triggered by "Database shutdown" @ txId: 37, consensusIndexInCheckpoint=true] + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Id usage ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] ArrayPropertyStore[neostore.nodestore.db.labels]: used=1 high=0 + [system/00000000] NodeStore[neostore.nodestore.db]: used=6 high=5 + [system/00000000] StringPropertyStore[neostore.propertystore.db.index.keys]: used=44 high=43 + [system/00000000] PropertyIndexStore[neostore.propertystore.db.index]: used=31 high=30 + [system/00000000] StringPropertyStore[neostore.propertystore.db.strings]: used=3 high=2 + [system/00000000] ArrayPropertyStore[neostore.propertystore.db.arrays]: used=1 high=0 + [system/00000000] PropertyStore[neostore.propertystore.db]: used=59 high=58 + [system/00000000] RelationshipStore[neostore.relationshipstore.db]: used=2 high=1 + [system/00000000] StringPropertyStore[neostore.relationshiptypestore.db.names]: used=2 high=1 + [system/00000000] RelationshipTypeStore[neostore.relationshiptypestore.db]: used=1 high=0 + [system/00000000] StringPropertyStore[neostore.labeltokenstore.db.names]: used=5 high=4 + [system/00000000] LabelTokenStore[neostore.labeltokenstore.db]: used=4 high=3 + [system/00000000] SchemaStore[neostore.schemastore.db]: used=11 high=10 + [system/00000000] RelationshipGroupStore[neostore.relationshipgroupstore.db]: used=1 high=0 + [system/00000000] NeoStore[neostore]: used=-1 high=-1 + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Metadata ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] EXTERNAL_STORE_UUID (Database identifier exposed as external store identity. Generated on creation and never updated): 8e4fd9af-0e04-47d8-a19c-cdb72dbda752 + [system/00000000] DATABASE_ID (The last used DatabaseId for this database): null + [system/00000000] LEGACY_STORE_VERSION (Legacy store format version. This field is used from 5.0 onwards only to distinguish non-migrated pre 5.0 metadata stores.): -3523014627327384477 + [system/00000000] STORE_ID (Store ID): StoreId{creationTime=1712117552660, random=4552926301767966796, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1} + [system/00000000] +2024-04-03 04:21:11.799+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 04:21:11.799+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 04:21:11.801+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 04:21:11.801+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 04:21:11.824+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 04:21:11.824+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 04:21:11.825+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 04:21:11.825+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 04:21:11.858+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 +2024-04-03 04:21:11.858+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 +2024-04-03 04:21:11.859+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 04:21:11.859+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 +2024-04-03 04:21:11.884+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 +2024-04-03 04:21:11.884+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 +2024-04-03 04:21:11.885+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 04:21:11.885+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 +2024-04-03 04:21:11.904+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 +2024-04-03 04:21:11.904+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 +2024-04-03 04:21:11.905+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 04:21:11.905+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 +2024-04-03 04:21:11.924+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 +2024-04-03 04:21:11.924+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 +2024-04-03 04:21:11.925+0000 INFO [o.n.k.i.a.i.IndexingService] [system/00000000] IndexingService.init: indexes not specifically mentioned above are ONLINE. Total 6 indexes. Processed in 154ms +2024-04-03 04:21:11.925+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 04:21:11.925+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 +2024-04-03 04:21:11.930+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] Requirement `Database unavailable` makes database system unavailable. +2024-04-03 04:21:11.930+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] DatabaseId{00000000[system]} is unavailable. +2024-04-03 04:21:11.986+0000 INFO [o.n.k.d.Database] [system/00000000] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/system/neostore.transaction.db.0] at version=0 +2024-04-03 04:21:11.989+0000 INFO [o.n.k.d.Database] [system/00000000] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/system/checkpoint.0] at version=0 +2024-04-03 04:21:11.990+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [system/00000000] Scanning log file with version 0 for checkpoint entries +2024-04-03 04:21:11.993+0000 INFO [o.n.k.i.a.i.IndexingService] [system/00000000] IndexingService.start: indexes not specifically mentioned above are ONLINE. Total 6 indexes. Processed in 0ms +2024-04-03 04:21:12.027+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] Fulfilling of requirement 'Database unavailable' makes database system available. +2024-04-03 04:21:12.027+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] DatabaseId{00000000[system]} is ready. +2024-04-03 04:21:12.129+0000 INFO [o.n.s.s.s.UserSecurityGraphComponent] Performing postInitialization step for component 'security-users' with version 4 and status CURRENT +2024-04-03 04:21:12.129+0000 INFO [o.n.s.s.s.UserSecurityGraphComponent] Updating the initial password in component 'security-users' +2024-04-03 04:21:12.141+0000 INFO [o.n.d.d.DatabaseLifecycles] Creating 'DatabaseId{fefd0874[neo4j]}'. +2024-04-03 04:21:12.143+0000 INFO [o.n.d.d.DatabaseLifecycles] Starting 'DatabaseId{fefd0874[neo4j]}'. +2024-04-03 04:21:12.160+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [neo4j/fefd0874] Scanning log file with version 0 for checkpoint entries +2024-04-03 04:21:12.174+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected RecordFormat:PageAlignedV5_0[aligned-1.1] record format from store /Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j +2024-04-03 04:21:12.174+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected format from the store files: RecordFormat:PageAlignedV5_0[aligned-1.1] +2024-04-03 04:21:12.416+0000 INFO [o.n.i.d.DiagnosticsManager] [neo4j/fefd0874] + [neo4j/fefd0874] ******************************************************************************** + [neo4j/fefd0874] [ Database: neo4j ] + [neo4j/fefd0874] ******************************************************************************** + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Version ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] DBMS: community record-aligned-1.1 + [neo4j/fefd0874] Kernel version: 5.16.0 + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Store files ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] Disk space on partition (Total / Free / Free %): 500068036608 / 109537165312 / 21 + [neo4j/fefd0874] Storage files stored on file store: apfs + [neo4j/fefd0874] Storage files: (filename : modification date - size) + [neo4j/fefd0874] database_lock: 2024-04-03 04:12:35.327+0000 - 0B + [neo4j/fefd0874] id-buffer.tmp.0: 2024-04-03 04:18:39.371+0000 - 0B + [neo4j/fefd0874] neostore: 2024-04-03 04:12:35.301+0000 - 8.000KiB + [neo4j/fefd0874] neostore.counts.db: 2024-04-03 04:21:12.368+0000 - 48.00KiB + [neo4j/fefd0874] neostore.indexstats.db: 2024-04-03 04:21:12.391+0000 - 40.00KiB + [neo4j/fefd0874] neostore.labeltokenstore.db: 2024-04-03 04:12:38.210+0000 - 8.000KiB + [neo4j/fefd0874] neostore.labeltokenstore.db.id: 2024-04-03 04:21:12.325+0000 - 40.00KiB + [neo4j/fefd0874] neostore.labeltokenstore.db.names: 2024-04-03 04:12:38.182+0000 - 8.000KiB + [neo4j/fefd0874] neostore.labeltokenstore.db.names.id: 2024-04-03 04:21:12.311+0000 - 40.00KiB + [neo4j/fefd0874] neostore.nodestore.db: 2024-04-03 04:12:38.172+0000 - 8.000KiB + [neo4j/fefd0874] neostore.nodestore.db.id: 2024-04-03 04:21:12.187+0000 - 40.00KiB + [neo4j/fefd0874] neostore.nodestore.db.labels: 2024-04-03 04:12:35.189+0000 - 8.000KiB + [neo4j/fefd0874] neostore.nodestore.db.labels.id: 2024-04-03 04:21:12.175+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db: 2024-04-03 04:12:38.196+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.arrays: 2024-04-03 04:12:35.234+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.arrays.id: 2024-04-03 04:21:12.242+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.id: 2024-04-03 04:21:12.254+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.index: 2024-04-03 04:12:38.160+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.index.id: 2024-04-03 04:21:12.214+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.index.keys: 2024-04-03 04:12:38.151+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.index.keys.id: 2024-04-03 04:21:12.199+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.strings: 2024-04-03 04:12:35.222+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.strings.id: 2024-04-03 04:21:12.227+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshipgroupstore.db: 2024-04-03 04:12:35.289+0000 - 8.000KiB + [neo4j/fefd0874] neostore.relationshipgroupstore.db.id: 2024-04-03 04:21:12.354+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshipgroupstore.degrees.db: 2024-04-03 04:21:12.380+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshipstore.db: 2024-04-03 04:12:35.245+0000 - 0B + [neo4j/fefd0874] neostore.relationshipstore.db.id: 2024-04-03 04:21:12.267+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshiptypestore.db: 2024-04-03 04:12:35.259+0000 - 0B + [neo4j/fefd0874] neostore.relationshiptypestore.db.id: 2024-04-03 04:21:12.297+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshiptypestore.db.names: 2024-04-03 04:12:35.246+0000 - 8.000KiB + [neo4j/fefd0874] neostore.relationshiptypestore.db.names.id: 2024-04-03 04:21:12.285+0000 - 40.00KiB + [neo4j/fefd0874] neostore.schemastore.db: 2024-04-03 04:12:36.054+0000 - 8.000KiB + [neo4j/fefd0874] neostore.schemastore.db.id: 2024-04-03 04:21:12.341+0000 - 40.00KiB + [neo4j/fefd0874] schema: + [neo4j/fefd0874] index: + [neo4j/fefd0874] token-lookup-1.0: + [neo4j/fefd0874] 1: + [neo4j/fefd0874] index-1: 2024-04-03 04:18:39.335+0000 - 48.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.459+0000 - 48.00KiB + [neo4j/fefd0874] 2: + [neo4j/fefd0874] index-2: 2024-04-03 04:18:39.359+0000 - 40.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.390+0000 - 40.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.459+0000 - 88.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.390+0000 - 88.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.390+0000 - 88.00KiB + [neo4j/fefd0874] Storage summary: + [neo4j/fefd0874] Total size of store: 880.0KiB + [neo4j/fefd0874] Total size of mapped files: 192.0KiB + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Transaction log ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] Transaction log files stored on file store: apfs + [neo4j/fefd0874] Transaction log metadata: + [neo4j/fefd0874] - current kernel version used in transactions: V5_15 + [neo4j/fefd0874] - last committed transaction id: 7 + [neo4j/fefd0874] Transaction log files: + [neo4j/fefd0874] - existing transaction log versions: 0-0 + [neo4j/fefd0874] - oldest transaction 2 found in log with version 0 + [neo4j/fefd0874] - files: (filename : creation date - size) + [neo4j/fefd0874] neostore.transaction.db.0: 2024-04-03 04:12:35.000+0000 - 3.650KiB + [neo4j/fefd0874] - total size of files: 3.650KiB + [neo4j/fefd0874] Checkpoint log files: + [neo4j/fefd0874] - existing checkpoint log versions: 0-0 + [neo4j/fefd0874] - last checkpoint: CheckpointInfo[transactionLogPosition=LogPosition{logVersion=0, byteOffset=3738}, storeId=StoreId{creationTime=1712117555300, random=260265064831090288, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1}, checkpointEntryPosition=LogPosition{logVersion=0, byteOffset=360}, channelPositionAfterCheckpoint=LogPosition{logVersion=0, byteOffset=592}, checkpointFilePostReadPosition=LogPosition{logVersion=0, byteOffset=592}, kernelVersion=KernelVersion{V5_15,version=14}, kernelVersionByte=14, transactionId=TransactionId[transactionId=7, checksum=1516686099, commitTimestamp=1712117556227, consensusIndex=-1], reason=Checkpoint triggered by "Database shutdown" @ txId: 7, consensusIndexInCheckpoint=true] + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Id usage ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] ArrayPropertyStore[neostore.nodestore.db.labels]: used=1 high=0 + [neo4j/fefd0874] NodeStore[neostore.nodestore.db]: used=1 high=0 + [neo4j/fefd0874] StringPropertyStore[neostore.propertystore.db.index.keys]: used=22 high=21 + [neo4j/fefd0874] PropertyIndexStore[neostore.propertystore.db.index]: used=12 high=11 + [neo4j/fefd0874] StringPropertyStore[neostore.propertystore.db.strings]: used=1 high=0 + [neo4j/fefd0874] ArrayPropertyStore[neostore.propertystore.db.arrays]: used=1 high=0 + [neo4j/fefd0874] PropertyStore[neostore.propertystore.db]: used=9 high=8 + [neo4j/fefd0874] RelationshipStore[neostore.relationshipstore.db]: used=0 high=-1 + [neo4j/fefd0874] StringPropertyStore[neostore.relationshiptypestore.db.names]: used=1 high=0 + [neo4j/fefd0874] RelationshipTypeStore[neostore.relationshiptypestore.db]: used=0 high=-1 + [neo4j/fefd0874] StringPropertyStore[neostore.labeltokenstore.db.names]: used=2 high=1 + [neo4j/fefd0874] LabelTokenStore[neostore.labeltokenstore.db]: used=1 high=0 + [neo4j/fefd0874] SchemaStore[neostore.schemastore.db]: used=3 high=2 + [neo4j/fefd0874] RelationshipGroupStore[neostore.relationshipgroupstore.db]: used=1 high=0 + [neo4j/fefd0874] NeoStore[neostore]: used=-1 high=-1 + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Metadata ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] EXTERNAL_STORE_UUID (Database identifier exposed as external store identity. Generated on creation and never updated): 485f4e4f-d438-40c9-a4ed-0bc1099d976f + [neo4j/fefd0874] DATABASE_ID (The last used DatabaseId for this database): null + [neo4j/fefd0874] LEGACY_STORE_VERSION (Legacy store format version. This field is used from 5.0 onwards only to distinguish non-migrated pre 5.0 metadata stores.): -3523014627327384477 + [neo4j/fefd0874] STORE_ID (Store ID): StoreId{creationTime=1712117555300, random=260265064831090288, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1} + [neo4j/fefd0874] +2024-04-03 04:21:12.441+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job registered: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 04:21:12.441+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job started: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 04:21:12.442+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job finished: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 04:21:12.442+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job closed: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 04:21:12.466+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job registered: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 04:21:12.466+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job started: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 04:21:12.466+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.init: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 47ms +2024-04-03 04:21:12.467+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job finished: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 Number of pages visited: 2, Number of tree nodes: 1, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 04:21:12.467+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job closed: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 04:21:12.469+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] Requirement `Database unavailable` makes database neo4j unavailable. +2024-04-03 04:21:12.469+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] DatabaseId{fefd0874[neo4j]} is unavailable. +2024-04-03 04:21:12.471+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/neo4j/neostore.transaction.db.0] at version=0 +2024-04-03 04:21:12.472+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/neo4j/checkpoint.0] at version=0 +2024-04-03 04:21:12.473+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [neo4j/fefd0874] Scanning log file with version 0 for checkpoint entries +2024-04-03 04:21:12.475+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.start: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 0ms +2024-04-03 04:21:12.476+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] Fulfilling of requirement 'Database unavailable' makes database neo4j available. +2024-04-03 04:21:12.476+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] DatabaseId{fefd0874[neo4j]} is ready. +2024-04-03 04:21:12.522+0000 INFO [o.n.b.p.c.c.n.SocketNettyConnector] Bolt enabled on localhost:9999. +2024-04-03 04:21:12.522+0000 INFO [o.n.b.BoltServer] Bolt server started +2024-04-03 04:21:12.524+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] id: 266B93A8C1445AE734BA77BB99FDF56964B6082641ED1A3E87435C6A5111E836 +2024-04-03 04:21:12.524+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] name: system +2024-04-03 04:21:12.524+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] creationDate: 2024-04-03T04:12:32.66Z +2024-04-03 04:25:52.651+0000 INFO [o.n.g.f.m.GlobalModule] Logging config in use: Embedded default config 'default-server-logs.xml' +2024-04-03 04:25:52.804+0000 WARN [o.n.k.i.JvmChecker] The max heap memory has not been configured. It is recommended that it is always explicitly configured, to ensure the system has a balanced configuration. Until then, a JVM computed heuristic of 4294967296 bytes is used instead. If you are running neo4j server, you need to configure server.memory.heap.max_size in neo4j.conf. If you are running neo4j embedded, you have to launch the JVM with -Xmx set to a value. You can run neo4j-admin server memory-recommendation for memory configuration suggestions. +2024-04-03 04:25:52.805+0000 WARN [o.n.k.i.JvmChecker] The initial heap memory has not been configured. It is recommended that it is always explicitly configured, to ensure the system has a balanced configuration. Until then, a JVM computed heuristic of 268435456 bytes is used instead. If you are running neo4j server, you need to configure server.memory.heap.initial_size in neo4j.conf. If you are running neo4j embedded, you have to launch the JVM with -Xms set to a value. You can run neo4j-admin server memory-recommendation for memory configuration suggestions. +2024-04-03 04:25:52.836+0000 WARN [o.n.i.p.PageCache] The server.memory.pagecache.size setting has not been configured. It is recommended that this setting is always explicitly configured, to ensure the system has a balanced configuration. Until then, a computed heuristic value of 6442450944 bytes will be used instead. Run `neo4j-admin memory-recommendation` for memory configuration suggestions. +2024-04-03 04:25:52.836+0000 WARN [o.n.i.p.PageCache] Reflection access to java.nio.DirectByteBuffer is not available, using fallback mode. This could have negative impact on performance and memory usage. Consider adding --add-opens=java.base/java.nio=ALL-UNNAMED to VM options. +2024-04-03 04:25:53.061+0000 INFO [o.n.i.d.DiagnosticsManager] + ******************************************************************************** + [ System diagnostics ] + ******************************************************************************** + -------------------------------------------------------------------------------- + [ System memory information ] + -------------------------------------------------------------------------------- + Total Physical memory: 16.00GiB + Free Physical memory: 565.7MiB + Committed virtual memory: 38.30GiB + Total swap space: 2.000GiB + Free swap space: 1.552GiB + + -------------------------------------------------------------------------------- + [ JVM memory information ] + -------------------------------------------------------------------------------- + Free memory: 146.9MiB + Total memory: 260.0MiB + Max memory: 4.000GiB + Garbage Collector: G1 Young Generation: [G1 Eden Space, G1 Survivor Space, G1 Old Gen] + Garbage Collector: G1 Old Generation: [G1 Eden Space, G1 Survivor Space, G1 Old Gen] + Memory Pool: CodeHeap 'non-nmethods' (Non-heap memory): committed=2.438MiB, used=1.215MiB, max=5.570MiB, threshold=0B + Memory Pool: Metaspace (Non-heap memory): committed=20.13MiB, used=19.74MiB, max=-1B, threshold=0B + Memory Pool: CodeHeap 'profiled nmethods' (Non-heap memory): committed=4.375MiB, used=4.373MiB, max=117.2MiB, threshold=0B + Memory Pool: Compressed Class Space (Non-heap memory): committed=2.313MiB, used=2.121MiB, max=1.000GiB, threshold=0B + Memory Pool: G1 Eden Space (Heap memory): committed=156.0MiB, used=84.00MiB, max=-1B, threshold=? + Memory Pool: G1 Old Gen (Heap memory): committed=100.0MiB, used=23.93MiB, max=4.000GiB, threshold=0B + Memory Pool: G1 Survivor Space (Heap memory): committed=4.000MiB, used=3.184MiB, max=-1B, threshold=? + Memory Pool: CodeHeap 'non-profiled nmethods' (Non-heap memory): committed=2.438MiB, used=1.274MiB, max=117.2MiB, threshold=0B + + -------------------------------------------------------------------------------- + [ Operating system information ] + -------------------------------------------------------------------------------- + Operating System: Mac OS X; version: 12.7.4; arch: x86_64; cpus: 8 + Max number of file descriptors: 10240 + Number of open file descriptors: 227 + Process id: 43319 + Byte order: LITTLE_ENDIAN + Local timezone: America/New_York + Memory page size: 4096 + Unaligned memory access allowed: true + + -------------------------------------------------------------------------------- + [ JVM information ] + -------------------------------------------------------------------------------- + VM Name: Java HotSpot(TM) 64-Bit Server VM + VM Vendor: Oracle Corporation + VM Version: 17.0.2+8-LTS-86 + JIT compiler: HotSpot 64-Bit Tiered Compilers + VM Arguments: [-Dvisualvm.id=74931250975476, -javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=56274:/Applications/IntelliJ IDEA.app/Contents/bin, -Dfile.encoding=UTF-8] + + -------------------------------------------------------------------------------- + [ Java classpath ] + -------------------------------------------------------------------------------- + [classpath] /Users/jnr6/.m2/repository/it/unimi/dsi/fastutil/8.5.13/fastutil-8.5.13.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-codec-http/4.1.101.Final/netty-codec-http-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/scala-library/2.13.11/scala-library-2.13.11.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-command-line/5.16.0/neo4j-command-line-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-epoll/4.1.101.Final/netty-transport-native-epoll-4.1.101.Final-linux-x86_64.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-common/4.1.101.Final/netty-common-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.16.0/jackson-databind-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-consistency-check/5.16.0/neo4j-consistency-check-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-values/5.16.0/neo4j-values-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-dbms/5.16.0/neo4j-dbms-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-analysis/9.6/asm-analysis-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-planner/5.16.0/neo4j-cypher-planner-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/antlr/antlr4-runtime/4.8/antlr4-runtime-4.8.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-api/3.2.13/docker-java-api-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/activation/jakarta.activation-api/1.2.1/jakarta.activation-api-1.2.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-planner-spi/5.16.0/neo4j-cypher-planner-spi-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-resource/5.16.0/neo4j-resource-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-servlet/10.0.17/jetty-servlet-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-cache/1.13.0/shiro-cache-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-javacc-parser/5.16.0/neo4j-cypher-javacc-parser-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/sun/istack/istack-commons-runtime/3.0.8/istack-commons-runtime-3.0.8.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-configuration2/2.9.0/commons-configuration2-2.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-compress/1.21/commons-compress-1.21.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/containers/jersey-container-servlet/2.34/jersey-container-servlet-2.34.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-kqueue/4.1.101.Final/netty-transport-native-kqueue-4.1.101.Final-osx-aarch_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-concurrent/5.16.0/neo4j-concurrent-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/mysql/1.17.4/mysql-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/mockito/mockito-core/5.7.0/mockito-core-5.7.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher/5.16.0/neo4j-cypher-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-capabilities/5.16.0/neo4j-capabilities-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-notifications/5.16.0/neo4j-notifications-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-import-util/5.16.0/neo4j-import-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-config/5.16.0/neo4j-cypher-config-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/containers/jersey-container-servlet-core/2.34/jersey-container-servlet-core-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-io/5.16.0/neo4j-io-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-locator/2.6.1/hk2-locator-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-lang3/3.13.0/commons-lang3-3.13.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.16.0/jackson-core-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/mysql/mysql-connector-j/8.2.0/mysql-connector-j-8.2.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-classes-epoll/4.1.101.Final/netty-transport-classes-epoll-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/objenesis/objenesis/3.3/objenesis-3.3.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-server/2.34/jersey-server-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-client/2.34/jersey-client-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-ast-factory/5.16.0/neo4j-cypher-ast-factory-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-handler/4.1.101.Final/netty-handler-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j/5.16.0/neo4j-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/google/code/gson/gson/2.9.0/gson-2.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-logging/5.16.0/neo4j-logging-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-webapp/10.0.17/jetty-webapp-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-core/9.8.0/lucene-core-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-kernel-api/5.16.0/neo4j-kernel-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcutil-jdk18on/1.76/bcutil-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/bitbucket/inkytonik/kiama/kiama_2.13/2.5.1/kiama_2.13-2.5.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-common/5.16.0/neo4j-common-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/junit/junit/4.13.2/junit-4.13.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-index/5.16.0/neo4j-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport/4.1.101.Final/netty-transport-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-util/9.6/asm-util-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/jctools/jctools-core/4.0.2/jctools-core-4.0.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-graphdb-api/5.16.0/neo4j-graphdb-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/jdbc/1.17.4/jdbc-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-runtime-util/5.16.0/neo4j-cypher-runtime-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/collections/eclipse-collections-api/11.1.0/eclipse-collections-api-11.1.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-unsafe/5.16.0/neo4j-unsafe-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-server/10.0.17/jetty-server-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcprov-jdk18on/1.76/bcprov-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-slotted-runtime/5.16.0/neo4j-cypher-slotted-runtime-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-layout-template-json/2.20.0/log4j-layout-template-json-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-fulltext-index/5.16.0/neo4j-fulltext-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/net/java/dev/jna/jna/5.8.0/jna-5.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-util/10.0.17/jetty-util-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-expressions/5.16.0/neo4j-expressions-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-transport/3.2.13/docker-java-transport-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/commons-logging/commons-logging/1.2/commons-logging-1.2.jar + [classpath] /Users/jnr6/IdeaProjects/policy-machine-core/target/classes + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-testkit/1.10.0/junit-platform-testkit-1.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-core/1.13.0/shiro-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-physical-planning/5.16.0/neo4j-cypher-physical-planning-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-storage-engine-util/5.16.0/neo4j-storage-engine-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-ast/5.16.0/neo4j-ast-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-core/2.20.0/log4j-core-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-params/5.9.0/junit-jupiter-params-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/external/jakarta.inject/2.6.1/jakarta.inject-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/inject/jersey-hk2/2.34/jersey-hk2-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/hamcrest/hamcrest/2.2/hamcrest-2.2.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jaxb/jaxb-runtime/2.3.2/jaxb-runtime-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-logical-plans/5.16.0/neo4j-cypher-logical-plans-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-xml/10.0.17/jetty-xml-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar + [classpath] /Users/jnr6/.m2/repository/org/codehaus/jettison/jettison/1.5.4/jettison-1.5.4.jar + [classpath] /Users/jnr6/.m2/repository/com/propensive/mercator_2.13/0.2.1/mercator_2.13-0.2.1.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jaxb/txw2/2.3.2/txw2-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-resolver/4.1.101.Final/netty-resolver-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar + [classpath] /Users/jnr6/.m2/repository/org/awaitility/awaitility/4.2.0/awaitility-4.2.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-codec/4.1.101.Final/netty-codec-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-buffer/4.1.101.Final/netty-buffer-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-hash/1.13.0/shiro-crypto-hash-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/info/picocli/picocli/4.7.5/picocli-4.7.5.jar + [classpath] /Users/jnr6/.m2/repository/com/profesorfalken/jPowerShell/3.0/jPowerShell-3.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-cipher/1.13.0/shiro-crypto-cipher-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-lang/1.13.0/shiro-lang-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-token-api/5.16.0/neo4j-token-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-bolt/5.16.0/neo4j-bolt-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-record-storage-engine/5.16.0/neo4j-record-storage-engine-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-epoll/4.1.101.Final/netty-transport-native-epoll-4.1.101.Final-linux-aarch_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-ir/5.16.0/neo4j-cypher-ir-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/test-utils/5.15.0/test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter/5.10.0/junit-jupiter-5.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/app/neo4j-server-test-utils/5.15.0/neo4j-server-test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/rnorth/duct-tape/duct-tape/1.0.8/duct-tape-1.0.8.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/modules/scala-collection-contrib_2.13/0.3.0/scala-collection-contrib_2.13-0.3.0.jar + [classpath] /Users/jnr6/.m2/repository/org/slf4j/slf4j-api/2.0.0/slf4j-api-2.0.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-analysis-common/9.8.0/lucene-analysis-common-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/com/propensive/magnolia_2.13/0.17.0/magnolia_2.13-0.17.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-event/1.13.0/shiro-event-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-api/2.20.0/log4j-api-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-classes-kqueue/4.1.101.Final/netty-transport-classes-kqueue-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/net/bytebuddy/byte-buddy-agent/1.14.9/byte-buddy-agent-1.14.9.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/validation/jakarta.validation-api/2.0.2/jakarta.validation-api-2.0.2.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/database-commons/1.17.4/database-commons-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-front-end/5.16.0/neo4j-front-end-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-procedure/5.16.0/neo4j-procedure-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-import-tool/5.16.0/neo4j-import-tool-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/ws/rs/jakarta.ws.rs-api/2.1.6/jakarta.ws.rs-api-2.1.6.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.10.3/jackson-annotations-2.10.3.jar + [classpath] /Users/jnr6/.m2/repository/com/google/protobuf/protobuf-java/3.21.9/protobuf-java-3.21.9.jar + [classpath] /Users/jnr6/.m2/repository/io/projectreactor/reactor-core/3.6.0/reactor-core-3.6.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-wal/5.16.0/neo4j-wal-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-ssl/5.16.0/neo4j-ssl-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-unix-common/4.1.101.Final/netty-transport-native-unix-common-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-config-core/1.13.0/shiro-config-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-codegen/5.16.0/neo4j-codegen-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-tree/9.6/asm-tree-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-rewriting/5.16.0/neo4j-rewriting-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-backward-codecs/9.8.0/lucene-backward-codecs-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-lock/5.16.0/neo4j-lock-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-schema/5.16.0/neo4j-schema-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/collections/eclipse-collections/11.1.0/eclipse-collections-11.1.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/luben/zstd-jni/1.5.5-10/zstd-jni-1.5.5-10.jar + [classpath] /Users/jnr6/.m2/repository/commons-codec/commons-codec/1.16.0/commons-codec-1.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/jaxrs/jackson-jaxrs-json-provider/2.16.0/jackson-jaxrs-json-provider-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-expression-evaluator/5.16.0/neo4j-cypher-expression-evaluator-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/testcontainers/1.17.4/testcontainers-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/test/neo4j-harness/5.15.0/neo4j-harness-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/javassist/javassist/3.25.0-GA/javassist-3.25.0-GA.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-core/1.13.0/shiro-crypto-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-commons/1.9.0/junit-platform-commons-1.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-utils/2.6.1/hk2-utils-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/io-test-utils/5.15.0/io-test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/annotations/5.16.0/annotations-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-interpreted-runtime/5.16.0/neo4j-cypher-interpreted-runtime-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-cache/5.16.0/neo4j-cypher-cache-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jetbrains/annotations/17.0.0/annotations-17.0.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-layout/5.16.0/neo4j-layout-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/reactivestreams/reactive-streams/1.0.4/reactive-streams-1.0.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/licensing-proxy/zstd-proxy/5.16.0/zstd-proxy-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-security/5.16.0/neo4j-security-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-common/2.34/jersey-common-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/scala-reflect/2.13.11/scala-reflect-2.13.11.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/junit-jupiter/1.17.4/junit-jupiter-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-random-values/5.15.0/neo4j-random-values-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-transport-zerodep/3.2.13/docker-java-transport-zerodep-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-diagnostics/5.16.0/neo4j-diagnostics-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-http/10.0.17/jetty-http-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/cypher-ast-factory/5.16.0/cypher-ast-factory-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-configuration/5.16.0/neo4j-configuration-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-exceptions/5.16.0/neo4j-exceptions-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-util/5.16.0/neo4j-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-id-generator/5.16.0/neo4j-id-generator-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/seancfoley/ipaddress/5.4.0/ipaddress-5.4.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-io/10.0.17/jetty-io-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/commons-io/commons-io/2.11.0/commons-io-2.11.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-queryparser/9.8.0/lucene-queryparser-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/xml/bind/jakarta.xml.bind-api/2.3.2/jakarta.xml.bind-api-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-kernel/5.16.0/neo4j-kernel-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-fabric/5.16.0/neo4j-fabric-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-spatial-index/5.16.0/neo4j-spatial-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-procedure-api/5.16.0/neo4j-procedure-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/sun/xml/fastinfoset/FastInfoset/1.2.16/FastInfoset-1.2.16.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-lucene-index/5.16.0/neo4j-lucene-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/net/bytebuddy/byte-buddy/1.14.9/byte-buddy-1.14.9.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-query-router/5.16.0/neo4j-query-router-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-csv/5.16.0/neo4j-csv-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/toolchain/jetty-servlet-api/4.0.6/jetty-servlet-api-4.0.6.jar + [classpath] /Users/jnr6/IdeaProjects/policy-machine-core/target/test-classes + [classpath] /Users/jnr6/.m2/repository/com/github/ben-manes/caffeine/caffeine/3.1.8/caffeine-3.1.8.jar + [classpath] /Users/jnr6/.m2/repository/com/profesorfalken/WMI4Java/1.6.3/WMI4Java-1.6.3.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/vintage/junit-vintage-engine/5.10.0/junit-vintage-engine-5.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-collections/5.16.0/neo4j-collections-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/assertj/assertj-core/3.24.2/assertj-core-3.24.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-graph-algo/5.16.0/neo4j-graph-algo-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.9.0/junit-jupiter-engine-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jvnet/staxex/stax-ex/1.8.1/stax-ex-1.8.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/app/neo4j-server/5.16.0/neo4j-server-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-monitoring/5.16.0/neo4j-monitoring-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-macros/5.16.0/neo4j-cypher-macros-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jprocesses/jProcesses/1.6.5/jProcesses-1.6.5.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-api/2.6.1/hk2-api-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.9.0/junit-jupiter-api-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-security/10.0.17/jetty-security-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcpkix-jdk18on/1.76/bcpkix-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-engine/1.9.0/junit-platform-engine-1.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-slf4j-provider/5.16.0/neo4j-slf4j-provider-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-kqueue/4.1.101.Final/netty-transport-native-kqueue-4.1.101.Final-osx-x86_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-data-collector/5.16.0/neo4j-data-collector-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/server-api/5.16.0/server-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-native/5.16.0/neo4j-native-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/module/jackson-module-jaxb-annotations/2.16.0/jackson-module-jaxb-annotations-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm/9.6/asm-9.6.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/jaxrs/jackson-jaxrs-base/2.16.0/jackson-jaxrs-base-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar + + -------------------------------------------------------------------------------- + [ Library path ] + -------------------------------------------------------------------------------- + /Users/jnr6/Library/Java/Extensions + /Library/Java/Extensions + /Network/Library/Java/Extensions + /System/Library/Java/Extensions + /usr/lib/java + /Users/jnr6/IdeaProjects/policy-machine-core + + -------------------------------------------------------------------------------- + [ System properties ] + -------------------------------------------------------------------------------- + sun.jnu.encoding = UTF-8 + sun.arch.data.model = 64 + user.timezone = America/New_York + visualvm.id = 74931250975476 + sun.java.launcher = SUN_STANDARD + user.country = US + sun.boot.library.path = /Library/Java/JavaVirtualMachines/jdk-17.0.2.jdk/Contents/Home/lib + sun.java.command = gov.nist.csd.pm.pap.neo4j.ImportTest + jdk.debug = release + sun.cpu.endian = little + user.home = /Users/jnr6 + user.language = en + file.separator = / + sun.management.compiler = HotSpot 64-Bit Tiered Compilers + user.name = jnr6 + path.separator = : + file.encoding = UTF-8 + jnidispatch.path = /Users/jnr6/Library/Caches/JNA/temp/jna5876030457686468303.tmp + jna.loaded = true + user.dir = /Users/jnr6/IdeaProjects/policy-machine-core + native.encoding = UTF-8 + sun.io.unicode.encoding = UnicodeBig + + -------------------------------------------------------------------------------- + [ (IANA) TimeZone database version ] + -------------------------------------------------------------------------------- + TimeZone version: 2021e (available for 601 zone identifiers) + + -------------------------------------------------------------------------------- + [ Network information ] + -------------------------------------------------------------------------------- + Interface utun2: + address: fe80:0:0:0:ce81:b1c:bd2c:69e%utun2 + Interface utun1: + address: fe80:0:0:0:bbf5:1c30:4238:57b2%utun1 + Interface utun0: + address: fe80:0:0:0:73be:4eb:3f31:a891%utun0 + Interface llw0: + address: fe80:0:0:0:c0a6:71ff:fe04:534c%llw0 + Interface awdl0: + address: fe80:0:0:0:c0a6:71ff:fe04:534c%awdl0 + Interface en0: + address: 192.168.1.247 + Interface lo0: + address: fe80:0:0:0:0:0:0:1%lo0 + address: 0:0:0:0:0:0:0:1%lo0 + address: 127.0.0.1 + + -------------------------------------------------------------------------------- + [ Native access information ] + -------------------------------------------------------------------------------- + Native access details: Native access is not available for current platform. + + -------------------------------------------------------------------------------- + [ DBMS config ] + -------------------------------------------------------------------------------- + DBMS provided settings: + server.bolt.enabled=true + server.bolt.listen_address=localhost:9999 + server.directories.neo4j_home=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + Directories in use: + server.directories.data=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data + server.directories.dumps.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/dumps + server.directories.import=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + server.directories.lib=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/lib + server.directories.licenses=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/licenses + server.directories.logs=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/logs + server.directories.neo4j_home=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + server.directories.plugins=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/plugins + server.directories.run=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/run + server.directories.script.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/scripts + server.directories.transaction.logs.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions + + -------------------------------------------------------------------------------- + [ Packaging ] + -------------------------------------------------------------------------------- + Could not read packaging info: java.nio.file.NoSuchFileException: /Users/jnr6/IdeaProjects/policy-machine-core/testdb/packaging_info + +2024-04-03 04:25:53.209+0000 INFO [o.n.d.i.DefaultIdentityModule] Found ServerId on disk: ServerId{54490f53} (54490f53-4b94-4d0f-9604-023c3fe1be5e) +2024-04-03 04:25:53.210+0000 INFO [o.n.d.i.DefaultIdentityModule] This instance is ServerId{54490f53} (54490f53-4b94-4d0f-9604-023c3fe1be5e) +2024-04-03 04:25:53.978+0000 INFO [o.n.d.d.DatabaseLifecycles] Creating 'DatabaseId{00000000[system]}'. +2024-04-03 04:25:54.173+0000 INFO [o.n.b.BoltServer] Using connector transport KQueue +2024-04-03 04:25:54.256+0000 INFO [o.n.b.BoltServer] Configured external Bolt connector with listener address localhost/127.0.0.1:9999 +2024-04-03 04:25:54.256+0000 INFO [o.n.b.BoltServer] Bolt server loaded +2024-04-03 04:25:54.270+0000 INFO [o.n.d.d.DatabaseLifecycles] Starting 'DatabaseId{00000000[system]}'. +2024-04-03 04:25:54.510+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [system/00000000] Scanning log file with version 0 for checkpoint entries +2024-04-03 04:25:54.554+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [system/00000000] Selected RecordFormat:PageAlignedV5_0[aligned-1.1] record format from store /Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system +2024-04-03 04:25:54.554+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [system/00000000] Selected format from the store files: RecordFormat:PageAlignedV5_0[aligned-1.1] +2024-04-03 04:25:55.174+0000 INFO [o.n.i.d.DiagnosticsManager] [system/00000000] + [system/00000000] ******************************************************************************** + [system/00000000] [ Database: system ] + [system/00000000] ******************************************************************************** + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Version ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] DBMS: community record-aligned-1.1 + [system/00000000] Kernel version: 5.16.0 + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Store files ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] Disk space on partition (Total / Free / Free %): 500068036608 / 109517807616 / 21 + [system/00000000] Storage files stored on file store: apfs + [system/00000000] Storage files: (filename : modification date - size) + [system/00000000] database_lock: 2024-04-03 04:12:32.900+0000 - 0B + [system/00000000] id-buffer.tmp.0: 2024-04-03 04:21:11.930+0000 - 0B + [system/00000000] neostore: 2024-04-03 04:12:32.662+0000 - 8.000KiB + [system/00000000] neostore.counts.db: 2024-04-03 04:25:54.996+0000 - 48.00KiB + [system/00000000] neostore.indexstats.db: 2024-04-03 04:25:55.046+0000 - 48.00KiB + [system/00000000] neostore.labeltokenstore.db: 2024-04-03 04:12:39.430+0000 - 8.000KiB + [system/00000000] neostore.labeltokenstore.db.id: 2024-04-03 04:25:54.922+0000 - 40.00KiB + [system/00000000] neostore.labeltokenstore.db.names: 2024-04-03 04:12:39.454+0000 - 8.000KiB + [system/00000000] neostore.labeltokenstore.db.names.id: 2024-04-03 04:25:54.907+0000 - 40.00KiB + [system/00000000] neostore.nodestore.db: 2024-04-03 04:12:39.416+0000 - 8.000KiB + [system/00000000] neostore.nodestore.db.id: 2024-04-03 04:25:54.732+0000 - 40.00KiB + [system/00000000] neostore.nodestore.db.labels: 2024-04-03 04:12:32.509+0000 - 8.000KiB + [system/00000000] neostore.nodestore.db.labels.id: 2024-04-03 04:25:54.705+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db: 2024-04-03 04:12:39.442+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.arrays: 2024-04-03 04:12:32.565+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.arrays.id: 2024-04-03 04:25:54.799+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.id: 2024-04-03 04:25:54.829+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.index: 2024-04-03 04:12:39.477+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.index.id: 2024-04-03 04:25:54.763+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.index.keys: 2024-04-03 04:12:39.464+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.index.keys.id: 2024-04-03 04:25:54.745+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.strings: 2024-04-03 04:12:39.367+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.strings.id: 2024-04-03 04:25:54.782+0000 - 40.00KiB + [system/00000000] neostore.relationshipgroupstore.db: 2024-04-03 04:12:32.640+0000 - 8.000KiB + [system/00000000] neostore.relationshipgroupstore.db.id: 2024-04-03 04:25:54.952+0000 - 40.00KiB + [system/00000000] neostore.relationshipgroupstore.degrees.db: 2024-04-03 04:25:55.025+0000 - 40.00KiB + [system/00000000] neostore.relationshipstore.db: 2024-04-03 04:12:39.378+0000 - 8.000KiB + [system/00000000] neostore.relationshipstore.db.id: 2024-04-03 04:25:54.846+0000 - 40.00KiB + [system/00000000] neostore.relationshiptypestore.db: 2024-04-03 04:12:39.405+0000 - 8.000KiB + [system/00000000] neostore.relationshiptypestore.db.id: 2024-04-03 04:25:54.889+0000 - 40.00KiB + [system/00000000] neostore.relationshiptypestore.db.names: 2024-04-03 04:12:39.392+0000 - 8.000KiB + [system/00000000] neostore.relationshiptypestore.db.names.id: 2024-04-03 04:25:54.867+0000 - 40.00KiB + [system/00000000] neostore.schemastore.db: 2024-04-03 04:12:39.490+0000 - 8.000KiB + [system/00000000] neostore.schemastore.db.id: 2024-04-03 04:25:54.939+0000 - 40.00KiB + [system/00000000] schema: + [system/00000000] index: + [system/00000000] range-1.0: + [system/00000000] 3: + [system/00000000] index-3: 2024-04-03 04:21:11.848+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.321+0000 - 48.00KiB + [system/00000000] 4: + [system/00000000] index-4: 2024-04-03 04:21:11.869+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.437+0000 - 48.00KiB + [system/00000000] 7: + [system/00000000] index-7: 2024-04-03 04:21:11.894+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.907+0000 - 48.00KiB + [system/00000000] 8: + [system/00000000] index-8: 2024-04-03 04:21:11.915+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.997+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.996+0000 - 192.0KiB + [system/00000000] token-lookup-1.0: + [system/00000000] 1: + [system/00000000] index-1: 2024-04-03 04:21:11.788+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:33.516+0000 - 48.00KiB + [system/00000000] 2: + [system/00000000] index-2: 2024-04-03 04:21:11.814+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:33.409+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:33.515+0000 - 96.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.321+0000 - 288.0KiB + [system/00000000] - Total: 2024-04-03 04:12:33.407+0000 - 288.0KiB + [system/00000000] Storage summary: + [system/00000000] Total size of store: 1.078MiB + [system/00000000] Total size of mapped files: 408.0KiB + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Transaction log ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] Transaction log files stored on file store: apfs + [system/00000000] Transaction log metadata: + [system/00000000] - current kernel version used in transactions: V5_15 + [system/00000000] - last committed transaction id: 37 + [system/00000000] Transaction log files: + [system/00000000] - existing transaction log versions: 0-0 + [system/00000000] - oldest transaction 2 found in log with version 0 + [system/00000000] - files: (filename : creation date - size) + [system/00000000] neostore.transaction.db.0: 2024-04-03 04:12:32.000+0000 - 19.26KiB + [system/00000000] - total size of files: 19.26KiB + [system/00000000] Checkpoint log files: + [system/00000000] - existing checkpoint log versions: 0-0 + [system/00000000] - last checkpoint: CheckpointInfo[transactionLogPosition=LogPosition{logVersion=0, byteOffset=19725}, storeId=StoreId{creationTime=1712117552660, random=4552926301767966796, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1}, checkpointEntryPosition=LogPosition{logVersion=0, byteOffset=360}, channelPositionAfterCheckpoint=LogPosition{logVersion=0, byteOffset=592}, checkpointFilePostReadPosition=LogPosition{logVersion=0, byteOffset=592}, kernelVersion=KernelVersion{V5_15,version=14}, kernelVersionByte=14, transactionId=TransactionId[transactionId=37, checksum=-1026009811, commitTimestamp=1712117555154, consensusIndex=-1], reason=Checkpoint triggered by "Database shutdown" @ txId: 37, consensusIndexInCheckpoint=true] + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Id usage ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] ArrayPropertyStore[neostore.nodestore.db.labels]: used=1 high=0 + [system/00000000] NodeStore[neostore.nodestore.db]: used=6 high=5 + [system/00000000] StringPropertyStore[neostore.propertystore.db.index.keys]: used=44 high=43 + [system/00000000] PropertyIndexStore[neostore.propertystore.db.index]: used=31 high=30 + [system/00000000] StringPropertyStore[neostore.propertystore.db.strings]: used=3 high=2 + [system/00000000] ArrayPropertyStore[neostore.propertystore.db.arrays]: used=1 high=0 + [system/00000000] PropertyStore[neostore.propertystore.db]: used=59 high=58 + [system/00000000] RelationshipStore[neostore.relationshipstore.db]: used=2 high=1 + [system/00000000] StringPropertyStore[neostore.relationshiptypestore.db.names]: used=2 high=1 + [system/00000000] RelationshipTypeStore[neostore.relationshiptypestore.db]: used=1 high=0 + [system/00000000] StringPropertyStore[neostore.labeltokenstore.db.names]: used=5 high=4 + [system/00000000] LabelTokenStore[neostore.labeltokenstore.db]: used=4 high=3 + [system/00000000] SchemaStore[neostore.schemastore.db]: used=11 high=10 + [system/00000000] RelationshipGroupStore[neostore.relationshipgroupstore.db]: used=1 high=0 + [system/00000000] NeoStore[neostore]: used=-1 high=-1 + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Metadata ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] EXTERNAL_STORE_UUID (Database identifier exposed as external store identity. Generated on creation and never updated): 8e4fd9af-0e04-47d8-a19c-cdb72dbda752 + [system/00000000] DATABASE_ID (The last used DatabaseId for this database): null + [system/00000000] LEGACY_STORE_VERSION (Legacy store format version. This field is used from 5.0 onwards only to distinguish non-migrated pre 5.0 metadata stores.): -3523014627327384477 + [system/00000000] STORE_ID (Store ID): StoreId{creationTime=1712117552660, random=4552926301767966796, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1} + [system/00000000] +2024-04-03 04:25:55.381+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 04:25:55.381+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 04:25:55.383+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 04:25:55.383+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 04:25:55.408+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 04:25:55.409+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 04:25:55.409+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 04:25:55.409+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 04:25:55.443+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 +2024-04-03 04:25:55.443+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 +2024-04-03 04:25:55.444+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 04:25:55.444+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 +2024-04-03 04:25:55.473+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 +2024-04-03 04:25:55.474+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 +2024-04-03 04:25:55.475+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 04:25:55.475+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 +2024-04-03 04:25:55.494+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 +2024-04-03 04:25:55.494+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 +2024-04-03 04:25:55.496+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 04:25:55.496+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 +2024-04-03 04:25:55.517+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 +2024-04-03 04:25:55.517+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 +2024-04-03 04:25:55.518+0000 INFO [o.n.k.i.a.i.IndexingService] [system/00000000] IndexingService.init: indexes not specifically mentioned above are ONLINE. Total 6 indexes. Processed in 167ms +2024-04-03 04:25:55.518+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 04:25:55.518+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 +2024-04-03 04:25:55.524+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] Requirement `Database unavailable` makes database system unavailable. +2024-04-03 04:25:55.524+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] DatabaseId{00000000[system]} is unavailable. +2024-04-03 04:25:55.581+0000 INFO [o.n.k.d.Database] [system/00000000] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/system/neostore.transaction.db.0] at version=0 +2024-04-03 04:25:55.585+0000 INFO [o.n.k.d.Database] [system/00000000] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/system/checkpoint.0] at version=0 +2024-04-03 04:25:55.586+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [system/00000000] Scanning log file with version 0 for checkpoint entries +2024-04-03 04:25:55.588+0000 INFO [o.n.k.i.a.i.IndexingService] [system/00000000] IndexingService.start: indexes not specifically mentioned above are ONLINE. Total 6 indexes. Processed in 0ms +2024-04-03 04:25:55.618+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] Fulfilling of requirement 'Database unavailable' makes database system available. +2024-04-03 04:25:55.619+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] DatabaseId{00000000[system]} is ready. +2024-04-03 04:25:55.723+0000 INFO [o.n.s.s.s.UserSecurityGraphComponent] Performing postInitialization step for component 'security-users' with version 4 and status CURRENT +2024-04-03 04:25:55.724+0000 INFO [o.n.s.s.s.UserSecurityGraphComponent] Updating the initial password in component 'security-users' +2024-04-03 04:25:55.735+0000 INFO [o.n.d.d.DatabaseLifecycles] Creating 'DatabaseId{fefd0874[neo4j]}'. +2024-04-03 04:25:55.738+0000 INFO [o.n.d.d.DatabaseLifecycles] Starting 'DatabaseId{fefd0874[neo4j]}'. +2024-04-03 04:25:55.756+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [neo4j/fefd0874] Scanning log file with version 0 for checkpoint entries +2024-04-03 04:25:55.767+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected RecordFormat:PageAlignedV5_0[aligned-1.1] record format from store /Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j +2024-04-03 04:25:55.767+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected format from the store files: RecordFormat:PageAlignedV5_0[aligned-1.1] +2024-04-03 04:25:56.018+0000 INFO [o.n.i.d.DiagnosticsManager] [neo4j/fefd0874] + [neo4j/fefd0874] ******************************************************************************** + [neo4j/fefd0874] [ Database: neo4j ] + [neo4j/fefd0874] ******************************************************************************** + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Version ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] DBMS: community record-aligned-1.1 + [neo4j/fefd0874] Kernel version: 5.16.0 + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Store files ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] Disk space on partition (Total / Free / Free %): 500068036608 / 109517807616 / 21 + [neo4j/fefd0874] Storage files stored on file store: apfs + [neo4j/fefd0874] Storage files: (filename : modification date - size) + [neo4j/fefd0874] database_lock: 2024-04-03 04:12:35.327+0000 - 0B + [neo4j/fefd0874] id-buffer.tmp.0: 2024-04-03 04:21:12.468+0000 - 0B + [neo4j/fefd0874] neostore: 2024-04-03 04:12:35.301+0000 - 8.000KiB + [neo4j/fefd0874] neostore.counts.db: 2024-04-03 04:25:55.969+0000 - 48.00KiB + [neo4j/fefd0874] neostore.indexstats.db: 2024-04-03 04:25:55.995+0000 - 40.00KiB + [neo4j/fefd0874] neostore.labeltokenstore.db: 2024-04-03 04:12:38.210+0000 - 8.000KiB + [neo4j/fefd0874] neostore.labeltokenstore.db.id: 2024-04-03 04:25:55.923+0000 - 40.00KiB + [neo4j/fefd0874] neostore.labeltokenstore.db.names: 2024-04-03 04:12:38.182+0000 - 8.000KiB + [neo4j/fefd0874] neostore.labeltokenstore.db.names.id: 2024-04-03 04:25:55.907+0000 - 40.00KiB + [neo4j/fefd0874] neostore.nodestore.db: 2024-04-03 04:12:38.172+0000 - 8.000KiB + [neo4j/fefd0874] neostore.nodestore.db.id: 2024-04-03 04:25:55.781+0000 - 40.00KiB + [neo4j/fefd0874] neostore.nodestore.db.labels: 2024-04-03 04:12:35.189+0000 - 8.000KiB + [neo4j/fefd0874] neostore.nodestore.db.labels.id: 2024-04-03 04:25:55.768+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db: 2024-04-03 04:12:38.196+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.arrays: 2024-04-03 04:12:35.234+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.arrays.id: 2024-04-03 04:25:55.838+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.id: 2024-04-03 04:25:55.853+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.index: 2024-04-03 04:12:38.160+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.index.id: 2024-04-03 04:25:55.811+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.index.keys: 2024-04-03 04:12:38.151+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.index.keys.id: 2024-04-03 04:25:55.797+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.strings: 2024-04-03 04:12:35.222+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.strings.id: 2024-04-03 04:25:55.824+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshipgroupstore.db: 2024-04-03 04:12:35.289+0000 - 8.000KiB + [neo4j/fefd0874] neostore.relationshipgroupstore.db.id: 2024-04-03 04:25:55.954+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshipgroupstore.degrees.db: 2024-04-03 04:25:55.984+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshipstore.db: 2024-04-03 04:12:35.245+0000 - 0B + [neo4j/fefd0874] neostore.relationshipstore.db.id: 2024-04-03 04:25:55.866+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshiptypestore.db: 2024-04-03 04:12:35.259+0000 - 0B + [neo4j/fefd0874] neostore.relationshiptypestore.db.id: 2024-04-03 04:25:55.895+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshiptypestore.db.names: 2024-04-03 04:12:35.246+0000 - 8.000KiB + [neo4j/fefd0874] neostore.relationshiptypestore.db.names.id: 2024-04-03 04:25:55.884+0000 - 40.00KiB + [neo4j/fefd0874] neostore.schemastore.db: 2024-04-03 04:12:36.054+0000 - 8.000KiB + [neo4j/fefd0874] neostore.schemastore.db.id: 2024-04-03 04:25:55.939+0000 - 40.00KiB + [neo4j/fefd0874] schema: + [neo4j/fefd0874] index: + [neo4j/fefd0874] token-lookup-1.0: + [neo4j/fefd0874] 1: + [neo4j/fefd0874] index-1: 2024-04-03 04:21:12.431+0000 - 48.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.459+0000 - 48.00KiB + [neo4j/fefd0874] 2: + [neo4j/fefd0874] index-2: 2024-04-03 04:21:12.456+0000 - 40.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.390+0000 - 40.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.459+0000 - 88.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.390+0000 - 88.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.390+0000 - 88.00KiB + [neo4j/fefd0874] Storage summary: + [neo4j/fefd0874] Total size of store: 880.0KiB + [neo4j/fefd0874] Total size of mapped files: 192.0KiB + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Transaction log ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] Transaction log files stored on file store: apfs + [neo4j/fefd0874] Transaction log metadata: + [neo4j/fefd0874] - current kernel version used in transactions: V5_15 + [neo4j/fefd0874] - last committed transaction id: 7 + [neo4j/fefd0874] Transaction log files: + [neo4j/fefd0874] - existing transaction log versions: 0-0 + [neo4j/fefd0874] - oldest transaction 2 found in log with version 0 + [neo4j/fefd0874] - files: (filename : creation date - size) + [neo4j/fefd0874] neostore.transaction.db.0: 2024-04-03 04:12:35.000+0000 - 3.650KiB + [neo4j/fefd0874] - total size of files: 3.650KiB + [neo4j/fefd0874] Checkpoint log files: + [neo4j/fefd0874] - existing checkpoint log versions: 0-0 + [neo4j/fefd0874] - last checkpoint: CheckpointInfo[transactionLogPosition=LogPosition{logVersion=0, byteOffset=3738}, storeId=StoreId{creationTime=1712117555300, random=260265064831090288, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1}, checkpointEntryPosition=LogPosition{logVersion=0, byteOffset=360}, channelPositionAfterCheckpoint=LogPosition{logVersion=0, byteOffset=592}, checkpointFilePostReadPosition=LogPosition{logVersion=0, byteOffset=592}, kernelVersion=KernelVersion{V5_15,version=14}, kernelVersionByte=14, transactionId=TransactionId[transactionId=7, checksum=1516686099, commitTimestamp=1712117556227, consensusIndex=-1], reason=Checkpoint triggered by "Database shutdown" @ txId: 7, consensusIndexInCheckpoint=true] + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Id usage ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] ArrayPropertyStore[neostore.nodestore.db.labels]: used=1 high=0 + [neo4j/fefd0874] NodeStore[neostore.nodestore.db]: used=1 high=0 + [neo4j/fefd0874] StringPropertyStore[neostore.propertystore.db.index.keys]: used=22 high=21 + [neo4j/fefd0874] PropertyIndexStore[neostore.propertystore.db.index]: used=12 high=11 + [neo4j/fefd0874] StringPropertyStore[neostore.propertystore.db.strings]: used=1 high=0 + [neo4j/fefd0874] ArrayPropertyStore[neostore.propertystore.db.arrays]: used=1 high=0 + [neo4j/fefd0874] PropertyStore[neostore.propertystore.db]: used=9 high=8 + [neo4j/fefd0874] RelationshipStore[neostore.relationshipstore.db]: used=0 high=-1 + [neo4j/fefd0874] StringPropertyStore[neostore.relationshiptypestore.db.names]: used=1 high=0 + [neo4j/fefd0874] RelationshipTypeStore[neostore.relationshiptypestore.db]: used=0 high=-1 + [neo4j/fefd0874] StringPropertyStore[neostore.labeltokenstore.db.names]: used=2 high=1 + [neo4j/fefd0874] LabelTokenStore[neostore.labeltokenstore.db]: used=1 high=0 + [neo4j/fefd0874] SchemaStore[neostore.schemastore.db]: used=3 high=2 + [neo4j/fefd0874] RelationshipGroupStore[neostore.relationshipgroupstore.db]: used=1 high=0 + [neo4j/fefd0874] NeoStore[neostore]: used=-1 high=-1 + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Metadata ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] EXTERNAL_STORE_UUID (Database identifier exposed as external store identity. Generated on creation and never updated): 485f4e4f-d438-40c9-a4ed-0bc1099d976f + [neo4j/fefd0874] DATABASE_ID (The last used DatabaseId for this database): null + [neo4j/fefd0874] LEGACY_STORE_VERSION (Legacy store format version. This field is used from 5.0 onwards only to distinguish non-migrated pre 5.0 metadata stores.): -3523014627327384477 + [neo4j/fefd0874] STORE_ID (Store ID): StoreId{creationTime=1712117555300, random=260265064831090288, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1} + [neo4j/fefd0874] +2024-04-03 04:25:56.047+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job registered: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 04:25:56.047+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job started: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 04:25:56.048+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job finished: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 04:25:56.048+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job closed: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 04:25:56.073+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job registered: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 04:25:56.074+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.init: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 53ms +2024-04-03 04:25:56.074+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job started: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 04:25:56.075+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job finished: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 Number of pages visited: 2, Number of tree nodes: 1, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 04:25:56.076+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job closed: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 04:25:56.077+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] Requirement `Database unavailable` makes database neo4j unavailable. +2024-04-03 04:25:56.077+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] DatabaseId{fefd0874[neo4j]} is unavailable. +2024-04-03 04:25:56.079+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/neo4j/neostore.transaction.db.0] at version=0 +2024-04-03 04:25:56.081+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/neo4j/checkpoint.0] at version=0 +2024-04-03 04:25:56.082+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [neo4j/fefd0874] Scanning log file with version 0 for checkpoint entries +2024-04-03 04:25:56.083+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.start: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 0ms +2024-04-03 04:25:56.085+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] Fulfilling of requirement 'Database unavailable' makes database neo4j available. +2024-04-03 04:25:56.085+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] DatabaseId{fefd0874[neo4j]} is ready. +2024-04-03 04:25:56.130+0000 INFO [o.n.b.p.c.c.n.SocketNettyConnector] Bolt enabled on localhost:9999. +2024-04-03 04:25:56.130+0000 INFO [o.n.b.BoltServer] Bolt server started +2024-04-03 04:25:56.132+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] id: 266B93A8C1445AE734BA77BB99FDF56964B6082641ED1A3E87435C6A5111E836 +2024-04-03 04:25:56.133+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] name: system +2024-04-03 04:25:56.133+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] creationDate: 2024-04-03T04:12:32.66Z +2024-04-03 04:30:24.355+0000 INFO [o.n.g.f.m.GlobalModule] Logging config in use: Embedded default config 'default-server-logs.xml' +2024-04-03 04:30:24.529+0000 WARN [o.n.k.i.JvmChecker] The max heap memory has not been configured. It is recommended that it is always explicitly configured, to ensure the system has a balanced configuration. Until then, a JVM computed heuristic of 4294967296 bytes is used instead. If you are running neo4j server, you need to configure server.memory.heap.max_size in neo4j.conf. If you are running neo4j embedded, you have to launch the JVM with -Xmx set to a value. You can run neo4j-admin server memory-recommendation for memory configuration suggestions. +2024-04-03 04:30:24.530+0000 WARN [o.n.k.i.JvmChecker] The initial heap memory has not been configured. It is recommended that it is always explicitly configured, to ensure the system has a balanced configuration. Until then, a JVM computed heuristic of 268435456 bytes is used instead. If you are running neo4j server, you need to configure server.memory.heap.initial_size in neo4j.conf. If you are running neo4j embedded, you have to launch the JVM with -Xms set to a value. You can run neo4j-admin server memory-recommendation for memory configuration suggestions. +2024-04-03 04:30:24.564+0000 WARN [o.n.i.p.PageCache] The server.memory.pagecache.size setting has not been configured. It is recommended that this setting is always explicitly configured, to ensure the system has a balanced configuration. Until then, a computed heuristic value of 6442450944 bytes will be used instead. Run `neo4j-admin memory-recommendation` for memory configuration suggestions. +2024-04-03 04:30:24.564+0000 WARN [o.n.i.p.PageCache] Reflection access to java.nio.DirectByteBuffer is not available, using fallback mode. This could have negative impact on performance and memory usage. Consider adding --add-opens=java.base/java.nio=ALL-UNNAMED to VM options. +2024-04-03 04:30:24.790+0000 INFO [o.n.i.d.DiagnosticsManager] + ******************************************************************************** + [ System diagnostics ] + ******************************************************************************** + -------------------------------------------------------------------------------- + [ System memory information ] + -------------------------------------------------------------------------------- + Total Physical memory: 16.00GiB + Free Physical memory: 576.5MiB + Committed virtual memory: 38.30GiB + Total swap space: 2.000GiB + Free swap space: 1.583GiB + + -------------------------------------------------------------------------------- + [ JVM memory information ] + -------------------------------------------------------------------------------- + Free memory: 112.0MiB + Total memory: 260.0MiB + Max memory: 4.000GiB + Garbage Collector: G1 Young Generation: [G1 Eden Space, G1 Survivor Space, G1 Old Gen] + Garbage Collector: G1 Old Generation: [G1 Eden Space, G1 Survivor Space, G1 Old Gen] + Memory Pool: CodeHeap 'non-nmethods' (Non-heap memory): committed=2.438MiB, used=1.214MiB, max=5.570MiB, threshold=0B + Memory Pool: Metaspace (Non-heap memory): committed=20.13MiB, used=19.74MiB, max=-1B, threshold=0B + Memory Pool: CodeHeap 'profiled nmethods' (Non-heap memory): committed=4.375MiB, used=4.327MiB, max=117.2MiB, threshold=0B + Memory Pool: Compressed Class Space (Non-heap memory): committed=2.313MiB, used=2.122MiB, max=1.000GiB, threshold=0B + Memory Pool: G1 Eden Space (Heap memory): committed=152.0MiB, used=114.0MiB, max=-1B, threshold=? + Memory Pool: G1 Old Gen (Heap memory): committed=100.0MiB, used=23.96MiB, max=4.000GiB, threshold=0B + Memory Pool: G1 Survivor Space (Heap memory): committed=8.000MiB, used=8.000MiB, max=-1B, threshold=? + Memory Pool: CodeHeap 'non-profiled nmethods' (Non-heap memory): committed=2.438MiB, used=1.319MiB, max=117.2MiB, threshold=0B + + -------------------------------------------------------------------------------- + [ Operating system information ] + -------------------------------------------------------------------------------- + Operating System: Mac OS X; version: 12.7.4; arch: x86_64; cpus: 8 + Max number of file descriptors: 10240 + Number of open file descriptors: 227 + Process id: 43732 + Byte order: LITTLE_ENDIAN + Local timezone: America/New_York + Memory page size: 4096 + Unaligned memory access allowed: true + + -------------------------------------------------------------------------------- + [ JVM information ] + -------------------------------------------------------------------------------- + VM Name: Java HotSpot(TM) 64-Bit Server VM + VM Vendor: Oracle Corporation + VM Version: 17.0.2+8-LTS-86 + JIT compiler: HotSpot 64-Bit Tiered Compilers + VM Arguments: [-Dvisualvm.id=75202940778428, -javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=56356:/Applications/IntelliJ IDEA.app/Contents/bin, -Dfile.encoding=UTF-8] + + -------------------------------------------------------------------------------- + [ Java classpath ] + -------------------------------------------------------------------------------- + [classpath] /Users/jnr6/.m2/repository/it/unimi/dsi/fastutil/8.5.13/fastutil-8.5.13.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-codec-http/4.1.101.Final/netty-codec-http-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/scala-library/2.13.11/scala-library-2.13.11.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-command-line/5.16.0/neo4j-command-line-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-epoll/4.1.101.Final/netty-transport-native-epoll-4.1.101.Final-linux-x86_64.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-common/4.1.101.Final/netty-common-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.16.0/jackson-databind-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-consistency-check/5.16.0/neo4j-consistency-check-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-values/5.16.0/neo4j-values-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-dbms/5.16.0/neo4j-dbms-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-analysis/9.6/asm-analysis-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-planner/5.16.0/neo4j-cypher-planner-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/antlr/antlr4-runtime/4.8/antlr4-runtime-4.8.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-api/3.2.13/docker-java-api-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/activation/jakarta.activation-api/1.2.1/jakarta.activation-api-1.2.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-planner-spi/5.16.0/neo4j-cypher-planner-spi-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-resource/5.16.0/neo4j-resource-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-servlet/10.0.17/jetty-servlet-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-cache/1.13.0/shiro-cache-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-javacc-parser/5.16.0/neo4j-cypher-javacc-parser-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/sun/istack/istack-commons-runtime/3.0.8/istack-commons-runtime-3.0.8.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-configuration2/2.9.0/commons-configuration2-2.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-compress/1.21/commons-compress-1.21.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/containers/jersey-container-servlet/2.34/jersey-container-servlet-2.34.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-kqueue/4.1.101.Final/netty-transport-native-kqueue-4.1.101.Final-osx-aarch_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-concurrent/5.16.0/neo4j-concurrent-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/mysql/1.17.4/mysql-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/mockito/mockito-core/5.7.0/mockito-core-5.7.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher/5.16.0/neo4j-cypher-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-capabilities/5.16.0/neo4j-capabilities-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-notifications/5.16.0/neo4j-notifications-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-import-util/5.16.0/neo4j-import-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-config/5.16.0/neo4j-cypher-config-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/containers/jersey-container-servlet-core/2.34/jersey-container-servlet-core-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-io/5.16.0/neo4j-io-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-locator/2.6.1/hk2-locator-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-lang3/3.13.0/commons-lang3-3.13.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.16.0/jackson-core-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/mysql/mysql-connector-j/8.2.0/mysql-connector-j-8.2.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-classes-epoll/4.1.101.Final/netty-transport-classes-epoll-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/objenesis/objenesis/3.3/objenesis-3.3.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-server/2.34/jersey-server-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-client/2.34/jersey-client-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-ast-factory/5.16.0/neo4j-cypher-ast-factory-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-handler/4.1.101.Final/netty-handler-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j/5.16.0/neo4j-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/google/code/gson/gson/2.9.0/gson-2.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-logging/5.16.0/neo4j-logging-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-webapp/10.0.17/jetty-webapp-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-core/9.8.0/lucene-core-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-kernel-api/5.16.0/neo4j-kernel-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcutil-jdk18on/1.76/bcutil-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/bitbucket/inkytonik/kiama/kiama_2.13/2.5.1/kiama_2.13-2.5.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-common/5.16.0/neo4j-common-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/junit/junit/4.13.2/junit-4.13.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-index/5.16.0/neo4j-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport/4.1.101.Final/netty-transport-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-util/9.6/asm-util-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/jctools/jctools-core/4.0.2/jctools-core-4.0.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-graphdb-api/5.16.0/neo4j-graphdb-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/jdbc/1.17.4/jdbc-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-runtime-util/5.16.0/neo4j-cypher-runtime-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/collections/eclipse-collections-api/11.1.0/eclipse-collections-api-11.1.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-unsafe/5.16.0/neo4j-unsafe-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-server/10.0.17/jetty-server-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcprov-jdk18on/1.76/bcprov-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-slotted-runtime/5.16.0/neo4j-cypher-slotted-runtime-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-layout-template-json/2.20.0/log4j-layout-template-json-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-fulltext-index/5.16.0/neo4j-fulltext-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/net/java/dev/jna/jna/5.8.0/jna-5.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-util/10.0.17/jetty-util-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-expressions/5.16.0/neo4j-expressions-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-transport/3.2.13/docker-java-transport-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/commons-logging/commons-logging/1.2/commons-logging-1.2.jar + [classpath] /Users/jnr6/IdeaProjects/policy-machine-core/target/classes + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-testkit/1.10.0/junit-platform-testkit-1.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-core/1.13.0/shiro-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-physical-planning/5.16.0/neo4j-cypher-physical-planning-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-storage-engine-util/5.16.0/neo4j-storage-engine-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-ast/5.16.0/neo4j-ast-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-core/2.20.0/log4j-core-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-params/5.9.0/junit-jupiter-params-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/external/jakarta.inject/2.6.1/jakarta.inject-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/inject/jersey-hk2/2.34/jersey-hk2-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/hamcrest/hamcrest/2.2/hamcrest-2.2.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jaxb/jaxb-runtime/2.3.2/jaxb-runtime-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-logical-plans/5.16.0/neo4j-cypher-logical-plans-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-xml/10.0.17/jetty-xml-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar + [classpath] /Users/jnr6/.m2/repository/org/codehaus/jettison/jettison/1.5.4/jettison-1.5.4.jar + [classpath] /Users/jnr6/.m2/repository/com/propensive/mercator_2.13/0.2.1/mercator_2.13-0.2.1.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jaxb/txw2/2.3.2/txw2-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-resolver/4.1.101.Final/netty-resolver-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar + [classpath] /Users/jnr6/.m2/repository/org/awaitility/awaitility/4.2.0/awaitility-4.2.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-codec/4.1.101.Final/netty-codec-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-buffer/4.1.101.Final/netty-buffer-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-hash/1.13.0/shiro-crypto-hash-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/info/picocli/picocli/4.7.5/picocli-4.7.5.jar + [classpath] /Users/jnr6/.m2/repository/com/profesorfalken/jPowerShell/3.0/jPowerShell-3.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-cipher/1.13.0/shiro-crypto-cipher-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-lang/1.13.0/shiro-lang-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-token-api/5.16.0/neo4j-token-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-bolt/5.16.0/neo4j-bolt-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-record-storage-engine/5.16.0/neo4j-record-storage-engine-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-epoll/4.1.101.Final/netty-transport-native-epoll-4.1.101.Final-linux-aarch_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-ir/5.16.0/neo4j-cypher-ir-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/test-utils/5.15.0/test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter/5.10.0/junit-jupiter-5.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/app/neo4j-server-test-utils/5.15.0/neo4j-server-test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/rnorth/duct-tape/duct-tape/1.0.8/duct-tape-1.0.8.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/modules/scala-collection-contrib_2.13/0.3.0/scala-collection-contrib_2.13-0.3.0.jar + [classpath] /Users/jnr6/.m2/repository/org/slf4j/slf4j-api/2.0.0/slf4j-api-2.0.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-analysis-common/9.8.0/lucene-analysis-common-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/com/propensive/magnolia_2.13/0.17.0/magnolia_2.13-0.17.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-event/1.13.0/shiro-event-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-api/2.20.0/log4j-api-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-classes-kqueue/4.1.101.Final/netty-transport-classes-kqueue-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/net/bytebuddy/byte-buddy-agent/1.14.9/byte-buddy-agent-1.14.9.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/validation/jakarta.validation-api/2.0.2/jakarta.validation-api-2.0.2.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/database-commons/1.17.4/database-commons-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-front-end/5.16.0/neo4j-front-end-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-procedure/5.16.0/neo4j-procedure-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-import-tool/5.16.0/neo4j-import-tool-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/ws/rs/jakarta.ws.rs-api/2.1.6/jakarta.ws.rs-api-2.1.6.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.10.3/jackson-annotations-2.10.3.jar + [classpath] /Users/jnr6/.m2/repository/com/google/protobuf/protobuf-java/3.21.9/protobuf-java-3.21.9.jar + [classpath] /Users/jnr6/.m2/repository/io/projectreactor/reactor-core/3.6.0/reactor-core-3.6.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-wal/5.16.0/neo4j-wal-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-ssl/5.16.0/neo4j-ssl-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-unix-common/4.1.101.Final/netty-transport-native-unix-common-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-config-core/1.13.0/shiro-config-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-codegen/5.16.0/neo4j-codegen-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-tree/9.6/asm-tree-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-rewriting/5.16.0/neo4j-rewriting-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-backward-codecs/9.8.0/lucene-backward-codecs-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-lock/5.16.0/neo4j-lock-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-schema/5.16.0/neo4j-schema-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/collections/eclipse-collections/11.1.0/eclipse-collections-11.1.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/luben/zstd-jni/1.5.5-10/zstd-jni-1.5.5-10.jar + [classpath] /Users/jnr6/.m2/repository/commons-codec/commons-codec/1.16.0/commons-codec-1.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/jaxrs/jackson-jaxrs-json-provider/2.16.0/jackson-jaxrs-json-provider-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-expression-evaluator/5.16.0/neo4j-cypher-expression-evaluator-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/testcontainers/1.17.4/testcontainers-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/test/neo4j-harness/5.15.0/neo4j-harness-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/javassist/javassist/3.25.0-GA/javassist-3.25.0-GA.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-core/1.13.0/shiro-crypto-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-commons/1.9.0/junit-platform-commons-1.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-utils/2.6.1/hk2-utils-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/io-test-utils/5.15.0/io-test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/annotations/5.16.0/annotations-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-interpreted-runtime/5.16.0/neo4j-cypher-interpreted-runtime-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-cache/5.16.0/neo4j-cypher-cache-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jetbrains/annotations/17.0.0/annotations-17.0.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-layout/5.16.0/neo4j-layout-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/reactivestreams/reactive-streams/1.0.4/reactive-streams-1.0.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/licensing-proxy/zstd-proxy/5.16.0/zstd-proxy-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-security/5.16.0/neo4j-security-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-common/2.34/jersey-common-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/scala-reflect/2.13.11/scala-reflect-2.13.11.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/junit-jupiter/1.17.4/junit-jupiter-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-random-values/5.15.0/neo4j-random-values-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-transport-zerodep/3.2.13/docker-java-transport-zerodep-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-diagnostics/5.16.0/neo4j-diagnostics-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-http/10.0.17/jetty-http-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/cypher-ast-factory/5.16.0/cypher-ast-factory-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-configuration/5.16.0/neo4j-configuration-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-exceptions/5.16.0/neo4j-exceptions-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-util/5.16.0/neo4j-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-id-generator/5.16.0/neo4j-id-generator-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/seancfoley/ipaddress/5.4.0/ipaddress-5.4.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-io/10.0.17/jetty-io-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/commons-io/commons-io/2.11.0/commons-io-2.11.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-queryparser/9.8.0/lucene-queryparser-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/xml/bind/jakarta.xml.bind-api/2.3.2/jakarta.xml.bind-api-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-kernel/5.16.0/neo4j-kernel-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-fabric/5.16.0/neo4j-fabric-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-spatial-index/5.16.0/neo4j-spatial-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-procedure-api/5.16.0/neo4j-procedure-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/sun/xml/fastinfoset/FastInfoset/1.2.16/FastInfoset-1.2.16.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-lucene-index/5.16.0/neo4j-lucene-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/net/bytebuddy/byte-buddy/1.14.9/byte-buddy-1.14.9.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-query-router/5.16.0/neo4j-query-router-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-csv/5.16.0/neo4j-csv-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/toolchain/jetty-servlet-api/4.0.6/jetty-servlet-api-4.0.6.jar + [classpath] /Users/jnr6/IdeaProjects/policy-machine-core/target/test-classes + [classpath] /Users/jnr6/.m2/repository/com/github/ben-manes/caffeine/caffeine/3.1.8/caffeine-3.1.8.jar + [classpath] /Users/jnr6/.m2/repository/com/profesorfalken/WMI4Java/1.6.3/WMI4Java-1.6.3.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/vintage/junit-vintage-engine/5.10.0/junit-vintage-engine-5.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-collections/5.16.0/neo4j-collections-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/assertj/assertj-core/3.24.2/assertj-core-3.24.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-graph-algo/5.16.0/neo4j-graph-algo-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.9.0/junit-jupiter-engine-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jvnet/staxex/stax-ex/1.8.1/stax-ex-1.8.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/app/neo4j-server/5.16.0/neo4j-server-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-monitoring/5.16.0/neo4j-monitoring-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-macros/5.16.0/neo4j-cypher-macros-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jprocesses/jProcesses/1.6.5/jProcesses-1.6.5.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-api/2.6.1/hk2-api-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.9.0/junit-jupiter-api-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-security/10.0.17/jetty-security-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcpkix-jdk18on/1.76/bcpkix-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-engine/1.9.0/junit-platform-engine-1.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-slf4j-provider/5.16.0/neo4j-slf4j-provider-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-kqueue/4.1.101.Final/netty-transport-native-kqueue-4.1.101.Final-osx-x86_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-data-collector/5.16.0/neo4j-data-collector-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/server-api/5.16.0/server-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-native/5.16.0/neo4j-native-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/module/jackson-module-jaxb-annotations/2.16.0/jackson-module-jaxb-annotations-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm/9.6/asm-9.6.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/jaxrs/jackson-jaxrs-base/2.16.0/jackson-jaxrs-base-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar + + -------------------------------------------------------------------------------- + [ Library path ] + -------------------------------------------------------------------------------- + /Users/jnr6/Library/Java/Extensions + /Library/Java/Extensions + /Network/Library/Java/Extensions + /System/Library/Java/Extensions + /usr/lib/java + /Users/jnr6/IdeaProjects/policy-machine-core + + -------------------------------------------------------------------------------- + [ System properties ] + -------------------------------------------------------------------------------- + sun.jnu.encoding = UTF-8 + sun.arch.data.model = 64 + user.timezone = America/New_York + visualvm.id = 75202940778428 + sun.java.launcher = SUN_STANDARD + user.country = US + sun.boot.library.path = /Library/Java/JavaVirtualMachines/jdk-17.0.2.jdk/Contents/Home/lib + sun.java.command = gov.nist.csd.pm.pap.neo4j.ImportTest + jdk.debug = release + sun.cpu.endian = little + user.home = /Users/jnr6 + user.language = en + file.separator = / + sun.management.compiler = HotSpot 64-Bit Tiered Compilers + user.name = jnr6 + path.separator = : + file.encoding = UTF-8 + jnidispatch.path = /Users/jnr6/Library/Caches/JNA/temp/jna11524302625197281968.tmp + jna.loaded = true + user.dir = /Users/jnr6/IdeaProjects/policy-machine-core + native.encoding = UTF-8 + sun.io.unicode.encoding = UnicodeBig + + -------------------------------------------------------------------------------- + [ (IANA) TimeZone database version ] + -------------------------------------------------------------------------------- + TimeZone version: 2021e (available for 601 zone identifiers) + + -------------------------------------------------------------------------------- + [ Network information ] + -------------------------------------------------------------------------------- + Interface utun2: + address: fe80:0:0:0:ce81:b1c:bd2c:69e%utun2 + Interface utun1: + address: fe80:0:0:0:bbf5:1c30:4238:57b2%utun1 + Interface utun0: + address: fe80:0:0:0:73be:4eb:3f31:a891%utun0 + Interface llw0: + address: fe80:0:0:0:c0a6:71ff:fe04:534c%llw0 + Interface awdl0: + address: fe80:0:0:0:c0a6:71ff:fe04:534c%awdl0 + Interface en0: + address: 192.168.1.247 + Interface lo0: + address: fe80:0:0:0:0:0:0:1%lo0 + address: 0:0:0:0:0:0:0:1%lo0 + address: 127.0.0.1 + + -------------------------------------------------------------------------------- + [ Native access information ] + -------------------------------------------------------------------------------- + Native access details: Native access is not available for current platform. + + -------------------------------------------------------------------------------- + [ DBMS config ] + -------------------------------------------------------------------------------- + DBMS provided settings: + server.bolt.enabled=true + server.bolt.listen_address=localhost:9999 + server.directories.neo4j_home=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + Directories in use: + server.directories.data=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data + server.directories.dumps.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/dumps + server.directories.import=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + server.directories.lib=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/lib + server.directories.licenses=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/licenses + server.directories.logs=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/logs + server.directories.neo4j_home=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + server.directories.plugins=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/plugins + server.directories.run=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/run + server.directories.script.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/scripts + server.directories.transaction.logs.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions + + -------------------------------------------------------------------------------- + [ Packaging ] + -------------------------------------------------------------------------------- + Could not read packaging info: java.nio.file.NoSuchFileException: /Users/jnr6/IdeaProjects/policy-machine-core/testdb/packaging_info + +2024-04-03 04:30:24.939+0000 INFO [o.n.d.i.DefaultIdentityModule] Found ServerId on disk: ServerId{54490f53} (54490f53-4b94-4d0f-9604-023c3fe1be5e) +2024-04-03 04:30:24.939+0000 INFO [o.n.d.i.DefaultIdentityModule] This instance is ServerId{54490f53} (54490f53-4b94-4d0f-9604-023c3fe1be5e) +2024-04-03 04:30:25.696+0000 INFO [o.n.d.d.DatabaseLifecycles] Creating 'DatabaseId{00000000[system]}'. +2024-04-03 04:30:25.888+0000 INFO [o.n.b.BoltServer] Using connector transport KQueue +2024-04-03 04:30:25.980+0000 INFO [o.n.b.BoltServer] Configured external Bolt connector with listener address localhost/127.0.0.1:9999 +2024-04-03 04:30:25.981+0000 INFO [o.n.b.BoltServer] Bolt server loaded +2024-04-03 04:30:25.994+0000 INFO [o.n.d.d.DatabaseLifecycles] Starting 'DatabaseId{00000000[system]}'. +2024-04-03 04:30:26.231+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [system/00000000] Scanning log file with version 0 for checkpoint entries +2024-04-03 04:30:26.294+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [system/00000000] Selected RecordFormat:PageAlignedV5_0[aligned-1.1] record format from store /Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system +2024-04-03 04:30:26.294+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [system/00000000] Selected format from the store files: RecordFormat:PageAlignedV5_0[aligned-1.1] +2024-04-03 04:30:26.910+0000 INFO [o.n.i.d.DiagnosticsManager] [system/00000000] + [system/00000000] ******************************************************************************** + [system/00000000] [ Database: system ] + [system/00000000] ******************************************************************************** + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Version ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] DBMS: community record-aligned-1.1 + [system/00000000] Kernel version: 5.16.0 + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Store files ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] Disk space on partition (Total / Free / Free %): 500068036608 / 109507604480 / 21 + [system/00000000] Storage files stored on file store: apfs + [system/00000000] Storage files: (filename : modification date - size) + [system/00000000] database_lock: 2024-04-03 04:12:32.900+0000 - 0B + [system/00000000] id-buffer.tmp.0: 2024-04-03 04:25:55.523+0000 - 0B + [system/00000000] neostore: 2024-04-03 04:12:32.662+0000 - 8.000KiB + [system/00000000] neostore.counts.db: 2024-04-03 04:30:26.723+0000 - 48.00KiB + [system/00000000] neostore.indexstats.db: 2024-04-03 04:30:26.770+0000 - 48.00KiB + [system/00000000] neostore.labeltokenstore.db: 2024-04-03 04:12:39.430+0000 - 8.000KiB + [system/00000000] neostore.labeltokenstore.db.id: 2024-04-03 04:30:26.654+0000 - 40.00KiB + [system/00000000] neostore.labeltokenstore.db.names: 2024-04-03 04:12:39.454+0000 - 8.000KiB + [system/00000000] neostore.labeltokenstore.db.names.id: 2024-04-03 04:30:26.636+0000 - 40.00KiB + [system/00000000] neostore.nodestore.db: 2024-04-03 04:12:39.416+0000 - 8.000KiB + [system/00000000] neostore.nodestore.db.id: 2024-04-03 04:30:26.467+0000 - 40.00KiB + [system/00000000] neostore.nodestore.db.labels: 2024-04-03 04:12:32.509+0000 - 8.000KiB + [system/00000000] neostore.nodestore.db.labels.id: 2024-04-03 04:30:26.442+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db: 2024-04-03 04:12:39.442+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.arrays: 2024-04-03 04:12:32.565+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.arrays.id: 2024-04-03 04:30:26.549+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.id: 2024-04-03 04:30:26.567+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.index: 2024-04-03 04:12:39.477+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.index.id: 2024-04-03 04:30:26.506+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.index.keys: 2024-04-03 04:12:39.464+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.index.keys.id: 2024-04-03 04:30:26.490+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.strings: 2024-04-03 04:12:39.367+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.strings.id: 2024-04-03 04:30:26.527+0000 - 40.00KiB + [system/00000000] neostore.relationshipgroupstore.db: 2024-04-03 04:12:32.640+0000 - 8.000KiB + [system/00000000] neostore.relationshipgroupstore.db.id: 2024-04-03 04:30:26.684+0000 - 40.00KiB + [system/00000000] neostore.relationshipgroupstore.degrees.db: 2024-04-03 04:30:26.749+0000 - 40.00KiB + [system/00000000] neostore.relationshipstore.db: 2024-04-03 04:12:39.378+0000 - 8.000KiB + [system/00000000] neostore.relationshipstore.db.id: 2024-04-03 04:30:26.586+0000 - 40.00KiB + [system/00000000] neostore.relationshiptypestore.db: 2024-04-03 04:12:39.405+0000 - 8.000KiB + [system/00000000] neostore.relationshiptypestore.db.id: 2024-04-03 04:30:26.621+0000 - 40.00KiB + [system/00000000] neostore.relationshiptypestore.db.names: 2024-04-03 04:12:39.392+0000 - 8.000KiB + [system/00000000] neostore.relationshiptypestore.db.names.id: 2024-04-03 04:30:26.606+0000 - 40.00KiB + [system/00000000] neostore.schemastore.db: 2024-04-03 04:12:39.490+0000 - 8.000KiB + [system/00000000] neostore.schemastore.db.id: 2024-04-03 04:30:26.668+0000 - 40.00KiB + [system/00000000] schema: + [system/00000000] index: + [system/00000000] range-1.0: + [system/00000000] 3: + [system/00000000] index-3: 2024-04-03 04:25:55.433+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.321+0000 - 48.00KiB + [system/00000000] 4: + [system/00000000] index-4: 2024-04-03 04:25:55.456+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.437+0000 - 48.00KiB + [system/00000000] 7: + [system/00000000] index-7: 2024-04-03 04:25:55.484+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.907+0000 - 48.00KiB + [system/00000000] 8: + [system/00000000] index-8: 2024-04-03 04:25:55.508+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.997+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.996+0000 - 192.0KiB + [system/00000000] token-lookup-1.0: + [system/00000000] 1: + [system/00000000] index-1: 2024-04-03 04:25:55.370+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:33.516+0000 - 48.00KiB + [system/00000000] 2: + [system/00000000] index-2: 2024-04-03 04:25:55.398+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:33.409+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:33.515+0000 - 96.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.321+0000 - 288.0KiB + [system/00000000] - Total: 2024-04-03 04:12:33.407+0000 - 288.0KiB + [system/00000000] Storage summary: + [system/00000000] Total size of store: 1.078MiB + [system/00000000] Total size of mapped files: 408.0KiB + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Transaction log ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] Transaction log files stored on file store: apfs + [system/00000000] Transaction log metadata: + [system/00000000] - current kernel version used in transactions: V5_15 + [system/00000000] - last committed transaction id: 37 + [system/00000000] Transaction log files: + [system/00000000] - existing transaction log versions: 0-0 + [system/00000000] - oldest transaction 2 found in log with version 0 + [system/00000000] - files: (filename : creation date - size) + [system/00000000] neostore.transaction.db.0: 2024-04-03 04:12:32.000+0000 - 19.26KiB + [system/00000000] - total size of files: 19.26KiB + [system/00000000] Checkpoint log files: + [system/00000000] - existing checkpoint log versions: 0-0 + [system/00000000] - last checkpoint: CheckpointInfo[transactionLogPosition=LogPosition{logVersion=0, byteOffset=19725}, storeId=StoreId{creationTime=1712117552660, random=4552926301767966796, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1}, checkpointEntryPosition=LogPosition{logVersion=0, byteOffset=360}, channelPositionAfterCheckpoint=LogPosition{logVersion=0, byteOffset=592}, checkpointFilePostReadPosition=LogPosition{logVersion=0, byteOffset=592}, kernelVersion=KernelVersion{V5_15,version=14}, kernelVersionByte=14, transactionId=TransactionId[transactionId=37, checksum=-1026009811, commitTimestamp=1712117555154, consensusIndex=-1], reason=Checkpoint triggered by "Database shutdown" @ txId: 37, consensusIndexInCheckpoint=true] + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Id usage ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] ArrayPropertyStore[neostore.nodestore.db.labels]: used=1 high=0 + [system/00000000] NodeStore[neostore.nodestore.db]: used=6 high=5 + [system/00000000] StringPropertyStore[neostore.propertystore.db.index.keys]: used=44 high=43 + [system/00000000] PropertyIndexStore[neostore.propertystore.db.index]: used=31 high=30 + [system/00000000] StringPropertyStore[neostore.propertystore.db.strings]: used=3 high=2 + [system/00000000] ArrayPropertyStore[neostore.propertystore.db.arrays]: used=1 high=0 + [system/00000000] PropertyStore[neostore.propertystore.db]: used=59 high=58 + [system/00000000] RelationshipStore[neostore.relationshipstore.db]: used=2 high=1 + [system/00000000] StringPropertyStore[neostore.relationshiptypestore.db.names]: used=2 high=1 + [system/00000000] RelationshipTypeStore[neostore.relationshiptypestore.db]: used=1 high=0 + [system/00000000] StringPropertyStore[neostore.labeltokenstore.db.names]: used=5 high=4 + [system/00000000] LabelTokenStore[neostore.labeltokenstore.db]: used=4 high=3 + [system/00000000] SchemaStore[neostore.schemastore.db]: used=11 high=10 + [system/00000000] RelationshipGroupStore[neostore.relationshipgroupstore.db]: used=1 high=0 + [system/00000000] NeoStore[neostore]: used=-1 high=-1 + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Metadata ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] EXTERNAL_STORE_UUID (Database identifier exposed as external store identity. Generated on creation and never updated): 8e4fd9af-0e04-47d8-a19c-cdb72dbda752 + [system/00000000] DATABASE_ID (The last used DatabaseId for this database): null + [system/00000000] LEGACY_STORE_VERSION (Legacy store format version. This field is used from 5.0 onwards only to distinguish non-migrated pre 5.0 metadata stores.): -3523014627327384477 + [system/00000000] STORE_ID (Store ID): StoreId{creationTime=1712117552660, random=4552926301767966796, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1} + [system/00000000] +2024-04-03 04:30:27.101+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 04:30:27.101+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 04:30:27.103+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 04:30:27.103+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 04:30:27.124+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 04:30:27.124+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 04:30:27.125+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 04:30:27.125+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 04:30:27.158+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 +2024-04-03 04:30:27.158+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 +2024-04-03 04:30:27.159+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 04:30:27.159+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 +2024-04-03 04:30:27.184+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 +2024-04-03 04:30:27.185+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 +2024-04-03 04:30:27.186+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 04:30:27.186+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 +2024-04-03 04:30:27.208+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 +2024-04-03 04:30:27.209+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 +2024-04-03 04:30:27.210+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 04:30:27.211+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 +2024-04-03 04:30:27.232+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 +2024-04-03 04:30:27.233+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 +2024-04-03 04:30:27.234+0000 INFO [o.n.k.i.a.i.IndexingService] [system/00000000] IndexingService.init: indexes not specifically mentioned above are ONLINE. Total 6 indexes. Processed in 151ms +2024-04-03 04:30:27.234+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 04:30:27.234+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 +2024-04-03 04:30:27.240+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] Requirement `Database unavailable` makes database system unavailable. +2024-04-03 04:30:27.241+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] DatabaseId{00000000[system]} is unavailable. +2024-04-03 04:30:27.296+0000 INFO [o.n.k.d.Database] [system/00000000] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/system/neostore.transaction.db.0] at version=0 +2024-04-03 04:30:27.299+0000 INFO [o.n.k.d.Database] [system/00000000] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/system/checkpoint.0] at version=0 +2024-04-03 04:30:27.300+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [system/00000000] Scanning log file with version 0 for checkpoint entries +2024-04-03 04:30:27.303+0000 INFO [o.n.k.i.a.i.IndexingService] [system/00000000] IndexingService.start: indexes not specifically mentioned above are ONLINE. Total 6 indexes. Processed in 0ms +2024-04-03 04:30:27.333+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] Fulfilling of requirement 'Database unavailable' makes database system available. +2024-04-03 04:30:27.333+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] DatabaseId{00000000[system]} is ready. +2024-04-03 04:30:27.430+0000 INFO [o.n.s.s.s.UserSecurityGraphComponent] Performing postInitialization step for component 'security-users' with version 4 and status CURRENT +2024-04-03 04:30:27.430+0000 INFO [o.n.s.s.s.UserSecurityGraphComponent] Updating the initial password in component 'security-users' +2024-04-03 04:30:27.441+0000 INFO [o.n.d.d.DatabaseLifecycles] Creating 'DatabaseId{fefd0874[neo4j]}'. +2024-04-03 04:30:27.444+0000 INFO [o.n.d.d.DatabaseLifecycles] Starting 'DatabaseId{fefd0874[neo4j]}'. +2024-04-03 04:30:27.466+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [neo4j/fefd0874] Scanning log file with version 0 for checkpoint entries +2024-04-03 04:30:27.497+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected RecordFormat:PageAlignedV5_0[aligned-1.1] record format from store /Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j +2024-04-03 04:30:27.497+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected format from the store files: RecordFormat:PageAlignedV5_0[aligned-1.1] +2024-04-03 04:30:27.728+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Transaction logs entries found after the last check point (which is at LogPosition{logVersion=0, byteOffset=3738}). First observed transaction id: 8. +2024-04-03 04:30:27.771+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Recovery required from position LogPosition{logVersion=0, byteOffset=3738} +2024-04-03 04:30:27.780+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] TransactionLogsRecovery +2024-04-03 04:30:27.787+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 10% completed +2024-04-03 04:30:27.788+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 20% completed +2024-04-03 04:30:27.788+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 30% completed +2024-04-03 04:30:27.788+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 40% completed +2024-04-03 04:30:27.789+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 50% completed +2024-04-03 04:30:27.816+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job registered: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 04:30:27.817+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job registered: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 04:30:27.817+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job started: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 04:30:27.817+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job started: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 04:30:27.819+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job finished: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 04:30:27.819+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job finished: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 04:30:27.819+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job closed: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 04:30:27.819+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job closed: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 04:30:27.839+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job registered: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 04:30:27.840+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job registered: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 04:30:27.840+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.init: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 49ms +2024-04-03 04:30:27.840+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job started: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 04:30:27.840+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job started: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 04:30:27.841+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job finished: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 Number of pages visited: 2, Number of tree nodes: 1, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 04:30:27.842+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job finished: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 Number of pages visited: 2, Number of tree nodes: 1, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 04:30:27.842+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job closed: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 04:30:27.842+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job closed: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 04:30:27.852+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 60% completed +2024-04-03 04:30:27.852+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 70% completed +2024-04-03 04:30:27.853+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 80% completed +2024-04-03 04:30:27.861+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 90% completed +2024-04-03 04:30:27.861+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 100% completed +2024-04-03 04:30:27.863+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Recovery in 'full' mode completed. Observed transactions range [first:8, last:10]: 3 transactions applied, 0 not completed transactions rolled back, skipped applying 0 previously rolled back transactions. Time spent: 133ms. +2024-04-03 04:30:27.865+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.start: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 0ms +2024-04-03 04:30:27.866+0000 INFO [o.n.k.i.t.l.c.CheckPointerImpl] [neo4j/fefd0874] Checkpoint triggered by "Recovery completed." @ txId: 10 checkpoint started... +2024-04-03 04:30:28.329+0000 INFO [o.n.k.i.t.l.c.CheckPointerImpl] [neo4j/fefd0874] Checkpoint triggered by "Recovery completed." @ txId: 10 checkpoint completed in 461ms. Checkpoint flushed 39 pages (0% of total available pages), in 36 IOs. Checkpoint performed with IO limit: unlimited, paused in total 0 times( 0 millis). +2024-04-03 04:30:28.333+0000 INFO [o.n.k.i.t.l.p.LogPruningImpl] [neo4j/fefd0874] No log version pruned. The strategy used was '2 days'. +2024-04-03 04:30:28.642+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [neo4j/fefd0874] Scanning log file with version 0 for checkpoint entries +2024-04-03 04:30:28.656+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected RecordFormat:PageAlignedV5_0[aligned-1.1] record format from store /Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j +2024-04-03 04:30:28.656+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected format from the store files: RecordFormat:PageAlignedV5_0[aligned-1.1] +2024-04-03 04:30:28.901+0000 INFO [o.n.i.d.DiagnosticsManager] [neo4j/fefd0874] + [neo4j/fefd0874] ******************************************************************************** + [neo4j/fefd0874] [ Database: neo4j ] + [neo4j/fefd0874] ******************************************************************************** + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Version ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] DBMS: community record-aligned-1.1 + [neo4j/fefd0874] Kernel version: 5.16.0 + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Store files ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] Disk space on partition (Total / Free / Free %): 500068036608 / 109507608576 / 21 + [neo4j/fefd0874] Storage files stored on file store: apfs + [neo4j/fefd0874] Storage files: (filename : modification date - size) + [neo4j/fefd0874] database_lock: 2024-04-03 04:12:35.327+0000 - 0B + [neo4j/fefd0874] id-buffer.tmp.0: 2024-04-03 04:25:56.076+0000 - 0B + [neo4j/fefd0874] neostore: 2024-04-03 04:12:35.301+0000 - 8.000KiB + [neo4j/fefd0874] neostore.counts.db: 2024-04-03 04:30:28.848+0000 - 48.00KiB + [neo4j/fefd0874] neostore.indexstats.db: 2024-04-03 04:30:28.875+0000 - 40.00KiB + [neo4j/fefd0874] neostore.labeltokenstore.db: 2024-04-03 04:30:28.303+0000 - 8.000KiB + [neo4j/fefd0874] neostore.labeltokenstore.db.id: 2024-04-03 04:30:28.805+0000 - 40.00KiB + [neo4j/fefd0874] neostore.labeltokenstore.db.names: 2024-04-03 04:30:28.279+0000 - 8.000KiB + [neo4j/fefd0874] neostore.labeltokenstore.db.names.id: 2024-04-03 04:30:28.791+0000 - 40.00KiB + [neo4j/fefd0874] neostore.nodestore.db: 2024-04-03 04:30:28.267+0000 - 8.000KiB + [neo4j/fefd0874] neostore.nodestore.db.id: 2024-04-03 04:30:28.672+0000 - 40.00KiB + [neo4j/fefd0874] neostore.nodestore.db.labels: 2024-04-03 04:12:35.189+0000 - 8.000KiB + [neo4j/fefd0874] neostore.nodestore.db.labels.id: 2024-04-03 04:30:28.658+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db: 2024-04-03 04:30:28.290+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.arrays: 2024-04-03 04:12:35.234+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.arrays.id: 2024-04-03 04:30:28.724+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.id: 2024-04-03 04:30:28.738+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.index: 2024-04-03 04:30:28.255+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.index.id: 2024-04-03 04:30:28.696+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.index.keys: 2024-04-03 04:30:28.242+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.index.keys.id: 2024-04-03 04:30:28.683+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.strings: 2024-04-03 04:12:35.222+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.strings.id: 2024-04-03 04:30:28.710+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshipgroupstore.db: 2024-04-03 04:12:35.289+0000 - 8.000KiB + [neo4j/fefd0874] neostore.relationshipgroupstore.db.id: 2024-04-03 04:30:28.835+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshipgroupstore.degrees.db: 2024-04-03 04:30:28.863+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshipstore.db: 2024-04-03 04:12:35.245+0000 - 0B + [neo4j/fefd0874] neostore.relationshipstore.db.id: 2024-04-03 04:30:28.751+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshiptypestore.db: 2024-04-03 04:12:35.259+0000 - 0B + [neo4j/fefd0874] neostore.relationshiptypestore.db.id: 2024-04-03 04:30:28.778+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshiptypestore.db.names: 2024-04-03 04:12:35.246+0000 - 8.000KiB + [neo4j/fefd0874] neostore.relationshiptypestore.db.names.id: 2024-04-03 04:30:28.765+0000 - 40.00KiB + [neo4j/fefd0874] neostore.schemastore.db: 2024-04-03 04:12:36.054+0000 - 8.000KiB + [neo4j/fefd0874] neostore.schemastore.db.id: 2024-04-03 04:30:28.821+0000 - 40.00KiB + [neo4j/fefd0874] schema: + [neo4j/fefd0874] index: + [neo4j/fefd0874] token-lookup-1.0: + [neo4j/fefd0874] 1: + [neo4j/fefd0874] index-1: 2024-04-03 04:30:28.335+0000 - 48.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.459+0000 - 48.00KiB + [neo4j/fefd0874] 2: + [neo4j/fefd0874] index-2: 2024-04-03 04:30:28.346+0000 - 40.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.390+0000 - 40.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.459+0000 - 88.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.390+0000 - 88.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.390+0000 - 88.00KiB + [neo4j/fefd0874] Storage summary: + [neo4j/fefd0874] Total size of store: 880.0KiB + [neo4j/fefd0874] Total size of mapped files: 192.0KiB + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Transaction log ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] Transaction log files stored on file store: apfs + [neo4j/fefd0874] Transaction log metadata: + [neo4j/fefd0874] - current kernel version used in transactions: V5_15 + [neo4j/fefd0874] - last committed transaction id: 10 + [neo4j/fefd0874] Transaction log files: + [neo4j/fefd0874] - existing transaction log versions: 0-0 + [neo4j/fefd0874] - oldest transaction 2 found in log with version 0 + [neo4j/fefd0874] - files: (filename : creation date - size) + [neo4j/fefd0874] neostore.transaction.db.0: 2024-04-03 04:12:35.000+0000 - 4.381KiB + [neo4j/fefd0874] - total size of files: 4.381KiB + [neo4j/fefd0874] Checkpoint log files: + [neo4j/fefd0874] - existing checkpoint log versions: 0-0 + [neo4j/fefd0874] - last checkpoint: CheckpointInfo[transactionLogPosition=LogPosition{logVersion=0, byteOffset=4486}, storeId=StoreId{creationTime=1712117555300, random=260265064831090288, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1}, checkpointEntryPosition=LogPosition{logVersion=0, byteOffset=592}, channelPositionAfterCheckpoint=LogPosition{logVersion=0, byteOffset=824}, checkpointFilePostReadPosition=LogPosition{logVersion=0, byteOffset=824}, kernelVersion=KernelVersion{V5_15,version=14}, kernelVersionByte=14, transactionId=TransactionId[transactionId=10, checksum=135021038, commitTimestamp=1712118358000, consensusIndex=-1], reason=Checkpoint triggered by "Recovery completed." @ txId: 10, consensusIndexInCheckpoint=true] + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Id usage ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] ArrayPropertyStore[neostore.nodestore.db.labels]: used=1 high=0 + [neo4j/fefd0874] NodeStore[neostore.nodestore.db]: used=5 high=4 + [neo4j/fefd0874] StringPropertyStore[neostore.propertystore.db.index.keys]: used=23 high=22 + [neo4j/fefd0874] PropertyIndexStore[neostore.propertystore.db.index]: used=13 high=12 + [neo4j/fefd0874] StringPropertyStore[neostore.propertystore.db.strings]: used=1 high=0 + [neo4j/fefd0874] ArrayPropertyStore[neostore.propertystore.db.arrays]: used=1 high=0 + [neo4j/fefd0874] PropertyStore[neostore.propertystore.db]: used=13 high=12 + [neo4j/fefd0874] RelationshipStore[neostore.relationshipstore.db]: used=0 high=-1 + [neo4j/fefd0874] StringPropertyStore[neostore.relationshiptypestore.db.names]: used=1 high=0 + [neo4j/fefd0874] RelationshipTypeStore[neostore.relationshiptypestore.db]: used=0 high=-1 + [neo4j/fefd0874] StringPropertyStore[neostore.labeltokenstore.db.names]: used=3 high=2 + [neo4j/fefd0874] LabelTokenStore[neostore.labeltokenstore.db]: used=2 high=1 + [neo4j/fefd0874] SchemaStore[neostore.schemastore.db]: used=3 high=2 + [neo4j/fefd0874] RelationshipGroupStore[neostore.relationshipgroupstore.db]: used=1 high=0 + [neo4j/fefd0874] NeoStore[neostore]: used=-1 high=-1 + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Metadata ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] EXTERNAL_STORE_UUID (Database identifier exposed as external store identity. Generated on creation and never updated): 485f4e4f-d438-40c9-a4ed-0bc1099d976f + [neo4j/fefd0874] DATABASE_ID (The last used DatabaseId for this database): null + [neo4j/fefd0874] LEGACY_STORE_VERSION (Legacy store format version. This field is used from 5.0 onwards only to distinguish non-migrated pre 5.0 metadata stores.): -3523014627327384477 + [neo4j/fefd0874] STORE_ID (Store ID): StoreId{creationTime=1712117555300, random=260265064831090288, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1} + [neo4j/fefd0874] +2024-04-03 04:30:28.945+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.init: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 41ms +2024-04-03 04:30:28.947+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] Requirement `Database unavailable` makes database neo4j unavailable. +2024-04-03 04:30:28.947+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] DatabaseId{fefd0874[neo4j]} is unavailable. +2024-04-03 04:30:28.951+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/neo4j/neostore.transaction.db.0] at version=0 +2024-04-03 04:30:28.952+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/neo4j/checkpoint.0] at version=0 +2024-04-03 04:30:28.953+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [neo4j/fefd0874] Scanning log file with version 0 for checkpoint entries +2024-04-03 04:30:28.954+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.start: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 0ms +2024-04-03 04:30:28.956+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] Fulfilling of requirement 'Database unavailable' makes database neo4j available. +2024-04-03 04:30:28.958+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] DatabaseId{fefd0874[neo4j]} is ready. +2024-04-03 04:30:29.017+0000 INFO [o.n.b.p.c.c.n.SocketNettyConnector] Bolt enabled on localhost:9999. +2024-04-03 04:30:29.017+0000 INFO [o.n.b.BoltServer] Bolt server started +2024-04-03 04:30:29.019+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] id: 266B93A8C1445AE734BA77BB99FDF56964B6082641ED1A3E87435C6A5111E836 +2024-04-03 04:30:29.020+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] name: system +2024-04-03 04:30:29.020+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] creationDate: 2024-04-03T04:12:32.66Z +2024-04-03 04:52:38.440+0000 INFO [o.n.g.f.m.GlobalModule] Logging config in use: Embedded default config 'default-server-logs.xml' +2024-04-03 04:52:38.603+0000 WARN [o.n.k.i.JvmChecker] The max heap memory has not been configured. It is recommended that it is always explicitly configured, to ensure the system has a balanced configuration. Until then, a JVM computed heuristic of 4294967296 bytes is used instead. If you are running neo4j server, you need to configure server.memory.heap.max_size in neo4j.conf. If you are running neo4j embedded, you have to launch the JVM with -Xmx set to a value. You can run neo4j-admin server memory-recommendation for memory configuration suggestions. +2024-04-03 04:52:38.603+0000 WARN [o.n.k.i.JvmChecker] The initial heap memory has not been configured. It is recommended that it is always explicitly configured, to ensure the system has a balanced configuration. Until then, a JVM computed heuristic of 268435456 bytes is used instead. If you are running neo4j server, you need to configure server.memory.heap.initial_size in neo4j.conf. If you are running neo4j embedded, you have to launch the JVM with -Xms set to a value. You can run neo4j-admin server memory-recommendation for memory configuration suggestions. +2024-04-03 04:52:38.647+0000 WARN [o.n.i.p.PageCache] The server.memory.pagecache.size setting has not been configured. It is recommended that this setting is always explicitly configured, to ensure the system has a balanced configuration. Until then, a computed heuristic value of 6442450944 bytes will be used instead. Run `neo4j-admin memory-recommendation` for memory configuration suggestions. +2024-04-03 04:52:38.647+0000 WARN [o.n.i.p.PageCache] Reflection access to java.nio.DirectByteBuffer is not available, using fallback mode. This could have negative impact on performance and memory usage. Consider adding --add-opens=java.base/java.nio=ALL-UNNAMED to VM options. +2024-04-03 04:52:38.979+0000 INFO [o.n.i.d.DiagnosticsManager] + ******************************************************************************** + [ System diagnostics ] + ******************************************************************************** + -------------------------------------------------------------------------------- + [ System memory information ] + -------------------------------------------------------------------------------- + Total Physical memory: 16.00GiB + Free Physical memory: 29.38MiB + Committed virtual memory: 38.29GiB + Total swap space: 2.000GiB + Free swap space: 1.583GiB + + -------------------------------------------------------------------------------- + [ JVM memory information ] + -------------------------------------------------------------------------------- + Free memory: 145.3MiB + Total memory: 260.0MiB + Max memory: 4.000GiB + Garbage Collector: G1 Young Generation: [G1 Eden Space, G1 Survivor Space, G1 Old Gen] + Garbage Collector: G1 Old Generation: [G1 Eden Space, G1 Survivor Space, G1 Old Gen] + Memory Pool: CodeHeap 'non-nmethods' (Non-heap memory): committed=2.438MiB, used=1.210MiB, max=5.570MiB, threshold=0B + Memory Pool: Metaspace (Non-heap memory): committed=20.13MiB, used=19.76MiB, max=-1B, threshold=0B + Memory Pool: CodeHeap 'profiled nmethods' (Non-heap memory): committed=4.063MiB, used=4.051MiB, max=117.2MiB, threshold=0B + Memory Pool: Compressed Class Space (Non-heap memory): committed=2.313MiB, used=2.122MiB, max=1.000GiB, threshold=0B + Memory Pool: G1 Eden Space (Heap memory): committed=156.0MiB, used=86.00MiB, max=-1B, threshold=? + Memory Pool: G1 Old Gen (Heap memory): committed=100.0MiB, used=24.35MiB, max=4.000GiB, threshold=0B + Memory Pool: G1 Survivor Space (Heap memory): committed=4.000MiB, used=3.240MiB, max=-1B, threshold=? + Memory Pool: CodeHeap 'non-profiled nmethods' (Non-heap memory): committed=2.438MiB, used=1017KiB, max=117.2MiB, threshold=0B + + -------------------------------------------------------------------------------- + [ Operating system information ] + -------------------------------------------------------------------------------- + Operating System: Mac OS X; version: 12.7.4; arch: x86_64; cpus: 8 + Max number of file descriptors: 10240 + Number of open file descriptors: 227 + Process id: 45761 + Byte order: LITTLE_ENDIAN + Local timezone: America/New_York + Memory page size: 4096 + Unaligned memory access allowed: true + + -------------------------------------------------------------------------------- + [ JVM information ] + -------------------------------------------------------------------------------- + VM Name: Java HotSpot(TM) 64-Bit Server VM + VM Vendor: Oracle Corporation + VM Version: 17.0.2+8-LTS-86 + JIT compiler: HotSpot 64-Bit Tiered Compilers + VM Arguments: [-Dvisualvm.id=76537111206369, -javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=56643:/Applications/IntelliJ IDEA.app/Contents/bin, -Dfile.encoding=UTF-8] + + -------------------------------------------------------------------------------- + [ Java classpath ] + -------------------------------------------------------------------------------- + [classpath] /Users/jnr6/.m2/repository/it/unimi/dsi/fastutil/8.5.13/fastutil-8.5.13.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-codec-http/4.1.101.Final/netty-codec-http-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/scala-library/2.13.11/scala-library-2.13.11.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-command-line/5.16.0/neo4j-command-line-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-epoll/4.1.101.Final/netty-transport-native-epoll-4.1.101.Final-linux-x86_64.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-common/4.1.101.Final/netty-common-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.16.0/jackson-databind-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-consistency-check/5.16.0/neo4j-consistency-check-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-values/5.16.0/neo4j-values-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-dbms/5.16.0/neo4j-dbms-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-analysis/9.6/asm-analysis-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-planner/5.16.0/neo4j-cypher-planner-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/antlr/antlr4-runtime/4.8/antlr4-runtime-4.8.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-api/3.2.13/docker-java-api-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/activation/jakarta.activation-api/1.2.1/jakarta.activation-api-1.2.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-planner-spi/5.16.0/neo4j-cypher-planner-spi-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-resource/5.16.0/neo4j-resource-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-servlet/10.0.17/jetty-servlet-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-cache/1.13.0/shiro-cache-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-javacc-parser/5.16.0/neo4j-cypher-javacc-parser-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/sun/istack/istack-commons-runtime/3.0.8/istack-commons-runtime-3.0.8.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-configuration2/2.9.0/commons-configuration2-2.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-compress/1.21/commons-compress-1.21.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/containers/jersey-container-servlet/2.34/jersey-container-servlet-2.34.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-kqueue/4.1.101.Final/netty-transport-native-kqueue-4.1.101.Final-osx-aarch_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-concurrent/5.16.0/neo4j-concurrent-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/mysql/1.17.4/mysql-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/mockito/mockito-core/5.7.0/mockito-core-5.7.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher/5.16.0/neo4j-cypher-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-capabilities/5.16.0/neo4j-capabilities-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-notifications/5.16.0/neo4j-notifications-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-import-util/5.16.0/neo4j-import-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-config/5.16.0/neo4j-cypher-config-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/containers/jersey-container-servlet-core/2.34/jersey-container-servlet-core-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-io/5.16.0/neo4j-io-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-locator/2.6.1/hk2-locator-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-lang3/3.13.0/commons-lang3-3.13.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.16.0/jackson-core-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/mysql/mysql-connector-j/8.2.0/mysql-connector-j-8.2.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-classes-epoll/4.1.101.Final/netty-transport-classes-epoll-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/objenesis/objenesis/3.3/objenesis-3.3.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-server/2.34/jersey-server-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-client/2.34/jersey-client-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-ast-factory/5.16.0/neo4j-cypher-ast-factory-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-handler/4.1.101.Final/netty-handler-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j/5.16.0/neo4j-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/google/code/gson/gson/2.9.0/gson-2.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-logging/5.16.0/neo4j-logging-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-webapp/10.0.17/jetty-webapp-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-core/9.8.0/lucene-core-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-kernel-api/5.16.0/neo4j-kernel-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcutil-jdk18on/1.76/bcutil-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/bitbucket/inkytonik/kiama/kiama_2.13/2.5.1/kiama_2.13-2.5.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-common/5.16.0/neo4j-common-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/junit/junit/4.13.2/junit-4.13.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-index/5.16.0/neo4j-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport/4.1.101.Final/netty-transport-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-util/9.6/asm-util-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/jctools/jctools-core/4.0.2/jctools-core-4.0.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-graphdb-api/5.16.0/neo4j-graphdb-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/jdbc/1.17.4/jdbc-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-runtime-util/5.16.0/neo4j-cypher-runtime-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/collections/eclipse-collections-api/11.1.0/eclipse-collections-api-11.1.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-unsafe/5.16.0/neo4j-unsafe-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-server/10.0.17/jetty-server-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcprov-jdk18on/1.76/bcprov-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-slotted-runtime/5.16.0/neo4j-cypher-slotted-runtime-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-layout-template-json/2.20.0/log4j-layout-template-json-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-fulltext-index/5.16.0/neo4j-fulltext-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/net/java/dev/jna/jna/5.8.0/jna-5.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-util/10.0.17/jetty-util-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-expressions/5.16.0/neo4j-expressions-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-transport/3.2.13/docker-java-transport-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/commons-logging/commons-logging/1.2/commons-logging-1.2.jar + [classpath] /Users/jnr6/IdeaProjects/policy-machine-core/target/classes + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-testkit/1.10.0/junit-platform-testkit-1.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-core/1.13.0/shiro-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-physical-planning/5.16.0/neo4j-cypher-physical-planning-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-storage-engine-util/5.16.0/neo4j-storage-engine-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-ast/5.16.0/neo4j-ast-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-core/2.20.0/log4j-core-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-params/5.9.0/junit-jupiter-params-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/external/jakarta.inject/2.6.1/jakarta.inject-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/inject/jersey-hk2/2.34/jersey-hk2-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/hamcrest/hamcrest/2.2/hamcrest-2.2.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jaxb/jaxb-runtime/2.3.2/jaxb-runtime-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-logical-plans/5.16.0/neo4j-cypher-logical-plans-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-xml/10.0.17/jetty-xml-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar + [classpath] /Users/jnr6/.m2/repository/org/codehaus/jettison/jettison/1.5.4/jettison-1.5.4.jar + [classpath] /Users/jnr6/.m2/repository/com/propensive/mercator_2.13/0.2.1/mercator_2.13-0.2.1.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jaxb/txw2/2.3.2/txw2-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-resolver/4.1.101.Final/netty-resolver-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar + [classpath] /Users/jnr6/.m2/repository/org/awaitility/awaitility/4.2.0/awaitility-4.2.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-codec/4.1.101.Final/netty-codec-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-buffer/4.1.101.Final/netty-buffer-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-hash/1.13.0/shiro-crypto-hash-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/info/picocli/picocli/4.7.5/picocli-4.7.5.jar + [classpath] /Users/jnr6/.m2/repository/com/profesorfalken/jPowerShell/3.0/jPowerShell-3.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-cipher/1.13.0/shiro-crypto-cipher-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-lang/1.13.0/shiro-lang-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-token-api/5.16.0/neo4j-token-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-bolt/5.16.0/neo4j-bolt-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-record-storage-engine/5.16.0/neo4j-record-storage-engine-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-epoll/4.1.101.Final/netty-transport-native-epoll-4.1.101.Final-linux-aarch_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-ir/5.16.0/neo4j-cypher-ir-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/test-utils/5.15.0/test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter/5.10.0/junit-jupiter-5.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/app/neo4j-server-test-utils/5.15.0/neo4j-server-test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/rnorth/duct-tape/duct-tape/1.0.8/duct-tape-1.0.8.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/modules/scala-collection-contrib_2.13/0.3.0/scala-collection-contrib_2.13-0.3.0.jar + [classpath] /Users/jnr6/.m2/repository/org/slf4j/slf4j-api/2.0.0/slf4j-api-2.0.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-analysis-common/9.8.0/lucene-analysis-common-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/com/propensive/magnolia_2.13/0.17.0/magnolia_2.13-0.17.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-event/1.13.0/shiro-event-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-api/2.20.0/log4j-api-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-classes-kqueue/4.1.101.Final/netty-transport-classes-kqueue-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/net/bytebuddy/byte-buddy-agent/1.14.9/byte-buddy-agent-1.14.9.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/validation/jakarta.validation-api/2.0.2/jakarta.validation-api-2.0.2.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/database-commons/1.17.4/database-commons-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-front-end/5.16.0/neo4j-front-end-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-procedure/5.16.0/neo4j-procedure-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-import-tool/5.16.0/neo4j-import-tool-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/ws/rs/jakarta.ws.rs-api/2.1.6/jakarta.ws.rs-api-2.1.6.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.10.3/jackson-annotations-2.10.3.jar + [classpath] /Users/jnr6/.m2/repository/com/google/protobuf/protobuf-java/3.21.9/protobuf-java-3.21.9.jar + [classpath] /Users/jnr6/.m2/repository/io/projectreactor/reactor-core/3.6.0/reactor-core-3.6.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-wal/5.16.0/neo4j-wal-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-ssl/5.16.0/neo4j-ssl-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-unix-common/4.1.101.Final/netty-transport-native-unix-common-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-config-core/1.13.0/shiro-config-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-codegen/5.16.0/neo4j-codegen-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-tree/9.6/asm-tree-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-rewriting/5.16.0/neo4j-rewriting-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-backward-codecs/9.8.0/lucene-backward-codecs-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-lock/5.16.0/neo4j-lock-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-schema/5.16.0/neo4j-schema-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/collections/eclipse-collections/11.1.0/eclipse-collections-11.1.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/luben/zstd-jni/1.5.5-10/zstd-jni-1.5.5-10.jar + [classpath] /Users/jnr6/.m2/repository/commons-codec/commons-codec/1.16.0/commons-codec-1.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/jaxrs/jackson-jaxrs-json-provider/2.16.0/jackson-jaxrs-json-provider-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-expression-evaluator/5.16.0/neo4j-cypher-expression-evaluator-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/testcontainers/1.17.4/testcontainers-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/test/neo4j-harness/5.15.0/neo4j-harness-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/javassist/javassist/3.25.0-GA/javassist-3.25.0-GA.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-core/1.13.0/shiro-crypto-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-commons/1.9.0/junit-platform-commons-1.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-utils/2.6.1/hk2-utils-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/io-test-utils/5.15.0/io-test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/annotations/5.16.0/annotations-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-interpreted-runtime/5.16.0/neo4j-cypher-interpreted-runtime-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-cache/5.16.0/neo4j-cypher-cache-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jetbrains/annotations/17.0.0/annotations-17.0.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-layout/5.16.0/neo4j-layout-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/reactivestreams/reactive-streams/1.0.4/reactive-streams-1.0.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/licensing-proxy/zstd-proxy/5.16.0/zstd-proxy-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-security/5.16.0/neo4j-security-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-common/2.34/jersey-common-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/scala-reflect/2.13.11/scala-reflect-2.13.11.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/junit-jupiter/1.17.4/junit-jupiter-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-random-values/5.15.0/neo4j-random-values-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-transport-zerodep/3.2.13/docker-java-transport-zerodep-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-diagnostics/5.16.0/neo4j-diagnostics-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-http/10.0.17/jetty-http-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/cypher-ast-factory/5.16.0/cypher-ast-factory-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-configuration/5.16.0/neo4j-configuration-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-exceptions/5.16.0/neo4j-exceptions-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-util/5.16.0/neo4j-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-id-generator/5.16.0/neo4j-id-generator-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/seancfoley/ipaddress/5.4.0/ipaddress-5.4.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-io/10.0.17/jetty-io-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/commons-io/commons-io/2.11.0/commons-io-2.11.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-queryparser/9.8.0/lucene-queryparser-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/xml/bind/jakarta.xml.bind-api/2.3.2/jakarta.xml.bind-api-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-kernel/5.16.0/neo4j-kernel-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-fabric/5.16.0/neo4j-fabric-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-spatial-index/5.16.0/neo4j-spatial-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-procedure-api/5.16.0/neo4j-procedure-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/sun/xml/fastinfoset/FastInfoset/1.2.16/FastInfoset-1.2.16.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-lucene-index/5.16.0/neo4j-lucene-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/net/bytebuddy/byte-buddy/1.14.9/byte-buddy-1.14.9.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-query-router/5.16.0/neo4j-query-router-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-csv/5.16.0/neo4j-csv-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/toolchain/jetty-servlet-api/4.0.6/jetty-servlet-api-4.0.6.jar + [classpath] /Users/jnr6/IdeaProjects/policy-machine-core/target/test-classes + [classpath] /Users/jnr6/.m2/repository/com/github/ben-manes/caffeine/caffeine/3.1.8/caffeine-3.1.8.jar + [classpath] /Users/jnr6/.m2/repository/com/profesorfalken/WMI4Java/1.6.3/WMI4Java-1.6.3.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/vintage/junit-vintage-engine/5.10.0/junit-vintage-engine-5.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-collections/5.16.0/neo4j-collections-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/assertj/assertj-core/3.24.2/assertj-core-3.24.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-graph-algo/5.16.0/neo4j-graph-algo-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.9.0/junit-jupiter-engine-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jvnet/staxex/stax-ex/1.8.1/stax-ex-1.8.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/app/neo4j-server/5.16.0/neo4j-server-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-monitoring/5.16.0/neo4j-monitoring-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-macros/5.16.0/neo4j-cypher-macros-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jprocesses/jProcesses/1.6.5/jProcesses-1.6.5.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-api/2.6.1/hk2-api-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.9.0/junit-jupiter-api-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-security/10.0.17/jetty-security-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcpkix-jdk18on/1.76/bcpkix-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-engine/1.9.0/junit-platform-engine-1.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-slf4j-provider/5.16.0/neo4j-slf4j-provider-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-kqueue/4.1.101.Final/netty-transport-native-kqueue-4.1.101.Final-osx-x86_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-data-collector/5.16.0/neo4j-data-collector-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/server-api/5.16.0/server-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-native/5.16.0/neo4j-native-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/module/jackson-module-jaxb-annotations/2.16.0/jackson-module-jaxb-annotations-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm/9.6/asm-9.6.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/jaxrs/jackson-jaxrs-base/2.16.0/jackson-jaxrs-base-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar + + -------------------------------------------------------------------------------- + [ Library path ] + -------------------------------------------------------------------------------- + /Users/jnr6/Library/Java/Extensions + /Library/Java/Extensions + /Network/Library/Java/Extensions + /System/Library/Java/Extensions + /usr/lib/java + /Users/jnr6/IdeaProjects/policy-machine-core + + -------------------------------------------------------------------------------- + [ System properties ] + -------------------------------------------------------------------------------- + sun.jnu.encoding = UTF-8 + sun.arch.data.model = 64 + user.timezone = America/New_York + visualvm.id = 76537111206369 + sun.java.launcher = SUN_STANDARD + user.country = US + sun.boot.library.path = /Library/Java/JavaVirtualMachines/jdk-17.0.2.jdk/Contents/Home/lib + sun.java.command = gov.nist.csd.pm.pap.neo4j.ImportTest + jdk.debug = release + sun.cpu.endian = little + user.home = /Users/jnr6 + user.language = en + file.separator = / + sun.management.compiler = HotSpot 64-Bit Tiered Compilers + user.name = jnr6 + path.separator = : + file.encoding = UTF-8 + jnidispatch.path = /Users/jnr6/Library/Caches/JNA/temp/jna11541004363576127623.tmp + jna.loaded = true + user.dir = /Users/jnr6/IdeaProjects/policy-machine-core + native.encoding = UTF-8 + sun.io.unicode.encoding = UnicodeBig + + -------------------------------------------------------------------------------- + [ (IANA) TimeZone database version ] + -------------------------------------------------------------------------------- + TimeZone version: 2021e (available for 601 zone identifiers) + + -------------------------------------------------------------------------------- + [ Network information ] + -------------------------------------------------------------------------------- + Interface utun2: + address: fe80:0:0:0:ce81:b1c:bd2c:69e%utun2 + Interface utun1: + address: fe80:0:0:0:bbf5:1c30:4238:57b2%utun1 + Interface utun0: + address: fe80:0:0:0:73be:4eb:3f31:a891%utun0 + Interface llw0: + address: fe80:0:0:0:c0a6:71ff:fe04:534c%llw0 + Interface awdl0: + address: fe80:0:0:0:c0a6:71ff:fe04:534c%awdl0 + Interface en0: + address: 192.168.1.247 + Interface lo0: + address: fe80:0:0:0:0:0:0:1%lo0 + address: 0:0:0:0:0:0:0:1%lo0 + address: 127.0.0.1 + + -------------------------------------------------------------------------------- + [ Native access information ] + -------------------------------------------------------------------------------- + Native access details: Native access is not available for current platform. + + -------------------------------------------------------------------------------- + [ DBMS config ] + -------------------------------------------------------------------------------- + DBMS provided settings: + server.bolt.enabled=true + server.bolt.listen_address=localhost:9999 + server.directories.neo4j_home=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + Directories in use: + server.directories.data=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data + server.directories.dumps.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/dumps + server.directories.import=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + server.directories.lib=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/lib + server.directories.licenses=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/licenses + server.directories.logs=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/logs + server.directories.neo4j_home=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + server.directories.plugins=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/plugins + server.directories.run=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/run + server.directories.script.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/scripts + server.directories.transaction.logs.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions + + -------------------------------------------------------------------------------- + [ Packaging ] + -------------------------------------------------------------------------------- + Could not read packaging info: java.nio.file.NoSuchFileException: /Users/jnr6/IdeaProjects/policy-machine-core/testdb/packaging_info + +2024-04-03 04:52:39.131+0000 INFO [o.n.d.i.DefaultIdentityModule] Found ServerId on disk: ServerId{54490f53} (54490f53-4b94-4d0f-9604-023c3fe1be5e) +2024-04-03 04:52:39.132+0000 INFO [o.n.d.i.DefaultIdentityModule] This instance is ServerId{54490f53} (54490f53-4b94-4d0f-9604-023c3fe1be5e) +2024-04-03 04:52:40.027+0000 INFO [o.n.d.d.DatabaseLifecycles] Creating 'DatabaseId{00000000[system]}'. +2024-04-03 04:52:40.243+0000 INFO [o.n.b.BoltServer] Using connector transport KQueue +2024-04-03 04:52:40.330+0000 INFO [o.n.b.BoltServer] Configured external Bolt connector with listener address localhost/127.0.0.1:9999 +2024-04-03 04:52:40.331+0000 INFO [o.n.b.BoltServer] Bolt server loaded +2024-04-03 04:52:40.346+0000 INFO [o.n.d.d.DatabaseLifecycles] Starting 'DatabaseId{00000000[system]}'. +2024-04-03 04:52:40.636+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [system/00000000] Scanning log file with version 0 for checkpoint entries +2024-04-03 04:52:40.690+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [system/00000000] Selected RecordFormat:PageAlignedV5_0[aligned-1.1] record format from store /Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system +2024-04-03 04:52:40.690+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [system/00000000] Selected format from the store files: RecordFormat:PageAlignedV5_0[aligned-1.1] +2024-04-03 04:52:41.390+0000 INFO [o.n.i.d.DiagnosticsManager] [system/00000000] + [system/00000000] ******************************************************************************** + [system/00000000] [ Database: system ] + [system/00000000] ******************************************************************************** + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Version ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] DBMS: community record-aligned-1.1 + [system/00000000] Kernel version: 5.16.0 + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Store files ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] Disk space on partition (Total / Free / Free %): 500068036608 / 109509001216 / 21 + [system/00000000] Storage files stored on file store: apfs + [system/00000000] Storage files: (filename : modification date - size) + [system/00000000] database_lock: 2024-04-03 04:12:32.900+0000 - 0B + [system/00000000] id-buffer.tmp.0: 2024-04-03 04:30:27.240+0000 - 0B + [system/00000000] neostore: 2024-04-03 04:12:32.662+0000 - 8.000KiB + [system/00000000] neostore.counts.db: 2024-04-03 04:52:41.178+0000 - 48.00KiB + [system/00000000] neostore.indexstats.db: 2024-04-03 04:52:41.230+0000 - 48.00KiB + [system/00000000] neostore.labeltokenstore.db: 2024-04-03 04:12:39.430+0000 - 8.000KiB + [system/00000000] neostore.labeltokenstore.db.id: 2024-04-03 04:52:41.099+0000 - 40.00KiB + [system/00000000] neostore.labeltokenstore.db.names: 2024-04-03 04:12:39.454+0000 - 8.000KiB + [system/00000000] neostore.labeltokenstore.db.names.id: 2024-04-03 04:52:41.081+0000 - 40.00KiB + [system/00000000] neostore.nodestore.db: 2024-04-03 04:12:39.416+0000 - 8.000KiB + [system/00000000] neostore.nodestore.db.id: 2024-04-03 04:52:40.889+0000 - 40.00KiB + [system/00000000] neostore.nodestore.db.labels: 2024-04-03 04:12:32.509+0000 - 8.000KiB + [system/00000000] neostore.nodestore.db.labels.id: 2024-04-03 04:52:40.861+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db: 2024-04-03 04:12:39.442+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.arrays: 2024-04-03 04:12:32.565+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.arrays.id: 2024-04-03 04:52:40.978+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.id: 2024-04-03 04:52:41.001+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.index: 2024-04-03 04:12:39.477+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.index.id: 2024-04-03 04:52:40.935+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.index.keys: 2024-04-03 04:12:39.464+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.index.keys.id: 2024-04-03 04:52:40.912+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.strings: 2024-04-03 04:12:39.367+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.strings.id: 2024-04-03 04:52:40.958+0000 - 40.00KiB + [system/00000000] neostore.relationshipgroupstore.db: 2024-04-03 04:12:32.640+0000 - 8.000KiB + [system/00000000] neostore.relationshipgroupstore.db.id: 2024-04-03 04:52:41.133+0000 - 40.00KiB + [system/00000000] neostore.relationshipgroupstore.degrees.db: 2024-04-03 04:52:41.208+0000 - 40.00KiB + [system/00000000] neostore.relationshipstore.db: 2024-04-03 04:12:39.378+0000 - 8.000KiB + [system/00000000] neostore.relationshipstore.db.id: 2024-04-03 04:52:41.024+0000 - 40.00KiB + [system/00000000] neostore.relationshiptypestore.db: 2024-04-03 04:12:39.405+0000 - 8.000KiB + [system/00000000] neostore.relationshiptypestore.db.id: 2024-04-03 04:52:41.065+0000 - 40.00KiB + [system/00000000] neostore.relationshiptypestore.db.names: 2024-04-03 04:12:39.392+0000 - 8.000KiB + [system/00000000] neostore.relationshiptypestore.db.names.id: 2024-04-03 04:52:41.045+0000 - 40.00KiB + [system/00000000] neostore.schemastore.db: 2024-04-03 04:12:39.490+0000 - 8.000KiB + [system/00000000] neostore.schemastore.db.id: 2024-04-03 04:52:41.115+0000 - 40.00KiB + [system/00000000] schema: + [system/00000000] index: + [system/00000000] range-1.0: + [system/00000000] 3: + [system/00000000] index-3: 2024-04-03 04:30:27.145+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.321+0000 - 48.00KiB + [system/00000000] 4: + [system/00000000] index-4: 2024-04-03 04:30:27.171+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.437+0000 - 48.00KiB + [system/00000000] 7: + [system/00000000] index-7: 2024-04-03 04:30:27.198+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.907+0000 - 48.00KiB + [system/00000000] 8: + [system/00000000] index-8: 2024-04-03 04:30:27.222+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.997+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.996+0000 - 192.0KiB + [system/00000000] token-lookup-1.0: + [system/00000000] 1: + [system/00000000] index-1: 2024-04-03 04:30:27.091+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:33.516+0000 - 48.00KiB + [system/00000000] 2: + [system/00000000] index-2: 2024-04-03 04:30:27.114+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:33.409+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:33.515+0000 - 96.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.321+0000 - 288.0KiB + [system/00000000] - Total: 2024-04-03 04:12:33.407+0000 - 288.0KiB + [system/00000000] Storage summary: + [system/00000000] Total size of store: 1.078MiB + [system/00000000] Total size of mapped files: 408.0KiB + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Transaction log ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] Transaction log files stored on file store: apfs + [system/00000000] Transaction log metadata: + [system/00000000] - current kernel version used in transactions: V5_15 + [system/00000000] - last committed transaction id: 37 + [system/00000000] Transaction log files: + [system/00000000] - existing transaction log versions: 0-0 + [system/00000000] - oldest transaction 2 found in log with version 0 + [system/00000000] - files: (filename : creation date - size) + [system/00000000] neostore.transaction.db.0: 2024-04-03 04:12:32.000+0000 - 19.26KiB + [system/00000000] - total size of files: 19.26KiB + [system/00000000] Checkpoint log files: + [system/00000000] - existing checkpoint log versions: 0-0 + [system/00000000] - last checkpoint: CheckpointInfo[transactionLogPosition=LogPosition{logVersion=0, byteOffset=19725}, storeId=StoreId{creationTime=1712117552660, random=4552926301767966796, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1}, checkpointEntryPosition=LogPosition{logVersion=0, byteOffset=360}, channelPositionAfterCheckpoint=LogPosition{logVersion=0, byteOffset=592}, checkpointFilePostReadPosition=LogPosition{logVersion=0, byteOffset=592}, kernelVersion=KernelVersion{V5_15,version=14}, kernelVersionByte=14, transactionId=TransactionId[transactionId=37, checksum=-1026009811, commitTimestamp=1712117555154, consensusIndex=-1], reason=Checkpoint triggered by "Database shutdown" @ txId: 37, consensusIndexInCheckpoint=true] + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Id usage ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] ArrayPropertyStore[neostore.nodestore.db.labels]: used=1 high=0 + [system/00000000] NodeStore[neostore.nodestore.db]: used=6 high=5 + [system/00000000] StringPropertyStore[neostore.propertystore.db.index.keys]: used=44 high=43 + [system/00000000] PropertyIndexStore[neostore.propertystore.db.index]: used=31 high=30 + [system/00000000] StringPropertyStore[neostore.propertystore.db.strings]: used=3 high=2 + [system/00000000] ArrayPropertyStore[neostore.propertystore.db.arrays]: used=1 high=0 + [system/00000000] PropertyStore[neostore.propertystore.db]: used=59 high=58 + [system/00000000] RelationshipStore[neostore.relationshipstore.db]: used=2 high=1 + [system/00000000] StringPropertyStore[neostore.relationshiptypestore.db.names]: used=2 high=1 + [system/00000000] RelationshipTypeStore[neostore.relationshiptypestore.db]: used=1 high=0 + [system/00000000] StringPropertyStore[neostore.labeltokenstore.db.names]: used=5 high=4 + [system/00000000] LabelTokenStore[neostore.labeltokenstore.db]: used=4 high=3 + [system/00000000] SchemaStore[neostore.schemastore.db]: used=11 high=10 + [system/00000000] RelationshipGroupStore[neostore.relationshipgroupstore.db]: used=1 high=0 + [system/00000000] NeoStore[neostore]: used=-1 high=-1 + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Metadata ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] EXTERNAL_STORE_UUID (Database identifier exposed as external store identity. Generated on creation and never updated): 8e4fd9af-0e04-47d8-a19c-cdb72dbda752 + [system/00000000] DATABASE_ID (The last used DatabaseId for this database): null + [system/00000000] LEGACY_STORE_VERSION (Legacy store format version. This field is used from 5.0 onwards only to distinguish non-migrated pre 5.0 metadata stores.): -3523014627327384477 + [system/00000000] STORE_ID (Store ID): StoreId{creationTime=1712117552660, random=4552926301767966796, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1} + [system/00000000] +2024-04-03 04:52:41.592+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 04:52:41.592+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 04:52:41.594+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 04:52:41.594+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 04:52:41.618+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 04:52:41.618+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 04:52:41.619+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 04:52:41.619+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 04:52:41.658+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 +2024-04-03 04:52:41.658+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 +2024-04-03 04:52:41.659+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 04:52:41.659+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 +2024-04-03 04:52:41.682+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 +2024-04-03 04:52:41.682+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 +2024-04-03 04:52:41.684+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 1ms +2024-04-03 04:52:41.684+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 +2024-04-03 04:52:41.706+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 +2024-04-03 04:52:41.707+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 +2024-04-03 04:52:41.708+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 04:52:41.708+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 +2024-04-03 04:52:41.735+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 +2024-04-03 04:52:41.735+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 +2024-04-03 04:52:41.736+0000 INFO [o.n.k.i.a.i.IndexingService] [system/00000000] IndexingService.init: indexes not specifically mentioned above are ONLINE. Total 6 indexes. Processed in 182ms +2024-04-03 04:52:41.737+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 04:52:41.737+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 +2024-04-03 04:52:41.744+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] Requirement `Database unavailable` makes database system unavailable. +2024-04-03 04:52:41.744+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] DatabaseId{00000000[system]} is unavailable. +2024-04-03 04:52:41.799+0000 INFO [o.n.k.d.Database] [system/00000000] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/system/neostore.transaction.db.0] at version=0 +2024-04-03 04:52:41.802+0000 INFO [o.n.k.d.Database] [system/00000000] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/system/checkpoint.0] at version=0 +2024-04-03 04:52:41.803+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [system/00000000] Scanning log file with version 0 for checkpoint entries +2024-04-03 04:52:41.806+0000 INFO [o.n.k.i.a.i.IndexingService] [system/00000000] IndexingService.start: indexes not specifically mentioned above are ONLINE. Total 6 indexes. Processed in 0ms +2024-04-03 04:52:41.839+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] Fulfilling of requirement 'Database unavailable' makes database system available. +2024-04-03 04:52:41.840+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] DatabaseId{00000000[system]} is ready. +2024-04-03 04:52:41.956+0000 INFO [o.n.s.s.s.UserSecurityGraphComponent] Performing postInitialization step for component 'security-users' with version 4 and status CURRENT +2024-04-03 04:52:41.956+0000 INFO [o.n.s.s.s.UserSecurityGraphComponent] Updating the initial password in component 'security-users' +2024-04-03 04:52:41.969+0000 INFO [o.n.d.d.DatabaseLifecycles] Creating 'DatabaseId{fefd0874[neo4j]}'. +2024-04-03 04:52:41.972+0000 INFO [o.n.d.d.DatabaseLifecycles] Starting 'DatabaseId{fefd0874[neo4j]}'. +2024-04-03 04:52:41.992+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [neo4j/fefd0874] Scanning log file with version 0 for checkpoint entries +2024-04-03 04:52:42.029+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected RecordFormat:PageAlignedV5_0[aligned-1.1] record format from store /Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j +2024-04-03 04:52:42.029+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected format from the store files: RecordFormat:PageAlignedV5_0[aligned-1.1] +2024-04-03 04:52:42.269+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Transaction logs entries found after the last check point (which is at LogPosition{logVersion=0, byteOffset=4486}). First observed transaction id: 11. +2024-04-03 04:52:42.313+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Recovery required from position LogPosition{logVersion=0, byteOffset=4486} +2024-04-03 04:52:42.319+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] TransactionLogsRecovery +2024-04-03 04:52:42.326+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 10% completed +2024-04-03 04:52:42.327+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 20% completed +2024-04-03 04:52:42.327+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 30% completed +2024-04-03 04:52:42.327+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 40% completed +2024-04-03 04:52:42.327+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 50% completed +2024-04-03 04:52:42.352+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job registered: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 04:52:42.353+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job registered: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 04:52:42.353+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job started: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 04:52:42.353+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job started: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 04:52:42.354+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job finished: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 04:52:42.355+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job finished: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 04:52:42.355+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job closed: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 04:52:42.355+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job closed: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 04:52:42.377+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job registered: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 04:52:42.377+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job registered: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 04:52:42.377+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.init: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 48ms +2024-04-03 04:52:42.378+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job started: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 04:52:42.378+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job started: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 04:52:42.379+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job finished: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 Number of pages visited: 2, Number of tree nodes: 1, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 04:52:42.379+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job finished: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 Number of pages visited: 2, Number of tree nodes: 1, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 04:52:42.379+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job closed: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 04:52:42.379+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job closed: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 04:52:42.399+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 60% completed +2024-04-03 04:52:42.399+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 70% completed +2024-04-03 04:52:42.399+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 80% completed +2024-04-03 04:52:42.399+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 90% completed +2024-04-03 04:52:42.399+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 100% completed +2024-04-03 04:52:42.401+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Recovery in 'full' mode completed. Observed transactions range [first:11, last:11]: 1 transactions applied, 0 not completed transactions rolled back, skipped applying 0 previously rolled back transactions. Time spent: 130ms. +2024-04-03 04:52:42.403+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.start: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 0ms +2024-04-03 04:52:42.404+0000 INFO [o.n.k.i.t.l.c.CheckPointerImpl] [neo4j/fefd0874] Checkpoint triggered by "Recovery completed." @ txId: 11 checkpoint started... +2024-04-03 04:52:42.783+0000 INFO [o.n.k.i.t.l.c.CheckPointerImpl] [neo4j/fefd0874] Checkpoint triggered by "Recovery completed." @ txId: 11 checkpoint completed in 377ms. Checkpoint flushed 35 pages (0% of total available pages), in 33 IOs. Checkpoint performed with IO limit: unlimited, paused in total 0 times( 0 millis). +2024-04-03 04:52:42.787+0000 INFO [o.n.k.i.t.l.p.LogPruningImpl] [neo4j/fefd0874] No log version pruned. The strategy used was '2 days'. +2024-04-03 04:52:43.083+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [neo4j/fefd0874] Scanning log file with version 0 for checkpoint entries +2024-04-03 04:52:43.106+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected RecordFormat:PageAlignedV5_0[aligned-1.1] record format from store /Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j +2024-04-03 04:52:43.107+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected format from the store files: RecordFormat:PageAlignedV5_0[aligned-1.1] +2024-04-03 04:52:43.342+0000 INFO [o.n.i.d.DiagnosticsManager] [neo4j/fefd0874] + [neo4j/fefd0874] ******************************************************************************** + [neo4j/fefd0874] [ Database: neo4j ] + [neo4j/fefd0874] ******************************************************************************** + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Version ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] DBMS: community record-aligned-1.1 + [neo4j/fefd0874] Kernel version: 5.16.0 + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Store files ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] Disk space on partition (Total / Free / Free %): 500068036608 / 109508988928 / 21 + [neo4j/fefd0874] Storage files stored on file store: apfs + [neo4j/fefd0874] Storage files: (filename : modification date - size) + [neo4j/fefd0874] database_lock: 2024-04-03 04:12:35.327+0000 - 0B + [neo4j/fefd0874] id-buffer.tmp.0: 2024-04-03 04:30:30.962+0000 - 125B + [neo4j/fefd0874] neostore: 2024-04-03 04:12:35.301+0000 - 8.000KiB + [neo4j/fefd0874] neostore.counts.db: 2024-04-03 04:52:43.289+0000 - 48.00KiB + [neo4j/fefd0874] neostore.indexstats.db: 2024-04-03 04:52:43.314+0000 - 40.00KiB + [neo4j/fefd0874] neostore.labeltokenstore.db: 2024-04-03 04:30:28.303+0000 - 8.000KiB + [neo4j/fefd0874] neostore.labeltokenstore.db.id: 2024-04-03 04:52:43.254+0000 - 40.00KiB + [neo4j/fefd0874] neostore.labeltokenstore.db.names: 2024-04-03 04:30:28.279+0000 - 8.000KiB + [neo4j/fefd0874] neostore.labeltokenstore.db.names.id: 2024-04-03 04:52:43.241+0000 - 40.00KiB + [neo4j/fefd0874] neostore.nodestore.db: 2024-04-03 04:52:42.746+0000 - 8.000KiB + [neo4j/fefd0874] neostore.nodestore.db.id: 2024-04-03 04:52:43.122+0000 - 48.00KiB + [neo4j/fefd0874] neostore.nodestore.db.labels: 2024-04-03 04:12:35.189+0000 - 8.000KiB + [neo4j/fefd0874] neostore.nodestore.db.labels.id: 2024-04-03 04:52:43.109+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db: 2024-04-03 04:52:42.757+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.arrays: 2024-04-03 04:12:35.234+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.arrays.id: 2024-04-03 04:52:43.169+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.id: 2024-04-03 04:52:43.182+0000 - 48.00KiB + [neo4j/fefd0874] neostore.propertystore.db.index: 2024-04-03 04:30:28.255+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.index.id: 2024-04-03 04:52:43.145+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.index.keys: 2024-04-03 04:30:28.242+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.index.keys.id: 2024-04-03 04:52:43.133+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.strings: 2024-04-03 04:12:35.222+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.strings.id: 2024-04-03 04:52:43.157+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshipgroupstore.db: 2024-04-03 04:12:35.289+0000 - 8.000KiB + [neo4j/fefd0874] neostore.relationshipgroupstore.db.id: 2024-04-03 04:52:43.279+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshipgroupstore.degrees.db: 2024-04-03 04:52:43.301+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshipstore.db: 2024-04-03 04:12:35.245+0000 - 0B + [neo4j/fefd0874] neostore.relationshipstore.db.id: 2024-04-03 04:52:43.195+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshiptypestore.db: 2024-04-03 04:12:35.259+0000 - 0B + [neo4j/fefd0874] neostore.relationshiptypestore.db.id: 2024-04-03 04:52:43.229+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshiptypestore.db.names: 2024-04-03 04:12:35.246+0000 - 8.000KiB + [neo4j/fefd0874] neostore.relationshiptypestore.db.names.id: 2024-04-03 04:52:43.208+0000 - 40.00KiB + [neo4j/fefd0874] neostore.schemastore.db: 2024-04-03 04:12:36.054+0000 - 8.000KiB + [neo4j/fefd0874] neostore.schemastore.db.id: 2024-04-03 04:52:43.265+0000 - 40.00KiB + [neo4j/fefd0874] schema: + [neo4j/fefd0874] index: + [neo4j/fefd0874] token-lookup-1.0: + [neo4j/fefd0874] 1: + [neo4j/fefd0874] index-1: 2024-04-03 04:52:42.789+0000 - 48.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.459+0000 - 48.00KiB + [neo4j/fefd0874] 2: + [neo4j/fefd0874] index-2: 2024-04-03 04:52:42.800+0000 - 40.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.390+0000 - 40.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.459+0000 - 88.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.390+0000 - 88.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.390+0000 - 88.00KiB + [neo4j/fefd0874] Storage summary: + [neo4j/fefd0874] Total size of store: 896.1KiB + [neo4j/fefd0874] Total size of mapped files: 192.0KiB + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Transaction log ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] Transaction log files stored on file store: apfs + [neo4j/fefd0874] Transaction log metadata: + [neo4j/fefd0874] - current kernel version used in transactions: V5_15 + [neo4j/fefd0874] - last committed transaction id: 11 + [neo4j/fefd0874] Transaction log files: + [neo4j/fefd0874] - existing transaction log versions: 0-0 + [neo4j/fefd0874] - oldest transaction 2 found in log with version 0 + [neo4j/fefd0874] - files: (filename : creation date - size) + [neo4j/fefd0874] neostore.transaction.db.0: 2024-04-03 04:12:35.000+0000 - 5.030KiB + [neo4j/fefd0874] - total size of files: 5.030KiB + [neo4j/fefd0874] Checkpoint log files: + [neo4j/fefd0874] - existing checkpoint log versions: 0-0 + [neo4j/fefd0874] - last checkpoint: CheckpointInfo[transactionLogPosition=LogPosition{logVersion=0, byteOffset=5151}, storeId=StoreId{creationTime=1712117555300, random=260265064831090288, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1}, checkpointEntryPosition=LogPosition{logVersion=0, byteOffset=824}, channelPositionAfterCheckpoint=LogPosition{logVersion=0, byteOffset=1056}, checkpointFilePostReadPosition=LogPosition{logVersion=0, byteOffset=1056}, kernelVersion=KernelVersion{V5_15,version=14}, kernelVersionByte=14, transactionId=TransactionId[transactionId=11, checksum=1638704931, commitTimestamp=1712118630378, consensusIndex=-1], reason=Checkpoint triggered by "Recovery completed." @ txId: 11, consensusIndexInCheckpoint=true] + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Id usage ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] ArrayPropertyStore[neostore.nodestore.db.labels]: used=1 high=0 + [neo4j/fefd0874] NodeStore[neostore.nodestore.db]: used=5 high=4 + [neo4j/fefd0874] StringPropertyStore[neostore.propertystore.db.index.keys]: used=23 high=22 + [neo4j/fefd0874] PropertyIndexStore[neostore.propertystore.db.index]: used=13 high=12 + [neo4j/fefd0874] StringPropertyStore[neostore.propertystore.db.strings]: used=1 high=0 + [neo4j/fefd0874] ArrayPropertyStore[neostore.propertystore.db.arrays]: used=1 high=0 + [neo4j/fefd0874] PropertyStore[neostore.propertystore.db]: used=13 high=12 + [neo4j/fefd0874] RelationshipStore[neostore.relationshipstore.db]: used=0 high=-1 + [neo4j/fefd0874] StringPropertyStore[neostore.relationshiptypestore.db.names]: used=1 high=0 + [neo4j/fefd0874] RelationshipTypeStore[neostore.relationshiptypestore.db]: used=0 high=-1 + [neo4j/fefd0874] StringPropertyStore[neostore.labeltokenstore.db.names]: used=3 high=2 + [neo4j/fefd0874] LabelTokenStore[neostore.labeltokenstore.db]: used=2 high=1 + [neo4j/fefd0874] SchemaStore[neostore.schemastore.db]: used=3 high=2 + [neo4j/fefd0874] RelationshipGroupStore[neostore.relationshipgroupstore.db]: used=1 high=0 + [neo4j/fefd0874] NeoStore[neostore]: used=-1 high=-1 + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Metadata ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] EXTERNAL_STORE_UUID (Database identifier exposed as external store identity. Generated on creation and never updated): 485f4e4f-d438-40c9-a4ed-0bc1099d976f + [neo4j/fefd0874] DATABASE_ID (The last used DatabaseId for this database): null + [neo4j/fefd0874] LEGACY_STORE_VERSION (Legacy store format version. This field is used from 5.0 onwards only to distinguish non-migrated pre 5.0 metadata stores.): -3523014627327384477 + [neo4j/fefd0874] STORE_ID (Store ID): StoreId{creationTime=1712117555300, random=260265064831090288, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1} + [neo4j/fefd0874] +2024-04-03 04:52:43.378+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.init: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 34ms +2024-04-03 04:52:43.381+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] Requirement `Database unavailable` makes database neo4j unavailable. +2024-04-03 04:52:43.381+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] DatabaseId{fefd0874[neo4j]} is unavailable. +2024-04-03 04:52:43.385+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/neo4j/neostore.transaction.db.0] at version=0 +2024-04-03 04:52:43.387+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/neo4j/checkpoint.0] at version=0 +2024-04-03 04:52:43.388+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [neo4j/fefd0874] Scanning log file with version 0 for checkpoint entries +2024-04-03 04:52:43.389+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.start: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 0ms +2024-04-03 04:52:43.390+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] Fulfilling of requirement 'Database unavailable' makes database neo4j available. +2024-04-03 04:52:43.391+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] DatabaseId{fefd0874[neo4j]} is ready. +2024-04-03 04:52:43.447+0000 INFO [o.n.b.p.c.c.n.SocketNettyConnector] Bolt enabled on localhost:9999. +2024-04-03 04:52:43.447+0000 INFO [o.n.b.BoltServer] Bolt server started +2024-04-03 04:52:43.449+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] id: 266B93A8C1445AE734BA77BB99FDF56964B6082641ED1A3E87435C6A5111E836 +2024-04-03 04:52:43.450+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] name: system +2024-04-03 04:52:43.450+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] creationDate: 2024-04-03T04:12:32.66Z +2024-04-03 04:52:57.890+0000 INFO [o.n.g.f.m.GlobalModule] Logging config in use: Embedded default config 'default-server-logs.xml' +2024-04-03 04:52:58.041+0000 WARN [o.n.k.i.JvmChecker] The max heap memory has not been configured. It is recommended that it is always explicitly configured, to ensure the system has a balanced configuration. Until then, a JVM computed heuristic of 4294967296 bytes is used instead. If you are running neo4j server, you need to configure server.memory.heap.max_size in neo4j.conf. If you are running neo4j embedded, you have to launch the JVM with -Xmx set to a value. You can run neo4j-admin server memory-recommendation for memory configuration suggestions. +2024-04-03 04:52:58.041+0000 WARN [o.n.k.i.JvmChecker] The initial heap memory has not been configured. It is recommended that it is always explicitly configured, to ensure the system has a balanced configuration. Until then, a JVM computed heuristic of 268435456 bytes is used instead. If you are running neo4j server, you need to configure server.memory.heap.initial_size in neo4j.conf. If you are running neo4j embedded, you have to launch the JVM with -Xms set to a value. You can run neo4j-admin server memory-recommendation for memory configuration suggestions. +2024-04-03 04:52:58.073+0000 WARN [o.n.i.p.PageCache] The server.memory.pagecache.size setting has not been configured. It is recommended that this setting is always explicitly configured, to ensure the system has a balanced configuration. Until then, a computed heuristic value of 6442450944 bytes will be used instead. Run `neo4j-admin memory-recommendation` for memory configuration suggestions. +2024-04-03 04:52:58.073+0000 WARN [o.n.i.p.PageCache] Reflection access to java.nio.DirectByteBuffer is not available, using fallback mode. This could have negative impact on performance and memory usage. Consider adding --add-opens=java.base/java.nio=ALL-UNNAMED to VM options. +2024-04-03 04:52:58.305+0000 INFO [o.n.i.d.DiagnosticsManager] + ******************************************************************************** + [ System diagnostics ] + ******************************************************************************** + -------------------------------------------------------------------------------- + [ System memory information ] + -------------------------------------------------------------------------------- + Total Physical memory: 16.00GiB + Free Physical memory: 255.4MiB + Committed virtual memory: 38.30GiB + Total swap space: 2.000GiB + Free swap space: 1.583GiB + + -------------------------------------------------------------------------------- + [ JVM memory information ] + -------------------------------------------------------------------------------- + Free memory: 145.5MiB + Total memory: 260.0MiB + Max memory: 4.000GiB + Garbage Collector: G1 Young Generation: [G1 Eden Space, G1 Survivor Space, G1 Old Gen] + Garbage Collector: G1 Old Generation: [G1 Eden Space, G1 Survivor Space, G1 Old Gen] + Memory Pool: CodeHeap 'non-nmethods' (Non-heap memory): committed=2.438MiB, used=1.209MiB, max=5.570MiB, threshold=0B + Memory Pool: Metaspace (Non-heap memory): committed=20.13MiB, used=19.77MiB, max=-1B, threshold=0B + Memory Pool: CodeHeap 'profiled nmethods' (Non-heap memory): committed=4.438MiB, used=4.396MiB, max=117.2MiB, threshold=0B + Memory Pool: Compressed Class Space (Non-heap memory): committed=2.313MiB, used=2.122MiB, max=1.000GiB, threshold=0B + Memory Pool: G1 Eden Space (Heap memory): committed=156.0MiB, used=84.00MiB, max=-1B, threshold=? + Memory Pool: G1 Old Gen (Heap memory): committed=100.0MiB, used=24.07MiB, max=4.000GiB, threshold=0B + Memory Pool: G1 Survivor Space (Heap memory): committed=4.000MiB, used=3.433MiB, max=-1B, threshold=? + Memory Pool: CodeHeap 'non-profiled nmethods' (Non-heap memory): committed=2.438MiB, used=1.116MiB, max=117.2MiB, threshold=0B + + -------------------------------------------------------------------------------- + [ Operating system information ] + -------------------------------------------------------------------------------- + Operating System: Mac OS X; version: 12.7.4; arch: x86_64; cpus: 8 + Max number of file descriptors: 10240 + Number of open file descriptors: 227 + Process id: 45806 + Byte order: LITTLE_ENDIAN + Local timezone: America/New_York + Memory page size: 4096 + Unaligned memory access allowed: true + + -------------------------------------------------------------------------------- + [ JVM information ] + -------------------------------------------------------------------------------- + VM Name: Java HotSpot(TM) 64-Bit Server VM + VM Vendor: Oracle Corporation + VM Version: 17.0.2+8-LTS-86 + JIT compiler: HotSpot 64-Bit Tiered Compilers + VM Arguments: [-Dvisualvm.id=76556429377928, -javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=56650:/Applications/IntelliJ IDEA.app/Contents/bin, -Dfile.encoding=UTF-8] + + -------------------------------------------------------------------------------- + [ Java classpath ] + -------------------------------------------------------------------------------- + [classpath] /Users/jnr6/.m2/repository/it/unimi/dsi/fastutil/8.5.13/fastutil-8.5.13.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-codec-http/4.1.101.Final/netty-codec-http-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/scala-library/2.13.11/scala-library-2.13.11.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-command-line/5.16.0/neo4j-command-line-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-epoll/4.1.101.Final/netty-transport-native-epoll-4.1.101.Final-linux-x86_64.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-common/4.1.101.Final/netty-common-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.16.0/jackson-databind-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-consistency-check/5.16.0/neo4j-consistency-check-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-values/5.16.0/neo4j-values-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-dbms/5.16.0/neo4j-dbms-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-analysis/9.6/asm-analysis-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-planner/5.16.0/neo4j-cypher-planner-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/antlr/antlr4-runtime/4.8/antlr4-runtime-4.8.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-api/3.2.13/docker-java-api-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/activation/jakarta.activation-api/1.2.1/jakarta.activation-api-1.2.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-planner-spi/5.16.0/neo4j-cypher-planner-spi-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-resource/5.16.0/neo4j-resource-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-servlet/10.0.17/jetty-servlet-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-cache/1.13.0/shiro-cache-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-javacc-parser/5.16.0/neo4j-cypher-javacc-parser-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/sun/istack/istack-commons-runtime/3.0.8/istack-commons-runtime-3.0.8.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-configuration2/2.9.0/commons-configuration2-2.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-compress/1.21/commons-compress-1.21.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/containers/jersey-container-servlet/2.34/jersey-container-servlet-2.34.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-kqueue/4.1.101.Final/netty-transport-native-kqueue-4.1.101.Final-osx-aarch_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-concurrent/5.16.0/neo4j-concurrent-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/mysql/1.17.4/mysql-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/mockito/mockito-core/5.7.0/mockito-core-5.7.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher/5.16.0/neo4j-cypher-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-capabilities/5.16.0/neo4j-capabilities-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-notifications/5.16.0/neo4j-notifications-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-import-util/5.16.0/neo4j-import-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-config/5.16.0/neo4j-cypher-config-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/containers/jersey-container-servlet-core/2.34/jersey-container-servlet-core-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-io/5.16.0/neo4j-io-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-locator/2.6.1/hk2-locator-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-lang3/3.13.0/commons-lang3-3.13.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.16.0/jackson-core-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/mysql/mysql-connector-j/8.2.0/mysql-connector-j-8.2.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-classes-epoll/4.1.101.Final/netty-transport-classes-epoll-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/objenesis/objenesis/3.3/objenesis-3.3.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-server/2.34/jersey-server-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-client/2.34/jersey-client-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-ast-factory/5.16.0/neo4j-cypher-ast-factory-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-handler/4.1.101.Final/netty-handler-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j/5.16.0/neo4j-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/google/code/gson/gson/2.9.0/gson-2.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-logging/5.16.0/neo4j-logging-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-webapp/10.0.17/jetty-webapp-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-core/9.8.0/lucene-core-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-kernel-api/5.16.0/neo4j-kernel-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcutil-jdk18on/1.76/bcutil-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/bitbucket/inkytonik/kiama/kiama_2.13/2.5.1/kiama_2.13-2.5.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-common/5.16.0/neo4j-common-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/junit/junit/4.13.2/junit-4.13.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-index/5.16.0/neo4j-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport/4.1.101.Final/netty-transport-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-util/9.6/asm-util-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/jctools/jctools-core/4.0.2/jctools-core-4.0.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-graphdb-api/5.16.0/neo4j-graphdb-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/jdbc/1.17.4/jdbc-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-runtime-util/5.16.0/neo4j-cypher-runtime-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/collections/eclipse-collections-api/11.1.0/eclipse-collections-api-11.1.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-unsafe/5.16.0/neo4j-unsafe-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-server/10.0.17/jetty-server-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcprov-jdk18on/1.76/bcprov-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-slotted-runtime/5.16.0/neo4j-cypher-slotted-runtime-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-layout-template-json/2.20.0/log4j-layout-template-json-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-fulltext-index/5.16.0/neo4j-fulltext-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/net/java/dev/jna/jna/5.8.0/jna-5.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-util/10.0.17/jetty-util-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-expressions/5.16.0/neo4j-expressions-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-transport/3.2.13/docker-java-transport-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/commons-logging/commons-logging/1.2/commons-logging-1.2.jar + [classpath] /Users/jnr6/IdeaProjects/policy-machine-core/target/classes + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-testkit/1.10.0/junit-platform-testkit-1.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-core/1.13.0/shiro-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-physical-planning/5.16.0/neo4j-cypher-physical-planning-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-storage-engine-util/5.16.0/neo4j-storage-engine-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-ast/5.16.0/neo4j-ast-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-core/2.20.0/log4j-core-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-params/5.9.0/junit-jupiter-params-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/external/jakarta.inject/2.6.1/jakarta.inject-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/inject/jersey-hk2/2.34/jersey-hk2-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/hamcrest/hamcrest/2.2/hamcrest-2.2.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jaxb/jaxb-runtime/2.3.2/jaxb-runtime-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-logical-plans/5.16.0/neo4j-cypher-logical-plans-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-xml/10.0.17/jetty-xml-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar + [classpath] /Users/jnr6/.m2/repository/org/codehaus/jettison/jettison/1.5.4/jettison-1.5.4.jar + [classpath] /Users/jnr6/.m2/repository/com/propensive/mercator_2.13/0.2.1/mercator_2.13-0.2.1.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jaxb/txw2/2.3.2/txw2-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-resolver/4.1.101.Final/netty-resolver-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar + [classpath] /Users/jnr6/.m2/repository/org/awaitility/awaitility/4.2.0/awaitility-4.2.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-codec/4.1.101.Final/netty-codec-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-buffer/4.1.101.Final/netty-buffer-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-hash/1.13.0/shiro-crypto-hash-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/info/picocli/picocli/4.7.5/picocli-4.7.5.jar + [classpath] /Users/jnr6/.m2/repository/com/profesorfalken/jPowerShell/3.0/jPowerShell-3.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-cipher/1.13.0/shiro-crypto-cipher-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-lang/1.13.0/shiro-lang-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-token-api/5.16.0/neo4j-token-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-bolt/5.16.0/neo4j-bolt-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-record-storage-engine/5.16.0/neo4j-record-storage-engine-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-epoll/4.1.101.Final/netty-transport-native-epoll-4.1.101.Final-linux-aarch_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-ir/5.16.0/neo4j-cypher-ir-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/test-utils/5.15.0/test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter/5.10.0/junit-jupiter-5.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/app/neo4j-server-test-utils/5.15.0/neo4j-server-test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/rnorth/duct-tape/duct-tape/1.0.8/duct-tape-1.0.8.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/modules/scala-collection-contrib_2.13/0.3.0/scala-collection-contrib_2.13-0.3.0.jar + [classpath] /Users/jnr6/.m2/repository/org/slf4j/slf4j-api/2.0.0/slf4j-api-2.0.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-analysis-common/9.8.0/lucene-analysis-common-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/com/propensive/magnolia_2.13/0.17.0/magnolia_2.13-0.17.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-event/1.13.0/shiro-event-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-api/2.20.0/log4j-api-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-classes-kqueue/4.1.101.Final/netty-transport-classes-kqueue-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/net/bytebuddy/byte-buddy-agent/1.14.9/byte-buddy-agent-1.14.9.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/validation/jakarta.validation-api/2.0.2/jakarta.validation-api-2.0.2.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/database-commons/1.17.4/database-commons-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-front-end/5.16.0/neo4j-front-end-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-procedure/5.16.0/neo4j-procedure-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-import-tool/5.16.0/neo4j-import-tool-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/ws/rs/jakarta.ws.rs-api/2.1.6/jakarta.ws.rs-api-2.1.6.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.10.3/jackson-annotations-2.10.3.jar + [classpath] /Users/jnr6/.m2/repository/com/google/protobuf/protobuf-java/3.21.9/protobuf-java-3.21.9.jar + [classpath] /Users/jnr6/.m2/repository/io/projectreactor/reactor-core/3.6.0/reactor-core-3.6.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-wal/5.16.0/neo4j-wal-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-ssl/5.16.0/neo4j-ssl-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-unix-common/4.1.101.Final/netty-transport-native-unix-common-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-config-core/1.13.0/shiro-config-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-codegen/5.16.0/neo4j-codegen-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-tree/9.6/asm-tree-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-rewriting/5.16.0/neo4j-rewriting-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-backward-codecs/9.8.0/lucene-backward-codecs-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-lock/5.16.0/neo4j-lock-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-schema/5.16.0/neo4j-schema-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/collections/eclipse-collections/11.1.0/eclipse-collections-11.1.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/luben/zstd-jni/1.5.5-10/zstd-jni-1.5.5-10.jar + [classpath] /Users/jnr6/.m2/repository/commons-codec/commons-codec/1.16.0/commons-codec-1.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/jaxrs/jackson-jaxrs-json-provider/2.16.0/jackson-jaxrs-json-provider-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-expression-evaluator/5.16.0/neo4j-cypher-expression-evaluator-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/testcontainers/1.17.4/testcontainers-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/test/neo4j-harness/5.15.0/neo4j-harness-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/javassist/javassist/3.25.0-GA/javassist-3.25.0-GA.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-core/1.13.0/shiro-crypto-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-commons/1.9.0/junit-platform-commons-1.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-utils/2.6.1/hk2-utils-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/io-test-utils/5.15.0/io-test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/annotations/5.16.0/annotations-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-interpreted-runtime/5.16.0/neo4j-cypher-interpreted-runtime-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-cache/5.16.0/neo4j-cypher-cache-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jetbrains/annotations/17.0.0/annotations-17.0.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-layout/5.16.0/neo4j-layout-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/reactivestreams/reactive-streams/1.0.4/reactive-streams-1.0.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/licensing-proxy/zstd-proxy/5.16.0/zstd-proxy-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-security/5.16.0/neo4j-security-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-common/2.34/jersey-common-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/scala-reflect/2.13.11/scala-reflect-2.13.11.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/junit-jupiter/1.17.4/junit-jupiter-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-random-values/5.15.0/neo4j-random-values-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-transport-zerodep/3.2.13/docker-java-transport-zerodep-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-diagnostics/5.16.0/neo4j-diagnostics-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-http/10.0.17/jetty-http-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/cypher-ast-factory/5.16.0/cypher-ast-factory-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-configuration/5.16.0/neo4j-configuration-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-exceptions/5.16.0/neo4j-exceptions-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-util/5.16.0/neo4j-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-id-generator/5.16.0/neo4j-id-generator-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/seancfoley/ipaddress/5.4.0/ipaddress-5.4.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-io/10.0.17/jetty-io-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/commons-io/commons-io/2.11.0/commons-io-2.11.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-queryparser/9.8.0/lucene-queryparser-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/xml/bind/jakarta.xml.bind-api/2.3.2/jakarta.xml.bind-api-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-kernel/5.16.0/neo4j-kernel-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-fabric/5.16.0/neo4j-fabric-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-spatial-index/5.16.0/neo4j-spatial-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-procedure-api/5.16.0/neo4j-procedure-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/sun/xml/fastinfoset/FastInfoset/1.2.16/FastInfoset-1.2.16.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-lucene-index/5.16.0/neo4j-lucene-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/net/bytebuddy/byte-buddy/1.14.9/byte-buddy-1.14.9.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-query-router/5.16.0/neo4j-query-router-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-csv/5.16.0/neo4j-csv-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/toolchain/jetty-servlet-api/4.0.6/jetty-servlet-api-4.0.6.jar + [classpath] /Users/jnr6/IdeaProjects/policy-machine-core/target/test-classes + [classpath] /Users/jnr6/.m2/repository/com/github/ben-manes/caffeine/caffeine/3.1.8/caffeine-3.1.8.jar + [classpath] /Users/jnr6/.m2/repository/com/profesorfalken/WMI4Java/1.6.3/WMI4Java-1.6.3.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/vintage/junit-vintage-engine/5.10.0/junit-vintage-engine-5.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-collections/5.16.0/neo4j-collections-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/assertj/assertj-core/3.24.2/assertj-core-3.24.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-graph-algo/5.16.0/neo4j-graph-algo-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.9.0/junit-jupiter-engine-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jvnet/staxex/stax-ex/1.8.1/stax-ex-1.8.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/app/neo4j-server/5.16.0/neo4j-server-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-monitoring/5.16.0/neo4j-monitoring-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-macros/5.16.0/neo4j-cypher-macros-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jprocesses/jProcesses/1.6.5/jProcesses-1.6.5.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-api/2.6.1/hk2-api-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.9.0/junit-jupiter-api-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-security/10.0.17/jetty-security-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcpkix-jdk18on/1.76/bcpkix-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-engine/1.9.0/junit-platform-engine-1.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-slf4j-provider/5.16.0/neo4j-slf4j-provider-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-kqueue/4.1.101.Final/netty-transport-native-kqueue-4.1.101.Final-osx-x86_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-data-collector/5.16.0/neo4j-data-collector-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/server-api/5.16.0/server-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-native/5.16.0/neo4j-native-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/module/jackson-module-jaxb-annotations/2.16.0/jackson-module-jaxb-annotations-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm/9.6/asm-9.6.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/jaxrs/jackson-jaxrs-base/2.16.0/jackson-jaxrs-base-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar + + -------------------------------------------------------------------------------- + [ Library path ] + -------------------------------------------------------------------------------- + /Users/jnr6/Library/Java/Extensions + /Library/Java/Extensions + /Network/Library/Java/Extensions + /System/Library/Java/Extensions + /usr/lib/java + /Users/jnr6/IdeaProjects/policy-machine-core + + -------------------------------------------------------------------------------- + [ System properties ] + -------------------------------------------------------------------------------- + sun.jnu.encoding = UTF-8 + sun.arch.data.model = 64 + user.timezone = America/New_York + visualvm.id = 76556429377928 + sun.java.launcher = SUN_STANDARD + user.country = US + sun.boot.library.path = /Library/Java/JavaVirtualMachines/jdk-17.0.2.jdk/Contents/Home/lib + sun.java.command = gov.nist.csd.pm.pap.neo4j.ImportTest + jdk.debug = release + sun.cpu.endian = little + user.home = /Users/jnr6 + user.language = en + file.separator = / + sun.management.compiler = HotSpot 64-Bit Tiered Compilers + user.name = jnr6 + path.separator = : + file.encoding = UTF-8 + jnidispatch.path = /Users/jnr6/Library/Caches/JNA/temp/jna5872863713983418069.tmp + jna.loaded = true + user.dir = /Users/jnr6/IdeaProjects/policy-machine-core + native.encoding = UTF-8 + sun.io.unicode.encoding = UnicodeBig + + -------------------------------------------------------------------------------- + [ (IANA) TimeZone database version ] + -------------------------------------------------------------------------------- + TimeZone version: 2021e (available for 601 zone identifiers) + + -------------------------------------------------------------------------------- + [ Network information ] + -------------------------------------------------------------------------------- + Interface utun2: + address: fe80:0:0:0:ce81:b1c:bd2c:69e%utun2 + Interface utun1: + address: fe80:0:0:0:bbf5:1c30:4238:57b2%utun1 + Interface utun0: + address: fe80:0:0:0:73be:4eb:3f31:a891%utun0 + Interface llw0: + address: fe80:0:0:0:c0a6:71ff:fe04:534c%llw0 + Interface awdl0: + address: fe80:0:0:0:c0a6:71ff:fe04:534c%awdl0 + Interface en0: + address: 192.168.1.247 + Interface lo0: + address: fe80:0:0:0:0:0:0:1%lo0 + address: 0:0:0:0:0:0:0:1%lo0 + address: 127.0.0.1 + + -------------------------------------------------------------------------------- + [ Native access information ] + -------------------------------------------------------------------------------- + Native access details: Native access is not available for current platform. + + -------------------------------------------------------------------------------- + [ DBMS config ] + -------------------------------------------------------------------------------- + DBMS provided settings: + server.bolt.enabled=true + server.bolt.listen_address=localhost:9999 + server.directories.neo4j_home=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + Directories in use: + server.directories.data=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data + server.directories.dumps.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/dumps + server.directories.import=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + server.directories.lib=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/lib + server.directories.licenses=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/licenses + server.directories.logs=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/logs + server.directories.neo4j_home=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + server.directories.plugins=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/plugins + server.directories.run=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/run + server.directories.script.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/scripts + server.directories.transaction.logs.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions + + -------------------------------------------------------------------------------- + [ Packaging ] + -------------------------------------------------------------------------------- + Could not read packaging info: java.nio.file.NoSuchFileException: /Users/jnr6/IdeaProjects/policy-machine-core/testdb/packaging_info + +2024-04-03 04:52:58.461+0000 INFO [o.n.d.i.DefaultIdentityModule] Found ServerId on disk: ServerId{54490f53} (54490f53-4b94-4d0f-9604-023c3fe1be5e) +2024-04-03 04:52:58.462+0000 INFO [o.n.d.i.DefaultIdentityModule] This instance is ServerId{54490f53} (54490f53-4b94-4d0f-9604-023c3fe1be5e) +2024-04-03 04:52:59.260+0000 INFO [o.n.d.d.DatabaseLifecycles] Creating 'DatabaseId{00000000[system]}'. +2024-04-03 04:52:59.457+0000 INFO [o.n.b.BoltServer] Using connector transport KQueue +2024-04-03 04:52:59.540+0000 INFO [o.n.b.BoltServer] Configured external Bolt connector with listener address localhost/127.0.0.1:9999 +2024-04-03 04:52:59.541+0000 INFO [o.n.b.BoltServer] Bolt server loaded +2024-04-03 04:52:59.555+0000 INFO [o.n.d.d.DatabaseLifecycles] Starting 'DatabaseId{00000000[system]}'. +2024-04-03 04:52:59.818+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [system/00000000] Scanning log file with version 0 for checkpoint entries +2024-04-03 04:52:59.877+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [system/00000000] Selected RecordFormat:PageAlignedV5_0[aligned-1.1] record format from store /Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system +2024-04-03 04:52:59.877+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [system/00000000] Selected format from the store files: RecordFormat:PageAlignedV5_0[aligned-1.1] +2024-04-03 04:53:00.518+0000 INFO [o.n.i.d.DiagnosticsManager] [system/00000000] + [system/00000000] ******************************************************************************** + [system/00000000] [ Database: system ] + [system/00000000] ******************************************************************************** + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Version ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] DBMS: community record-aligned-1.1 + [system/00000000] Kernel version: 5.16.0 + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Store files ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] Disk space on partition (Total / Free / Free %): 500068036608 / 109508726784 / 21 + [system/00000000] Storage files stored on file store: apfs + [system/00000000] Storage files: (filename : modification date - size) + [system/00000000] database_lock: 2024-04-03 04:12:32.900+0000 - 0B + [system/00000000] id-buffer.tmp.0: 2024-04-03 04:52:41.743+0000 - 0B + [system/00000000] neostore: 2024-04-03 04:12:32.662+0000 - 8.000KiB + [system/00000000] neostore.counts.db: 2024-04-03 04:53:00.332+0000 - 48.00KiB + [system/00000000] neostore.indexstats.db: 2024-04-03 04:53:00.383+0000 - 48.00KiB + [system/00000000] neostore.labeltokenstore.db: 2024-04-03 04:12:39.430+0000 - 8.000KiB + [system/00000000] neostore.labeltokenstore.db.id: 2024-04-03 04:53:00.258+0000 - 40.00KiB + [system/00000000] neostore.labeltokenstore.db.names: 2024-04-03 04:12:39.454+0000 - 8.000KiB + [system/00000000] neostore.labeltokenstore.db.names.id: 2024-04-03 04:53:00.243+0000 - 40.00KiB + [system/00000000] neostore.nodestore.db: 2024-04-03 04:12:39.416+0000 - 8.000KiB + [system/00000000] neostore.nodestore.db.id: 2024-04-03 04:53:00.065+0000 - 40.00KiB + [system/00000000] neostore.nodestore.db.labels: 2024-04-03 04:12:32.509+0000 - 8.000KiB + [system/00000000] neostore.nodestore.db.labels.id: 2024-04-03 04:53:00.038+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db: 2024-04-03 04:12:39.442+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.arrays: 2024-04-03 04:12:32.565+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.arrays.id: 2024-04-03 04:53:00.149+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.id: 2024-04-03 04:53:00.175+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.index: 2024-04-03 04:12:39.477+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.index.id: 2024-04-03 04:53:00.108+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.index.keys: 2024-04-03 04:12:39.464+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.index.keys.id: 2024-04-03 04:53:00.085+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.strings: 2024-04-03 04:12:39.367+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.strings.id: 2024-04-03 04:53:00.131+0000 - 40.00KiB + [system/00000000] neostore.relationshipgroupstore.db: 2024-04-03 04:12:32.640+0000 - 8.000KiB + [system/00000000] neostore.relationshipgroupstore.db.id: 2024-04-03 04:53:00.291+0000 - 40.00KiB + [system/00000000] neostore.relationshipgroupstore.degrees.db: 2024-04-03 04:53:00.362+0000 - 40.00KiB + [system/00000000] neostore.relationshipstore.db: 2024-04-03 04:12:39.378+0000 - 8.000KiB + [system/00000000] neostore.relationshipstore.db.id: 2024-04-03 04:53:00.189+0000 - 40.00KiB + [system/00000000] neostore.relationshiptypestore.db: 2024-04-03 04:12:39.405+0000 - 8.000KiB + [system/00000000] neostore.relationshiptypestore.db.id: 2024-04-03 04:53:00.225+0000 - 40.00KiB + [system/00000000] neostore.relationshiptypestore.db.names: 2024-04-03 04:12:39.392+0000 - 8.000KiB + [system/00000000] neostore.relationshiptypestore.db.names.id: 2024-04-03 04:53:00.208+0000 - 40.00KiB + [system/00000000] neostore.schemastore.db: 2024-04-03 04:12:39.490+0000 - 8.000KiB + [system/00000000] neostore.schemastore.db.id: 2024-04-03 04:53:00.275+0000 - 40.00KiB + [system/00000000] schema: + [system/00000000] index: + [system/00000000] range-1.0: + [system/00000000] 3: + [system/00000000] index-3: 2024-04-03 04:52:41.646+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.321+0000 - 48.00KiB + [system/00000000] 4: + [system/00000000] index-4: 2024-04-03 04:52:41.671+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.437+0000 - 48.00KiB + [system/00000000] 7: + [system/00000000] index-7: 2024-04-03 04:52:41.695+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.907+0000 - 48.00KiB + [system/00000000] 8: + [system/00000000] index-8: 2024-04-03 04:52:41.721+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.997+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.996+0000 - 192.0KiB + [system/00000000] token-lookup-1.0: + [system/00000000] 1: + [system/00000000] index-1: 2024-04-03 04:52:41.581+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:33.516+0000 - 48.00KiB + [system/00000000] 2: + [system/00000000] index-2: 2024-04-03 04:52:41.608+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:33.409+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:33.515+0000 - 96.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.321+0000 - 288.0KiB + [system/00000000] - Total: 2024-04-03 04:12:33.407+0000 - 288.0KiB + [system/00000000] Storage summary: + [system/00000000] Total size of store: 1.078MiB + [system/00000000] Total size of mapped files: 408.0KiB + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Transaction log ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] Transaction log files stored on file store: apfs + [system/00000000] Transaction log metadata: + [system/00000000] - current kernel version used in transactions: V5_15 + [system/00000000] - last committed transaction id: 37 + [system/00000000] Transaction log files: + [system/00000000] - existing transaction log versions: 0-0 + [system/00000000] - oldest transaction 2 found in log with version 0 + [system/00000000] - files: (filename : creation date - size) + [system/00000000] neostore.transaction.db.0: 2024-04-03 04:12:32.000+0000 - 19.26KiB + [system/00000000] - total size of files: 19.26KiB + [system/00000000] Checkpoint log files: + [system/00000000] - existing checkpoint log versions: 0-0 + [system/00000000] - last checkpoint: CheckpointInfo[transactionLogPosition=LogPosition{logVersion=0, byteOffset=19725}, storeId=StoreId{creationTime=1712117552660, random=4552926301767966796, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1}, checkpointEntryPosition=LogPosition{logVersion=0, byteOffset=360}, channelPositionAfterCheckpoint=LogPosition{logVersion=0, byteOffset=592}, checkpointFilePostReadPosition=LogPosition{logVersion=0, byteOffset=592}, kernelVersion=KernelVersion{V5_15,version=14}, kernelVersionByte=14, transactionId=TransactionId[transactionId=37, checksum=-1026009811, commitTimestamp=1712117555154, consensusIndex=-1], reason=Checkpoint triggered by "Database shutdown" @ txId: 37, consensusIndexInCheckpoint=true] + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Id usage ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] ArrayPropertyStore[neostore.nodestore.db.labels]: used=1 high=0 + [system/00000000] NodeStore[neostore.nodestore.db]: used=6 high=5 + [system/00000000] StringPropertyStore[neostore.propertystore.db.index.keys]: used=44 high=43 + [system/00000000] PropertyIndexStore[neostore.propertystore.db.index]: used=31 high=30 + [system/00000000] StringPropertyStore[neostore.propertystore.db.strings]: used=3 high=2 + [system/00000000] ArrayPropertyStore[neostore.propertystore.db.arrays]: used=1 high=0 + [system/00000000] PropertyStore[neostore.propertystore.db]: used=59 high=58 + [system/00000000] RelationshipStore[neostore.relationshipstore.db]: used=2 high=1 + [system/00000000] StringPropertyStore[neostore.relationshiptypestore.db.names]: used=2 high=1 + [system/00000000] RelationshipTypeStore[neostore.relationshiptypestore.db]: used=1 high=0 + [system/00000000] StringPropertyStore[neostore.labeltokenstore.db.names]: used=5 high=4 + [system/00000000] LabelTokenStore[neostore.labeltokenstore.db]: used=4 high=3 + [system/00000000] SchemaStore[neostore.schemastore.db]: used=11 high=10 + [system/00000000] RelationshipGroupStore[neostore.relationshipgroupstore.db]: used=1 high=0 + [system/00000000] NeoStore[neostore]: used=-1 high=-1 + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Metadata ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] EXTERNAL_STORE_UUID (Database identifier exposed as external store identity. Generated on creation and never updated): 8e4fd9af-0e04-47d8-a19c-cdb72dbda752 + [system/00000000] DATABASE_ID (The last used DatabaseId for this database): null + [system/00000000] LEGACY_STORE_VERSION (Legacy store format version. This field is used from 5.0 onwards only to distinguish non-migrated pre 5.0 metadata stores.): -3523014627327384477 + [system/00000000] STORE_ID (Store ID): StoreId{creationTime=1712117552660, random=4552926301767966796, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1} + [system/00000000] +2024-04-03 04:53:00.709+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 04:53:00.710+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 04:53:00.711+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 04:53:00.712+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 04:53:00.736+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 04:53:00.737+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 04:53:00.738+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 04:53:00.738+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 04:53:00.772+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 +2024-04-03 04:53:00.772+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 +2024-04-03 04:53:00.773+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 04:53:00.773+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 +2024-04-03 04:53:00.795+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 +2024-04-03 04:53:00.795+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 +2024-04-03 04:53:00.796+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 04:53:00.796+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 +2024-04-03 04:53:00.821+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 +2024-04-03 04:53:00.821+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 +2024-04-03 04:53:00.822+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 04:53:00.823+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 +2024-04-03 04:53:00.841+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 +2024-04-03 04:53:00.841+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 +2024-04-03 04:53:00.842+0000 INFO [o.n.k.i.a.i.IndexingService] [system/00000000] IndexingService.init: indexes not specifically mentioned above are ONLINE. Total 6 indexes. Processed in 166ms +2024-04-03 04:53:00.842+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 04:53:00.843+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 +2024-04-03 04:53:00.848+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] Requirement `Database unavailable` makes database system unavailable. +2024-04-03 04:53:00.848+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] DatabaseId{00000000[system]} is unavailable. +2024-04-03 04:53:00.903+0000 INFO [o.n.k.d.Database] [system/00000000] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/system/neostore.transaction.db.0] at version=0 +2024-04-03 04:53:00.906+0000 INFO [o.n.k.d.Database] [system/00000000] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/system/checkpoint.0] at version=0 +2024-04-03 04:53:00.907+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [system/00000000] Scanning log file with version 0 for checkpoint entries +2024-04-03 04:53:00.910+0000 INFO [o.n.k.i.a.i.IndexingService] [system/00000000] IndexingService.start: indexes not specifically mentioned above are ONLINE. Total 6 indexes. Processed in 0ms +2024-04-03 04:53:00.940+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] Fulfilling of requirement 'Database unavailable' makes database system available. +2024-04-03 04:53:00.940+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] DatabaseId{00000000[system]} is ready. +2024-04-03 04:53:01.043+0000 INFO [o.n.s.s.s.UserSecurityGraphComponent] Performing postInitialization step for component 'security-users' with version 4 and status CURRENT +2024-04-03 04:53:01.043+0000 INFO [o.n.s.s.s.UserSecurityGraphComponent] Updating the initial password in component 'security-users' +2024-04-03 04:53:01.056+0000 INFO [o.n.d.d.DatabaseLifecycles] Creating 'DatabaseId{fefd0874[neo4j]}'. +2024-04-03 04:53:01.059+0000 INFO [o.n.d.d.DatabaseLifecycles] Starting 'DatabaseId{fefd0874[neo4j]}'. +2024-04-03 04:53:01.076+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [neo4j/fefd0874] Scanning log file with version 0 for checkpoint entries +2024-04-03 04:53:01.108+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected RecordFormat:PageAlignedV5_0[aligned-1.1] record format from store /Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j +2024-04-03 04:53:01.108+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected format from the store files: RecordFormat:PageAlignedV5_0[aligned-1.1] +2024-04-03 04:53:01.346+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Transaction logs entries found after the last check point (which is at LogPosition{logVersion=0, byteOffset=5151}). First observed transaction id: 12. +2024-04-03 04:53:01.390+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Recovery required from position LogPosition{logVersion=0, byteOffset=5151} +2024-04-03 04:53:01.400+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] TransactionLogsRecovery +2024-04-03 04:53:01.410+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 10% completed +2024-04-03 04:53:01.410+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 20% completed +2024-04-03 04:53:01.411+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 30% completed +2024-04-03 04:53:01.412+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 40% completed +2024-04-03 04:53:01.412+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 50% completed +2024-04-03 04:53:01.439+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job registered: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 04:53:01.439+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job registered: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 04:53:01.439+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job started: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 04:53:01.440+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job started: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 04:53:01.440+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job finished: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 04:53:01.440+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job finished: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 04:53:01.441+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job closed: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 04:53:01.441+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job closed: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 04:53:01.461+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job registered: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 04:53:01.461+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job registered: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 04:53:01.461+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job started: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 04:53:01.461+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.init: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 47ms +2024-04-03 04:53:01.462+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job started: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 04:53:01.462+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job finished: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 Number of pages visited: 2, Number of tree nodes: 1, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 04:53:01.462+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job finished: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 Number of pages visited: 2, Number of tree nodes: 1, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 04:53:01.462+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job closed: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 04:53:01.463+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job closed: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 04:53:01.480+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 60% completed +2024-04-03 04:53:01.482+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 70% completed +2024-04-03 04:53:01.486+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 80% completed +2024-04-03 04:53:01.488+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 90% completed +2024-04-03 04:53:01.492+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 100% completed +2024-04-03 04:53:01.493+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Recovery in 'full' mode completed. Observed transactions range [first:12, last:21]: 10 transactions applied, 0 not completed transactions rolled back, skipped applying 0 previously rolled back transactions. Time spent: 147ms. +2024-04-03 04:53:01.496+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.start: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 0ms +2024-04-03 04:53:01.497+0000 INFO [o.n.k.i.t.l.c.CheckPointerImpl] [neo4j/fefd0874] Checkpoint triggered by "Recovery completed." @ txId: 21 checkpoint started... +2024-04-03 04:53:01.999+0000 INFO [o.n.k.i.t.l.c.CheckPointerImpl] [neo4j/fefd0874] Checkpoint triggered by "Recovery completed." @ txId: 21 checkpoint completed in 501ms. Checkpoint flushed 41 pages (0% of total available pages), in 35 IOs. Checkpoint performed with IO limit: unlimited, paused in total 0 times( 0 millis). +2024-04-03 04:53:02.005+0000 INFO [o.n.k.i.t.l.p.LogPruningImpl] [neo4j/fefd0874] No log version pruned. The strategy used was '2 days'. +2024-04-03 04:53:02.753+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [neo4j/fefd0874] Scanning log file with version 0 for checkpoint entries +2024-04-03 04:53:02.778+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected RecordFormat:PageAlignedV5_0[aligned-1.1] record format from store /Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j +2024-04-03 04:53:02.778+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected format from the store files: RecordFormat:PageAlignedV5_0[aligned-1.1] +2024-04-03 04:53:03.007+0000 INFO [o.n.i.d.DiagnosticsManager] [neo4j/fefd0874] + [neo4j/fefd0874] ******************************************************************************** + [neo4j/fefd0874] [ Database: neo4j ] + [neo4j/fefd0874] ******************************************************************************** + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Version ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] DBMS: community record-aligned-1.1 + [neo4j/fefd0874] Kernel version: 5.16.0 + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Store files ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] Disk space on partition (Total / Free / Free %): 500068036608 / 109508440064 / 21 + [neo4j/fefd0874] Storage files stored on file store: apfs + [neo4j/fefd0874] Storage files: (filename : modification date - size) + [neo4j/fefd0874] database_lock: 2024-04-03 04:12:35.327+0000 - 0B + [neo4j/fefd0874] id-buffer.tmp.0: 2024-04-03 04:52:43.380+0000 - 0B + [neo4j/fefd0874] neostore: 2024-04-03 04:12:35.301+0000 - 8.000KiB + [neo4j/fefd0874] neostore.counts.db: 2024-04-03 04:53:02.961+0000 - 48.00KiB + [neo4j/fefd0874] neostore.indexstats.db: 2024-04-03 04:53:02.983+0000 - 40.00KiB + [neo4j/fefd0874] neostore.labeltokenstore.db: 2024-04-03 04:53:01.953+0000 - 8.000KiB + [neo4j/fefd0874] neostore.labeltokenstore.db.id: 2024-04-03 04:53:02.923+0000 - 40.00KiB + [neo4j/fefd0874] neostore.labeltokenstore.db.names: 2024-04-03 04:53:01.900+0000 - 8.000KiB + [neo4j/fefd0874] neostore.labeltokenstore.db.names.id: 2024-04-03 04:53:02.909+0000 - 40.00KiB + [neo4j/fefd0874] neostore.nodestore.db: 2024-04-03 04:53:01.890+0000 - 8.000KiB + [neo4j/fefd0874] neostore.nodestore.db.id: 2024-04-03 04:53:02.791+0000 - 48.00KiB + [neo4j/fefd0874] neostore.nodestore.db.labels: 2024-04-03 04:12:35.189+0000 - 8.000KiB + [neo4j/fefd0874] neostore.nodestore.db.labels.id: 2024-04-03 04:53:02.779+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db: 2024-04-03 04:53:01.920+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.arrays: 2024-04-03 04:12:35.234+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.arrays.id: 2024-04-03 04:53:02.837+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.id: 2024-04-03 04:53:02.852+0000 - 48.00KiB + [neo4j/fefd0874] neostore.propertystore.db.index: 2024-04-03 04:30:28.255+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.index.id: 2024-04-03 04:53:02.814+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.index.keys: 2024-04-03 04:30:28.242+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.index.keys.id: 2024-04-03 04:53:02.803+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.strings: 2024-04-03 04:12:35.222+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.strings.id: 2024-04-03 04:53:02.827+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshipgroupstore.db: 2024-04-03 04:12:35.289+0000 - 8.000KiB + [neo4j/fefd0874] neostore.relationshipgroupstore.db.id: 2024-04-03 04:53:02.949+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshipgroupstore.degrees.db: 2024-04-03 04:53:02.970+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshipstore.db: 2024-04-03 04:12:35.245+0000 - 0B + [neo4j/fefd0874] neostore.relationshipstore.db.id: 2024-04-03 04:53:02.868+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshiptypestore.db: 2024-04-03 04:12:35.259+0000 - 0B + [neo4j/fefd0874] neostore.relationshiptypestore.db.id: 2024-04-03 04:53:02.896+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshiptypestore.db.names: 2024-04-03 04:12:35.246+0000 - 8.000KiB + [neo4j/fefd0874] neostore.relationshiptypestore.db.names.id: 2024-04-03 04:53:02.882+0000 - 40.00KiB + [neo4j/fefd0874] neostore.schemastore.db: 2024-04-03 04:12:36.054+0000 - 8.000KiB + [neo4j/fefd0874] neostore.schemastore.db.id: 2024-04-03 04:53:02.936+0000 - 40.00KiB + [neo4j/fefd0874] schema: + [neo4j/fefd0874] index: + [neo4j/fefd0874] token-lookup-1.0: + [neo4j/fefd0874] 1: + [neo4j/fefd0874] index-1: 2024-04-03 04:53:02.007+0000 - 48.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.459+0000 - 48.00KiB + [neo4j/fefd0874] 2: + [neo4j/fefd0874] index-2: 2024-04-03 04:53:02.027+0000 - 40.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.390+0000 - 40.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.459+0000 - 88.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.390+0000 - 88.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.390+0000 - 88.00KiB + [neo4j/fefd0874] Storage summary: + [neo4j/fefd0874] Total size of store: 896.0KiB + [neo4j/fefd0874] Total size of mapped files: 192.0KiB + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Transaction log ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] Transaction log files stored on file store: apfs + [neo4j/fefd0874] Transaction log metadata: + [neo4j/fefd0874] - current kernel version used in transactions: V5_15 + [neo4j/fefd0874] - last committed transaction id: 21 + [neo4j/fefd0874] Transaction log files: + [neo4j/fefd0874] - existing transaction log versions: 0-0 + [neo4j/fefd0874] - oldest transaction 2 found in log with version 0 + [neo4j/fefd0874] - files: (filename : creation date - size) + [neo4j/fefd0874] neostore.transaction.db.0: 2024-04-03 04:12:35.000+0000 - 15.63KiB + [neo4j/fefd0874] - total size of files: 15.63KiB + [neo4j/fefd0874] Checkpoint log files: + [neo4j/fefd0874] - existing checkpoint log versions: 0-0 + [neo4j/fefd0874] - last checkpoint: CheckpointInfo[transactionLogPosition=LogPosition{logVersion=0, byteOffset=16000}, storeId=StoreId{creationTime=1712117555300, random=260265064831090288, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1}, checkpointEntryPosition=LogPosition{logVersion=0, byteOffset=1056}, channelPositionAfterCheckpoint=LogPosition{logVersion=0, byteOffset=1288}, checkpointFilePostReadPosition=LogPosition{logVersion=0, byteOffset=1288}, kernelVersion=KernelVersion{V5_15,version=14}, kernelVersionByte=14, transactionId=TransactionId[transactionId=21, checksum=488858741, commitTimestamp=1712119965752, consensusIndex=-1], reason=Checkpoint triggered by "Recovery completed." @ txId: 21, consensusIndexInCheckpoint=true] + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Id usage ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] ArrayPropertyStore[neostore.nodestore.db.labels]: used=1 high=0 + [neo4j/fefd0874] NodeStore[neostore.nodestore.db]: used=103 high=102 + [neo4j/fefd0874] StringPropertyStore[neostore.propertystore.db.index.keys]: used=23 high=22 + [neo4j/fefd0874] PropertyIndexStore[neostore.propertystore.db.index]: used=13 high=12 + [neo4j/fefd0874] StringPropertyStore[neostore.propertystore.db.strings]: used=1 high=0 + [neo4j/fefd0874] ArrayPropertyStore[neostore.propertystore.db.arrays]: used=1 high=0 + [neo4j/fefd0874] PropertyStore[neostore.propertystore.db]: used=111 high=110 + [neo4j/fefd0874] RelationshipStore[neostore.relationshipstore.db]: used=0 high=-1 + [neo4j/fefd0874] StringPropertyStore[neostore.relationshiptypestore.db.names]: used=1 high=0 + [neo4j/fefd0874] RelationshipTypeStore[neostore.relationshiptypestore.db]: used=0 high=-1 + [neo4j/fefd0874] StringPropertyStore[neostore.labeltokenstore.db.names]: used=8 high=7 + [neo4j/fefd0874] LabelTokenStore[neostore.labeltokenstore.db]: used=7 high=6 + [neo4j/fefd0874] SchemaStore[neostore.schemastore.db]: used=3 high=2 + [neo4j/fefd0874] RelationshipGroupStore[neostore.relationshipgroupstore.db]: used=1 high=0 + [neo4j/fefd0874] NeoStore[neostore]: used=-1 high=-1 + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Metadata ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] EXTERNAL_STORE_UUID (Database identifier exposed as external store identity. Generated on creation and never updated): 485f4e4f-d438-40c9-a4ed-0bc1099d976f + [neo4j/fefd0874] DATABASE_ID (The last used DatabaseId for this database): null + [neo4j/fefd0874] LEGACY_STORE_VERSION (Legacy store format version. This field is used from 5.0 onwards only to distinguish non-migrated pre 5.0 metadata stores.): -3523014627327384477 + [neo4j/fefd0874] STORE_ID (Store ID): StoreId{creationTime=1712117555300, random=260265064831090288, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1} + [neo4j/fefd0874] +2024-04-03 04:53:03.043+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.init: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 33ms +2024-04-03 04:53:03.044+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] Requirement `Database unavailable` makes database neo4j unavailable. +2024-04-03 04:53:03.044+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] DatabaseId{fefd0874[neo4j]} is unavailable. +2024-04-03 04:53:03.047+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/neo4j/neostore.transaction.db.0] at version=0 +2024-04-03 04:53:03.048+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/neo4j/checkpoint.0] at version=0 +2024-04-03 04:53:03.049+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [neo4j/fefd0874] Scanning log file with version 0 for checkpoint entries +2024-04-03 04:53:03.051+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.start: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 0ms +2024-04-03 04:53:03.052+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] Fulfilling of requirement 'Database unavailable' makes database neo4j available. +2024-04-03 04:53:03.052+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] DatabaseId{fefd0874[neo4j]} is ready. +2024-04-03 04:53:03.087+0000 INFO [o.n.b.p.c.c.n.SocketNettyConnector] Bolt enabled on localhost:9999. +2024-04-03 04:53:03.087+0000 INFO [o.n.b.BoltServer] Bolt server started +2024-04-03 04:53:03.089+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] id: 266B93A8C1445AE734BA77BB99FDF56964B6082641ED1A3E87435C6A5111E836 +2024-04-03 04:53:03.089+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] name: system +2024-04-03 04:53:03.089+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] creationDate: 2024-04-03T04:12:32.66Z +2024-04-03 05:20:13.733+0000 INFO [o.n.k.i.t.l.c.CheckPointerImpl] [neo4j/fefd0874] Checkpoint triggered by "Scheduled checkpoint for every 15 minutes threshold" @ txId: 27 checkpoint started... +2024-04-03 05:20:14.155+0000 INFO [o.n.k.i.t.l.c.CheckPointerImpl] [neo4j/fefd0874] Checkpoint triggered by "Scheduled checkpoint for every 15 minutes threshold" @ txId: 27 checkpoint completed in 419ms. Checkpoint flushed 41 pages (0% of total available pages), in 41 IOs. Checkpoint performed with IO limit: unlimited, paused in total 0 times( 0 millis). +2024-04-03 05:20:14.155+0000 INFO [o.n.k.i.t.l.p.LogPruningImpl] [neo4j/fefd0874] No log version pruned. The strategy used was '2 days'. +2024-04-03 06:06:29.007+0000 WARN [o.n.k.i.c.VmPauseMonitorComponent] Detected VM stop-the-world pause: {pauseTime=1666, gcTime=0, gcCount=0} +2024-04-03 06:06:30.520+0000 WARN [o.n.k.i.c.VmPauseMonitorComponent] Detected VM stop-the-world pause: {pauseTime=1150, gcTime=0, gcCount=0} +2024-04-03 06:36:42.004+0000 WARN [o.n.k.i.c.VmPauseMonitorComponent] Detected VM stop-the-world pause: {pauseTime=1215, gcTime=0, gcCount=0} +2024-04-03 06:36:43.358+0000 WARN [o.n.k.i.c.VmPauseMonitorComponent] Detected VM stop-the-world pause: {pauseTime=1154, gcTime=0, gcCount=0} +2024-04-03 07:08:17.006+0000 WARN [o.n.k.i.c.VmPauseMonitorComponent] Detected VM stop-the-world pause: {pauseTime=1355, gcTime=0, gcCount=0} +2024-04-03 07:08:18.437+0000 WARN [o.n.k.i.c.VmPauseMonitorComponent] Detected VM stop-the-world pause: {pauseTime=1154, gcTime=0, gcCount=0} +2024-04-03 07:40:01.006+0000 WARN [o.n.k.i.c.VmPauseMonitorComponent] Detected VM stop-the-world pause: {pauseTime=1479, gcTime=0, gcCount=0} +2024-04-03 07:40:02.358+0000 WARN [o.n.k.i.c.VmPauseMonitorComponent] Detected VM stop-the-world pause: {pauseTime=1152, gcTime=0, gcCount=0} +2024-04-03 08:07:02.002+0000 WARN [o.n.k.i.c.VmPauseMonitorComponent] Detected VM stop-the-world pause: {pauseTime=1317, gcTime=0, gcCount=0} +2024-04-03 08:07:04.372+0000 WARN [o.n.k.i.c.VmPauseMonitorComponent] Detected VM stop-the-world pause: {pauseTime=1153, gcTime=0, gcCount=0} +2024-04-03 11:14:57.003+0000 WARN [o.n.k.i.c.VmPauseMonitorComponent] Detected VM stop-the-world pause: {pauseTime=1339, gcTime=0, gcCount=0} +2024-04-03 11:14:58.352+0000 WARN [o.n.k.i.c.VmPauseMonitorComponent] Detected VM stop-the-world pause: {pauseTime=1148, gcTime=0, gcCount=0} +2024-04-03 13:37:40.003+0000 WARN [o.n.k.i.c.VmPauseMonitorComponent] Detected VM stop-the-world pause: {pauseTime=1672, gcTime=0, gcCount=0} +2024-04-03 13:37:41.694+0000 WARN [o.n.k.i.c.VmPauseMonitorComponent] Detected VM stop-the-world pause: {pauseTime=1149, gcTime=0, gcCount=0} +2024-04-03 13:47:47.609+0000 INFO [o.n.g.f.m.GlobalModule] Logging config in use: Embedded default config 'default-server-logs.xml' +2024-04-03 13:47:47.866+0000 WARN [o.n.k.i.JvmChecker] The max heap memory has not been configured. It is recommended that it is always explicitly configured, to ensure the system has a balanced configuration. Until then, a JVM computed heuristic of 4294967296 bytes is used instead. If you are running neo4j server, you need to configure server.memory.heap.max_size in neo4j.conf. If you are running neo4j embedded, you have to launch the JVM with -Xmx set to a value. You can run neo4j-admin server memory-recommendation for memory configuration suggestions. +2024-04-03 13:47:47.867+0000 WARN [o.n.k.i.JvmChecker] The initial heap memory has not been configured. It is recommended that it is always explicitly configured, to ensure the system has a balanced configuration. Until then, a JVM computed heuristic of 268435456 bytes is used instead. If you are running neo4j server, you need to configure server.memory.heap.initial_size in neo4j.conf. If you are running neo4j embedded, you have to launch the JVM with -Xms set to a value. You can run neo4j-admin server memory-recommendation for memory configuration suggestions. +2024-04-03 13:47:47.930+0000 WARN [o.n.i.p.PageCache] The server.memory.pagecache.size setting has not been configured. It is recommended that this setting is always explicitly configured, to ensure the system has a balanced configuration. Until then, a computed heuristic value of 6442450944 bytes will be used instead. Run `neo4j-admin memory-recommendation` for memory configuration suggestions. +2024-04-03 13:47:47.931+0000 WARN [o.n.i.p.PageCache] Reflection access to java.nio.DirectByteBuffer is not available, using fallback mode. This could have negative impact on performance and memory usage. Consider adding --add-opens=java.base/java.nio=ALL-UNNAMED to VM options. +2024-04-03 13:47:48.300+0000 INFO [o.n.i.d.DiagnosticsManager] + ******************************************************************************** + [ System diagnostics ] + ******************************************************************************** + -------------------------------------------------------------------------------- + [ System memory information ] + -------------------------------------------------------------------------------- + Total Physical memory: 16.00GiB + Free Physical memory: 30.16MiB + Committed virtual memory: 38.29GiB + Total swap space: 2.000GiB + Free swap space: 1.244GiB + + -------------------------------------------------------------------------------- + [ JVM memory information ] + -------------------------------------------------------------------------------- + Free memory: 150.0MiB + Total memory: 260.0MiB + Max memory: 4.000GiB + Garbage Collector: G1 Young Generation: [G1 Eden Space, G1 Survivor Space, G1 Old Gen] + Garbage Collector: G1 Old Generation: [G1 Eden Space, G1 Survivor Space, G1 Old Gen] + Memory Pool: CodeHeap 'non-nmethods' (Non-heap memory): committed=2.438MiB, used=1.213MiB, max=5.570MiB, threshold=0B + Memory Pool: Metaspace (Non-heap memory): committed=20.13MiB, used=19.79MiB, max=-1B, threshold=0B + Memory Pool: CodeHeap 'profiled nmethods' (Non-heap memory): committed=4.125MiB, used=4.112MiB, max=117.2MiB, threshold=0B + Memory Pool: Compressed Class Space (Non-heap memory): committed=2.313MiB, used=2.121MiB, max=1.000GiB, threshold=0B + Memory Pool: G1 Eden Space (Heap memory): committed=156.0MiB, used=82.00MiB, max=-1B, threshold=? + Memory Pool: G1 Old Gen (Heap memory): committed=100.0MiB, used=22.54MiB, max=4.000GiB, threshold=0B + Memory Pool: G1 Survivor Space (Heap memory): committed=4.000MiB, used=3.421MiB, max=-1B, threshold=? + Memory Pool: CodeHeap 'non-profiled nmethods' (Non-heap memory): committed=2.438MiB, used=980.8KiB, max=117.2MiB, threshold=0B + + -------------------------------------------------------------------------------- + [ Operating system information ] + -------------------------------------------------------------------------------- + Operating System: Mac OS X; version: 12.7.4; arch: x86_64; cpus: 8 + Max number of file descriptors: 10240 + Number of open file descriptors: 226 + Process id: 56400 + Byte order: LITTLE_ENDIAN + Local timezone: America/New_York + Memory page size: 4096 + Unaligned memory access allowed: true + + -------------------------------------------------------------------------------- + [ JVM information ] + -------------------------------------------------------------------------------- + VM Name: Java HotSpot(TM) 64-Bit Server VM + VM Vendor: Oracle Corporation + VM Version: 17.0.2+8-LTS-86 + JIT compiler: HotSpot 64-Bit Tiered Compilers + VM Arguments: [-Dvisualvm.id=80960699803784, -javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=57967:/Applications/IntelliJ IDEA.app/Contents/bin, -Dfile.encoding=UTF-8] + + -------------------------------------------------------------------------------- + [ Java classpath ] + -------------------------------------------------------------------------------- + [classpath] /Users/jnr6/.m2/repository/it/unimi/dsi/fastutil/8.5.13/fastutil-8.5.13.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-codec-http/4.1.101.Final/netty-codec-http-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/scala-library/2.13.11/scala-library-2.13.11.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-command-line/5.16.0/neo4j-command-line-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-epoll/4.1.101.Final/netty-transport-native-epoll-4.1.101.Final-linux-x86_64.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-common/4.1.101.Final/netty-common-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.16.0/jackson-databind-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-consistency-check/5.16.0/neo4j-consistency-check-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-values/5.16.0/neo4j-values-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-dbms/5.16.0/neo4j-dbms-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-analysis/9.6/asm-analysis-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-planner/5.16.0/neo4j-cypher-planner-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/antlr/antlr4-runtime/4.8/antlr4-runtime-4.8.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-api/3.2.13/docker-java-api-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/activation/jakarta.activation-api/1.2.1/jakarta.activation-api-1.2.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-planner-spi/5.16.0/neo4j-cypher-planner-spi-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-resource/5.16.0/neo4j-resource-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-servlet/10.0.17/jetty-servlet-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-cache/1.13.0/shiro-cache-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-javacc-parser/5.16.0/neo4j-cypher-javacc-parser-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/sun/istack/istack-commons-runtime/3.0.8/istack-commons-runtime-3.0.8.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-configuration2/2.9.0/commons-configuration2-2.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-compress/1.21/commons-compress-1.21.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/containers/jersey-container-servlet/2.34/jersey-container-servlet-2.34.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-kqueue/4.1.101.Final/netty-transport-native-kqueue-4.1.101.Final-osx-aarch_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-concurrent/5.16.0/neo4j-concurrent-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/mysql/1.17.4/mysql-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/mockito/mockito-core/5.7.0/mockito-core-5.7.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher/5.16.0/neo4j-cypher-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-capabilities/5.16.0/neo4j-capabilities-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-notifications/5.16.0/neo4j-notifications-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-import-util/5.16.0/neo4j-import-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-config/5.16.0/neo4j-cypher-config-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/containers/jersey-container-servlet-core/2.34/jersey-container-servlet-core-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-io/5.16.0/neo4j-io-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-locator/2.6.1/hk2-locator-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-lang3/3.13.0/commons-lang3-3.13.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.16.0/jackson-core-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/mysql/mysql-connector-j/8.2.0/mysql-connector-j-8.2.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-classes-epoll/4.1.101.Final/netty-transport-classes-epoll-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/objenesis/objenesis/3.3/objenesis-3.3.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-server/2.34/jersey-server-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-client/2.34/jersey-client-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-ast-factory/5.16.0/neo4j-cypher-ast-factory-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-handler/4.1.101.Final/netty-handler-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j/5.16.0/neo4j-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/google/code/gson/gson/2.9.0/gson-2.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-logging/5.16.0/neo4j-logging-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-webapp/10.0.17/jetty-webapp-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-core/9.8.0/lucene-core-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-kernel-api/5.16.0/neo4j-kernel-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcutil-jdk18on/1.76/bcutil-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/bitbucket/inkytonik/kiama/kiama_2.13/2.5.1/kiama_2.13-2.5.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-common/5.16.0/neo4j-common-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/junit/junit/4.13.2/junit-4.13.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-index/5.16.0/neo4j-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport/4.1.101.Final/netty-transport-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-util/9.6/asm-util-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/jctools/jctools-core/4.0.2/jctools-core-4.0.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-graphdb-api/5.16.0/neo4j-graphdb-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/jdbc/1.17.4/jdbc-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-runtime-util/5.16.0/neo4j-cypher-runtime-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/collections/eclipse-collections-api/11.1.0/eclipse-collections-api-11.1.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-unsafe/5.16.0/neo4j-unsafe-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-server/10.0.17/jetty-server-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcprov-jdk18on/1.76/bcprov-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-slotted-runtime/5.16.0/neo4j-cypher-slotted-runtime-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-layout-template-json/2.20.0/log4j-layout-template-json-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-fulltext-index/5.16.0/neo4j-fulltext-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/net/java/dev/jna/jna/5.8.0/jna-5.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-util/10.0.17/jetty-util-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-expressions/5.16.0/neo4j-expressions-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-transport/3.2.13/docker-java-transport-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/commons-logging/commons-logging/1.2/commons-logging-1.2.jar + [classpath] /Users/jnr6/IdeaProjects/policy-machine-core/target/classes + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-testkit/1.10.0/junit-platform-testkit-1.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-core/1.13.0/shiro-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-physical-planning/5.16.0/neo4j-cypher-physical-planning-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-storage-engine-util/5.16.0/neo4j-storage-engine-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-ast/5.16.0/neo4j-ast-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-core/2.20.0/log4j-core-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-params/5.9.0/junit-jupiter-params-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/external/jakarta.inject/2.6.1/jakarta.inject-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/inject/jersey-hk2/2.34/jersey-hk2-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/hamcrest/hamcrest/2.2/hamcrest-2.2.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jaxb/jaxb-runtime/2.3.2/jaxb-runtime-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-logical-plans/5.16.0/neo4j-cypher-logical-plans-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-xml/10.0.17/jetty-xml-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar + [classpath] /Users/jnr6/.m2/repository/org/codehaus/jettison/jettison/1.5.4/jettison-1.5.4.jar + [classpath] /Users/jnr6/.m2/repository/com/propensive/mercator_2.13/0.2.1/mercator_2.13-0.2.1.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jaxb/txw2/2.3.2/txw2-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-resolver/4.1.101.Final/netty-resolver-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar + [classpath] /Users/jnr6/.m2/repository/org/awaitility/awaitility/4.2.0/awaitility-4.2.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-codec/4.1.101.Final/netty-codec-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-buffer/4.1.101.Final/netty-buffer-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-hash/1.13.0/shiro-crypto-hash-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/info/picocli/picocli/4.7.5/picocli-4.7.5.jar + [classpath] /Users/jnr6/.m2/repository/com/profesorfalken/jPowerShell/3.0/jPowerShell-3.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-cipher/1.13.0/shiro-crypto-cipher-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-lang/1.13.0/shiro-lang-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-token-api/5.16.0/neo4j-token-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-bolt/5.16.0/neo4j-bolt-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-record-storage-engine/5.16.0/neo4j-record-storage-engine-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-epoll/4.1.101.Final/netty-transport-native-epoll-4.1.101.Final-linux-aarch_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-ir/5.16.0/neo4j-cypher-ir-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/test-utils/5.15.0/test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter/5.10.0/junit-jupiter-5.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/app/neo4j-server-test-utils/5.15.0/neo4j-server-test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/rnorth/duct-tape/duct-tape/1.0.8/duct-tape-1.0.8.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/modules/scala-collection-contrib_2.13/0.3.0/scala-collection-contrib_2.13-0.3.0.jar + [classpath] /Users/jnr6/.m2/repository/org/slf4j/slf4j-api/2.0.0/slf4j-api-2.0.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-analysis-common/9.8.0/lucene-analysis-common-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/com/propensive/magnolia_2.13/0.17.0/magnolia_2.13-0.17.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-event/1.13.0/shiro-event-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-api/2.20.0/log4j-api-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-classes-kqueue/4.1.101.Final/netty-transport-classes-kqueue-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/net/bytebuddy/byte-buddy-agent/1.14.9/byte-buddy-agent-1.14.9.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/validation/jakarta.validation-api/2.0.2/jakarta.validation-api-2.0.2.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/database-commons/1.17.4/database-commons-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-front-end/5.16.0/neo4j-front-end-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-procedure/5.16.0/neo4j-procedure-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-import-tool/5.16.0/neo4j-import-tool-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/ws/rs/jakarta.ws.rs-api/2.1.6/jakarta.ws.rs-api-2.1.6.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.10.3/jackson-annotations-2.10.3.jar + [classpath] /Users/jnr6/.m2/repository/com/google/protobuf/protobuf-java/3.21.9/protobuf-java-3.21.9.jar + [classpath] /Users/jnr6/.m2/repository/io/projectreactor/reactor-core/3.6.0/reactor-core-3.6.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-wal/5.16.0/neo4j-wal-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-ssl/5.16.0/neo4j-ssl-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-unix-common/4.1.101.Final/netty-transport-native-unix-common-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-config-core/1.13.0/shiro-config-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-codegen/5.16.0/neo4j-codegen-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-tree/9.6/asm-tree-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-rewriting/5.16.0/neo4j-rewriting-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-backward-codecs/9.8.0/lucene-backward-codecs-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-lock/5.16.0/neo4j-lock-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-schema/5.16.0/neo4j-schema-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/collections/eclipse-collections/11.1.0/eclipse-collections-11.1.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/luben/zstd-jni/1.5.5-10/zstd-jni-1.5.5-10.jar + [classpath] /Users/jnr6/.m2/repository/commons-codec/commons-codec/1.16.0/commons-codec-1.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/jaxrs/jackson-jaxrs-json-provider/2.16.0/jackson-jaxrs-json-provider-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-expression-evaluator/5.16.0/neo4j-cypher-expression-evaluator-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/testcontainers/1.17.4/testcontainers-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/test/neo4j-harness/5.15.0/neo4j-harness-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/javassist/javassist/3.25.0-GA/javassist-3.25.0-GA.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-core/1.13.0/shiro-crypto-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-commons/1.9.0/junit-platform-commons-1.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-utils/2.6.1/hk2-utils-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/io-test-utils/5.15.0/io-test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/annotations/5.16.0/annotations-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-interpreted-runtime/5.16.0/neo4j-cypher-interpreted-runtime-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-cache/5.16.0/neo4j-cypher-cache-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jetbrains/annotations/17.0.0/annotations-17.0.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-layout/5.16.0/neo4j-layout-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/reactivestreams/reactive-streams/1.0.4/reactive-streams-1.0.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/licensing-proxy/zstd-proxy/5.16.0/zstd-proxy-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-security/5.16.0/neo4j-security-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-common/2.34/jersey-common-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/scala-reflect/2.13.11/scala-reflect-2.13.11.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/junit-jupiter/1.17.4/junit-jupiter-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-random-values/5.15.0/neo4j-random-values-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-transport-zerodep/3.2.13/docker-java-transport-zerodep-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-diagnostics/5.16.0/neo4j-diagnostics-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-http/10.0.17/jetty-http-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/cypher-ast-factory/5.16.0/cypher-ast-factory-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-configuration/5.16.0/neo4j-configuration-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-exceptions/5.16.0/neo4j-exceptions-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-util/5.16.0/neo4j-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-id-generator/5.16.0/neo4j-id-generator-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/seancfoley/ipaddress/5.4.0/ipaddress-5.4.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-io/10.0.17/jetty-io-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/commons-io/commons-io/2.11.0/commons-io-2.11.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-queryparser/9.8.0/lucene-queryparser-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/xml/bind/jakarta.xml.bind-api/2.3.2/jakarta.xml.bind-api-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-kernel/5.16.0/neo4j-kernel-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-fabric/5.16.0/neo4j-fabric-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-spatial-index/5.16.0/neo4j-spatial-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-procedure-api/5.16.0/neo4j-procedure-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/sun/xml/fastinfoset/FastInfoset/1.2.16/FastInfoset-1.2.16.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-lucene-index/5.16.0/neo4j-lucene-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/net/bytebuddy/byte-buddy/1.14.9/byte-buddy-1.14.9.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-query-router/5.16.0/neo4j-query-router-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-csv/5.16.0/neo4j-csv-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/toolchain/jetty-servlet-api/4.0.6/jetty-servlet-api-4.0.6.jar + [classpath] /Users/jnr6/IdeaProjects/policy-machine-core/target/test-classes + [classpath] /Users/jnr6/.m2/repository/com/github/ben-manes/caffeine/caffeine/3.1.8/caffeine-3.1.8.jar + [classpath] /Users/jnr6/.m2/repository/com/profesorfalken/WMI4Java/1.6.3/WMI4Java-1.6.3.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/vintage/junit-vintage-engine/5.10.0/junit-vintage-engine-5.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-collections/5.16.0/neo4j-collections-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/assertj/assertj-core/3.24.2/assertj-core-3.24.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-graph-algo/5.16.0/neo4j-graph-algo-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.9.0/junit-jupiter-engine-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jvnet/staxex/stax-ex/1.8.1/stax-ex-1.8.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/app/neo4j-server/5.16.0/neo4j-server-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-monitoring/5.16.0/neo4j-monitoring-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-macros/5.16.0/neo4j-cypher-macros-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jprocesses/jProcesses/1.6.5/jProcesses-1.6.5.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-api/2.6.1/hk2-api-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.9.0/junit-jupiter-api-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-security/10.0.17/jetty-security-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcpkix-jdk18on/1.76/bcpkix-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-engine/1.9.0/junit-platform-engine-1.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-slf4j-provider/5.16.0/neo4j-slf4j-provider-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-kqueue/4.1.101.Final/netty-transport-native-kqueue-4.1.101.Final-osx-x86_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-data-collector/5.16.0/neo4j-data-collector-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/server-api/5.16.0/server-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-native/5.16.0/neo4j-native-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/module/jackson-module-jaxb-annotations/2.16.0/jackson-module-jaxb-annotations-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm/9.6/asm-9.6.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/jaxrs/jackson-jaxrs-base/2.16.0/jackson-jaxrs-base-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar + + -------------------------------------------------------------------------------- + [ Library path ] + -------------------------------------------------------------------------------- + /Users/jnr6/Library/Java/Extensions + /Library/Java/Extensions + /Network/Library/Java/Extensions + /System/Library/Java/Extensions + /usr/lib/java + /Users/jnr6/IdeaProjects/policy-machine-core + + -------------------------------------------------------------------------------- + [ System properties ] + -------------------------------------------------------------------------------- + sun.jnu.encoding = UTF-8 + sun.arch.data.model = 64 + user.timezone = America/New_York + visualvm.id = 80960699803784 + sun.java.launcher = SUN_STANDARD + user.country = US + sun.boot.library.path = /Library/Java/JavaVirtualMachines/jdk-17.0.2.jdk/Contents/Home/lib + sun.java.command = gov.nist.csd.pm.pap.neo4j.ImportTest + jdk.debug = release + sun.cpu.endian = little + user.home = /Users/jnr6 + user.language = en + file.separator = / + sun.management.compiler = HotSpot 64-Bit Tiered Compilers + user.name = jnr6 + path.separator = : + file.encoding = UTF-8 + jnidispatch.path = /Users/jnr6/Library/Caches/JNA/temp/jna10565714216054377640.tmp + jna.loaded = true + user.dir = /Users/jnr6/IdeaProjects/policy-machine-core + native.encoding = UTF-8 + sun.io.unicode.encoding = UnicodeBig + + -------------------------------------------------------------------------------- + [ (IANA) TimeZone database version ] + -------------------------------------------------------------------------------- + TimeZone version: 2021e (available for 601 zone identifiers) + + -------------------------------------------------------------------------------- + [ Network information ] + -------------------------------------------------------------------------------- + Interface utun2: + address: fe80:0:0:0:ce81:b1c:bd2c:69e%utun2 + Interface utun1: + address: fe80:0:0:0:bbf5:1c30:4238:57b2%utun1 + Interface utun0: + address: fe80:0:0:0:73be:4eb:3f31:a891%utun0 + Interface llw0: + address: fe80:0:0:0:c0a6:71ff:fe04:534c%llw0 + Interface awdl0: + address: fe80:0:0:0:c0a6:71ff:fe04:534c%awdl0 + Interface utun3: + address: 2610:20:6005:152:0:0:0:136%utun3 + address: fe80:0:0:0:aebc:32ff:fe94:d383%utun3 + address: 129.6.109.119 + Interface en0: + address: 192.168.1.247 + Interface lo0: + address: fe80:0:0:0:0:0:0:1%lo0 + address: 0:0:0:0:0:0:0:1%lo0 + address: 127.0.0.1 + + -------------------------------------------------------------------------------- + [ Native access information ] + -------------------------------------------------------------------------------- + Native access details: Native access is not available for current platform. + + -------------------------------------------------------------------------------- + [ DBMS config ] + -------------------------------------------------------------------------------- + DBMS provided settings: + server.bolt.enabled=true + server.bolt.listen_address=localhost:9999 + server.directories.neo4j_home=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + Directories in use: + server.directories.data=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data + server.directories.dumps.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/dumps + server.directories.import=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + server.directories.lib=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/lib + server.directories.licenses=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/licenses + server.directories.logs=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/logs + server.directories.neo4j_home=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + server.directories.plugins=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/plugins + server.directories.run=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/run + server.directories.script.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/scripts + server.directories.transaction.logs.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions + + -------------------------------------------------------------------------------- + [ Packaging ] + -------------------------------------------------------------------------------- + Could not read packaging info: java.nio.file.NoSuchFileException: /Users/jnr6/IdeaProjects/policy-machine-core/testdb/packaging_info + +2024-04-03 13:47:48.449+0000 INFO [o.n.d.i.DefaultIdentityModule] Found ServerId on disk: ServerId{54490f53} (54490f53-4b94-4d0f-9604-023c3fe1be5e) +2024-04-03 13:47:48.450+0000 INFO [o.n.d.i.DefaultIdentityModule] This instance is ServerId{54490f53} (54490f53-4b94-4d0f-9604-023c3fe1be5e) +2024-04-03 13:47:49.220+0000 INFO [o.n.d.d.DatabaseLifecycles] Creating 'DatabaseId{00000000[system]}'. +2024-04-03 13:47:49.459+0000 INFO [o.n.b.BoltServer] Using connector transport KQueue +2024-04-03 13:47:49.541+0000 INFO [o.n.b.BoltServer] Configured external Bolt connector with listener address localhost/127.0.0.1:9999 +2024-04-03 13:47:49.541+0000 INFO [o.n.b.BoltServer] Bolt server loaded +2024-04-03 13:47:49.555+0000 INFO [o.n.d.d.DatabaseLifecycles] Starting 'DatabaseId{00000000[system]}'. +2024-04-03 13:47:49.808+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [system/00000000] Scanning log file with version 0 for checkpoint entries +2024-04-03 13:47:49.853+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [system/00000000] Selected RecordFormat:PageAlignedV5_0[aligned-1.1] record format from store /Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system +2024-04-03 13:47:49.854+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [system/00000000] Selected format from the store files: RecordFormat:PageAlignedV5_0[aligned-1.1] +2024-04-03 13:47:50.495+0000 INFO [o.n.i.d.DiagnosticsManager] [system/00000000] + [system/00000000] ******************************************************************************** + [system/00000000] [ Database: system ] + [system/00000000] ******************************************************************************** + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Version ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] DBMS: community record-aligned-1.1 + [system/00000000] Kernel version: 5.16.0 + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Store files ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] Disk space on partition (Total / Free / Free %): 500068036608 / 109507289088 / 21 + [system/00000000] Storage files stored on file store: apfs + [system/00000000] Storage files: (filename : modification date - size) + [system/00000000] database_lock: 2024-04-03 04:12:32.900+0000 - 0B + [system/00000000] id-buffer.tmp.0: 2024-04-03 04:53:00.847+0000 - 0B + [system/00000000] neostore: 2024-04-03 04:12:32.662+0000 - 8.000KiB + [system/00000000] neostore.counts.db: 2024-04-03 13:47:50.311+0000 - 48.00KiB + [system/00000000] neostore.indexstats.db: 2024-04-03 13:47:50.359+0000 - 48.00KiB + [system/00000000] neostore.labeltokenstore.db: 2024-04-03 04:12:39.430+0000 - 8.000KiB + [system/00000000] neostore.labeltokenstore.db.id: 2024-04-03 13:47:50.246+0000 - 40.00KiB + [system/00000000] neostore.labeltokenstore.db.names: 2024-04-03 04:12:39.454+0000 - 8.000KiB + [system/00000000] neostore.labeltokenstore.db.names.id: 2024-04-03 13:47:50.227+0000 - 40.00KiB + [system/00000000] neostore.nodestore.db: 2024-04-03 04:12:39.416+0000 - 8.000KiB + [system/00000000] neostore.nodestore.db.id: 2024-04-03 13:47:50.051+0000 - 40.00KiB + [system/00000000] neostore.nodestore.db.labels: 2024-04-03 04:12:32.509+0000 - 8.000KiB + [system/00000000] neostore.nodestore.db.labels.id: 2024-04-03 13:47:50.020+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db: 2024-04-03 04:12:39.442+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.arrays: 2024-04-03 04:12:32.565+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.arrays.id: 2024-04-03 13:47:50.131+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.id: 2024-04-03 13:47:50.152+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.index: 2024-04-03 04:12:39.477+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.index.id: 2024-04-03 13:47:50.092+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.index.keys: 2024-04-03 04:12:39.464+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.index.keys.id: 2024-04-03 13:47:50.074+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.strings: 2024-04-03 04:12:39.367+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.strings.id: 2024-04-03 13:47:50.111+0000 - 40.00KiB + [system/00000000] neostore.relationshipgroupstore.db: 2024-04-03 04:12:32.640+0000 - 8.000KiB + [system/00000000] neostore.relationshipgroupstore.db.id: 2024-04-03 13:47:50.274+0000 - 40.00KiB + [system/00000000] neostore.relationshipgroupstore.degrees.db: 2024-04-03 13:47:50.338+0000 - 40.00KiB + [system/00000000] neostore.relationshipstore.db: 2024-04-03 04:12:39.378+0000 - 8.000KiB + [system/00000000] neostore.relationshipstore.db.id: 2024-04-03 13:47:50.174+0000 - 40.00KiB + [system/00000000] neostore.relationshiptypestore.db: 2024-04-03 04:12:39.405+0000 - 8.000KiB + [system/00000000] neostore.relationshiptypestore.db.id: 2024-04-03 13:47:50.211+0000 - 40.00KiB + [system/00000000] neostore.relationshiptypestore.db.names: 2024-04-03 04:12:39.392+0000 - 8.000KiB + [system/00000000] neostore.relationshiptypestore.db.names.id: 2024-04-03 13:47:50.197+0000 - 40.00KiB + [system/00000000] neostore.schemastore.db: 2024-04-03 04:12:39.490+0000 - 8.000KiB + [system/00000000] neostore.schemastore.db.id: 2024-04-03 13:47:50.260+0000 - 40.00KiB + [system/00000000] schema: + [system/00000000] index: + [system/00000000] range-1.0: + [system/00000000] 3: + [system/00000000] index-3: 2024-04-03 04:53:00.761+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.321+0000 - 48.00KiB + [system/00000000] 4: + [system/00000000] index-4: 2024-04-03 04:53:00.787+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.437+0000 - 48.00KiB + [system/00000000] 7: + [system/00000000] index-7: 2024-04-03 04:53:00.809+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.907+0000 - 48.00KiB + [system/00000000] 8: + [system/00000000] index-8: 2024-04-03 04:53:00.832+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.997+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.996+0000 - 192.0KiB + [system/00000000] token-lookup-1.0: + [system/00000000] 1: + [system/00000000] index-1: 2024-04-03 04:53:00.697+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:33.516+0000 - 48.00KiB + [system/00000000] 2: + [system/00000000] index-2: 2024-04-03 04:53:00.725+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:33.409+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:33.515+0000 - 96.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.321+0000 - 288.0KiB + [system/00000000] - Total: 2024-04-03 04:12:33.407+0000 - 288.0KiB + [system/00000000] Storage summary: + [system/00000000] Total size of store: 1.078MiB + [system/00000000] Total size of mapped files: 408.0KiB + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Transaction log ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] Transaction log files stored on file store: apfs + [system/00000000] Transaction log metadata: + [system/00000000] - current kernel version used in transactions: V5_15 + [system/00000000] - last committed transaction id: 37 + [system/00000000] Transaction log files: + [system/00000000] - existing transaction log versions: 0-0 + [system/00000000] - oldest transaction 2 found in log with version 0 + [system/00000000] - files: (filename : creation date - size) + [system/00000000] neostore.transaction.db.0: 2024-04-03 04:12:32.000+0000 - 19.26KiB + [system/00000000] - total size of files: 19.26KiB + [system/00000000] Checkpoint log files: + [system/00000000] - existing checkpoint log versions: 0-0 + [system/00000000] - last checkpoint: CheckpointInfo[transactionLogPosition=LogPosition{logVersion=0, byteOffset=19725}, storeId=StoreId{creationTime=1712117552660, random=4552926301767966796, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1}, checkpointEntryPosition=LogPosition{logVersion=0, byteOffset=360}, channelPositionAfterCheckpoint=LogPosition{logVersion=0, byteOffset=592}, checkpointFilePostReadPosition=LogPosition{logVersion=0, byteOffset=592}, kernelVersion=KernelVersion{V5_15,version=14}, kernelVersionByte=14, transactionId=TransactionId[transactionId=37, checksum=-1026009811, commitTimestamp=1712117555154, consensusIndex=-1], reason=Checkpoint triggered by "Database shutdown" @ txId: 37, consensusIndexInCheckpoint=true] + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Id usage ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] ArrayPropertyStore[neostore.nodestore.db.labels]: used=1 high=0 + [system/00000000] NodeStore[neostore.nodestore.db]: used=6 high=5 + [system/00000000] StringPropertyStore[neostore.propertystore.db.index.keys]: used=44 high=43 + [system/00000000] PropertyIndexStore[neostore.propertystore.db.index]: used=31 high=30 + [system/00000000] StringPropertyStore[neostore.propertystore.db.strings]: used=3 high=2 + [system/00000000] ArrayPropertyStore[neostore.propertystore.db.arrays]: used=1 high=0 + [system/00000000] PropertyStore[neostore.propertystore.db]: used=59 high=58 + [system/00000000] RelationshipStore[neostore.relationshipstore.db]: used=2 high=1 + [system/00000000] StringPropertyStore[neostore.relationshiptypestore.db.names]: used=2 high=1 + [system/00000000] RelationshipTypeStore[neostore.relationshiptypestore.db]: used=1 high=0 + [system/00000000] StringPropertyStore[neostore.labeltokenstore.db.names]: used=5 high=4 + [system/00000000] LabelTokenStore[neostore.labeltokenstore.db]: used=4 high=3 + [system/00000000] SchemaStore[neostore.schemastore.db]: used=11 high=10 + [system/00000000] RelationshipGroupStore[neostore.relationshipgroupstore.db]: used=1 high=0 + [system/00000000] NeoStore[neostore]: used=-1 high=-1 + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Metadata ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] EXTERNAL_STORE_UUID (Database identifier exposed as external store identity. Generated on creation and never updated): 8e4fd9af-0e04-47d8-a19c-cdb72dbda752 + [system/00000000] DATABASE_ID (The last used DatabaseId for this database): null + [system/00000000] LEGACY_STORE_VERSION (Legacy store format version. This field is used from 5.0 onwards only to distinguish non-migrated pre 5.0 metadata stores.): -3523014627327384477 + [system/00000000] STORE_ID (Store ID): StoreId{creationTime=1712117552660, random=4552926301767966796, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1} + [system/00000000] +2024-04-03 13:47:50.691+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 13:47:50.691+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 13:47:50.693+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 13:47:50.693+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 13:47:50.716+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 13:47:50.716+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 13:47:50.717+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 13:47:50.717+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 13:47:50.750+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 +2024-04-03 13:47:50.750+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 +2024-04-03 13:47:50.751+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 13:47:50.752+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 +2024-04-03 13:47:50.771+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 +2024-04-03 13:47:50.772+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 +2024-04-03 13:47:50.772+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 13:47:50.772+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 +2024-04-03 13:47:50.794+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 +2024-04-03 13:47:50.795+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 +2024-04-03 13:47:50.796+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 13:47:50.797+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 +2024-04-03 13:47:50.820+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 +2024-04-03 13:47:50.820+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 +2024-04-03 13:47:50.821+0000 INFO [o.n.k.i.a.i.IndexingService] [system/00000000] IndexingService.init: indexes not specifically mentioned above are ONLINE. Total 6 indexes. Processed in 159ms +2024-04-03 13:47:50.821+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 13:47:50.821+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 +2024-04-03 13:47:50.827+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] Requirement `Database unavailable` makes database system unavailable. +2024-04-03 13:47:50.827+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] DatabaseId{00000000[system]} is unavailable. +2024-04-03 13:47:50.882+0000 INFO [o.n.k.d.Database] [system/00000000] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/system/neostore.transaction.db.0] at version=0 +2024-04-03 13:47:50.885+0000 INFO [o.n.k.d.Database] [system/00000000] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/system/checkpoint.0] at version=0 +2024-04-03 13:47:50.886+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [system/00000000] Scanning log file with version 0 for checkpoint entries +2024-04-03 13:47:50.889+0000 INFO [o.n.k.i.a.i.IndexingService] [system/00000000] IndexingService.start: indexes not specifically mentioned above are ONLINE. Total 6 indexes. Processed in 0ms +2024-04-03 13:47:50.922+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] Fulfilling of requirement 'Database unavailable' makes database system available. +2024-04-03 13:47:50.922+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] DatabaseId{00000000[system]} is ready. +2024-04-03 13:47:51.031+0000 INFO [o.n.s.s.s.UserSecurityGraphComponent] Performing postInitialization step for component 'security-users' with version 4 and status CURRENT +2024-04-03 13:47:51.031+0000 INFO [o.n.s.s.s.UserSecurityGraphComponent] Updating the initial password in component 'security-users' +2024-04-03 13:47:51.043+0000 INFO [o.n.d.d.DatabaseLifecycles] Creating 'DatabaseId{fefd0874[neo4j]}'. +2024-04-03 13:47:51.046+0000 INFO [o.n.d.d.DatabaseLifecycles] Starting 'DatabaseId{fefd0874[neo4j]}'. +2024-04-03 13:47:51.062+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [neo4j/fefd0874] Scanning log file with version 0 for checkpoint entries +2024-04-03 13:47:51.076+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected RecordFormat:PageAlignedV5_0[aligned-1.1] record format from store /Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j +2024-04-03 13:47:51.076+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected format from the store files: RecordFormat:PageAlignedV5_0[aligned-1.1] +2024-04-03 13:47:51.302+0000 INFO [o.n.i.d.DiagnosticsManager] [neo4j/fefd0874] + [neo4j/fefd0874] ******************************************************************************** + [neo4j/fefd0874] [ Database: neo4j ] + [neo4j/fefd0874] ******************************************************************************** + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Version ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] DBMS: community record-aligned-1.1 + [neo4j/fefd0874] Kernel version: 5.16.0 + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Store files ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] Disk space on partition (Total / Free / Free %): 500068036608 / 109507289088 / 21 + [neo4j/fefd0874] Storage files stored on file store: apfs + [neo4j/fefd0874] Storage files: (filename : modification date - size) + [neo4j/fefd0874] database_lock: 2024-04-03 04:12:35.327+0000 - 0B + [neo4j/fefd0874] id-buffer.tmp.0: 2024-04-03 04:53:05.057+0000 - 1.653KiB + [neo4j/fefd0874] neostore: 2024-04-03 04:12:35.301+0000 - 8.000KiB + [neo4j/fefd0874] neostore.counts.db: 2024-04-03 13:47:51.253+0000 - 48.00KiB + [neo4j/fefd0874] neostore.indexstats.db: 2024-04-03 13:47:51.276+0000 - 48.00KiB + [neo4j/fefd0874] neostore.labeltokenstore.db: 2024-04-03 04:53:01.953+0000 - 8.000KiB + [neo4j/fefd0874] neostore.labeltokenstore.db.id: 2024-04-03 13:47:51.219+0000 - 40.00KiB + [neo4j/fefd0874] neostore.labeltokenstore.db.names: 2024-04-03 04:53:01.900+0000 - 8.000KiB + [neo4j/fefd0874] neostore.labeltokenstore.db.names.id: 2024-04-03 13:47:51.208+0000 - 40.00KiB + [neo4j/fefd0874] neostore.nodestore.db: 2024-04-03 05:20:14.119+0000 - 8.000KiB + [neo4j/fefd0874] neostore.nodestore.db.id: 2024-04-03 13:47:51.093+0000 - 48.00KiB + [neo4j/fefd0874] neostore.nodestore.db.labels: 2024-04-03 04:12:35.189+0000 - 8.000KiB + [neo4j/fefd0874] neostore.nodestore.db.labels.id: 2024-04-03 13:47:51.082+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db: 2024-04-03 05:20:14.131+0000 - 16.00KiB + [neo4j/fefd0874] neostore.propertystore.db.arrays: 2024-04-03 04:12:35.234+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.arrays.id: 2024-04-03 13:47:51.144+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.id: 2024-04-03 13:47:51.156+0000 - 48.00KiB + [neo4j/fefd0874] neostore.propertystore.db.index: 2024-04-03 04:30:28.255+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.index.id: 2024-04-03 13:47:51.120+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.index.keys: 2024-04-03 04:30:28.242+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.index.keys.id: 2024-04-03 13:47:51.105+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.strings: 2024-04-03 04:12:35.222+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.strings.id: 2024-04-03 13:47:51.130+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshipgroupstore.db: 2024-04-03 04:12:35.289+0000 - 8.000KiB + [neo4j/fefd0874] neostore.relationshipgroupstore.db.id: 2024-04-03 13:47:51.241+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshipgroupstore.degrees.db: 2024-04-03 13:47:51.264+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshipstore.db: 2024-04-03 04:12:35.245+0000 - 0B + [neo4j/fefd0874] neostore.relationshipstore.db.id: 2024-04-03 13:47:51.170+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshiptypestore.db: 2024-04-03 04:12:35.259+0000 - 0B + [neo4j/fefd0874] neostore.relationshiptypestore.db.id: 2024-04-03 13:47:51.195+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshiptypestore.db.names: 2024-04-03 04:12:35.246+0000 - 8.000KiB + [neo4j/fefd0874] neostore.relationshiptypestore.db.names.id: 2024-04-03 13:47:51.183+0000 - 40.00KiB + [neo4j/fefd0874] neostore.schemastore.db: 2024-04-03 04:12:36.054+0000 - 8.000KiB + [neo4j/fefd0874] neostore.schemastore.db.id: 2024-04-03 13:47:51.230+0000 - 40.00KiB + [neo4j/fefd0874] schema: + [neo4j/fefd0874] index: + [neo4j/fefd0874] token-lookup-1.0: + [neo4j/fefd0874] 1: + [neo4j/fefd0874] index-1: 2024-04-03 05:20:13.821+0000 - 48.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.459+0000 - 48.00KiB + [neo4j/fefd0874] 2: + [neo4j/fefd0874] index-2: 2024-04-03 05:20:13.832+0000 - 40.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.390+0000 - 40.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.459+0000 - 88.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.390+0000 - 88.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.390+0000 - 88.00KiB + [neo4j/fefd0874] Storage summary: + [neo4j/fefd0874] Total size of store: 913.7KiB + [neo4j/fefd0874] Total size of mapped files: 200.0KiB + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Transaction log ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] Transaction log files stored on file store: apfs + [neo4j/fefd0874] Transaction log metadata: + [neo4j/fefd0874] - current kernel version used in transactions: V5_15 + [neo4j/fefd0874] - last committed transaction id: 27 + [neo4j/fefd0874] Transaction log files: + [neo4j/fefd0874] - existing transaction log versions: 0-0 + [neo4j/fefd0874] - oldest transaction 2 found in log with version 0 + [neo4j/fefd0874] - files: (filename : creation date - size) + [neo4j/fefd0874] neostore.transaction.db.0: 2024-04-03 04:12:35.000+0000 - 35.60KiB + [neo4j/fefd0874] - total size of files: 35.60KiB + [neo4j/fefd0874] Checkpoint log files: + [neo4j/fefd0874] - existing checkpoint log versions: 0-0 + [neo4j/fefd0874] - last checkpoint: CheckpointInfo[transactionLogPosition=LogPosition{logVersion=0, byteOffset=36450}, storeId=StoreId{creationTime=1712117555300, random=260265064831090288, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1}, checkpointEntryPosition=LogPosition{logVersion=0, byteOffset=1288}, channelPositionAfterCheckpoint=LogPosition{logVersion=0, byteOffset=1520}, checkpointFilePostReadPosition=LogPosition{logVersion=0, byteOffset=1520}, kernelVersion=KernelVersion{V5_15,version=14}, kernelVersionByte=14, transactionId=TransactionId[transactionId=27, checksum=1878242770, commitTimestamp=1712119985140, consensusIndex=-1], reason=Checkpoint triggered by "Scheduled checkpoint for every 15 minutes threshold" @ txId: 27, consensusIndexInCheckpoint=true] + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Id usage ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] ArrayPropertyStore[neostore.nodestore.db.labels]: used=1 high=0 + [neo4j/fefd0874] NodeStore[neostore.nodestore.db]: used=206 high=205 + [neo4j/fefd0874] StringPropertyStore[neostore.propertystore.db.index.keys]: used=23 high=22 + [neo4j/fefd0874] PropertyIndexStore[neostore.propertystore.db.index]: used=13 high=12 + [neo4j/fefd0874] StringPropertyStore[neostore.propertystore.db.strings]: used=1 high=0 + [neo4j/fefd0874] ArrayPropertyStore[neostore.propertystore.db.arrays]: used=1 high=0 + [neo4j/fefd0874] PropertyStore[neostore.propertystore.db]: used=214 high=213 + [neo4j/fefd0874] RelationshipStore[neostore.relationshipstore.db]: used=0 high=-1 + [neo4j/fefd0874] StringPropertyStore[neostore.relationshiptypestore.db.names]: used=1 high=0 + [neo4j/fefd0874] RelationshipTypeStore[neostore.relationshiptypestore.db]: used=0 high=-1 + [neo4j/fefd0874] StringPropertyStore[neostore.labeltokenstore.db.names]: used=8 high=7 + [neo4j/fefd0874] LabelTokenStore[neostore.labeltokenstore.db]: used=7 high=6 + [neo4j/fefd0874] SchemaStore[neostore.schemastore.db]: used=3 high=2 + [neo4j/fefd0874] RelationshipGroupStore[neostore.relationshipgroupstore.db]: used=1 high=0 + [neo4j/fefd0874] NeoStore[neostore]: used=-1 high=-1 + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Metadata ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] EXTERNAL_STORE_UUID (Database identifier exposed as external store identity. Generated on creation and never updated): 485f4e4f-d438-40c9-a4ed-0bc1099d976f + [neo4j/fefd0874] DATABASE_ID (The last used DatabaseId for this database): null + [neo4j/fefd0874] LEGACY_STORE_VERSION (Legacy store format version. This field is used from 5.0 onwards only to distinguish non-migrated pre 5.0 metadata stores.): -3523014627327384477 + [neo4j/fefd0874] STORE_ID (Store ID): StoreId{creationTime=1712117555300, random=260265064831090288, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1} + [neo4j/fefd0874] +2024-04-03 13:47:51.325+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job registered: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 13:47:51.325+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job started: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 13:47:51.326+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job finished: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 13:47:51.326+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job closed: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 13:47:51.352+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job registered: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 13:47:51.352+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.init: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 48ms +2024-04-03 13:47:51.352+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job started: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 13:47:51.353+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job finished: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 Number of pages visited: 2, Number of tree nodes: 1, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 13:47:51.353+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job closed: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 13:47:51.354+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] Requirement `Database unavailable` makes database neo4j unavailable. +2024-04-03 13:47:51.354+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] DatabaseId{fefd0874[neo4j]} is unavailable. +2024-04-03 13:47:51.362+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/neo4j/neostore.transaction.db.0] at version=0 +2024-04-03 13:47:51.363+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/neo4j/checkpoint.0] at version=0 +2024-04-03 13:47:51.365+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [neo4j/fefd0874] Scanning log file with version 0 for checkpoint entries +2024-04-03 13:47:51.366+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.start: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 0ms +2024-04-03 13:47:51.367+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] Fulfilling of requirement 'Database unavailable' makes database neo4j available. +2024-04-03 13:47:51.367+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] DatabaseId{fefd0874[neo4j]} is ready. +2024-04-03 13:47:51.411+0000 INFO [o.n.b.p.c.c.n.SocketNettyConnector] Bolt enabled on localhost:9999. +2024-04-03 13:47:51.412+0000 INFO [o.n.b.BoltServer] Bolt server started +2024-04-03 13:47:51.414+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] id: 266B93A8C1445AE734BA77BB99FDF56964B6082641ED1A3E87435C6A5111E836 +2024-04-03 13:47:51.414+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] name: system +2024-04-03 13:47:51.415+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] creationDate: 2024-04-03T04:12:32.66Z +2024-04-03 14:05:58.698+0000 INFO [o.n.g.f.m.GlobalModule] Logging config in use: Embedded default config 'default-server-logs.xml' +2024-04-03 14:05:58.864+0000 WARN [o.n.k.i.JvmChecker] The max heap memory has not been configured. It is recommended that it is always explicitly configured, to ensure the system has a balanced configuration. Until then, a JVM computed heuristic of 4294967296 bytes is used instead. If you are running neo4j server, you need to configure server.memory.heap.max_size in neo4j.conf. If you are running neo4j embedded, you have to launch the JVM with -Xmx set to a value. You can run neo4j-admin server memory-recommendation for memory configuration suggestions. +2024-04-03 14:05:58.865+0000 WARN [o.n.k.i.JvmChecker] The initial heap memory has not been configured. It is recommended that it is always explicitly configured, to ensure the system has a balanced configuration. Until then, a JVM computed heuristic of 268435456 bytes is used instead. If you are running neo4j server, you need to configure server.memory.heap.initial_size in neo4j.conf. If you are running neo4j embedded, you have to launch the JVM with -Xms set to a value. You can run neo4j-admin server memory-recommendation for memory configuration suggestions. +2024-04-03 14:05:58.902+0000 WARN [o.n.i.p.PageCache] The server.memory.pagecache.size setting has not been configured. It is recommended that this setting is always explicitly configured, to ensure the system has a balanced configuration. Until then, a computed heuristic value of 6442450944 bytes will be used instead. Run `neo4j-admin memory-recommendation` for memory configuration suggestions. +2024-04-03 14:05:58.902+0000 WARN [o.n.i.p.PageCache] Reflection access to java.nio.DirectByteBuffer is not available, using fallback mode. This could have negative impact on performance and memory usage. Consider adding --add-opens=java.base/java.nio=ALL-UNNAMED to VM options. +2024-04-03 14:05:59.150+0000 INFO [o.n.i.d.DiagnosticsManager] + ******************************************************************************** + [ System diagnostics ] + ******************************************************************************** + -------------------------------------------------------------------------------- + [ System memory information ] + -------------------------------------------------------------------------------- + Total Physical memory: 16.00GiB + Free Physical memory: 48.68MiB + Committed virtual memory: 38.29GiB + Total swap space: 2.000GiB + Free swap space: 1.275GiB + + -------------------------------------------------------------------------------- + [ JVM memory information ] + -------------------------------------------------------------------------------- + Free memory: 148.9MiB + Total memory: 260.0MiB + Max memory: 4.000GiB + Garbage Collector: G1 Young Generation: [G1 Eden Space, G1 Survivor Space, G1 Old Gen] + Garbage Collector: G1 Old Generation: [G1 Eden Space, G1 Survivor Space, G1 Old Gen] + Memory Pool: CodeHeap 'non-nmethods' (Non-heap memory): committed=2.438MiB, used=1.208MiB, max=5.570MiB, threshold=0B + Memory Pool: Metaspace (Non-heap memory): committed=20.13MiB, used=19.77MiB, max=-1B, threshold=0B + Memory Pool: CodeHeap 'profiled nmethods' (Non-heap memory): committed=4.063MiB, used=4.058MiB, max=117.2MiB, threshold=0B + Memory Pool: Compressed Class Space (Non-heap memory): committed=2.313MiB, used=2.121MiB, max=1.000GiB, threshold=0B + Memory Pool: G1 Eden Space (Heap memory): committed=156.0MiB, used=82.00MiB, max=-1B, threshold=? + Memory Pool: G1 Old Gen (Heap memory): committed=100.0MiB, used=22.69MiB, max=4.000GiB, threshold=0B + Memory Pool: G1 Survivor Space (Heap memory): committed=4.000MiB, used=3.402MiB, max=-1B, threshold=? + Memory Pool: CodeHeap 'non-profiled nmethods' (Non-heap memory): committed=2.438MiB, used=1009KiB, max=117.2MiB, threshold=0B + + -------------------------------------------------------------------------------- + [ Operating system information ] + -------------------------------------------------------------------------------- + Operating System: Mac OS X; version: 12.7.4; arch: x86_64; cpus: 8 + Max number of file descriptors: 10240 + Number of open file descriptors: 226 + Process id: 69507 + Byte order: LITTLE_ENDIAN + Local timezone: America/New_York + Memory page size: 4096 + Unaligned memory access allowed: true + + -------------------------------------------------------------------------------- + [ JVM information ] + -------------------------------------------------------------------------------- + VM Name: Java HotSpot(TM) 64-Bit Server VM + VM Vendor: Oracle Corporation + VM Version: 17.0.2+8-LTS-86 + JIT compiler: HotSpot 64-Bit Tiered Compilers + VM Arguments: [-Dvisualvm.id=82051882387726, -javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=58207:/Applications/IntelliJ IDEA.app/Contents/bin, -Dfile.encoding=UTF-8] + + -------------------------------------------------------------------------------- + [ Java classpath ] + -------------------------------------------------------------------------------- + [classpath] /Users/jnr6/.m2/repository/it/unimi/dsi/fastutil/8.5.13/fastutil-8.5.13.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-codec-http/4.1.101.Final/netty-codec-http-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/scala-library/2.13.11/scala-library-2.13.11.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-command-line/5.16.0/neo4j-command-line-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-epoll/4.1.101.Final/netty-transport-native-epoll-4.1.101.Final-linux-x86_64.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-common/4.1.101.Final/netty-common-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.16.0/jackson-databind-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-consistency-check/5.16.0/neo4j-consistency-check-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-values/5.16.0/neo4j-values-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-dbms/5.16.0/neo4j-dbms-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-analysis/9.6/asm-analysis-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-planner/5.16.0/neo4j-cypher-planner-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/antlr/antlr4-runtime/4.8/antlr4-runtime-4.8.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-api/3.2.13/docker-java-api-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/activation/jakarta.activation-api/1.2.1/jakarta.activation-api-1.2.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-planner-spi/5.16.0/neo4j-cypher-planner-spi-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-resource/5.16.0/neo4j-resource-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-servlet/10.0.17/jetty-servlet-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-cache/1.13.0/shiro-cache-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-javacc-parser/5.16.0/neo4j-cypher-javacc-parser-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/sun/istack/istack-commons-runtime/3.0.8/istack-commons-runtime-3.0.8.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-configuration2/2.9.0/commons-configuration2-2.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-compress/1.21/commons-compress-1.21.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/containers/jersey-container-servlet/2.34/jersey-container-servlet-2.34.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-kqueue/4.1.101.Final/netty-transport-native-kqueue-4.1.101.Final-osx-aarch_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-concurrent/5.16.0/neo4j-concurrent-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/mysql/1.17.4/mysql-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/mockito/mockito-core/5.7.0/mockito-core-5.7.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher/5.16.0/neo4j-cypher-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-capabilities/5.16.0/neo4j-capabilities-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-notifications/5.16.0/neo4j-notifications-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-import-util/5.16.0/neo4j-import-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-config/5.16.0/neo4j-cypher-config-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/containers/jersey-container-servlet-core/2.34/jersey-container-servlet-core-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-io/5.16.0/neo4j-io-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-locator/2.6.1/hk2-locator-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-lang3/3.13.0/commons-lang3-3.13.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.16.0/jackson-core-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/mysql/mysql-connector-j/8.2.0/mysql-connector-j-8.2.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-classes-epoll/4.1.101.Final/netty-transport-classes-epoll-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/objenesis/objenesis/3.3/objenesis-3.3.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-server/2.34/jersey-server-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-client/2.34/jersey-client-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-ast-factory/5.16.0/neo4j-cypher-ast-factory-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-handler/4.1.101.Final/netty-handler-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j/5.16.0/neo4j-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/google/code/gson/gson/2.9.0/gson-2.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-logging/5.16.0/neo4j-logging-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-webapp/10.0.17/jetty-webapp-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-core/9.8.0/lucene-core-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-kernel-api/5.16.0/neo4j-kernel-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcutil-jdk18on/1.76/bcutil-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/bitbucket/inkytonik/kiama/kiama_2.13/2.5.1/kiama_2.13-2.5.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-common/5.16.0/neo4j-common-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/junit/junit/4.13.2/junit-4.13.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-index/5.16.0/neo4j-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport/4.1.101.Final/netty-transport-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-util/9.6/asm-util-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/jctools/jctools-core/4.0.2/jctools-core-4.0.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-graphdb-api/5.16.0/neo4j-graphdb-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/jdbc/1.17.4/jdbc-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-runtime-util/5.16.0/neo4j-cypher-runtime-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/collections/eclipse-collections-api/11.1.0/eclipse-collections-api-11.1.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-unsafe/5.16.0/neo4j-unsafe-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-server/10.0.17/jetty-server-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcprov-jdk18on/1.76/bcprov-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-slotted-runtime/5.16.0/neo4j-cypher-slotted-runtime-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-layout-template-json/2.20.0/log4j-layout-template-json-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-fulltext-index/5.16.0/neo4j-fulltext-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/net/java/dev/jna/jna/5.8.0/jna-5.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-util/10.0.17/jetty-util-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-expressions/5.16.0/neo4j-expressions-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-transport/3.2.13/docker-java-transport-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/commons-logging/commons-logging/1.2/commons-logging-1.2.jar + [classpath] /Users/jnr6/IdeaProjects/policy-machine-core/target/classes + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-testkit/1.10.0/junit-platform-testkit-1.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-core/1.13.0/shiro-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-physical-planning/5.16.0/neo4j-cypher-physical-planning-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-storage-engine-util/5.16.0/neo4j-storage-engine-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-ast/5.16.0/neo4j-ast-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-core/2.20.0/log4j-core-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-params/5.9.0/junit-jupiter-params-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/external/jakarta.inject/2.6.1/jakarta.inject-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/inject/jersey-hk2/2.34/jersey-hk2-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/hamcrest/hamcrest/2.2/hamcrest-2.2.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jaxb/jaxb-runtime/2.3.2/jaxb-runtime-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-logical-plans/5.16.0/neo4j-cypher-logical-plans-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-xml/10.0.17/jetty-xml-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar + [classpath] /Users/jnr6/.m2/repository/org/codehaus/jettison/jettison/1.5.4/jettison-1.5.4.jar + [classpath] /Users/jnr6/.m2/repository/com/propensive/mercator_2.13/0.2.1/mercator_2.13-0.2.1.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jaxb/txw2/2.3.2/txw2-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-resolver/4.1.101.Final/netty-resolver-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar + [classpath] /Users/jnr6/.m2/repository/org/awaitility/awaitility/4.2.0/awaitility-4.2.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-codec/4.1.101.Final/netty-codec-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-buffer/4.1.101.Final/netty-buffer-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-hash/1.13.0/shiro-crypto-hash-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/info/picocli/picocli/4.7.5/picocli-4.7.5.jar + [classpath] /Users/jnr6/.m2/repository/com/profesorfalken/jPowerShell/3.0/jPowerShell-3.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-cipher/1.13.0/shiro-crypto-cipher-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-lang/1.13.0/shiro-lang-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-token-api/5.16.0/neo4j-token-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-bolt/5.16.0/neo4j-bolt-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-record-storage-engine/5.16.0/neo4j-record-storage-engine-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-epoll/4.1.101.Final/netty-transport-native-epoll-4.1.101.Final-linux-aarch_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-ir/5.16.0/neo4j-cypher-ir-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/test-utils/5.15.0/test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter/5.10.0/junit-jupiter-5.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/app/neo4j-server-test-utils/5.15.0/neo4j-server-test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/rnorth/duct-tape/duct-tape/1.0.8/duct-tape-1.0.8.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/modules/scala-collection-contrib_2.13/0.3.0/scala-collection-contrib_2.13-0.3.0.jar + [classpath] /Users/jnr6/.m2/repository/org/slf4j/slf4j-api/2.0.0/slf4j-api-2.0.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-analysis-common/9.8.0/lucene-analysis-common-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/com/propensive/magnolia_2.13/0.17.0/magnolia_2.13-0.17.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-event/1.13.0/shiro-event-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-api/2.20.0/log4j-api-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-classes-kqueue/4.1.101.Final/netty-transport-classes-kqueue-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/net/bytebuddy/byte-buddy-agent/1.14.9/byte-buddy-agent-1.14.9.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/validation/jakarta.validation-api/2.0.2/jakarta.validation-api-2.0.2.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/database-commons/1.17.4/database-commons-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-front-end/5.16.0/neo4j-front-end-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-procedure/5.16.0/neo4j-procedure-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-import-tool/5.16.0/neo4j-import-tool-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/ws/rs/jakarta.ws.rs-api/2.1.6/jakarta.ws.rs-api-2.1.6.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.10.3/jackson-annotations-2.10.3.jar + [classpath] /Users/jnr6/.m2/repository/com/google/protobuf/protobuf-java/3.21.9/protobuf-java-3.21.9.jar + [classpath] /Users/jnr6/.m2/repository/io/projectreactor/reactor-core/3.6.0/reactor-core-3.6.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-wal/5.16.0/neo4j-wal-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-ssl/5.16.0/neo4j-ssl-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-unix-common/4.1.101.Final/netty-transport-native-unix-common-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-config-core/1.13.0/shiro-config-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-codegen/5.16.0/neo4j-codegen-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-tree/9.6/asm-tree-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-rewriting/5.16.0/neo4j-rewriting-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-backward-codecs/9.8.0/lucene-backward-codecs-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-lock/5.16.0/neo4j-lock-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-schema/5.16.0/neo4j-schema-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/collections/eclipse-collections/11.1.0/eclipse-collections-11.1.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/luben/zstd-jni/1.5.5-10/zstd-jni-1.5.5-10.jar + [classpath] /Users/jnr6/.m2/repository/commons-codec/commons-codec/1.16.0/commons-codec-1.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/jaxrs/jackson-jaxrs-json-provider/2.16.0/jackson-jaxrs-json-provider-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-expression-evaluator/5.16.0/neo4j-cypher-expression-evaluator-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/testcontainers/1.17.4/testcontainers-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/test/neo4j-harness/5.15.0/neo4j-harness-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/javassist/javassist/3.25.0-GA/javassist-3.25.0-GA.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-core/1.13.0/shiro-crypto-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-commons/1.9.0/junit-platform-commons-1.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-utils/2.6.1/hk2-utils-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/io-test-utils/5.15.0/io-test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/annotations/5.16.0/annotations-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-interpreted-runtime/5.16.0/neo4j-cypher-interpreted-runtime-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-cache/5.16.0/neo4j-cypher-cache-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jetbrains/annotations/17.0.0/annotations-17.0.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-layout/5.16.0/neo4j-layout-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/reactivestreams/reactive-streams/1.0.4/reactive-streams-1.0.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/licensing-proxy/zstd-proxy/5.16.0/zstd-proxy-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-security/5.16.0/neo4j-security-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-common/2.34/jersey-common-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/scala-reflect/2.13.11/scala-reflect-2.13.11.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/junit-jupiter/1.17.4/junit-jupiter-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-random-values/5.15.0/neo4j-random-values-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-transport-zerodep/3.2.13/docker-java-transport-zerodep-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-diagnostics/5.16.0/neo4j-diagnostics-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-http/10.0.17/jetty-http-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/cypher-ast-factory/5.16.0/cypher-ast-factory-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-configuration/5.16.0/neo4j-configuration-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-exceptions/5.16.0/neo4j-exceptions-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-util/5.16.0/neo4j-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-id-generator/5.16.0/neo4j-id-generator-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/seancfoley/ipaddress/5.4.0/ipaddress-5.4.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-io/10.0.17/jetty-io-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/commons-io/commons-io/2.11.0/commons-io-2.11.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-queryparser/9.8.0/lucene-queryparser-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/xml/bind/jakarta.xml.bind-api/2.3.2/jakarta.xml.bind-api-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-kernel/5.16.0/neo4j-kernel-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-fabric/5.16.0/neo4j-fabric-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-spatial-index/5.16.0/neo4j-spatial-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-procedure-api/5.16.0/neo4j-procedure-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/sun/xml/fastinfoset/FastInfoset/1.2.16/FastInfoset-1.2.16.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-lucene-index/5.16.0/neo4j-lucene-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/net/bytebuddy/byte-buddy/1.14.9/byte-buddy-1.14.9.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-query-router/5.16.0/neo4j-query-router-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-csv/5.16.0/neo4j-csv-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/toolchain/jetty-servlet-api/4.0.6/jetty-servlet-api-4.0.6.jar + [classpath] /Users/jnr6/IdeaProjects/policy-machine-core/target/test-classes + [classpath] /Users/jnr6/.m2/repository/com/github/ben-manes/caffeine/caffeine/3.1.8/caffeine-3.1.8.jar + [classpath] /Users/jnr6/.m2/repository/com/profesorfalken/WMI4Java/1.6.3/WMI4Java-1.6.3.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/vintage/junit-vintage-engine/5.10.0/junit-vintage-engine-5.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-collections/5.16.0/neo4j-collections-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/assertj/assertj-core/3.24.2/assertj-core-3.24.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-graph-algo/5.16.0/neo4j-graph-algo-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.9.0/junit-jupiter-engine-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jvnet/staxex/stax-ex/1.8.1/stax-ex-1.8.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/app/neo4j-server/5.16.0/neo4j-server-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-monitoring/5.16.0/neo4j-monitoring-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-macros/5.16.0/neo4j-cypher-macros-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jprocesses/jProcesses/1.6.5/jProcesses-1.6.5.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-api/2.6.1/hk2-api-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.9.0/junit-jupiter-api-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-security/10.0.17/jetty-security-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcpkix-jdk18on/1.76/bcpkix-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-engine/1.9.0/junit-platform-engine-1.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-slf4j-provider/5.16.0/neo4j-slf4j-provider-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-kqueue/4.1.101.Final/netty-transport-native-kqueue-4.1.101.Final-osx-x86_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-data-collector/5.16.0/neo4j-data-collector-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/server-api/5.16.0/server-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-native/5.16.0/neo4j-native-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/module/jackson-module-jaxb-annotations/2.16.0/jackson-module-jaxb-annotations-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm/9.6/asm-9.6.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/jaxrs/jackson-jaxrs-base/2.16.0/jackson-jaxrs-base-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar + + -------------------------------------------------------------------------------- + [ Library path ] + -------------------------------------------------------------------------------- + /Users/jnr6/Library/Java/Extensions + /Library/Java/Extensions + /Network/Library/Java/Extensions + /System/Library/Java/Extensions + /usr/lib/java + /Users/jnr6/IdeaProjects/policy-machine-core + + -------------------------------------------------------------------------------- + [ System properties ] + -------------------------------------------------------------------------------- + sun.jnu.encoding = UTF-8 + sun.arch.data.model = 64 + user.timezone = America/New_York + visualvm.id = 82051882387726 + sun.java.launcher = SUN_STANDARD + user.country = US + sun.boot.library.path = /Library/Java/JavaVirtualMachines/jdk-17.0.2.jdk/Contents/Home/lib + sun.java.command = gov.nist.csd.pm.pap.neo4j.ImportTest + jdk.debug = release + sun.cpu.endian = little + user.home = /Users/jnr6 + user.language = en + file.separator = / + sun.management.compiler = HotSpot 64-Bit Tiered Compilers + user.name = jnr6 + path.separator = : + file.encoding = UTF-8 + jnidispatch.path = /Users/jnr6/Library/Caches/JNA/temp/jna12907876084920120300.tmp + jna.loaded = true + user.dir = /Users/jnr6/IdeaProjects/policy-machine-core + native.encoding = UTF-8 + sun.io.unicode.encoding = UnicodeBig + + -------------------------------------------------------------------------------- + [ (IANA) TimeZone database version ] + -------------------------------------------------------------------------------- + TimeZone version: 2021e (available for 601 zone identifiers) + + -------------------------------------------------------------------------------- + [ Network information ] + -------------------------------------------------------------------------------- + Interface utun2: + address: fe80:0:0:0:ce81:b1c:bd2c:69e%utun2 + Interface utun1: + address: fe80:0:0:0:bbf5:1c30:4238:57b2%utun1 + Interface utun0: + address: fe80:0:0:0:73be:4eb:3f31:a891%utun0 + Interface llw0: + address: fe80:0:0:0:c0a6:71ff:fe04:534c%llw0 + Interface awdl0: + address: fe80:0:0:0:c0a6:71ff:fe04:534c%awdl0 + Interface utun3: + address: 2610:20:6005:152:0:0:0:136%utun3 + address: fe80:0:0:0:aebc:32ff:fe94:d383%utun3 + address: 129.6.109.119 + Interface en0: + address: 192.168.1.247 + Interface lo0: + address: fe80:0:0:0:0:0:0:1%lo0 + address: 0:0:0:0:0:0:0:1%lo0 + address: 127.0.0.1 + + -------------------------------------------------------------------------------- + [ Native access information ] + -------------------------------------------------------------------------------- + Native access details: Native access is not available for current platform. + + -------------------------------------------------------------------------------- + [ DBMS config ] + -------------------------------------------------------------------------------- + DBMS provided settings: + server.bolt.enabled=true + server.bolt.listen_address=localhost:9999 + server.directories.neo4j_home=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + Directories in use: + server.directories.data=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data + server.directories.dumps.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/dumps + server.directories.import=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + server.directories.lib=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/lib + server.directories.licenses=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/licenses + server.directories.logs=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/logs + server.directories.neo4j_home=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + server.directories.plugins=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/plugins + server.directories.run=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/run + server.directories.script.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/scripts + server.directories.transaction.logs.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions + + -------------------------------------------------------------------------------- + [ Packaging ] + -------------------------------------------------------------------------------- + Could not read packaging info: java.nio.file.NoSuchFileException: /Users/jnr6/IdeaProjects/policy-machine-core/testdb/packaging_info + +2024-04-03 14:05:59.290+0000 INFO [o.n.d.i.DefaultIdentityModule] Found ServerId on disk: ServerId{54490f53} (54490f53-4b94-4d0f-9604-023c3fe1be5e) +2024-04-03 14:05:59.291+0000 INFO [o.n.d.i.DefaultIdentityModule] This instance is ServerId{54490f53} (54490f53-4b94-4d0f-9604-023c3fe1be5e) +2024-04-03 14:06:00.213+0000 INFO [o.n.d.d.DatabaseLifecycles] Creating 'DatabaseId{00000000[system]}'. +2024-04-03 14:06:00.422+0000 INFO [o.n.b.BoltServer] Using connector transport KQueue +2024-04-03 14:06:00.517+0000 INFO [o.n.b.BoltServer] Configured external Bolt connector with listener address localhost/127.0.0.1:9999 +2024-04-03 14:06:00.517+0000 INFO [o.n.b.BoltServer] Bolt server loaded +2024-04-03 14:06:00.532+0000 INFO [o.n.d.d.DatabaseLifecycles] Starting 'DatabaseId{00000000[system]}'. +2024-04-03 14:06:00.816+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [system/00000000] Scanning log file with version 0 for checkpoint entries +2024-04-03 14:06:00.878+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [system/00000000] Selected RecordFormat:PageAlignedV5_0[aligned-1.1] record format from store /Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system +2024-04-03 14:06:00.878+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [system/00000000] Selected format from the store files: RecordFormat:PageAlignedV5_0[aligned-1.1] +2024-04-03 14:06:01.561+0000 INFO [o.n.i.d.DiagnosticsManager] [system/00000000] + [system/00000000] ******************************************************************************** + [system/00000000] [ Database: system ] + [system/00000000] ******************************************************************************** + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Version ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] DBMS: community record-aligned-1.1 + [system/00000000] Kernel version: 5.16.0 + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Store files ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] Disk space on partition (Total / Free / Free %): 500068036608 / 109611720704 / 21 + [system/00000000] Storage files stored on file store: apfs + [system/00000000] Storage files: (filename : modification date - size) + [system/00000000] database_lock: 2024-04-03 04:12:32.900+0000 - 0B + [system/00000000] id-buffer.tmp.0: 2024-04-03 13:47:50.826+0000 - 0B + [system/00000000] neostore: 2024-04-03 04:12:32.662+0000 - 8.000KiB + [system/00000000] neostore.counts.db: 2024-04-03 14:06:01.350+0000 - 48.00KiB + [system/00000000] neostore.indexstats.db: 2024-04-03 14:06:01.405+0000 - 48.00KiB + [system/00000000] neostore.labeltokenstore.db: 2024-04-03 04:12:39.430+0000 - 8.000KiB + [system/00000000] neostore.labeltokenstore.db.id: 2024-04-03 14:06:01.265+0000 - 40.00KiB + [system/00000000] neostore.labeltokenstore.db.names: 2024-04-03 04:12:39.454+0000 - 8.000KiB + [system/00000000] neostore.labeltokenstore.db.names.id: 2024-04-03 14:06:01.244+0000 - 40.00KiB + [system/00000000] neostore.nodestore.db: 2024-04-03 04:12:39.416+0000 - 8.000KiB + [system/00000000] neostore.nodestore.db.id: 2024-04-03 14:06:01.068+0000 - 40.00KiB + [system/00000000] neostore.nodestore.db.labels: 2024-04-03 04:12:32.509+0000 - 8.000KiB + [system/00000000] neostore.nodestore.db.labels.id: 2024-04-03 14:06:01.039+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db: 2024-04-03 04:12:39.442+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.arrays: 2024-04-03 04:12:32.565+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.arrays.id: 2024-04-03 14:06:01.150+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.id: 2024-04-03 14:06:01.172+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.index: 2024-04-03 04:12:39.477+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.index.id: 2024-04-03 14:06:01.109+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.index.keys: 2024-04-03 04:12:39.464+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.index.keys.id: 2024-04-03 14:06:01.085+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.strings: 2024-04-03 04:12:39.367+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.strings.id: 2024-04-03 14:06:01.126+0000 - 40.00KiB + [system/00000000] neostore.relationshipgroupstore.db: 2024-04-03 04:12:32.640+0000 - 8.000KiB + [system/00000000] neostore.relationshipgroupstore.db.id: 2024-04-03 14:06:01.302+0000 - 40.00KiB + [system/00000000] neostore.relationshipgroupstore.degrees.db: 2024-04-03 14:06:01.380+0000 - 40.00KiB + [system/00000000] neostore.relationshipstore.db: 2024-04-03 04:12:39.378+0000 - 8.000KiB + [system/00000000] neostore.relationshipstore.db.id: 2024-04-03 14:06:01.189+0000 - 40.00KiB + [system/00000000] neostore.relationshiptypestore.db: 2024-04-03 04:12:39.405+0000 - 8.000KiB + [system/00000000] neostore.relationshiptypestore.db.id: 2024-04-03 14:06:01.228+0000 - 40.00KiB + [system/00000000] neostore.relationshiptypestore.db.names: 2024-04-03 04:12:39.392+0000 - 8.000KiB + [system/00000000] neostore.relationshiptypestore.db.names.id: 2024-04-03 14:06:01.206+0000 - 40.00KiB + [system/00000000] neostore.schemastore.db: 2024-04-03 04:12:39.490+0000 - 8.000KiB + [system/00000000] neostore.schemastore.db.id: 2024-04-03 14:06:01.283+0000 - 40.00KiB + [system/00000000] schema: + [system/00000000] index: + [system/00000000] range-1.0: + [system/00000000] 3: + [system/00000000] index-3: 2024-04-03 13:47:50.740+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.321+0000 - 48.00KiB + [system/00000000] 4: + [system/00000000] index-4: 2024-04-03 13:47:50.762+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.437+0000 - 48.00KiB + [system/00000000] 7: + [system/00000000] index-7: 2024-04-03 13:47:50.784+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.907+0000 - 48.00KiB + [system/00000000] 8: + [system/00000000] index-8: 2024-04-03 13:47:50.810+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.997+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.996+0000 - 192.0KiB + [system/00000000] token-lookup-1.0: + [system/00000000] 1: + [system/00000000] index-1: 2024-04-03 13:47:50.681+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:33.516+0000 - 48.00KiB + [system/00000000] 2: + [system/00000000] index-2: 2024-04-03 13:47:50.706+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:33.409+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:33.515+0000 - 96.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.321+0000 - 288.0KiB + [system/00000000] - Total: 2024-04-03 04:12:33.407+0000 - 288.0KiB + [system/00000000] Storage summary: + [system/00000000] Total size of store: 1.078MiB + [system/00000000] Total size of mapped files: 408.0KiB + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Transaction log ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] Transaction log files stored on file store: apfs + [system/00000000] Transaction log metadata: + [system/00000000] - current kernel version used in transactions: V5_15 + [system/00000000] - last committed transaction id: 37 + [system/00000000] Transaction log files: + [system/00000000] - existing transaction log versions: 0-0 + [system/00000000] - oldest transaction 2 found in log with version 0 + [system/00000000] - files: (filename : creation date - size) + [system/00000000] neostore.transaction.db.0: 2024-04-03 04:12:32.000+0000 - 19.26KiB + [system/00000000] - total size of files: 19.26KiB + [system/00000000] Checkpoint log files: + [system/00000000] - existing checkpoint log versions: 0-0 + [system/00000000] - last checkpoint: CheckpointInfo[transactionLogPosition=LogPosition{logVersion=0, byteOffset=19725}, storeId=StoreId{creationTime=1712117552660, random=4552926301767966796, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1}, checkpointEntryPosition=LogPosition{logVersion=0, byteOffset=360}, channelPositionAfterCheckpoint=LogPosition{logVersion=0, byteOffset=592}, checkpointFilePostReadPosition=LogPosition{logVersion=0, byteOffset=592}, kernelVersion=KernelVersion{V5_15,version=14}, kernelVersionByte=14, transactionId=TransactionId[transactionId=37, checksum=-1026009811, commitTimestamp=1712117555154, consensusIndex=-1], reason=Checkpoint triggered by "Database shutdown" @ txId: 37, consensusIndexInCheckpoint=true] + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Id usage ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] ArrayPropertyStore[neostore.nodestore.db.labels]: used=1 high=0 + [system/00000000] NodeStore[neostore.nodestore.db]: used=6 high=5 + [system/00000000] StringPropertyStore[neostore.propertystore.db.index.keys]: used=44 high=43 + [system/00000000] PropertyIndexStore[neostore.propertystore.db.index]: used=31 high=30 + [system/00000000] StringPropertyStore[neostore.propertystore.db.strings]: used=3 high=2 + [system/00000000] ArrayPropertyStore[neostore.propertystore.db.arrays]: used=1 high=0 + [system/00000000] PropertyStore[neostore.propertystore.db]: used=59 high=58 + [system/00000000] RelationshipStore[neostore.relationshipstore.db]: used=2 high=1 + [system/00000000] StringPropertyStore[neostore.relationshiptypestore.db.names]: used=2 high=1 + [system/00000000] RelationshipTypeStore[neostore.relationshiptypestore.db]: used=1 high=0 + [system/00000000] StringPropertyStore[neostore.labeltokenstore.db.names]: used=5 high=4 + [system/00000000] LabelTokenStore[neostore.labeltokenstore.db]: used=4 high=3 + [system/00000000] SchemaStore[neostore.schemastore.db]: used=11 high=10 + [system/00000000] RelationshipGroupStore[neostore.relationshipgroupstore.db]: used=1 high=0 + [system/00000000] NeoStore[neostore]: used=-1 high=-1 + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Metadata ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] EXTERNAL_STORE_UUID (Database identifier exposed as external store identity. Generated on creation and never updated): 8e4fd9af-0e04-47d8-a19c-cdb72dbda752 + [system/00000000] DATABASE_ID (The last used DatabaseId for this database): null + [system/00000000] LEGACY_STORE_VERSION (Legacy store format version. This field is used from 5.0 onwards only to distinguish non-migrated pre 5.0 metadata stores.): -3523014627327384477 + [system/00000000] STORE_ID (Store ID): StoreId{creationTime=1712117552660, random=4552926301767966796, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1} + [system/00000000] +2024-04-03 14:06:01.753+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:06:01.754+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:06:01.755+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:06:01.756+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:06:01.783+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:06:01.784+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:06:01.785+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:06:01.785+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:06:01.823+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 +2024-04-03 14:06:01.823+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 +2024-04-03 14:06:01.824+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:06:01.825+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 +2024-04-03 14:06:01.849+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 +2024-04-03 14:06:01.850+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 +2024-04-03 14:06:01.851+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:06:01.851+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 +2024-04-03 14:06:01.872+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 +2024-04-03 14:06:01.873+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 +2024-04-03 14:06:01.874+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 1ms +2024-04-03 14:06:01.875+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 +2024-04-03 14:06:01.899+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 +2024-04-03 14:06:01.899+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 +2024-04-03 14:06:01.900+0000 INFO [o.n.k.i.a.i.IndexingService] [system/00000000] IndexingService.init: indexes not specifically mentioned above are ONLINE. Total 6 indexes. Processed in 181ms +2024-04-03 14:06:01.900+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:06:01.900+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 +2024-04-03 14:06:01.906+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] Requirement `Database unavailable` makes database system unavailable. +2024-04-03 14:06:01.907+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] DatabaseId{00000000[system]} is unavailable. +2024-04-03 14:06:01.961+0000 INFO [o.n.k.d.Database] [system/00000000] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/system/neostore.transaction.db.0] at version=0 +2024-04-03 14:06:01.965+0000 INFO [o.n.k.d.Database] [system/00000000] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/system/checkpoint.0] at version=0 +2024-04-03 14:06:01.966+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [system/00000000] Scanning log file with version 0 for checkpoint entries +2024-04-03 14:06:01.969+0000 INFO [o.n.k.i.a.i.IndexingService] [system/00000000] IndexingService.start: indexes not specifically mentioned above are ONLINE. Total 6 indexes. Processed in 0ms +2024-04-03 14:06:02.001+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] Fulfilling of requirement 'Database unavailable' makes database system available. +2024-04-03 14:06:02.002+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] DatabaseId{00000000[system]} is ready. +2024-04-03 14:06:02.119+0000 INFO [o.n.s.s.s.UserSecurityGraphComponent] Performing postInitialization step for component 'security-users' with version 4 and status CURRENT +2024-04-03 14:06:02.119+0000 INFO [o.n.s.s.s.UserSecurityGraphComponent] Updating the initial password in component 'security-users' +2024-04-03 14:06:02.133+0000 INFO [o.n.d.d.DatabaseLifecycles] Creating 'DatabaseId{fefd0874[neo4j]}'. +2024-04-03 14:06:02.136+0000 INFO [o.n.d.d.DatabaseLifecycles] Starting 'DatabaseId{fefd0874[neo4j]}'. +2024-04-03 14:06:02.155+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [neo4j/fefd0874] Scanning log file with version 0 for checkpoint entries +2024-04-03 14:06:02.190+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected RecordFormat:PageAlignedV5_0[aligned-1.1] record format from store /Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j +2024-04-03 14:06:02.190+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected format from the store files: RecordFormat:PageAlignedV5_0[aligned-1.1] +2024-04-03 14:06:02.477+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Transaction logs entries found after the last check point (which is at LogPosition{logVersion=0, byteOffset=36450}). First observed transaction id: 28. +2024-04-03 14:06:02.526+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Recovery required from position LogPosition{logVersion=0, byteOffset=36450} +2024-04-03 14:06:02.579+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] TransactionLogsRecovery +2024-04-03 14:06:02.613+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 10% completed +2024-04-03 14:06:02.627+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 20% completed +2024-04-03 14:06:02.631+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 30% completed +2024-04-03 14:06:02.632+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 40% completed +2024-04-03 14:06:02.633+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 50% completed +2024-04-03 14:06:02.662+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job registered: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:06:02.662+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job registered: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:06:02.662+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job started: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:06:02.662+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job started: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:06:02.663+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job finished: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:06:02.663+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job finished: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:06:02.664+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job closed: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:06:02.664+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job closed: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:06:02.684+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job registered: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:06:02.684+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job registered: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:06:02.684+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.init: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 49ms +2024-04-03 14:06:02.684+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job started: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:06:02.684+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job started: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:06:02.685+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job finished: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 Number of pages visited: 2, Number of tree nodes: 1, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:06:02.685+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job finished: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 Number of pages visited: 2, Number of tree nodes: 1, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:06:02.685+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job closed: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:06:02.685+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job closed: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:06:02.714+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 60% completed +2024-04-03 14:06:02.748+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 70% completed +2024-04-03 14:06:02.777+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 80% completed +2024-04-03 14:06:02.784+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 90% completed +2024-04-03 14:06:02.823+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 100% completed +2024-04-03 14:06:02.825+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Recovery in 'full' mode completed. Observed transactions range [first:28, last:33]: 6 transactions applied, 0 not completed transactions rolled back, skipped applying 0 previously rolled back transactions. Time spent: 347ms. +2024-04-03 14:06:02.827+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.start: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 0ms +2024-04-03 14:06:02.828+0000 INFO [o.n.k.i.t.l.c.CheckPointerImpl] [neo4j/fefd0874] Checkpoint triggered by "Recovery completed." @ txId: 33 checkpoint started... +2024-04-03 14:06:03.258+0000 INFO [o.n.k.i.t.l.c.CheckPointerImpl] [neo4j/fefd0874] Checkpoint triggered by "Recovery completed." @ txId: 33 checkpoint completed in 429ms. Checkpoint flushed 109 pages (0% of total available pages), in 42 IOs. Checkpoint performed with IO limit: unlimited, paused in total 0 times( 0 millis). +2024-04-03 14:06:03.261+0000 INFO [o.n.k.i.t.l.p.LogPruningImpl] [neo4j/fefd0874] No log version pruned. The strategy used was '2 days'. +2024-04-03 14:06:03.565+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [neo4j/fefd0874] Scanning log file with version 0 for checkpoint entries +2024-04-03 14:06:03.578+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected RecordFormat:PageAlignedV5_0[aligned-1.1] record format from store /Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j +2024-04-03 14:06:03.578+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected format from the store files: RecordFormat:PageAlignedV5_0[aligned-1.1] +2024-04-03 14:06:03.802+0000 INFO [o.n.i.d.DiagnosticsManager] [neo4j/fefd0874] + [neo4j/fefd0874] ******************************************************************************** + [neo4j/fefd0874] [ Database: neo4j ] + [neo4j/fefd0874] ******************************************************************************** + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Version ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] DBMS: community record-aligned-1.1 + [neo4j/fefd0874] Kernel version: 5.16.0 + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Store files ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] Disk space on partition (Total / Free / Free %): 500068036608 / 109611159552 / 21 + [neo4j/fefd0874] Storage files stored on file store: apfs + [neo4j/fefd0874] Storage files: (filename : modification date - size) + [neo4j/fefd0874] database_lock: 2024-04-03 04:12:35.327+0000 - 0B + [neo4j/fefd0874] id-buffer.tmp.0: 2024-04-03 13:47:53.370+0000 - 1.653KiB + [neo4j/fefd0874] neostore: 2024-04-03 04:12:35.301+0000 - 8.000KiB + [neo4j/fefd0874] neostore.counts.db: 2024-04-03 14:06:03.750+0000 - 48.00KiB + [neo4j/fefd0874] neostore.indexstats.db: 2024-04-03 14:06:03.775+0000 - 48.00KiB + [neo4j/fefd0874] neostore.labeltokenstore.db: 2024-04-03 04:53:01.953+0000 - 8.000KiB + [neo4j/fefd0874] neostore.labeltokenstore.db.id: 2024-04-03 14:06:03.713+0000 - 40.00KiB + [neo4j/fefd0874] neostore.labeltokenstore.db.names: 2024-04-03 04:53:01.900+0000 - 8.000KiB + [neo4j/fefd0874] neostore.labeltokenstore.db.names.id: 2024-04-03 14:06:03.701+0000 - 40.00KiB + [neo4j/fefd0874] neostore.nodestore.db: 2024-04-03 14:06:03.221+0000 - 152.0KiB + [neo4j/fefd0874] neostore.nodestore.db.id: 2024-04-03 14:06:03.595+0000 - 48.00KiB + [neo4j/fefd0874] neostore.nodestore.db.labels: 2024-04-03 04:12:35.189+0000 - 8.000KiB + [neo4j/fefd0874] neostore.nodestore.db.labels.id: 2024-04-03 14:06:03.580+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db: 2024-04-03 14:06:03.235+0000 - 408.0KiB + [neo4j/fefd0874] neostore.propertystore.db.arrays: 2024-04-03 04:12:35.234+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.arrays.id: 2024-04-03 14:06:03.642+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.id: 2024-04-03 14:06:03.654+0000 - 48.00KiB + [neo4j/fefd0874] neostore.propertystore.db.index: 2024-04-03 04:30:28.255+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.index.id: 2024-04-03 14:06:03.617+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.index.keys: 2024-04-03 04:30:28.242+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.index.keys.id: 2024-04-03 14:06:03.604+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.strings: 2024-04-03 04:12:35.222+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.strings.id: 2024-04-03 14:06:03.630+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshipgroupstore.db: 2024-04-03 04:12:35.289+0000 - 8.000KiB + [neo4j/fefd0874] neostore.relationshipgroupstore.db.id: 2024-04-03 14:06:03.738+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshipgroupstore.degrees.db: 2024-04-03 14:06:03.763+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshipstore.db: 2024-04-03 04:12:35.245+0000 - 0B + [neo4j/fefd0874] neostore.relationshipstore.db.id: 2024-04-03 14:06:03.666+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshiptypestore.db: 2024-04-03 04:12:35.259+0000 - 0B + [neo4j/fefd0874] neostore.relationshiptypestore.db.id: 2024-04-03 14:06:03.687+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshiptypestore.db.names: 2024-04-03 04:12:35.246+0000 - 8.000KiB + [neo4j/fefd0874] neostore.relationshiptypestore.db.names.id: 2024-04-03 14:06:03.678+0000 - 40.00KiB + [neo4j/fefd0874] neostore.schemastore.db: 2024-04-03 04:12:36.054+0000 - 8.000KiB + [neo4j/fefd0874] neostore.schemastore.db.id: 2024-04-03 14:06:03.725+0000 - 40.00KiB + [neo4j/fefd0874] schema: + [neo4j/fefd0874] index: + [neo4j/fefd0874] token-lookup-1.0: + [neo4j/fefd0874] 1: + [neo4j/fefd0874] index-1: 2024-04-03 14:06:03.262+0000 - 48.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.459+0000 - 48.00KiB + [neo4j/fefd0874] 2: + [neo4j/fefd0874] index-2: 2024-04-03 14:06:03.274+0000 - 40.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.390+0000 - 40.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.459+0000 - 88.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.390+0000 - 88.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.390+0000 - 88.00KiB + [neo4j/fefd0874] Storage summary: + [neo4j/fefd0874] Total size of store: 1.416MiB + [neo4j/fefd0874] Total size of mapped files: 736.0KiB + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Transaction log ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] Transaction log files stored on file store: apfs + [neo4j/fefd0874] Transaction log metadata: + [neo4j/fefd0874] - current kernel version used in transactions: V5_15 + [neo4j/fefd0874] - last committed transaction id: 33 + [neo4j/fefd0874] Transaction log files: + [neo4j/fefd0874] - existing transaction log versions: 0-0 + [neo4j/fefd0874] - oldest transaction 2 found in log with version 0 + [neo4j/fefd0874] - files: (filename : creation date - size) + [neo4j/fefd0874] neostore.transaction.db.0: 2024-04-03 04:12:35.000+0000 - 1.026MiB + [neo4j/fefd0874] - total size of files: 1.026MiB + [neo4j/fefd0874] Checkpoint log files: + [neo4j/fefd0874] - existing checkpoint log versions: 0-0 + [neo4j/fefd0874] - last checkpoint: CheckpointInfo[transactionLogPosition=LogPosition{logVersion=0, byteOffset=1075496}, storeId=StoreId{creationTime=1712117555300, random=260265064831090288, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1}, checkpointEntryPosition=LogPosition{logVersion=0, byteOffset=1520}, channelPositionAfterCheckpoint=LogPosition{logVersion=0, byteOffset=1752}, checkpointFilePostReadPosition=LogPosition{logVersion=0, byteOffset=1752}, kernelVersion=KernelVersion{V5_15,version=14}, kernelVersionByte=14, transactionId=TransactionId[transactionId=33, checksum=-1492631610, commitTimestamp=1712152078887, consensusIndex=-1], reason=Checkpoint triggered by "Recovery completed." @ txId: 33, consensusIndexInCheckpoint=true] + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Id usage ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] ArrayPropertyStore[neostore.nodestore.db.labels]: used=1 high=0 + [neo4j/fefd0874] NodeStore[neostore.nodestore.db]: used=10003 high=10002 + [neo4j/fefd0874] StringPropertyStore[neostore.propertystore.db.index.keys]: used=23 high=22 + [neo4j/fefd0874] PropertyIndexStore[neostore.propertystore.db.index]: used=13 high=12 + [neo4j/fefd0874] StringPropertyStore[neostore.propertystore.db.strings]: used=1 high=0 + [neo4j/fefd0874] ArrayPropertyStore[neostore.propertystore.db.arrays]: used=1 high=0 + [neo4j/fefd0874] PropertyStore[neostore.propertystore.db]: used=10011 high=10010 + [neo4j/fefd0874] RelationshipStore[neostore.relationshipstore.db]: used=0 high=-1 + [neo4j/fefd0874] StringPropertyStore[neostore.relationshiptypestore.db.names]: used=1 high=0 + [neo4j/fefd0874] RelationshipTypeStore[neostore.relationshiptypestore.db]: used=0 high=-1 + [neo4j/fefd0874] StringPropertyStore[neostore.labeltokenstore.db.names]: used=8 high=7 + [neo4j/fefd0874] LabelTokenStore[neostore.labeltokenstore.db]: used=7 high=6 + [neo4j/fefd0874] SchemaStore[neostore.schemastore.db]: used=3 high=2 + [neo4j/fefd0874] RelationshipGroupStore[neostore.relationshipgroupstore.db]: used=1 high=0 + [neo4j/fefd0874] NeoStore[neostore]: used=-1 high=-1 + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Metadata ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] EXTERNAL_STORE_UUID (Database identifier exposed as external store identity. Generated on creation and never updated): 485f4e4f-d438-40c9-a4ed-0bc1099d976f + [neo4j/fefd0874] DATABASE_ID (The last used DatabaseId for this database): null + [neo4j/fefd0874] LEGACY_STORE_VERSION (Legacy store format version. This field is used from 5.0 onwards only to distinguish non-migrated pre 5.0 metadata stores.): -3523014627327384477 + [neo4j/fefd0874] STORE_ID (Store ID): StoreId{creationTime=1712117555300, random=260265064831090288, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1} + [neo4j/fefd0874] +2024-04-03 14:06:03.850+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.init: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 46ms +2024-04-03 14:06:03.853+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] Requirement `Database unavailable` makes database neo4j unavailable. +2024-04-03 14:06:03.853+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] DatabaseId{fefd0874[neo4j]} is unavailable. +2024-04-03 14:06:03.856+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/neo4j/neostore.transaction.db.0] at version=0 +2024-04-03 14:06:03.857+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/neo4j/checkpoint.0] at version=0 +2024-04-03 14:06:03.859+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [neo4j/fefd0874] Scanning log file with version 0 for checkpoint entries +2024-04-03 14:06:03.861+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.start: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 0ms +2024-04-03 14:06:03.863+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] Fulfilling of requirement 'Database unavailable' makes database neo4j available. +2024-04-03 14:06:03.863+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] DatabaseId{fefd0874[neo4j]} is ready. +2024-04-03 14:06:03.924+0000 INFO [o.n.b.p.c.c.n.SocketNettyConnector] Bolt enabled on localhost:9999. +2024-04-03 14:06:03.924+0000 INFO [o.n.b.BoltServer] Bolt server started +2024-04-03 14:06:03.926+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] id: 266B93A8C1445AE734BA77BB99FDF56964B6082641ED1A3E87435C6A5111E836 +2024-04-03 14:06:03.926+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] name: system +2024-04-03 14:06:03.927+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] creationDate: 2024-04-03T04:12:32.66Z +2024-04-03 14:06:41.386+0000 INFO [o.n.g.f.m.GlobalModule] Logging config in use: Embedded default config 'default-server-logs.xml' +2024-04-03 14:06:41.548+0000 WARN [o.n.k.i.JvmChecker] The max heap memory has not been configured. It is recommended that it is always explicitly configured, to ensure the system has a balanced configuration. Until then, a JVM computed heuristic of 4294967296 bytes is used instead. If you are running neo4j server, you need to configure server.memory.heap.max_size in neo4j.conf. If you are running neo4j embedded, you have to launch the JVM with -Xmx set to a value. You can run neo4j-admin server memory-recommendation for memory configuration suggestions. +2024-04-03 14:06:41.548+0000 WARN [o.n.k.i.JvmChecker] The initial heap memory has not been configured. It is recommended that it is always explicitly configured, to ensure the system has a balanced configuration. Until then, a JVM computed heuristic of 268435456 bytes is used instead. If you are running neo4j server, you need to configure server.memory.heap.initial_size in neo4j.conf. If you are running neo4j embedded, you have to launch the JVM with -Xms set to a value. You can run neo4j-admin server memory-recommendation for memory configuration suggestions. +2024-04-03 14:06:41.581+0000 WARN [o.n.i.p.PageCache] The server.memory.pagecache.size setting has not been configured. It is recommended that this setting is always explicitly configured, to ensure the system has a balanced configuration. Until then, a computed heuristic value of 6442450944 bytes will be used instead. Run `neo4j-admin memory-recommendation` for memory configuration suggestions. +2024-04-03 14:06:41.582+0000 WARN [o.n.i.p.PageCache] Reflection access to java.nio.DirectByteBuffer is not available, using fallback mode. This could have negative impact on performance and memory usage. Consider adding --add-opens=java.base/java.nio=ALL-UNNAMED to VM options. +2024-04-03 14:06:41.794+0000 INFO [o.n.i.d.DiagnosticsManager] + ******************************************************************************** + [ System diagnostics ] + ******************************************************************************** + -------------------------------------------------------------------------------- + [ System memory information ] + -------------------------------------------------------------------------------- + Total Physical memory: 16.00GiB + Free Physical memory: 208.7MiB + Committed virtual memory: 38.30GiB + Total swap space: 2.000GiB + Free swap space: 1.275GiB + + -------------------------------------------------------------------------------- + [ JVM memory information ] + -------------------------------------------------------------------------------- + Free memory: 150.0MiB + Total memory: 260.0MiB + Max memory: 4.000GiB + Garbage Collector: G1 Young Generation: [G1 Eden Space, G1 Survivor Space, G1 Old Gen] + Garbage Collector: G1 Old Generation: [G1 Eden Space, G1 Survivor Space, G1 Old Gen] + Memory Pool: CodeHeap 'non-nmethods' (Non-heap memory): committed=2.438MiB, used=1.242MiB, max=5.570MiB, threshold=0B + Memory Pool: Metaspace (Non-heap memory): committed=20.13MiB, used=19.75MiB, max=-1B, threshold=0B + Memory Pool: CodeHeap 'profiled nmethods' (Non-heap memory): committed=4.313MiB, used=4.274MiB, max=117.2MiB, threshold=0B + Memory Pool: Compressed Class Space (Non-heap memory): committed=2.313MiB, used=2.121MiB, max=1.000GiB, threshold=0B + Memory Pool: G1 Eden Space (Heap memory): committed=156.0MiB, used=80.00MiB, max=-1B, threshold=? + Memory Pool: G1 Old Gen (Heap memory): committed=100.0MiB, used=22.54MiB, max=4.000GiB, threshold=0B + Memory Pool: G1 Survivor Space (Heap memory): committed=4.000MiB, used=3.504MiB, max=-1B, threshold=? + Memory Pool: CodeHeap 'non-profiled nmethods' (Non-heap memory): committed=2.438MiB, used=1.277MiB, max=117.2MiB, threshold=0B + + -------------------------------------------------------------------------------- + [ Operating system information ] + -------------------------------------------------------------------------------- + Operating System: Mac OS X; version: 12.7.4; arch: x86_64; cpus: 8 + Max number of file descriptors: 10240 + Number of open file descriptors: 226 + Process id: 69584 + Byte order: LITTLE_ENDIAN + Local timezone: America/New_York + Memory page size: 4096 + Unaligned memory access allowed: true + + -------------------------------------------------------------------------------- + [ JVM information ] + -------------------------------------------------------------------------------- + VM Name: Java HotSpot(TM) 64-Bit Server VM + VM Vendor: Oracle Corporation + VM Version: 17.0.2+8-LTS-86 + JIT compiler: HotSpot 64-Bit Tiered Compilers + VM Arguments: [-Dvisualvm.id=82094439769183, -javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=58223:/Applications/IntelliJ IDEA.app/Contents/bin, -Dfile.encoding=UTF-8] + + -------------------------------------------------------------------------------- + [ Java classpath ] + -------------------------------------------------------------------------------- + [classpath] /Users/jnr6/.m2/repository/it/unimi/dsi/fastutil/8.5.13/fastutil-8.5.13.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-codec-http/4.1.101.Final/netty-codec-http-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/scala-library/2.13.11/scala-library-2.13.11.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-command-line/5.16.0/neo4j-command-line-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-epoll/4.1.101.Final/netty-transport-native-epoll-4.1.101.Final-linux-x86_64.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-common/4.1.101.Final/netty-common-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.16.0/jackson-databind-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-consistency-check/5.16.0/neo4j-consistency-check-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-values/5.16.0/neo4j-values-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-dbms/5.16.0/neo4j-dbms-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-analysis/9.6/asm-analysis-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-planner/5.16.0/neo4j-cypher-planner-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/antlr/antlr4-runtime/4.8/antlr4-runtime-4.8.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-api/3.2.13/docker-java-api-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/activation/jakarta.activation-api/1.2.1/jakarta.activation-api-1.2.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-planner-spi/5.16.0/neo4j-cypher-planner-spi-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-resource/5.16.0/neo4j-resource-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-servlet/10.0.17/jetty-servlet-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-cache/1.13.0/shiro-cache-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-javacc-parser/5.16.0/neo4j-cypher-javacc-parser-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/sun/istack/istack-commons-runtime/3.0.8/istack-commons-runtime-3.0.8.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-configuration2/2.9.0/commons-configuration2-2.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-compress/1.21/commons-compress-1.21.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/containers/jersey-container-servlet/2.34/jersey-container-servlet-2.34.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-kqueue/4.1.101.Final/netty-transport-native-kqueue-4.1.101.Final-osx-aarch_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-concurrent/5.16.0/neo4j-concurrent-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/mysql/1.17.4/mysql-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/mockito/mockito-core/5.7.0/mockito-core-5.7.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher/5.16.0/neo4j-cypher-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-capabilities/5.16.0/neo4j-capabilities-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-notifications/5.16.0/neo4j-notifications-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-import-util/5.16.0/neo4j-import-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-config/5.16.0/neo4j-cypher-config-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/containers/jersey-container-servlet-core/2.34/jersey-container-servlet-core-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-io/5.16.0/neo4j-io-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-locator/2.6.1/hk2-locator-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-lang3/3.13.0/commons-lang3-3.13.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.16.0/jackson-core-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/mysql/mysql-connector-j/8.2.0/mysql-connector-j-8.2.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-classes-epoll/4.1.101.Final/netty-transport-classes-epoll-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/objenesis/objenesis/3.3/objenesis-3.3.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-server/2.34/jersey-server-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-client/2.34/jersey-client-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-ast-factory/5.16.0/neo4j-cypher-ast-factory-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-handler/4.1.101.Final/netty-handler-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j/5.16.0/neo4j-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/google/code/gson/gson/2.9.0/gson-2.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-logging/5.16.0/neo4j-logging-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-webapp/10.0.17/jetty-webapp-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-core/9.8.0/lucene-core-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-kernel-api/5.16.0/neo4j-kernel-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcutil-jdk18on/1.76/bcutil-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/bitbucket/inkytonik/kiama/kiama_2.13/2.5.1/kiama_2.13-2.5.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-common/5.16.0/neo4j-common-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/junit/junit/4.13.2/junit-4.13.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-index/5.16.0/neo4j-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport/4.1.101.Final/netty-transport-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-util/9.6/asm-util-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/jctools/jctools-core/4.0.2/jctools-core-4.0.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-graphdb-api/5.16.0/neo4j-graphdb-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/jdbc/1.17.4/jdbc-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-runtime-util/5.16.0/neo4j-cypher-runtime-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/collections/eclipse-collections-api/11.1.0/eclipse-collections-api-11.1.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-unsafe/5.16.0/neo4j-unsafe-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-server/10.0.17/jetty-server-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcprov-jdk18on/1.76/bcprov-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-slotted-runtime/5.16.0/neo4j-cypher-slotted-runtime-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-layout-template-json/2.20.0/log4j-layout-template-json-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-fulltext-index/5.16.0/neo4j-fulltext-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/net/java/dev/jna/jna/5.8.0/jna-5.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-util/10.0.17/jetty-util-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-expressions/5.16.0/neo4j-expressions-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-transport/3.2.13/docker-java-transport-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/commons-logging/commons-logging/1.2/commons-logging-1.2.jar + [classpath] /Users/jnr6/IdeaProjects/policy-machine-core/target/classes + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-testkit/1.10.0/junit-platform-testkit-1.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-core/1.13.0/shiro-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-physical-planning/5.16.0/neo4j-cypher-physical-planning-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-storage-engine-util/5.16.0/neo4j-storage-engine-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-ast/5.16.0/neo4j-ast-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-core/2.20.0/log4j-core-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-params/5.9.0/junit-jupiter-params-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/external/jakarta.inject/2.6.1/jakarta.inject-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/inject/jersey-hk2/2.34/jersey-hk2-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/hamcrest/hamcrest/2.2/hamcrest-2.2.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jaxb/jaxb-runtime/2.3.2/jaxb-runtime-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-logical-plans/5.16.0/neo4j-cypher-logical-plans-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-xml/10.0.17/jetty-xml-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar + [classpath] /Users/jnr6/.m2/repository/org/codehaus/jettison/jettison/1.5.4/jettison-1.5.4.jar + [classpath] /Users/jnr6/.m2/repository/com/propensive/mercator_2.13/0.2.1/mercator_2.13-0.2.1.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jaxb/txw2/2.3.2/txw2-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-resolver/4.1.101.Final/netty-resolver-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar + [classpath] /Users/jnr6/.m2/repository/org/awaitility/awaitility/4.2.0/awaitility-4.2.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-codec/4.1.101.Final/netty-codec-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-buffer/4.1.101.Final/netty-buffer-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-hash/1.13.0/shiro-crypto-hash-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/info/picocli/picocli/4.7.5/picocli-4.7.5.jar + [classpath] /Users/jnr6/.m2/repository/com/profesorfalken/jPowerShell/3.0/jPowerShell-3.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-cipher/1.13.0/shiro-crypto-cipher-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-lang/1.13.0/shiro-lang-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-token-api/5.16.0/neo4j-token-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-bolt/5.16.0/neo4j-bolt-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-record-storage-engine/5.16.0/neo4j-record-storage-engine-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-epoll/4.1.101.Final/netty-transport-native-epoll-4.1.101.Final-linux-aarch_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-ir/5.16.0/neo4j-cypher-ir-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/test-utils/5.15.0/test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter/5.10.0/junit-jupiter-5.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/app/neo4j-server-test-utils/5.15.0/neo4j-server-test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/rnorth/duct-tape/duct-tape/1.0.8/duct-tape-1.0.8.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/modules/scala-collection-contrib_2.13/0.3.0/scala-collection-contrib_2.13-0.3.0.jar + [classpath] /Users/jnr6/.m2/repository/org/slf4j/slf4j-api/2.0.0/slf4j-api-2.0.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-analysis-common/9.8.0/lucene-analysis-common-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/com/propensive/magnolia_2.13/0.17.0/magnolia_2.13-0.17.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-event/1.13.0/shiro-event-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-api/2.20.0/log4j-api-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-classes-kqueue/4.1.101.Final/netty-transport-classes-kqueue-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/net/bytebuddy/byte-buddy-agent/1.14.9/byte-buddy-agent-1.14.9.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/validation/jakarta.validation-api/2.0.2/jakarta.validation-api-2.0.2.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/database-commons/1.17.4/database-commons-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-front-end/5.16.0/neo4j-front-end-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-procedure/5.16.0/neo4j-procedure-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-import-tool/5.16.0/neo4j-import-tool-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/ws/rs/jakarta.ws.rs-api/2.1.6/jakarta.ws.rs-api-2.1.6.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.10.3/jackson-annotations-2.10.3.jar + [classpath] /Users/jnr6/.m2/repository/com/google/protobuf/protobuf-java/3.21.9/protobuf-java-3.21.9.jar + [classpath] /Users/jnr6/.m2/repository/io/projectreactor/reactor-core/3.6.0/reactor-core-3.6.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-wal/5.16.0/neo4j-wal-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-ssl/5.16.0/neo4j-ssl-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-unix-common/4.1.101.Final/netty-transport-native-unix-common-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-config-core/1.13.0/shiro-config-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-codegen/5.16.0/neo4j-codegen-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-tree/9.6/asm-tree-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-rewriting/5.16.0/neo4j-rewriting-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-backward-codecs/9.8.0/lucene-backward-codecs-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-lock/5.16.0/neo4j-lock-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-schema/5.16.0/neo4j-schema-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/collections/eclipse-collections/11.1.0/eclipse-collections-11.1.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/luben/zstd-jni/1.5.5-10/zstd-jni-1.5.5-10.jar + [classpath] /Users/jnr6/.m2/repository/commons-codec/commons-codec/1.16.0/commons-codec-1.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/jaxrs/jackson-jaxrs-json-provider/2.16.0/jackson-jaxrs-json-provider-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-expression-evaluator/5.16.0/neo4j-cypher-expression-evaluator-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/testcontainers/1.17.4/testcontainers-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/test/neo4j-harness/5.15.0/neo4j-harness-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/javassist/javassist/3.25.0-GA/javassist-3.25.0-GA.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-core/1.13.0/shiro-crypto-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-commons/1.9.0/junit-platform-commons-1.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-utils/2.6.1/hk2-utils-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/io-test-utils/5.15.0/io-test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/annotations/5.16.0/annotations-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-interpreted-runtime/5.16.0/neo4j-cypher-interpreted-runtime-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-cache/5.16.0/neo4j-cypher-cache-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jetbrains/annotations/17.0.0/annotations-17.0.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-layout/5.16.0/neo4j-layout-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/reactivestreams/reactive-streams/1.0.4/reactive-streams-1.0.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/licensing-proxy/zstd-proxy/5.16.0/zstd-proxy-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-security/5.16.0/neo4j-security-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-common/2.34/jersey-common-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/scala-reflect/2.13.11/scala-reflect-2.13.11.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/junit-jupiter/1.17.4/junit-jupiter-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-random-values/5.15.0/neo4j-random-values-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-transport-zerodep/3.2.13/docker-java-transport-zerodep-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-diagnostics/5.16.0/neo4j-diagnostics-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-http/10.0.17/jetty-http-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/cypher-ast-factory/5.16.0/cypher-ast-factory-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-configuration/5.16.0/neo4j-configuration-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-exceptions/5.16.0/neo4j-exceptions-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-util/5.16.0/neo4j-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-id-generator/5.16.0/neo4j-id-generator-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/seancfoley/ipaddress/5.4.0/ipaddress-5.4.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-io/10.0.17/jetty-io-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/commons-io/commons-io/2.11.0/commons-io-2.11.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-queryparser/9.8.0/lucene-queryparser-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/xml/bind/jakarta.xml.bind-api/2.3.2/jakarta.xml.bind-api-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-kernel/5.16.0/neo4j-kernel-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-fabric/5.16.0/neo4j-fabric-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-spatial-index/5.16.0/neo4j-spatial-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-procedure-api/5.16.0/neo4j-procedure-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/sun/xml/fastinfoset/FastInfoset/1.2.16/FastInfoset-1.2.16.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-lucene-index/5.16.0/neo4j-lucene-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/net/bytebuddy/byte-buddy/1.14.9/byte-buddy-1.14.9.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-query-router/5.16.0/neo4j-query-router-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-csv/5.16.0/neo4j-csv-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/toolchain/jetty-servlet-api/4.0.6/jetty-servlet-api-4.0.6.jar + [classpath] /Users/jnr6/IdeaProjects/policy-machine-core/target/test-classes + [classpath] /Users/jnr6/.m2/repository/com/github/ben-manes/caffeine/caffeine/3.1.8/caffeine-3.1.8.jar + [classpath] /Users/jnr6/.m2/repository/com/profesorfalken/WMI4Java/1.6.3/WMI4Java-1.6.3.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/vintage/junit-vintage-engine/5.10.0/junit-vintage-engine-5.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-collections/5.16.0/neo4j-collections-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/assertj/assertj-core/3.24.2/assertj-core-3.24.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-graph-algo/5.16.0/neo4j-graph-algo-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.9.0/junit-jupiter-engine-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jvnet/staxex/stax-ex/1.8.1/stax-ex-1.8.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/app/neo4j-server/5.16.0/neo4j-server-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-monitoring/5.16.0/neo4j-monitoring-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-macros/5.16.0/neo4j-cypher-macros-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jprocesses/jProcesses/1.6.5/jProcesses-1.6.5.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-api/2.6.1/hk2-api-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.9.0/junit-jupiter-api-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-security/10.0.17/jetty-security-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcpkix-jdk18on/1.76/bcpkix-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-engine/1.9.0/junit-platform-engine-1.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-slf4j-provider/5.16.0/neo4j-slf4j-provider-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-kqueue/4.1.101.Final/netty-transport-native-kqueue-4.1.101.Final-osx-x86_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-data-collector/5.16.0/neo4j-data-collector-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/server-api/5.16.0/server-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-native/5.16.0/neo4j-native-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/module/jackson-module-jaxb-annotations/2.16.0/jackson-module-jaxb-annotations-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm/9.6/asm-9.6.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/jaxrs/jackson-jaxrs-base/2.16.0/jackson-jaxrs-base-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar + + -------------------------------------------------------------------------------- + [ Library path ] + -------------------------------------------------------------------------------- + /Users/jnr6/Library/Java/Extensions + /Library/Java/Extensions + /Network/Library/Java/Extensions + /System/Library/Java/Extensions + /usr/lib/java + /Users/jnr6/IdeaProjects/policy-machine-core + + -------------------------------------------------------------------------------- + [ System properties ] + -------------------------------------------------------------------------------- + sun.jnu.encoding = UTF-8 + sun.arch.data.model = 64 + user.timezone = America/New_York + visualvm.id = 82094439769183 + sun.java.launcher = SUN_STANDARD + user.country = US + sun.boot.library.path = /Library/Java/JavaVirtualMachines/jdk-17.0.2.jdk/Contents/Home/lib + sun.java.command = gov.nist.csd.pm.pap.neo4j.ImportTest + jdk.debug = release + sun.cpu.endian = little + user.home = /Users/jnr6 + user.language = en + file.separator = / + sun.management.compiler = HotSpot 64-Bit Tiered Compilers + user.name = jnr6 + path.separator = : + file.encoding = UTF-8 + jnidispatch.path = /Users/jnr6/Library/Caches/JNA/temp/jna10199870036105880014.tmp + jna.loaded = true + user.dir = /Users/jnr6/IdeaProjects/policy-machine-core + native.encoding = UTF-8 + sun.io.unicode.encoding = UnicodeBig + + -------------------------------------------------------------------------------- + [ (IANA) TimeZone database version ] + -------------------------------------------------------------------------------- + TimeZone version: 2021e (available for 601 zone identifiers) + + -------------------------------------------------------------------------------- + [ Network information ] + -------------------------------------------------------------------------------- + Interface utun2: + address: fe80:0:0:0:ce81:b1c:bd2c:69e%utun2 + Interface utun1: + address: fe80:0:0:0:bbf5:1c30:4238:57b2%utun1 + Interface utun0: + address: fe80:0:0:0:73be:4eb:3f31:a891%utun0 + Interface llw0: + address: fe80:0:0:0:c0a6:71ff:fe04:534c%llw0 + Interface awdl0: + address: fe80:0:0:0:c0a6:71ff:fe04:534c%awdl0 + Interface utun3: + address: 2610:20:6005:152:0:0:0:136%utun3 + address: fe80:0:0:0:aebc:32ff:fe94:d383%utun3 + address: 129.6.109.119 + Interface en0: + address: 192.168.1.247 + Interface lo0: + address: fe80:0:0:0:0:0:0:1%lo0 + address: 0:0:0:0:0:0:0:1%lo0 + address: 127.0.0.1 + + -------------------------------------------------------------------------------- + [ Native access information ] + -------------------------------------------------------------------------------- + Native access details: Native access is not available for current platform. + + -------------------------------------------------------------------------------- + [ DBMS config ] + -------------------------------------------------------------------------------- + DBMS provided settings: + server.bolt.enabled=true + server.bolt.listen_address=localhost:9999 + server.directories.neo4j_home=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + Directories in use: + server.directories.data=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data + server.directories.dumps.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/dumps + server.directories.import=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + server.directories.lib=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/lib + server.directories.licenses=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/licenses + server.directories.logs=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/logs + server.directories.neo4j_home=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + server.directories.plugins=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/plugins + server.directories.run=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/run + server.directories.script.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/scripts + server.directories.transaction.logs.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions + + -------------------------------------------------------------------------------- + [ Packaging ] + -------------------------------------------------------------------------------- + Could not read packaging info: java.nio.file.NoSuchFileException: /Users/jnr6/IdeaProjects/policy-machine-core/testdb/packaging_info + +2024-04-03 14:06:41.938+0000 INFO [o.n.d.i.DefaultIdentityModule] Found ServerId on disk: ServerId{54490f53} (54490f53-4b94-4d0f-9604-023c3fe1be5e) +2024-04-03 14:06:41.939+0000 INFO [o.n.d.i.DefaultIdentityModule] This instance is ServerId{54490f53} (54490f53-4b94-4d0f-9604-023c3fe1be5e) +2024-04-03 14:06:42.731+0000 INFO [o.n.d.d.DatabaseLifecycles] Creating 'DatabaseId{00000000[system]}'. +2024-04-03 14:06:42.930+0000 INFO [o.n.b.BoltServer] Using connector transport KQueue +2024-04-03 14:06:43.014+0000 INFO [o.n.b.BoltServer] Configured external Bolt connector with listener address localhost/127.0.0.1:9999 +2024-04-03 14:06:43.014+0000 INFO [o.n.b.BoltServer] Bolt server loaded +2024-04-03 14:06:43.029+0000 INFO [o.n.d.d.DatabaseLifecycles] Starting 'DatabaseId{00000000[system]}'. +2024-04-03 14:06:43.277+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [system/00000000] Scanning log file with version 0 for checkpoint entries +2024-04-03 14:06:43.327+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [system/00000000] Selected RecordFormat:PageAlignedV5_0[aligned-1.1] record format from store /Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system +2024-04-03 14:06:43.327+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [system/00000000] Selected format from the store files: RecordFormat:PageAlignedV5_0[aligned-1.1] +2024-04-03 14:06:43.964+0000 INFO [o.n.i.d.DiagnosticsManager] [system/00000000] + [system/00000000] ******************************************************************************** + [system/00000000] [ Database: system ] + [system/00000000] ******************************************************************************** + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Version ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] DBMS: community record-aligned-1.1 + [system/00000000] Kernel version: 5.16.0 + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Store files ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] Disk space on partition (Total / Free / Free %): 500068036608 / 109611675648 / 21 + [system/00000000] Storage files stored on file store: apfs + [system/00000000] Storage files: (filename : modification date - size) + [system/00000000] database_lock: 2024-04-03 04:12:32.900+0000 - 0B + [system/00000000] id-buffer.tmp.0: 2024-04-03 14:06:01.906+0000 - 0B + [system/00000000] neostore: 2024-04-03 04:12:32.662+0000 - 8.000KiB + [system/00000000] neostore.counts.db: 2024-04-03 14:06:43.793+0000 - 48.00KiB + [system/00000000] neostore.indexstats.db: 2024-04-03 14:06:43.835+0000 - 48.00KiB + [system/00000000] neostore.labeltokenstore.db: 2024-04-03 04:12:39.430+0000 - 8.000KiB + [system/00000000] neostore.labeltokenstore.db.id: 2024-04-03 14:06:43.728+0000 - 40.00KiB + [system/00000000] neostore.labeltokenstore.db.names: 2024-04-03 04:12:39.454+0000 - 8.000KiB + [system/00000000] neostore.labeltokenstore.db.names.id: 2024-04-03 14:06:43.713+0000 - 40.00KiB + [system/00000000] neostore.nodestore.db: 2024-04-03 04:12:39.416+0000 - 8.000KiB + [system/00000000] neostore.nodestore.db.id: 2024-04-03 14:06:43.546+0000 - 40.00KiB + [system/00000000] neostore.nodestore.db.labels: 2024-04-03 04:12:32.509+0000 - 8.000KiB + [system/00000000] neostore.nodestore.db.labels.id: 2024-04-03 14:06:43.519+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db: 2024-04-03 04:12:39.442+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.arrays: 2024-04-03 04:12:32.565+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.arrays.id: 2024-04-03 14:06:43.620+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.id: 2024-04-03 14:06:43.641+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.index: 2024-04-03 04:12:39.477+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.index.id: 2024-04-03 14:06:43.587+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.index.keys: 2024-04-03 04:12:39.464+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.index.keys.id: 2024-04-03 14:06:43.566+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.strings: 2024-04-03 04:12:39.367+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.strings.id: 2024-04-03 14:06:43.601+0000 - 40.00KiB + [system/00000000] neostore.relationshipgroupstore.db: 2024-04-03 04:12:32.640+0000 - 8.000KiB + [system/00000000] neostore.relationshipgroupstore.db.id: 2024-04-03 14:06:43.758+0000 - 40.00KiB + [system/00000000] neostore.relationshipgroupstore.degrees.db: 2024-04-03 14:06:43.816+0000 - 40.00KiB + [system/00000000] neostore.relationshipstore.db: 2024-04-03 04:12:39.378+0000 - 8.000KiB + [system/00000000] neostore.relationshipstore.db.id: 2024-04-03 14:06:43.662+0000 - 40.00KiB + [system/00000000] neostore.relationshiptypestore.db: 2024-04-03 04:12:39.405+0000 - 8.000KiB + [system/00000000] neostore.relationshiptypestore.db.id: 2024-04-03 14:06:43.695+0000 - 40.00KiB + [system/00000000] neostore.relationshiptypestore.db.names: 2024-04-03 04:12:39.392+0000 - 8.000KiB + [system/00000000] neostore.relationshiptypestore.db.names.id: 2024-04-03 14:06:43.676+0000 - 40.00KiB + [system/00000000] neostore.schemastore.db: 2024-04-03 04:12:39.490+0000 - 8.000KiB + [system/00000000] neostore.schemastore.db.id: 2024-04-03 14:06:43.744+0000 - 40.00KiB + [system/00000000] schema: + [system/00000000] index: + [system/00000000] range-1.0: + [system/00000000] 3: + [system/00000000] index-3: 2024-04-03 14:06:01.811+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.321+0000 - 48.00KiB + [system/00000000] 4: + [system/00000000] index-4: 2024-04-03 14:06:01.839+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.437+0000 - 48.00KiB + [system/00000000] 7: + [system/00000000] index-7: 2024-04-03 14:06:01.862+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.907+0000 - 48.00KiB + [system/00000000] 8: + [system/00000000] index-8: 2024-04-03 14:06:01.888+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.997+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.996+0000 - 192.0KiB + [system/00000000] token-lookup-1.0: + [system/00000000] 1: + [system/00000000] index-1: 2024-04-03 14:06:01.741+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:33.516+0000 - 48.00KiB + [system/00000000] 2: + [system/00000000] index-2: 2024-04-03 14:06:01.772+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:33.409+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:33.515+0000 - 96.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.321+0000 - 288.0KiB + [system/00000000] - Total: 2024-04-03 04:12:33.407+0000 - 288.0KiB + [system/00000000] Storage summary: + [system/00000000] Total size of store: 1.078MiB + [system/00000000] Total size of mapped files: 408.0KiB + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Transaction log ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] Transaction log files stored on file store: apfs + [system/00000000] Transaction log metadata: + [system/00000000] - current kernel version used in transactions: V5_15 + [system/00000000] - last committed transaction id: 37 + [system/00000000] Transaction log files: + [system/00000000] - existing transaction log versions: 0-0 + [system/00000000] - oldest transaction 2 found in log with version 0 + [system/00000000] - files: (filename : creation date - size) + [system/00000000] neostore.transaction.db.0: 2024-04-03 04:12:32.000+0000 - 19.26KiB + [system/00000000] - total size of files: 19.26KiB + [system/00000000] Checkpoint log files: + [system/00000000] - existing checkpoint log versions: 0-0 + [system/00000000] - last checkpoint: CheckpointInfo[transactionLogPosition=LogPosition{logVersion=0, byteOffset=19725}, storeId=StoreId{creationTime=1712117552660, random=4552926301767966796, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1}, checkpointEntryPosition=LogPosition{logVersion=0, byteOffset=360}, channelPositionAfterCheckpoint=LogPosition{logVersion=0, byteOffset=592}, checkpointFilePostReadPosition=LogPosition{logVersion=0, byteOffset=592}, kernelVersion=KernelVersion{V5_15,version=14}, kernelVersionByte=14, transactionId=TransactionId[transactionId=37, checksum=-1026009811, commitTimestamp=1712117555154, consensusIndex=-1], reason=Checkpoint triggered by "Database shutdown" @ txId: 37, consensusIndexInCheckpoint=true] + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Id usage ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] ArrayPropertyStore[neostore.nodestore.db.labels]: used=1 high=0 + [system/00000000] NodeStore[neostore.nodestore.db]: used=6 high=5 + [system/00000000] StringPropertyStore[neostore.propertystore.db.index.keys]: used=44 high=43 + [system/00000000] PropertyIndexStore[neostore.propertystore.db.index]: used=31 high=30 + [system/00000000] StringPropertyStore[neostore.propertystore.db.strings]: used=3 high=2 + [system/00000000] ArrayPropertyStore[neostore.propertystore.db.arrays]: used=1 high=0 + [system/00000000] PropertyStore[neostore.propertystore.db]: used=59 high=58 + [system/00000000] RelationshipStore[neostore.relationshipstore.db]: used=2 high=1 + [system/00000000] StringPropertyStore[neostore.relationshiptypestore.db.names]: used=2 high=1 + [system/00000000] RelationshipTypeStore[neostore.relationshiptypestore.db]: used=1 high=0 + [system/00000000] StringPropertyStore[neostore.labeltokenstore.db.names]: used=5 high=4 + [system/00000000] LabelTokenStore[neostore.labeltokenstore.db]: used=4 high=3 + [system/00000000] SchemaStore[neostore.schemastore.db]: used=11 high=10 + [system/00000000] RelationshipGroupStore[neostore.relationshipgroupstore.db]: used=1 high=0 + [system/00000000] NeoStore[neostore]: used=-1 high=-1 + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Metadata ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] EXTERNAL_STORE_UUID (Database identifier exposed as external store identity. Generated on creation and never updated): 8e4fd9af-0e04-47d8-a19c-cdb72dbda752 + [system/00000000] DATABASE_ID (The last used DatabaseId for this database): null + [system/00000000] LEGACY_STORE_VERSION (Legacy store format version. This field is used from 5.0 onwards only to distinguish non-migrated pre 5.0 metadata stores.): -3523014627327384477 + [system/00000000] STORE_ID (Store ID): StoreId{creationTime=1712117552660, random=4552926301767966796, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1} + [system/00000000] +2024-04-03 14:06:44.156+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:06:44.157+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:06:44.158+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:06:44.158+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:06:44.183+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:06:44.184+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:06:44.184+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:06:44.185+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:06:44.222+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 +2024-04-03 14:06:44.223+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 +2024-04-03 14:06:44.224+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:06:44.225+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 +2024-04-03 14:06:44.249+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 +2024-04-03 14:06:44.249+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 +2024-04-03 14:06:44.250+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:06:44.250+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 +2024-04-03 14:06:44.273+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 +2024-04-03 14:06:44.273+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 +2024-04-03 14:06:44.274+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:06:44.274+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 +2024-04-03 14:06:44.298+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 +2024-04-03 14:06:44.298+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 +2024-04-03 14:06:44.299+0000 INFO [o.n.k.i.a.i.IndexingService] [system/00000000] IndexingService.init: indexes not specifically mentioned above are ONLINE. Total 6 indexes. Processed in 174ms +2024-04-03 14:06:44.299+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:06:44.300+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 +2024-04-03 14:06:44.306+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] Requirement `Database unavailable` makes database system unavailable. +2024-04-03 14:06:44.307+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] DatabaseId{00000000[system]} is unavailable. +2024-04-03 14:06:44.369+0000 INFO [o.n.k.d.Database] [system/00000000] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/system/neostore.transaction.db.0] at version=0 +2024-04-03 14:06:44.373+0000 INFO [o.n.k.d.Database] [system/00000000] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/system/checkpoint.0] at version=0 +2024-04-03 14:06:44.373+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [system/00000000] Scanning log file with version 0 for checkpoint entries +2024-04-03 14:06:44.376+0000 INFO [o.n.k.i.a.i.IndexingService] [system/00000000] IndexingService.start: indexes not specifically mentioned above are ONLINE. Total 6 indexes. Processed in 0ms +2024-04-03 14:06:44.406+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] Fulfilling of requirement 'Database unavailable' makes database system available. +2024-04-03 14:06:44.406+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] DatabaseId{00000000[system]} is ready. +2024-04-03 14:06:44.523+0000 INFO [o.n.s.s.s.UserSecurityGraphComponent] Performing postInitialization step for component 'security-users' with version 4 and status CURRENT +2024-04-03 14:06:44.524+0000 INFO [o.n.s.s.s.UserSecurityGraphComponent] Updating the initial password in component 'security-users' +2024-04-03 14:06:44.536+0000 INFO [o.n.d.d.DatabaseLifecycles] Creating 'DatabaseId{fefd0874[neo4j]}'. +2024-04-03 14:06:44.539+0000 INFO [o.n.d.d.DatabaseLifecycles] Starting 'DatabaseId{fefd0874[neo4j]}'. +2024-04-03 14:06:44.566+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [neo4j/fefd0874] Scanning log file with version 0 for checkpoint entries +2024-04-03 14:06:44.614+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected RecordFormat:PageAlignedV5_0[aligned-1.1] record format from store /Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j +2024-04-03 14:06:44.614+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected format from the store files: RecordFormat:PageAlignedV5_0[aligned-1.1] +2024-04-03 14:06:44.856+0000 INFO [o.n.i.d.DiagnosticsManager] [neo4j/fefd0874] + [neo4j/fefd0874] ******************************************************************************** + [neo4j/fefd0874] [ Database: neo4j ] + [neo4j/fefd0874] ******************************************************************************** + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Version ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] DBMS: community record-aligned-1.1 + [neo4j/fefd0874] Kernel version: 5.16.0 + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Store files ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] Disk space on partition (Total / Free / Free %): 500068036608 / 109611417600 / 21 + [neo4j/fefd0874] Storage files stored on file store: apfs + [neo4j/fefd0874] Storage files: (filename : modification date - size) + [neo4j/fefd0874] database_lock: 2024-04-03 04:12:35.327+0000 - 0B + [neo4j/fefd0874] id-buffer.tmp.0: 2024-04-03 14:06:03.852+0000 - 0B + [neo4j/fefd0874] neostore: 2024-04-03 04:12:35.301+0000 - 8.000KiB + [neo4j/fefd0874] neostore.counts.db: 2024-04-03 14:06:44.803+0000 - 48.00KiB + [neo4j/fefd0874] neostore.indexstats.db: 2024-04-03 14:06:44.831+0000 - 48.00KiB + [neo4j/fefd0874] neostore.labeltokenstore.db: 2024-04-03 04:53:01.953+0000 - 8.000KiB + [neo4j/fefd0874] neostore.labeltokenstore.db.id: 2024-04-03 14:06:44.763+0000 - 40.00KiB + [neo4j/fefd0874] neostore.labeltokenstore.db.names: 2024-04-03 04:53:01.900+0000 - 8.000KiB + [neo4j/fefd0874] neostore.labeltokenstore.db.names.id: 2024-04-03 14:06:44.748+0000 - 40.00KiB + [neo4j/fefd0874] neostore.nodestore.db: 2024-04-03 14:06:03.221+0000 - 152.0KiB + [neo4j/fefd0874] neostore.nodestore.db.id: 2024-04-03 14:06:44.629+0000 - 48.00KiB + [neo4j/fefd0874] neostore.nodestore.db.labels: 2024-04-03 04:12:35.189+0000 - 8.000KiB + [neo4j/fefd0874] neostore.nodestore.db.labels.id: 2024-04-03 14:06:44.616+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db: 2024-04-03 14:06:03.235+0000 - 408.0KiB + [neo4j/fefd0874] neostore.propertystore.db.arrays: 2024-04-03 04:12:35.234+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.arrays.id: 2024-04-03 14:06:44.678+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.id: 2024-04-03 14:06:44.691+0000 - 48.00KiB + [neo4j/fefd0874] neostore.propertystore.db.index: 2024-04-03 04:30:28.255+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.index.id: 2024-04-03 14:06:44.652+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.index.keys: 2024-04-03 04:30:28.242+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.index.keys.id: 2024-04-03 14:06:44.640+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.strings: 2024-04-03 04:12:35.222+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.strings.id: 2024-04-03 14:06:44.660+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshipgroupstore.db: 2024-04-03 04:12:35.289+0000 - 8.000KiB + [neo4j/fefd0874] neostore.relationshipgroupstore.db.id: 2024-04-03 14:06:44.788+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshipgroupstore.degrees.db: 2024-04-03 14:06:44.820+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshipstore.db: 2024-04-03 04:12:35.245+0000 - 0B + [neo4j/fefd0874] neostore.relationshipstore.db.id: 2024-04-03 14:06:44.707+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshiptypestore.db: 2024-04-03 04:12:35.259+0000 - 0B + [neo4j/fefd0874] neostore.relationshiptypestore.db.id: 2024-04-03 14:06:44.734+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshiptypestore.db.names: 2024-04-03 04:12:35.246+0000 - 8.000KiB + [neo4j/fefd0874] neostore.relationshiptypestore.db.names.id: 2024-04-03 14:06:44.719+0000 - 40.00KiB + [neo4j/fefd0874] neostore.schemastore.db: 2024-04-03 04:12:36.054+0000 - 8.000KiB + [neo4j/fefd0874] neostore.schemastore.db.id: 2024-04-03 14:06:44.775+0000 - 40.00KiB + [neo4j/fefd0874] schema: + [neo4j/fefd0874] index: + [neo4j/fefd0874] token-lookup-1.0: + [neo4j/fefd0874] 1: + [neo4j/fefd0874] index-1: 2024-04-03 14:06:03.815+0000 - 48.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.459+0000 - 48.00KiB + [neo4j/fefd0874] 2: + [neo4j/fefd0874] index-2: 2024-04-03 14:06:03.838+0000 - 40.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.390+0000 - 40.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.459+0000 - 88.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.390+0000 - 88.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.390+0000 - 88.00KiB + [neo4j/fefd0874] Storage summary: + [neo4j/fefd0874] Total size of store: 1.414MiB + [neo4j/fefd0874] Total size of mapped files: 736.0KiB + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Transaction log ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] Transaction log files stored on file store: apfs + [neo4j/fefd0874] Transaction log metadata: + [neo4j/fefd0874] - current kernel version used in transactions: V5_15 + [neo4j/fefd0874] - last committed transaction id: 33 + [neo4j/fefd0874] Transaction log files: + [neo4j/fefd0874] - existing transaction log versions: 0-0 + [neo4j/fefd0874] - oldest transaction 2 found in log with version 0 + [neo4j/fefd0874] - files: (filename : creation date - size) + [neo4j/fefd0874] neostore.transaction.db.0: 2024-04-03 04:12:35.000+0000 - 1.026MiB + [neo4j/fefd0874] - total size of files: 1.026MiB + [neo4j/fefd0874] Checkpoint log files: + [neo4j/fefd0874] - existing checkpoint log versions: 0-0 + [neo4j/fefd0874] - last checkpoint: CheckpointInfo[transactionLogPosition=LogPosition{logVersion=0, byteOffset=1075496}, storeId=StoreId{creationTime=1712117555300, random=260265064831090288, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1}, checkpointEntryPosition=LogPosition{logVersion=0, byteOffset=1520}, channelPositionAfterCheckpoint=LogPosition{logVersion=0, byteOffset=1752}, checkpointFilePostReadPosition=LogPosition{logVersion=0, byteOffset=1752}, kernelVersion=KernelVersion{V5_15,version=14}, kernelVersionByte=14, transactionId=TransactionId[transactionId=33, checksum=-1492631610, commitTimestamp=1712152078887, consensusIndex=-1], reason=Checkpoint triggered by "Recovery completed." @ txId: 33, consensusIndexInCheckpoint=true] + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Id usage ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] ArrayPropertyStore[neostore.nodestore.db.labels]: used=1 high=0 + [neo4j/fefd0874] NodeStore[neostore.nodestore.db]: used=10003 high=10002 + [neo4j/fefd0874] StringPropertyStore[neostore.propertystore.db.index.keys]: used=23 high=22 + [neo4j/fefd0874] PropertyIndexStore[neostore.propertystore.db.index]: used=13 high=12 + [neo4j/fefd0874] StringPropertyStore[neostore.propertystore.db.strings]: used=1 high=0 + [neo4j/fefd0874] ArrayPropertyStore[neostore.propertystore.db.arrays]: used=1 high=0 + [neo4j/fefd0874] PropertyStore[neostore.propertystore.db]: used=10011 high=10010 + [neo4j/fefd0874] RelationshipStore[neostore.relationshipstore.db]: used=0 high=-1 + [neo4j/fefd0874] StringPropertyStore[neostore.relationshiptypestore.db.names]: used=1 high=0 + [neo4j/fefd0874] RelationshipTypeStore[neostore.relationshiptypestore.db]: used=0 high=-1 + [neo4j/fefd0874] StringPropertyStore[neostore.labeltokenstore.db.names]: used=8 high=7 + [neo4j/fefd0874] LabelTokenStore[neostore.labeltokenstore.db]: used=7 high=6 + [neo4j/fefd0874] SchemaStore[neostore.schemastore.db]: used=3 high=2 + [neo4j/fefd0874] RelationshipGroupStore[neostore.relationshipgroupstore.db]: used=1 high=0 + [neo4j/fefd0874] NeoStore[neostore]: used=-1 high=-1 + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Metadata ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] EXTERNAL_STORE_UUID (Database identifier exposed as external store identity. Generated on creation and never updated): 485f4e4f-d438-40c9-a4ed-0bc1099d976f + [neo4j/fefd0874] DATABASE_ID (The last used DatabaseId for this database): null + [neo4j/fefd0874] LEGACY_STORE_VERSION (Legacy store format version. This field is used from 5.0 onwards only to distinguish non-migrated pre 5.0 metadata stores.): -3523014627327384477 + [neo4j/fefd0874] STORE_ID (Store ID): StoreId{creationTime=1712117555300, random=260265064831090288, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1} + [neo4j/fefd0874] +2024-04-03 14:06:44.880+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job registered: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:06:44.880+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job started: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:06:44.881+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job finished: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:06:44.882+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job closed: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:06:44.899+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job registered: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:06:44.900+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.init: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 41ms +2024-04-03 14:06:44.900+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job started: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:06:44.901+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job finished: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 Number of pages visited: 2, Number of tree nodes: 1, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:06:44.901+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job closed: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:06:44.902+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] Requirement `Database unavailable` makes database neo4j unavailable. +2024-04-03 14:06:44.902+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] DatabaseId{fefd0874[neo4j]} is unavailable. +2024-04-03 14:06:44.905+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/neo4j/neostore.transaction.db.0] at version=0 +2024-04-03 14:06:44.907+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/neo4j/checkpoint.0] at version=0 +2024-04-03 14:06:44.908+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [neo4j/fefd0874] Scanning log file with version 0 for checkpoint entries +2024-04-03 14:06:44.909+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.start: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 0ms +2024-04-03 14:06:44.911+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] Fulfilling of requirement 'Database unavailable' makes database neo4j available. +2024-04-03 14:06:44.911+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] DatabaseId{fefd0874[neo4j]} is ready. +2024-04-03 14:06:44.955+0000 INFO [o.n.b.p.c.c.n.SocketNettyConnector] Bolt enabled on localhost:9999. +2024-04-03 14:06:44.955+0000 INFO [o.n.b.BoltServer] Bolt server started +2024-04-03 14:06:44.958+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] id: 266B93A8C1445AE734BA77BB99FDF56964B6082641ED1A3E87435C6A5111E836 +2024-04-03 14:06:44.958+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] name: system +2024-04-03 14:06:44.958+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] creationDate: 2024-04-03T04:12:32.66Z +2024-04-03 14:07:24.072+0000 INFO [o.n.g.f.m.GlobalModule] Logging config in use: Embedded default config 'default-server-logs.xml' +2024-04-03 14:07:24.276+0000 WARN [o.n.k.i.JvmChecker] The max heap memory has not been configured. It is recommended that it is always explicitly configured, to ensure the system has a balanced configuration. Until then, a JVM computed heuristic of 4294967296 bytes is used instead. If you are running neo4j server, you need to configure server.memory.heap.max_size in neo4j.conf. If you are running neo4j embedded, you have to launch the JVM with -Xmx set to a value. You can run neo4j-admin server memory-recommendation for memory configuration suggestions. +2024-04-03 14:07:24.276+0000 WARN [o.n.k.i.JvmChecker] The initial heap memory has not been configured. It is recommended that it is always explicitly configured, to ensure the system has a balanced configuration. Until then, a JVM computed heuristic of 268435456 bytes is used instead. If you are running neo4j server, you need to configure server.memory.heap.initial_size in neo4j.conf. If you are running neo4j embedded, you have to launch the JVM with -Xms set to a value. You can run neo4j-admin server memory-recommendation for memory configuration suggestions. +2024-04-03 14:07:24.311+0000 WARN [o.n.i.p.PageCache] The server.memory.pagecache.size setting has not been configured. It is recommended that this setting is always explicitly configured, to ensure the system has a balanced configuration. Until then, a computed heuristic value of 6442450944 bytes will be used instead. Run `neo4j-admin memory-recommendation` for memory configuration suggestions. +2024-04-03 14:07:24.311+0000 WARN [o.n.i.p.PageCache] Reflection access to java.nio.DirectByteBuffer is not available, using fallback mode. This could have negative impact on performance and memory usage. Consider adding --add-opens=java.base/java.nio=ALL-UNNAMED to VM options. +2024-04-03 14:07:24.539+0000 INFO [o.n.i.d.DiagnosticsManager] + ******************************************************************************** + [ System diagnostics ] + ******************************************************************************** + -------------------------------------------------------------------------------- + [ System memory information ] + -------------------------------------------------------------------------------- + Total Physical memory: 16.00GiB + Free Physical memory: 342.4MiB + Committed virtual memory: 38.29GiB + Total swap space: 2.000GiB + Free swap space: 1.275GiB + + -------------------------------------------------------------------------------- + [ JVM memory information ] + -------------------------------------------------------------------------------- + Free memory: 152.5MiB + Total memory: 260.0MiB + Max memory: 4.000GiB + Garbage Collector: G1 Young Generation: [G1 Eden Space, G1 Survivor Space, G1 Old Gen] + Garbage Collector: G1 Old Generation: [G1 Eden Space, G1 Survivor Space, G1 Old Gen] + Memory Pool: CodeHeap 'non-nmethods' (Non-heap memory): committed=2.438MiB, used=1.213MiB, max=5.570MiB, threshold=0B + Memory Pool: Metaspace (Non-heap memory): committed=20.13MiB, used=19.75MiB, max=-1B, threshold=0B + Memory Pool: CodeHeap 'profiled nmethods' (Non-heap memory): committed=4.375MiB, used=4.326MiB, max=117.2MiB, threshold=0B + Memory Pool: Compressed Class Space (Non-heap memory): committed=2.313MiB, used=2.121MiB, max=1.000GiB, threshold=0B + Memory Pool: G1 Eden Space (Heap memory): committed=154.0MiB, used=78.00MiB, max=-1B, threshold=? + Memory Pool: G1 Old Gen (Heap memory): committed=100.0MiB, used=22.43MiB, max=4.000GiB, threshold=0B + Memory Pool: G1 Survivor Space (Heap memory): committed=6.000MiB, used=4.108MiB, max=-1B, threshold=? + Memory Pool: CodeHeap 'non-profiled nmethods' (Non-heap memory): committed=2.438MiB, used=1.355MiB, max=117.2MiB, threshold=0B + + -------------------------------------------------------------------------------- + [ Operating system information ] + -------------------------------------------------------------------------------- + Operating System: Mac OS X; version: 12.7.4; arch: x86_64; cpus: 8 + Max number of file descriptors: 10240 + Number of open file descriptors: 226 + Process id: 69669 + Byte order: LITTLE_ENDIAN + Local timezone: America/New_York + Memory page size: 4096 + Unaligned memory access allowed: true + + -------------------------------------------------------------------------------- + [ JVM information ] + -------------------------------------------------------------------------------- + VM Name: Java HotSpot(TM) 64-Bit Server VM + VM Vendor: Oracle Corporation + VM Version: 17.0.2+8-LTS-86 + JIT compiler: HotSpot 64-Bit Tiered Compilers + VM Arguments: [-Dvisualvm.id=82137059248674, -javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=58232:/Applications/IntelliJ IDEA.app/Contents/bin, -Dfile.encoding=UTF-8] + + -------------------------------------------------------------------------------- + [ Java classpath ] + -------------------------------------------------------------------------------- + [classpath] /Users/jnr6/.m2/repository/it/unimi/dsi/fastutil/8.5.13/fastutil-8.5.13.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-codec-http/4.1.101.Final/netty-codec-http-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/scala-library/2.13.11/scala-library-2.13.11.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-command-line/5.16.0/neo4j-command-line-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-epoll/4.1.101.Final/netty-transport-native-epoll-4.1.101.Final-linux-x86_64.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-common/4.1.101.Final/netty-common-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.16.0/jackson-databind-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-consistency-check/5.16.0/neo4j-consistency-check-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-values/5.16.0/neo4j-values-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-dbms/5.16.0/neo4j-dbms-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-analysis/9.6/asm-analysis-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-planner/5.16.0/neo4j-cypher-planner-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/antlr/antlr4-runtime/4.8/antlr4-runtime-4.8.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-api/3.2.13/docker-java-api-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/activation/jakarta.activation-api/1.2.1/jakarta.activation-api-1.2.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-planner-spi/5.16.0/neo4j-cypher-planner-spi-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-resource/5.16.0/neo4j-resource-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-servlet/10.0.17/jetty-servlet-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-cache/1.13.0/shiro-cache-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-javacc-parser/5.16.0/neo4j-cypher-javacc-parser-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/sun/istack/istack-commons-runtime/3.0.8/istack-commons-runtime-3.0.8.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-configuration2/2.9.0/commons-configuration2-2.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-compress/1.21/commons-compress-1.21.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/containers/jersey-container-servlet/2.34/jersey-container-servlet-2.34.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-kqueue/4.1.101.Final/netty-transport-native-kqueue-4.1.101.Final-osx-aarch_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-concurrent/5.16.0/neo4j-concurrent-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/mysql/1.17.4/mysql-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/mockito/mockito-core/5.7.0/mockito-core-5.7.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher/5.16.0/neo4j-cypher-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-capabilities/5.16.0/neo4j-capabilities-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-notifications/5.16.0/neo4j-notifications-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-import-util/5.16.0/neo4j-import-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-config/5.16.0/neo4j-cypher-config-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/containers/jersey-container-servlet-core/2.34/jersey-container-servlet-core-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-io/5.16.0/neo4j-io-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-locator/2.6.1/hk2-locator-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-lang3/3.13.0/commons-lang3-3.13.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.16.0/jackson-core-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/mysql/mysql-connector-j/8.2.0/mysql-connector-j-8.2.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-classes-epoll/4.1.101.Final/netty-transport-classes-epoll-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/objenesis/objenesis/3.3/objenesis-3.3.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-server/2.34/jersey-server-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-client/2.34/jersey-client-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-ast-factory/5.16.0/neo4j-cypher-ast-factory-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-handler/4.1.101.Final/netty-handler-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j/5.16.0/neo4j-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/google/code/gson/gson/2.9.0/gson-2.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-logging/5.16.0/neo4j-logging-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-webapp/10.0.17/jetty-webapp-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-core/9.8.0/lucene-core-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-kernel-api/5.16.0/neo4j-kernel-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcutil-jdk18on/1.76/bcutil-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/bitbucket/inkytonik/kiama/kiama_2.13/2.5.1/kiama_2.13-2.5.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-common/5.16.0/neo4j-common-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/junit/junit/4.13.2/junit-4.13.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-index/5.16.0/neo4j-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport/4.1.101.Final/netty-transport-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-util/9.6/asm-util-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/jctools/jctools-core/4.0.2/jctools-core-4.0.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-graphdb-api/5.16.0/neo4j-graphdb-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/jdbc/1.17.4/jdbc-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-runtime-util/5.16.0/neo4j-cypher-runtime-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/collections/eclipse-collections-api/11.1.0/eclipse-collections-api-11.1.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-unsafe/5.16.0/neo4j-unsafe-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-server/10.0.17/jetty-server-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcprov-jdk18on/1.76/bcprov-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-slotted-runtime/5.16.0/neo4j-cypher-slotted-runtime-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-layout-template-json/2.20.0/log4j-layout-template-json-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-fulltext-index/5.16.0/neo4j-fulltext-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/net/java/dev/jna/jna/5.8.0/jna-5.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-util/10.0.17/jetty-util-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-expressions/5.16.0/neo4j-expressions-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-transport/3.2.13/docker-java-transport-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/commons-logging/commons-logging/1.2/commons-logging-1.2.jar + [classpath] /Users/jnr6/IdeaProjects/policy-machine-core/target/classes + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-testkit/1.10.0/junit-platform-testkit-1.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-core/1.13.0/shiro-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-physical-planning/5.16.0/neo4j-cypher-physical-planning-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-storage-engine-util/5.16.0/neo4j-storage-engine-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-ast/5.16.0/neo4j-ast-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-core/2.20.0/log4j-core-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-params/5.9.0/junit-jupiter-params-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/external/jakarta.inject/2.6.1/jakarta.inject-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/inject/jersey-hk2/2.34/jersey-hk2-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/hamcrest/hamcrest/2.2/hamcrest-2.2.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jaxb/jaxb-runtime/2.3.2/jaxb-runtime-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-logical-plans/5.16.0/neo4j-cypher-logical-plans-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-xml/10.0.17/jetty-xml-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar + [classpath] /Users/jnr6/.m2/repository/org/codehaus/jettison/jettison/1.5.4/jettison-1.5.4.jar + [classpath] /Users/jnr6/.m2/repository/com/propensive/mercator_2.13/0.2.1/mercator_2.13-0.2.1.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jaxb/txw2/2.3.2/txw2-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-resolver/4.1.101.Final/netty-resolver-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar + [classpath] /Users/jnr6/.m2/repository/org/awaitility/awaitility/4.2.0/awaitility-4.2.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-codec/4.1.101.Final/netty-codec-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-buffer/4.1.101.Final/netty-buffer-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-hash/1.13.0/shiro-crypto-hash-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/info/picocli/picocli/4.7.5/picocli-4.7.5.jar + [classpath] /Users/jnr6/.m2/repository/com/profesorfalken/jPowerShell/3.0/jPowerShell-3.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-cipher/1.13.0/shiro-crypto-cipher-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-lang/1.13.0/shiro-lang-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-token-api/5.16.0/neo4j-token-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-bolt/5.16.0/neo4j-bolt-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-record-storage-engine/5.16.0/neo4j-record-storage-engine-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-epoll/4.1.101.Final/netty-transport-native-epoll-4.1.101.Final-linux-aarch_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-ir/5.16.0/neo4j-cypher-ir-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/test-utils/5.15.0/test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter/5.10.0/junit-jupiter-5.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/app/neo4j-server-test-utils/5.15.0/neo4j-server-test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/rnorth/duct-tape/duct-tape/1.0.8/duct-tape-1.0.8.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/modules/scala-collection-contrib_2.13/0.3.0/scala-collection-contrib_2.13-0.3.0.jar + [classpath] /Users/jnr6/.m2/repository/org/slf4j/slf4j-api/2.0.0/slf4j-api-2.0.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-analysis-common/9.8.0/lucene-analysis-common-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/com/propensive/magnolia_2.13/0.17.0/magnolia_2.13-0.17.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-event/1.13.0/shiro-event-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-api/2.20.0/log4j-api-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-classes-kqueue/4.1.101.Final/netty-transport-classes-kqueue-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/net/bytebuddy/byte-buddy-agent/1.14.9/byte-buddy-agent-1.14.9.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/validation/jakarta.validation-api/2.0.2/jakarta.validation-api-2.0.2.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/database-commons/1.17.4/database-commons-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-front-end/5.16.0/neo4j-front-end-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-procedure/5.16.0/neo4j-procedure-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-import-tool/5.16.0/neo4j-import-tool-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/ws/rs/jakarta.ws.rs-api/2.1.6/jakarta.ws.rs-api-2.1.6.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.10.3/jackson-annotations-2.10.3.jar + [classpath] /Users/jnr6/.m2/repository/com/google/protobuf/protobuf-java/3.21.9/protobuf-java-3.21.9.jar + [classpath] /Users/jnr6/.m2/repository/io/projectreactor/reactor-core/3.6.0/reactor-core-3.6.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-wal/5.16.0/neo4j-wal-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-ssl/5.16.0/neo4j-ssl-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-unix-common/4.1.101.Final/netty-transport-native-unix-common-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-config-core/1.13.0/shiro-config-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-codegen/5.16.0/neo4j-codegen-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-tree/9.6/asm-tree-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-rewriting/5.16.0/neo4j-rewriting-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-backward-codecs/9.8.0/lucene-backward-codecs-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-lock/5.16.0/neo4j-lock-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-schema/5.16.0/neo4j-schema-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/collections/eclipse-collections/11.1.0/eclipse-collections-11.1.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/luben/zstd-jni/1.5.5-10/zstd-jni-1.5.5-10.jar + [classpath] /Users/jnr6/.m2/repository/commons-codec/commons-codec/1.16.0/commons-codec-1.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/jaxrs/jackson-jaxrs-json-provider/2.16.0/jackson-jaxrs-json-provider-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-expression-evaluator/5.16.0/neo4j-cypher-expression-evaluator-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/testcontainers/1.17.4/testcontainers-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/test/neo4j-harness/5.15.0/neo4j-harness-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/javassist/javassist/3.25.0-GA/javassist-3.25.0-GA.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-core/1.13.0/shiro-crypto-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-commons/1.9.0/junit-platform-commons-1.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-utils/2.6.1/hk2-utils-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/io-test-utils/5.15.0/io-test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/annotations/5.16.0/annotations-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-interpreted-runtime/5.16.0/neo4j-cypher-interpreted-runtime-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-cache/5.16.0/neo4j-cypher-cache-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jetbrains/annotations/17.0.0/annotations-17.0.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-layout/5.16.0/neo4j-layout-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/reactivestreams/reactive-streams/1.0.4/reactive-streams-1.0.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/licensing-proxy/zstd-proxy/5.16.0/zstd-proxy-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-security/5.16.0/neo4j-security-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-common/2.34/jersey-common-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/scala-reflect/2.13.11/scala-reflect-2.13.11.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/junit-jupiter/1.17.4/junit-jupiter-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-random-values/5.15.0/neo4j-random-values-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-transport-zerodep/3.2.13/docker-java-transport-zerodep-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-diagnostics/5.16.0/neo4j-diagnostics-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-http/10.0.17/jetty-http-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/cypher-ast-factory/5.16.0/cypher-ast-factory-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-configuration/5.16.0/neo4j-configuration-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-exceptions/5.16.0/neo4j-exceptions-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-util/5.16.0/neo4j-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-id-generator/5.16.0/neo4j-id-generator-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/seancfoley/ipaddress/5.4.0/ipaddress-5.4.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-io/10.0.17/jetty-io-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/commons-io/commons-io/2.11.0/commons-io-2.11.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-queryparser/9.8.0/lucene-queryparser-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/xml/bind/jakarta.xml.bind-api/2.3.2/jakarta.xml.bind-api-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-kernel/5.16.0/neo4j-kernel-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-fabric/5.16.0/neo4j-fabric-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-spatial-index/5.16.0/neo4j-spatial-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-procedure-api/5.16.0/neo4j-procedure-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/sun/xml/fastinfoset/FastInfoset/1.2.16/FastInfoset-1.2.16.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-lucene-index/5.16.0/neo4j-lucene-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/net/bytebuddy/byte-buddy/1.14.9/byte-buddy-1.14.9.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-query-router/5.16.0/neo4j-query-router-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-csv/5.16.0/neo4j-csv-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/toolchain/jetty-servlet-api/4.0.6/jetty-servlet-api-4.0.6.jar + [classpath] /Users/jnr6/IdeaProjects/policy-machine-core/target/test-classes + [classpath] /Users/jnr6/.m2/repository/com/github/ben-manes/caffeine/caffeine/3.1.8/caffeine-3.1.8.jar + [classpath] /Users/jnr6/.m2/repository/com/profesorfalken/WMI4Java/1.6.3/WMI4Java-1.6.3.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/vintage/junit-vintage-engine/5.10.0/junit-vintage-engine-5.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-collections/5.16.0/neo4j-collections-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/assertj/assertj-core/3.24.2/assertj-core-3.24.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-graph-algo/5.16.0/neo4j-graph-algo-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.9.0/junit-jupiter-engine-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jvnet/staxex/stax-ex/1.8.1/stax-ex-1.8.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/app/neo4j-server/5.16.0/neo4j-server-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-monitoring/5.16.0/neo4j-monitoring-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-macros/5.16.0/neo4j-cypher-macros-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jprocesses/jProcesses/1.6.5/jProcesses-1.6.5.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-api/2.6.1/hk2-api-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.9.0/junit-jupiter-api-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-security/10.0.17/jetty-security-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcpkix-jdk18on/1.76/bcpkix-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-engine/1.9.0/junit-platform-engine-1.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-slf4j-provider/5.16.0/neo4j-slf4j-provider-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-kqueue/4.1.101.Final/netty-transport-native-kqueue-4.1.101.Final-osx-x86_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-data-collector/5.16.0/neo4j-data-collector-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/server-api/5.16.0/server-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-native/5.16.0/neo4j-native-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/module/jackson-module-jaxb-annotations/2.16.0/jackson-module-jaxb-annotations-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm/9.6/asm-9.6.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/jaxrs/jackson-jaxrs-base/2.16.0/jackson-jaxrs-base-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar + + -------------------------------------------------------------------------------- + [ Library path ] + -------------------------------------------------------------------------------- + /Users/jnr6/Library/Java/Extensions + /Library/Java/Extensions + /Network/Library/Java/Extensions + /System/Library/Java/Extensions + /usr/lib/java + /Users/jnr6/IdeaProjects/policy-machine-core + + -------------------------------------------------------------------------------- + [ System properties ] + -------------------------------------------------------------------------------- + sun.jnu.encoding = UTF-8 + sun.arch.data.model = 64 + user.timezone = America/New_York + visualvm.id = 82137059248674 + sun.java.launcher = SUN_STANDARD + user.country = US + sun.boot.library.path = /Library/Java/JavaVirtualMachines/jdk-17.0.2.jdk/Contents/Home/lib + sun.java.command = gov.nist.csd.pm.pap.neo4j.ImportTest + jdk.debug = release + sun.cpu.endian = little + user.home = /Users/jnr6 + user.language = en + file.separator = / + sun.management.compiler = HotSpot 64-Bit Tiered Compilers + user.name = jnr6 + path.separator = : + file.encoding = UTF-8 + jnidispatch.path = /Users/jnr6/Library/Caches/JNA/temp/jna9588401164563302641.tmp + jna.loaded = true + user.dir = /Users/jnr6/IdeaProjects/policy-machine-core + native.encoding = UTF-8 + sun.io.unicode.encoding = UnicodeBig + + -------------------------------------------------------------------------------- + [ (IANA) TimeZone database version ] + -------------------------------------------------------------------------------- + TimeZone version: 2021e (available for 601 zone identifiers) + + -------------------------------------------------------------------------------- + [ Network information ] + -------------------------------------------------------------------------------- + Interface utun2: + address: fe80:0:0:0:ce81:b1c:bd2c:69e%utun2 + Interface utun1: + address: fe80:0:0:0:bbf5:1c30:4238:57b2%utun1 + Interface utun0: + address: fe80:0:0:0:73be:4eb:3f31:a891%utun0 + Interface llw0: + address: fe80:0:0:0:c0a6:71ff:fe04:534c%llw0 + Interface awdl0: + address: fe80:0:0:0:c0a6:71ff:fe04:534c%awdl0 + Interface utun3: + address: 2610:20:6005:152:0:0:0:136%utun3 + address: fe80:0:0:0:aebc:32ff:fe94:d383%utun3 + address: 129.6.109.119 + Interface en0: + address: 192.168.1.247 + Interface lo0: + address: fe80:0:0:0:0:0:0:1%lo0 + address: 0:0:0:0:0:0:0:1%lo0 + address: 127.0.0.1 + + -------------------------------------------------------------------------------- + [ Native access information ] + -------------------------------------------------------------------------------- + Native access details: Native access is not available for current platform. + + -------------------------------------------------------------------------------- + [ DBMS config ] + -------------------------------------------------------------------------------- + DBMS provided settings: + server.bolt.enabled=true + server.bolt.listen_address=localhost:9999 + server.directories.neo4j_home=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + Directories in use: + server.directories.data=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data + server.directories.dumps.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/dumps + server.directories.import=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + server.directories.lib=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/lib + server.directories.licenses=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/licenses + server.directories.logs=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/logs + server.directories.neo4j_home=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + server.directories.plugins=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/plugins + server.directories.run=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/run + server.directories.script.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/scripts + server.directories.transaction.logs.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions + + -------------------------------------------------------------------------------- + [ Packaging ] + -------------------------------------------------------------------------------- + Could not read packaging info: java.nio.file.NoSuchFileException: /Users/jnr6/IdeaProjects/policy-machine-core/testdb/packaging_info + +2024-04-03 14:07:24.693+0000 INFO [o.n.d.i.DefaultIdentityModule] Found ServerId on disk: ServerId{54490f53} (54490f53-4b94-4d0f-9604-023c3fe1be5e) +2024-04-03 14:07:24.694+0000 INFO [o.n.d.i.DefaultIdentityModule] This instance is ServerId{54490f53} (54490f53-4b94-4d0f-9604-023c3fe1be5e) +2024-04-03 14:07:25.456+0000 INFO [o.n.d.d.DatabaseLifecycles] Creating 'DatabaseId{00000000[system]}'. +2024-04-03 14:07:25.661+0000 INFO [o.n.b.BoltServer] Using connector transport KQueue +2024-04-03 14:07:25.743+0000 INFO [o.n.b.BoltServer] Configured external Bolt connector with listener address localhost/127.0.0.1:9999 +2024-04-03 14:07:25.743+0000 INFO [o.n.b.BoltServer] Bolt server loaded +2024-04-03 14:07:25.758+0000 INFO [o.n.d.d.DatabaseLifecycles] Starting 'DatabaseId{00000000[system]}'. +2024-04-03 14:07:26.025+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [system/00000000] Scanning log file with version 0 for checkpoint entries +2024-04-03 14:07:26.111+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [system/00000000] Selected RecordFormat:PageAlignedV5_0[aligned-1.1] record format from store /Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system +2024-04-03 14:07:26.111+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [system/00000000] Selected format from the store files: RecordFormat:PageAlignedV5_0[aligned-1.1] +2024-04-03 14:07:26.772+0000 INFO [o.n.i.d.DiagnosticsManager] [system/00000000] + [system/00000000] ******************************************************************************** + [system/00000000] [ Database: system ] + [system/00000000] ******************************************************************************** + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Version ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] DBMS: community record-aligned-1.1 + [system/00000000] Kernel version: 5.16.0 + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Store files ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] Disk space on partition (Total / Free / Free %): 500068036608 / 109607124992 / 21 + [system/00000000] Storage files stored on file store: apfs + [system/00000000] Storage files: (filename : modification date - size) + [system/00000000] database_lock: 2024-04-03 04:12:32.900+0000 - 0B + [system/00000000] id-buffer.tmp.0: 2024-04-03 14:06:44.306+0000 - 0B + [system/00000000] neostore: 2024-04-03 04:12:32.662+0000 - 8.000KiB + [system/00000000] neostore.counts.db: 2024-04-03 14:07:26.593+0000 - 48.00KiB + [system/00000000] neostore.indexstats.db: 2024-04-03 14:07:26.639+0000 - 48.00KiB + [system/00000000] neostore.labeltokenstore.db: 2024-04-03 04:12:39.430+0000 - 8.000KiB + [system/00000000] neostore.labeltokenstore.db.id: 2024-04-03 14:07:26.522+0000 - 40.00KiB + [system/00000000] neostore.labeltokenstore.db.names: 2024-04-03 04:12:39.454+0000 - 8.000KiB + [system/00000000] neostore.labeltokenstore.db.names.id: 2024-04-03 14:07:26.506+0000 - 40.00KiB + [system/00000000] neostore.nodestore.db: 2024-04-03 04:12:39.416+0000 - 8.000KiB + [system/00000000] neostore.nodestore.db.id: 2024-04-03 14:07:26.315+0000 - 40.00KiB + [system/00000000] neostore.nodestore.db.labels: 2024-04-03 04:12:32.509+0000 - 8.000KiB + [system/00000000] neostore.nodestore.db.labels.id: 2024-04-03 14:07:26.292+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db: 2024-04-03 04:12:39.442+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.arrays: 2024-04-03 04:12:32.565+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.arrays.id: 2024-04-03 14:07:26.403+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.id: 2024-04-03 14:07:26.428+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.index: 2024-04-03 04:12:39.477+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.index.id: 2024-04-03 14:07:26.364+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.index.keys: 2024-04-03 04:12:39.464+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.index.keys.id: 2024-04-03 14:07:26.339+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.strings: 2024-04-03 04:12:39.367+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.strings.id: 2024-04-03 14:07:26.386+0000 - 40.00KiB + [system/00000000] neostore.relationshipgroupstore.db: 2024-04-03 04:12:32.640+0000 - 8.000KiB + [system/00000000] neostore.relationshipgroupstore.db.id: 2024-04-03 14:07:26.556+0000 - 40.00KiB + [system/00000000] neostore.relationshipgroupstore.degrees.db: 2024-04-03 14:07:26.619+0000 - 40.00KiB + [system/00000000] neostore.relationshipstore.db: 2024-04-03 04:12:39.378+0000 - 8.000KiB + [system/00000000] neostore.relationshipstore.db.id: 2024-04-03 14:07:26.443+0000 - 40.00KiB + [system/00000000] neostore.relationshiptypestore.db: 2024-04-03 04:12:39.405+0000 - 8.000KiB + [system/00000000] neostore.relationshiptypestore.db.id: 2024-04-03 14:07:26.478+0000 - 40.00KiB + [system/00000000] neostore.relationshiptypestore.db.names: 2024-04-03 04:12:39.392+0000 - 8.000KiB + [system/00000000] neostore.relationshiptypestore.db.names.id: 2024-04-03 14:07:26.460+0000 - 40.00KiB + [system/00000000] neostore.schemastore.db: 2024-04-03 04:12:39.490+0000 - 8.000KiB + [system/00000000] neostore.schemastore.db.id: 2024-04-03 14:07:26.538+0000 - 40.00KiB + [system/00000000] schema: + [system/00000000] index: + [system/00000000] range-1.0: + [system/00000000] 3: + [system/00000000] index-3: 2024-04-03 14:06:44.210+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.321+0000 - 48.00KiB + [system/00000000] 4: + [system/00000000] index-4: 2024-04-03 14:06:44.238+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.437+0000 - 48.00KiB + [system/00000000] 7: + [system/00000000] index-7: 2024-04-03 14:06:44.262+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.907+0000 - 48.00KiB + [system/00000000] 8: + [system/00000000] index-8: 2024-04-03 14:06:44.288+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.997+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.996+0000 - 192.0KiB + [system/00000000] token-lookup-1.0: + [system/00000000] 1: + [system/00000000] index-1: 2024-04-03 14:06:44.145+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:33.516+0000 - 48.00KiB + [system/00000000] 2: + [system/00000000] index-2: 2024-04-03 14:06:44.172+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:33.409+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:33.515+0000 - 96.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.321+0000 - 288.0KiB + [system/00000000] - Total: 2024-04-03 04:12:33.407+0000 - 288.0KiB + [system/00000000] Storage summary: + [system/00000000] Total size of store: 1.078MiB + [system/00000000] Total size of mapped files: 408.0KiB + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Transaction log ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] Transaction log files stored on file store: apfs + [system/00000000] Transaction log metadata: + [system/00000000] - current kernel version used in transactions: V5_15 + [system/00000000] - last committed transaction id: 37 + [system/00000000] Transaction log files: + [system/00000000] - existing transaction log versions: 0-0 + [system/00000000] - oldest transaction 2 found in log with version 0 + [system/00000000] - files: (filename : creation date - size) + [system/00000000] neostore.transaction.db.0: 2024-04-03 04:12:32.000+0000 - 19.26KiB + [system/00000000] - total size of files: 19.26KiB + [system/00000000] Checkpoint log files: + [system/00000000] - existing checkpoint log versions: 0-0 + [system/00000000] - last checkpoint: CheckpointInfo[transactionLogPosition=LogPosition{logVersion=0, byteOffset=19725}, storeId=StoreId{creationTime=1712117552660, random=4552926301767966796, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1}, checkpointEntryPosition=LogPosition{logVersion=0, byteOffset=360}, channelPositionAfterCheckpoint=LogPosition{logVersion=0, byteOffset=592}, checkpointFilePostReadPosition=LogPosition{logVersion=0, byteOffset=592}, kernelVersion=KernelVersion{V5_15,version=14}, kernelVersionByte=14, transactionId=TransactionId[transactionId=37, checksum=-1026009811, commitTimestamp=1712117555154, consensusIndex=-1], reason=Checkpoint triggered by "Database shutdown" @ txId: 37, consensusIndexInCheckpoint=true] + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Id usage ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] ArrayPropertyStore[neostore.nodestore.db.labels]: used=1 high=0 + [system/00000000] NodeStore[neostore.nodestore.db]: used=6 high=5 + [system/00000000] StringPropertyStore[neostore.propertystore.db.index.keys]: used=44 high=43 + [system/00000000] PropertyIndexStore[neostore.propertystore.db.index]: used=31 high=30 + [system/00000000] StringPropertyStore[neostore.propertystore.db.strings]: used=3 high=2 + [system/00000000] ArrayPropertyStore[neostore.propertystore.db.arrays]: used=1 high=0 + [system/00000000] PropertyStore[neostore.propertystore.db]: used=59 high=58 + [system/00000000] RelationshipStore[neostore.relationshipstore.db]: used=2 high=1 + [system/00000000] StringPropertyStore[neostore.relationshiptypestore.db.names]: used=2 high=1 + [system/00000000] RelationshipTypeStore[neostore.relationshiptypestore.db]: used=1 high=0 + [system/00000000] StringPropertyStore[neostore.labeltokenstore.db.names]: used=5 high=4 + [system/00000000] LabelTokenStore[neostore.labeltokenstore.db]: used=4 high=3 + [system/00000000] SchemaStore[neostore.schemastore.db]: used=11 high=10 + [system/00000000] RelationshipGroupStore[neostore.relationshipgroupstore.db]: used=1 high=0 + [system/00000000] NeoStore[neostore]: used=-1 high=-1 + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Metadata ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] EXTERNAL_STORE_UUID (Database identifier exposed as external store identity. Generated on creation and never updated): 8e4fd9af-0e04-47d8-a19c-cdb72dbda752 + [system/00000000] DATABASE_ID (The last used DatabaseId for this database): null + [system/00000000] LEGACY_STORE_VERSION (Legacy store format version. This field is used from 5.0 onwards only to distinguish non-migrated pre 5.0 metadata stores.): -3523014627327384477 + [system/00000000] STORE_ID (Store ID): StoreId{creationTime=1712117552660, random=4552926301767966796, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1} + [system/00000000] +2024-04-03 14:07:26.957+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:07:26.958+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:07:26.961+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:07:26.961+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:07:26.985+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:07:26.986+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:07:26.987+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:07:26.987+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:07:27.022+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 +2024-04-03 14:07:27.022+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 +2024-04-03 14:07:27.023+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:07:27.023+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 +2024-04-03 14:07:27.048+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 +2024-04-03 14:07:27.049+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 +2024-04-03 14:07:27.050+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:07:27.050+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 +2024-04-03 14:07:27.076+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 +2024-04-03 14:07:27.076+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 +2024-04-03 14:07:27.078+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:07:27.078+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 +2024-04-03 14:07:27.103+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 +2024-04-03 14:07:27.104+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 +2024-04-03 14:07:27.105+0000 INFO [o.n.k.i.a.i.IndexingService] [system/00000000] IndexingService.init: indexes not specifically mentioned above are ONLINE. Total 6 indexes. Processed in 170ms +2024-04-03 14:07:27.105+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:07:27.105+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 +2024-04-03 14:07:27.111+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] Requirement `Database unavailable` makes database system unavailable. +2024-04-03 14:07:27.111+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] DatabaseId{00000000[system]} is unavailable. +2024-04-03 14:07:27.168+0000 INFO [o.n.k.d.Database] [system/00000000] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/system/neostore.transaction.db.0] at version=0 +2024-04-03 14:07:27.172+0000 INFO [o.n.k.d.Database] [system/00000000] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/system/checkpoint.0] at version=0 +2024-04-03 14:07:27.173+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [system/00000000] Scanning log file with version 0 for checkpoint entries +2024-04-03 14:07:27.176+0000 INFO [o.n.k.i.a.i.IndexingService] [system/00000000] IndexingService.start: indexes not specifically mentioned above are ONLINE. Total 6 indexes. Processed in 0ms +2024-04-03 14:07:27.213+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] Fulfilling of requirement 'Database unavailable' makes database system available. +2024-04-03 14:07:27.213+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] DatabaseId{00000000[system]} is ready. +2024-04-03 14:07:27.343+0000 INFO [o.n.s.s.s.UserSecurityGraphComponent] Performing postInitialization step for component 'security-users' with version 4 and status CURRENT +2024-04-03 14:07:27.343+0000 INFO [o.n.s.s.s.UserSecurityGraphComponent] Updating the initial password in component 'security-users' +2024-04-03 14:07:27.356+0000 INFO [o.n.d.d.DatabaseLifecycles] Creating 'DatabaseId{fefd0874[neo4j]}'. +2024-04-03 14:07:27.359+0000 INFO [o.n.d.d.DatabaseLifecycles] Starting 'DatabaseId{fefd0874[neo4j]}'. +2024-04-03 14:07:27.376+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [neo4j/fefd0874] Scanning log file with version 0 for checkpoint entries +2024-04-03 14:07:27.467+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected RecordFormat:PageAlignedV5_0[aligned-1.1] record format from store /Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j +2024-04-03 14:07:27.467+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected format from the store files: RecordFormat:PageAlignedV5_0[aligned-1.1] +2024-04-03 14:07:27.695+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Transaction logs entries found after the last check point (which is at LogPosition{logVersion=0, byteOffset=1075496}). First observed transaction id: 34. +2024-04-03 14:07:27.739+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Recovery required from position LogPosition{logVersion=0, byteOffset=1075496} +2024-04-03 14:07:27.785+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] TransactionLogsRecovery +2024-04-03 14:07:27.816+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 10% completed +2024-04-03 14:07:27.828+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 20% completed +2024-04-03 14:07:27.832+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 30% completed +2024-04-03 14:07:27.847+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 40% completed +2024-04-03 14:07:27.869+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 50% completed +2024-04-03 14:07:27.893+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job registered: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:07:27.894+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job registered: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:07:27.894+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job started: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:07:27.894+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job started: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:07:27.895+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job finished: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:07:27.895+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job finished: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:07:27.895+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job closed: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:07:27.895+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job closed: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:07:27.914+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job registered: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:07:27.914+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job registered: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:07:27.915+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job started: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:07:27.915+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.init: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 43ms +2024-04-03 14:07:27.915+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job started: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:07:27.915+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job finished: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 Number of pages visited: 2, Number of tree nodes: 1, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:07:27.916+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job finished: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 Number of pages visited: 2, Number of tree nodes: 1, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:07:27.916+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job closed: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:07:27.916+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job closed: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:07:28.091+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 60% completed +2024-04-03 14:07:28.101+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 70% completed +2024-04-03 14:07:28.131+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 80% completed +2024-04-03 14:07:28.144+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 90% completed +2024-04-03 14:07:28.205+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 100% completed +2024-04-03 14:07:28.207+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Recovery in 'full' mode completed. Observed transactions range [first:34, last:39]: 6 transactions applied, 0 not completed transactions rolled back, skipped applying 0 previously rolled back transactions. Time spent: 510ms. +2024-04-03 14:07:28.209+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.start: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 0ms +2024-04-03 14:07:28.210+0000 INFO [o.n.k.i.t.l.c.CheckPointerImpl] [neo4j/fefd0874] Checkpoint triggered by "Recovery completed." @ txId: 39 checkpoint started... +2024-04-03 14:07:29.006+0000 INFO [o.n.k.i.t.l.c.CheckPointerImpl] [neo4j/fefd0874] Checkpoint triggered by "Recovery completed." @ txId: 39 checkpoint completed in 794ms. Checkpoint flushed 109 pages (0% of total available pages), in 41 IOs. Checkpoint performed with IO limit: unlimited, paused in total 0 times( 0 millis). +2024-04-03 14:07:29.009+0000 INFO [o.n.k.i.t.l.p.LogPruningImpl] [neo4j/fefd0874] No log version pruned. The strategy used was '2 days'. +2024-04-03 14:07:29.616+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [neo4j/fefd0874] Scanning log file with version 0 for checkpoint entries +2024-04-03 14:07:29.641+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected RecordFormat:PageAlignedV5_0[aligned-1.1] record format from store /Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j +2024-04-03 14:07:29.641+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected format from the store files: RecordFormat:PageAlignedV5_0[aligned-1.1] +2024-04-03 14:07:29.849+0000 INFO [o.n.i.d.DiagnosticsManager] [neo4j/fefd0874] + [neo4j/fefd0874] ******************************************************************************** + [neo4j/fefd0874] [ Database: neo4j ] + [neo4j/fefd0874] ******************************************************************************** + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Version ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] DBMS: community record-aligned-1.1 + [neo4j/fefd0874] Kernel version: 5.16.0 + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Store files ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] Disk space on partition (Total / Free / Free %): 500068036608 / 109591961600 / 21 + [neo4j/fefd0874] Storage files stored on file store: apfs + [neo4j/fefd0874] Storage files: (filename : modification date - size) + [neo4j/fefd0874] database_lock: 2024-04-03 04:12:35.327+0000 - 0B + [neo4j/fefd0874] id-buffer.tmp.0: 2024-04-03 14:06:46.915+0000 - 156.4KiB + [neo4j/fefd0874] neostore: 2024-04-03 04:12:35.301+0000 - 8.000KiB + [neo4j/fefd0874] neostore.counts.db: 2024-04-03 14:07:29.799+0000 - 48.00KiB + [neo4j/fefd0874] neostore.indexstats.db: 2024-04-03 14:07:29.823+0000 - 48.00KiB + [neo4j/fefd0874] neostore.labeltokenstore.db: 2024-04-03 04:53:01.953+0000 - 8.000KiB + [neo4j/fefd0874] neostore.labeltokenstore.db.id: 2024-04-03 14:07:29.764+0000 - 40.00KiB + [neo4j/fefd0874] neostore.labeltokenstore.db.names: 2024-04-03 04:53:01.900+0000 - 8.000KiB + [neo4j/fefd0874] neostore.labeltokenstore.db.names.id: 2024-04-03 14:07:29.752+0000 - 40.00KiB + [neo4j/fefd0874] neostore.nodestore.db: 2024-04-03 14:07:28.913+0000 - 152.0KiB + [neo4j/fefd0874] neostore.nodestore.db.id: 2024-04-03 14:07:29.651+0000 - 48.00KiB + [neo4j/fefd0874] neostore.nodestore.db.labels: 2024-04-03 04:12:35.189+0000 - 8.000KiB + [neo4j/fefd0874] neostore.nodestore.db.labels.id: 2024-04-03 14:07:29.642+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db: 2024-04-03 14:07:28.946+0000 - 408.0KiB + [neo4j/fefd0874] neostore.propertystore.db.arrays: 2024-04-03 04:12:35.234+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.arrays.id: 2024-04-03 14:07:29.696+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.id: 2024-04-03 14:07:29.705+0000 - 48.00KiB + [neo4j/fefd0874] neostore.propertystore.db.index: 2024-04-03 04:30:28.255+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.index.id: 2024-04-03 14:07:29.673+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.index.keys: 2024-04-03 04:30:28.242+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.index.keys.id: 2024-04-03 14:07:29.661+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.strings: 2024-04-03 04:12:35.222+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.strings.id: 2024-04-03 14:07:29.682+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshipgroupstore.db: 2024-04-03 04:12:35.289+0000 - 8.000KiB + [neo4j/fefd0874] neostore.relationshipgroupstore.db.id: 2024-04-03 14:07:29.789+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshipgroupstore.degrees.db: 2024-04-03 14:07:29.812+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshipstore.db: 2024-04-03 04:12:35.245+0000 - 0B + [neo4j/fefd0874] neostore.relationshipstore.db.id: 2024-04-03 14:07:29.714+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshiptypestore.db: 2024-04-03 04:12:35.259+0000 - 0B + [neo4j/fefd0874] neostore.relationshiptypestore.db.id: 2024-04-03 14:07:29.741+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshiptypestore.db.names: 2024-04-03 04:12:35.246+0000 - 8.000KiB + [neo4j/fefd0874] neostore.relationshiptypestore.db.names.id: 2024-04-03 14:07:29.727+0000 - 40.00KiB + [neo4j/fefd0874] neostore.schemastore.db: 2024-04-03 04:12:36.054+0000 - 8.000KiB + [neo4j/fefd0874] neostore.schemastore.db.id: 2024-04-03 14:07:29.776+0000 - 40.00KiB + [neo4j/fefd0874] schema: + [neo4j/fefd0874] index: + [neo4j/fefd0874] token-lookup-1.0: + [neo4j/fefd0874] 1: + [neo4j/fefd0874] index-1: 2024-04-03 14:07:29.010+0000 - 48.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.459+0000 - 48.00KiB + [neo4j/fefd0874] 2: + [neo4j/fefd0874] index-2: 2024-04-03 14:07:29.035+0000 - 40.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.390+0000 - 40.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.459+0000 - 88.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.390+0000 - 88.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.390+0000 - 88.00KiB + [neo4j/fefd0874] Storage summary: + [neo4j/fefd0874] Total size of store: 1.567MiB + [neo4j/fefd0874] Total size of mapped files: 736.0KiB + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Transaction log ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] Transaction log files stored on file store: apfs + [neo4j/fefd0874] Transaction log metadata: + [neo4j/fefd0874] - current kernel version used in transactions: V5_15 + [neo4j/fefd0874] - last committed transaction id: 39 + [neo4j/fefd0874] Transaction log files: + [neo4j/fefd0874] - existing transaction log versions: 0-0 + [neo4j/fefd0874] - oldest transaction 2 found in log with version 0 + [neo4j/fefd0874] - files: (filename : creation date - size) + [neo4j/fefd0874] neostore.transaction.db.0: 2024-04-03 04:12:35.000+0000 - 2.988MiB + [neo4j/fefd0874] - total size of files: 2.988MiB + [neo4j/fefd0874] Checkpoint log files: + [neo4j/fefd0874] - existing checkpoint log versions: 0-0 + [neo4j/fefd0874] - last checkpoint: CheckpointInfo[transactionLogPosition=LogPosition{logVersion=0, byteOffset=3133138}, storeId=StoreId{creationTime=1712117555300, random=260265064831090288, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1}, checkpointEntryPosition=LogPosition{logVersion=0, byteOffset=1752}, channelPositionAfterCheckpoint=LogPosition{logVersion=0, byteOffset=1984}, checkpointFilePostReadPosition=LogPosition{logVersion=0, byteOffset=1984}, kernelVersion=KernelVersion{V5_15,version=14}, kernelVersionByte=14, transactionId=TransactionId[transactionId=39, checksum=1809616111, commitTimestamp=1712153213107, consensusIndex=-1], reason=Checkpoint triggered by "Recovery completed." @ txId: 39, consensusIndexInCheckpoint=true] + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Id usage ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] ArrayPropertyStore[neostore.nodestore.db.labels]: used=1 high=0 + [neo4j/fefd0874] NodeStore[neostore.nodestore.db]: used=10003 high=10002 + [neo4j/fefd0874] StringPropertyStore[neostore.propertystore.db.index.keys]: used=23 high=22 + [neo4j/fefd0874] PropertyIndexStore[neostore.propertystore.db.index]: used=13 high=12 + [neo4j/fefd0874] StringPropertyStore[neostore.propertystore.db.strings]: used=1 high=0 + [neo4j/fefd0874] ArrayPropertyStore[neostore.propertystore.db.arrays]: used=1 high=0 + [neo4j/fefd0874] PropertyStore[neostore.propertystore.db]: used=10011 high=10010 + [neo4j/fefd0874] RelationshipStore[neostore.relationshipstore.db]: used=0 high=-1 + [neo4j/fefd0874] StringPropertyStore[neostore.relationshiptypestore.db.names]: used=1 high=0 + [neo4j/fefd0874] RelationshipTypeStore[neostore.relationshiptypestore.db]: used=0 high=-1 + [neo4j/fefd0874] StringPropertyStore[neostore.labeltokenstore.db.names]: used=8 high=7 + [neo4j/fefd0874] LabelTokenStore[neostore.labeltokenstore.db]: used=7 high=6 + [neo4j/fefd0874] SchemaStore[neostore.schemastore.db]: used=3 high=2 + [neo4j/fefd0874] RelationshipGroupStore[neostore.relationshipgroupstore.db]: used=1 high=0 + [neo4j/fefd0874] NeoStore[neostore]: used=-1 high=-1 + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Metadata ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] EXTERNAL_STORE_UUID (Database identifier exposed as external store identity. Generated on creation and never updated): 485f4e4f-d438-40c9-a4ed-0bc1099d976f + [neo4j/fefd0874] DATABASE_ID (The last used DatabaseId for this database): null + [neo4j/fefd0874] LEGACY_STORE_VERSION (Legacy store format version. This field is used from 5.0 onwards only to distinguish non-migrated pre 5.0 metadata stores.): -3523014627327384477 + [neo4j/fefd0874] STORE_ID (Store ID): StoreId{creationTime=1712117555300, random=260265064831090288, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1} + [neo4j/fefd0874] +2024-04-03 14:07:29.895+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.init: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 43ms +2024-04-03 14:07:29.898+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] Requirement `Database unavailable` makes database neo4j unavailable. +2024-04-03 14:07:29.898+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] DatabaseId{fefd0874[neo4j]} is unavailable. +2024-04-03 14:07:29.901+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/neo4j/neostore.transaction.db.0] at version=0 +2024-04-03 14:07:29.902+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/neo4j/checkpoint.0] at version=0 +2024-04-03 14:07:29.903+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [neo4j/fefd0874] Scanning log file with version 0 for checkpoint entries +2024-04-03 14:07:29.904+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.start: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 0ms +2024-04-03 14:07:29.906+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] Fulfilling of requirement 'Database unavailable' makes database neo4j available. +2024-04-03 14:07:29.906+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] DatabaseId{fefd0874[neo4j]} is ready. +2024-04-03 14:07:29.952+0000 INFO [o.n.b.p.c.c.n.SocketNettyConnector] Bolt enabled on localhost:9999. +2024-04-03 14:07:29.953+0000 INFO [o.n.b.BoltServer] Bolt server started +2024-04-03 14:07:29.955+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] id: 266B93A8C1445AE734BA77BB99FDF56964B6082641ED1A3E87435C6A5111E836 +2024-04-03 14:07:29.955+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] name: system +2024-04-03 14:07:29.956+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] creationDate: 2024-04-03T04:12:32.66Z +2024-04-03 14:09:49.590+0000 INFO [o.n.g.f.m.GlobalModule] Logging config in use: Embedded default config 'default-server-logs.xml' +2024-04-03 14:09:49.772+0000 WARN [o.n.k.i.JvmChecker] The max heap memory has not been configured. It is recommended that it is always explicitly configured, to ensure the system has a balanced configuration. Until then, a JVM computed heuristic of 4294967296 bytes is used instead. If you are running neo4j server, you need to configure server.memory.heap.max_size in neo4j.conf. If you are running neo4j embedded, you have to launch the JVM with -Xmx set to a value. You can run neo4j-admin server memory-recommendation for memory configuration suggestions. +2024-04-03 14:09:49.772+0000 WARN [o.n.k.i.JvmChecker] The initial heap memory has not been configured. It is recommended that it is always explicitly configured, to ensure the system has a balanced configuration. Until then, a JVM computed heuristic of 268435456 bytes is used instead. If you are running neo4j server, you need to configure server.memory.heap.initial_size in neo4j.conf. If you are running neo4j embedded, you have to launch the JVM with -Xms set to a value. You can run neo4j-admin server memory-recommendation for memory configuration suggestions. +2024-04-03 14:09:49.805+0000 WARN [o.n.i.p.PageCache] The server.memory.pagecache.size setting has not been configured. It is recommended that this setting is always explicitly configured, to ensure the system has a balanced configuration. Until then, a computed heuristic value of 6442450944 bytes will be used instead. Run `neo4j-admin memory-recommendation` for memory configuration suggestions. +2024-04-03 14:09:49.806+0000 WARN [o.n.i.p.PageCache] Reflection access to java.nio.DirectByteBuffer is not available, using fallback mode. This could have negative impact on performance and memory usage. Consider adding --add-opens=java.base/java.nio=ALL-UNNAMED to VM options. +2024-04-03 14:09:50.058+0000 INFO [o.n.i.d.DiagnosticsManager] + ******************************************************************************** + [ System diagnostics ] + ******************************************************************************** + -------------------------------------------------------------------------------- + [ System memory information ] + -------------------------------------------------------------------------------- + Total Physical memory: 16.00GiB + Free Physical memory: 550.1MiB + Committed virtual memory: 38.29GiB + Total swap space: 2.000GiB + Free swap space: 1.275GiB + + -------------------------------------------------------------------------------- + [ JVM memory information ] + -------------------------------------------------------------------------------- + Free memory: 150.2MiB + Total memory: 260.0MiB + Max memory: 4.000GiB + Garbage Collector: G1 Young Generation: [G1 Eden Space, G1 Survivor Space, G1 Old Gen] + Garbage Collector: G1 Old Generation: [G1 Eden Space, G1 Survivor Space, G1 Old Gen] + Memory Pool: CodeHeap 'non-nmethods' (Non-heap memory): committed=2.438MiB, used=1.212MiB, max=5.570MiB, threshold=0B + Memory Pool: Metaspace (Non-heap memory): committed=20.13MiB, used=19.78MiB, max=-1B, threshold=0B + Memory Pool: CodeHeap 'profiled nmethods' (Non-heap memory): committed=4.438MiB, used=4.404MiB, max=117.2MiB, threshold=0B + Memory Pool: Compressed Class Space (Non-heap memory): committed=2.313MiB, used=2.121MiB, max=1.000GiB, threshold=0B + Memory Pool: G1 Eden Space (Heap memory): committed=156.0MiB, used=80.00MiB, max=-1B, threshold=? + Memory Pool: G1 Old Gen (Heap memory): committed=100.0MiB, used=22.29MiB, max=4.000GiB, threshold=0B + Memory Pool: G1 Survivor Space (Heap memory): committed=4.000MiB, used=3.520MiB, max=-1B, threshold=? + Memory Pool: CodeHeap 'non-profiled nmethods' (Non-heap memory): committed=2.438MiB, used=1.291MiB, max=117.2MiB, threshold=0B + + -------------------------------------------------------------------------------- + [ Operating system information ] + -------------------------------------------------------------------------------- + Operating System: Mac OS X; version: 12.7.4; arch: x86_64; cpus: 8 + Max number of file descriptors: 10240 + Number of open file descriptors: 226 + Process id: 69919 + Byte order: LITTLE_ENDIAN + Local timezone: America/New_York + Memory page size: 4096 + Unaligned memory access allowed: true + + -------------------------------------------------------------------------------- + [ JVM information ] + -------------------------------------------------------------------------------- + VM Name: Java HotSpot(TM) 64-Bit Server VM + VM Vendor: Oracle Corporation + VM Version: 17.0.2+8-LTS-86 + JIT compiler: HotSpot 64-Bit Tiered Compilers + VM Arguments: [-Dvisualvm.id=82282532177713, -javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=58276:/Applications/IntelliJ IDEA.app/Contents/bin, -Dfile.encoding=UTF-8] + + -------------------------------------------------------------------------------- + [ Java classpath ] + -------------------------------------------------------------------------------- + [classpath] /Users/jnr6/.m2/repository/it/unimi/dsi/fastutil/8.5.13/fastutil-8.5.13.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-codec-http/4.1.101.Final/netty-codec-http-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/scala-library/2.13.11/scala-library-2.13.11.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-command-line/5.16.0/neo4j-command-line-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-epoll/4.1.101.Final/netty-transport-native-epoll-4.1.101.Final-linux-x86_64.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-common/4.1.101.Final/netty-common-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.16.0/jackson-databind-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-consistency-check/5.16.0/neo4j-consistency-check-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-values/5.16.0/neo4j-values-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-dbms/5.16.0/neo4j-dbms-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-analysis/9.6/asm-analysis-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-planner/5.16.0/neo4j-cypher-planner-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/antlr/antlr4-runtime/4.8/antlr4-runtime-4.8.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-api/3.2.13/docker-java-api-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/activation/jakarta.activation-api/1.2.1/jakarta.activation-api-1.2.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-planner-spi/5.16.0/neo4j-cypher-planner-spi-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-resource/5.16.0/neo4j-resource-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-servlet/10.0.17/jetty-servlet-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-cache/1.13.0/shiro-cache-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-javacc-parser/5.16.0/neo4j-cypher-javacc-parser-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/sun/istack/istack-commons-runtime/3.0.8/istack-commons-runtime-3.0.8.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-configuration2/2.9.0/commons-configuration2-2.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-compress/1.21/commons-compress-1.21.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/containers/jersey-container-servlet/2.34/jersey-container-servlet-2.34.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-kqueue/4.1.101.Final/netty-transport-native-kqueue-4.1.101.Final-osx-aarch_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-concurrent/5.16.0/neo4j-concurrent-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/mysql/1.17.4/mysql-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/mockito/mockito-core/5.7.0/mockito-core-5.7.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher/5.16.0/neo4j-cypher-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-capabilities/5.16.0/neo4j-capabilities-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-notifications/5.16.0/neo4j-notifications-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-import-util/5.16.0/neo4j-import-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-config/5.16.0/neo4j-cypher-config-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/containers/jersey-container-servlet-core/2.34/jersey-container-servlet-core-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-io/5.16.0/neo4j-io-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-locator/2.6.1/hk2-locator-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-lang3/3.13.0/commons-lang3-3.13.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.16.0/jackson-core-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/mysql/mysql-connector-j/8.2.0/mysql-connector-j-8.2.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-classes-epoll/4.1.101.Final/netty-transport-classes-epoll-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/objenesis/objenesis/3.3/objenesis-3.3.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-server/2.34/jersey-server-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-client/2.34/jersey-client-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-ast-factory/5.16.0/neo4j-cypher-ast-factory-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-handler/4.1.101.Final/netty-handler-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j/5.16.0/neo4j-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/google/code/gson/gson/2.9.0/gson-2.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-logging/5.16.0/neo4j-logging-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-webapp/10.0.17/jetty-webapp-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-core/9.8.0/lucene-core-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-kernel-api/5.16.0/neo4j-kernel-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcutil-jdk18on/1.76/bcutil-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/bitbucket/inkytonik/kiama/kiama_2.13/2.5.1/kiama_2.13-2.5.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-common/5.16.0/neo4j-common-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/junit/junit/4.13.2/junit-4.13.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-index/5.16.0/neo4j-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport/4.1.101.Final/netty-transport-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-util/9.6/asm-util-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/jctools/jctools-core/4.0.2/jctools-core-4.0.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-graphdb-api/5.16.0/neo4j-graphdb-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/jdbc/1.17.4/jdbc-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-runtime-util/5.16.0/neo4j-cypher-runtime-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/collections/eclipse-collections-api/11.1.0/eclipse-collections-api-11.1.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-unsafe/5.16.0/neo4j-unsafe-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-server/10.0.17/jetty-server-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcprov-jdk18on/1.76/bcprov-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-slotted-runtime/5.16.0/neo4j-cypher-slotted-runtime-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-layout-template-json/2.20.0/log4j-layout-template-json-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-fulltext-index/5.16.0/neo4j-fulltext-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/net/java/dev/jna/jna/5.8.0/jna-5.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-util/10.0.17/jetty-util-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-expressions/5.16.0/neo4j-expressions-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-transport/3.2.13/docker-java-transport-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/commons-logging/commons-logging/1.2/commons-logging-1.2.jar + [classpath] /Users/jnr6/IdeaProjects/policy-machine-core/target/classes + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-testkit/1.10.0/junit-platform-testkit-1.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-core/1.13.0/shiro-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-physical-planning/5.16.0/neo4j-cypher-physical-planning-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-storage-engine-util/5.16.0/neo4j-storage-engine-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-ast/5.16.0/neo4j-ast-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-core/2.20.0/log4j-core-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-params/5.9.0/junit-jupiter-params-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/external/jakarta.inject/2.6.1/jakarta.inject-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/inject/jersey-hk2/2.34/jersey-hk2-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/hamcrest/hamcrest/2.2/hamcrest-2.2.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jaxb/jaxb-runtime/2.3.2/jaxb-runtime-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-logical-plans/5.16.0/neo4j-cypher-logical-plans-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-xml/10.0.17/jetty-xml-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar + [classpath] /Users/jnr6/.m2/repository/org/codehaus/jettison/jettison/1.5.4/jettison-1.5.4.jar + [classpath] /Users/jnr6/.m2/repository/com/propensive/mercator_2.13/0.2.1/mercator_2.13-0.2.1.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jaxb/txw2/2.3.2/txw2-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-resolver/4.1.101.Final/netty-resolver-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar + [classpath] /Users/jnr6/.m2/repository/org/awaitility/awaitility/4.2.0/awaitility-4.2.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-codec/4.1.101.Final/netty-codec-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-buffer/4.1.101.Final/netty-buffer-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-hash/1.13.0/shiro-crypto-hash-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/info/picocli/picocli/4.7.5/picocli-4.7.5.jar + [classpath] /Users/jnr6/.m2/repository/com/profesorfalken/jPowerShell/3.0/jPowerShell-3.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-cipher/1.13.0/shiro-crypto-cipher-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-lang/1.13.0/shiro-lang-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-token-api/5.16.0/neo4j-token-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-bolt/5.16.0/neo4j-bolt-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-record-storage-engine/5.16.0/neo4j-record-storage-engine-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-epoll/4.1.101.Final/netty-transport-native-epoll-4.1.101.Final-linux-aarch_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-ir/5.16.0/neo4j-cypher-ir-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/test-utils/5.15.0/test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter/5.10.0/junit-jupiter-5.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/app/neo4j-server-test-utils/5.15.0/neo4j-server-test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/rnorth/duct-tape/duct-tape/1.0.8/duct-tape-1.0.8.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/modules/scala-collection-contrib_2.13/0.3.0/scala-collection-contrib_2.13-0.3.0.jar + [classpath] /Users/jnr6/.m2/repository/org/slf4j/slf4j-api/2.0.0/slf4j-api-2.0.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-analysis-common/9.8.0/lucene-analysis-common-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/com/propensive/magnolia_2.13/0.17.0/magnolia_2.13-0.17.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-event/1.13.0/shiro-event-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-api/2.20.0/log4j-api-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-classes-kqueue/4.1.101.Final/netty-transport-classes-kqueue-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/net/bytebuddy/byte-buddy-agent/1.14.9/byte-buddy-agent-1.14.9.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/validation/jakarta.validation-api/2.0.2/jakarta.validation-api-2.0.2.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/database-commons/1.17.4/database-commons-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-front-end/5.16.0/neo4j-front-end-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-procedure/5.16.0/neo4j-procedure-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-import-tool/5.16.0/neo4j-import-tool-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/ws/rs/jakarta.ws.rs-api/2.1.6/jakarta.ws.rs-api-2.1.6.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.10.3/jackson-annotations-2.10.3.jar + [classpath] /Users/jnr6/.m2/repository/com/google/protobuf/protobuf-java/3.21.9/protobuf-java-3.21.9.jar + [classpath] /Users/jnr6/.m2/repository/io/projectreactor/reactor-core/3.6.0/reactor-core-3.6.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-wal/5.16.0/neo4j-wal-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-ssl/5.16.0/neo4j-ssl-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-unix-common/4.1.101.Final/netty-transport-native-unix-common-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-config-core/1.13.0/shiro-config-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-codegen/5.16.0/neo4j-codegen-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-tree/9.6/asm-tree-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-rewriting/5.16.0/neo4j-rewriting-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-backward-codecs/9.8.0/lucene-backward-codecs-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-lock/5.16.0/neo4j-lock-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-schema/5.16.0/neo4j-schema-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/collections/eclipse-collections/11.1.0/eclipse-collections-11.1.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/luben/zstd-jni/1.5.5-10/zstd-jni-1.5.5-10.jar + [classpath] /Users/jnr6/.m2/repository/commons-codec/commons-codec/1.16.0/commons-codec-1.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/jaxrs/jackson-jaxrs-json-provider/2.16.0/jackson-jaxrs-json-provider-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-expression-evaluator/5.16.0/neo4j-cypher-expression-evaluator-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/testcontainers/1.17.4/testcontainers-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/test/neo4j-harness/5.15.0/neo4j-harness-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/javassist/javassist/3.25.0-GA/javassist-3.25.0-GA.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-core/1.13.0/shiro-crypto-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-commons/1.9.0/junit-platform-commons-1.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-utils/2.6.1/hk2-utils-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/io-test-utils/5.15.0/io-test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/annotations/5.16.0/annotations-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-interpreted-runtime/5.16.0/neo4j-cypher-interpreted-runtime-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-cache/5.16.0/neo4j-cypher-cache-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jetbrains/annotations/17.0.0/annotations-17.0.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-layout/5.16.0/neo4j-layout-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/reactivestreams/reactive-streams/1.0.4/reactive-streams-1.0.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/licensing-proxy/zstd-proxy/5.16.0/zstd-proxy-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-security/5.16.0/neo4j-security-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-common/2.34/jersey-common-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/scala-reflect/2.13.11/scala-reflect-2.13.11.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/junit-jupiter/1.17.4/junit-jupiter-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-random-values/5.15.0/neo4j-random-values-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-transport-zerodep/3.2.13/docker-java-transport-zerodep-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-diagnostics/5.16.0/neo4j-diagnostics-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-http/10.0.17/jetty-http-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/cypher-ast-factory/5.16.0/cypher-ast-factory-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-configuration/5.16.0/neo4j-configuration-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-exceptions/5.16.0/neo4j-exceptions-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-util/5.16.0/neo4j-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-id-generator/5.16.0/neo4j-id-generator-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/seancfoley/ipaddress/5.4.0/ipaddress-5.4.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-io/10.0.17/jetty-io-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/commons-io/commons-io/2.11.0/commons-io-2.11.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-queryparser/9.8.0/lucene-queryparser-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/xml/bind/jakarta.xml.bind-api/2.3.2/jakarta.xml.bind-api-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-kernel/5.16.0/neo4j-kernel-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-fabric/5.16.0/neo4j-fabric-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-spatial-index/5.16.0/neo4j-spatial-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-procedure-api/5.16.0/neo4j-procedure-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/sun/xml/fastinfoset/FastInfoset/1.2.16/FastInfoset-1.2.16.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-lucene-index/5.16.0/neo4j-lucene-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/net/bytebuddy/byte-buddy/1.14.9/byte-buddy-1.14.9.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-query-router/5.16.0/neo4j-query-router-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-csv/5.16.0/neo4j-csv-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/toolchain/jetty-servlet-api/4.0.6/jetty-servlet-api-4.0.6.jar + [classpath] /Users/jnr6/IdeaProjects/policy-machine-core/target/test-classes + [classpath] /Users/jnr6/.m2/repository/com/github/ben-manes/caffeine/caffeine/3.1.8/caffeine-3.1.8.jar + [classpath] /Users/jnr6/.m2/repository/com/profesorfalken/WMI4Java/1.6.3/WMI4Java-1.6.3.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/vintage/junit-vintage-engine/5.10.0/junit-vintage-engine-5.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-collections/5.16.0/neo4j-collections-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/assertj/assertj-core/3.24.2/assertj-core-3.24.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-graph-algo/5.16.0/neo4j-graph-algo-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.9.0/junit-jupiter-engine-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jvnet/staxex/stax-ex/1.8.1/stax-ex-1.8.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/app/neo4j-server/5.16.0/neo4j-server-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-monitoring/5.16.0/neo4j-monitoring-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-macros/5.16.0/neo4j-cypher-macros-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jprocesses/jProcesses/1.6.5/jProcesses-1.6.5.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-api/2.6.1/hk2-api-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.9.0/junit-jupiter-api-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-security/10.0.17/jetty-security-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcpkix-jdk18on/1.76/bcpkix-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-engine/1.9.0/junit-platform-engine-1.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-slf4j-provider/5.16.0/neo4j-slf4j-provider-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-kqueue/4.1.101.Final/netty-transport-native-kqueue-4.1.101.Final-osx-x86_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-data-collector/5.16.0/neo4j-data-collector-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/server-api/5.16.0/server-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-native/5.16.0/neo4j-native-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/module/jackson-module-jaxb-annotations/2.16.0/jackson-module-jaxb-annotations-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm/9.6/asm-9.6.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/jaxrs/jackson-jaxrs-base/2.16.0/jackson-jaxrs-base-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar + + -------------------------------------------------------------------------------- + [ Library path ] + -------------------------------------------------------------------------------- + /Users/jnr6/Library/Java/Extensions + /Library/Java/Extensions + /Network/Library/Java/Extensions + /System/Library/Java/Extensions + /usr/lib/java + /Users/jnr6/IdeaProjects/policy-machine-core + + -------------------------------------------------------------------------------- + [ System properties ] + -------------------------------------------------------------------------------- + sun.jnu.encoding = UTF-8 + sun.arch.data.model = 64 + user.timezone = America/New_York + visualvm.id = 82282532177713 + sun.java.launcher = SUN_STANDARD + user.country = US + sun.boot.library.path = /Library/Java/JavaVirtualMachines/jdk-17.0.2.jdk/Contents/Home/lib + sun.java.command = gov.nist.csd.pm.pap.neo4j.ImportTest + jdk.debug = release + sun.cpu.endian = little + user.home = /Users/jnr6 + user.language = en + file.separator = / + sun.management.compiler = HotSpot 64-Bit Tiered Compilers + user.name = jnr6 + path.separator = : + file.encoding = UTF-8 + jnidispatch.path = /Users/jnr6/Library/Caches/JNA/temp/jna5610753358236026199.tmp + jna.loaded = true + user.dir = /Users/jnr6/IdeaProjects/policy-machine-core + native.encoding = UTF-8 + sun.io.unicode.encoding = UnicodeBig + + -------------------------------------------------------------------------------- + [ (IANA) TimeZone database version ] + -------------------------------------------------------------------------------- + TimeZone version: 2021e (available for 601 zone identifiers) + + -------------------------------------------------------------------------------- + [ Network information ] + -------------------------------------------------------------------------------- + Interface utun2: + address: fe80:0:0:0:ce81:b1c:bd2c:69e%utun2 + Interface utun1: + address: fe80:0:0:0:bbf5:1c30:4238:57b2%utun1 + Interface utun0: + address: fe80:0:0:0:73be:4eb:3f31:a891%utun0 + Interface llw0: + address: fe80:0:0:0:c0a6:71ff:fe04:534c%llw0 + Interface awdl0: + address: fe80:0:0:0:c0a6:71ff:fe04:534c%awdl0 + Interface utun3: + address: 2610:20:6005:152:0:0:0:136%utun3 + address: fe80:0:0:0:aebc:32ff:fe94:d383%utun3 + address: 129.6.109.119 + Interface en0: + address: 192.168.1.247 + Interface lo0: + address: fe80:0:0:0:0:0:0:1%lo0 + address: 0:0:0:0:0:0:0:1%lo0 + address: 127.0.0.1 + + -------------------------------------------------------------------------------- + [ Native access information ] + -------------------------------------------------------------------------------- + Native access details: Native access is not available for current platform. + + -------------------------------------------------------------------------------- + [ DBMS config ] + -------------------------------------------------------------------------------- + DBMS provided settings: + server.bolt.enabled=true + server.bolt.listen_address=localhost:9999 + server.directories.neo4j_home=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + Directories in use: + server.directories.data=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data + server.directories.dumps.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/dumps + server.directories.import=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + server.directories.lib=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/lib + server.directories.licenses=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/licenses + server.directories.logs=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/logs + server.directories.neo4j_home=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + server.directories.plugins=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/plugins + server.directories.run=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/run + server.directories.script.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/scripts + server.directories.transaction.logs.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions + + -------------------------------------------------------------------------------- + [ Packaging ] + -------------------------------------------------------------------------------- + Could not read packaging info: java.nio.file.NoSuchFileException: /Users/jnr6/IdeaProjects/policy-machine-core/testdb/packaging_info + +2024-04-03 14:09:50.219+0000 INFO [o.n.d.i.DefaultIdentityModule] Found ServerId on disk: ServerId{54490f53} (54490f53-4b94-4d0f-9604-023c3fe1be5e) +2024-04-03 14:09:50.220+0000 INFO [o.n.d.i.DefaultIdentityModule] This instance is ServerId{54490f53} (54490f53-4b94-4d0f-9604-023c3fe1be5e) +2024-04-03 14:09:51.017+0000 INFO [o.n.d.d.DatabaseLifecycles] Creating 'DatabaseId{00000000[system]}'. +2024-04-03 14:09:51.238+0000 INFO [o.n.b.BoltServer] Using connector transport KQueue +2024-04-03 14:09:51.323+0000 INFO [o.n.b.BoltServer] Configured external Bolt connector with listener address localhost/127.0.0.1:9999 +2024-04-03 14:09:51.323+0000 INFO [o.n.b.BoltServer] Bolt server loaded +2024-04-03 14:09:51.337+0000 INFO [o.n.d.d.DatabaseLifecycles] Starting 'DatabaseId{00000000[system]}'. +2024-04-03 14:09:51.579+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [system/00000000] Scanning log file with version 0 for checkpoint entries +2024-04-03 14:09:51.631+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [system/00000000] Selected RecordFormat:PageAlignedV5_0[aligned-1.1] record format from store /Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system +2024-04-03 14:09:51.631+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [system/00000000] Selected format from the store files: RecordFormat:PageAlignedV5_0[aligned-1.1] +2024-04-03 14:09:52.287+0000 INFO [o.n.i.d.DiagnosticsManager] [system/00000000] + [system/00000000] ******************************************************************************** + [system/00000000] [ Database: system ] + [system/00000000] ******************************************************************************** + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Version ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] DBMS: community record-aligned-1.1 + [system/00000000] Kernel version: 5.16.0 + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Store files ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] Disk space on partition (Total / Free / Free %): 500068036608 / 109589286912 / 21 + [system/00000000] Storage files stored on file store: apfs + [system/00000000] Storage files: (filename : modification date - size) + [system/00000000] database_lock: 2024-04-03 04:12:32.900+0000 - 0B + [system/00000000] id-buffer.tmp.0: 2024-04-03 14:07:27.110+0000 - 0B + [system/00000000] neostore: 2024-04-03 04:12:32.662+0000 - 8.000KiB + [system/00000000] neostore.counts.db: 2024-04-03 14:09:52.104+0000 - 48.00KiB + [system/00000000] neostore.indexstats.db: 2024-04-03 14:09:52.155+0000 - 48.00KiB + [system/00000000] neostore.labeltokenstore.db: 2024-04-03 04:12:39.430+0000 - 8.000KiB + [system/00000000] neostore.labeltokenstore.db.id: 2024-04-03 14:09:52.027+0000 - 40.00KiB + [system/00000000] neostore.labeltokenstore.db.names: 2024-04-03 04:12:39.454+0000 - 8.000KiB + [system/00000000] neostore.labeltokenstore.db.names.id: 2024-04-03 14:09:52.014+0000 - 40.00KiB + [system/00000000] neostore.nodestore.db: 2024-04-03 04:12:39.416+0000 - 8.000KiB + [system/00000000] neostore.nodestore.db.id: 2024-04-03 14:09:51.824+0000 - 40.00KiB + [system/00000000] neostore.nodestore.db.labels: 2024-04-03 04:12:32.509+0000 - 8.000KiB + [system/00000000] neostore.nodestore.db.labels.id: 2024-04-03 14:09:51.794+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db: 2024-04-03 04:12:39.442+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.arrays: 2024-04-03 04:12:32.565+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.arrays.id: 2024-04-03 14:09:51.915+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.id: 2024-04-03 14:09:51.936+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.index: 2024-04-03 04:12:39.477+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.index.id: 2024-04-03 14:09:51.869+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.index.keys: 2024-04-03 04:12:39.464+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.index.keys.id: 2024-04-03 14:09:51.845+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.strings: 2024-04-03 04:12:39.367+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.strings.id: 2024-04-03 14:09:51.891+0000 - 40.00KiB + [system/00000000] neostore.relationshipgroupstore.db: 2024-04-03 04:12:32.640+0000 - 8.000KiB + [system/00000000] neostore.relationshipgroupstore.db.id: 2024-04-03 14:09:52.063+0000 - 40.00KiB + [system/00000000] neostore.relationshipgroupstore.degrees.db: 2024-04-03 14:09:52.132+0000 - 40.00KiB + [system/00000000] neostore.relationshipstore.db: 2024-04-03 04:12:39.378+0000 - 8.000KiB + [system/00000000] neostore.relationshipstore.db.id: 2024-04-03 14:09:51.955+0000 - 40.00KiB + [system/00000000] neostore.relationshiptypestore.db: 2024-04-03 04:12:39.405+0000 - 8.000KiB + [system/00000000] neostore.relationshiptypestore.db.id: 2024-04-03 14:09:51.996+0000 - 40.00KiB + [system/00000000] neostore.relationshiptypestore.db.names: 2024-04-03 04:12:39.392+0000 - 8.000KiB + [system/00000000] neostore.relationshiptypestore.db.names.id: 2024-04-03 14:09:51.973+0000 - 40.00KiB + [system/00000000] neostore.schemastore.db: 2024-04-03 04:12:39.490+0000 - 8.000KiB + [system/00000000] neostore.schemastore.db.id: 2024-04-03 14:09:52.046+0000 - 40.00KiB + [system/00000000] schema: + [system/00000000] index: + [system/00000000] range-1.0: + [system/00000000] 3: + [system/00000000] index-3: 2024-04-03 14:07:27.011+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.321+0000 - 48.00KiB + [system/00000000] 4: + [system/00000000] index-4: 2024-04-03 14:07:27.035+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.437+0000 - 48.00KiB + [system/00000000] 7: + [system/00000000] index-7: 2024-04-03 14:07:27.064+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.907+0000 - 48.00KiB + [system/00000000] 8: + [system/00000000] index-8: 2024-04-03 14:07:27.089+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.997+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.996+0000 - 192.0KiB + [system/00000000] token-lookup-1.0: + [system/00000000] 1: + [system/00000000] index-1: 2024-04-03 14:07:26.945+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:33.516+0000 - 48.00KiB + [system/00000000] 2: + [system/00000000] index-2: 2024-04-03 14:07:26.974+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:33.409+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:33.515+0000 - 96.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.321+0000 - 288.0KiB + [system/00000000] - Total: 2024-04-03 04:12:33.407+0000 - 288.0KiB + [system/00000000] Storage summary: + [system/00000000] Total size of store: 1.078MiB + [system/00000000] Total size of mapped files: 408.0KiB + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Transaction log ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] Transaction log files stored on file store: apfs + [system/00000000] Transaction log metadata: + [system/00000000] - current kernel version used in transactions: V5_15 + [system/00000000] - last committed transaction id: 37 + [system/00000000] Transaction log files: + [system/00000000] - existing transaction log versions: 0-0 + [system/00000000] - oldest transaction 2 found in log with version 0 + [system/00000000] - files: (filename : creation date - size) + [system/00000000] neostore.transaction.db.0: 2024-04-03 04:12:32.000+0000 - 19.26KiB + [system/00000000] - total size of files: 19.26KiB + [system/00000000] Checkpoint log files: + [system/00000000] - existing checkpoint log versions: 0-0 + [system/00000000] - last checkpoint: CheckpointInfo[transactionLogPosition=LogPosition{logVersion=0, byteOffset=19725}, storeId=StoreId{creationTime=1712117552660, random=4552926301767966796, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1}, checkpointEntryPosition=LogPosition{logVersion=0, byteOffset=360}, channelPositionAfterCheckpoint=LogPosition{logVersion=0, byteOffset=592}, checkpointFilePostReadPosition=LogPosition{logVersion=0, byteOffset=592}, kernelVersion=KernelVersion{V5_15,version=14}, kernelVersionByte=14, transactionId=TransactionId[transactionId=37, checksum=-1026009811, commitTimestamp=1712117555154, consensusIndex=-1], reason=Checkpoint triggered by "Database shutdown" @ txId: 37, consensusIndexInCheckpoint=true] + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Id usage ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] ArrayPropertyStore[neostore.nodestore.db.labels]: used=1 high=0 + [system/00000000] NodeStore[neostore.nodestore.db]: used=6 high=5 + [system/00000000] StringPropertyStore[neostore.propertystore.db.index.keys]: used=44 high=43 + [system/00000000] PropertyIndexStore[neostore.propertystore.db.index]: used=31 high=30 + [system/00000000] StringPropertyStore[neostore.propertystore.db.strings]: used=3 high=2 + [system/00000000] ArrayPropertyStore[neostore.propertystore.db.arrays]: used=1 high=0 + [system/00000000] PropertyStore[neostore.propertystore.db]: used=59 high=58 + [system/00000000] RelationshipStore[neostore.relationshipstore.db]: used=2 high=1 + [system/00000000] StringPropertyStore[neostore.relationshiptypestore.db.names]: used=2 high=1 + [system/00000000] RelationshipTypeStore[neostore.relationshiptypestore.db]: used=1 high=0 + [system/00000000] StringPropertyStore[neostore.labeltokenstore.db.names]: used=5 high=4 + [system/00000000] LabelTokenStore[neostore.labeltokenstore.db]: used=4 high=3 + [system/00000000] SchemaStore[neostore.schemastore.db]: used=11 high=10 + [system/00000000] RelationshipGroupStore[neostore.relationshipgroupstore.db]: used=1 high=0 + [system/00000000] NeoStore[neostore]: used=-1 high=-1 + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Metadata ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] EXTERNAL_STORE_UUID (Database identifier exposed as external store identity. Generated on creation and never updated): 8e4fd9af-0e04-47d8-a19c-cdb72dbda752 + [system/00000000] DATABASE_ID (The last used DatabaseId for this database): null + [system/00000000] LEGACY_STORE_VERSION (Legacy store format version. This field is used from 5.0 onwards only to distinguish non-migrated pre 5.0 metadata stores.): -3523014627327384477 + [system/00000000] STORE_ID (Store ID): StoreId{creationTime=1712117552660, random=4552926301767966796, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1} + [system/00000000] +2024-04-03 14:09:52.478+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:09:52.478+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:09:52.480+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:09:52.480+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:09:52.508+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:09:52.508+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:09:52.509+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:09:52.509+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:09:52.553+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 +2024-04-03 14:09:52.554+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 +2024-04-03 14:09:52.554+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:09:52.555+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 +2024-04-03 14:09:52.583+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 +2024-04-03 14:09:52.584+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 +2024-04-03 14:09:52.585+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:09:52.585+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 +2024-04-03 14:09:52.610+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 +2024-04-03 14:09:52.610+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 +2024-04-03 14:09:52.612+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:09:52.612+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 +2024-04-03 14:09:52.632+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 +2024-04-03 14:09:52.633+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 +2024-04-03 14:09:52.634+0000 INFO [o.n.k.i.a.i.IndexingService] [system/00000000] IndexingService.init: indexes not specifically mentioned above are ONLINE. Total 6 indexes. Processed in 185ms +2024-04-03 14:09:52.634+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:09:52.634+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 +2024-04-03 14:09:52.640+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] Requirement `Database unavailable` makes database system unavailable. +2024-04-03 14:09:52.641+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] DatabaseId{00000000[system]} is unavailable. +2024-04-03 14:09:52.704+0000 INFO [o.n.k.d.Database] [system/00000000] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/system/neostore.transaction.db.0] at version=0 +2024-04-03 14:09:52.707+0000 INFO [o.n.k.d.Database] [system/00000000] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/system/checkpoint.0] at version=0 +2024-04-03 14:09:52.708+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [system/00000000] Scanning log file with version 0 for checkpoint entries +2024-04-03 14:09:52.711+0000 INFO [o.n.k.i.a.i.IndexingService] [system/00000000] IndexingService.start: indexes not specifically mentioned above are ONLINE. Total 6 indexes. Processed in 0ms +2024-04-03 14:09:52.742+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] Fulfilling of requirement 'Database unavailable' makes database system available. +2024-04-03 14:09:52.742+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] DatabaseId{00000000[system]} is ready. +2024-04-03 14:09:52.846+0000 INFO [o.n.s.s.s.UserSecurityGraphComponent] Performing postInitialization step for component 'security-users' with version 4 and status CURRENT +2024-04-03 14:09:52.846+0000 INFO [o.n.s.s.s.UserSecurityGraphComponent] Updating the initial password in component 'security-users' +2024-04-03 14:09:52.859+0000 INFO [o.n.d.d.DatabaseLifecycles] Creating 'DatabaseId{fefd0874[neo4j]}'. +2024-04-03 14:09:52.862+0000 INFO [o.n.d.d.DatabaseLifecycles] Starting 'DatabaseId{fefd0874[neo4j]}'. +2024-04-03 14:09:52.882+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [neo4j/fefd0874] Scanning log file with version 0 for checkpoint entries +2024-04-03 14:09:52.950+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected RecordFormat:PageAlignedV5_0[aligned-1.1] record format from store /Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j +2024-04-03 14:09:52.950+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected format from the store files: RecordFormat:PageAlignedV5_0[aligned-1.1] +2024-04-03 14:09:53.208+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Transaction logs entries found after the last check point (which is at LogPosition{logVersion=0, byteOffset=3133138}). First observed transaction id: 40. +2024-04-03 14:09:53.253+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Recovery required from position LogPosition{logVersion=0, byteOffset=3133138} +2024-04-03 14:09:53.297+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] TransactionLogsRecovery +2024-04-03 14:09:53.331+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 10% completed +2024-04-03 14:09:53.345+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 20% completed +2024-04-03 14:09:53.349+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 30% completed +2024-04-03 14:09:53.366+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 40% completed +2024-04-03 14:09:53.385+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 50% completed +2024-04-03 14:09:53.411+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job registered: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:09:53.411+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job registered: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:09:53.411+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job started: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:09:53.412+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job started: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:09:53.412+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job finished: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:09:53.412+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job finished: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:09:53.413+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job closed: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:09:53.413+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job closed: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:09:53.433+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job registered: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:09:53.433+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job registered: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:09:53.433+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.init: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 46ms +2024-04-03 14:09:53.433+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job started: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:09:53.434+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job started: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:09:53.434+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job finished: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 Number of pages visited: 2, Number of tree nodes: 1, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:09:53.434+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job finished: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 Number of pages visited: 2, Number of tree nodes: 1, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:09:53.434+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job closed: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:09:53.435+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job closed: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:09:53.628+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 60% completed +2024-04-03 14:09:53.639+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 70% completed +2024-04-03 14:09:53.671+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 80% completed +2024-04-03 14:09:53.685+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 90% completed +2024-04-03 14:09:53.738+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 100% completed +2024-04-03 14:09:53.740+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Recovery in 'full' mode completed. Observed transactions range [first:40, last:45]: 6 transactions applied, 0 not completed transactions rolled back, skipped applying 0 previously rolled back transactions. Time spent: 531ms. +2024-04-03 14:09:53.743+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.start: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 0ms +2024-04-03 14:09:53.744+0000 INFO [o.n.k.i.t.l.c.CheckPointerImpl] [neo4j/fefd0874] Checkpoint triggered by "Recovery completed." @ txId: 45 checkpoint started... +2024-04-03 14:09:54.101+0000 INFO [o.n.k.i.t.l.c.CheckPointerImpl] [neo4j/fefd0874] Checkpoint triggered by "Recovery completed." @ txId: 45 checkpoint completed in 356ms. Checkpoint flushed 109 pages (0% of total available pages), in 41 IOs. Checkpoint performed with IO limit: unlimited, paused in total 0 times( 0 millis). +2024-04-03 14:09:54.104+0000 INFO [o.n.k.i.t.l.p.LogPruningImpl] [neo4j/fefd0874] No log version pruned. The strategy used was '2 days'. +2024-04-03 14:09:54.344+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [neo4j/fefd0874] Scanning log file with version 0 for checkpoint entries +2024-04-03 14:09:54.356+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected RecordFormat:PageAlignedV5_0[aligned-1.1] record format from store /Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j +2024-04-03 14:09:54.356+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected format from the store files: RecordFormat:PageAlignedV5_0[aligned-1.1] +2024-04-03 14:09:54.585+0000 INFO [o.n.i.d.DiagnosticsManager] [neo4j/fefd0874] + [neo4j/fefd0874] ******************************************************************************** + [neo4j/fefd0874] [ Database: neo4j ] + [neo4j/fefd0874] ******************************************************************************** + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Version ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] DBMS: community record-aligned-1.1 + [neo4j/fefd0874] Kernel version: 5.16.0 + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Store files ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] Disk space on partition (Total / Free / Free %): 500068036608 / 109589286912 / 21 + [neo4j/fefd0874] Storage files stored on file store: apfs + [neo4j/fefd0874] Storage files: (filename : modification date - size) + [neo4j/fefd0874] database_lock: 2024-04-03 04:12:35.327+0000 - 0B + [neo4j/fefd0874] id-buffer.tmp.0: 2024-04-03 14:07:31.907+0000 - 156.4KiB + [neo4j/fefd0874] neostore: 2024-04-03 04:12:35.301+0000 - 8.000KiB + [neo4j/fefd0874] neostore.counts.db: 2024-04-03 14:09:54.536+0000 - 48.00KiB + [neo4j/fefd0874] neostore.indexstats.db: 2024-04-03 14:09:54.560+0000 - 48.00KiB + [neo4j/fefd0874] neostore.labeltokenstore.db: 2024-04-03 04:53:01.953+0000 - 8.000KiB + [neo4j/fefd0874] neostore.labeltokenstore.db.id: 2024-04-03 14:09:54.496+0000 - 40.00KiB + [neo4j/fefd0874] neostore.labeltokenstore.db.names: 2024-04-03 04:53:01.900+0000 - 8.000KiB + [neo4j/fefd0874] neostore.labeltokenstore.db.names.id: 2024-04-03 14:09:54.484+0000 - 40.00KiB + [neo4j/fefd0874] neostore.nodestore.db: 2024-04-03 14:09:54.067+0000 - 152.0KiB + [neo4j/fefd0874] neostore.nodestore.db.id: 2024-04-03 14:09:54.371+0000 - 48.00KiB + [neo4j/fefd0874] neostore.nodestore.db.labels: 2024-04-03 04:12:35.189+0000 - 8.000KiB + [neo4j/fefd0874] neostore.nodestore.db.labels.id: 2024-04-03 14:09:54.358+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db: 2024-04-03 14:09:54.077+0000 - 408.0KiB + [neo4j/fefd0874] neostore.propertystore.db.arrays: 2024-04-03 04:12:35.234+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.arrays.id: 2024-04-03 14:09:54.420+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.id: 2024-04-03 14:09:54.431+0000 - 48.00KiB + [neo4j/fefd0874] neostore.propertystore.db.index: 2024-04-03 04:30:28.255+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.index.id: 2024-04-03 14:09:54.394+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.index.keys: 2024-04-03 04:30:28.242+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.index.keys.id: 2024-04-03 14:09:54.382+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.strings: 2024-04-03 04:12:35.222+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.strings.id: 2024-04-03 14:09:54.405+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshipgroupstore.db: 2024-04-03 04:12:35.289+0000 - 8.000KiB + [neo4j/fefd0874] neostore.relationshipgroupstore.db.id: 2024-04-03 14:09:54.523+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshipgroupstore.degrees.db: 2024-04-03 14:09:54.547+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshipstore.db: 2024-04-03 04:12:35.245+0000 - 0B + [neo4j/fefd0874] neostore.relationshipstore.db.id: 2024-04-03 14:09:54.445+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshiptypestore.db: 2024-04-03 04:12:35.259+0000 - 0B + [neo4j/fefd0874] neostore.relationshiptypestore.db.id: 2024-04-03 14:09:54.473+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshiptypestore.db.names: 2024-04-03 04:12:35.246+0000 - 8.000KiB + [neo4j/fefd0874] neostore.relationshiptypestore.db.names.id: 2024-04-03 14:09:54.457+0000 - 40.00KiB + [neo4j/fefd0874] neostore.schemastore.db: 2024-04-03 04:12:36.054+0000 - 8.000KiB + [neo4j/fefd0874] neostore.schemastore.db.id: 2024-04-03 14:09:54.509+0000 - 40.00KiB + [neo4j/fefd0874] schema: + [neo4j/fefd0874] index: + [neo4j/fefd0874] token-lookup-1.0: + [neo4j/fefd0874] 1: + [neo4j/fefd0874] index-1: 2024-04-03 14:09:54.105+0000 - 48.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.459+0000 - 48.00KiB + [neo4j/fefd0874] 2: + [neo4j/fefd0874] index-2: 2024-04-03 14:09:54.115+0000 - 40.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.390+0000 - 40.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.459+0000 - 88.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.390+0000 - 88.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.390+0000 - 88.00KiB + [neo4j/fefd0874] Storage summary: + [neo4j/fefd0874] Total size of store: 1.567MiB + [neo4j/fefd0874] Total size of mapped files: 736.0KiB + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Transaction log ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] Transaction log files stored on file store: apfs + [neo4j/fefd0874] Transaction log metadata: + [neo4j/fefd0874] - current kernel version used in transactions: V5_15 + [neo4j/fefd0874] - last committed transaction id: 45 + [neo4j/fefd0874] Transaction log files: + [neo4j/fefd0874] - existing transaction log versions: 0-0 + [neo4j/fefd0874] - oldest transaction 2 found in log with version 0 + [neo4j/fefd0874] - files: (filename : creation date - size) + [neo4j/fefd0874] neostore.transaction.db.0: 2024-04-03 04:12:35.000+0000 - 4.950MiB + [neo4j/fefd0874] - total size of files: 4.950MiB + [neo4j/fefd0874] Checkpoint log files: + [neo4j/fefd0874] - existing checkpoint log versions: 0-0 + [neo4j/fefd0874] - last checkpoint: CheckpointInfo[transactionLogPosition=LogPosition{logVersion=0, byteOffset=5190780}, storeId=StoreId{creationTime=1712117555300, random=260265064831090288, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1}, checkpointEntryPosition=LogPosition{logVersion=0, byteOffset=1984}, channelPositionAfterCheckpoint=LogPosition{logVersion=0, byteOffset=2216}, checkpointFilePostReadPosition=LogPosition{logVersion=0, byteOffset=2216}, kernelVersion=KernelVersion{V5_15,version=14}, kernelVersionByte=14, transactionId=TransactionId[transactionId=45, checksum=-444033535, commitTimestamp=1712153258234, consensusIndex=-1], reason=Checkpoint triggered by "Recovery completed." @ txId: 45, consensusIndexInCheckpoint=true] + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Id usage ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] ArrayPropertyStore[neostore.nodestore.db.labels]: used=1 high=0 + [neo4j/fefd0874] NodeStore[neostore.nodestore.db]: used=10003 high=10002 + [neo4j/fefd0874] StringPropertyStore[neostore.propertystore.db.index.keys]: used=23 high=22 + [neo4j/fefd0874] PropertyIndexStore[neostore.propertystore.db.index]: used=13 high=12 + [neo4j/fefd0874] StringPropertyStore[neostore.propertystore.db.strings]: used=1 high=0 + [neo4j/fefd0874] ArrayPropertyStore[neostore.propertystore.db.arrays]: used=1 high=0 + [neo4j/fefd0874] PropertyStore[neostore.propertystore.db]: used=10011 high=10010 + [neo4j/fefd0874] RelationshipStore[neostore.relationshipstore.db]: used=0 high=-1 + [neo4j/fefd0874] StringPropertyStore[neostore.relationshiptypestore.db.names]: used=1 high=0 + [neo4j/fefd0874] RelationshipTypeStore[neostore.relationshiptypestore.db]: used=0 high=-1 + [neo4j/fefd0874] StringPropertyStore[neostore.labeltokenstore.db.names]: used=8 high=7 + [neo4j/fefd0874] LabelTokenStore[neostore.labeltokenstore.db]: used=7 high=6 + [neo4j/fefd0874] SchemaStore[neostore.schemastore.db]: used=3 high=2 + [neo4j/fefd0874] RelationshipGroupStore[neostore.relationshipgroupstore.db]: used=1 high=0 + [neo4j/fefd0874] NeoStore[neostore]: used=-1 high=-1 + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Metadata ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] EXTERNAL_STORE_UUID (Database identifier exposed as external store identity. Generated on creation and never updated): 485f4e4f-d438-40c9-a4ed-0bc1099d976f + [neo4j/fefd0874] DATABASE_ID (The last used DatabaseId for this database): null + [neo4j/fefd0874] LEGACY_STORE_VERSION (Legacy store format version. This field is used from 5.0 onwards only to distinguish non-migrated pre 5.0 metadata stores.): -3523014627327384477 + [neo4j/fefd0874] STORE_ID (Store ID): StoreId{creationTime=1712117555300, random=260265064831090288, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1} + [neo4j/fefd0874] +2024-04-03 14:09:54.618+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.init: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 31ms +2024-04-03 14:09:54.621+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] Requirement `Database unavailable` makes database neo4j unavailable. +2024-04-03 14:09:54.621+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] DatabaseId{fefd0874[neo4j]} is unavailable. +2024-04-03 14:09:54.624+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/neo4j/neostore.transaction.db.0] at version=0 +2024-04-03 14:09:54.626+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/neo4j/checkpoint.0] at version=0 +2024-04-03 14:09:54.627+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [neo4j/fefd0874] Scanning log file with version 0 for checkpoint entries +2024-04-03 14:09:54.628+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.start: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 0ms +2024-04-03 14:09:54.630+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] Fulfilling of requirement 'Database unavailable' makes database neo4j available. +2024-04-03 14:09:54.630+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] DatabaseId{fefd0874[neo4j]} is ready. +2024-04-03 14:09:54.679+0000 INFO [o.n.b.p.c.c.n.SocketNettyConnector] Bolt enabled on localhost:9999. +2024-04-03 14:09:54.680+0000 INFO [o.n.b.BoltServer] Bolt server started +2024-04-03 14:09:54.683+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] id: 266B93A8C1445AE734BA77BB99FDF56964B6082641ED1A3E87435C6A5111E836 +2024-04-03 14:09:54.683+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] name: system +2024-04-03 14:09:54.683+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] creationDate: 2024-04-03T04:12:32.66Z +2024-04-03 14:10:23.880+0000 INFO [o.n.g.f.m.GlobalModule] Logging config in use: Embedded default config 'default-server-logs.xml' +2024-04-03 14:10:24.072+0000 WARN [o.n.k.i.JvmChecker] The max heap memory has not been configured. It is recommended that it is always explicitly configured, to ensure the system has a balanced configuration. Until then, a JVM computed heuristic of 4294967296 bytes is used instead. If you are running neo4j server, you need to configure server.memory.heap.max_size in neo4j.conf. If you are running neo4j embedded, you have to launch the JVM with -Xmx set to a value. You can run neo4j-admin server memory-recommendation for memory configuration suggestions. +2024-04-03 14:10:24.072+0000 WARN [o.n.k.i.JvmChecker] The initial heap memory has not been configured. It is recommended that it is always explicitly configured, to ensure the system has a balanced configuration. Until then, a JVM computed heuristic of 268435456 bytes is used instead. If you are running neo4j server, you need to configure server.memory.heap.initial_size in neo4j.conf. If you are running neo4j embedded, you have to launch the JVM with -Xms set to a value. You can run neo4j-admin server memory-recommendation for memory configuration suggestions. +2024-04-03 14:10:24.104+0000 WARN [o.n.i.p.PageCache] The server.memory.pagecache.size setting has not been configured. It is recommended that this setting is always explicitly configured, to ensure the system has a balanced configuration. Until then, a computed heuristic value of 6442450944 bytes will be used instead. Run `neo4j-admin memory-recommendation` for memory configuration suggestions. +2024-04-03 14:10:24.105+0000 WARN [o.n.i.p.PageCache] Reflection access to java.nio.DirectByteBuffer is not available, using fallback mode. This could have negative impact on performance and memory usage. Consider adding --add-opens=java.base/java.nio=ALL-UNNAMED to VM options. +2024-04-03 14:10:24.344+0000 INFO [o.n.i.d.DiagnosticsManager] + ******************************************************************************** + [ System diagnostics ] + ******************************************************************************** + -------------------------------------------------------------------------------- + [ System memory information ] + -------------------------------------------------------------------------------- + Total Physical memory: 16.00GiB + Free Physical memory: 539.8MiB + Committed virtual memory: 38.30GiB + Total swap space: 2.000GiB + Free swap space: 1.275GiB + + -------------------------------------------------------------------------------- + [ JVM memory information ] + -------------------------------------------------------------------------------- + Free memory: 147.1MiB + Total memory: 260.0MiB + Max memory: 4.000GiB + Garbage Collector: G1 Young Generation: [G1 Eden Space, G1 Survivor Space, G1 Old Gen] + Garbage Collector: G1 Old Generation: [G1 Eden Space, G1 Survivor Space, G1 Old Gen] + Memory Pool: CodeHeap 'non-nmethods' (Non-heap memory): committed=2.438MiB, used=1.209MiB, max=5.570MiB, threshold=0B + Memory Pool: Metaspace (Non-heap memory): committed=20.13MiB, used=19.75MiB, max=-1B, threshold=0B + Memory Pool: CodeHeap 'profiled nmethods' (Non-heap memory): committed=4.375MiB, used=4.354MiB, max=117.2MiB, threshold=0B + Memory Pool: Compressed Class Space (Non-heap memory): committed=2.313MiB, used=2.121MiB, max=1.000GiB, threshold=0B + Memory Pool: G1 Eden Space (Heap memory): committed=156.0MiB, used=86.00MiB, max=-1B, threshold=? + Memory Pool: G1 Old Gen (Heap memory): committed=100.0MiB, used=22.77MiB, max=4.000GiB, threshold=0B + Memory Pool: G1 Survivor Space (Heap memory): committed=4.000MiB, used=3.123MiB, max=-1B, threshold=? + Memory Pool: CodeHeap 'non-profiled nmethods' (Non-heap memory): committed=2.438MiB, used=1.348MiB, max=117.2MiB, threshold=0B + + -------------------------------------------------------------------------------- + [ Operating system information ] + -------------------------------------------------------------------------------- + Operating System: Mac OS X; version: 12.7.4; arch: x86_64; cpus: 8 + Max number of file descriptors: 10240 + Number of open file descriptors: 226 + Process id: 69974 + Byte order: LITTLE_ENDIAN + Local timezone: America/New_York + Memory page size: 4096 + Unaligned memory access allowed: true + + -------------------------------------------------------------------------------- + [ JVM information ] + -------------------------------------------------------------------------------- + VM Name: Java HotSpot(TM) 64-Bit Server VM + VM Vendor: Oracle Corporation + VM Version: 17.0.2+8-LTS-86 + JIT compiler: HotSpot 64-Bit Tiered Compilers + VM Arguments: [-Dvisualvm.id=82316928064678, -javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=58288:/Applications/IntelliJ IDEA.app/Contents/bin, -Dfile.encoding=UTF-8] + + -------------------------------------------------------------------------------- + [ Java classpath ] + -------------------------------------------------------------------------------- + [classpath] /Users/jnr6/.m2/repository/it/unimi/dsi/fastutil/8.5.13/fastutil-8.5.13.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-codec-http/4.1.101.Final/netty-codec-http-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/scala-library/2.13.11/scala-library-2.13.11.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-command-line/5.16.0/neo4j-command-line-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-epoll/4.1.101.Final/netty-transport-native-epoll-4.1.101.Final-linux-x86_64.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-common/4.1.101.Final/netty-common-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.16.0/jackson-databind-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-consistency-check/5.16.0/neo4j-consistency-check-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-values/5.16.0/neo4j-values-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-dbms/5.16.0/neo4j-dbms-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-analysis/9.6/asm-analysis-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-planner/5.16.0/neo4j-cypher-planner-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/antlr/antlr4-runtime/4.8/antlr4-runtime-4.8.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-api/3.2.13/docker-java-api-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/activation/jakarta.activation-api/1.2.1/jakarta.activation-api-1.2.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-planner-spi/5.16.0/neo4j-cypher-planner-spi-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-resource/5.16.0/neo4j-resource-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-servlet/10.0.17/jetty-servlet-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-cache/1.13.0/shiro-cache-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-javacc-parser/5.16.0/neo4j-cypher-javacc-parser-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/sun/istack/istack-commons-runtime/3.0.8/istack-commons-runtime-3.0.8.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-configuration2/2.9.0/commons-configuration2-2.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-compress/1.21/commons-compress-1.21.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/containers/jersey-container-servlet/2.34/jersey-container-servlet-2.34.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-kqueue/4.1.101.Final/netty-transport-native-kqueue-4.1.101.Final-osx-aarch_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-concurrent/5.16.0/neo4j-concurrent-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/mysql/1.17.4/mysql-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/mockito/mockito-core/5.7.0/mockito-core-5.7.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher/5.16.0/neo4j-cypher-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-capabilities/5.16.0/neo4j-capabilities-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-notifications/5.16.0/neo4j-notifications-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-import-util/5.16.0/neo4j-import-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-config/5.16.0/neo4j-cypher-config-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/containers/jersey-container-servlet-core/2.34/jersey-container-servlet-core-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-io/5.16.0/neo4j-io-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-locator/2.6.1/hk2-locator-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-lang3/3.13.0/commons-lang3-3.13.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.16.0/jackson-core-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/mysql/mysql-connector-j/8.2.0/mysql-connector-j-8.2.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-classes-epoll/4.1.101.Final/netty-transport-classes-epoll-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/objenesis/objenesis/3.3/objenesis-3.3.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-server/2.34/jersey-server-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-client/2.34/jersey-client-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-ast-factory/5.16.0/neo4j-cypher-ast-factory-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-handler/4.1.101.Final/netty-handler-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j/5.16.0/neo4j-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/google/code/gson/gson/2.9.0/gson-2.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-logging/5.16.0/neo4j-logging-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-webapp/10.0.17/jetty-webapp-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-core/9.8.0/lucene-core-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-kernel-api/5.16.0/neo4j-kernel-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcutil-jdk18on/1.76/bcutil-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/bitbucket/inkytonik/kiama/kiama_2.13/2.5.1/kiama_2.13-2.5.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-common/5.16.0/neo4j-common-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/junit/junit/4.13.2/junit-4.13.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-index/5.16.0/neo4j-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport/4.1.101.Final/netty-transport-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-util/9.6/asm-util-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/jctools/jctools-core/4.0.2/jctools-core-4.0.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-graphdb-api/5.16.0/neo4j-graphdb-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/jdbc/1.17.4/jdbc-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-runtime-util/5.16.0/neo4j-cypher-runtime-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/collections/eclipse-collections-api/11.1.0/eclipse-collections-api-11.1.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-unsafe/5.16.0/neo4j-unsafe-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-server/10.0.17/jetty-server-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcprov-jdk18on/1.76/bcprov-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-slotted-runtime/5.16.0/neo4j-cypher-slotted-runtime-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-layout-template-json/2.20.0/log4j-layout-template-json-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-fulltext-index/5.16.0/neo4j-fulltext-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/net/java/dev/jna/jna/5.8.0/jna-5.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-util/10.0.17/jetty-util-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-expressions/5.16.0/neo4j-expressions-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-transport/3.2.13/docker-java-transport-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/commons-logging/commons-logging/1.2/commons-logging-1.2.jar + [classpath] /Users/jnr6/IdeaProjects/policy-machine-core/target/classes + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-testkit/1.10.0/junit-platform-testkit-1.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-core/1.13.0/shiro-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-physical-planning/5.16.0/neo4j-cypher-physical-planning-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-storage-engine-util/5.16.0/neo4j-storage-engine-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-ast/5.16.0/neo4j-ast-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-core/2.20.0/log4j-core-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-params/5.9.0/junit-jupiter-params-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/external/jakarta.inject/2.6.1/jakarta.inject-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/inject/jersey-hk2/2.34/jersey-hk2-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/hamcrest/hamcrest/2.2/hamcrest-2.2.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jaxb/jaxb-runtime/2.3.2/jaxb-runtime-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-logical-plans/5.16.0/neo4j-cypher-logical-plans-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-xml/10.0.17/jetty-xml-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar + [classpath] /Users/jnr6/.m2/repository/org/codehaus/jettison/jettison/1.5.4/jettison-1.5.4.jar + [classpath] /Users/jnr6/.m2/repository/com/propensive/mercator_2.13/0.2.1/mercator_2.13-0.2.1.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jaxb/txw2/2.3.2/txw2-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-resolver/4.1.101.Final/netty-resolver-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar + [classpath] /Users/jnr6/.m2/repository/org/awaitility/awaitility/4.2.0/awaitility-4.2.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-codec/4.1.101.Final/netty-codec-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-buffer/4.1.101.Final/netty-buffer-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-hash/1.13.0/shiro-crypto-hash-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/info/picocli/picocli/4.7.5/picocli-4.7.5.jar + [classpath] /Users/jnr6/.m2/repository/com/profesorfalken/jPowerShell/3.0/jPowerShell-3.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-cipher/1.13.0/shiro-crypto-cipher-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-lang/1.13.0/shiro-lang-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-token-api/5.16.0/neo4j-token-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-bolt/5.16.0/neo4j-bolt-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-record-storage-engine/5.16.0/neo4j-record-storage-engine-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-epoll/4.1.101.Final/netty-transport-native-epoll-4.1.101.Final-linux-aarch_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-ir/5.16.0/neo4j-cypher-ir-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/test-utils/5.15.0/test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter/5.10.0/junit-jupiter-5.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/app/neo4j-server-test-utils/5.15.0/neo4j-server-test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/rnorth/duct-tape/duct-tape/1.0.8/duct-tape-1.0.8.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/modules/scala-collection-contrib_2.13/0.3.0/scala-collection-contrib_2.13-0.3.0.jar + [classpath] /Users/jnr6/.m2/repository/org/slf4j/slf4j-api/2.0.0/slf4j-api-2.0.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-analysis-common/9.8.0/lucene-analysis-common-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/com/propensive/magnolia_2.13/0.17.0/magnolia_2.13-0.17.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-event/1.13.0/shiro-event-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-api/2.20.0/log4j-api-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-classes-kqueue/4.1.101.Final/netty-transport-classes-kqueue-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/net/bytebuddy/byte-buddy-agent/1.14.9/byte-buddy-agent-1.14.9.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/validation/jakarta.validation-api/2.0.2/jakarta.validation-api-2.0.2.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/database-commons/1.17.4/database-commons-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-front-end/5.16.0/neo4j-front-end-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-procedure/5.16.0/neo4j-procedure-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-import-tool/5.16.0/neo4j-import-tool-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/ws/rs/jakarta.ws.rs-api/2.1.6/jakarta.ws.rs-api-2.1.6.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.10.3/jackson-annotations-2.10.3.jar + [classpath] /Users/jnr6/.m2/repository/com/google/protobuf/protobuf-java/3.21.9/protobuf-java-3.21.9.jar + [classpath] /Users/jnr6/.m2/repository/io/projectreactor/reactor-core/3.6.0/reactor-core-3.6.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-wal/5.16.0/neo4j-wal-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-ssl/5.16.0/neo4j-ssl-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-unix-common/4.1.101.Final/netty-transport-native-unix-common-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-config-core/1.13.0/shiro-config-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-codegen/5.16.0/neo4j-codegen-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-tree/9.6/asm-tree-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-rewriting/5.16.0/neo4j-rewriting-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-backward-codecs/9.8.0/lucene-backward-codecs-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-lock/5.16.0/neo4j-lock-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-schema/5.16.0/neo4j-schema-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/collections/eclipse-collections/11.1.0/eclipse-collections-11.1.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/luben/zstd-jni/1.5.5-10/zstd-jni-1.5.5-10.jar + [classpath] /Users/jnr6/.m2/repository/commons-codec/commons-codec/1.16.0/commons-codec-1.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/jaxrs/jackson-jaxrs-json-provider/2.16.0/jackson-jaxrs-json-provider-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-expression-evaluator/5.16.0/neo4j-cypher-expression-evaluator-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/testcontainers/1.17.4/testcontainers-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/test/neo4j-harness/5.15.0/neo4j-harness-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/javassist/javassist/3.25.0-GA/javassist-3.25.0-GA.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-core/1.13.0/shiro-crypto-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-commons/1.9.0/junit-platform-commons-1.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-utils/2.6.1/hk2-utils-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/io-test-utils/5.15.0/io-test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/annotations/5.16.0/annotations-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-interpreted-runtime/5.16.0/neo4j-cypher-interpreted-runtime-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-cache/5.16.0/neo4j-cypher-cache-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jetbrains/annotations/17.0.0/annotations-17.0.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-layout/5.16.0/neo4j-layout-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/reactivestreams/reactive-streams/1.0.4/reactive-streams-1.0.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/licensing-proxy/zstd-proxy/5.16.0/zstd-proxy-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-security/5.16.0/neo4j-security-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-common/2.34/jersey-common-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/scala-reflect/2.13.11/scala-reflect-2.13.11.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/junit-jupiter/1.17.4/junit-jupiter-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-random-values/5.15.0/neo4j-random-values-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-transport-zerodep/3.2.13/docker-java-transport-zerodep-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-diagnostics/5.16.0/neo4j-diagnostics-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-http/10.0.17/jetty-http-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/cypher-ast-factory/5.16.0/cypher-ast-factory-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-configuration/5.16.0/neo4j-configuration-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-exceptions/5.16.0/neo4j-exceptions-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-util/5.16.0/neo4j-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-id-generator/5.16.0/neo4j-id-generator-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/seancfoley/ipaddress/5.4.0/ipaddress-5.4.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-io/10.0.17/jetty-io-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/commons-io/commons-io/2.11.0/commons-io-2.11.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-queryparser/9.8.0/lucene-queryparser-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/xml/bind/jakarta.xml.bind-api/2.3.2/jakarta.xml.bind-api-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-kernel/5.16.0/neo4j-kernel-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-fabric/5.16.0/neo4j-fabric-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-spatial-index/5.16.0/neo4j-spatial-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-procedure-api/5.16.0/neo4j-procedure-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/sun/xml/fastinfoset/FastInfoset/1.2.16/FastInfoset-1.2.16.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-lucene-index/5.16.0/neo4j-lucene-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/net/bytebuddy/byte-buddy/1.14.9/byte-buddy-1.14.9.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-query-router/5.16.0/neo4j-query-router-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-csv/5.16.0/neo4j-csv-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/toolchain/jetty-servlet-api/4.0.6/jetty-servlet-api-4.0.6.jar + [classpath] /Users/jnr6/IdeaProjects/policy-machine-core/target/test-classes + [classpath] /Users/jnr6/.m2/repository/com/github/ben-manes/caffeine/caffeine/3.1.8/caffeine-3.1.8.jar + [classpath] /Users/jnr6/.m2/repository/com/profesorfalken/WMI4Java/1.6.3/WMI4Java-1.6.3.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/vintage/junit-vintage-engine/5.10.0/junit-vintage-engine-5.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-collections/5.16.0/neo4j-collections-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/assertj/assertj-core/3.24.2/assertj-core-3.24.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-graph-algo/5.16.0/neo4j-graph-algo-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.9.0/junit-jupiter-engine-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jvnet/staxex/stax-ex/1.8.1/stax-ex-1.8.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/app/neo4j-server/5.16.0/neo4j-server-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-monitoring/5.16.0/neo4j-monitoring-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-macros/5.16.0/neo4j-cypher-macros-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jprocesses/jProcesses/1.6.5/jProcesses-1.6.5.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-api/2.6.1/hk2-api-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.9.0/junit-jupiter-api-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-security/10.0.17/jetty-security-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcpkix-jdk18on/1.76/bcpkix-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-engine/1.9.0/junit-platform-engine-1.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-slf4j-provider/5.16.0/neo4j-slf4j-provider-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-kqueue/4.1.101.Final/netty-transport-native-kqueue-4.1.101.Final-osx-x86_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-data-collector/5.16.0/neo4j-data-collector-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/server-api/5.16.0/server-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-native/5.16.0/neo4j-native-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/module/jackson-module-jaxb-annotations/2.16.0/jackson-module-jaxb-annotations-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm/9.6/asm-9.6.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/jaxrs/jackson-jaxrs-base/2.16.0/jackson-jaxrs-base-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar + + -------------------------------------------------------------------------------- + [ Library path ] + -------------------------------------------------------------------------------- + /Users/jnr6/Library/Java/Extensions + /Library/Java/Extensions + /Network/Library/Java/Extensions + /System/Library/Java/Extensions + /usr/lib/java + /Users/jnr6/IdeaProjects/policy-machine-core + + -------------------------------------------------------------------------------- + [ System properties ] + -------------------------------------------------------------------------------- + sun.jnu.encoding = UTF-8 + sun.arch.data.model = 64 + user.timezone = America/New_York + visualvm.id = 82316928064678 + sun.java.launcher = SUN_STANDARD + user.country = US + sun.boot.library.path = /Library/Java/JavaVirtualMachines/jdk-17.0.2.jdk/Contents/Home/lib + sun.java.command = gov.nist.csd.pm.pap.neo4j.ImportTest + jdk.debug = release + sun.cpu.endian = little + user.home = /Users/jnr6 + user.language = en + file.separator = / + sun.management.compiler = HotSpot 64-Bit Tiered Compilers + user.name = jnr6 + path.separator = : + file.encoding = UTF-8 + jnidispatch.path = /Users/jnr6/Library/Caches/JNA/temp/jna1843128982761854704.tmp + jna.loaded = true + user.dir = /Users/jnr6/IdeaProjects/policy-machine-core + native.encoding = UTF-8 + sun.io.unicode.encoding = UnicodeBig + + -------------------------------------------------------------------------------- + [ (IANA) TimeZone database version ] + -------------------------------------------------------------------------------- + TimeZone version: 2021e (available for 601 zone identifiers) + + -------------------------------------------------------------------------------- + [ Network information ] + -------------------------------------------------------------------------------- + Interface utun2: + address: fe80:0:0:0:ce81:b1c:bd2c:69e%utun2 + Interface utun1: + address: fe80:0:0:0:bbf5:1c30:4238:57b2%utun1 + Interface utun0: + address: fe80:0:0:0:73be:4eb:3f31:a891%utun0 + Interface llw0: + address: fe80:0:0:0:c0a6:71ff:fe04:534c%llw0 + Interface awdl0: + address: fe80:0:0:0:c0a6:71ff:fe04:534c%awdl0 + Interface utun3: + address: 2610:20:6005:152:0:0:0:136%utun3 + address: fe80:0:0:0:aebc:32ff:fe94:d383%utun3 + address: 129.6.109.119 + Interface en0: + address: 192.168.1.247 + Interface lo0: + address: fe80:0:0:0:0:0:0:1%lo0 + address: 0:0:0:0:0:0:0:1%lo0 + address: 127.0.0.1 + + -------------------------------------------------------------------------------- + [ Native access information ] + -------------------------------------------------------------------------------- + Native access details: Native access is not available for current platform. + + -------------------------------------------------------------------------------- + [ DBMS config ] + -------------------------------------------------------------------------------- + DBMS provided settings: + server.bolt.enabled=true + server.bolt.listen_address=localhost:9999 + server.directories.neo4j_home=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + Directories in use: + server.directories.data=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data + server.directories.dumps.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/dumps + server.directories.import=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + server.directories.lib=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/lib + server.directories.licenses=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/licenses + server.directories.logs=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/logs + server.directories.neo4j_home=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + server.directories.plugins=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/plugins + server.directories.run=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/run + server.directories.script.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/scripts + server.directories.transaction.logs.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions + + -------------------------------------------------------------------------------- + [ Packaging ] + -------------------------------------------------------------------------------- + Could not read packaging info: java.nio.file.NoSuchFileException: /Users/jnr6/IdeaProjects/policy-machine-core/testdb/packaging_info + +2024-04-03 14:10:24.511+0000 INFO [o.n.d.i.DefaultIdentityModule] Found ServerId on disk: ServerId{54490f53} (54490f53-4b94-4d0f-9604-023c3fe1be5e) +2024-04-03 14:10:24.512+0000 INFO [o.n.d.i.DefaultIdentityModule] This instance is ServerId{54490f53} (54490f53-4b94-4d0f-9604-023c3fe1be5e) +2024-04-03 14:10:25.264+0000 INFO [o.n.d.d.DatabaseLifecycles] Creating 'DatabaseId{00000000[system]}'. +2024-04-03 14:10:25.474+0000 INFO [o.n.b.BoltServer] Using connector transport KQueue +2024-04-03 14:10:25.540+0000 INFO [o.n.b.BoltServer] Configured external Bolt connector with listener address localhost/127.0.0.1:9999 +2024-04-03 14:10:25.541+0000 INFO [o.n.b.BoltServer] Bolt server loaded +2024-04-03 14:10:25.555+0000 INFO [o.n.d.d.DatabaseLifecycles] Starting 'DatabaseId{00000000[system]}'. +2024-04-03 14:10:25.800+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [system/00000000] Scanning log file with version 0 for checkpoint entries +2024-04-03 14:10:25.851+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [system/00000000] Selected RecordFormat:PageAlignedV5_0[aligned-1.1] record format from store /Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system +2024-04-03 14:10:25.851+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [system/00000000] Selected format from the store files: RecordFormat:PageAlignedV5_0[aligned-1.1] +2024-04-03 14:10:26.458+0000 INFO [o.n.i.d.DiagnosticsManager] [system/00000000] + [system/00000000] ******************************************************************************** + [system/00000000] [ Database: system ] + [system/00000000] ******************************************************************************** + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Version ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] DBMS: community record-aligned-1.1 + [system/00000000] Kernel version: 5.16.0 + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Store files ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] Disk space on partition (Total / Free / Free %): 500068036608 / 109593931776 / 21 + [system/00000000] Storage files stored on file store: apfs + [system/00000000] Storage files: (filename : modification date - size) + [system/00000000] database_lock: 2024-04-03 04:12:32.900+0000 - 0B + [system/00000000] id-buffer.tmp.0: 2024-04-03 14:09:52.640+0000 - 0B + [system/00000000] neostore: 2024-04-03 04:12:32.662+0000 - 8.000KiB + [system/00000000] neostore.counts.db: 2024-04-03 14:10:26.301+0000 - 48.00KiB + [system/00000000] neostore.indexstats.db: 2024-04-03 14:10:26.345+0000 - 48.00KiB + [system/00000000] neostore.labeltokenstore.db: 2024-04-03 04:12:39.430+0000 - 8.000KiB + [system/00000000] neostore.labeltokenstore.db.id: 2024-04-03 14:10:26.230+0000 - 40.00KiB + [system/00000000] neostore.labeltokenstore.db.names: 2024-04-03 04:12:39.454+0000 - 8.000KiB + [system/00000000] neostore.labeltokenstore.db.names.id: 2024-04-03 14:10:26.209+0000 - 40.00KiB + [system/00000000] neostore.nodestore.db: 2024-04-03 04:12:39.416+0000 - 8.000KiB + [system/00000000] neostore.nodestore.db.id: 2024-04-03 14:10:26.039+0000 - 40.00KiB + [system/00000000] neostore.nodestore.db.labels: 2024-04-03 04:12:32.509+0000 - 8.000KiB + [system/00000000] neostore.nodestore.db.labels.id: 2024-04-03 14:10:26.017+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db: 2024-04-03 04:12:39.442+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.arrays: 2024-04-03 04:12:32.565+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.arrays.id: 2024-04-03 14:10:26.117+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.id: 2024-04-03 14:10:26.140+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.index: 2024-04-03 04:12:39.477+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.index.id: 2024-04-03 14:10:26.080+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.index.keys: 2024-04-03 04:12:39.464+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.index.keys.id: 2024-04-03 14:10:26.058+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.strings: 2024-04-03 04:12:39.367+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.strings.id: 2024-04-03 14:10:26.103+0000 - 40.00KiB + [system/00000000] neostore.relationshipgroupstore.db: 2024-04-03 04:12:32.640+0000 - 8.000KiB + [system/00000000] neostore.relationshipgroupstore.db.id: 2024-04-03 14:10:26.265+0000 - 40.00KiB + [system/00000000] neostore.relationshipgroupstore.degrees.db: 2024-04-03 14:10:26.328+0000 - 40.00KiB + [system/00000000] neostore.relationshipstore.db: 2024-04-03 04:12:39.378+0000 - 8.000KiB + [system/00000000] neostore.relationshipstore.db.id: 2024-04-03 14:10:26.160+0000 - 40.00KiB + [system/00000000] neostore.relationshiptypestore.db: 2024-04-03 04:12:39.405+0000 - 8.000KiB + [system/00000000] neostore.relationshiptypestore.db.id: 2024-04-03 14:10:26.192+0000 - 40.00KiB + [system/00000000] neostore.relationshiptypestore.db.names: 2024-04-03 04:12:39.392+0000 - 8.000KiB + [system/00000000] neostore.relationshiptypestore.db.names.id: 2024-04-03 14:10:26.176+0000 - 40.00KiB + [system/00000000] neostore.schemastore.db: 2024-04-03 04:12:39.490+0000 - 8.000KiB + [system/00000000] neostore.schemastore.db.id: 2024-04-03 14:10:26.247+0000 - 40.00KiB + [system/00000000] schema: + [system/00000000] index: + [system/00000000] range-1.0: + [system/00000000] 3: + [system/00000000] index-3: 2024-04-03 14:09:52.540+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.321+0000 - 48.00KiB + [system/00000000] 4: + [system/00000000] index-4: 2024-04-03 14:09:52.568+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.437+0000 - 48.00KiB + [system/00000000] 7: + [system/00000000] index-7: 2024-04-03 14:09:52.599+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.907+0000 - 48.00KiB + [system/00000000] 8: + [system/00000000] index-8: 2024-04-03 14:09:52.621+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.997+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.996+0000 - 192.0KiB + [system/00000000] token-lookup-1.0: + [system/00000000] 1: + [system/00000000] index-1: 2024-04-03 14:09:52.469+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:33.516+0000 - 48.00KiB + [system/00000000] 2: + [system/00000000] index-2: 2024-04-03 14:09:52.497+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:33.409+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:33.515+0000 - 96.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.321+0000 - 288.0KiB + [system/00000000] - Total: 2024-04-03 04:12:33.407+0000 - 288.0KiB + [system/00000000] Storage summary: + [system/00000000] Total size of store: 1.078MiB + [system/00000000] Total size of mapped files: 408.0KiB + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Transaction log ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] Transaction log files stored on file store: apfs + [system/00000000] Transaction log metadata: + [system/00000000] - current kernel version used in transactions: V5_15 + [system/00000000] - last committed transaction id: 37 + [system/00000000] Transaction log files: + [system/00000000] - existing transaction log versions: 0-0 + [system/00000000] - oldest transaction 2 found in log with version 0 + [system/00000000] - files: (filename : creation date - size) + [system/00000000] neostore.transaction.db.0: 2024-04-03 04:12:32.000+0000 - 19.26KiB + [system/00000000] - total size of files: 19.26KiB + [system/00000000] Checkpoint log files: + [system/00000000] - existing checkpoint log versions: 0-0 + [system/00000000] - last checkpoint: CheckpointInfo[transactionLogPosition=LogPosition{logVersion=0, byteOffset=19725}, storeId=StoreId{creationTime=1712117552660, random=4552926301767966796, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1}, checkpointEntryPosition=LogPosition{logVersion=0, byteOffset=360}, channelPositionAfterCheckpoint=LogPosition{logVersion=0, byteOffset=592}, checkpointFilePostReadPosition=LogPosition{logVersion=0, byteOffset=592}, kernelVersion=KernelVersion{V5_15,version=14}, kernelVersionByte=14, transactionId=TransactionId[transactionId=37, checksum=-1026009811, commitTimestamp=1712117555154, consensusIndex=-1], reason=Checkpoint triggered by "Database shutdown" @ txId: 37, consensusIndexInCheckpoint=true] + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Id usage ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] ArrayPropertyStore[neostore.nodestore.db.labels]: used=1 high=0 + [system/00000000] NodeStore[neostore.nodestore.db]: used=6 high=5 + [system/00000000] StringPropertyStore[neostore.propertystore.db.index.keys]: used=44 high=43 + [system/00000000] PropertyIndexStore[neostore.propertystore.db.index]: used=31 high=30 + [system/00000000] StringPropertyStore[neostore.propertystore.db.strings]: used=3 high=2 + [system/00000000] ArrayPropertyStore[neostore.propertystore.db.arrays]: used=1 high=0 + [system/00000000] PropertyStore[neostore.propertystore.db]: used=59 high=58 + [system/00000000] RelationshipStore[neostore.relationshipstore.db]: used=2 high=1 + [system/00000000] StringPropertyStore[neostore.relationshiptypestore.db.names]: used=2 high=1 + [system/00000000] RelationshipTypeStore[neostore.relationshiptypestore.db]: used=1 high=0 + [system/00000000] StringPropertyStore[neostore.labeltokenstore.db.names]: used=5 high=4 + [system/00000000] LabelTokenStore[neostore.labeltokenstore.db]: used=4 high=3 + [system/00000000] SchemaStore[neostore.schemastore.db]: used=11 high=10 + [system/00000000] RelationshipGroupStore[neostore.relationshipgroupstore.db]: used=1 high=0 + [system/00000000] NeoStore[neostore]: used=-1 high=-1 + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Metadata ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] EXTERNAL_STORE_UUID (Database identifier exposed as external store identity. Generated on creation and never updated): 8e4fd9af-0e04-47d8-a19c-cdb72dbda752 + [system/00000000] DATABASE_ID (The last used DatabaseId for this database): null + [system/00000000] LEGACY_STORE_VERSION (Legacy store format version. This field is used from 5.0 onwards only to distinguish non-migrated pre 5.0 metadata stores.): -3523014627327384477 + [system/00000000] STORE_ID (Store ID): StoreId{creationTime=1712117552660, random=4552926301767966796, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1} + [system/00000000] +2024-04-03 14:10:26.662+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:10:26.662+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:10:26.664+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:10:26.664+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:10:26.687+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:10:26.687+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:10:26.688+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:10:26.688+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:10:26.724+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 +2024-04-03 14:10:26.725+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 +2024-04-03 14:10:26.725+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:10:26.726+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 +2024-04-03 14:10:26.745+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 +2024-04-03 14:10:26.746+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 +2024-04-03 14:10:26.748+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:10:26.748+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 +2024-04-03 14:10:26.770+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 +2024-04-03 14:10:26.771+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 +2024-04-03 14:10:26.772+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:10:26.772+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 +2024-04-03 14:10:26.791+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 +2024-04-03 14:10:26.792+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 +2024-04-03 14:10:26.792+0000 INFO [o.n.k.i.a.i.IndexingService] [system/00000000] IndexingService.init: indexes not specifically mentioned above are ONLINE. Total 6 indexes. Processed in 162ms +2024-04-03 14:10:26.792+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:10:26.793+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 +2024-04-03 14:10:26.798+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] Requirement `Database unavailable` makes database system unavailable. +2024-04-03 14:10:26.798+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] DatabaseId{00000000[system]} is unavailable. +2024-04-03 14:10:26.852+0000 INFO [o.n.k.d.Database] [system/00000000] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/system/neostore.transaction.db.0] at version=0 +2024-04-03 14:10:26.855+0000 INFO [o.n.k.d.Database] [system/00000000] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/system/checkpoint.0] at version=0 +2024-04-03 14:10:26.856+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [system/00000000] Scanning log file with version 0 for checkpoint entries +2024-04-03 14:10:26.859+0000 INFO [o.n.k.i.a.i.IndexingService] [system/00000000] IndexingService.start: indexes not specifically mentioned above are ONLINE. Total 6 indexes. Processed in 0ms +2024-04-03 14:10:26.886+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] Fulfilling of requirement 'Database unavailable' makes database system available. +2024-04-03 14:10:26.886+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] DatabaseId{00000000[system]} is ready. +2024-04-03 14:10:26.988+0000 INFO [o.n.s.s.s.UserSecurityGraphComponent] Performing postInitialization step for component 'security-users' with version 4 and status CURRENT +2024-04-03 14:10:26.988+0000 INFO [o.n.s.s.s.UserSecurityGraphComponent] Updating the initial password in component 'security-users' +2024-04-03 14:10:27.001+0000 INFO [o.n.d.d.DatabaseLifecycles] Creating 'DatabaseId{fefd0874[neo4j]}'. +2024-04-03 14:10:27.004+0000 INFO [o.n.d.d.DatabaseLifecycles] Starting 'DatabaseId{fefd0874[neo4j]}'. +2024-04-03 14:10:27.025+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [neo4j/fefd0874] Scanning log file with version 0 for checkpoint entries +2024-04-03 14:10:27.102+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected RecordFormat:PageAlignedV5_0[aligned-1.1] record format from store /Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j +2024-04-03 14:10:27.102+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected format from the store files: RecordFormat:PageAlignedV5_0[aligned-1.1] +2024-04-03 14:10:27.386+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Transaction logs entries found after the last check point (which is at LogPosition{logVersion=0, byteOffset=5190780}). First observed transaction id: 46. +2024-04-03 14:10:27.432+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Recovery required from position LogPosition{logVersion=0, byteOffset=5190780} +2024-04-03 14:10:27.472+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] TransactionLogsRecovery +2024-04-03 14:10:27.508+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 10% completed +2024-04-03 14:10:27.520+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 20% completed +2024-04-03 14:10:27.525+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 30% completed +2024-04-03 14:10:27.544+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 40% completed +2024-04-03 14:10:27.579+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 50% completed +2024-04-03 14:10:27.609+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job registered: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:10:27.609+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job registered: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:10:27.609+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job started: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:10:27.610+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job started: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:10:27.610+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job finished: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:10:27.610+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job finished: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:10:27.611+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job closed: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:10:27.611+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job closed: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:10:27.631+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job registered: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:10:27.631+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job registered: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:10:27.631+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job started: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:10:27.631+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.init: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 50ms +2024-04-03 14:10:27.632+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job started: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:10:27.632+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job finished: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 Number of pages visited: 2, Number of tree nodes: 1, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:10:27.632+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job finished: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 Number of pages visited: 2, Number of tree nodes: 1, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:10:27.632+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job closed: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:10:27.633+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job closed: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:10:27.802+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 60% completed +2024-04-03 14:10:27.812+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 70% completed +2024-04-03 14:10:27.840+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 80% completed +2024-04-03 14:10:27.851+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 90% completed +2024-04-03 14:10:27.899+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 100% completed +2024-04-03 14:10:27.901+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Recovery in 'full' mode completed. Observed transactions range [first:46, last:51]: 6 transactions applied, 0 not completed transactions rolled back, skipped applying 0 previously rolled back transactions. Time spent: 514ms. +2024-04-03 14:10:27.903+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.start: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 0ms +2024-04-03 14:10:27.905+0000 INFO [o.n.k.i.t.l.c.CheckPointerImpl] [neo4j/fefd0874] Checkpoint triggered by "Recovery completed." @ txId: 51 checkpoint started... +2024-04-03 14:10:28.255+0000 INFO [o.n.k.i.t.l.c.CheckPointerImpl] [neo4j/fefd0874] Checkpoint triggered by "Recovery completed." @ txId: 51 checkpoint completed in 349ms. Checkpoint flushed 109 pages (0% of total available pages), in 40 IOs. Checkpoint performed with IO limit: unlimited, paused in total 0 times( 0 millis). +2024-04-03 14:10:28.259+0000 INFO [o.n.k.i.t.l.p.LogPruningImpl] [neo4j/fefd0874] No log version pruned. The strategy used was '2 days'. +2024-04-03 14:10:28.505+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [neo4j/fefd0874] Scanning log file with version 0 for checkpoint entries +2024-04-03 14:10:28.526+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected RecordFormat:PageAlignedV5_0[aligned-1.1] record format from store /Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j +2024-04-03 14:10:28.526+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected format from the store files: RecordFormat:PageAlignedV5_0[aligned-1.1] +2024-04-03 14:10:28.739+0000 INFO [o.n.i.d.DiagnosticsManager] [neo4j/fefd0874] + [neo4j/fefd0874] ******************************************************************************** + [neo4j/fefd0874] [ Database: neo4j ] + [neo4j/fefd0874] ******************************************************************************** + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Version ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] DBMS: community record-aligned-1.1 + [neo4j/fefd0874] Kernel version: 5.16.0 + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Store files ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] Disk space on partition (Total / Free / Free %): 500068036608 / 109592690688 / 21 + [neo4j/fefd0874] Storage files stored on file store: apfs + [neo4j/fefd0874] Storage files: (filename : modification date - size) + [neo4j/fefd0874] database_lock: 2024-04-03 04:12:35.327+0000 - 0B + [neo4j/fefd0874] id-buffer.tmp.0: 2024-04-03 14:09:56.633+0000 - 156.4KiB + [neo4j/fefd0874] neostore: 2024-04-03 04:12:35.301+0000 - 8.000KiB + [neo4j/fefd0874] neostore.counts.db: 2024-04-03 14:10:28.692+0000 - 48.00KiB + [neo4j/fefd0874] neostore.indexstats.db: 2024-04-03 14:10:28.713+0000 - 48.00KiB + [neo4j/fefd0874] neostore.labeltokenstore.db: 2024-04-03 04:53:01.953+0000 - 8.000KiB + [neo4j/fefd0874] neostore.labeltokenstore.db.id: 2024-04-03 14:10:28.657+0000 - 40.00KiB + [neo4j/fefd0874] neostore.labeltokenstore.db.names: 2024-04-03 04:53:01.900+0000 - 8.000KiB + [neo4j/fefd0874] neostore.labeltokenstore.db.names.id: 2024-04-03 14:10:28.646+0000 - 40.00KiB + [neo4j/fefd0874] neostore.nodestore.db: 2024-04-03 14:10:28.218+0000 - 152.0KiB + [neo4j/fefd0874] neostore.nodestore.db.id: 2024-04-03 14:10:28.540+0000 - 48.00KiB + [neo4j/fefd0874] neostore.nodestore.db.labels: 2024-04-03 04:12:35.189+0000 - 8.000KiB + [neo4j/fefd0874] neostore.nodestore.db.labels.id: 2024-04-03 14:10:28.528+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db: 2024-04-03 14:10:28.230+0000 - 408.0KiB + [neo4j/fefd0874] neostore.propertystore.db.arrays: 2024-04-03 04:12:35.234+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.arrays.id: 2024-04-03 14:10:28.586+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.id: 2024-04-03 14:10:28.602+0000 - 48.00KiB + [neo4j/fefd0874] neostore.propertystore.db.index: 2024-04-03 04:30:28.255+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.index.id: 2024-04-03 14:10:28.563+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.index.keys: 2024-04-03 04:30:28.242+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.index.keys.id: 2024-04-03 14:10:28.550+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.strings: 2024-04-03 04:12:35.222+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.strings.id: 2024-04-03 14:10:28.574+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshipgroupstore.db: 2024-04-03 04:12:35.289+0000 - 8.000KiB + [neo4j/fefd0874] neostore.relationshipgroupstore.db.id: 2024-04-03 14:10:28.678+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshipgroupstore.degrees.db: 2024-04-03 14:10:28.702+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshipstore.db: 2024-04-03 04:12:35.245+0000 - 0B + [neo4j/fefd0874] neostore.relationshipstore.db.id: 2024-04-03 14:10:28.612+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshiptypestore.db: 2024-04-03 04:12:35.259+0000 - 0B + [neo4j/fefd0874] neostore.relationshiptypestore.db.id: 2024-04-03 14:10:28.635+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshiptypestore.db.names: 2024-04-03 04:12:35.246+0000 - 8.000KiB + [neo4j/fefd0874] neostore.relationshiptypestore.db.names.id: 2024-04-03 14:10:28.624+0000 - 40.00KiB + [neo4j/fefd0874] neostore.schemastore.db: 2024-04-03 04:12:36.054+0000 - 8.000KiB + [neo4j/fefd0874] neostore.schemastore.db.id: 2024-04-03 14:10:28.666+0000 - 40.00KiB + [neo4j/fefd0874] schema: + [neo4j/fefd0874] index: + [neo4j/fefd0874] token-lookup-1.0: + [neo4j/fefd0874] 1: + [neo4j/fefd0874] index-1: 2024-04-03 14:10:28.260+0000 - 48.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.459+0000 - 48.00KiB + [neo4j/fefd0874] 2: + [neo4j/fefd0874] index-2: 2024-04-03 14:10:28.272+0000 - 40.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.390+0000 - 40.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.459+0000 - 88.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.390+0000 - 88.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.390+0000 - 88.00KiB + [neo4j/fefd0874] Storage summary: + [neo4j/fefd0874] Total size of store: 1.567MiB + [neo4j/fefd0874] Total size of mapped files: 736.0KiB + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Transaction log ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] Transaction log files stored on file store: apfs + [neo4j/fefd0874] Transaction log metadata: + [neo4j/fefd0874] - current kernel version used in transactions: V5_15 + [neo4j/fefd0874] - last committed transaction id: 51 + [neo4j/fefd0874] Transaction log files: + [neo4j/fefd0874] - existing transaction log versions: 0-0 + [neo4j/fefd0874] - oldest transaction 2 found in log with version 0 + [neo4j/fefd0874] - files: (filename : creation date - size) + [neo4j/fefd0874] neostore.transaction.db.0: 2024-04-03 04:12:35.000+0000 - 6.913MiB + [neo4j/fefd0874] - total size of files: 6.913MiB + [neo4j/fefd0874] Checkpoint log files: + [neo4j/fefd0874] - existing checkpoint log versions: 0-0 + [neo4j/fefd0874] - last checkpoint: CheckpointInfo[transactionLogPosition=LogPosition{logVersion=0, byteOffset=7248422}, storeId=StoreId{creationTime=1712117555300, random=260265064831090288, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1}, checkpointEntryPosition=LogPosition{logVersion=0, byteOffset=2216}, channelPositionAfterCheckpoint=LogPosition{logVersion=0, byteOffset=2448}, checkpointFilePostReadPosition=LogPosition{logVersion=0, byteOffset=2448}, kernelVersion=KernelVersion{V5_15,version=14}, kernelVersionByte=14, transactionId=TransactionId[transactionId=51, checksum=133469850, commitTimestamp=1712153402624, consensusIndex=-1], reason=Checkpoint triggered by "Recovery completed." @ txId: 51, consensusIndexInCheckpoint=true] + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Id usage ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] ArrayPropertyStore[neostore.nodestore.db.labels]: used=1 high=0 + [neo4j/fefd0874] NodeStore[neostore.nodestore.db]: used=10003 high=10002 + [neo4j/fefd0874] StringPropertyStore[neostore.propertystore.db.index.keys]: used=23 high=22 + [neo4j/fefd0874] PropertyIndexStore[neostore.propertystore.db.index]: used=13 high=12 + [neo4j/fefd0874] StringPropertyStore[neostore.propertystore.db.strings]: used=1 high=0 + [neo4j/fefd0874] ArrayPropertyStore[neostore.propertystore.db.arrays]: used=1 high=0 + [neo4j/fefd0874] PropertyStore[neostore.propertystore.db]: used=10011 high=10010 + [neo4j/fefd0874] RelationshipStore[neostore.relationshipstore.db]: used=0 high=-1 + [neo4j/fefd0874] StringPropertyStore[neostore.relationshiptypestore.db.names]: used=1 high=0 + [neo4j/fefd0874] RelationshipTypeStore[neostore.relationshiptypestore.db]: used=0 high=-1 + [neo4j/fefd0874] StringPropertyStore[neostore.labeltokenstore.db.names]: used=8 high=7 + [neo4j/fefd0874] LabelTokenStore[neostore.labeltokenstore.db]: used=7 high=6 + [neo4j/fefd0874] SchemaStore[neostore.schemastore.db]: used=3 high=2 + [neo4j/fefd0874] RelationshipGroupStore[neostore.relationshipgroupstore.db]: used=1 high=0 + [neo4j/fefd0874] NeoStore[neostore]: used=-1 high=-1 + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Metadata ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] EXTERNAL_STORE_UUID (Database identifier exposed as external store identity. Generated on creation and never updated): 485f4e4f-d438-40c9-a4ed-0bc1099d976f + [neo4j/fefd0874] DATABASE_ID (The last used DatabaseId for this database): null + [neo4j/fefd0874] LEGACY_STORE_VERSION (Legacy store format version. This field is used from 5.0 onwards only to distinguish non-migrated pre 5.0 metadata stores.): -3523014627327384477 + [neo4j/fefd0874] STORE_ID (Store ID): StoreId{creationTime=1712117555300, random=260265064831090288, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1} + [neo4j/fefd0874] +2024-04-03 14:10:28.772+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.init: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 31ms +2024-04-03 14:10:28.775+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] Requirement `Database unavailable` makes database neo4j unavailable. +2024-04-03 14:10:28.775+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] DatabaseId{fefd0874[neo4j]} is unavailable. +2024-04-03 14:10:28.778+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/neo4j/neostore.transaction.db.0] at version=0 +2024-04-03 14:10:28.780+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/neo4j/checkpoint.0] at version=0 +2024-04-03 14:10:28.781+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [neo4j/fefd0874] Scanning log file with version 0 for checkpoint entries +2024-04-03 14:10:28.782+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.start: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 0ms +2024-04-03 14:10:28.783+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] Fulfilling of requirement 'Database unavailable' makes database neo4j available. +2024-04-03 14:10:28.783+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] DatabaseId{fefd0874[neo4j]} is ready. +2024-04-03 14:10:28.819+0000 INFO [o.n.b.p.c.c.n.SocketNettyConnector] Bolt enabled on localhost:9999. +2024-04-03 14:10:28.820+0000 INFO [o.n.b.BoltServer] Bolt server started +2024-04-03 14:10:28.822+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] id: 266B93A8C1445AE734BA77BB99FDF56964B6082641ED1A3E87435C6A5111E836 +2024-04-03 14:10:28.822+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] name: system +2024-04-03 14:10:28.822+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] creationDate: 2024-04-03T04:12:32.66Z +2024-04-03 14:15:56.006+0000 INFO [o.n.g.f.m.GlobalModule] Logging config in use: Embedded default config 'default-server-logs.xml' +2024-04-03 14:15:56.161+0000 WARN [o.n.k.i.JvmChecker] The max heap memory has not been configured. It is recommended that it is always explicitly configured, to ensure the system has a balanced configuration. Until then, a JVM computed heuristic of 4294967296 bytes is used instead. If you are running neo4j server, you need to configure server.memory.heap.max_size in neo4j.conf. If you are running neo4j embedded, you have to launch the JVM with -Xmx set to a value. You can run neo4j-admin server memory-recommendation for memory configuration suggestions. +2024-04-03 14:15:56.161+0000 WARN [o.n.k.i.JvmChecker] The initial heap memory has not been configured. It is recommended that it is always explicitly configured, to ensure the system has a balanced configuration. Until then, a JVM computed heuristic of 268435456 bytes is used instead. If you are running neo4j server, you need to configure server.memory.heap.initial_size in neo4j.conf. If you are running neo4j embedded, you have to launch the JVM with -Xms set to a value. You can run neo4j-admin server memory-recommendation for memory configuration suggestions. +2024-04-03 14:15:56.190+0000 WARN [o.n.i.p.PageCache] The server.memory.pagecache.size setting has not been configured. It is recommended that this setting is always explicitly configured, to ensure the system has a balanced configuration. Until then, a computed heuristic value of 6442450944 bytes will be used instead. Run `neo4j-admin memory-recommendation` for memory configuration suggestions. +2024-04-03 14:15:56.190+0000 WARN [o.n.i.p.PageCache] Reflection access to java.nio.DirectByteBuffer is not available, using fallback mode. This could have negative impact on performance and memory usage. Consider adding --add-opens=java.base/java.nio=ALL-UNNAMED to VM options. +2024-04-03 14:15:56.518+0000 INFO [o.n.i.d.DiagnosticsManager] + ******************************************************************************** + [ System diagnostics ] + ******************************************************************************** + -------------------------------------------------------------------------------- + [ System memory information ] + -------------------------------------------------------------------------------- + Total Physical memory: 16.00GiB + Free Physical memory: 589.6MiB + Committed virtual memory: 38.29GiB + Total swap space: 2.000GiB + Free swap space: 1.275GiB + + -------------------------------------------------------------------------------- + [ JVM memory information ] + -------------------------------------------------------------------------------- + Free memory: 152.1MiB + Total memory: 260.0MiB + Max memory: 4.000GiB + Garbage Collector: G1 Young Generation: [G1 Eden Space, G1 Survivor Space, G1 Old Gen] + Garbage Collector: G1 Old Generation: [G1 Eden Space, G1 Survivor Space, G1 Old Gen] + Memory Pool: CodeHeap 'non-nmethods' (Non-heap memory): committed=2.438MiB, used=1.215MiB, max=5.570MiB, threshold=0B + Memory Pool: Metaspace (Non-heap memory): committed=20.13MiB, used=19.77MiB, max=-1B, threshold=0B + Memory Pool: CodeHeap 'profiled nmethods' (Non-heap memory): committed=4.500MiB, used=4.476MiB, max=117.2MiB, threshold=0B + Memory Pool: Compressed Class Space (Non-heap memory): committed=2.313MiB, used=2.121MiB, max=1.000GiB, threshold=0B + Memory Pool: G1 Eden Space (Heap memory): committed=154.0MiB, used=80.00MiB, max=-1B, threshold=? + Memory Pool: G1 Old Gen (Heap memory): committed=100.0MiB, used=22.81MiB, max=4.000GiB, threshold=0B + Memory Pool: G1 Survivor Space (Heap memory): committed=6.000MiB, used=4.099MiB, max=-1B, threshold=? + Memory Pool: CodeHeap 'non-profiled nmethods' (Non-heap memory): committed=2.438MiB, used=1.286MiB, max=117.2MiB, threshold=0B + + -------------------------------------------------------------------------------- + [ Operating system information ] + -------------------------------------------------------------------------------- + Operating System: Mac OS X; version: 12.7.4; arch: x86_64; cpus: 8 + Max number of file descriptors: 10240 + Number of open file descriptors: 226 + Process id: 70470 + Byte order: LITTLE_ENDIAN + Local timezone: America/New_York + Memory page size: 4096 + Unaligned memory access allowed: true + + -------------------------------------------------------------------------------- + [ JVM information ] + -------------------------------------------------------------------------------- + VM Name: Java HotSpot(TM) 64-Bit Server VM + VM Vendor: Oracle Corporation + VM Version: 17.0.2+8-LTS-86 + JIT compiler: HotSpot 64-Bit Tiered Compilers + VM Arguments: [-Dvisualvm.id=82649297547112, -javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=58355:/Applications/IntelliJ IDEA.app/Contents/bin, -Dfile.encoding=UTF-8] + + -------------------------------------------------------------------------------- + [ Java classpath ] + -------------------------------------------------------------------------------- + [classpath] /Users/jnr6/.m2/repository/it/unimi/dsi/fastutil/8.5.13/fastutil-8.5.13.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-codec-http/4.1.101.Final/netty-codec-http-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/scala-library/2.13.11/scala-library-2.13.11.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-command-line/5.16.0/neo4j-command-line-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-epoll/4.1.101.Final/netty-transport-native-epoll-4.1.101.Final-linux-x86_64.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-common/4.1.101.Final/netty-common-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.16.0/jackson-databind-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-consistency-check/5.16.0/neo4j-consistency-check-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-values/5.16.0/neo4j-values-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-dbms/5.16.0/neo4j-dbms-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-analysis/9.6/asm-analysis-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-planner/5.16.0/neo4j-cypher-planner-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/antlr/antlr4-runtime/4.8/antlr4-runtime-4.8.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-api/3.2.13/docker-java-api-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/activation/jakarta.activation-api/1.2.1/jakarta.activation-api-1.2.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-planner-spi/5.16.0/neo4j-cypher-planner-spi-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-resource/5.16.0/neo4j-resource-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-servlet/10.0.17/jetty-servlet-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-cache/1.13.0/shiro-cache-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-javacc-parser/5.16.0/neo4j-cypher-javacc-parser-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/sun/istack/istack-commons-runtime/3.0.8/istack-commons-runtime-3.0.8.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-configuration2/2.9.0/commons-configuration2-2.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-compress/1.21/commons-compress-1.21.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/containers/jersey-container-servlet/2.34/jersey-container-servlet-2.34.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-kqueue/4.1.101.Final/netty-transport-native-kqueue-4.1.101.Final-osx-aarch_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-concurrent/5.16.0/neo4j-concurrent-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/mysql/1.17.4/mysql-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/mockito/mockito-core/5.7.0/mockito-core-5.7.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher/5.16.0/neo4j-cypher-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-capabilities/5.16.0/neo4j-capabilities-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-notifications/5.16.0/neo4j-notifications-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-import-util/5.16.0/neo4j-import-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-config/5.16.0/neo4j-cypher-config-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/containers/jersey-container-servlet-core/2.34/jersey-container-servlet-core-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-io/5.16.0/neo4j-io-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-locator/2.6.1/hk2-locator-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-lang3/3.13.0/commons-lang3-3.13.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.16.0/jackson-core-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/mysql/mysql-connector-j/8.2.0/mysql-connector-j-8.2.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-classes-epoll/4.1.101.Final/netty-transport-classes-epoll-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/objenesis/objenesis/3.3/objenesis-3.3.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-server/2.34/jersey-server-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-client/2.34/jersey-client-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-ast-factory/5.16.0/neo4j-cypher-ast-factory-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-handler/4.1.101.Final/netty-handler-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j/5.16.0/neo4j-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/google/code/gson/gson/2.9.0/gson-2.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-logging/5.16.0/neo4j-logging-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-webapp/10.0.17/jetty-webapp-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-core/9.8.0/lucene-core-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-kernel-api/5.16.0/neo4j-kernel-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcutil-jdk18on/1.76/bcutil-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/bitbucket/inkytonik/kiama/kiama_2.13/2.5.1/kiama_2.13-2.5.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-common/5.16.0/neo4j-common-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/junit/junit/4.13.2/junit-4.13.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-index/5.16.0/neo4j-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport/4.1.101.Final/netty-transport-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-util/9.6/asm-util-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/jctools/jctools-core/4.0.2/jctools-core-4.0.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-graphdb-api/5.16.0/neo4j-graphdb-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/jdbc/1.17.4/jdbc-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-runtime-util/5.16.0/neo4j-cypher-runtime-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/collections/eclipse-collections-api/11.1.0/eclipse-collections-api-11.1.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-unsafe/5.16.0/neo4j-unsafe-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-server/10.0.17/jetty-server-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcprov-jdk18on/1.76/bcprov-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-slotted-runtime/5.16.0/neo4j-cypher-slotted-runtime-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-layout-template-json/2.20.0/log4j-layout-template-json-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-fulltext-index/5.16.0/neo4j-fulltext-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/net/java/dev/jna/jna/5.8.0/jna-5.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-util/10.0.17/jetty-util-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-expressions/5.16.0/neo4j-expressions-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-transport/3.2.13/docker-java-transport-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/commons-logging/commons-logging/1.2/commons-logging-1.2.jar + [classpath] /Users/jnr6/IdeaProjects/policy-machine-core/target/classes + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-testkit/1.10.0/junit-platform-testkit-1.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-core/1.13.0/shiro-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-physical-planning/5.16.0/neo4j-cypher-physical-planning-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-storage-engine-util/5.16.0/neo4j-storage-engine-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-ast/5.16.0/neo4j-ast-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-core/2.20.0/log4j-core-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-params/5.9.0/junit-jupiter-params-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/external/jakarta.inject/2.6.1/jakarta.inject-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/inject/jersey-hk2/2.34/jersey-hk2-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/hamcrest/hamcrest/2.2/hamcrest-2.2.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jaxb/jaxb-runtime/2.3.2/jaxb-runtime-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-logical-plans/5.16.0/neo4j-cypher-logical-plans-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-xml/10.0.17/jetty-xml-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar + [classpath] /Users/jnr6/.m2/repository/org/codehaus/jettison/jettison/1.5.4/jettison-1.5.4.jar + [classpath] /Users/jnr6/.m2/repository/com/propensive/mercator_2.13/0.2.1/mercator_2.13-0.2.1.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jaxb/txw2/2.3.2/txw2-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-resolver/4.1.101.Final/netty-resolver-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar + [classpath] /Users/jnr6/.m2/repository/org/awaitility/awaitility/4.2.0/awaitility-4.2.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-codec/4.1.101.Final/netty-codec-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-buffer/4.1.101.Final/netty-buffer-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-hash/1.13.0/shiro-crypto-hash-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/info/picocli/picocli/4.7.5/picocli-4.7.5.jar + [classpath] /Users/jnr6/.m2/repository/com/profesorfalken/jPowerShell/3.0/jPowerShell-3.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-cipher/1.13.0/shiro-crypto-cipher-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-lang/1.13.0/shiro-lang-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-token-api/5.16.0/neo4j-token-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-bolt/5.16.0/neo4j-bolt-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-record-storage-engine/5.16.0/neo4j-record-storage-engine-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-epoll/4.1.101.Final/netty-transport-native-epoll-4.1.101.Final-linux-aarch_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-ir/5.16.0/neo4j-cypher-ir-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/test-utils/5.15.0/test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter/5.10.0/junit-jupiter-5.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/app/neo4j-server-test-utils/5.15.0/neo4j-server-test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/rnorth/duct-tape/duct-tape/1.0.8/duct-tape-1.0.8.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/modules/scala-collection-contrib_2.13/0.3.0/scala-collection-contrib_2.13-0.3.0.jar + [classpath] /Users/jnr6/.m2/repository/org/slf4j/slf4j-api/2.0.0/slf4j-api-2.0.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-analysis-common/9.8.0/lucene-analysis-common-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/com/propensive/magnolia_2.13/0.17.0/magnolia_2.13-0.17.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-event/1.13.0/shiro-event-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-api/2.20.0/log4j-api-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-classes-kqueue/4.1.101.Final/netty-transport-classes-kqueue-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/net/bytebuddy/byte-buddy-agent/1.14.9/byte-buddy-agent-1.14.9.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/validation/jakarta.validation-api/2.0.2/jakarta.validation-api-2.0.2.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/database-commons/1.17.4/database-commons-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-front-end/5.16.0/neo4j-front-end-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-procedure/5.16.0/neo4j-procedure-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-import-tool/5.16.0/neo4j-import-tool-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/ws/rs/jakarta.ws.rs-api/2.1.6/jakarta.ws.rs-api-2.1.6.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.10.3/jackson-annotations-2.10.3.jar + [classpath] /Users/jnr6/.m2/repository/com/google/protobuf/protobuf-java/3.21.9/protobuf-java-3.21.9.jar + [classpath] /Users/jnr6/.m2/repository/io/projectreactor/reactor-core/3.6.0/reactor-core-3.6.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-wal/5.16.0/neo4j-wal-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-ssl/5.16.0/neo4j-ssl-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-unix-common/4.1.101.Final/netty-transport-native-unix-common-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-config-core/1.13.0/shiro-config-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-codegen/5.16.0/neo4j-codegen-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-tree/9.6/asm-tree-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-rewriting/5.16.0/neo4j-rewriting-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-backward-codecs/9.8.0/lucene-backward-codecs-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-lock/5.16.0/neo4j-lock-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-schema/5.16.0/neo4j-schema-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/collections/eclipse-collections/11.1.0/eclipse-collections-11.1.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/luben/zstd-jni/1.5.5-10/zstd-jni-1.5.5-10.jar + [classpath] /Users/jnr6/.m2/repository/commons-codec/commons-codec/1.16.0/commons-codec-1.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/jaxrs/jackson-jaxrs-json-provider/2.16.0/jackson-jaxrs-json-provider-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-expression-evaluator/5.16.0/neo4j-cypher-expression-evaluator-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/testcontainers/1.17.4/testcontainers-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/test/neo4j-harness/5.15.0/neo4j-harness-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/javassist/javassist/3.25.0-GA/javassist-3.25.0-GA.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-core/1.13.0/shiro-crypto-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-commons/1.9.0/junit-platform-commons-1.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-utils/2.6.1/hk2-utils-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/io-test-utils/5.15.0/io-test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/annotations/5.16.0/annotations-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-interpreted-runtime/5.16.0/neo4j-cypher-interpreted-runtime-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-cache/5.16.0/neo4j-cypher-cache-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jetbrains/annotations/17.0.0/annotations-17.0.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-layout/5.16.0/neo4j-layout-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/reactivestreams/reactive-streams/1.0.4/reactive-streams-1.0.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/licensing-proxy/zstd-proxy/5.16.0/zstd-proxy-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-security/5.16.0/neo4j-security-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-common/2.34/jersey-common-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/scala-reflect/2.13.11/scala-reflect-2.13.11.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/junit-jupiter/1.17.4/junit-jupiter-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-random-values/5.15.0/neo4j-random-values-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-transport-zerodep/3.2.13/docker-java-transport-zerodep-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-diagnostics/5.16.0/neo4j-diagnostics-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-http/10.0.17/jetty-http-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/cypher-ast-factory/5.16.0/cypher-ast-factory-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-configuration/5.16.0/neo4j-configuration-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-exceptions/5.16.0/neo4j-exceptions-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-util/5.16.0/neo4j-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-id-generator/5.16.0/neo4j-id-generator-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/seancfoley/ipaddress/5.4.0/ipaddress-5.4.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-io/10.0.17/jetty-io-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/commons-io/commons-io/2.11.0/commons-io-2.11.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-queryparser/9.8.0/lucene-queryparser-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/xml/bind/jakarta.xml.bind-api/2.3.2/jakarta.xml.bind-api-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-kernel/5.16.0/neo4j-kernel-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-fabric/5.16.0/neo4j-fabric-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-spatial-index/5.16.0/neo4j-spatial-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-procedure-api/5.16.0/neo4j-procedure-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/sun/xml/fastinfoset/FastInfoset/1.2.16/FastInfoset-1.2.16.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-lucene-index/5.16.0/neo4j-lucene-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/net/bytebuddy/byte-buddy/1.14.9/byte-buddy-1.14.9.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-query-router/5.16.0/neo4j-query-router-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-csv/5.16.0/neo4j-csv-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/toolchain/jetty-servlet-api/4.0.6/jetty-servlet-api-4.0.6.jar + [classpath] /Users/jnr6/IdeaProjects/policy-machine-core/target/test-classes + [classpath] /Users/jnr6/.m2/repository/com/github/ben-manes/caffeine/caffeine/3.1.8/caffeine-3.1.8.jar + [classpath] /Users/jnr6/.m2/repository/com/profesorfalken/WMI4Java/1.6.3/WMI4Java-1.6.3.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/vintage/junit-vintage-engine/5.10.0/junit-vintage-engine-5.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-collections/5.16.0/neo4j-collections-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/assertj/assertj-core/3.24.2/assertj-core-3.24.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-graph-algo/5.16.0/neo4j-graph-algo-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.9.0/junit-jupiter-engine-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jvnet/staxex/stax-ex/1.8.1/stax-ex-1.8.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/app/neo4j-server/5.16.0/neo4j-server-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-monitoring/5.16.0/neo4j-monitoring-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-macros/5.16.0/neo4j-cypher-macros-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jprocesses/jProcesses/1.6.5/jProcesses-1.6.5.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-api/2.6.1/hk2-api-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.9.0/junit-jupiter-api-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-security/10.0.17/jetty-security-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcpkix-jdk18on/1.76/bcpkix-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-engine/1.9.0/junit-platform-engine-1.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-slf4j-provider/5.16.0/neo4j-slf4j-provider-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-kqueue/4.1.101.Final/netty-transport-native-kqueue-4.1.101.Final-osx-x86_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-data-collector/5.16.0/neo4j-data-collector-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/server-api/5.16.0/server-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-native/5.16.0/neo4j-native-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/module/jackson-module-jaxb-annotations/2.16.0/jackson-module-jaxb-annotations-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm/9.6/asm-9.6.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/jaxrs/jackson-jaxrs-base/2.16.0/jackson-jaxrs-base-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar + + -------------------------------------------------------------------------------- + [ Library path ] + -------------------------------------------------------------------------------- + /Users/jnr6/Library/Java/Extensions + /Library/Java/Extensions + /Network/Library/Java/Extensions + /System/Library/Java/Extensions + /usr/lib/java + /Users/jnr6/IdeaProjects/policy-machine-core + + -------------------------------------------------------------------------------- + [ System properties ] + -------------------------------------------------------------------------------- + sun.jnu.encoding = UTF-8 + sun.arch.data.model = 64 + user.timezone = America/New_York + visualvm.id = 82649297547112 + sun.java.launcher = SUN_STANDARD + user.country = US + sun.boot.library.path = /Library/Java/JavaVirtualMachines/jdk-17.0.2.jdk/Contents/Home/lib + sun.java.command = gov.nist.csd.pm.pap.neo4j.ImportTest + jdk.debug = release + sun.cpu.endian = little + user.home = /Users/jnr6 + user.language = en + file.separator = / + sun.management.compiler = HotSpot 64-Bit Tiered Compilers + user.name = jnr6 + path.separator = : + file.encoding = UTF-8 + jnidispatch.path = /Users/jnr6/Library/Caches/JNA/temp/jna13332725988493100663.tmp + jna.loaded = true + user.dir = /Users/jnr6/IdeaProjects/policy-machine-core + native.encoding = UTF-8 + sun.io.unicode.encoding = UnicodeBig + + -------------------------------------------------------------------------------- + [ (IANA) TimeZone database version ] + -------------------------------------------------------------------------------- + TimeZone version: 2021e (available for 601 zone identifiers) + + -------------------------------------------------------------------------------- + [ Network information ] + -------------------------------------------------------------------------------- + Interface utun2: + address: fe80:0:0:0:ce81:b1c:bd2c:69e%utun2 + Interface utun1: + address: fe80:0:0:0:bbf5:1c30:4238:57b2%utun1 + Interface utun0: + address: fe80:0:0:0:73be:4eb:3f31:a891%utun0 + Interface llw0: + address: fe80:0:0:0:c0a6:71ff:fe04:534c%llw0 + Interface awdl0: + address: fe80:0:0:0:c0a6:71ff:fe04:534c%awdl0 + Interface utun3: + address: 2610:20:6005:152:0:0:0:136%utun3 + address: fe80:0:0:0:aebc:32ff:fe94:d383%utun3 + address: 129.6.109.119 + Interface en0: + address: 192.168.1.247 + Interface lo0: + address: fe80:0:0:0:0:0:0:1%lo0 + address: 0:0:0:0:0:0:0:1%lo0 + address: 127.0.0.1 + + -------------------------------------------------------------------------------- + [ Native access information ] + -------------------------------------------------------------------------------- + Native access details: Native access is not available for current platform. + + -------------------------------------------------------------------------------- + [ DBMS config ] + -------------------------------------------------------------------------------- + DBMS provided settings: + server.bolt.enabled=true + server.bolt.listen_address=localhost:9999 + server.directories.neo4j_home=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + Directories in use: + server.directories.data=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data + server.directories.dumps.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/dumps + server.directories.import=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + server.directories.lib=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/lib + server.directories.licenses=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/licenses + server.directories.logs=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/logs + server.directories.neo4j_home=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + server.directories.plugins=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/plugins + server.directories.run=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/run + server.directories.script.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/scripts + server.directories.transaction.logs.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions + + -------------------------------------------------------------------------------- + [ Packaging ] + -------------------------------------------------------------------------------- + Could not read packaging info: java.nio.file.NoSuchFileException: /Users/jnr6/IdeaProjects/policy-machine-core/testdb/packaging_info + +2024-04-03 14:15:56.656+0000 INFO [o.n.d.i.DefaultIdentityModule] Found ServerId on disk: ServerId{54490f53} (54490f53-4b94-4d0f-9604-023c3fe1be5e) +2024-04-03 14:15:56.657+0000 INFO [o.n.d.i.DefaultIdentityModule] This instance is ServerId{54490f53} (54490f53-4b94-4d0f-9604-023c3fe1be5e) +2024-04-03 14:15:57.338+0000 INFO [o.n.d.d.DatabaseLifecycles] Creating 'DatabaseId{00000000[system]}'. +2024-04-03 14:15:57.599+0000 INFO [o.n.b.BoltServer] Using connector transport KQueue +2024-04-03 14:15:57.667+0000 INFO [o.n.b.BoltServer] Configured external Bolt connector with listener address localhost/127.0.0.1:9999 +2024-04-03 14:15:57.667+0000 INFO [o.n.b.BoltServer] Bolt server loaded +2024-04-03 14:15:57.681+0000 INFO [o.n.d.d.DatabaseLifecycles] Starting 'DatabaseId{00000000[system]}'. +2024-04-03 14:15:57.902+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [system/00000000] Scanning log file with version 0 for checkpoint entries +2024-04-03 14:15:57.951+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [system/00000000] Selected RecordFormat:PageAlignedV5_0[aligned-1.1] record format from store /Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system +2024-04-03 14:15:57.951+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [system/00000000] Selected format from the store files: RecordFormat:PageAlignedV5_0[aligned-1.1] +2024-04-03 14:15:58.535+0000 INFO [o.n.i.d.DiagnosticsManager] [system/00000000] + [system/00000000] ******************************************************************************** + [system/00000000] [ Database: system ] + [system/00000000] ******************************************************************************** + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Version ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] DBMS: community record-aligned-1.1 + [system/00000000] Kernel version: 5.16.0 + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Store files ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] Disk space on partition (Total / Free / Free %): 500068036608 / 109624033280 / 21 + [system/00000000] Storage files stored on file store: apfs + [system/00000000] Storage files: (filename : modification date - size) + [system/00000000] database_lock: 2024-04-03 04:12:32.900+0000 - 0B + [system/00000000] id-buffer.tmp.0: 2024-04-03 14:10:26.797+0000 - 0B + [system/00000000] neostore: 2024-04-03 04:12:32.662+0000 - 8.000KiB + [system/00000000] neostore.counts.db: 2024-04-03 14:15:58.371+0000 - 48.00KiB + [system/00000000] neostore.indexstats.db: 2024-04-03 14:15:58.415+0000 - 48.00KiB + [system/00000000] neostore.labeltokenstore.db: 2024-04-03 04:12:39.430+0000 - 8.000KiB + [system/00000000] neostore.labeltokenstore.db.id: 2024-04-03 14:15:58.305+0000 - 40.00KiB + [system/00000000] neostore.labeltokenstore.db.names: 2024-04-03 04:12:39.454+0000 - 8.000KiB + [system/00000000] neostore.labeltokenstore.db.names.id: 2024-04-03 14:15:58.291+0000 - 40.00KiB + [system/00000000] neostore.nodestore.db: 2024-04-03 04:12:39.416+0000 - 8.000KiB + [system/00000000] neostore.nodestore.db.id: 2024-04-03 14:15:58.126+0000 - 40.00KiB + [system/00000000] neostore.nodestore.db.labels: 2024-04-03 04:12:32.509+0000 - 8.000KiB + [system/00000000] neostore.nodestore.db.labels.id: 2024-04-03 14:15:58.099+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db: 2024-04-03 04:12:39.442+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.arrays: 2024-04-03 04:12:32.565+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.arrays.id: 2024-04-03 14:15:58.205+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.id: 2024-04-03 14:15:58.220+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.index: 2024-04-03 04:12:39.477+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.index.id: 2024-04-03 14:15:58.167+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.index.keys: 2024-04-03 04:12:39.464+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.index.keys.id: 2024-04-03 14:15:58.147+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.strings: 2024-04-03 04:12:39.367+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.strings.id: 2024-04-03 14:15:58.187+0000 - 40.00KiB + [system/00000000] neostore.relationshipgroupstore.db: 2024-04-03 04:12:32.640+0000 - 8.000KiB + [system/00000000] neostore.relationshipgroupstore.db.id: 2024-04-03 14:15:58.336+0000 - 40.00KiB + [system/00000000] neostore.relationshipgroupstore.degrees.db: 2024-04-03 14:15:58.395+0000 - 40.00KiB + [system/00000000] neostore.relationshipstore.db: 2024-04-03 04:12:39.378+0000 - 8.000KiB + [system/00000000] neostore.relationshipstore.db.id: 2024-04-03 14:15:58.240+0000 - 40.00KiB + [system/00000000] neostore.relationshiptypestore.db: 2024-04-03 04:12:39.405+0000 - 8.000KiB + [system/00000000] neostore.relationshiptypestore.db.id: 2024-04-03 14:15:58.274+0000 - 40.00KiB + [system/00000000] neostore.relationshiptypestore.db.names: 2024-04-03 04:12:39.392+0000 - 8.000KiB + [system/00000000] neostore.relationshiptypestore.db.names.id: 2024-04-03 14:15:58.259+0000 - 40.00KiB + [system/00000000] neostore.schemastore.db: 2024-04-03 04:12:39.490+0000 - 8.000KiB + [system/00000000] neostore.schemastore.db.id: 2024-04-03 14:15:58.320+0000 - 40.00KiB + [system/00000000] schema: + [system/00000000] index: + [system/00000000] range-1.0: + [system/00000000] 3: + [system/00000000] index-3: 2024-04-03 14:10:26.715+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.321+0000 - 48.00KiB + [system/00000000] 4: + [system/00000000] index-4: 2024-04-03 14:10:26.737+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.437+0000 - 48.00KiB + [system/00000000] 7: + [system/00000000] index-7: 2024-04-03 14:10:26.759+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.907+0000 - 48.00KiB + [system/00000000] 8: + [system/00000000] index-8: 2024-04-03 14:10:26.784+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.997+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.996+0000 - 192.0KiB + [system/00000000] token-lookup-1.0: + [system/00000000] 1: + [system/00000000] index-1: 2024-04-03 14:10:26.651+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:33.516+0000 - 48.00KiB + [system/00000000] 2: + [system/00000000] index-2: 2024-04-03 14:10:26.677+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:33.409+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:33.515+0000 - 96.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.321+0000 - 288.0KiB + [system/00000000] - Total: 2024-04-03 04:12:33.407+0000 - 288.0KiB + [system/00000000] Storage summary: + [system/00000000] Total size of store: 1.078MiB + [system/00000000] Total size of mapped files: 408.0KiB + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Transaction log ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] Transaction log files stored on file store: apfs + [system/00000000] Transaction log metadata: + [system/00000000] - current kernel version used in transactions: V5_15 + [system/00000000] - last committed transaction id: 37 + [system/00000000] Transaction log files: + [system/00000000] - existing transaction log versions: 0-0 + [system/00000000] - oldest transaction 2 found in log with version 0 + [system/00000000] - files: (filename : creation date - size) + [system/00000000] neostore.transaction.db.0: 2024-04-03 04:12:32.000+0000 - 19.26KiB + [system/00000000] - total size of files: 19.26KiB + [system/00000000] Checkpoint log files: + [system/00000000] - existing checkpoint log versions: 0-0 + [system/00000000] - last checkpoint: CheckpointInfo[transactionLogPosition=LogPosition{logVersion=0, byteOffset=19725}, storeId=StoreId{creationTime=1712117552660, random=4552926301767966796, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1}, checkpointEntryPosition=LogPosition{logVersion=0, byteOffset=360}, channelPositionAfterCheckpoint=LogPosition{logVersion=0, byteOffset=592}, checkpointFilePostReadPosition=LogPosition{logVersion=0, byteOffset=592}, kernelVersion=KernelVersion{V5_15,version=14}, kernelVersionByte=14, transactionId=TransactionId[transactionId=37, checksum=-1026009811, commitTimestamp=1712117555154, consensusIndex=-1], reason=Checkpoint triggered by "Database shutdown" @ txId: 37, consensusIndexInCheckpoint=true] + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Id usage ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] ArrayPropertyStore[neostore.nodestore.db.labels]: used=1 high=0 + [system/00000000] NodeStore[neostore.nodestore.db]: used=6 high=5 + [system/00000000] StringPropertyStore[neostore.propertystore.db.index.keys]: used=44 high=43 + [system/00000000] PropertyIndexStore[neostore.propertystore.db.index]: used=31 high=30 + [system/00000000] StringPropertyStore[neostore.propertystore.db.strings]: used=3 high=2 + [system/00000000] ArrayPropertyStore[neostore.propertystore.db.arrays]: used=1 high=0 + [system/00000000] PropertyStore[neostore.propertystore.db]: used=59 high=58 + [system/00000000] RelationshipStore[neostore.relationshipstore.db]: used=2 high=1 + [system/00000000] StringPropertyStore[neostore.relationshiptypestore.db.names]: used=2 high=1 + [system/00000000] RelationshipTypeStore[neostore.relationshiptypestore.db]: used=1 high=0 + [system/00000000] StringPropertyStore[neostore.labeltokenstore.db.names]: used=5 high=4 + [system/00000000] LabelTokenStore[neostore.labeltokenstore.db]: used=4 high=3 + [system/00000000] SchemaStore[neostore.schemastore.db]: used=11 high=10 + [system/00000000] RelationshipGroupStore[neostore.relationshipgroupstore.db]: used=1 high=0 + [system/00000000] NeoStore[neostore]: used=-1 high=-1 + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Metadata ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] EXTERNAL_STORE_UUID (Database identifier exposed as external store identity. Generated on creation and never updated): 8e4fd9af-0e04-47d8-a19c-cdb72dbda752 + [system/00000000] DATABASE_ID (The last used DatabaseId for this database): null + [system/00000000] LEGACY_STORE_VERSION (Legacy store format version. This field is used from 5.0 onwards only to distinguish non-migrated pre 5.0 metadata stores.): -3523014627327384477 + [system/00000000] STORE_ID (Store ID): StoreId{creationTime=1712117552660, random=4552926301767966796, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1} + [system/00000000] +2024-04-03 14:15:58.731+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:15:58.732+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:15:58.733+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:15:58.734+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:15:58.755+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:15:58.755+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:15:58.756+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:15:58.756+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:15:58.787+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 +2024-04-03 14:15:58.788+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 +2024-04-03 14:15:58.789+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:15:58.789+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 +2024-04-03 14:15:58.812+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 +2024-04-03 14:15:58.813+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 +2024-04-03 14:15:58.814+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:15:58.814+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 +2024-04-03 14:15:58.834+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 +2024-04-03 14:15:58.835+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 +2024-04-03 14:15:58.836+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:15:58.836+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 +2024-04-03 14:15:58.864+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 +2024-04-03 14:15:58.864+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 +2024-04-03 14:15:58.866+0000 INFO [o.n.k.i.a.i.IndexingService] [system/00000000] IndexingService.init: indexes not specifically mentioned above are ONLINE. Total 6 indexes. Processed in 168ms +2024-04-03 14:15:58.866+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:15:58.866+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 +2024-04-03 14:15:58.872+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] Requirement `Database unavailable` makes database system unavailable. +2024-04-03 14:15:58.873+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] DatabaseId{00000000[system]} is unavailable. +2024-04-03 14:15:58.927+0000 INFO [o.n.k.d.Database] [system/00000000] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/system/neostore.transaction.db.0] at version=0 +2024-04-03 14:15:58.931+0000 INFO [o.n.k.d.Database] [system/00000000] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/system/checkpoint.0] at version=0 +2024-04-03 14:15:58.932+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [system/00000000] Scanning log file with version 0 for checkpoint entries +2024-04-03 14:15:58.934+0000 INFO [o.n.k.i.a.i.IndexingService] [system/00000000] IndexingService.start: indexes not specifically mentioned above are ONLINE. Total 6 indexes. Processed in 0ms +2024-04-03 14:15:58.964+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] Fulfilling of requirement 'Database unavailable' makes database system available. +2024-04-03 14:15:58.964+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] DatabaseId{00000000[system]} is ready. +2024-04-03 14:15:59.063+0000 INFO [o.n.s.s.s.UserSecurityGraphComponent] Performing postInitialization step for component 'security-users' with version 4 and status CURRENT +2024-04-03 14:15:59.064+0000 INFO [o.n.s.s.s.UserSecurityGraphComponent] Updating the initial password in component 'security-users' +2024-04-03 14:15:59.074+0000 INFO [o.n.d.d.DatabaseLifecycles] Creating 'DatabaseId{fefd0874[neo4j]}'. +2024-04-03 14:15:59.078+0000 INFO [o.n.d.d.DatabaseLifecycles] Starting 'DatabaseId{fefd0874[neo4j]}'. +2024-04-03 14:15:59.094+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [neo4j/fefd0874] Scanning log file with version 0 for checkpoint entries +2024-04-03 14:15:59.161+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected RecordFormat:PageAlignedV5_0[aligned-1.1] record format from store /Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j +2024-04-03 14:15:59.161+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected format from the store files: RecordFormat:PageAlignedV5_0[aligned-1.1] +2024-04-03 14:15:59.372+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Transaction logs entries found after the last check point (which is at LogPosition{logVersion=0, byteOffset=7248422}). First observed transaction id: 52. +2024-04-03 14:15:59.429+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Recovery required from position LogPosition{logVersion=0, byteOffset=7248422} +2024-04-03 14:15:59.546+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] TransactionLogsRecovery +2024-04-03 14:15:59.629+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 10% completed +2024-04-03 14:15:59.661+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 20% completed +2024-04-03 14:15:59.691+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 30% completed +2024-04-03 14:15:59.709+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 40% completed +2024-04-03 14:15:59.709+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 50% completed +2024-04-03 14:15:59.733+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job registered: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:15:59.734+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job registered: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:15:59.734+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job started: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:15:59.734+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job started: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:15:59.735+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job finished: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:15:59.735+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job finished: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:15:59.735+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job closed: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:15:59.735+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job closed: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:15:59.754+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job registered: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:15:59.754+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job registered: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:15:59.754+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.init: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 43ms +2024-04-03 14:15:59.754+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job started: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:15:59.754+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job started: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:15:59.755+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job finished: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 Number of pages visited: 2, Number of tree nodes: 1, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:15:59.755+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job finished: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 Number of pages visited: 2, Number of tree nodes: 1, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:15:59.755+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job closed: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:15:59.755+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job closed: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:15:59.902+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 60% completed +2024-04-03 14:15:59.904+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 70% completed +2024-04-03 14:15:59.977+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 80% completed +2024-04-03 14:16:00.149+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 90% completed +2024-04-03 14:16:00.149+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 100% completed +2024-04-03 14:16:00.151+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Recovery in 'full' mode completed. Observed transactions range [first:52, last:55]: 4 transactions applied, 0 not completed transactions rolled back, skipped applying 0 previously rolled back transactions. Time spent: 777ms. +2024-04-03 14:16:00.153+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.start: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 0ms +2024-04-03 14:16:00.154+0000 INFO [o.n.k.i.t.l.c.CheckPointerImpl] [neo4j/fefd0874] Checkpoint triggered by "Recovery completed." @ txId: 55 checkpoint started... +2024-04-03 14:16:00.538+0000 INFO [o.n.k.i.t.l.c.CheckPointerImpl] [neo4j/fefd0874] Checkpoint triggered by "Recovery completed." @ txId: 55 checkpoint completed in 382ms. Checkpoint flushed 317 pages (0% of total available pages), in 40 IOs. Checkpoint performed with IO limit: unlimited, paused in total 0 times( 0 millis). +2024-04-03 14:16:00.541+0000 INFO [o.n.k.i.t.l.p.LogPruningImpl] [neo4j/fefd0874] No log version pruned. The strategy used was '2 days'. +2024-04-03 14:16:01.012+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [neo4j/fefd0874] Scanning log file with version 0 for checkpoint entries +2024-04-03 14:16:01.038+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected RecordFormat:PageAlignedV5_0[aligned-1.1] record format from store /Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j +2024-04-03 14:16:01.038+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected format from the store files: RecordFormat:PageAlignedV5_0[aligned-1.1] +2024-04-03 14:16:01.277+0000 INFO [o.n.i.d.DiagnosticsManager] [neo4j/fefd0874] + [neo4j/fefd0874] ******************************************************************************** + [neo4j/fefd0874] [ Database: neo4j ] + [neo4j/fefd0874] ******************************************************************************** + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Version ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] DBMS: community record-aligned-1.1 + [neo4j/fefd0874] Kernel version: 5.16.0 + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Store files ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] Disk space on partition (Total / Free / Free %): 500068036608 / 109621850112 / 21 + [neo4j/fefd0874] Storage files stored on file store: apfs + [neo4j/fefd0874] Storage files: (filename : modification date - size) + [neo4j/fefd0874] database_lock: 2024-04-03 04:12:35.327+0000 - 0B + [neo4j/fefd0874] id-buffer.tmp.0: 2024-04-03 14:10:30.788+0000 - 156.4KiB + [neo4j/fefd0874] neostore: 2024-04-03 04:12:35.301+0000 - 8.000KiB + [neo4j/fefd0874] neostore.counts.db: 2024-04-03 14:16:01.221+0000 - 48.00KiB + [neo4j/fefd0874] neostore.indexstats.db: 2024-04-03 14:16:01.249+0000 - 48.00KiB + [neo4j/fefd0874] neostore.labeltokenstore.db: 2024-04-03 04:53:01.953+0000 - 8.000KiB + [neo4j/fefd0874] neostore.labeltokenstore.db.id: 2024-04-03 14:16:01.181+0000 - 40.00KiB + [neo4j/fefd0874] neostore.labeltokenstore.db.names: 2024-04-03 04:53:01.900+0000 - 8.000KiB + [neo4j/fefd0874] neostore.labeltokenstore.db.names.id: 2024-04-03 14:16:01.172+0000 - 40.00KiB + [neo4j/fefd0874] neostore.nodestore.db: 2024-04-03 14:16:00.499+0000 - 592.0KiB + [neo4j/fefd0874] neostore.nodestore.db.id: 2024-04-03 14:16:01.056+0000 - 48.00KiB + [neo4j/fefd0874] neostore.nodestore.db.labels: 2024-04-03 04:12:35.189+0000 - 8.000KiB + [neo4j/fefd0874] neostore.nodestore.db.labels.id: 2024-04-03 14:16:01.040+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db: 2024-04-03 14:16:00.512+0000 - 1.578MiB + [neo4j/fefd0874] neostore.propertystore.db.arrays: 2024-04-03 04:12:35.234+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.arrays.id: 2024-04-03 14:16:01.103+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.id: 2024-04-03 14:16:01.116+0000 - 48.00KiB + [neo4j/fefd0874] neostore.propertystore.db.index: 2024-04-03 04:30:28.255+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.index.id: 2024-04-03 14:16:01.082+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.index.keys: 2024-04-03 04:30:28.242+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.index.keys.id: 2024-04-03 14:16:01.068+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.strings: 2024-04-03 04:12:35.222+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.strings.id: 2024-04-03 14:16:01.093+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshipgroupstore.db: 2024-04-03 04:12:35.289+0000 - 8.000KiB + [neo4j/fefd0874] neostore.relationshipgroupstore.db.id: 2024-04-03 14:16:01.205+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshipgroupstore.degrees.db: 2024-04-03 14:16:01.236+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshipstore.db: 2024-04-03 04:12:35.245+0000 - 0B + [neo4j/fefd0874] neostore.relationshipstore.db.id: 2024-04-03 14:16:01.132+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshiptypestore.db: 2024-04-03 04:12:35.259+0000 - 0B + [neo4j/fefd0874] neostore.relationshiptypestore.db.id: 2024-04-03 14:16:01.160+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshiptypestore.db.names: 2024-04-03 04:12:35.246+0000 - 8.000KiB + [neo4j/fefd0874] neostore.relationshiptypestore.db.names.id: 2024-04-03 14:16:01.145+0000 - 40.00KiB + [neo4j/fefd0874] neostore.schemastore.db: 2024-04-03 04:12:36.054+0000 - 8.000KiB + [neo4j/fefd0874] neostore.schemastore.db.id: 2024-04-03 14:16:01.194+0000 - 40.00KiB + [neo4j/fefd0874] schema: + [neo4j/fefd0874] index: + [neo4j/fefd0874] token-lookup-1.0: + [neo4j/fefd0874] 1: + [neo4j/fefd0874] index-1: 2024-04-03 14:16:00.543+0000 - 64.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.459+0000 - 64.00KiB + [neo4j/fefd0874] 2: + [neo4j/fefd0874] index-2: 2024-04-03 14:16:00.553+0000 - 40.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.390+0000 - 40.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.459+0000 - 104.0KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.390+0000 - 104.0KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.390+0000 - 104.0KiB + [neo4j/fefd0874] Storage summary: + [neo4j/fefd0874] Total size of store: 3.192MiB + [neo4j/fefd0874] Total size of mapped files: 2.344MiB + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Transaction log ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] Transaction log files stored on file store: apfs + [neo4j/fefd0874] Transaction log metadata: + [neo4j/fefd0874] - current kernel version used in transactions: V5_15 + [neo4j/fefd0874] - last committed transaction id: 55 + [neo4j/fefd0874] Transaction log files: + [neo4j/fefd0874] - existing transaction log versions: 0-0 + [neo4j/fefd0874] - oldest transaction 2 found in log with version 0 + [neo4j/fefd0874] - files: (filename : creation date - size) + [neo4j/fefd0874] neostore.transaction.db.0: 2024-04-03 04:12:35.000+0000 - 11.82MiB + [neo4j/fefd0874] - total size of files: 11.82MiB + [neo4j/fefd0874] Checkpoint log files: + [neo4j/fefd0874] - existing checkpoint log versions: 0-0 + [neo4j/fefd0874] - last checkpoint: CheckpointInfo[transactionLogPosition=LogPosition{logVersion=0, byteOffset=12397492}, storeId=StoreId{creationTime=1712117555300, random=260265064831090288, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1}, checkpointEntryPosition=LogPosition{logVersion=0, byteOffset=2448}, channelPositionAfterCheckpoint=LogPosition{logVersion=0, byteOffset=2680}, checkpointFilePostReadPosition=LogPosition{logVersion=0, byteOffset=2680}, kernelVersion=KernelVersion{V5_15,version=14}, kernelVersionByte=14, transactionId=TransactionId[transactionId=55, checksum=962710397, commitTimestamp=1712153656328, consensusIndex=-1], reason=Checkpoint triggered by "Recovery completed." @ txId: 55, consensusIndexInCheckpoint=true] + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Id usage ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] ArrayPropertyStore[neostore.nodestore.db.labels]: used=1 high=0 + [neo4j/fefd0874] NodeStore[neostore.nodestore.db]: used=40003 high=40002 + [neo4j/fefd0874] StringPropertyStore[neostore.propertystore.db.index.keys]: used=23 high=22 + [neo4j/fefd0874] PropertyIndexStore[neostore.propertystore.db.index]: used=13 high=12 + [neo4j/fefd0874] StringPropertyStore[neostore.propertystore.db.strings]: used=1 high=0 + [neo4j/fefd0874] ArrayPropertyStore[neostore.propertystore.db.arrays]: used=1 high=0 + [neo4j/fefd0874] PropertyStore[neostore.propertystore.db]: used=40011 high=40010 + [neo4j/fefd0874] RelationshipStore[neostore.relationshipstore.db]: used=0 high=-1 + [neo4j/fefd0874] StringPropertyStore[neostore.relationshiptypestore.db.names]: used=1 high=0 + [neo4j/fefd0874] RelationshipTypeStore[neostore.relationshiptypestore.db]: used=0 high=-1 + [neo4j/fefd0874] StringPropertyStore[neostore.labeltokenstore.db.names]: used=8 high=7 + [neo4j/fefd0874] LabelTokenStore[neostore.labeltokenstore.db]: used=7 high=6 + [neo4j/fefd0874] SchemaStore[neostore.schemastore.db]: used=3 high=2 + [neo4j/fefd0874] RelationshipGroupStore[neostore.relationshipgroupstore.db]: used=1 high=0 + [neo4j/fefd0874] NeoStore[neostore]: used=-1 high=-1 + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Metadata ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] EXTERNAL_STORE_UUID (Database identifier exposed as external store identity. Generated on creation and never updated): 485f4e4f-d438-40c9-a4ed-0bc1099d976f + [neo4j/fefd0874] DATABASE_ID (The last used DatabaseId for this database): null + [neo4j/fefd0874] LEGACY_STORE_VERSION (Legacy store format version. This field is used from 5.0 onwards only to distinguish non-migrated pre 5.0 metadata stores.): -3523014627327384477 + [neo4j/fefd0874] STORE_ID (Store ID): StoreId{creationTime=1712117555300, random=260265064831090288, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1} + [neo4j/fefd0874] +2024-04-03 14:16:01.310+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.init: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 32ms +2024-04-03 14:16:01.313+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] Requirement `Database unavailable` makes database neo4j unavailable. +2024-04-03 14:16:01.313+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] DatabaseId{fefd0874[neo4j]} is unavailable. +2024-04-03 14:16:01.316+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/neo4j/neostore.transaction.db.0] at version=0 +2024-04-03 14:16:01.317+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/neo4j/checkpoint.0] at version=0 +2024-04-03 14:16:01.318+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [neo4j/fefd0874] Scanning log file with version 0 for checkpoint entries +2024-04-03 14:16:01.319+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.start: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 0ms +2024-04-03 14:16:01.321+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] Fulfilling of requirement 'Database unavailable' makes database neo4j available. +2024-04-03 14:16:01.321+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] DatabaseId{fefd0874[neo4j]} is ready. +2024-04-03 14:16:01.365+0000 INFO [o.n.b.p.c.c.n.SocketNettyConnector] Bolt enabled on localhost:9999. +2024-04-03 14:16:01.365+0000 INFO [o.n.b.BoltServer] Bolt server started +2024-04-03 14:16:01.368+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] id: 266B93A8C1445AE734BA77BB99FDF56964B6082641ED1A3E87435C6A5111E836 +2024-04-03 14:16:01.368+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] name: system +2024-04-03 14:16:01.368+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] creationDate: 2024-04-03T04:12:32.66Z +2024-04-03 14:28:14.378+0000 INFO [o.n.g.f.m.GlobalModule] Logging config in use: Embedded default config 'default-server-logs.xml' +2024-04-03 14:28:14.536+0000 WARN [o.n.k.i.JvmChecker] The max heap memory has not been configured. It is recommended that it is always explicitly configured, to ensure the system has a balanced configuration. Until then, a JVM computed heuristic of 4294967296 bytes is used instead. If you are running neo4j server, you need to configure server.memory.heap.max_size in neo4j.conf. If you are running neo4j embedded, you have to launch the JVM with -Xmx set to a value. You can run neo4j-admin server memory-recommendation for memory configuration suggestions. +2024-04-03 14:28:14.537+0000 WARN [o.n.k.i.JvmChecker] The initial heap memory has not been configured. It is recommended that it is always explicitly configured, to ensure the system has a balanced configuration. Until then, a JVM computed heuristic of 268435456 bytes is used instead. If you are running neo4j server, you need to configure server.memory.heap.initial_size in neo4j.conf. If you are running neo4j embedded, you have to launch the JVM with -Xms set to a value. You can run neo4j-admin server memory-recommendation for memory configuration suggestions. +2024-04-03 14:28:14.576+0000 WARN [o.n.i.p.PageCache] The server.memory.pagecache.size setting has not been configured. It is recommended that this setting is always explicitly configured, to ensure the system has a balanced configuration. Until then, a computed heuristic value of 6442450944 bytes will be used instead. Run `neo4j-admin memory-recommendation` for memory configuration suggestions. +2024-04-03 14:28:14.577+0000 WARN [o.n.i.p.PageCache] Reflection access to java.nio.DirectByteBuffer is not available, using fallback mode. This could have negative impact on performance and memory usage. Consider adding --add-opens=java.base/java.nio=ALL-UNNAMED to VM options. +2024-04-03 14:28:15.009+0000 INFO [o.n.i.d.DiagnosticsManager] + ******************************************************************************** + [ System diagnostics ] + ******************************************************************************** + -------------------------------------------------------------------------------- + [ System memory information ] + -------------------------------------------------------------------------------- + Total Physical memory: 16.00GiB + Free Physical memory: 1.743GiB + Committed virtual memory: 38.29GiB + Total swap space: 3.000GiB + Free swap space: 934.8MiB + + -------------------------------------------------------------------------------- + [ JVM memory information ] + -------------------------------------------------------------------------------- + Free memory: 148.8MiB + Total memory: 260.0MiB + Max memory: 4.000GiB + Garbage Collector: G1 Young Generation: [G1 Eden Space, G1 Survivor Space, G1 Old Gen] + Garbage Collector: G1 Old Generation: [G1 Eden Space, G1 Survivor Space, G1 Old Gen] + Memory Pool: CodeHeap 'non-nmethods' (Non-heap memory): committed=2.438MiB, used=1.211MiB, max=5.570MiB, threshold=0B + Memory Pool: Metaspace (Non-heap memory): committed=20.13MiB, used=19.77MiB, max=-1B, threshold=0B + Memory Pool: CodeHeap 'profiled nmethods' (Non-heap memory): committed=4.438MiB, used=4.427MiB, max=117.2MiB, threshold=0B + Memory Pool: Compressed Class Space (Non-heap memory): committed=2.313MiB, used=2.121MiB, max=1.000GiB, threshold=0B + Memory Pool: G1 Eden Space (Heap memory): committed=156.0MiB, used=84.00MiB, max=-1B, threshold=? + Memory Pool: G1 Old Gen (Heap memory): committed=100.0MiB, used=22.86MiB, max=4.000GiB, threshold=0B + Memory Pool: G1 Survivor Space (Heap memory): committed=4.000MiB, used=3.370MiB, max=-1B, threshold=? + Memory Pool: CodeHeap 'non-profiled nmethods' (Non-heap memory): committed=2.438MiB, used=1.348MiB, max=117.2MiB, threshold=0B + + -------------------------------------------------------------------------------- + [ Operating system information ] + -------------------------------------------------------------------------------- + Operating System: Mac OS X; version: 12.7.4; arch: x86_64; cpus: 8 + Max number of file descriptors: 10240 + Number of open file descriptors: 226 + Process id: 71701 + Byte order: LITTLE_ENDIAN + Local timezone: America/New_York + Memory page size: 4096 + Unaligned memory access allowed: true + + -------------------------------------------------------------------------------- + [ JVM information ] + -------------------------------------------------------------------------------- + VM Name: Java HotSpot(TM) 64-Bit Server VM + VM Vendor: Oracle Corporation + VM Version: 17.0.2+8-LTS-86 + JIT compiler: HotSpot 64-Bit Tiered Compilers + VM Arguments: [-Dvisualvm.id=83387447776122, -javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=58512:/Applications/IntelliJ IDEA.app/Contents/bin, -Dfile.encoding=UTF-8] + + -------------------------------------------------------------------------------- + [ Java classpath ] + -------------------------------------------------------------------------------- + [classpath] /Users/jnr6/.m2/repository/it/unimi/dsi/fastutil/8.5.13/fastutil-8.5.13.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-codec-http/4.1.101.Final/netty-codec-http-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/scala-library/2.13.11/scala-library-2.13.11.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-command-line/5.16.0/neo4j-command-line-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-epoll/4.1.101.Final/netty-transport-native-epoll-4.1.101.Final-linux-x86_64.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-common/4.1.101.Final/netty-common-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.16.0/jackson-databind-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-consistency-check/5.16.0/neo4j-consistency-check-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-values/5.16.0/neo4j-values-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-dbms/5.16.0/neo4j-dbms-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-analysis/9.6/asm-analysis-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-planner/5.16.0/neo4j-cypher-planner-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/antlr/antlr4-runtime/4.8/antlr4-runtime-4.8.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-api/3.2.13/docker-java-api-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/activation/jakarta.activation-api/1.2.1/jakarta.activation-api-1.2.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-planner-spi/5.16.0/neo4j-cypher-planner-spi-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-resource/5.16.0/neo4j-resource-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-servlet/10.0.17/jetty-servlet-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-cache/1.13.0/shiro-cache-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-javacc-parser/5.16.0/neo4j-cypher-javacc-parser-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/sun/istack/istack-commons-runtime/3.0.8/istack-commons-runtime-3.0.8.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-configuration2/2.9.0/commons-configuration2-2.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-compress/1.21/commons-compress-1.21.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/containers/jersey-container-servlet/2.34/jersey-container-servlet-2.34.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-kqueue/4.1.101.Final/netty-transport-native-kqueue-4.1.101.Final-osx-aarch_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-concurrent/5.16.0/neo4j-concurrent-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/mysql/1.17.4/mysql-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/mockito/mockito-core/5.7.0/mockito-core-5.7.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher/5.16.0/neo4j-cypher-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-capabilities/5.16.0/neo4j-capabilities-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-notifications/5.16.0/neo4j-notifications-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-import-util/5.16.0/neo4j-import-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-config/5.16.0/neo4j-cypher-config-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/containers/jersey-container-servlet-core/2.34/jersey-container-servlet-core-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-io/5.16.0/neo4j-io-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-locator/2.6.1/hk2-locator-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-lang3/3.13.0/commons-lang3-3.13.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.16.0/jackson-core-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/mysql/mysql-connector-j/8.2.0/mysql-connector-j-8.2.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-classes-epoll/4.1.101.Final/netty-transport-classes-epoll-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/objenesis/objenesis/3.3/objenesis-3.3.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-server/2.34/jersey-server-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-client/2.34/jersey-client-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-ast-factory/5.16.0/neo4j-cypher-ast-factory-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-handler/4.1.101.Final/netty-handler-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j/5.16.0/neo4j-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/google/code/gson/gson/2.9.0/gson-2.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-logging/5.16.0/neo4j-logging-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-webapp/10.0.17/jetty-webapp-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-core/9.8.0/lucene-core-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-kernel-api/5.16.0/neo4j-kernel-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcutil-jdk18on/1.76/bcutil-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/bitbucket/inkytonik/kiama/kiama_2.13/2.5.1/kiama_2.13-2.5.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-common/5.16.0/neo4j-common-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/junit/junit/4.13.2/junit-4.13.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-index/5.16.0/neo4j-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport/4.1.101.Final/netty-transport-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-util/9.6/asm-util-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/jctools/jctools-core/4.0.2/jctools-core-4.0.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-graphdb-api/5.16.0/neo4j-graphdb-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/jdbc/1.17.4/jdbc-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-runtime-util/5.16.0/neo4j-cypher-runtime-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/collections/eclipse-collections-api/11.1.0/eclipse-collections-api-11.1.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-unsafe/5.16.0/neo4j-unsafe-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-server/10.0.17/jetty-server-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcprov-jdk18on/1.76/bcprov-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-slotted-runtime/5.16.0/neo4j-cypher-slotted-runtime-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-layout-template-json/2.20.0/log4j-layout-template-json-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-fulltext-index/5.16.0/neo4j-fulltext-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/net/java/dev/jna/jna/5.8.0/jna-5.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-util/10.0.17/jetty-util-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-expressions/5.16.0/neo4j-expressions-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-transport/3.2.13/docker-java-transport-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/commons-logging/commons-logging/1.2/commons-logging-1.2.jar + [classpath] /Users/jnr6/IdeaProjects/policy-machine-core/target/classes + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-testkit/1.10.0/junit-platform-testkit-1.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-core/1.13.0/shiro-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-physical-planning/5.16.0/neo4j-cypher-physical-planning-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-storage-engine-util/5.16.0/neo4j-storage-engine-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-ast/5.16.0/neo4j-ast-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-core/2.20.0/log4j-core-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-params/5.9.0/junit-jupiter-params-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/external/jakarta.inject/2.6.1/jakarta.inject-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/inject/jersey-hk2/2.34/jersey-hk2-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/hamcrest/hamcrest/2.2/hamcrest-2.2.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jaxb/jaxb-runtime/2.3.2/jaxb-runtime-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-logical-plans/5.16.0/neo4j-cypher-logical-plans-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-xml/10.0.17/jetty-xml-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar + [classpath] /Users/jnr6/.m2/repository/org/codehaus/jettison/jettison/1.5.4/jettison-1.5.4.jar + [classpath] /Users/jnr6/.m2/repository/com/propensive/mercator_2.13/0.2.1/mercator_2.13-0.2.1.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jaxb/txw2/2.3.2/txw2-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-resolver/4.1.101.Final/netty-resolver-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar + [classpath] /Users/jnr6/.m2/repository/org/awaitility/awaitility/4.2.0/awaitility-4.2.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-codec/4.1.101.Final/netty-codec-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-buffer/4.1.101.Final/netty-buffer-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-hash/1.13.0/shiro-crypto-hash-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/info/picocli/picocli/4.7.5/picocli-4.7.5.jar + [classpath] /Users/jnr6/.m2/repository/com/profesorfalken/jPowerShell/3.0/jPowerShell-3.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-cipher/1.13.0/shiro-crypto-cipher-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-lang/1.13.0/shiro-lang-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-token-api/5.16.0/neo4j-token-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-bolt/5.16.0/neo4j-bolt-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-record-storage-engine/5.16.0/neo4j-record-storage-engine-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-epoll/4.1.101.Final/netty-transport-native-epoll-4.1.101.Final-linux-aarch_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-ir/5.16.0/neo4j-cypher-ir-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/test-utils/5.15.0/test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter/5.10.0/junit-jupiter-5.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/app/neo4j-server-test-utils/5.15.0/neo4j-server-test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/rnorth/duct-tape/duct-tape/1.0.8/duct-tape-1.0.8.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/modules/scala-collection-contrib_2.13/0.3.0/scala-collection-contrib_2.13-0.3.0.jar + [classpath] /Users/jnr6/.m2/repository/org/slf4j/slf4j-api/2.0.0/slf4j-api-2.0.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-analysis-common/9.8.0/lucene-analysis-common-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/com/propensive/magnolia_2.13/0.17.0/magnolia_2.13-0.17.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-event/1.13.0/shiro-event-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-api/2.20.0/log4j-api-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-classes-kqueue/4.1.101.Final/netty-transport-classes-kqueue-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/net/bytebuddy/byte-buddy-agent/1.14.9/byte-buddy-agent-1.14.9.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/validation/jakarta.validation-api/2.0.2/jakarta.validation-api-2.0.2.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/database-commons/1.17.4/database-commons-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-front-end/5.16.0/neo4j-front-end-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-procedure/5.16.0/neo4j-procedure-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-import-tool/5.16.0/neo4j-import-tool-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/ws/rs/jakarta.ws.rs-api/2.1.6/jakarta.ws.rs-api-2.1.6.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.10.3/jackson-annotations-2.10.3.jar + [classpath] /Users/jnr6/.m2/repository/com/google/protobuf/protobuf-java/3.21.9/protobuf-java-3.21.9.jar + [classpath] /Users/jnr6/.m2/repository/io/projectreactor/reactor-core/3.6.0/reactor-core-3.6.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-wal/5.16.0/neo4j-wal-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-ssl/5.16.0/neo4j-ssl-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-unix-common/4.1.101.Final/netty-transport-native-unix-common-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-config-core/1.13.0/shiro-config-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-codegen/5.16.0/neo4j-codegen-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-tree/9.6/asm-tree-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-rewriting/5.16.0/neo4j-rewriting-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-backward-codecs/9.8.0/lucene-backward-codecs-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-lock/5.16.0/neo4j-lock-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-schema/5.16.0/neo4j-schema-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/collections/eclipse-collections/11.1.0/eclipse-collections-11.1.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/luben/zstd-jni/1.5.5-10/zstd-jni-1.5.5-10.jar + [classpath] /Users/jnr6/.m2/repository/commons-codec/commons-codec/1.16.0/commons-codec-1.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/jaxrs/jackson-jaxrs-json-provider/2.16.0/jackson-jaxrs-json-provider-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-expression-evaluator/5.16.0/neo4j-cypher-expression-evaluator-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/testcontainers/1.17.4/testcontainers-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/test/neo4j-harness/5.15.0/neo4j-harness-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/javassist/javassist/3.25.0-GA/javassist-3.25.0-GA.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-core/1.13.0/shiro-crypto-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-commons/1.9.0/junit-platform-commons-1.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-utils/2.6.1/hk2-utils-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/io-test-utils/5.15.0/io-test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/annotations/5.16.0/annotations-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-interpreted-runtime/5.16.0/neo4j-cypher-interpreted-runtime-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-cache/5.16.0/neo4j-cypher-cache-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jetbrains/annotations/17.0.0/annotations-17.0.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-layout/5.16.0/neo4j-layout-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/reactivestreams/reactive-streams/1.0.4/reactive-streams-1.0.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/licensing-proxy/zstd-proxy/5.16.0/zstd-proxy-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-security/5.16.0/neo4j-security-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-common/2.34/jersey-common-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/scala-reflect/2.13.11/scala-reflect-2.13.11.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/junit-jupiter/1.17.4/junit-jupiter-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-random-values/5.15.0/neo4j-random-values-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-transport-zerodep/3.2.13/docker-java-transport-zerodep-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-diagnostics/5.16.0/neo4j-diagnostics-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-http/10.0.17/jetty-http-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/cypher-ast-factory/5.16.0/cypher-ast-factory-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-configuration/5.16.0/neo4j-configuration-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-exceptions/5.16.0/neo4j-exceptions-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-util/5.16.0/neo4j-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-id-generator/5.16.0/neo4j-id-generator-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/seancfoley/ipaddress/5.4.0/ipaddress-5.4.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-io/10.0.17/jetty-io-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/commons-io/commons-io/2.11.0/commons-io-2.11.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-queryparser/9.8.0/lucene-queryparser-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/xml/bind/jakarta.xml.bind-api/2.3.2/jakarta.xml.bind-api-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-kernel/5.16.0/neo4j-kernel-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-fabric/5.16.0/neo4j-fabric-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-spatial-index/5.16.0/neo4j-spatial-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-procedure-api/5.16.0/neo4j-procedure-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/sun/xml/fastinfoset/FastInfoset/1.2.16/FastInfoset-1.2.16.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-lucene-index/5.16.0/neo4j-lucene-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/net/bytebuddy/byte-buddy/1.14.9/byte-buddy-1.14.9.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-query-router/5.16.0/neo4j-query-router-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-csv/5.16.0/neo4j-csv-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/toolchain/jetty-servlet-api/4.0.6/jetty-servlet-api-4.0.6.jar + [classpath] /Users/jnr6/IdeaProjects/policy-machine-core/target/test-classes + [classpath] /Users/jnr6/.m2/repository/com/github/ben-manes/caffeine/caffeine/3.1.8/caffeine-3.1.8.jar + [classpath] /Users/jnr6/.m2/repository/com/profesorfalken/WMI4Java/1.6.3/WMI4Java-1.6.3.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/vintage/junit-vintage-engine/5.10.0/junit-vintage-engine-5.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-collections/5.16.0/neo4j-collections-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/assertj/assertj-core/3.24.2/assertj-core-3.24.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-graph-algo/5.16.0/neo4j-graph-algo-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.9.0/junit-jupiter-engine-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jvnet/staxex/stax-ex/1.8.1/stax-ex-1.8.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/app/neo4j-server/5.16.0/neo4j-server-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-monitoring/5.16.0/neo4j-monitoring-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-macros/5.16.0/neo4j-cypher-macros-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jprocesses/jProcesses/1.6.5/jProcesses-1.6.5.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-api/2.6.1/hk2-api-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.9.0/junit-jupiter-api-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-security/10.0.17/jetty-security-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcpkix-jdk18on/1.76/bcpkix-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-engine/1.9.0/junit-platform-engine-1.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-slf4j-provider/5.16.0/neo4j-slf4j-provider-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-kqueue/4.1.101.Final/netty-transport-native-kqueue-4.1.101.Final-osx-x86_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-data-collector/5.16.0/neo4j-data-collector-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/server-api/5.16.0/server-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-native/5.16.0/neo4j-native-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/module/jackson-module-jaxb-annotations/2.16.0/jackson-module-jaxb-annotations-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm/9.6/asm-9.6.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/jaxrs/jackson-jaxrs-base/2.16.0/jackson-jaxrs-base-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar + + -------------------------------------------------------------------------------- + [ Library path ] + -------------------------------------------------------------------------------- + /Users/jnr6/Library/Java/Extensions + /Library/Java/Extensions + /Network/Library/Java/Extensions + /System/Library/Java/Extensions + /usr/lib/java + /Users/jnr6/IdeaProjects/policy-machine-core + + -------------------------------------------------------------------------------- + [ System properties ] + -------------------------------------------------------------------------------- + sun.jnu.encoding = UTF-8 + sun.arch.data.model = 64 + user.timezone = America/New_York + visualvm.id = 83387447776122 + sun.java.launcher = SUN_STANDARD + user.country = US + sun.boot.library.path = /Library/Java/JavaVirtualMachines/jdk-17.0.2.jdk/Contents/Home/lib + sun.java.command = gov.nist.csd.pm.pap.neo4j.ImportTest + jdk.debug = release + sun.cpu.endian = little + user.home = /Users/jnr6 + user.language = en + file.separator = / + sun.management.compiler = HotSpot 64-Bit Tiered Compilers + user.name = jnr6 + path.separator = : + file.encoding = UTF-8 + jnidispatch.path = /Users/jnr6/Library/Caches/JNA/temp/jna12852001861721599847.tmp + jna.loaded = true + user.dir = /Users/jnr6/IdeaProjects/policy-machine-core + native.encoding = UTF-8 + sun.io.unicode.encoding = UnicodeBig + + -------------------------------------------------------------------------------- + [ (IANA) TimeZone database version ] + -------------------------------------------------------------------------------- + TimeZone version: 2021e (available for 601 zone identifiers) + + -------------------------------------------------------------------------------- + [ Network information ] + -------------------------------------------------------------------------------- + Interface utun2: + address: fe80:0:0:0:ce81:b1c:bd2c:69e%utun2 + Interface utun1: + address: fe80:0:0:0:bbf5:1c30:4238:57b2%utun1 + Interface utun0: + address: fe80:0:0:0:73be:4eb:3f31:a891%utun0 + Interface llw0: + address: fe80:0:0:0:c0a6:71ff:fe04:534c%llw0 + Interface awdl0: + address: fe80:0:0:0:c0a6:71ff:fe04:534c%awdl0 + Interface utun3: + address: 2610:20:6005:152:0:0:0:136%utun3 + address: fe80:0:0:0:aebc:32ff:fe94:d383%utun3 + address: 129.6.109.119 + Interface en0: + address: 192.168.1.247 + Interface lo0: + address: fe80:0:0:0:0:0:0:1%lo0 + address: 0:0:0:0:0:0:0:1%lo0 + address: 127.0.0.1 + + -------------------------------------------------------------------------------- + [ Native access information ] + -------------------------------------------------------------------------------- + Native access details: Native access is not available for current platform. + + -------------------------------------------------------------------------------- + [ DBMS config ] + -------------------------------------------------------------------------------- + DBMS provided settings: + server.bolt.enabled=true + server.bolt.listen_address=localhost:9999 + server.directories.neo4j_home=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + Directories in use: + server.directories.data=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data + server.directories.dumps.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/dumps + server.directories.import=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + server.directories.lib=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/lib + server.directories.licenses=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/licenses + server.directories.logs=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/logs + server.directories.neo4j_home=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + server.directories.plugins=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/plugins + server.directories.run=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/run + server.directories.script.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/scripts + server.directories.transaction.logs.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions + + -------------------------------------------------------------------------------- + [ Packaging ] + -------------------------------------------------------------------------------- + Could not read packaging info: java.nio.file.NoSuchFileException: /Users/jnr6/IdeaProjects/policy-machine-core/testdb/packaging_info + +2024-04-03 14:28:15.193+0000 INFO [o.n.d.i.DefaultIdentityModule] Found ServerId on disk: ServerId{54490f53} (54490f53-4b94-4d0f-9604-023c3fe1be5e) +2024-04-03 14:28:15.195+0000 INFO [o.n.d.i.DefaultIdentityModule] This instance is ServerId{54490f53} (54490f53-4b94-4d0f-9604-023c3fe1be5e) +2024-04-03 14:28:16.130+0000 INFO [o.n.d.d.DatabaseLifecycles] Creating 'DatabaseId{00000000[system]}'. +2024-04-03 14:28:16.398+0000 INFO [o.n.b.BoltServer] Using connector transport KQueue +2024-04-03 14:28:16.482+0000 INFO [o.n.b.BoltServer] Configured external Bolt connector with listener address localhost/127.0.0.1:9999 +2024-04-03 14:28:16.482+0000 INFO [o.n.b.BoltServer] Bolt server loaded +2024-04-03 14:28:16.496+0000 INFO [o.n.d.d.DatabaseLifecycles] Starting 'DatabaseId{00000000[system]}'. +2024-04-03 14:28:16.780+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [system/00000000] Scanning log file with version 0 for checkpoint entries +2024-04-03 14:28:16.835+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [system/00000000] Selected RecordFormat:PageAlignedV5_0[aligned-1.1] record format from store /Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system +2024-04-03 14:28:16.835+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [system/00000000] Selected format from the store files: RecordFormat:PageAlignedV5_0[aligned-1.1] +2024-04-03 14:28:17.577+0000 INFO [o.n.i.d.DiagnosticsManager] [system/00000000] + [system/00000000] ******************************************************************************** + [system/00000000] [ Database: system ] + [system/00000000] ******************************************************************************** + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Version ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] DBMS: community record-aligned-1.1 + [system/00000000] Kernel version: 5.16.0 + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Store files ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] Disk space on partition (Total / Free / Free %): 500068036608 / 108523016192 / 21 + [system/00000000] Storage files stored on file store: apfs + [system/00000000] Storage files: (filename : modification date - size) + [system/00000000] database_lock: 2024-04-03 04:12:32.900+0000 - 0B + [system/00000000] id-buffer.tmp.0: 2024-04-03 14:15:58.872+0000 - 0B + [system/00000000] neostore: 2024-04-03 04:12:32.662+0000 - 8.000KiB + [system/00000000] neostore.counts.db: 2024-04-03 14:28:17.348+0000 - 48.00KiB + [system/00000000] neostore.indexstats.db: 2024-04-03 14:28:17.405+0000 - 48.00KiB + [system/00000000] neostore.labeltokenstore.db: 2024-04-03 04:12:39.430+0000 - 8.000KiB + [system/00000000] neostore.labeltokenstore.db.id: 2024-04-03 14:28:17.266+0000 - 40.00KiB + [system/00000000] neostore.labeltokenstore.db.names: 2024-04-03 04:12:39.454+0000 - 8.000KiB + [system/00000000] neostore.labeltokenstore.db.names.id: 2024-04-03 14:28:17.249+0000 - 40.00KiB + [system/00000000] neostore.nodestore.db: 2024-04-03 04:12:39.416+0000 - 8.000KiB + [system/00000000] neostore.nodestore.db.id: 2024-04-03 14:28:17.036+0000 - 40.00KiB + [system/00000000] neostore.nodestore.db.labels: 2024-04-03 04:12:32.509+0000 - 8.000KiB + [system/00000000] neostore.nodestore.db.labels.id: 2024-04-03 14:28:17.005+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db: 2024-04-03 04:12:39.442+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.arrays: 2024-04-03 04:12:32.565+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.arrays.id: 2024-04-03 14:28:17.132+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.id: 2024-04-03 14:28:17.154+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.index: 2024-04-03 04:12:39.477+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.index.id: 2024-04-03 14:28:17.084+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.index.keys: 2024-04-03 04:12:39.464+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.index.keys.id: 2024-04-03 14:28:17.063+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.strings: 2024-04-03 04:12:39.367+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.strings.id: 2024-04-03 14:28:17.109+0000 - 40.00KiB + [system/00000000] neostore.relationshipgroupstore.db: 2024-04-03 04:12:32.640+0000 - 8.000KiB + [system/00000000] neostore.relationshipgroupstore.db.id: 2024-04-03 14:28:17.306+0000 - 40.00KiB + [system/00000000] neostore.relationshipgroupstore.degrees.db: 2024-04-03 14:28:17.379+0000 - 40.00KiB + [system/00000000] neostore.relationshipstore.db: 2024-04-03 04:12:39.378+0000 - 8.000KiB + [system/00000000] neostore.relationshipstore.db.id: 2024-04-03 14:28:17.180+0000 - 40.00KiB + [system/00000000] neostore.relationshiptypestore.db: 2024-04-03 04:12:39.405+0000 - 8.000KiB + [system/00000000] neostore.relationshiptypestore.db.id: 2024-04-03 14:28:17.228+0000 - 40.00KiB + [system/00000000] neostore.relationshiptypestore.db.names: 2024-04-03 04:12:39.392+0000 - 8.000KiB + [system/00000000] neostore.relationshiptypestore.db.names.id: 2024-04-03 14:28:17.204+0000 - 40.00KiB + [system/00000000] neostore.schemastore.db: 2024-04-03 04:12:39.490+0000 - 8.000KiB + [system/00000000] neostore.schemastore.db.id: 2024-04-03 14:28:17.286+0000 - 40.00KiB + [system/00000000] schema: + [system/00000000] index: + [system/00000000] range-1.0: + [system/00000000] 3: + [system/00000000] index-3: 2024-04-03 14:15:58.777+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.321+0000 - 48.00KiB + [system/00000000] 4: + [system/00000000] index-4: 2024-04-03 14:15:58.801+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.437+0000 - 48.00KiB + [system/00000000] 7: + [system/00000000] index-7: 2024-04-03 14:15:58.825+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.907+0000 - 48.00KiB + [system/00000000] 8: + [system/00000000] index-8: 2024-04-03 14:15:58.852+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.997+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.996+0000 - 192.0KiB + [system/00000000] token-lookup-1.0: + [system/00000000] 1: + [system/00000000] index-1: 2024-04-03 14:15:58.721+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:33.516+0000 - 48.00KiB + [system/00000000] 2: + [system/00000000] index-2: 2024-04-03 14:15:58.745+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:33.409+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:33.515+0000 - 96.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.321+0000 - 288.0KiB + [system/00000000] - Total: 2024-04-03 04:12:33.407+0000 - 288.0KiB + [system/00000000] Storage summary: + [system/00000000] Total size of store: 1.078MiB + [system/00000000] Total size of mapped files: 408.0KiB + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Transaction log ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] Transaction log files stored on file store: apfs + [system/00000000] Transaction log metadata: + [system/00000000] - current kernel version used in transactions: V5_15 + [system/00000000] - last committed transaction id: 37 + [system/00000000] Transaction log files: + [system/00000000] - existing transaction log versions: 0-0 + [system/00000000] - oldest transaction 2 found in log with version 0 + [system/00000000] - files: (filename : creation date - size) + [system/00000000] neostore.transaction.db.0: 2024-04-03 04:12:32.000+0000 - 19.26KiB + [system/00000000] - total size of files: 19.26KiB + [system/00000000] Checkpoint log files: + [system/00000000] - existing checkpoint log versions: 0-0 + [system/00000000] - last checkpoint: CheckpointInfo[transactionLogPosition=LogPosition{logVersion=0, byteOffset=19725}, storeId=StoreId{creationTime=1712117552660, random=4552926301767966796, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1}, checkpointEntryPosition=LogPosition{logVersion=0, byteOffset=360}, channelPositionAfterCheckpoint=LogPosition{logVersion=0, byteOffset=592}, checkpointFilePostReadPosition=LogPosition{logVersion=0, byteOffset=592}, kernelVersion=KernelVersion{V5_15,version=14}, kernelVersionByte=14, transactionId=TransactionId[transactionId=37, checksum=-1026009811, commitTimestamp=1712117555154, consensusIndex=-1], reason=Checkpoint triggered by "Database shutdown" @ txId: 37, consensusIndexInCheckpoint=true] + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Id usage ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] ArrayPropertyStore[neostore.nodestore.db.labels]: used=1 high=0 + [system/00000000] NodeStore[neostore.nodestore.db]: used=6 high=5 + [system/00000000] StringPropertyStore[neostore.propertystore.db.index.keys]: used=44 high=43 + [system/00000000] PropertyIndexStore[neostore.propertystore.db.index]: used=31 high=30 + [system/00000000] StringPropertyStore[neostore.propertystore.db.strings]: used=3 high=2 + [system/00000000] ArrayPropertyStore[neostore.propertystore.db.arrays]: used=1 high=0 + [system/00000000] PropertyStore[neostore.propertystore.db]: used=59 high=58 + [system/00000000] RelationshipStore[neostore.relationshipstore.db]: used=2 high=1 + [system/00000000] StringPropertyStore[neostore.relationshiptypestore.db.names]: used=2 high=1 + [system/00000000] RelationshipTypeStore[neostore.relationshiptypestore.db]: used=1 high=0 + [system/00000000] StringPropertyStore[neostore.labeltokenstore.db.names]: used=5 high=4 + [system/00000000] LabelTokenStore[neostore.labeltokenstore.db]: used=4 high=3 + [system/00000000] SchemaStore[neostore.schemastore.db]: used=11 high=10 + [system/00000000] RelationshipGroupStore[neostore.relationshipgroupstore.db]: used=1 high=0 + [system/00000000] NeoStore[neostore]: used=-1 high=-1 + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Metadata ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] EXTERNAL_STORE_UUID (Database identifier exposed as external store identity. Generated on creation and never updated): 8e4fd9af-0e04-47d8-a19c-cdb72dbda752 + [system/00000000] DATABASE_ID (The last used DatabaseId for this database): null + [system/00000000] LEGACY_STORE_VERSION (Legacy store format version. This field is used from 5.0 onwards only to distinguish non-migrated pre 5.0 metadata stores.): -3523014627327384477 + [system/00000000] STORE_ID (Store ID): StoreId{creationTime=1712117552660, random=4552926301767966796, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1} + [system/00000000] +2024-04-03 14:28:17.847+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:28:17.848+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:28:17.850+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:28:17.850+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:28:17.878+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:28:17.878+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:28:17.880+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:28:17.880+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:28:17.925+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 +2024-04-03 14:28:17.925+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 +2024-04-03 14:28:17.926+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:28:17.926+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 +2024-04-03 14:28:17.951+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 +2024-04-03 14:28:17.951+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 +2024-04-03 14:28:17.953+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 1ms +2024-04-03 14:28:17.953+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 +2024-04-03 14:28:17.982+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 +2024-04-03 14:28:17.982+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 +2024-04-03 14:28:17.988+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 5ms +2024-04-03 14:28:17.989+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 +2024-04-03 14:28:18.012+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 +2024-04-03 14:28:18.013+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 +2024-04-03 14:28:18.013+0000 INFO [o.n.k.i.a.i.IndexingService] [system/00000000] IndexingService.init: indexes not specifically mentioned above are ONLINE. Total 6 indexes. Processed in 208ms +2024-04-03 14:28:18.014+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:28:18.014+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 +2024-04-03 14:28:18.019+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] Requirement `Database unavailable` makes database system unavailable. +2024-04-03 14:28:18.020+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] DatabaseId{00000000[system]} is unavailable. +2024-04-03 14:28:18.076+0000 INFO [o.n.k.d.Database] [system/00000000] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/system/neostore.transaction.db.0] at version=0 +2024-04-03 14:28:18.080+0000 INFO [o.n.k.d.Database] [system/00000000] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/system/checkpoint.0] at version=0 +2024-04-03 14:28:18.081+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [system/00000000] Scanning log file with version 0 for checkpoint entries +2024-04-03 14:28:18.084+0000 INFO [o.n.k.i.a.i.IndexingService] [system/00000000] IndexingService.start: indexes not specifically mentioned above are ONLINE. Total 6 indexes. Processed in 0ms +2024-04-03 14:28:18.121+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] Fulfilling of requirement 'Database unavailable' makes database system available. +2024-04-03 14:28:18.121+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] DatabaseId{00000000[system]} is ready. +2024-04-03 14:28:18.244+0000 INFO [o.n.s.s.s.UserSecurityGraphComponent] Performing postInitialization step for component 'security-users' with version 4 and status CURRENT +2024-04-03 14:28:18.244+0000 INFO [o.n.s.s.s.UserSecurityGraphComponent] Updating the initial password in component 'security-users' +2024-04-03 14:28:18.259+0000 INFO [o.n.d.d.DatabaseLifecycles] Creating 'DatabaseId{fefd0874[neo4j]}'. +2024-04-03 14:28:18.262+0000 INFO [o.n.d.d.DatabaseLifecycles] Starting 'DatabaseId{fefd0874[neo4j]}'. +2024-04-03 14:28:18.296+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [neo4j/fefd0874] Scanning log file with version 0 for checkpoint entries +2024-04-03 14:28:18.451+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected RecordFormat:PageAlignedV5_0[aligned-1.1] record format from store /Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j +2024-04-03 14:28:18.451+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected format from the store files: RecordFormat:PageAlignedV5_0[aligned-1.1] +2024-04-03 14:28:18.727+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Transaction logs entries found after the last check point (which is at LogPosition{logVersion=0, byteOffset=12397492}). First observed transaction id: 56. +2024-04-03 14:28:18.769+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Recovery required from position LogPosition{logVersion=0, byteOffset=12397492} +2024-04-03 14:28:18.860+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] TransactionLogsRecovery +2024-04-03 14:28:18.915+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 10% completed +2024-04-03 14:28:19.002+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 20% completed +2024-04-03 14:28:19.015+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 30% completed +2024-04-03 14:28:19.049+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 40% completed +2024-04-03 14:28:19.132+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 50% completed +2024-04-03 14:28:19.161+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job registered: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:28:19.161+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job registered: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:28:19.161+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job started: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:28:19.161+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job started: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:28:19.163+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job finished: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 Number of pages visited: 5, Number of tree nodes: 4, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:28:19.163+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job finished: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 Number of pages visited: 5, Number of tree nodes: 4, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:28:19.163+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job closed: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:28:19.163+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job closed: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:28:19.184+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job registered: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:28:19.184+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job registered: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:28:19.184+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job started: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:28:19.184+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.init: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 49ms +2024-04-03 14:28:19.185+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job started: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:28:19.185+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job finished: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 Number of pages visited: 2, Number of tree nodes: 1, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:28:19.185+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job finished: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 Number of pages visited: 2, Number of tree nodes: 1, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:28:19.186+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job closed: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:28:19.186+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job closed: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:28:19.611+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 60% completed +2024-04-03 14:28:19.614+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 70% completed +2024-04-03 14:28:19.682+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 80% completed +2024-04-03 14:28:19.821+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 90% completed +2024-04-03 14:28:19.854+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 100% completed +2024-04-03 14:28:19.857+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Recovery in 'full' mode completed. Observed transactions range [first:56, last:60]: 5 transactions applied, 0 not completed transactions rolled back, skipped applying 0 previously rolled back transactions. Time spent: 1s 129ms. +2024-04-03 14:28:19.860+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.start: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 0ms +2024-04-03 14:28:19.861+0000 INFO [o.n.k.i.t.l.c.CheckPointerImpl] [neo4j/fefd0874] Checkpoint triggered by "Recovery completed." @ txId: 60 checkpoint started... +2024-04-03 14:28:20.257+0000 INFO [o.n.k.i.t.l.c.CheckPointerImpl] [neo4j/fefd0874] Checkpoint triggered by "Recovery completed." @ txId: 60 checkpoint completed in 395ms. Checkpoint flushed 398 pages (0% of total available pages), in 47 IOs. Checkpoint performed with IO limit: unlimited, paused in total 0 times( 0 millis). +2024-04-03 14:28:20.260+0000 INFO [o.n.k.i.t.l.p.LogPruningImpl] [neo4j/fefd0874] No log version pruned. The strategy used was '2 days'. +2024-04-03 14:28:20.580+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [neo4j/fefd0874] Scanning log file with version 0 for checkpoint entries +2024-04-03 14:28:20.602+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected RecordFormat:PageAlignedV5_0[aligned-1.1] record format from store /Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j +2024-04-03 14:28:20.602+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected format from the store files: RecordFormat:PageAlignedV5_0[aligned-1.1] +2024-04-03 14:28:20.818+0000 INFO [o.n.i.d.DiagnosticsManager] [neo4j/fefd0874] + [neo4j/fefd0874] ******************************************************************************** + [neo4j/fefd0874] [ Database: neo4j ] + [neo4j/fefd0874] ******************************************************************************** + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Version ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] DBMS: community record-aligned-1.1 + [neo4j/fefd0874] Kernel version: 5.16.0 + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Store files ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] Disk space on partition (Total / Free / Free %): 500068036608 / 108522741760 / 21 + [neo4j/fefd0874] Storage files stored on file store: apfs + [neo4j/fefd0874] Storage files: (filename : modification date - size) + [neo4j/fefd0874] database_lock: 2024-04-03 04:12:35.327+0000 - 0B + [neo4j/fefd0874] id-buffer.tmp.0: 2024-04-03 14:16:03.326+0000 - 625.3KiB + [neo4j/fefd0874] neostore: 2024-04-03 04:12:35.301+0000 - 8.000KiB + [neo4j/fefd0874] neostore.counts.db: 2024-04-03 14:28:20.762+0000 - 48.00KiB + [neo4j/fefd0874] neostore.indexstats.db: 2024-04-03 14:28:20.792+0000 - 48.00KiB + [neo4j/fefd0874] neostore.labeltokenstore.db: 2024-04-03 04:53:01.953+0000 - 8.000KiB + [neo4j/fefd0874] neostore.labeltokenstore.db.id: 2024-04-03 14:28:20.727+0000 - 40.00KiB + [neo4j/fefd0874] neostore.labeltokenstore.db.names: 2024-04-03 04:53:01.900+0000 - 8.000KiB + [neo4j/fefd0874] neostore.labeltokenstore.db.names.id: 2024-04-03 14:28:20.715+0000 - 40.00KiB + [neo4j/fefd0874] neostore.nodestore.db: 2024-04-03 14:28:20.208+0000 - 736.0KiB + [neo4j/fefd0874] neostore.nodestore.db.id: 2024-04-03 14:28:20.614+0000 - 80.00KiB + [neo4j/fefd0874] neostore.nodestore.db.labels: 2024-04-03 04:12:35.189+0000 - 8.000KiB + [neo4j/fefd0874] neostore.nodestore.db.labels.id: 2024-04-03 14:28:20.603+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db: 2024-04-03 14:28:20.226+0000 - 1.969MiB + [neo4j/fefd0874] neostore.propertystore.db.arrays: 2024-04-03 04:12:35.234+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.arrays.id: 2024-04-03 14:28:20.660+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.id: 2024-04-03 14:28:20.671+0000 - 80.00KiB + [neo4j/fefd0874] neostore.propertystore.db.index: 2024-04-03 04:30:28.255+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.index.id: 2024-04-03 14:28:20.639+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.index.keys: 2024-04-03 04:30:28.242+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.index.keys.id: 2024-04-03 14:28:20.626+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.strings: 2024-04-03 04:12:35.222+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.strings.id: 2024-04-03 14:28:20.650+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshipgroupstore.db: 2024-04-03 04:12:35.289+0000 - 8.000KiB + [neo4j/fefd0874] neostore.relationshipgroupstore.db.id: 2024-04-03 14:28:20.750+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshipgroupstore.degrees.db: 2024-04-03 14:28:20.775+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshipstore.db: 2024-04-03 04:12:35.245+0000 - 0B + [neo4j/fefd0874] neostore.relationshipstore.db.id: 2024-04-03 14:28:20.683+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshiptypestore.db: 2024-04-03 04:12:35.259+0000 - 0B + [neo4j/fefd0874] neostore.relationshiptypestore.db.id: 2024-04-03 14:28:20.703+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshiptypestore.db.names: 2024-04-03 04:12:35.246+0000 - 8.000KiB + [neo4j/fefd0874] neostore.relationshiptypestore.db.names.id: 2024-04-03 14:28:20.693+0000 - 40.00KiB + [neo4j/fefd0874] neostore.schemastore.db: 2024-04-03 04:12:36.054+0000 - 8.000KiB + [neo4j/fefd0874] neostore.schemastore.db.id: 2024-04-03 14:28:20.739+0000 - 40.00KiB + [neo4j/fefd0874] schema: + [neo4j/fefd0874] index: + [neo4j/fefd0874] token-lookup-1.0: + [neo4j/fefd0874] 1: + [neo4j/fefd0874] index-1: 2024-04-03 14:28:20.262+0000 - 104.0KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.459+0000 - 104.0KiB + [neo4j/fefd0874] 2: + [neo4j/fefd0874] index-2: 2024-04-03 14:28:20.274+0000 - 40.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.390+0000 - 40.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.459+0000 - 144.0KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.390+0000 - 144.0KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.390+0000 - 144.0KiB + [neo4j/fefd0874] Storage summary: + [neo4j/fefd0874] Total size of store: 4.283MiB + [neo4j/fefd0874] Total size of mapped files: 2.914MiB + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Transaction log ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] Transaction log files stored on file store: apfs + [neo4j/fefd0874] Transaction log metadata: + [neo4j/fefd0874] - current kernel version used in transactions: V5_15 + [neo4j/fefd0874] - last committed transaction id: 60 + [neo4j/fefd0874] Transaction log files: + [neo4j/fefd0874] - existing transaction log versions: 0-0 + [neo4j/fefd0874] - oldest transaction 2 found in log with version 0 + [neo4j/fefd0874] - files: (filename : creation date - size) + [neo4j/fefd0874] neostore.transaction.db.0: 2024-04-03 04:12:35.000+0000 - 20.66MiB + [neo4j/fefd0874] - total size of files: 20.66MiB + [neo4j/fefd0874] Checkpoint log files: + [neo4j/fefd0874] - existing checkpoint log versions: 0-0 + [neo4j/fefd0874] - last checkpoint: CheckpointInfo[transactionLogPosition=LogPosition{logVersion=0, byteOffset=21667402}, storeId=StoreId{creationTime=1712117555300, random=260265064831090288, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1}, checkpointEntryPosition=LogPosition{logVersion=0, byteOffset=2680}, channelPositionAfterCheckpoint=LogPosition{logVersion=0, byteOffset=2912}, checkpointFilePostReadPosition=LogPosition{logVersion=0, byteOffset=2912}, kernelVersion=KernelVersion{V5_15,version=14}, kernelVersionByte=14, transactionId=TransactionId[transactionId=60, checksum=1048532841, commitTimestamp=1712153993083, consensusIndex=-1], reason=Checkpoint triggered by "Recovery completed." @ txId: 60, consensusIndexInCheckpoint=true] + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Id usage ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] ArrayPropertyStore[neostore.nodestore.db.labels]: used=1 high=0 + [neo4j/fefd0874] NodeStore[neostore.nodestore.db]: used=50003 high=50002 + [neo4j/fefd0874] StringPropertyStore[neostore.propertystore.db.index.keys]: used=23 high=22 + [neo4j/fefd0874] PropertyIndexStore[neostore.propertystore.db.index]: used=13 high=12 + [neo4j/fefd0874] StringPropertyStore[neostore.propertystore.db.strings]: used=1 high=0 + [neo4j/fefd0874] ArrayPropertyStore[neostore.propertystore.db.arrays]: used=1 high=0 + [neo4j/fefd0874] PropertyStore[neostore.propertystore.db]: used=50011 high=50010 + [neo4j/fefd0874] RelationshipStore[neostore.relationshipstore.db]: used=0 high=-1 + [neo4j/fefd0874] StringPropertyStore[neostore.relationshiptypestore.db.names]: used=1 high=0 + [neo4j/fefd0874] RelationshipTypeStore[neostore.relationshiptypestore.db]: used=0 high=-1 + [neo4j/fefd0874] StringPropertyStore[neostore.labeltokenstore.db.names]: used=8 high=7 + [neo4j/fefd0874] LabelTokenStore[neostore.labeltokenstore.db]: used=7 high=6 + [neo4j/fefd0874] SchemaStore[neostore.schemastore.db]: used=3 high=2 + [neo4j/fefd0874] RelationshipGroupStore[neostore.relationshipgroupstore.db]: used=1 high=0 + [neo4j/fefd0874] NeoStore[neostore]: used=-1 high=-1 + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Metadata ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] EXTERNAL_STORE_UUID (Database identifier exposed as external store identity. Generated on creation and never updated): 485f4e4f-d438-40c9-a4ed-0bc1099d976f + [neo4j/fefd0874] DATABASE_ID (The last used DatabaseId for this database): null + [neo4j/fefd0874] LEGACY_STORE_VERSION (Legacy store format version. This field is used from 5.0 onwards only to distinguish non-migrated pre 5.0 metadata stores.): -3523014627327384477 + [neo4j/fefd0874] STORE_ID (Store ID): StoreId{creationTime=1712117555300, random=260265064831090288, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1} + [neo4j/fefd0874] +2024-04-03 14:28:20.854+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.init: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 33ms +2024-04-03 14:28:20.856+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] Requirement `Database unavailable` makes database neo4j unavailable. +2024-04-03 14:28:20.856+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] DatabaseId{fefd0874[neo4j]} is unavailable. +2024-04-03 14:28:20.858+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/neo4j/neostore.transaction.db.0] at version=0 +2024-04-03 14:28:20.859+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/neo4j/checkpoint.0] at version=0 +2024-04-03 14:28:20.860+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [neo4j/fefd0874] Scanning log file with version 0 for checkpoint entries +2024-04-03 14:28:20.862+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.start: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 0ms +2024-04-03 14:28:20.863+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] Fulfilling of requirement 'Database unavailable' makes database neo4j available. +2024-04-03 14:28:20.863+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] DatabaseId{fefd0874[neo4j]} is ready. +2024-04-03 14:28:20.917+0000 INFO [o.n.b.p.c.c.n.SocketNettyConnector] Bolt enabled on localhost:9999. +2024-04-03 14:28:20.917+0000 INFO [o.n.b.BoltServer] Bolt server started +2024-04-03 14:28:20.920+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] id: 266B93A8C1445AE734BA77BB99FDF56964B6082641ED1A3E87435C6A5111E836 +2024-04-03 14:28:20.920+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] name: system +2024-04-03 14:28:20.920+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] creationDate: 2024-04-03T04:12:32.66Z +2024-04-03 14:28:39.991+0000 INFO [o.n.g.f.m.GlobalModule] Logging config in use: Embedded default config 'default-server-logs.xml' +2024-04-03 14:28:40.166+0000 WARN [o.n.k.i.JvmChecker] The max heap memory has not been configured. It is recommended that it is always explicitly configured, to ensure the system has a balanced configuration. Until then, a JVM computed heuristic of 4294967296 bytes is used instead. If you are running neo4j server, you need to configure server.memory.heap.max_size in neo4j.conf. If you are running neo4j embedded, you have to launch the JVM with -Xmx set to a value. You can run neo4j-admin server memory-recommendation for memory configuration suggestions. +2024-04-03 14:28:40.166+0000 WARN [o.n.k.i.JvmChecker] The initial heap memory has not been configured. It is recommended that it is always explicitly configured, to ensure the system has a balanced configuration. Until then, a JVM computed heuristic of 268435456 bytes is used instead. If you are running neo4j server, you need to configure server.memory.heap.initial_size in neo4j.conf. If you are running neo4j embedded, you have to launch the JVM with -Xms set to a value. You can run neo4j-admin server memory-recommendation for memory configuration suggestions. +2024-04-03 14:28:40.197+0000 WARN [o.n.i.p.PageCache] The server.memory.pagecache.size setting has not been configured. It is recommended that this setting is always explicitly configured, to ensure the system has a balanced configuration. Until then, a computed heuristic value of 6442450944 bytes will be used instead. Run `neo4j-admin memory-recommendation` for memory configuration suggestions. +2024-04-03 14:28:40.197+0000 WARN [o.n.i.p.PageCache] Reflection access to java.nio.DirectByteBuffer is not available, using fallback mode. This could have negative impact on performance and memory usage. Consider adding --add-opens=java.base/java.nio=ALL-UNNAMED to VM options. +2024-04-03 14:28:40.427+0000 INFO [o.n.i.d.DiagnosticsManager] + ******************************************************************************** + [ System diagnostics ] + ******************************************************************************** + -------------------------------------------------------------------------------- + [ System memory information ] + -------------------------------------------------------------------------------- + Total Physical memory: 16.00GiB + Free Physical memory: 1.677GiB + Committed virtual memory: 38.29GiB + Total swap space: 3.000GiB + Free swap space: 934.8MiB + + -------------------------------------------------------------------------------- + [ JVM memory information ] + -------------------------------------------------------------------------------- + Free memory: 149.7MiB + Total memory: 260.0MiB + Max memory: 4.000GiB + Garbage Collector: G1 Young Generation: [G1 Eden Space, G1 Survivor Space, G1 Old Gen] + Garbage Collector: G1 Old Generation: [G1 Eden Space, G1 Survivor Space, G1 Old Gen] + Memory Pool: CodeHeap 'non-nmethods' (Non-heap memory): committed=2.438MiB, used=1.209MiB, max=5.570MiB, threshold=0B + Memory Pool: Metaspace (Non-heap memory): committed=20.13MiB, used=19.75MiB, max=-1B, threshold=0B + Memory Pool: CodeHeap 'profiled nmethods' (Non-heap memory): committed=4.438MiB, used=4.397MiB, max=117.2MiB, threshold=0B + Memory Pool: Compressed Class Space (Non-heap memory): committed=2.313MiB, used=2.121MiB, max=1.000GiB, threshold=0B + Memory Pool: G1 Eden Space (Heap memory): committed=156.0MiB, used=80.00MiB, max=-1B, threshold=? + Memory Pool: G1 Old Gen (Heap memory): committed=100.0MiB, used=22.79MiB, max=4.000GiB, threshold=0B + Memory Pool: G1 Survivor Space (Heap memory): committed=4.000MiB, used=3.556MiB, max=-1B, threshold=? + Memory Pool: CodeHeap 'non-profiled nmethods' (Non-heap memory): committed=2.438MiB, used=1.308MiB, max=117.2MiB, threshold=0B + + -------------------------------------------------------------------------------- + [ Operating system information ] + -------------------------------------------------------------------------------- + Operating System: Mac OS X; version: 12.7.4; arch: x86_64; cpus: 8 + Max number of file descriptors: 10240 + Number of open file descriptors: 226 + Process id: 71747 + Byte order: LITTLE_ENDIAN + Local timezone: America/New_York + Memory page size: 4096 + Unaligned memory access allowed: true + + -------------------------------------------------------------------------------- + [ JVM information ] + -------------------------------------------------------------------------------- + VM Name: Java HotSpot(TM) 64-Bit Server VM + VM Vendor: Oracle Corporation + VM Version: 17.0.2+8-LTS-86 + JIT compiler: HotSpot 64-Bit Tiered Compilers + VM Arguments: [-Dvisualvm.id=83413100904674, -javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=58522:/Applications/IntelliJ IDEA.app/Contents/bin, -Dfile.encoding=UTF-8] + + -------------------------------------------------------------------------------- + [ Java classpath ] + -------------------------------------------------------------------------------- + [classpath] /Users/jnr6/.m2/repository/it/unimi/dsi/fastutil/8.5.13/fastutil-8.5.13.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-codec-http/4.1.101.Final/netty-codec-http-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/scala-library/2.13.11/scala-library-2.13.11.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-command-line/5.16.0/neo4j-command-line-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-epoll/4.1.101.Final/netty-transport-native-epoll-4.1.101.Final-linux-x86_64.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-common/4.1.101.Final/netty-common-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.16.0/jackson-databind-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-consistency-check/5.16.0/neo4j-consistency-check-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-values/5.16.0/neo4j-values-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-dbms/5.16.0/neo4j-dbms-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-analysis/9.6/asm-analysis-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-planner/5.16.0/neo4j-cypher-planner-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/antlr/antlr4-runtime/4.8/antlr4-runtime-4.8.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-api/3.2.13/docker-java-api-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/activation/jakarta.activation-api/1.2.1/jakarta.activation-api-1.2.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-planner-spi/5.16.0/neo4j-cypher-planner-spi-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-resource/5.16.0/neo4j-resource-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-servlet/10.0.17/jetty-servlet-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-cache/1.13.0/shiro-cache-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-javacc-parser/5.16.0/neo4j-cypher-javacc-parser-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/sun/istack/istack-commons-runtime/3.0.8/istack-commons-runtime-3.0.8.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-configuration2/2.9.0/commons-configuration2-2.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-compress/1.21/commons-compress-1.21.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/containers/jersey-container-servlet/2.34/jersey-container-servlet-2.34.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-kqueue/4.1.101.Final/netty-transport-native-kqueue-4.1.101.Final-osx-aarch_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-concurrent/5.16.0/neo4j-concurrent-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/mysql/1.17.4/mysql-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/mockito/mockito-core/5.7.0/mockito-core-5.7.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher/5.16.0/neo4j-cypher-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-capabilities/5.16.0/neo4j-capabilities-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-notifications/5.16.0/neo4j-notifications-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-import-util/5.16.0/neo4j-import-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-config/5.16.0/neo4j-cypher-config-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/containers/jersey-container-servlet-core/2.34/jersey-container-servlet-core-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-io/5.16.0/neo4j-io-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-locator/2.6.1/hk2-locator-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-lang3/3.13.0/commons-lang3-3.13.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.16.0/jackson-core-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/mysql/mysql-connector-j/8.2.0/mysql-connector-j-8.2.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-classes-epoll/4.1.101.Final/netty-transport-classes-epoll-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/objenesis/objenesis/3.3/objenesis-3.3.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-server/2.34/jersey-server-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-client/2.34/jersey-client-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-ast-factory/5.16.0/neo4j-cypher-ast-factory-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-handler/4.1.101.Final/netty-handler-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j/5.16.0/neo4j-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/google/code/gson/gson/2.9.0/gson-2.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-logging/5.16.0/neo4j-logging-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-webapp/10.0.17/jetty-webapp-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-core/9.8.0/lucene-core-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-kernel-api/5.16.0/neo4j-kernel-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcutil-jdk18on/1.76/bcutil-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/bitbucket/inkytonik/kiama/kiama_2.13/2.5.1/kiama_2.13-2.5.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-common/5.16.0/neo4j-common-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/junit/junit/4.13.2/junit-4.13.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-index/5.16.0/neo4j-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport/4.1.101.Final/netty-transport-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-util/9.6/asm-util-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/jctools/jctools-core/4.0.2/jctools-core-4.0.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-graphdb-api/5.16.0/neo4j-graphdb-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/jdbc/1.17.4/jdbc-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-runtime-util/5.16.0/neo4j-cypher-runtime-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/collections/eclipse-collections-api/11.1.0/eclipse-collections-api-11.1.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-unsafe/5.16.0/neo4j-unsafe-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-server/10.0.17/jetty-server-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcprov-jdk18on/1.76/bcprov-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-slotted-runtime/5.16.0/neo4j-cypher-slotted-runtime-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-layout-template-json/2.20.0/log4j-layout-template-json-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-fulltext-index/5.16.0/neo4j-fulltext-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/net/java/dev/jna/jna/5.8.0/jna-5.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-util/10.0.17/jetty-util-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-expressions/5.16.0/neo4j-expressions-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-transport/3.2.13/docker-java-transport-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/commons-logging/commons-logging/1.2/commons-logging-1.2.jar + [classpath] /Users/jnr6/IdeaProjects/policy-machine-core/target/classes + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-testkit/1.10.0/junit-platform-testkit-1.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-core/1.13.0/shiro-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-physical-planning/5.16.0/neo4j-cypher-physical-planning-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-storage-engine-util/5.16.0/neo4j-storage-engine-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-ast/5.16.0/neo4j-ast-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-core/2.20.0/log4j-core-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-params/5.9.0/junit-jupiter-params-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/external/jakarta.inject/2.6.1/jakarta.inject-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/inject/jersey-hk2/2.34/jersey-hk2-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/hamcrest/hamcrest/2.2/hamcrest-2.2.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jaxb/jaxb-runtime/2.3.2/jaxb-runtime-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-logical-plans/5.16.0/neo4j-cypher-logical-plans-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-xml/10.0.17/jetty-xml-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar + [classpath] /Users/jnr6/.m2/repository/org/codehaus/jettison/jettison/1.5.4/jettison-1.5.4.jar + [classpath] /Users/jnr6/.m2/repository/com/propensive/mercator_2.13/0.2.1/mercator_2.13-0.2.1.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jaxb/txw2/2.3.2/txw2-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-resolver/4.1.101.Final/netty-resolver-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar + [classpath] /Users/jnr6/.m2/repository/org/awaitility/awaitility/4.2.0/awaitility-4.2.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-codec/4.1.101.Final/netty-codec-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-buffer/4.1.101.Final/netty-buffer-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-hash/1.13.0/shiro-crypto-hash-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/info/picocli/picocli/4.7.5/picocli-4.7.5.jar + [classpath] /Users/jnr6/.m2/repository/com/profesorfalken/jPowerShell/3.0/jPowerShell-3.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-cipher/1.13.0/shiro-crypto-cipher-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-lang/1.13.0/shiro-lang-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-token-api/5.16.0/neo4j-token-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-bolt/5.16.0/neo4j-bolt-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-record-storage-engine/5.16.0/neo4j-record-storage-engine-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-epoll/4.1.101.Final/netty-transport-native-epoll-4.1.101.Final-linux-aarch_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-ir/5.16.0/neo4j-cypher-ir-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/test-utils/5.15.0/test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter/5.10.0/junit-jupiter-5.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/app/neo4j-server-test-utils/5.15.0/neo4j-server-test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/rnorth/duct-tape/duct-tape/1.0.8/duct-tape-1.0.8.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/modules/scala-collection-contrib_2.13/0.3.0/scala-collection-contrib_2.13-0.3.0.jar + [classpath] /Users/jnr6/.m2/repository/org/slf4j/slf4j-api/2.0.0/slf4j-api-2.0.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-analysis-common/9.8.0/lucene-analysis-common-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/com/propensive/magnolia_2.13/0.17.0/magnolia_2.13-0.17.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-event/1.13.0/shiro-event-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-api/2.20.0/log4j-api-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-classes-kqueue/4.1.101.Final/netty-transport-classes-kqueue-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/net/bytebuddy/byte-buddy-agent/1.14.9/byte-buddy-agent-1.14.9.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/validation/jakarta.validation-api/2.0.2/jakarta.validation-api-2.0.2.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/database-commons/1.17.4/database-commons-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-front-end/5.16.0/neo4j-front-end-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-procedure/5.16.0/neo4j-procedure-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-import-tool/5.16.0/neo4j-import-tool-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/ws/rs/jakarta.ws.rs-api/2.1.6/jakarta.ws.rs-api-2.1.6.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.10.3/jackson-annotations-2.10.3.jar + [classpath] /Users/jnr6/.m2/repository/com/google/protobuf/protobuf-java/3.21.9/protobuf-java-3.21.9.jar + [classpath] /Users/jnr6/.m2/repository/io/projectreactor/reactor-core/3.6.0/reactor-core-3.6.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-wal/5.16.0/neo4j-wal-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-ssl/5.16.0/neo4j-ssl-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-unix-common/4.1.101.Final/netty-transport-native-unix-common-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-config-core/1.13.0/shiro-config-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-codegen/5.16.0/neo4j-codegen-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-tree/9.6/asm-tree-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-rewriting/5.16.0/neo4j-rewriting-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-backward-codecs/9.8.0/lucene-backward-codecs-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-lock/5.16.0/neo4j-lock-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-schema/5.16.0/neo4j-schema-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/collections/eclipse-collections/11.1.0/eclipse-collections-11.1.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/luben/zstd-jni/1.5.5-10/zstd-jni-1.5.5-10.jar + [classpath] /Users/jnr6/.m2/repository/commons-codec/commons-codec/1.16.0/commons-codec-1.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/jaxrs/jackson-jaxrs-json-provider/2.16.0/jackson-jaxrs-json-provider-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-expression-evaluator/5.16.0/neo4j-cypher-expression-evaluator-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/testcontainers/1.17.4/testcontainers-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/test/neo4j-harness/5.15.0/neo4j-harness-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/javassist/javassist/3.25.0-GA/javassist-3.25.0-GA.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-core/1.13.0/shiro-crypto-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-commons/1.9.0/junit-platform-commons-1.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-utils/2.6.1/hk2-utils-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/io-test-utils/5.15.0/io-test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/annotations/5.16.0/annotations-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-interpreted-runtime/5.16.0/neo4j-cypher-interpreted-runtime-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-cache/5.16.0/neo4j-cypher-cache-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jetbrains/annotations/17.0.0/annotations-17.0.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-layout/5.16.0/neo4j-layout-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/reactivestreams/reactive-streams/1.0.4/reactive-streams-1.0.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/licensing-proxy/zstd-proxy/5.16.0/zstd-proxy-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-security/5.16.0/neo4j-security-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-common/2.34/jersey-common-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/scala-reflect/2.13.11/scala-reflect-2.13.11.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/junit-jupiter/1.17.4/junit-jupiter-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-random-values/5.15.0/neo4j-random-values-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-transport-zerodep/3.2.13/docker-java-transport-zerodep-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-diagnostics/5.16.0/neo4j-diagnostics-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-http/10.0.17/jetty-http-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/cypher-ast-factory/5.16.0/cypher-ast-factory-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-configuration/5.16.0/neo4j-configuration-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-exceptions/5.16.0/neo4j-exceptions-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-util/5.16.0/neo4j-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-id-generator/5.16.0/neo4j-id-generator-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/seancfoley/ipaddress/5.4.0/ipaddress-5.4.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-io/10.0.17/jetty-io-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/commons-io/commons-io/2.11.0/commons-io-2.11.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-queryparser/9.8.0/lucene-queryparser-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/xml/bind/jakarta.xml.bind-api/2.3.2/jakarta.xml.bind-api-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-kernel/5.16.0/neo4j-kernel-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-fabric/5.16.0/neo4j-fabric-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-spatial-index/5.16.0/neo4j-spatial-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-procedure-api/5.16.0/neo4j-procedure-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/sun/xml/fastinfoset/FastInfoset/1.2.16/FastInfoset-1.2.16.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-lucene-index/5.16.0/neo4j-lucene-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/net/bytebuddy/byte-buddy/1.14.9/byte-buddy-1.14.9.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-query-router/5.16.0/neo4j-query-router-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-csv/5.16.0/neo4j-csv-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/toolchain/jetty-servlet-api/4.0.6/jetty-servlet-api-4.0.6.jar + [classpath] /Users/jnr6/IdeaProjects/policy-machine-core/target/test-classes + [classpath] /Users/jnr6/.m2/repository/com/github/ben-manes/caffeine/caffeine/3.1.8/caffeine-3.1.8.jar + [classpath] /Users/jnr6/.m2/repository/com/profesorfalken/WMI4Java/1.6.3/WMI4Java-1.6.3.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/vintage/junit-vintage-engine/5.10.0/junit-vintage-engine-5.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-collections/5.16.0/neo4j-collections-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/assertj/assertj-core/3.24.2/assertj-core-3.24.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-graph-algo/5.16.0/neo4j-graph-algo-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.9.0/junit-jupiter-engine-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jvnet/staxex/stax-ex/1.8.1/stax-ex-1.8.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/app/neo4j-server/5.16.0/neo4j-server-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-monitoring/5.16.0/neo4j-monitoring-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-macros/5.16.0/neo4j-cypher-macros-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jprocesses/jProcesses/1.6.5/jProcesses-1.6.5.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-api/2.6.1/hk2-api-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.9.0/junit-jupiter-api-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-security/10.0.17/jetty-security-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcpkix-jdk18on/1.76/bcpkix-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-engine/1.9.0/junit-platform-engine-1.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-slf4j-provider/5.16.0/neo4j-slf4j-provider-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-kqueue/4.1.101.Final/netty-transport-native-kqueue-4.1.101.Final-osx-x86_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-data-collector/5.16.0/neo4j-data-collector-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/server-api/5.16.0/server-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-native/5.16.0/neo4j-native-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/module/jackson-module-jaxb-annotations/2.16.0/jackson-module-jaxb-annotations-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm/9.6/asm-9.6.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/jaxrs/jackson-jaxrs-base/2.16.0/jackson-jaxrs-base-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar + + -------------------------------------------------------------------------------- + [ Library path ] + -------------------------------------------------------------------------------- + /Users/jnr6/Library/Java/Extensions + /Library/Java/Extensions + /Network/Library/Java/Extensions + /System/Library/Java/Extensions + /usr/lib/java + /Users/jnr6/IdeaProjects/policy-machine-core + + -------------------------------------------------------------------------------- + [ System properties ] + -------------------------------------------------------------------------------- + sun.jnu.encoding = UTF-8 + sun.arch.data.model = 64 + user.timezone = America/New_York + visualvm.id = 83413100904674 + sun.java.launcher = SUN_STANDARD + user.country = US + sun.boot.library.path = /Library/Java/JavaVirtualMachines/jdk-17.0.2.jdk/Contents/Home/lib + sun.java.command = gov.nist.csd.pm.pap.neo4j.ImportTest + jdk.debug = release + sun.cpu.endian = little + user.home = /Users/jnr6 + user.language = en + file.separator = / + sun.management.compiler = HotSpot 64-Bit Tiered Compilers + user.name = jnr6 + path.separator = : + file.encoding = UTF-8 + jnidispatch.path = /Users/jnr6/Library/Caches/JNA/temp/jna14464725335181737622.tmp + jna.loaded = true + user.dir = /Users/jnr6/IdeaProjects/policy-machine-core + native.encoding = UTF-8 + sun.io.unicode.encoding = UnicodeBig + + -------------------------------------------------------------------------------- + [ (IANA) TimeZone database version ] + -------------------------------------------------------------------------------- + TimeZone version: 2021e (available for 601 zone identifiers) + + -------------------------------------------------------------------------------- + [ Network information ] + -------------------------------------------------------------------------------- + Interface utun2: + address: fe80:0:0:0:ce81:b1c:bd2c:69e%utun2 + Interface utun1: + address: fe80:0:0:0:bbf5:1c30:4238:57b2%utun1 + Interface utun0: + address: fe80:0:0:0:73be:4eb:3f31:a891%utun0 + Interface llw0: + address: fe80:0:0:0:c0a6:71ff:fe04:534c%llw0 + Interface awdl0: + address: fe80:0:0:0:c0a6:71ff:fe04:534c%awdl0 + Interface utun3: + address: 2610:20:6005:152:0:0:0:136%utun3 + address: fe80:0:0:0:aebc:32ff:fe94:d383%utun3 + address: 129.6.109.119 + Interface en0: + address: 192.168.1.247 + Interface lo0: + address: fe80:0:0:0:0:0:0:1%lo0 + address: 0:0:0:0:0:0:0:1%lo0 + address: 127.0.0.1 + + -------------------------------------------------------------------------------- + [ Native access information ] + -------------------------------------------------------------------------------- + Native access details: Native access is not available for current platform. + + -------------------------------------------------------------------------------- + [ DBMS config ] + -------------------------------------------------------------------------------- + DBMS provided settings: + server.bolt.enabled=true + server.bolt.listen_address=localhost:9999 + server.directories.neo4j_home=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + Directories in use: + server.directories.data=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data + server.directories.dumps.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/dumps + server.directories.import=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + server.directories.lib=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/lib + server.directories.licenses=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/licenses + server.directories.logs=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/logs + server.directories.neo4j_home=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + server.directories.plugins=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/plugins + server.directories.run=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/run + server.directories.script.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/scripts + server.directories.transaction.logs.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions + + -------------------------------------------------------------------------------- + [ Packaging ] + -------------------------------------------------------------------------------- + Could not read packaging info: java.nio.file.NoSuchFileException: /Users/jnr6/IdeaProjects/policy-machine-core/testdb/packaging_info + +2024-04-03 14:28:40.579+0000 INFO [o.n.d.i.DefaultIdentityModule] Found ServerId on disk: ServerId{54490f53} (54490f53-4b94-4d0f-9604-023c3fe1be5e) +2024-04-03 14:28:40.582+0000 INFO [o.n.d.i.DefaultIdentityModule] This instance is ServerId{54490f53} (54490f53-4b94-4d0f-9604-023c3fe1be5e) +2024-04-03 14:28:41.241+0000 INFO [o.n.d.d.DatabaseLifecycles] Creating 'DatabaseId{00000000[system]}'. +2024-04-03 14:28:41.438+0000 INFO [o.n.b.BoltServer] Using connector transport KQueue +2024-04-03 14:28:41.499+0000 INFO [o.n.b.BoltServer] Configured external Bolt connector with listener address localhost/127.0.0.1:9999 +2024-04-03 14:28:41.499+0000 INFO [o.n.b.BoltServer] Bolt server loaded +2024-04-03 14:28:41.513+0000 INFO [o.n.d.d.DatabaseLifecycles] Starting 'DatabaseId{00000000[system]}'. +2024-04-03 14:28:41.743+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [system/00000000] Scanning log file with version 0 for checkpoint entries +2024-04-03 14:28:41.789+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [system/00000000] Selected RecordFormat:PageAlignedV5_0[aligned-1.1] record format from store /Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system +2024-04-03 14:28:41.789+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [system/00000000] Selected format from the store files: RecordFormat:PageAlignedV5_0[aligned-1.1] +2024-04-03 14:28:42.407+0000 INFO [o.n.i.d.DiagnosticsManager] [system/00000000] + [system/00000000] ******************************************************************************** + [system/00000000] [ Database: system ] + [system/00000000] ******************************************************************************** + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Version ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] DBMS: community record-aligned-1.1 + [system/00000000] Kernel version: 5.16.0 + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Store files ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] Disk space on partition (Total / Free / Free %): 500068036608 / 108516245504 / 21 + [system/00000000] Storage files stored on file store: apfs + [system/00000000] Storage files: (filename : modification date - size) + [system/00000000] database_lock: 2024-04-03 04:12:32.900+0000 - 0B + [system/00000000] id-buffer.tmp.0: 2024-04-03 14:28:18.019+0000 - 0B + [system/00000000] neostore: 2024-04-03 04:12:32.662+0000 - 8.000KiB + [system/00000000] neostore.counts.db: 2024-04-03 14:28:42.246+0000 - 48.00KiB + [system/00000000] neostore.indexstats.db: 2024-04-03 14:28:42.291+0000 - 48.00KiB + [system/00000000] neostore.labeltokenstore.db: 2024-04-03 04:12:39.430+0000 - 8.000KiB + [system/00000000] neostore.labeltokenstore.db.id: 2024-04-03 14:28:42.172+0000 - 40.00KiB + [system/00000000] neostore.labeltokenstore.db.names: 2024-04-03 04:12:39.454+0000 - 8.000KiB + [system/00000000] neostore.labeltokenstore.db.names.id: 2024-04-03 14:28:42.155+0000 - 40.00KiB + [system/00000000] neostore.nodestore.db: 2024-04-03 04:12:39.416+0000 - 8.000KiB + [system/00000000] neostore.nodestore.db.id: 2024-04-03 14:28:41.962+0000 - 40.00KiB + [system/00000000] neostore.nodestore.db.labels: 2024-04-03 04:12:32.509+0000 - 8.000KiB + [system/00000000] neostore.nodestore.db.labels.id: 2024-04-03 14:28:41.935+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db: 2024-04-03 04:12:39.442+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.arrays: 2024-04-03 04:12:32.565+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.arrays.id: 2024-04-03 14:28:42.053+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.id: 2024-04-03 14:28:42.076+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.index: 2024-04-03 04:12:39.477+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.index.id: 2024-04-03 14:28:42.010+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.index.keys: 2024-04-03 04:12:39.464+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.index.keys.id: 2024-04-03 14:28:41.985+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.strings: 2024-04-03 04:12:39.367+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.strings.id: 2024-04-03 14:28:42.035+0000 - 40.00KiB + [system/00000000] neostore.relationshipgroupstore.db: 2024-04-03 04:12:32.640+0000 - 8.000KiB + [system/00000000] neostore.relationshipgroupstore.db.id: 2024-04-03 14:28:42.207+0000 - 40.00KiB + [system/00000000] neostore.relationshipgroupstore.degrees.db: 2024-04-03 14:28:42.273+0000 - 40.00KiB + [system/00000000] neostore.relationshipstore.db: 2024-04-03 04:12:39.378+0000 - 8.000KiB + [system/00000000] neostore.relationshipstore.db.id: 2024-04-03 14:28:42.096+0000 - 40.00KiB + [system/00000000] neostore.relationshiptypestore.db: 2024-04-03 04:12:39.405+0000 - 8.000KiB + [system/00000000] neostore.relationshiptypestore.db.id: 2024-04-03 14:28:42.134+0000 - 40.00KiB + [system/00000000] neostore.relationshiptypestore.db.names: 2024-04-03 04:12:39.392+0000 - 8.000KiB + [system/00000000] neostore.relationshiptypestore.db.names.id: 2024-04-03 14:28:42.118+0000 - 40.00KiB + [system/00000000] neostore.schemastore.db: 2024-04-03 04:12:39.490+0000 - 8.000KiB + [system/00000000] neostore.schemastore.db.id: 2024-04-03 14:28:42.189+0000 - 40.00KiB + [system/00000000] schema: + [system/00000000] index: + [system/00000000] range-1.0: + [system/00000000] 3: + [system/00000000] index-3: 2024-04-03 14:28:17.913+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.321+0000 - 48.00KiB + [system/00000000] 4: + [system/00000000] index-4: 2024-04-03 14:28:17.939+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.437+0000 - 48.00KiB + [system/00000000] 7: + [system/00000000] index-7: 2024-04-03 14:28:17.966+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.907+0000 - 48.00KiB + [system/00000000] 8: + [system/00000000] index-8: 2024-04-03 14:28:18.001+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.997+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.996+0000 - 192.0KiB + [system/00000000] token-lookup-1.0: + [system/00000000] 1: + [system/00000000] index-1: 2024-04-03 14:28:17.833+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:33.516+0000 - 48.00KiB + [system/00000000] 2: + [system/00000000] index-2: 2024-04-03 14:28:17.867+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:33.409+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:33.515+0000 - 96.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.321+0000 - 288.0KiB + [system/00000000] - Total: 2024-04-03 04:12:33.407+0000 - 288.0KiB + [system/00000000] Storage summary: + [system/00000000] Total size of store: 1.078MiB + [system/00000000] Total size of mapped files: 408.0KiB + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Transaction log ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] Transaction log files stored on file store: apfs + [system/00000000] Transaction log metadata: + [system/00000000] - current kernel version used in transactions: V5_15 + [system/00000000] - last committed transaction id: 37 + [system/00000000] Transaction log files: + [system/00000000] - existing transaction log versions: 0-0 + [system/00000000] - oldest transaction 2 found in log with version 0 + [system/00000000] - files: (filename : creation date - size) + [system/00000000] neostore.transaction.db.0: 2024-04-03 04:12:32.000+0000 - 19.26KiB + [system/00000000] - total size of files: 19.26KiB + [system/00000000] Checkpoint log files: + [system/00000000] - existing checkpoint log versions: 0-0 + [system/00000000] - last checkpoint: CheckpointInfo[transactionLogPosition=LogPosition{logVersion=0, byteOffset=19725}, storeId=StoreId{creationTime=1712117552660, random=4552926301767966796, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1}, checkpointEntryPosition=LogPosition{logVersion=0, byteOffset=360}, channelPositionAfterCheckpoint=LogPosition{logVersion=0, byteOffset=592}, checkpointFilePostReadPosition=LogPosition{logVersion=0, byteOffset=592}, kernelVersion=KernelVersion{V5_15,version=14}, kernelVersionByte=14, transactionId=TransactionId[transactionId=37, checksum=-1026009811, commitTimestamp=1712117555154, consensusIndex=-1], reason=Checkpoint triggered by "Database shutdown" @ txId: 37, consensusIndexInCheckpoint=true] + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Id usage ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] ArrayPropertyStore[neostore.nodestore.db.labels]: used=1 high=0 + [system/00000000] NodeStore[neostore.nodestore.db]: used=6 high=5 + [system/00000000] StringPropertyStore[neostore.propertystore.db.index.keys]: used=44 high=43 + [system/00000000] PropertyIndexStore[neostore.propertystore.db.index]: used=31 high=30 + [system/00000000] StringPropertyStore[neostore.propertystore.db.strings]: used=3 high=2 + [system/00000000] ArrayPropertyStore[neostore.propertystore.db.arrays]: used=1 high=0 + [system/00000000] PropertyStore[neostore.propertystore.db]: used=59 high=58 + [system/00000000] RelationshipStore[neostore.relationshipstore.db]: used=2 high=1 + [system/00000000] StringPropertyStore[neostore.relationshiptypestore.db.names]: used=2 high=1 + [system/00000000] RelationshipTypeStore[neostore.relationshiptypestore.db]: used=1 high=0 + [system/00000000] StringPropertyStore[neostore.labeltokenstore.db.names]: used=5 high=4 + [system/00000000] LabelTokenStore[neostore.labeltokenstore.db]: used=4 high=3 + [system/00000000] SchemaStore[neostore.schemastore.db]: used=11 high=10 + [system/00000000] RelationshipGroupStore[neostore.relationshipgroupstore.db]: used=1 high=0 + [system/00000000] NeoStore[neostore]: used=-1 high=-1 + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Metadata ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] EXTERNAL_STORE_UUID (Database identifier exposed as external store identity. Generated on creation and never updated): 8e4fd9af-0e04-47d8-a19c-cdb72dbda752 + [system/00000000] DATABASE_ID (The last used DatabaseId for this database): null + [system/00000000] LEGACY_STORE_VERSION (Legacy store format version. This field is used from 5.0 onwards only to distinguish non-migrated pre 5.0 metadata stores.): -3523014627327384477 + [system/00000000] STORE_ID (Store ID): StoreId{creationTime=1712117552660, random=4552926301767966796, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1} + [system/00000000] +2024-04-03 14:28:42.598+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:28:42.599+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:28:42.601+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:28:42.601+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:28:42.622+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:28:42.623+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:28:42.624+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:28:42.624+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:28:42.662+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 +2024-04-03 14:28:42.663+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 +2024-04-03 14:28:42.664+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:28:42.664+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 +2024-04-03 14:28:42.689+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 +2024-04-03 14:28:42.689+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 +2024-04-03 14:28:42.690+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:28:42.690+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 +2024-04-03 14:28:42.715+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 +2024-04-03 14:28:42.716+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 +2024-04-03 14:28:42.717+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:28:42.717+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 +2024-04-03 14:28:42.747+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 +2024-04-03 14:28:42.747+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 +2024-04-03 14:28:42.748+0000 INFO [o.n.k.i.a.i.IndexingService] [system/00000000] IndexingService.init: indexes not specifically mentioned above are ONLINE. Total 6 indexes. Processed in 184ms +2024-04-03 14:28:42.749+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:28:42.749+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 +2024-04-03 14:28:42.755+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] Requirement `Database unavailable` makes database system unavailable. +2024-04-03 14:28:42.756+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] DatabaseId{00000000[system]} is unavailable. +2024-04-03 14:28:42.817+0000 INFO [o.n.k.d.Database] [system/00000000] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/system/neostore.transaction.db.0] at version=0 +2024-04-03 14:28:42.820+0000 INFO [o.n.k.d.Database] [system/00000000] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/system/checkpoint.0] at version=0 +2024-04-03 14:28:42.822+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [system/00000000] Scanning log file with version 0 for checkpoint entries +2024-04-03 14:28:42.825+0000 INFO [o.n.k.i.a.i.IndexingService] [system/00000000] IndexingService.start: indexes not specifically mentioned above are ONLINE. Total 6 indexes. Processed in 0ms +2024-04-03 14:28:42.856+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] Fulfilling of requirement 'Database unavailable' makes database system available. +2024-04-03 14:28:42.856+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] DatabaseId{00000000[system]} is ready. +2024-04-03 14:28:42.951+0000 INFO [o.n.s.s.s.UserSecurityGraphComponent] Performing postInitialization step for component 'security-users' with version 4 and status CURRENT +2024-04-03 14:28:42.951+0000 INFO [o.n.s.s.s.UserSecurityGraphComponent] Updating the initial password in component 'security-users' +2024-04-03 14:28:42.963+0000 INFO [o.n.d.d.DatabaseLifecycles] Creating 'DatabaseId{fefd0874[neo4j]}'. +2024-04-03 14:28:42.967+0000 INFO [o.n.d.d.DatabaseLifecycles] Starting 'DatabaseId{fefd0874[neo4j]}'. +2024-04-03 14:28:43.001+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [neo4j/fefd0874] Scanning log file with version 0 for checkpoint entries +2024-04-03 14:28:43.162+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected RecordFormat:PageAlignedV5_0[aligned-1.1] record format from store /Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j +2024-04-03 14:28:43.163+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected format from the store files: RecordFormat:PageAlignedV5_0[aligned-1.1] +2024-04-03 14:28:43.408+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Transaction logs entries found after the last check point (which is at LogPosition{logVersion=0, byteOffset=21667402}). First observed transaction id: 61. +2024-04-03 14:28:43.451+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Recovery required from position LogPosition{logVersion=0, byteOffset=21667402} +2024-04-03 14:28:43.509+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] TransactionLogsRecovery +2024-04-03 14:28:43.672+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 10% completed +2024-04-03 14:28:43.672+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 20% completed +2024-04-03 14:28:43.672+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 30% completed +2024-04-03 14:28:43.672+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 40% completed +2024-04-03 14:28:43.672+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 50% completed +2024-04-03 14:28:43.701+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job registered: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:28:43.702+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job registered: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:28:43.702+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job started: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:28:43.702+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job started: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:28:43.703+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job finished: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 Number of pages visited: 10, Number of tree nodes: 9, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:28:43.703+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job finished: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 Number of pages visited: 10, Number of tree nodes: 9, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:28:43.703+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job closed: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:28:43.703+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job closed: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:28:43.725+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job registered: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:28:43.726+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job registered: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:28:43.726+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job started: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:28:43.726+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.init: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 51ms +2024-04-03 14:28:43.726+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job started: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:28:43.727+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job finished: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 Number of pages visited: 2, Number of tree nodes: 1, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:28:43.727+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job finished: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 Number of pages visited: 2, Number of tree nodes: 1, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:28:43.727+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job closed: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:28:43.727+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job closed: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:28:44.205+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 60% completed +2024-04-03 14:28:44.205+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 70% completed +2024-04-03 14:28:44.206+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 80% completed +2024-04-03 14:28:44.206+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 90% completed +2024-04-03 14:28:44.206+0000 INFO [o.n.k.r.Recovery] [neo4j/fefd0874] 100% completed +2024-04-03 14:28:44.207+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Recovery in 'full' mode completed. Observed transactions range [first:61, last:61]: 1 transactions applied, 0 not completed transactions rolled back, skipped applying 0 previously rolled back transactions. Time spent: 798ms. +2024-04-03 14:28:44.213+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.start: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 0ms +2024-04-03 14:28:44.215+0000 INFO [o.n.k.i.t.l.c.CheckPointerImpl] [neo4j/fefd0874] Checkpoint triggered by "Recovery completed." @ txId: 61 checkpoint started... +2024-04-03 14:28:44.639+0000 INFO [o.n.k.i.t.l.c.CheckPointerImpl] [neo4j/fefd0874] Checkpoint triggered by "Recovery completed." @ txId: 61 checkpoint completed in 423ms. Checkpoint flushed 401 pages (0% of total available pages), in 42 IOs. Checkpoint performed with IO limit: unlimited, paused in total 0 times( 0 millis). +2024-04-03 14:28:44.643+0000 INFO [o.n.k.i.t.l.p.LogPruningImpl] [neo4j/fefd0874] No log version pruned. The strategy used was '2 days'. +2024-04-03 14:28:44.933+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [neo4j/fefd0874] Scanning log file with version 0 for checkpoint entries +2024-04-03 14:28:44.960+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected RecordFormat:PageAlignedV5_0[aligned-1.1] record format from store /Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j +2024-04-03 14:28:44.960+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected format from the store files: RecordFormat:PageAlignedV5_0[aligned-1.1] +2024-04-03 14:28:45.195+0000 INFO [o.n.i.d.DiagnosticsManager] [neo4j/fefd0874] + [neo4j/fefd0874] ******************************************************************************** + [neo4j/fefd0874] [ Database: neo4j ] + [neo4j/fefd0874] ******************************************************************************** + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Version ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] DBMS: community record-aligned-1.1 + [neo4j/fefd0874] Kernel version: 5.16.0 + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Store files ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] Disk space on partition (Total / Free / Free %): 500068036608 / 108516110336 / 21 + [neo4j/fefd0874] Storage files stored on file store: apfs + [neo4j/fefd0874] Storage files: (filename : modification date - size) + [neo4j/fefd0874] database_lock: 2024-04-03 04:12:35.327+0000 - 0B + [neo4j/fefd0874] id-buffer.tmp.0: 2024-04-03 14:28:23.865+0000 - 781.6KiB + [neo4j/fefd0874] neostore: 2024-04-03 04:12:35.301+0000 - 8.000KiB + [neo4j/fefd0874] neostore.counts.db: 2024-04-03 14:28:45.141+0000 - 48.00KiB + [neo4j/fefd0874] neostore.indexstats.db: 2024-04-03 14:28:45.166+0000 - 48.00KiB + [neo4j/fefd0874] neostore.labeltokenstore.db: 2024-04-03 04:53:01.953+0000 - 8.000KiB + [neo4j/fefd0874] neostore.labeltokenstore.db.id: 2024-04-03 14:28:45.104+0000 - 40.00KiB + [neo4j/fefd0874] neostore.labeltokenstore.db.names: 2024-04-03 04:53:01.900+0000 - 8.000KiB + [neo4j/fefd0874] neostore.labeltokenstore.db.names.id: 2024-04-03 14:28:45.095+0000 - 40.00KiB + [neo4j/fefd0874] neostore.nodestore.db: 2024-04-03 14:28:44.593+0000 - 736.0KiB + [neo4j/fefd0874] neostore.nodestore.db.id: 2024-04-03 14:28:44.975+0000 - 96.00KiB + [neo4j/fefd0874] neostore.nodestore.db.labels: 2024-04-03 04:12:35.189+0000 - 8.000KiB + [neo4j/fefd0874] neostore.nodestore.db.labels.id: 2024-04-03 14:28:44.962+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db: 2024-04-03 14:28:44.610+0000 - 1.969MiB + [neo4j/fefd0874] neostore.propertystore.db.arrays: 2024-04-03 04:12:35.234+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.arrays.id: 2024-04-03 14:28:45.028+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.id: 2024-04-03 14:28:45.042+0000 - 96.00KiB + [neo4j/fefd0874] neostore.propertystore.db.index: 2024-04-03 04:30:28.255+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.index.id: 2024-04-03 14:28:45.001+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.index.keys: 2024-04-03 04:30:28.242+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.index.keys.id: 2024-04-03 14:28:44.988+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.strings: 2024-04-03 04:12:35.222+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.strings.id: 2024-04-03 14:28:45.015+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshipgroupstore.db: 2024-04-03 04:12:35.289+0000 - 8.000KiB + [neo4j/fefd0874] neostore.relationshipgroupstore.db.id: 2024-04-03 14:28:45.128+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshipgroupstore.degrees.db: 2024-04-03 14:28:45.153+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshipstore.db: 2024-04-03 04:12:35.245+0000 - 0B + [neo4j/fefd0874] neostore.relationshipstore.db.id: 2024-04-03 14:28:45.055+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshiptypestore.db: 2024-04-03 04:12:35.259+0000 - 0B + [neo4j/fefd0874] neostore.relationshiptypestore.db.id: 2024-04-03 14:28:45.083+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshiptypestore.db.names: 2024-04-03 04:12:35.246+0000 - 8.000KiB + [neo4j/fefd0874] neostore.relationshiptypestore.db.names.id: 2024-04-03 14:28:45.068+0000 - 40.00KiB + [neo4j/fefd0874] neostore.schemastore.db: 2024-04-03 04:12:36.054+0000 - 8.000KiB + [neo4j/fefd0874] neostore.schemastore.db.id: 2024-04-03 14:28:45.117+0000 - 40.00KiB + [neo4j/fefd0874] schema: + [neo4j/fefd0874] index: + [neo4j/fefd0874] token-lookup-1.0: + [neo4j/fefd0874] 1: + [neo4j/fefd0874] index-1: 2024-04-03 14:28:44.645+0000 - 104.0KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.459+0000 - 104.0KiB + [neo4j/fefd0874] 2: + [neo4j/fefd0874] index-2: 2024-04-03 14:28:44.656+0000 - 40.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.390+0000 - 40.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.459+0000 - 144.0KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.390+0000 - 144.0KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.390+0000 - 144.0KiB + [neo4j/fefd0874] Storage summary: + [neo4j/fefd0874] Total size of store: 4.466MiB + [neo4j/fefd0874] Total size of mapped files: 2.914MiB + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Transaction log ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] Transaction log files stored on file store: apfs + [neo4j/fefd0874] Transaction log metadata: + [neo4j/fefd0874] - current kernel version used in transactions: V5_15 + [neo4j/fefd0874] - last committed transaction id: 61 + [neo4j/fefd0874] Transaction log files: + [neo4j/fefd0874] - existing transaction log versions: 0-0 + [neo4j/fefd0874] - oldest transaction 2 found in log with version 0 + [neo4j/fefd0874] - files: (filename : creation date - size) + [neo4j/fefd0874] neostore.transaction.db.0: 2024-04-03 04:12:35.000+0000 - 25.57MiB + [neo4j/fefd0874] - total size of files: 25.57MiB + [neo4j/fefd0874] Checkpoint log files: + [neo4j/fefd0874] - existing checkpoint log versions: 0-0 + [neo4j/fefd0874] - last checkpoint: CheckpointInfo[transactionLogPosition=LogPosition{logVersion=0, byteOffset=26816874}, storeId=StoreId{creationTime=1712117555300, random=260265064831090288, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1}, checkpointEntryPosition=LogPosition{logVersion=0, byteOffset=2912}, channelPositionAfterCheckpoint=LogPosition{logVersion=0, byteOffset=3144}, checkpointFilePostReadPosition=LogPosition{logVersion=0, byteOffset=3144}, kernelVersion=KernelVersion{V5_15,version=14}, kernelVersionByte=14, transactionId=TransactionId[transactionId=61, checksum=1300269007, commitTimestamp=1712154502651, consensusIndex=-1], reason=Checkpoint triggered by "Recovery completed." @ txId: 61, consensusIndexInCheckpoint=true] + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Id usage ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] ArrayPropertyStore[neostore.nodestore.db.labels]: used=1 high=0 + [neo4j/fefd0874] NodeStore[neostore.nodestore.db]: used=50003 high=50002 + [neo4j/fefd0874] StringPropertyStore[neostore.propertystore.db.index.keys]: used=23 high=22 + [neo4j/fefd0874] PropertyIndexStore[neostore.propertystore.db.index]: used=13 high=12 + [neo4j/fefd0874] StringPropertyStore[neostore.propertystore.db.strings]: used=1 high=0 + [neo4j/fefd0874] ArrayPropertyStore[neostore.propertystore.db.arrays]: used=1 high=0 + [neo4j/fefd0874] PropertyStore[neostore.propertystore.db]: used=50011 high=50010 + [neo4j/fefd0874] RelationshipStore[neostore.relationshipstore.db]: used=0 high=-1 + [neo4j/fefd0874] StringPropertyStore[neostore.relationshiptypestore.db.names]: used=1 high=0 + [neo4j/fefd0874] RelationshipTypeStore[neostore.relationshiptypestore.db]: used=0 high=-1 + [neo4j/fefd0874] StringPropertyStore[neostore.labeltokenstore.db.names]: used=8 high=7 + [neo4j/fefd0874] LabelTokenStore[neostore.labeltokenstore.db]: used=7 high=6 + [neo4j/fefd0874] SchemaStore[neostore.schemastore.db]: used=3 high=2 + [neo4j/fefd0874] RelationshipGroupStore[neostore.relationshipgroupstore.db]: used=1 high=0 + [neo4j/fefd0874] NeoStore[neostore]: used=-1 high=-1 + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Metadata ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] EXTERNAL_STORE_UUID (Database identifier exposed as external store identity. Generated on creation and never updated): 485f4e4f-d438-40c9-a4ed-0bc1099d976f + [neo4j/fefd0874] DATABASE_ID (The last used DatabaseId for this database): null + [neo4j/fefd0874] LEGACY_STORE_VERSION (Legacy store format version. This field is used from 5.0 onwards only to distinguish non-migrated pre 5.0 metadata stores.): -3523014627327384477 + [neo4j/fefd0874] STORE_ID (Store ID): StoreId{creationTime=1712117555300, random=260265064831090288, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1} + [neo4j/fefd0874] +2024-04-03 14:28:45.228+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.init: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 30ms +2024-04-03 14:28:45.230+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] Requirement `Database unavailable` makes database neo4j unavailable. +2024-04-03 14:28:45.231+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] DatabaseId{fefd0874[neo4j]} is unavailable. +2024-04-03 14:28:45.248+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/neo4j/neostore.transaction.db.0] at version=0 +2024-04-03 14:28:45.249+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/neo4j/checkpoint.0] at version=0 +2024-04-03 14:28:45.250+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [neo4j/fefd0874] Scanning log file with version 0 for checkpoint entries +2024-04-03 14:28:45.251+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.start: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 0ms +2024-04-03 14:28:45.252+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] Fulfilling of requirement 'Database unavailable' makes database neo4j available. +2024-04-03 14:28:45.252+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] DatabaseId{fefd0874[neo4j]} is ready. +2024-04-03 14:28:45.289+0000 INFO [o.n.b.p.c.c.n.SocketNettyConnector] Bolt enabled on localhost:9999. +2024-04-03 14:28:45.289+0000 INFO [o.n.b.BoltServer] Bolt server started +2024-04-03 14:28:45.292+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] id: 266B93A8C1445AE734BA77BB99FDF56964B6082641ED1A3E87435C6A5111E836 +2024-04-03 14:28:45.292+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] name: system +2024-04-03 14:28:45.292+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] creationDate: 2024-04-03T04:12:32.66Z +2024-04-03 14:29:11.337+0000 INFO [o.n.g.f.m.GlobalModule] Logging config in use: Embedded default config 'default-server-logs.xml' +2024-04-03 14:29:11.562+0000 WARN [o.n.k.i.JvmChecker] The max heap memory has not been configured. It is recommended that it is always explicitly configured, to ensure the system has a balanced configuration. Until then, a JVM computed heuristic of 4294967296 bytes is used instead. If you are running neo4j server, you need to configure server.memory.heap.max_size in neo4j.conf. If you are running neo4j embedded, you have to launch the JVM with -Xmx set to a value. You can run neo4j-admin server memory-recommendation for memory configuration suggestions. +2024-04-03 14:29:11.562+0000 WARN [o.n.k.i.JvmChecker] The initial heap memory has not been configured. It is recommended that it is always explicitly configured, to ensure the system has a balanced configuration. Until then, a JVM computed heuristic of 268435456 bytes is used instead. If you are running neo4j server, you need to configure server.memory.heap.initial_size in neo4j.conf. If you are running neo4j embedded, you have to launch the JVM with -Xms set to a value. You can run neo4j-admin server memory-recommendation for memory configuration suggestions. +2024-04-03 14:29:11.594+0000 WARN [o.n.i.p.PageCache] The server.memory.pagecache.size setting has not been configured. It is recommended that this setting is always explicitly configured, to ensure the system has a balanced configuration. Until then, a computed heuristic value of 6442450944 bytes will be used instead. Run `neo4j-admin memory-recommendation` for memory configuration suggestions. +2024-04-03 14:29:11.594+0000 WARN [o.n.i.p.PageCache] Reflection access to java.nio.DirectByteBuffer is not available, using fallback mode. This could have negative impact on performance and memory usage. Consider adding --add-opens=java.base/java.nio=ALL-UNNAMED to VM options. +2024-04-03 14:29:11.839+0000 INFO [o.n.i.d.DiagnosticsManager] + ******************************************************************************** + [ System diagnostics ] + ******************************************************************************** + -------------------------------------------------------------------------------- + [ System memory information ] + -------------------------------------------------------------------------------- + Total Physical memory: 16.00GiB + Free Physical memory: 1.573GiB + Committed virtual memory: 38.30GiB + Total swap space: 3.000GiB + Free swap space: 966.8MiB + + -------------------------------------------------------------------------------- + [ JVM memory information ] + -------------------------------------------------------------------------------- + Free memory: 149.2MiB + Total memory: 260.0MiB + Max memory: 4.000GiB + Garbage Collector: G1 Young Generation: [G1 Eden Space, G1 Survivor Space, G1 Old Gen] + Garbage Collector: G1 Old Generation: [G1 Eden Space, G1 Survivor Space, G1 Old Gen] + Memory Pool: CodeHeap 'non-nmethods' (Non-heap memory): committed=2.438MiB, used=1.212MiB, max=5.570MiB, threshold=0B + Memory Pool: Metaspace (Non-heap memory): committed=20.06MiB, used=19.74MiB, max=-1B, threshold=0B + Memory Pool: CodeHeap 'profiled nmethods' (Non-heap memory): committed=4.375MiB, used=4.325MiB, max=117.2MiB, threshold=0B + Memory Pool: Compressed Class Space (Non-heap memory): committed=2.313MiB, used=2.121MiB, max=1.000GiB, threshold=0B + Memory Pool: G1 Eden Space (Heap memory): committed=156.0MiB, used=82.00MiB, max=-1B, threshold=? + Memory Pool: G1 Old Gen (Heap memory): committed=100.0MiB, used=22.30MiB, max=4.000GiB, threshold=0B + Memory Pool: G1 Survivor Space (Heap memory): committed=4.000MiB, used=3.467MiB, max=-1B, threshold=? + Memory Pool: CodeHeap 'non-profiled nmethods' (Non-heap memory): committed=2.438MiB, used=1.369MiB, max=117.2MiB, threshold=0B + + -------------------------------------------------------------------------------- + [ Operating system information ] + -------------------------------------------------------------------------------- + Operating System: Mac OS X; version: 12.7.4; arch: x86_64; cpus: 8 + Max number of file descriptors: 10240 + Number of open file descriptors: 226 + Process id: 71792 + Byte order: LITTLE_ENDIAN + Local timezone: America/New_York + Memory page size: 4096 + Unaligned memory access allowed: true + + -------------------------------------------------------------------------------- + [ JVM information ] + -------------------------------------------------------------------------------- + VM Name: Java HotSpot(TM) 64-Bit Server VM + VM Vendor: Oracle Corporation + VM Version: 17.0.2+8-LTS-86 + JIT compiler: HotSpot 64-Bit Tiered Compilers + VM Arguments: [-Dvisualvm.id=83444372826747, -javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=58534:/Applications/IntelliJ IDEA.app/Contents/bin, -Dfile.encoding=UTF-8] + + -------------------------------------------------------------------------------- + [ Java classpath ] + -------------------------------------------------------------------------------- + [classpath] /Users/jnr6/.m2/repository/it/unimi/dsi/fastutil/8.5.13/fastutil-8.5.13.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-codec-http/4.1.101.Final/netty-codec-http-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/scala-library/2.13.11/scala-library-2.13.11.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-command-line/5.16.0/neo4j-command-line-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-epoll/4.1.101.Final/netty-transport-native-epoll-4.1.101.Final-linux-x86_64.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-common/4.1.101.Final/netty-common-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.16.0/jackson-databind-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-consistency-check/5.16.0/neo4j-consistency-check-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-values/5.16.0/neo4j-values-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-dbms/5.16.0/neo4j-dbms-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-analysis/9.6/asm-analysis-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-planner/5.16.0/neo4j-cypher-planner-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/antlr/antlr4-runtime/4.8/antlr4-runtime-4.8.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-api/3.2.13/docker-java-api-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/activation/jakarta.activation-api/1.2.1/jakarta.activation-api-1.2.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-planner-spi/5.16.0/neo4j-cypher-planner-spi-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-resource/5.16.0/neo4j-resource-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-servlet/10.0.17/jetty-servlet-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-cache/1.13.0/shiro-cache-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-javacc-parser/5.16.0/neo4j-cypher-javacc-parser-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/sun/istack/istack-commons-runtime/3.0.8/istack-commons-runtime-3.0.8.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-configuration2/2.9.0/commons-configuration2-2.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-compress/1.21/commons-compress-1.21.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/containers/jersey-container-servlet/2.34/jersey-container-servlet-2.34.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-kqueue/4.1.101.Final/netty-transport-native-kqueue-4.1.101.Final-osx-aarch_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-concurrent/5.16.0/neo4j-concurrent-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/mysql/1.17.4/mysql-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/mockito/mockito-core/5.7.0/mockito-core-5.7.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher/5.16.0/neo4j-cypher-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-capabilities/5.16.0/neo4j-capabilities-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-notifications/5.16.0/neo4j-notifications-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-import-util/5.16.0/neo4j-import-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-config/5.16.0/neo4j-cypher-config-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/containers/jersey-container-servlet-core/2.34/jersey-container-servlet-core-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-io/5.16.0/neo4j-io-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-locator/2.6.1/hk2-locator-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-lang3/3.13.0/commons-lang3-3.13.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.16.0/jackson-core-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/mysql/mysql-connector-j/8.2.0/mysql-connector-j-8.2.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-classes-epoll/4.1.101.Final/netty-transport-classes-epoll-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/objenesis/objenesis/3.3/objenesis-3.3.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-server/2.34/jersey-server-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-client/2.34/jersey-client-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-ast-factory/5.16.0/neo4j-cypher-ast-factory-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-handler/4.1.101.Final/netty-handler-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j/5.16.0/neo4j-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/google/code/gson/gson/2.9.0/gson-2.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-logging/5.16.0/neo4j-logging-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-webapp/10.0.17/jetty-webapp-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-core/9.8.0/lucene-core-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-kernel-api/5.16.0/neo4j-kernel-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcutil-jdk18on/1.76/bcutil-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/bitbucket/inkytonik/kiama/kiama_2.13/2.5.1/kiama_2.13-2.5.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-common/5.16.0/neo4j-common-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/junit/junit/4.13.2/junit-4.13.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-index/5.16.0/neo4j-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport/4.1.101.Final/netty-transport-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-util/9.6/asm-util-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/jctools/jctools-core/4.0.2/jctools-core-4.0.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-graphdb-api/5.16.0/neo4j-graphdb-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/jdbc/1.17.4/jdbc-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-runtime-util/5.16.0/neo4j-cypher-runtime-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/collections/eclipse-collections-api/11.1.0/eclipse-collections-api-11.1.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-unsafe/5.16.0/neo4j-unsafe-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-server/10.0.17/jetty-server-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcprov-jdk18on/1.76/bcprov-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-slotted-runtime/5.16.0/neo4j-cypher-slotted-runtime-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-layout-template-json/2.20.0/log4j-layout-template-json-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-fulltext-index/5.16.0/neo4j-fulltext-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/net/java/dev/jna/jna/5.8.0/jna-5.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-util/10.0.17/jetty-util-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-expressions/5.16.0/neo4j-expressions-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-transport/3.2.13/docker-java-transport-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/commons-logging/commons-logging/1.2/commons-logging-1.2.jar + [classpath] /Users/jnr6/IdeaProjects/policy-machine-core/target/classes + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-testkit/1.10.0/junit-platform-testkit-1.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-core/1.13.0/shiro-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-physical-planning/5.16.0/neo4j-cypher-physical-planning-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-storage-engine-util/5.16.0/neo4j-storage-engine-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-ast/5.16.0/neo4j-ast-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-core/2.20.0/log4j-core-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-params/5.9.0/junit-jupiter-params-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/external/jakarta.inject/2.6.1/jakarta.inject-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/inject/jersey-hk2/2.34/jersey-hk2-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/hamcrest/hamcrest/2.2/hamcrest-2.2.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jaxb/jaxb-runtime/2.3.2/jaxb-runtime-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-logical-plans/5.16.0/neo4j-cypher-logical-plans-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-xml/10.0.17/jetty-xml-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar + [classpath] /Users/jnr6/.m2/repository/org/codehaus/jettison/jettison/1.5.4/jettison-1.5.4.jar + [classpath] /Users/jnr6/.m2/repository/com/propensive/mercator_2.13/0.2.1/mercator_2.13-0.2.1.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jaxb/txw2/2.3.2/txw2-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-resolver/4.1.101.Final/netty-resolver-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar + [classpath] /Users/jnr6/.m2/repository/org/awaitility/awaitility/4.2.0/awaitility-4.2.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-codec/4.1.101.Final/netty-codec-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-buffer/4.1.101.Final/netty-buffer-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-hash/1.13.0/shiro-crypto-hash-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/info/picocli/picocli/4.7.5/picocli-4.7.5.jar + [classpath] /Users/jnr6/.m2/repository/com/profesorfalken/jPowerShell/3.0/jPowerShell-3.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-cipher/1.13.0/shiro-crypto-cipher-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-lang/1.13.0/shiro-lang-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-token-api/5.16.0/neo4j-token-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-bolt/5.16.0/neo4j-bolt-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-record-storage-engine/5.16.0/neo4j-record-storage-engine-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-epoll/4.1.101.Final/netty-transport-native-epoll-4.1.101.Final-linux-aarch_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-ir/5.16.0/neo4j-cypher-ir-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/test-utils/5.15.0/test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter/5.10.0/junit-jupiter-5.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/app/neo4j-server-test-utils/5.15.0/neo4j-server-test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/rnorth/duct-tape/duct-tape/1.0.8/duct-tape-1.0.8.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/modules/scala-collection-contrib_2.13/0.3.0/scala-collection-contrib_2.13-0.3.0.jar + [classpath] /Users/jnr6/.m2/repository/org/slf4j/slf4j-api/2.0.0/slf4j-api-2.0.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-analysis-common/9.8.0/lucene-analysis-common-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/com/propensive/magnolia_2.13/0.17.0/magnolia_2.13-0.17.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-event/1.13.0/shiro-event-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/logging/log4j/log4j-api/2.20.0/log4j-api-2.20.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-classes-kqueue/4.1.101.Final/netty-transport-classes-kqueue-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/net/bytebuddy/byte-buddy-agent/1.14.9/byte-buddy-agent-1.14.9.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/validation/jakarta.validation-api/2.0.2/jakarta.validation-api-2.0.2.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/database-commons/1.17.4/database-commons-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-front-end/5.16.0/neo4j-front-end-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-procedure/5.16.0/neo4j-procedure-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-import-tool/5.16.0/neo4j-import-tool-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/ws/rs/jakarta.ws.rs-api/2.1.6/jakarta.ws.rs-api-2.1.6.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.10.3/jackson-annotations-2.10.3.jar + [classpath] /Users/jnr6/.m2/repository/com/google/protobuf/protobuf-java/3.21.9/protobuf-java-3.21.9.jar + [classpath] /Users/jnr6/.m2/repository/io/projectreactor/reactor-core/3.6.0/reactor-core-3.6.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-wal/5.16.0/neo4j-wal-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-ssl/5.16.0/neo4j-ssl-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-unix-common/4.1.101.Final/netty-transport-native-unix-common-4.1.101.Final.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-config-core/1.13.0/shiro-config-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-codegen/5.16.0/neo4j-codegen-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm-tree/9.6/asm-tree-9.6.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-rewriting/5.16.0/neo4j-rewriting-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-backward-codecs/9.8.0/lucene-backward-codecs-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-lock/5.16.0/neo4j-lock-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-schema/5.16.0/neo4j-schema-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/collections/eclipse-collections/11.1.0/eclipse-collections-11.1.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/luben/zstd-jni/1.5.5-10/zstd-jni-1.5.5-10.jar + [classpath] /Users/jnr6/.m2/repository/commons-codec/commons-codec/1.16.0/commons-codec-1.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/jaxrs/jackson-jaxrs-json-provider/2.16.0/jackson-jaxrs-json-provider-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-expression-evaluator/5.16.0/neo4j-cypher-expression-evaluator-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/testcontainers/1.17.4/testcontainers-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/test/neo4j-harness/5.15.0/neo4j-harness-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/javassist/javassist/3.25.0-GA/javassist-3.25.0-GA.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/shiro/shiro-crypto-core/1.13.0/shiro-crypto-core-1.13.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-commons/1.9.0/junit-platform-commons-1.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-utils/2.6.1/hk2-utils-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/io-test-utils/5.15.0/io-test-utils-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/annotations/5.16.0/annotations-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-interpreted-runtime/5.16.0/neo4j-cypher-interpreted-runtime-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-cache/5.16.0/neo4j-cypher-cache-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jetbrains/annotations/17.0.0/annotations-17.0.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-layout/5.16.0/neo4j-layout-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/reactivestreams/reactive-streams/1.0.4/reactive-streams-1.0.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/licensing-proxy/zstd-proxy/5.16.0/zstd-proxy-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-security/5.16.0/neo4j-security-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/jersey/core/jersey-common/2.34/jersey-common-2.34.jar + [classpath] /Users/jnr6/.m2/repository/org/scala-lang/scala-reflect/2.13.11/scala-reflect-2.13.11.jar + [classpath] /Users/jnr6/.m2/repository/org/testcontainers/junit-jupiter/1.17.4/junit-jupiter-1.17.4.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-random-values/5.15.0/neo4j-random-values-5.15.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/docker-java/docker-java-transport-zerodep/3.2.13/docker-java-transport-zerodep-3.2.13.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-diagnostics/5.16.0/neo4j-diagnostics-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-http/10.0.17/jetty-http-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/cypher-ast-factory/5.16.0/cypher-ast-factory-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-configuration/5.16.0/neo4j-configuration-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-exceptions/5.16.0/neo4j-exceptions-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-util/5.16.0/neo4j-util-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-id-generator/5.16.0/neo4j-id-generator-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/github/seancfoley/ipaddress/5.4.0/ipaddress-5.4.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-io/10.0.17/jetty-io-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/commons-io/commons-io/2.11.0/commons-io-2.11.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apache/lucene/lucene-queryparser/9.8.0/lucene-queryparser-9.8.0.jar + [classpath] /Users/jnr6/.m2/repository/jakarta/xml/bind/jakarta.xml.bind-api/2.3.2/jakarta.xml.bind-api-2.3.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-kernel/5.16.0/neo4j-kernel-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-fabric/5.16.0/neo4j-fabric-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-spatial-index/5.16.0/neo4j-spatial-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-procedure-api/5.16.0/neo4j-procedure-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/sun/xml/fastinfoset/FastInfoset/1.2.16/FastInfoset-1.2.16.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-lucene-index/5.16.0/neo4j-lucene-index-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/net/bytebuddy/byte-buddy/1.14.9/byte-buddy-1.14.9.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-query-router/5.16.0/neo4j-query-router-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-csv/5.16.0/neo4j-csv-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/toolchain/jetty-servlet-api/4.0.6/jetty-servlet-api-4.0.6.jar + [classpath] /Users/jnr6/IdeaProjects/policy-machine-core/target/test-classes + [classpath] /Users/jnr6/.m2/repository/com/github/ben-manes/caffeine/caffeine/3.1.8/caffeine-3.1.8.jar + [classpath] /Users/jnr6/.m2/repository/com/profesorfalken/WMI4Java/1.6.3/WMI4Java-1.6.3.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/vintage/junit-vintage-engine/5.10.0/junit-vintage-engine-5.10.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-collections/5.16.0/neo4j-collections-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/assertj/assertj-core/3.24.2/assertj-core-3.24.2.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-graph-algo/5.16.0/neo4j-graph-algo-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.9.0/junit-jupiter-engine-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jvnet/staxex/stax-ex/1.8.1/stax-ex-1.8.1.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/app/neo4j-server/5.16.0/neo4j-server-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-monitoring/5.16.0/neo4j-monitoring-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-cypher-macros/5.16.0/neo4j-cypher-macros-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/jprocesses/jProcesses/1.6.5/jProcesses-1.6.5.jar + [classpath] /Users/jnr6/.m2/repository/org/glassfish/hk2/hk2-api/2.6.1/hk2-api-2.6.1.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.9.0/junit-jupiter-api-5.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/eclipse/jetty/jetty-security/10.0.17/jetty-security-10.0.17.jar + [classpath] /Users/jnr6/.m2/repository/org/bouncycastle/bcpkix-jdk18on/1.76/bcpkix-jdk18on-1.76.jar + [classpath] /Users/jnr6/.m2/repository/org/junit/platform/junit-platform-engine/1.9.0/junit-platform-engine-1.9.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-slf4j-provider/5.16.0/neo4j-slf4j-provider-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/io/netty/netty-transport-native-kqueue/4.1.101.Final/netty-transport-native-kqueue-4.1.101.Final-osx-x86_64.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-data-collector/5.16.0/neo4j-data-collector-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/server-api/5.16.0/server-api-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/neo4j/neo4j-native/5.16.0/neo4j-native-5.16.0.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/module/jackson-module-jaxb-annotations/2.16.0/jackson-module-jaxb-annotations-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/ow2/asm/asm/9.6/asm-9.6.jar + [classpath] /Users/jnr6/.m2/repository/com/fasterxml/jackson/jaxrs/jackson-jaxrs-base/2.16.0/jackson-jaxrs-base-2.16.0.jar + [classpath] /Users/jnr6/.m2/repository/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar + + -------------------------------------------------------------------------------- + [ Library path ] + -------------------------------------------------------------------------------- + /Users/jnr6/Library/Java/Extensions + /Library/Java/Extensions + /Network/Library/Java/Extensions + /System/Library/Java/Extensions + /usr/lib/java + /Users/jnr6/IdeaProjects/policy-machine-core + + -------------------------------------------------------------------------------- + [ System properties ] + -------------------------------------------------------------------------------- + sun.jnu.encoding = UTF-8 + sun.arch.data.model = 64 + user.timezone = America/New_York + visualvm.id = 83444372826747 + sun.java.launcher = SUN_STANDARD + user.country = US + sun.boot.library.path = /Library/Java/JavaVirtualMachines/jdk-17.0.2.jdk/Contents/Home/lib + sun.java.command = gov.nist.csd.pm.pap.neo4j.ImportTest + jdk.debug = release + sun.cpu.endian = little + user.home = /Users/jnr6 + user.language = en + file.separator = / + sun.management.compiler = HotSpot 64-Bit Tiered Compilers + user.name = jnr6 + path.separator = : + file.encoding = UTF-8 + jnidispatch.path = /Users/jnr6/Library/Caches/JNA/temp/jna1629976397574867923.tmp + jna.loaded = true + user.dir = /Users/jnr6/IdeaProjects/policy-machine-core + native.encoding = UTF-8 + sun.io.unicode.encoding = UnicodeBig + + -------------------------------------------------------------------------------- + [ (IANA) TimeZone database version ] + -------------------------------------------------------------------------------- + TimeZone version: 2021e (available for 601 zone identifiers) + + -------------------------------------------------------------------------------- + [ Network information ] + -------------------------------------------------------------------------------- + Interface utun2: + address: fe80:0:0:0:ce81:b1c:bd2c:69e%utun2 + Interface utun1: + address: fe80:0:0:0:bbf5:1c30:4238:57b2%utun1 + Interface utun0: + address: fe80:0:0:0:73be:4eb:3f31:a891%utun0 + Interface llw0: + address: fe80:0:0:0:c0a6:71ff:fe04:534c%llw0 + Interface awdl0: + address: fe80:0:0:0:c0a6:71ff:fe04:534c%awdl0 + Interface utun3: + address: 2610:20:6005:152:0:0:0:136%utun3 + address: fe80:0:0:0:aebc:32ff:fe94:d383%utun3 + address: 129.6.109.119 + Interface en0: + address: 192.168.1.247 + Interface lo0: + address: fe80:0:0:0:0:0:0:1%lo0 + address: 0:0:0:0:0:0:0:1%lo0 + address: 127.0.0.1 + + -------------------------------------------------------------------------------- + [ Native access information ] + -------------------------------------------------------------------------------- + Native access details: Native access is not available for current platform. + + -------------------------------------------------------------------------------- + [ DBMS config ] + -------------------------------------------------------------------------------- + DBMS provided settings: + server.bolt.enabled=true + server.bolt.listen_address=localhost:9999 + server.directories.neo4j_home=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + Directories in use: + server.directories.data=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data + server.directories.dumps.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/dumps + server.directories.import=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + server.directories.lib=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/lib + server.directories.licenses=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/licenses + server.directories.logs=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/logs + server.directories.neo4j_home=/Users/jnr6/IdeaProjects/policy-machine-core/testdb + server.directories.plugins=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/plugins + server.directories.run=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/run + server.directories.script.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/scripts + server.directories.transaction.logs.root=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions + + -------------------------------------------------------------------------------- + [ Packaging ] + -------------------------------------------------------------------------------- + Could not read packaging info: java.nio.file.NoSuchFileException: /Users/jnr6/IdeaProjects/policy-machine-core/testdb/packaging_info + +2024-04-03 14:29:11.994+0000 INFO [o.n.d.i.DefaultIdentityModule] Found ServerId on disk: ServerId{54490f53} (54490f53-4b94-4d0f-9604-023c3fe1be5e) +2024-04-03 14:29:11.995+0000 INFO [o.n.d.i.DefaultIdentityModule] This instance is ServerId{54490f53} (54490f53-4b94-4d0f-9604-023c3fe1be5e) +2024-04-03 14:29:12.671+0000 INFO [o.n.d.d.DatabaseLifecycles] Creating 'DatabaseId{00000000[system]}'. +2024-04-03 14:29:12.870+0000 INFO [o.n.b.BoltServer] Using connector transport KQueue +2024-04-03 14:29:12.934+0000 INFO [o.n.b.BoltServer] Configured external Bolt connector with listener address localhost/127.0.0.1:9999 +2024-04-03 14:29:12.934+0000 INFO [o.n.b.BoltServer] Bolt server loaded +2024-04-03 14:29:12.948+0000 INFO [o.n.d.d.DatabaseLifecycles] Starting 'DatabaseId{00000000[system]}'. +2024-04-03 14:29:13.158+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [system/00000000] Scanning log file with version 0 for checkpoint entries +2024-04-03 14:29:13.200+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [system/00000000] Selected RecordFormat:PageAlignedV5_0[aligned-1.1] record format from store /Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system +2024-04-03 14:29:13.200+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [system/00000000] Selected format from the store files: RecordFormat:PageAlignedV5_0[aligned-1.1] +2024-04-03 14:29:13.786+0000 INFO [o.n.i.d.DiagnosticsManager] [system/00000000] + [system/00000000] ******************************************************************************** + [system/00000000] [ Database: system ] + [system/00000000] ******************************************************************************** + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Version ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] DBMS: community record-aligned-1.1 + [system/00000000] Kernel version: 5.16.0 + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Store files ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] Disk space on partition (Total / Free / Free %): 500068036608 / 108514705408 / 21 + [system/00000000] Storage files stored on file store: apfs + [system/00000000] Storage files: (filename : modification date - size) + [system/00000000] database_lock: 2024-04-03 04:12:32.900+0000 - 0B + [system/00000000] id-buffer.tmp.0: 2024-04-03 14:28:42.755+0000 - 0B + [system/00000000] neostore: 2024-04-03 04:12:32.662+0000 - 8.000KiB + [system/00000000] neostore.counts.db: 2024-04-03 14:29:13.625+0000 - 48.00KiB + [system/00000000] neostore.indexstats.db: 2024-04-03 14:29:13.671+0000 - 48.00KiB + [system/00000000] neostore.labeltokenstore.db: 2024-04-03 04:12:39.430+0000 - 8.000KiB + [system/00000000] neostore.labeltokenstore.db.id: 2024-04-03 14:29:13.556+0000 - 40.00KiB + [system/00000000] neostore.labeltokenstore.db.names: 2024-04-03 04:12:39.454+0000 - 8.000KiB + [system/00000000] neostore.labeltokenstore.db.names.id: 2024-04-03 14:29:13.541+0000 - 40.00KiB + [system/00000000] neostore.nodestore.db: 2024-04-03 04:12:39.416+0000 - 8.000KiB + [system/00000000] neostore.nodestore.db.id: 2024-04-03 14:29:13.376+0000 - 40.00KiB + [system/00000000] neostore.nodestore.db.labels: 2024-04-03 04:12:32.509+0000 - 8.000KiB + [system/00000000] neostore.nodestore.db.labels.id: 2024-04-03 14:29:13.353+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db: 2024-04-03 04:12:39.442+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.arrays: 2024-04-03 04:12:32.565+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.arrays.id: 2024-04-03 14:29:13.445+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.id: 2024-04-03 14:29:13.463+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.index: 2024-04-03 04:12:39.477+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.index.id: 2024-04-03 14:29:13.415+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.index.keys: 2024-04-03 04:12:39.464+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.index.keys.id: 2024-04-03 14:29:13.394+0000 - 40.00KiB + [system/00000000] neostore.propertystore.db.strings: 2024-04-03 04:12:39.367+0000 - 8.000KiB + [system/00000000] neostore.propertystore.db.strings.id: 2024-04-03 14:29:13.431+0000 - 40.00KiB + [system/00000000] neostore.relationshipgroupstore.db: 2024-04-03 04:12:32.640+0000 - 8.000KiB + [system/00000000] neostore.relationshipgroupstore.db.id: 2024-04-03 14:29:13.588+0000 - 40.00KiB + [system/00000000] neostore.relationshipgroupstore.degrees.db: 2024-04-03 14:29:13.649+0000 - 40.00KiB + [system/00000000] neostore.relationshipstore.db: 2024-04-03 04:12:39.378+0000 - 8.000KiB + [system/00000000] neostore.relationshipstore.db.id: 2024-04-03 14:29:13.480+0000 - 40.00KiB + [system/00000000] neostore.relationshiptypestore.db: 2024-04-03 04:12:39.405+0000 - 8.000KiB + [system/00000000] neostore.relationshiptypestore.db.id: 2024-04-03 14:29:13.518+0000 - 40.00KiB + [system/00000000] neostore.relationshiptypestore.db.names: 2024-04-03 04:12:39.392+0000 - 8.000KiB + [system/00000000] neostore.relationshiptypestore.db.names.id: 2024-04-03 14:29:13.500+0000 - 40.00KiB + [system/00000000] neostore.schemastore.db: 2024-04-03 04:12:39.490+0000 - 8.000KiB + [system/00000000] neostore.schemastore.db.id: 2024-04-03 14:29:13.574+0000 - 40.00KiB + [system/00000000] schema: + [system/00000000] index: + [system/00000000] range-1.0: + [system/00000000] 3: + [system/00000000] index-3: 2024-04-03 14:28:42.649+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.321+0000 - 48.00KiB + [system/00000000] 4: + [system/00000000] index-4: 2024-04-03 14:28:42.678+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.437+0000 - 48.00KiB + [system/00000000] 7: + [system/00000000] index-7: 2024-04-03 14:28:42.703+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.907+0000 - 48.00KiB + [system/00000000] 8: + [system/00000000] index-8: 2024-04-03 14:28:42.734+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.997+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.996+0000 - 192.0KiB + [system/00000000] token-lookup-1.0: + [system/00000000] 1: + [system/00000000] index-1: 2024-04-03 14:28:42.586+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:33.516+0000 - 48.00KiB + [system/00000000] 2: + [system/00000000] index-2: 2024-04-03 14:28:42.611+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:33.409+0000 - 48.00KiB + [system/00000000] - Total: 2024-04-03 04:12:33.515+0000 - 96.00KiB + [system/00000000] - Total: 2024-04-03 04:12:34.321+0000 - 288.0KiB + [system/00000000] - Total: 2024-04-03 04:12:33.407+0000 - 288.0KiB + [system/00000000] Storage summary: + [system/00000000] Total size of store: 1.078MiB + [system/00000000] Total size of mapped files: 408.0KiB + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Transaction log ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] Transaction log files stored on file store: apfs + [system/00000000] Transaction log metadata: + [system/00000000] - current kernel version used in transactions: V5_15 + [system/00000000] - last committed transaction id: 37 + [system/00000000] Transaction log files: + [system/00000000] - existing transaction log versions: 0-0 + [system/00000000] - oldest transaction 2 found in log with version 0 + [system/00000000] - files: (filename : creation date - size) + [system/00000000] neostore.transaction.db.0: 2024-04-03 04:12:32.000+0000 - 19.26KiB + [system/00000000] - total size of files: 19.26KiB + [system/00000000] Checkpoint log files: + [system/00000000] - existing checkpoint log versions: 0-0 + [system/00000000] - last checkpoint: CheckpointInfo[transactionLogPosition=LogPosition{logVersion=0, byteOffset=19725}, storeId=StoreId{creationTime=1712117552660, random=4552926301767966796, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1}, checkpointEntryPosition=LogPosition{logVersion=0, byteOffset=360}, channelPositionAfterCheckpoint=LogPosition{logVersion=0, byteOffset=592}, checkpointFilePostReadPosition=LogPosition{logVersion=0, byteOffset=592}, kernelVersion=KernelVersion{V5_15,version=14}, kernelVersionByte=14, transactionId=TransactionId[transactionId=37, checksum=-1026009811, commitTimestamp=1712117555154, consensusIndex=-1], reason=Checkpoint triggered by "Database shutdown" @ txId: 37, consensusIndexInCheckpoint=true] + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Id usage ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] ArrayPropertyStore[neostore.nodestore.db.labels]: used=1 high=0 + [system/00000000] NodeStore[neostore.nodestore.db]: used=6 high=5 + [system/00000000] StringPropertyStore[neostore.propertystore.db.index.keys]: used=44 high=43 + [system/00000000] PropertyIndexStore[neostore.propertystore.db.index]: used=31 high=30 + [system/00000000] StringPropertyStore[neostore.propertystore.db.strings]: used=3 high=2 + [system/00000000] ArrayPropertyStore[neostore.propertystore.db.arrays]: used=1 high=0 + [system/00000000] PropertyStore[neostore.propertystore.db]: used=59 high=58 + [system/00000000] RelationshipStore[neostore.relationshipstore.db]: used=2 high=1 + [system/00000000] StringPropertyStore[neostore.relationshiptypestore.db.names]: used=2 high=1 + [system/00000000] RelationshipTypeStore[neostore.relationshiptypestore.db]: used=1 high=0 + [system/00000000] StringPropertyStore[neostore.labeltokenstore.db.names]: used=5 high=4 + [system/00000000] LabelTokenStore[neostore.labeltokenstore.db]: used=4 high=3 + [system/00000000] SchemaStore[neostore.schemastore.db]: used=11 high=10 + [system/00000000] RelationshipGroupStore[neostore.relationshipgroupstore.db]: used=1 high=0 + [system/00000000] NeoStore[neostore]: used=-1 high=-1 + [system/00000000] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] [ Metadata ] + [system/00000000] -------------------------------------------------------------------------------- + [system/00000000] EXTERNAL_STORE_UUID (Database identifier exposed as external store identity. Generated on creation and never updated): 8e4fd9af-0e04-47d8-a19c-cdb72dbda752 + [system/00000000] DATABASE_ID (The last used DatabaseId for this database): null + [system/00000000] LEGACY_STORE_VERSION (Legacy store format version. This field is used from 5.0 onwards only to distinguish non-migrated pre 5.0 metadata stores.): -3523014627327384477 + [system/00000000] STORE_ID (Store ID): StoreId{creationTime=1712117552660, random=4552926301767966796, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1} + [system/00000000] +2024-04-03 14:29:13.978+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:29:13.979+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:29:13.980+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:29:13.981+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:29:14.006+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:29:14.006+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:29:14.007+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:29:14.007+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:29:14.042+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 +2024-04-03 14:29:14.043+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 +2024-04-03 14:29:14.045+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:29:14.045+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=3, name='constraint_798238d6', type='RANGE', schema=(:Label[1] {PropertyKey[11], PropertyKey[12]}), indexProvider='range-1.0', owningConstraint=6 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/3/index-3 +2024-04-03 14:29:14.072+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 +2024-04-03 14:29:14.072+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 +2024-04-03 14:29:14.073+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:29:14.074+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=4, name='constraint_8014b60a', type='RANGE', schema=(:Label[2] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=5 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/4/index-4 +2024-04-03 14:29:14.096+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 +2024-04-03 14:29:14.097+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 +2024-04-03 14:29:14.098+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:29:14.098+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=7, name='constraint_5789ae3', type='RANGE', schema=(:Label[3] {PropertyKey[11]}), indexProvider='range-1.0', owningConstraint=9 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/7/index-7 +2024-04-03 14:29:14.126+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job registered: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 +2024-04-03 14:29:14.127+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job started: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 +2024-04-03 14:29:14.128+0000 INFO [o.n.k.i.a.i.IndexingService] [system/00000000] IndexingService.init: indexes not specifically mentioned above are ONLINE. Total 6 indexes. Processed in 184ms +2024-04-03 14:29:14.128+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job finished: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 Number of pages visited: 3, Number of tree nodes: 2, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:29:14.129+0000 INFO [o.n.k.i.i.s.RangeIndexProvider] [system/00000000] Schema index cleanup job closed: descriptor=Index( id=8, name='constraint_74fad970', type='RANGE', schema=(:Label[3] {PropertyKey[26]}), indexProvider='range-1.0', owningConstraint=10 ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/system/schema/index/range-1.0/8/index-8 +2024-04-03 14:29:14.135+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] Requirement `Database unavailable` makes database system unavailable. +2024-04-03 14:29:14.136+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] DatabaseId{00000000[system]} is unavailable. +2024-04-03 14:29:14.190+0000 INFO [o.n.k.d.Database] [system/00000000] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/system/neostore.transaction.db.0] at version=0 +2024-04-03 14:29:14.193+0000 INFO [o.n.k.d.Database] [system/00000000] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/system/checkpoint.0] at version=0 +2024-04-03 14:29:14.194+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [system/00000000] Scanning log file with version 0 for checkpoint entries +2024-04-03 14:29:14.197+0000 INFO [o.n.k.i.a.i.IndexingService] [system/00000000] IndexingService.start: indexes not specifically mentioned above are ONLINE. Total 6 indexes. Processed in 0ms +2024-04-03 14:29:14.225+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] Fulfilling of requirement 'Database unavailable' makes database system available. +2024-04-03 14:29:14.226+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [system/00000000] DatabaseId{00000000[system]} is ready. +2024-04-03 14:29:14.313+0000 INFO [o.n.s.s.s.UserSecurityGraphComponent] Performing postInitialization step for component 'security-users' with version 4 and status CURRENT +2024-04-03 14:29:14.313+0000 INFO [o.n.s.s.s.UserSecurityGraphComponent] Updating the initial password in component 'security-users' +2024-04-03 14:29:14.325+0000 INFO [o.n.d.d.DatabaseLifecycles] Creating 'DatabaseId{fefd0874[neo4j]}'. +2024-04-03 14:29:14.328+0000 INFO [o.n.d.d.DatabaseLifecycles] Starting 'DatabaseId{fefd0874[neo4j]}'. +2024-04-03 14:29:14.348+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [neo4j/fefd0874] Scanning log file with version 0 for checkpoint entries +2024-04-03 14:29:14.363+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected RecordFormat:PageAlignedV5_0[aligned-1.1] record format from store /Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j +2024-04-03 14:29:14.363+0000 INFO [o.n.k.i.s.f.RecordFormatSelector] [neo4j/fefd0874] Selected format from the store files: RecordFormat:PageAlignedV5_0[aligned-1.1] +2024-04-03 14:29:14.620+0000 INFO [o.n.i.d.DiagnosticsManager] [neo4j/fefd0874] + [neo4j/fefd0874] ******************************************************************************** + [neo4j/fefd0874] [ Database: neo4j ] + [neo4j/fefd0874] ******************************************************************************** + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Version ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] DBMS: community record-aligned-1.1 + [neo4j/fefd0874] Kernel version: 5.16.0 + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Store files ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] Disk space on partition (Total / Free / Free %): 500068036608 / 108514705408 / 21 + [neo4j/fefd0874] Storage files stored on file store: apfs + [neo4j/fefd0874] Storage files: (filename : modification date - size) + [neo4j/fefd0874] database_lock: 2024-04-03 04:12:35.327+0000 - 0B + [neo4j/fefd0874] id-buffer.tmp.0: 2024-04-03 14:28:45.230+0000 - 0B + [neo4j/fefd0874] neostore: 2024-04-03 04:12:35.301+0000 - 8.000KiB + [neo4j/fefd0874] neostore.counts.db: 2024-04-03 14:29:14.569+0000 - 48.00KiB + [neo4j/fefd0874] neostore.indexstats.db: 2024-04-03 14:29:14.593+0000 - 48.00KiB + [neo4j/fefd0874] neostore.labeltokenstore.db: 2024-04-03 04:53:01.953+0000 - 8.000KiB + [neo4j/fefd0874] neostore.labeltokenstore.db.id: 2024-04-03 14:29:14.526+0000 - 40.00KiB + [neo4j/fefd0874] neostore.labeltokenstore.db.names: 2024-04-03 04:53:01.900+0000 - 8.000KiB + [neo4j/fefd0874] neostore.labeltokenstore.db.names.id: 2024-04-03 14:29:14.510+0000 - 40.00KiB + [neo4j/fefd0874] neostore.nodestore.db: 2024-04-03 14:28:44.593+0000 - 736.0KiB + [neo4j/fefd0874] neostore.nodestore.db.id: 2024-04-03 14:29:14.380+0000 - 96.00KiB + [neo4j/fefd0874] neostore.nodestore.db.labels: 2024-04-03 04:12:35.189+0000 - 8.000KiB + [neo4j/fefd0874] neostore.nodestore.db.labels.id: 2024-04-03 14:29:14.365+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db: 2024-04-03 14:28:44.610+0000 - 1.969MiB + [neo4j/fefd0874] neostore.propertystore.db.arrays: 2024-04-03 04:12:35.234+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.arrays.id: 2024-04-03 14:29:14.440+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.id: 2024-04-03 14:29:14.453+0000 - 96.00KiB + [neo4j/fefd0874] neostore.propertystore.db.index: 2024-04-03 04:30:28.255+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.index.id: 2024-04-03 14:29:14.411+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.index.keys: 2024-04-03 04:30:28.242+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.index.keys.id: 2024-04-03 14:29:14.394+0000 - 40.00KiB + [neo4j/fefd0874] neostore.propertystore.db.strings: 2024-04-03 04:12:35.222+0000 - 8.000KiB + [neo4j/fefd0874] neostore.propertystore.db.strings.id: 2024-04-03 14:29:14.425+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshipgroupstore.db: 2024-04-03 04:12:35.289+0000 - 8.000KiB + [neo4j/fefd0874] neostore.relationshipgroupstore.db.id: 2024-04-03 14:29:14.557+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshipgroupstore.degrees.db: 2024-04-03 14:29:14.581+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshipstore.db: 2024-04-03 04:12:35.245+0000 - 0B + [neo4j/fefd0874] neostore.relationshipstore.db.id: 2024-04-03 14:29:14.466+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshiptypestore.db: 2024-04-03 04:12:35.259+0000 - 0B + [neo4j/fefd0874] neostore.relationshiptypestore.db.id: 2024-04-03 14:29:14.496+0000 - 40.00KiB + [neo4j/fefd0874] neostore.relationshiptypestore.db.names: 2024-04-03 04:12:35.246+0000 - 8.000KiB + [neo4j/fefd0874] neostore.relationshiptypestore.db.names.id: 2024-04-03 14:29:14.483+0000 - 40.00KiB + [neo4j/fefd0874] neostore.schemastore.db: 2024-04-03 04:12:36.054+0000 - 8.000KiB + [neo4j/fefd0874] neostore.schemastore.db.id: 2024-04-03 14:29:14.542+0000 - 40.00KiB + [neo4j/fefd0874] schema: + [neo4j/fefd0874] index: + [neo4j/fefd0874] token-lookup-1.0: + [neo4j/fefd0874] 1: + [neo4j/fefd0874] index-1: 2024-04-03 14:28:45.207+0000 - 104.0KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.459+0000 - 104.0KiB + [neo4j/fefd0874] 2: + [neo4j/fefd0874] index-2: 2024-04-03 14:28:45.219+0000 - 40.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.390+0000 - 40.00KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.459+0000 - 144.0KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.390+0000 - 144.0KiB + [neo4j/fefd0874] - Total: 2024-04-03 04:12:35.390+0000 - 144.0KiB + [neo4j/fefd0874] Storage summary: + [neo4j/fefd0874] Total size of store: 3.703MiB + [neo4j/fefd0874] Total size of mapped files: 2.914MiB + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Transaction log ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] Transaction log files stored on file store: apfs + [neo4j/fefd0874] Transaction log metadata: + [neo4j/fefd0874] - current kernel version used in transactions: V5_15 + [neo4j/fefd0874] - last committed transaction id: 61 + [neo4j/fefd0874] Transaction log files: + [neo4j/fefd0874] - existing transaction log versions: 0-0 + [neo4j/fefd0874] - oldest transaction 2 found in log with version 0 + [neo4j/fefd0874] - files: (filename : creation date - size) + [neo4j/fefd0874] neostore.transaction.db.0: 2024-04-03 04:12:35.000+0000 - 25.57MiB + [neo4j/fefd0874] - total size of files: 25.57MiB + [neo4j/fefd0874] Checkpoint log files: + [neo4j/fefd0874] - existing checkpoint log versions: 0-0 + [neo4j/fefd0874] - last checkpoint: CheckpointInfo[transactionLogPosition=LogPosition{logVersion=0, byteOffset=26816874}, storeId=StoreId{creationTime=1712117555300, random=260265064831090288, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1}, checkpointEntryPosition=LogPosition{logVersion=0, byteOffset=2912}, channelPositionAfterCheckpoint=LogPosition{logVersion=0, byteOffset=3144}, checkpointFilePostReadPosition=LogPosition{logVersion=0, byteOffset=3144}, kernelVersion=KernelVersion{V5_15,version=14}, kernelVersionByte=14, transactionId=TransactionId[transactionId=61, checksum=1300269007, commitTimestamp=1712154502651, consensusIndex=-1], reason=Checkpoint triggered by "Recovery completed." @ txId: 61, consensusIndexInCheckpoint=true] + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Id usage ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] ArrayPropertyStore[neostore.nodestore.db.labels]: used=1 high=0 + [neo4j/fefd0874] NodeStore[neostore.nodestore.db]: used=50003 high=50002 + [neo4j/fefd0874] StringPropertyStore[neostore.propertystore.db.index.keys]: used=23 high=22 + [neo4j/fefd0874] PropertyIndexStore[neostore.propertystore.db.index]: used=13 high=12 + [neo4j/fefd0874] StringPropertyStore[neostore.propertystore.db.strings]: used=1 high=0 + [neo4j/fefd0874] ArrayPropertyStore[neostore.propertystore.db.arrays]: used=1 high=0 + [neo4j/fefd0874] PropertyStore[neostore.propertystore.db]: used=50011 high=50010 + [neo4j/fefd0874] RelationshipStore[neostore.relationshipstore.db]: used=0 high=-1 + [neo4j/fefd0874] StringPropertyStore[neostore.relationshiptypestore.db.names]: used=1 high=0 + [neo4j/fefd0874] RelationshipTypeStore[neostore.relationshiptypestore.db]: used=0 high=-1 + [neo4j/fefd0874] StringPropertyStore[neostore.labeltokenstore.db.names]: used=8 high=7 + [neo4j/fefd0874] LabelTokenStore[neostore.labeltokenstore.db]: used=7 high=6 + [neo4j/fefd0874] SchemaStore[neostore.schemastore.db]: used=3 high=2 + [neo4j/fefd0874] RelationshipGroupStore[neostore.relationshipgroupstore.db]: used=1 high=0 + [neo4j/fefd0874] NeoStore[neostore]: used=-1 high=-1 + [neo4j/fefd0874] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] [ Metadata ] + [neo4j/fefd0874] -------------------------------------------------------------------------------- + [neo4j/fefd0874] EXTERNAL_STORE_UUID (Database identifier exposed as external store identity. Generated on creation and never updated): 485f4e4f-d438-40c9-a4ed-0bc1099d976f + [neo4j/fefd0874] DATABASE_ID (The last used DatabaseId for this database): null + [neo4j/fefd0874] LEGACY_STORE_VERSION (Legacy store format version. This field is used from 5.0 onwards only to distinguish non-migrated pre 5.0 metadata stores.): -3523014627327384477 + [neo4j/fefd0874] STORE_ID (Store ID): StoreId{creationTime=1712117555300, random=260265064831090288, storageEngineName='record', formatName='aligned', majorVersion=1, minorVersion=1} + [neo4j/fefd0874] +2024-04-03 14:29:14.647+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job registered: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:29:14.648+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job started: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:29:14.650+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job finished: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 Number of pages visited: 10, Number of tree nodes: 9, Number of cleaned crashed pointers: 0, Time spent: 1ms +2024-04-03 14:29:14.650+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job closed: descriptor=Index( id=1, name='index_343aff4e', type='LOOKUP', schema=(:), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/1/index-1 +2024-04-03 14:29:14.670+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job registered: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:29:14.671+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.init: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 48ms +2024-04-03 14:29:14.671+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job started: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:29:14.672+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job finished: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 Number of pages visited: 2, Number of tree nodes: 1, Number of cleaned crashed pointers: 0, Time spent: 0ms +2024-04-03 14:29:14.672+0000 INFO [o.n.k.i.i.s.TokenIndexProvider] [neo4j/fefd0874] Schema index cleanup job closed: descriptor=Index( id=2, name='index_f7700477', type='LOOKUP', schema=()-[:]-(), indexProvider='token-lookup-1.0' ), indexFile=/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/databases/neo4j/schema/index/token-lookup-1.0/2/index-2 +2024-04-03 14:29:14.673+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] Requirement `Database unavailable` makes database neo4j unavailable. +2024-04-03 14:29:14.673+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] DatabaseId{fefd0874[neo4j]} is unavailable. +2024-04-03 14:29:14.694+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/neo4j/neostore.transaction.db.0] at version=0 +2024-04-03 14:29:14.695+0000 INFO [o.n.k.d.Database] [neo4j/fefd0874] Starting transaction log [/Users/jnr6/IdeaProjects/policy-machine-core/testdb/data/transactions/neo4j/checkpoint.0] at version=0 +2024-04-03 14:29:14.696+0000 INFO [o.n.k.i.t.l.f.c.CheckpointLogFile] [neo4j/fefd0874] Scanning log file with version 0 for checkpoint entries +2024-04-03 14:29:14.698+0000 INFO [o.n.k.i.a.i.IndexingService] [neo4j/fefd0874] IndexingService.start: indexes not specifically mentioned above are ONLINE. Total 2 indexes. Processed in 0ms +2024-04-03 14:29:14.699+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] Fulfilling of requirement 'Database unavailable' makes database neo4j available. +2024-04-03 14:29:14.700+0000 INFO [o.n.k.a.DatabaseAvailabilityGuard] [neo4j/fefd0874] DatabaseId{fefd0874[neo4j]} is ready. +2024-04-03 14:29:14.733+0000 INFO [o.n.b.p.c.c.n.SocketNettyConnector] Bolt enabled on localhost:9999. +2024-04-03 14:29:14.734+0000 INFO [o.n.b.BoltServer] Bolt server started +2024-04-03 14:29:14.736+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] id: 266B93A8C1445AE734BA77BB99FDF56964B6082641ED1A3E87435C6A5111E836 +2024-04-03 14:29:14.736+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] name: system +2024-04-03 14:29:14.736+0000 INFO [o.n.g.f.DatabaseManagementServiceFactory] creationDate: 2024-04-03T04:12:32.66Z +2024-04-03 17:00:10.655+0000 WARN [o.n.k.i.c.VmPauseMonitorComponent] Detected VM stop-the-world pause: {pauseTime=304, gcTime=0, gcCount=0} +2024-04-03 17:00:10.977+0000 WARN [o.n.k.i.c.VmPauseMonitorComponent] Detected VM stop-the-world pause: {pauseTime=788, gcTime=0, gcCount=0} +2024-04-03 17:00:11.630+0000 WARN [o.n.k.i.c.VmPauseMonitorComponent] Detected VM stop-the-world pause: {pauseTime=414, gcTime=0, gcCount=0} +2024-04-03 17:53:15.829+0000 WARN [o.n.k.i.c.VmPauseMonitorComponent] Detected VM stop-the-world pause: {pauseTime=207, gcTime=0, gcCount=0} +2024-04-03 17:53:20.066+0000 WARN [o.n.k.i.c.VmPauseMonitorComponent] Detected VM stop-the-world pause: {pauseTime=241, gcTime=0, gcCount=0} +2024-04-03 17:53:20.519+0000 WARN [o.n.k.i.c.VmPauseMonitorComponent] Detected VM stop-the-world pause: {pauseTime=253, gcTime=0, gcCount=0} diff --git a/testdb/logs/http.log b/testdb/logs/http.log new file mode 100644 index 000000000..e69de29bb diff --git a/testdb/logs/query.log b/testdb/logs/query.log new file mode 100644 index 000000000..e69de29bb diff --git a/testdb/logs/security.log b/testdb/logs/security.log new file mode 100644 index 000000000..e69de29bb

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%0A#}I)Hq(RtZ70B-8=NNrU@Z*@6hE; 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