diff --git a/.github/workflows/create_aca_images.yml b/.github/workflows/create_aca_images.yml
index 12677cb2..9cda9434 100644
--- a/.github/workflows/create_aca_images.yml
+++ b/.github/workflows/create_aca_images.yml
@@ -17,7 +17,7 @@ env:
   PUBLIC_IMAGE_NAME: ghcr.io/nsacyber/hirs/aca
   PUBLIC_IMAGE_TAG_LATEST: ghcr.io/nsacyber/hirs/aca:latest
   TAG_LATEST: ${{ github.event_name == 'release' || inputs.also_tag_latest }} # The public docker image will be tagged 'latest' for releases, or if this option is manually selected.
-jobs:   
+jobs:
   setup:
     runs-on: ubuntu-latest
     outputs:
@@ -27,44 +27,44 @@ jobs:
       WINDOWS_COMPAT_IMAGE_TAG: ${{ steps.setenv.outputs.WINDOWS_COMPAT_IMAGE_TAG }}
       PUBLIC_IMAGE_TAG: ${{ steps.setenv.outputs.PUBLIC_IMAGE_TAG }}
     steps:
-    - name: Set env
-      id: setenv
-      shell: bash
-      run: |
-        # Parse docker image tag from GitHub tag if available
-        if [ "${{ github.ref_type }}" = "tag" ]; then
-          # tags start with refs/tags/. Also remove v if it exists.
-          export IMAGE_TAG_VAR=${GITHUB_REF:10}
-          export IMAGE_TAG_VAR=${IMAGE_TAG_VAR//v/}
-        else
-          # Not a tag, use the commit hash. Do not tag as latest.
-          export IMAGE_TAG_VAR=${GITHUB_SHA:0:7}
-        fi
-        # To lowercase
-        export IMAGE_TAG_VAR=${IMAGE_TAG_VAR,,}
-        
-        # Save to output
-        echo "IMAGE_TAG=$IMAGE_TAG_VAR" >> "$GITHUB_OUTPUT"
-        echo "ROCKY_IMAGE_TAG=$IMAGE_NAME_ROCKY:$IMAGE_TAG_VAR" >> "$GITHUB_OUTPUT"
-        echo "WINDOWS_IMAGE_TAG=$IMAGE_NAME_WINDOWS:$IMAGE_TAG_VAR" >> "$GITHUB_OUTPUT"
-        echo "WINDOWS_COMPAT_IMAGE_TAG=$IMAGE_NAME_WINDOWS_COMPAT:$IMAGE_TAG_VAR" >> "$GITHUB_OUTPUT"
-        echo "PUBLIC_IMAGE_TAG=$PUBLIC_IMAGE_NAME:$IMAGE_TAG_VAR" >> "$GITHUB_OUTPUT"
-    - name: Print env
-      run: |
-        echo GITHUB_REF_NAME=${{ github.ref_name }}
-        echo DOCKERFILE_ROCKY=$DOCKERFILE_ROCKY
-        echo DOCKERFILE_WINDOWS=$DOCKERFILE_WINDOWS
-        echo IMAGE_NAME_ROCKY=$IMAGE_NAME_ROCKY
-        echo IMAGE_NAME_WINDOWS=$IMAGE_NAME_WINDOWS
-        echo IMAGE_NAME_WINDOWS_COMPAT=$IMAGE_NAME_WINDOWS_COMPAT
-        echo PUBLIC_IMAGE_NAME=$PUBLIC_IMAGE_NAME
-        echo PUBLIC_IMAGE_TAG_LATEST=$PUBLIC_IMAGE_TAG_LATEST
-        echo TAG_LATEST=$TAG_LATEST
-        echo IMAGE_TAG=${{ steps.setenv.outputs.IMAGE_TAG }}
-        echo ROCKY_IMAGE_TAG=${{ steps.setenv.outputs.ROCKY_IMAGE_TAG }}
-        echo WINDOWS_IMAGE_TAG=${{ steps.setenv.outputs.WINDOWS_IMAGE_TAG }}
-        echo WINDOWS_COMPAT_IMAGE_TAG=${{ steps.setenv.outputs.WINDOWS_COMPAT_IMAGE_TAG }}
-        echo PUBLIC_IMAGE_TAG=${{ steps.setenv.outputs.PUBLIC_IMAGE_TAG }}
+      - name: Set env
+        id: setenv
+        shell: bash
+        run: |
+          # Parse docker image tag from GitHub tag if available
+          if [ "${{ github.ref_type }}" = "tag" ]; then
+            # tags start with refs/tags/. Also remove v if it exists.
+            export IMAGE_TAG_VAR=${GITHUB_REF:10}
+            export IMAGE_TAG_VAR=${IMAGE_TAG_VAR//v/}
+          else
+            # Not a tag, use the commit hash. Do not tag as latest.
+            export IMAGE_TAG_VAR=${GITHUB_SHA:0:7}
+          fi
+          # To lowercase
+          export IMAGE_TAG_VAR=${IMAGE_TAG_VAR,,}
+          
+          # Save to output
+          echo "IMAGE_TAG=$IMAGE_TAG_VAR" >> "$GITHUB_OUTPUT"
+          echo "ROCKY_IMAGE_TAG=$IMAGE_NAME_ROCKY:$IMAGE_TAG_VAR" >> "$GITHUB_OUTPUT"
+          echo "WINDOWS_IMAGE_TAG=$IMAGE_NAME_WINDOWS:$IMAGE_TAG_VAR" >> "$GITHUB_OUTPUT"
+          echo "WINDOWS_COMPAT_IMAGE_TAG=$IMAGE_NAME_WINDOWS_COMPAT:$IMAGE_TAG_VAR" >> "$GITHUB_OUTPUT"
+          echo "PUBLIC_IMAGE_TAG=$PUBLIC_IMAGE_NAME:$IMAGE_TAG_VAR" >> "$GITHUB_OUTPUT"
+      - name: Print env
+        run: |
+          echo GITHUB_REF_NAME=${{ github.ref_name }}
+          echo DOCKERFILE_ROCKY=$DOCKERFILE_ROCKY
+          echo DOCKERFILE_WINDOWS=$DOCKERFILE_WINDOWS
+          echo IMAGE_NAME_ROCKY=$IMAGE_NAME_ROCKY
+          echo IMAGE_NAME_WINDOWS=$IMAGE_NAME_WINDOWS
+          echo IMAGE_NAME_WINDOWS_COMPAT=$IMAGE_NAME_WINDOWS_COMPAT
+          echo PUBLIC_IMAGE_NAME=$PUBLIC_IMAGE_NAME
+          echo PUBLIC_IMAGE_TAG_LATEST=$PUBLIC_IMAGE_TAG_LATEST
+          echo TAG_LATEST=$TAG_LATEST
+          echo IMAGE_TAG=${{ steps.setenv.outputs.IMAGE_TAG }}
+          echo ROCKY_IMAGE_TAG=${{ steps.setenv.outputs.ROCKY_IMAGE_TAG }}
+          echo WINDOWS_IMAGE_TAG=${{ steps.setenv.outputs.WINDOWS_IMAGE_TAG }}
+          echo WINDOWS_COMPAT_IMAGE_TAG=${{ steps.setenv.outputs.WINDOWS_COMPAT_IMAGE_TAG }}
+          echo PUBLIC_IMAGE_TAG=${{ steps.setenv.outputs.PUBLIC_IMAGE_TAG }}
   
   rocky-image:
     needs: setup
@@ -72,78 +72,78 @@ jobs:
     env:
       TAG: ${{ needs.setup.outputs.ROCKY_IMAGE_TAG }}
     steps:
-    - name: Checkout main
-      uses: actions/checkout@v4
-      
-    - name: Login to GitHub Container Registry
-      uses: docker/login-action@v3
-      with:
-        registry: ghcr.io
-        username: ${{ github.actor }}
-        password: ${{ secrets.GITHUB_TOKEN }}
-        
-    - name: Build and push a release Docker image for ${{ github.repository }}
-      uses: docker/build-push-action@v5
-      with:
-        context: "{{defaultContext}}:.ci/docker"
-        file: Dockerfile.${{env.DOCKERFILE_ROCKY}}
-        build-args: REF=${{ github.ref_name }}
-        tags: ${{env.TAG}}
-        push: true
-        
+      - name: Checkout main
+        uses: actions/checkout@v4
+
+      - name: Login to GitHub Container Registry
+        uses: docker/login-action@v4
+        with:
+          registry: ghcr.io
+          username: ${{ github.actor }}
+          password: ${{ secrets.GITHUB_TOKEN }}
+
+      - name: Build and push a release Docker image for ${{ github.repository }}
+        uses: docker/build-push-action@v5
+        with:
+          context: "{{defaultContext}}:.ci/docker"
+          file: Dockerfile.${{env.DOCKERFILE_ROCKY}}
+          build-args: REF=${{ github.ref_name }}
+          tags: ${{env.TAG}}
+          push: true
+
   windows-11-image:
     needs: setup
     runs-on: windows-latest
     env:
       TAG: ${{ needs.setup.outputs.WINDOWS_IMAGE_TAG }}
     steps:
-    - name: Checkout main
-      uses: actions/checkout@v4
-      
-    - name: Login to GitHub Container Registry
-      uses: docker/login-action@v3
-      with:
-        registry: ghcr.io
-        username: ${{ github.actor }}
-        password: ${{ secrets.GITHUB_TOKEN }}
+      - name: Checkout main
+        uses: actions/checkout@v4
+
+      - name: Login to GitHub Container Registry
+        uses: docker/login-action@v4
+        with:
+          registry: ghcr.io
+          username: ${{ github.actor }}
+          password: ${{ secrets.GITHUB_TOKEN }}
+
+      - name: Build the docker image for ${{ github.repository }}
+        run: |
+          cd ./.ci/docker
+          docker build --build-arg REF=${{ github.ref_name }} -f ./Dockerfile.${{env.DOCKERFILE_WINDOWS}} -t ${{env.TAG}} .
+
+      - name: Push the docker image
+        run: |
+          docker push ${{env.TAG}}
 
-    - name: Build the docker image for ${{ github.repository }}
-      run: |
-        cd ./.ci/docker
-        docker build --build-arg REF=${{ github.ref_name }} -f ./Dockerfile.${{env.DOCKERFILE_WINDOWS}} -t ${{env.TAG}} .
-    
-    - name: Push the docker image
-      run: |
-        docker push ${{env.TAG}}
-        
   windows-compat-image: # This job uses a different runner and build arg than the other windows job.
     needs: setup
     runs-on: windows-2019
     env:
       TAG: ${{ needs.setup.outputs.WINDOWS_COMPAT_IMAGE_TAG }}
     steps:
-    - name: Checkout main
-      uses: actions/checkout@v4
+      - name: Checkout main
+        uses: actions/checkout@v4
 
-    - name: Login to GitHub Container Registry
-      uses: docker/login-action@v3
-      with:
-        registry: ghcr.io
-        username: ${{ github.actor }}
-        password: ${{ secrets.GITHUB_TOKEN }}
+      - name: Login to GitHub Container Registry
+        uses: docker/login-action@v4
+        with:
+          registry: ghcr.io
+          username: ${{ github.actor }}
+          password: ${{ secrets.GITHUB_TOKEN }}
+
+      - name: Build the docker image for ${{ github.repository }}
+        run: |
+          cd ./.ci/docker
+          docker build --build-arg REF=${{ github.ref_name }} -f ./Dockerfile.${{env.DOCKERFILE_WINDOWS}} -t ${{env.TAG}} --build-arg BASE_IMAGE_TAG=lts-windowsservercore-1809 .
+
+      - name: Push the docker image
+        run: |
+          docker push ${{env.TAG}}
+  
 
-    - name: Build the docker image for ${{ github.repository }}
-      run: |
-        cd ./.ci/docker
-        docker build --build-arg REF=${{ github.ref_name }} -f ./Dockerfile.${{env.DOCKERFILE_WINDOWS}} -t ${{env.TAG}} --build-arg BASE_IMAGE_TAG=lts-windowsservercore-1809 .
-        
-    - name: Push the docker image
-      run: |
-        docker push ${{env.TAG}}
-        
-        
   manifest:
-    needs: [setup, rocky-image, windows-11-image, windows-compat-image]
+    needs: [ setup, rocky-image, windows-11-image, windows-compat-image ]
     runs-on: ubuntu-latest
     env:
       IMAGE1: ${{ needs.setup.outputs.ROCKY_IMAGE_TAG }}
@@ -151,34 +151,34 @@ jobs:
       IMAGE3: ${{ needs.setup.outputs.WINDOWS_COMPAT_IMAGE_TAG }}
       PUB: ${{ needs.setup.outputs.PUBLIC_IMAGE_TAG }}
     steps:
-    - name: Print env
-      run: |
-        echo IMAGE1=${{env.IMAGE1}}
-        echo IMAGE2=${{env.IMAGE2}}
-        echo IMAGE3=${{env.IMAGE3}}
-        echo PUB=${{env.PUB}}
-        
-    - name: Checkout main
-      uses: actions/checkout@v4
-      
-    - name: Login to GitHub Container Registry
-      uses: docker/login-action@v3
-      with:
-        registry: ghcr.io
-        username: ${{ github.actor }}
-        password: ${{ secrets.GITHUB_TOKEN }}
-          
-    - name: Create a new manifest
-      run: |
-        docker manifest create ${{env.PUB}} --amend ${{env.IMAGE1}} --amend ${{env.IMAGE2}} --amend ${{env.IMAGE3}}
-        
-    - name: Push the new manifest
-      run: |
-        docker manifest push ${{env.PUB}}
-        
-    - name: Create and push manifest latest if selected
-      if: env.TAG_LATEST != 'false'
-      run: |
-        docker manifest create $PUBLIC_IMAGE_TAG_LATEST --amend $IMAGE1 --amend $IMAGE2 --amend $IMAGE3
-        docker manifest push $PUBLIC_IMAGE_TAG_LATEST
+      - name: Print env
+        run: |
+          echo IMAGE1=${{env.IMAGE1}}
+          echo IMAGE2=${{env.IMAGE2}}
+          echo IMAGE3=${{env.IMAGE3}}
+          echo PUB=${{env.PUB}}
+
+      - name: Checkout main
+        uses: actions/checkout@v4
+
+      - name: Login to GitHub Container Registry
+        uses: docker/login-action@v4
+        with:
+          registry: ghcr.io
+          username: ${{ github.actor }}
+          password: ${{ secrets.GITHUB_TOKEN }}
+
+      - name: Create a new manifest
+        run: |
+          docker manifest create ${{env.PUB}} --amend ${{env.IMAGE1}} --amend ${{env.IMAGE2}} --amend ${{env.IMAGE3}}
+
+      - name: Push the new manifest
+        run: |
+          docker manifest push ${{env.PUB}}
+
+      - name: Create and push manifest latest if selected
+        if: env.TAG_LATEST != 'false'
+        run: |
+          docker manifest create $PUBLIC_IMAGE_TAG_LATEST --amend $IMAGE1 --amend $IMAGE2 --amend $IMAGE3
+          docker manifest push $PUBLIC_IMAGE_TAG_LATEST
  
diff --git a/.github/workflows/dotnet_provisioner_unit_tests.yml b/.github/workflows/dotnet_provisioner_unit_tests.yml
index 436bca1e..5a561bd6 100644
--- a/.github/workflows/dotnet_provisioner_unit_tests.yml
+++ b/.github/workflows/dotnet_provisioner_unit_tests.yml
@@ -2,7 +2,7 @@ name: Dotnet Provisioner Unit Tests
 
 on: push
 env:
-  DOTNET_VERSION: '6.0'
+  DOTNET_VERSION: '8S.0'
 jobs:
   dotnet_provisioner_unit_tests:
     name: Restore and Run Unit Tests
@@ -97,7 +97,7 @@ jobs:
 
   Evaluator:
     name: Evaluate Tests
-    needs: [dotnet_provisioner_unit_tests]
+    needs: [ dotnet_provisioner_unit_tests ]
     runs-on: ubuntu-latest
     continue-on-error: false
     steps:
@@ -110,7 +110,7 @@ jobs:
         run: |
           mkdir artifacts
 
-      - uses: actions/download-artifact@v3
+      - uses: actions/download-artifact@v4
         with:
           path: artifacts
 
diff --git a/.github/workflows/hirs_package_linux.yml b/.github/workflows/hirs_package_linux.yml
index b8f04b06..fe76880d 100644
--- a/.github/workflows/hirs_package_linux.yml
+++ b/.github/workflows/hirs_package_linux.yml
@@ -8,34 +8,34 @@ on:
 
 jobs:
   # run the package script for HIRS ACA, Provisioners, tcg_rim_tool, and tcg_eventlog_tool
- Package_linux:
+  Package_linux:
     runs-on: ubuntu-latest
     permissions:
       contents: read
       packages: write
 
     steps:
-    - uses: actions/checkout@v4
-    - name: Set up JDK 17
-      uses: actions/setup-java@v4
-      with:
-        java-version: '17'
-        distribution: 'temurin'
-        server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
-        settings-path: ${{ github.workspace }} # location for the settings.xml file
-    - name: directory setup
-      run: |
-       mkdir -p artifacts/jars
-       mkdir -p artifacts/win
-       mkdir -p artifacts/win/hirstools
-    - name: install dependencies
-      run: |
-        sudo apt-get update
-        sudo apt-get install git curl nano cron mariadb-server
-    - name: Setup Gradle
-      uses: gradle/actions/setup-gradle@v3
-    - name: Execute Gradle build
-      run: |
+      - uses: actions/checkout@v4
+      - name: Set up JDK 17
+        uses: actions/setup-java@v4
+        with:
+          java-version: '17'
+          distribution: 'temurin'
+          server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
+          settings-path: ${{ github.workspace }} # location for the settings.xml file
+      - name: directory setup
+        run: |
+          mkdir -p artifacts/jars
+          mkdir -p artifacts/win
+          mkdir -p artifacts/win/hirstools
+      - name: install dependencies
+        run: |
+          sudo apt-get update
+          sudo apt-get install git curl nano cron mariadb-server
+      - name: Setup Gradle
+        uses: gradle/actions/setup-gradle@v4
+      - name: Execute Gradle build
+        run: |
           ./gradlew build;
           ./gradlew bootWar;
           ./gradlew buildDeb;
@@ -48,35 +48,35 @@ jobs:
           cp tools/tcg_rim_tool/build/distributions/*.zip artifacts/win
           cp tools/tcg_eventlog_tool/build/distributions/*.zip artifacts/win
           cp package/win/tcg-rim-tool/* artifacts/win/hirstools
-    - name: Archive RPM files
-      uses: actions/upload-artifact@v4
-      with:
-        name: RPM_Files
-        path: HIRS_AttestationCAPortal/build/distributions/*.rpm
-        if-no-files-found: error
-    - name: Archive DEB files
-      uses: actions/upload-artifact@v4
-      with:
-        name: DEB_Files
-        path: HIRS_AttestationCAPortal/build/distributions/*.deb
-        if-no-files-found: error
-    - name: War files
-      uses: actions/upload-artifact@v4
-      with:
-        name: WAR_Files
-        path: HIRS_AttestationCAPortal/build/libs/HIRS_AttestationCAPortal.war
-        if-no-files-found: error
-    - name: JAR_Files
-      uses: actions/upload-artifact@v4
-      with:
-        name: JAR_Files
-        path: artifacts/jars/
-        if-no-files-found: error
-    - name: ZIP_Files
-      uses: actions/upload-artifact@v4
-      with:
-        name: ZIP_Files
-        path: artifacts/win/
-        if-no-files-found: error
+      - name: Archive RPM files
+        uses: actions/upload-artifact@v4
+        with:
+          name: RPM_Files
+          path: HIRS_AttestationCAPortal/build/distributions/*.rpm
+          if-no-files-found: error
+      - name: Archive DEB files
+        uses: actions/upload-artifact@v4
+        with:
+          name: DEB_Files
+          path: HIRS_AttestationCAPortal/build/distributions/*.deb
+          if-no-files-found: error
+      - name: War files
+        uses: actions/upload-artifact@v4
+        with:
+          name: WAR_Files
+          path: HIRS_AttestationCAPortal/build/libs/HIRS_AttestationCAPortal.war
+          if-no-files-found: error
+      - name: JAR_Files
+        uses: actions/upload-artifact@v4
+        with:
+          name: JAR_Files
+          path: artifacts/jars/
+          if-no-files-found: error
+      - name: ZIP_Files
+        uses: actions/upload-artifact@v4
+        with:
+          name: ZIP_Files
+          path: artifacts/win/
+          if-no-files-found: error
 
         
diff --git a/.github/workflows/hirs_unit_tests.yml b/.github/workflows/hirs_unit_tests.yml
index fc12f3b4..00e9bc47 100644
--- a/.github/workflows/hirs_unit_tests.yml
+++ b/.github/workflows/hirs_unit_tests.yml
@@ -17,82 +17,82 @@ jobs:
   ACA_Provisioner_Unit_Tests:
     runs-on: ubuntu-latest  # Configures the job to run on the latest version of an Ubuntu Linux runner
     steps:
-    - uses: actions/checkout@v3  # run v3 of actions/checkout action, which checks out your repository onto the runner
-    # Build will archive build reports and will create a failedFile if build is not successful
-    - name: Directory setup
-      run: |
-        mkdir -p artifacts/githubActionsResults
-        mkdir -p artifacts/upload_reports/HIRS_AttestationCA
-        mkdir -p artifacts/upload_reports/HIRS_AttestationCAPortal
-        mkdir -p artifacts/upload_reports/HIRS_Provisioner
-        mkdir -p artifacts/upload_reports/HIRS_ProvisionerTPM2
-        mkdir -p artifacts/upload_reports/HIRS_Structs
-        mkdir -p artifacts/upload_reports/HIRS_Utils
-        mkdir -p artifacts/upload_reports/tcg_rim_tool
-        mkdir -p artifacts/upload_reports/tcg_eventlog_tool
-    # Run the provisioner and ACA unit tests via gradle build in a Rocky Docker container
-    - name: Build HIRS and run unit tests
-      run: |
-        
-        # log into and run docker (note: must set up secrets in github for ghcr username and access_token)
-        echo ${{ secrets.GITHUB_TOKEN }} | docker login ghcr.io -u $ --password-stdin
-        
-        # docker run options:
-        #   create a mount between curr directory on the runner and the HIRS folder created by the cloning of HIRS repo
-        #     -v $(pwd):/HIRS
-        #   image used for the container, given by <repository>:<tag_name>
-        #     rocky8: ghcr.io/nsacyber/hirs/hirs-rocky8-ci:latest [repo: https://github.com/orgs/nsacyber/packages]
-        #   bash commands to clean/build/test each subproject
-        #     /bin/bash -c '<commands>'
-        docker run --rm \
-        -v $(pwd):/HIRS \
-        ghcr.io/nsacyber/hirs/hirs-rocky8-ci:latest /bin/bash -c \
-          'pushd /HIRS
-          gradle_status=0
-        
-          # git added a feature that gives error if user is not owner of the top-level directory; need to override this
-          git config --global --add safe.directory /HIRS
-        
-          # clean, build and run unit tests on all sub-projects; copy build reports to an artifacts directory
-          ./gradlew :HIRS_AttestationCA:clean :HIRS_AttestationCA:build :HIRS_AttestationCA:test
-          if (( $? != "0" )) ; then gradle_status=1; fi
-          cp -r /HIRS/HIRS_AttestationCA/build/reports/ /HIRS/artifacts/upload_reports/HIRS_AttestationCA/.
-          ./gradlew :HIRS_AttestationCAPortal:clean :HIRS_AttestationCAPortal:build :HIRS_AttestationCAPortal:test
-          if (( $? != "0" )) ; then gradle_status=1; fi
-          cp -r /HIRS/HIRS_AttestationCAPortal/build/reports/ /HIRS/artifacts/upload_reports/HIRS_AttestationCAPortal/.
-          #./gradlew :HIRS_Provisioner:clean :HIRS_Provisioner:build :HIRS_Provisioner:test
-          #if (( $? != "0" )) ; then gradle_status=1; fi
-          #cp -r /HIRS/HIRS_Provisioner/build/reports/ /HIRS/artifacts/upload_reports/HIRS_Provisioner/.
-          #./gradlew :HIRS_ProvisionerTPM2:clean :HIRS_ProvisionerTPM2:build :HIRS_ProvisionerTPM2:test
-          #if (( $? != "0" )) ; then gradle_status=1; fi
-          #cp -r /HIRS/HIRS_ProvisionerTPM2/docs/ /HIRS/artifacts/upload_reports/HIRS_ProvisionerTPM2/.
-          ./gradlew :HIRS_Structs:clean :HIRS_Structs:build :HIRS_Structs:test
-          if (( $? != "0" )) ; then gradle_status=1; fi
-          cp -r /HIRS/HIRS_Structs/build/reports/ /HIRS/artifacts/upload_reports/HIRS_Structs/.
-          ./gradlew :HIRS_Utils:clean :HIRS_Utils:build :HIRS_Utils:test
-          if (( $? != "0" )) ; then gradle_status=1; fi
-          cp -r /HIRS/HIRS_Utils/build/reports/ /HIRS/artifacts/upload_reports/HIRS_Utils/.
-          #./gradlew :TPM_Utils:clean :TPM_Utils:build :TPM_Utils:test
-          #if (( $? != "0" )) ; then gradle_status=1; fi
-        
-          # Create "fail file" to fail the Build ACA tests if gradle exited with anything other than 0      
-          if (( $gradle_status == "0" )) ; then
-            echo "In docker: Build Passed"
-          else
-            echo "In docker: Build Failed"
-            touch /HIRS/artifacts/githubActionsResults/buildFailed.txt
-          fi; popd;'
-    # Upload build report files
-    - name: Archive report files
-      uses: actions/upload-artifact@v3
-      with:
-        name: HIRS_Build_Reports
-        path: artifacts/upload_reports/*
-        if-no-files-found: ignore
-    # If buildFailed file exists, use that to fail the ACA unit tests
-    - name: Check if build/test passed or failed
-      if: ${{ hashFiles('artifacts/githubActionsResults/buildFailed.txt') != '' }}
-      uses: actions/github-script@v6
-      with:
-        script: |
-          core.setFailed('Build or Unit Test Failed')
\ No newline at end of file
+      - uses: actions/checkout@v4  # run v4 of actions/checkout action, which checks out your repository onto the runner
+      # Build will archive build reports and will create a failedFile if build is not successful
+      - name: Directory setup
+        run: |
+          mkdir -p artifacts/githubActionsResults
+          mkdir -p artifacts/upload_reports/HIRS_AttestationCA
+          mkdir -p artifacts/upload_reports/HIRS_AttestationCAPortal
+          mkdir -p artifacts/upload_reports/HIRS_Provisioner
+          mkdir -p artifacts/upload_reports/HIRS_ProvisionerTPM2
+          mkdir -p artifacts/upload_reports/HIRS_Structs
+          mkdir -p artifacts/upload_reports/HIRS_Utils
+          mkdir -p artifacts/upload_reports/tcg_rim_tool
+          mkdir -p artifacts/upload_reports/tcg_eventlog_tool
+      # Run the provisioner and ACA unit tests via gradle build in a Rocky Docker container
+      - name: Build HIRS and run unit tests
+        run: |
+          
+          # log into and run docker (note: must set up secrets in github for ghcr username and access_token)
+          echo ${{ secrets.GITHUB_TOKEN }} | docker login ghcr.io -u $ --password-stdin
+          
+          # docker run options:
+          #   create a mount between curr directory on the runner and the HIRS folder created by the cloning of HIRS repo
+          #     -v $(pwd):/HIRS
+          #   image used for the container, given by <repository>:<tag_name>
+          #     rocky8: ghcr.io/nsacyber/hirs/hirs-rocky8-ci:latest [repo: https://github.com/orgs/nsacyber/packages]
+          #   bash commands to clean/build/test each subproject
+          #     /bin/bash -c '<commands>'
+          docker run --rm \
+          -v $(pwd):/HIRS \
+          ghcr.io/nsacyber/hirs/hirs-rocky8-ci:latest /bin/bash -c \
+            'pushd /HIRS
+            gradle_status=0
+          
+            # git added a feature that gives error if user is not owner of the top-level directory; need to override this
+            git config --global --add safe.directory /HIRS
+          
+            # clean, build and run unit tests on all sub-projects; copy build reports to an artifacts directory
+            ./gradlew :HIRS_AttestationCA:clean :HIRS_AttestationCA:build :HIRS_AttestationCA:test
+            if (( $? != "0" )) ; then gradle_status=1; fi
+            cp -r /HIRS/HIRS_AttestationCA/build/reports/ /HIRS/artifacts/upload_reports/HIRS_AttestationCA/.
+            ./gradlew :HIRS_AttestationCAPortal:clean :HIRS_AttestationCAPortal:build :HIRS_AttestationCAPortal:test
+            if (( $? != "0" )) ; then gradle_status=1; fi
+            cp -r /HIRS/HIRS_AttestationCAPortal/build/reports/ /HIRS/artifacts/upload_reports/HIRS_AttestationCAPortal/.
+            #./gradlew :HIRS_Provisioner:clean :HIRS_Provisioner:build :HIRS_Provisioner:test
+            #if (( $? != "0" )) ; then gradle_status=1; fi
+            #cp -r /HIRS/HIRS_Provisioner/build/reports/ /HIRS/artifacts/upload_reports/HIRS_Provisioner/.
+            #./gradlew :HIRS_ProvisionerTPM2:clean :HIRS_ProvisionerTPM2:build :HIRS_ProvisionerTPM2:test
+            #if (( $? != "0" )) ; then gradle_status=1; fi
+            #cp -r /HIRS/HIRS_ProvisionerTPM2/docs/ /HIRS/artifacts/upload_reports/HIRS_ProvisionerTPM2/.
+            ./gradlew :HIRS_Structs:clean :HIRS_Structs:build :HIRS_Structs:test
+            if (( $? != "0" )) ; then gradle_status=1; fi
+            cp -r /HIRS/HIRS_Structs/build/reports/ /HIRS/artifacts/upload_reports/HIRS_Structs/.
+            ./gradlew :HIRS_Utils:clean :HIRS_Utils:build :HIRS_Utils:test
+            if (( $? != "0" )) ; then gradle_status=1; fi
+            cp -r /HIRS/HIRS_Utils/build/reports/ /HIRS/artifacts/upload_reports/HIRS_Utils/.
+            #./gradlew :TPM_Utils:clean :TPM_Utils:build :TPM_Utils:test
+            #if (( $? != "0" )) ; then gradle_status=1; fi
+          
+            # Create "fail file" to fail the Build ACA tests if gradle exited with anything other than 0      
+            if (( $gradle_status == "0" )) ; then
+              echo "In docker: Build Passed"
+            else
+              echo "In docker: Build Failed"
+              touch /HIRS/artifacts/githubActionsResults/buildFailed.txt
+            fi; popd;'
+      # Upload build report files
+      - name: Archive report files
+        uses: actions/upload-artifact@v4
+        with:
+          name: HIRS_Build_Reports
+          path: artifacts/upload_reports/*
+          if-no-files-found: ignore
+      # If buildFailed file exists, use that to fail the ACA unit tests
+      - name: Check if build/test passed or failed
+        if: ${{ hashFiles('artifacts/githubActionsResults/buildFailed.txt') != '' }}
+        uses: actions/github-script@v6
+        with:
+          script: |
+            core.setFailed('Build or Unit Test Failed')
\ No newline at end of file
diff --git a/.github/workflows/rim_tests.yml b/.github/workflows/rim_tests.yml
index 11799391..b0fc9b7b 100644
--- a/.github/workflows/rim_tests.yml
+++ b/.github/workflows/rim_tests.yml
@@ -28,7 +28,7 @@ jobs:
           sudo apt-get update
           sudo apt-get install git curl nano cron mariadb-server
       - name: Setup Gradle
-        uses: gradle/actions/setup-gradle@v3
+        uses: gradle/actions/setup-gradle@v4
       - name: Execute Gradle build
         run: |
           ./gradlew build;
@@ -37,7 +37,7 @@ jobs:
         run: |
           sudo dpkg -i tools/tcg_rim_tool/build/distributions/tcg-rim-tool*.deb
       - name: RIM tests
-        run: | 
+        run: |
           ./.ci/tcg-rim-tool/scripts/run_all_tests.sh --verbose
 
 
diff --git a/HIRS_AttestationCAPortal/src/main/java/hirs/attestationca/portal/page/controllers/DevicePageController.java b/HIRS_AttestationCAPortal/src/main/java/hirs/attestationca/portal/page/controllers/DevicePageController.java
index 56dd1982..ec99f9bc 100644
--- a/HIRS_AttestationCAPortal/src/main/java/hirs/attestationca/portal/page/controllers/DevicePageController.java
+++ b/HIRS_AttestationCAPortal/src/main/java/hirs/attestationca/portal/page/controllers/DevicePageController.java
@@ -237,8 +237,8 @@ public class DevicePageController extends PageController<NoPageParams> {
         List<UUID> deviceIds = new ArrayList<>();
 
         // loop all the devices
-        for (int i = 0; i < deviceList.size(); i++) {
-            deviceIds.add(deviceList.get(i).getId());
+        for (Device device : deviceList) {
+            deviceIds.add(device.getId());
         }
 
         return deviceIds;
diff --git a/HIRS_AttestationCAPortal/src/main/webapp/WEB-INF/jsp/certificate-details.jsp b/HIRS_AttestationCAPortal/src/main/webapp/WEB-INF/jsp/certificate-details.jsp
index 6550ebab..1cd0a508 100644
--- a/HIRS_AttestationCAPortal/src/main/webapp/WEB-INF/jsp/certificate-details.jsp
+++ b/HIRS_AttestationCAPortal/src/main/webapp/WEB-INF/jsp/certificate-details.jsp
@@ -959,15 +959,15 @@
         </div>
         <script>
             $(document).ready(function () {
-                var type = "${param.type}";
-                var signature = ${initialData.signature};
-                var serialNumber = '${initialData.serialNumber}';
-                var authorityKeyIdentifier = '${initialData.authKeyId}';
-                var authoritySerialNumber = '${initialData.authSerialNumber}';
+                let type = "${param.type}";
+                let signature = ${initialData.signature};
+                let serialNumber = '${initialData.serialNumber}';
+                let authorityKeyIdentifier = '${initialData.authKeyId}';
+                let authoritySerialNumber = '${initialData.authSerialNumber}';
 
                 //Format validity time
                 $("#validity span").each(function () {
-                    var dateText = $(this).text();
+                    let dateText = $(this).text();
                     return $(this).text(formatCertificateDate(dateText));
                 });
 
@@ -993,13 +993,13 @@
             </c:if>
             <c:choose>
                 <c:when test="${not empty initialData.publicKeyValue}">
-                var publicKey = '${initialData.publicKeyValue}';
+                let publicKey = '${initialData.publicKeyValue}';
                 $("#encodedPublicKey").html(parseHexString(publicKey));
                 </c:when>
                 <c:otherwise>
                     <c:if test="${not empty initialData.encodedPublicKey}">
                 //Change public key byte to hex
-                var encPublicKey = ${initialData.encodedPublicKey};
+                let encPublicKey = ${initialData.encodedPublicKey};
                 $("#encodedPublicKey").html(byteToHexString(encPublicKey));
                     </c:if>
                 </c:otherwise>
@@ -1008,19 +1008,19 @@
             <c:if test="${not empty initialData.subjectKeyIdentifier}">
                 //Change subject byte to hex only for CACertificate
                 if (type === "certificateauthority") {
-                    var subjectKeyIdentifier = ${initialData.subjectKeyIdentifier};
+                    let subjectKeyIdentifier = ${initialData.subjectKeyIdentifier};
                     $("#subjectKeyIdentifier").html(byteToHexString(subjectKeyIdentifier));
                 }
             </c:if>
 
                 <c:if test="${not empty initialData.hwSerialNumHex}">
-                    var hwSerialNum = '${initialData.hwSerialNum}';
+                    let hwSerialNum = '${initialData.hwSerialNum}';
                     $("#hwSerialNum").html(parseHexString(hwSerialNum));
                 </c:if>
 
                 <c:if test="${not empty initialData.tcgTpmManufacturer}">
-                    var ekAKI = '${initialData.ekAuthorityKeyIdentifier};'
-                    var ekCSN = '${initialData.ekCertificateSerialNumber};'
+                    let ekAKI = '${initialData.ekAuthorityKeyIdentifier};'
+                    let ekCSN = '${initialData.ekCertificateSerialNumber};'
 
                     $("#ekAuthorityKeyIdentifier").html(parseHexString(ekAKI));
                     $("#ekCertificateSerialNumber").html(parseHexString(ekCSN));
@@ -1038,9 +1038,9 @@
 
                 //Change link width
                 $("#headingOne, #headingTwo, #headingThree").each(function (e) {
-                    var width = $(this).width();
+                    let width = $(this).width();
                     //Get link width
-                    var linkWidth = $(this).find('a').width();
+                    let linkWidth = $(this).find('a').width();
 
                     //Change width for the link
                     $(this).find('a').css({
diff --git a/HIRS_AttestationCAPortal/src/main/webapp/WEB-INF/jsp/devices.jsp b/HIRS_AttestationCAPortal/src/main/webapp/WEB-INF/jsp/devices.jsp
index fd53b6ff..4b83d9a0 100644
--- a/HIRS_AttestationCAPortal/src/main/webapp/WEB-INF/jsp/devices.jsp
+++ b/HIRS_AttestationCAPortal/src/main/webapp/WEB-INF/jsp/devices.jsp
@@ -43,13 +43,13 @@
         </div>
         <script>
             $(document).ready(function() {
-                var url = portal + '/devices/list';
-                var columns = [
+                let url = portal + '/devices/list';
+                let columns = [
                         {
                             data: 'supplyChainValidationStatus',
                             searchable:false,
                             render: function(data, type, full, meta) {
-                                var html = '';
+                                let html = '';
                                 switch(full.device.supplyChainValidationStatus){
                                     case "PASS":
                                         html= '<img src="${passIcon}" title="${passText}">';
@@ -80,11 +80,11 @@
                             render: function (data, type, full, meta) {
                                 //Display issued attestation certificate
                                 if(full.IssuedAttestationCertificate === undefined) return '';
-                                var size = full.IssuedAttestationCertificate.length;
-                                var html = '';
+                                let size = full.IssuedAttestationCertificate.length;
+                                let html = '';
 
-                                for(var i = 0; i < size; i++) {
-                                    var id = full.IssuedAttestationCertificate[i].id;
+                                for(let i = 0; i < size; i++) {
+                                    let id = full.IssuedAttestationCertificate[i].id;
                                     html += certificateDetailsLink('issued', id, false);
                                 }
 
@@ -98,11 +98,11 @@
                             render: function (data, type, full, meta) {
                                 //Display platform credential
                                 if(full.PlatformCredential === undefined) return '';
-                                var size = full.PlatformCredential.length;
-                                var html = '';
+                                let size = full.PlatformCredential.length;
+                                let html = '';
 
-                                for(var i = 0; i < size; i++) {
-                                    var id = full.PlatformCredential[i].id;
+                                for(let i = 0; i < size; i++) {
+                                    let id = full.PlatformCredential[i].id;
                                     html += certificateDetailsLink('platform', id, false) + '&nbsp;';
                                 }
 
@@ -116,11 +116,11 @@
                             render: function (data, type, full, meta) {
                                 //Display endorsement credential
                                 if(full.EndorsementCredential === undefined) return '';
-                                var size = full.EndorsementCredential.length;
-                                var html = '';
+                                let size = full.EndorsementCredential.length;
+                                let html = '';
 
-                                for(var i = 0; i < size; i++) {
-                                    var id = full.EndorsementCredential[i].id;
+                                for(let i = 0; i < size; i++) {
+                                    let id = full.EndorsementCredential[i].id;
                                     html += certificateDetailsLink('endorsement', id, false) +'&nbsp;';
                                 }
 
diff --git a/HIRS_AttestationCAPortal/src/main/webapp/WEB-INF/jsp/endorsement-key-credentials.jsp b/HIRS_AttestationCAPortal/src/main/webapp/WEB-INF/jsp/endorsement-key-credentials.jsp
index 0d0e89c9..427aab41 100644
--- a/HIRS_AttestationCAPortal/src/main/webapp/WEB-INF/jsp/endorsement-key-credentials.jsp
+++ b/HIRS_AttestationCAPortal/src/main/webapp/WEB-INF/jsp/endorsement-key-credentials.jsp
@@ -46,8 +46,8 @@
         </div>
         <script>
             $(document).ready(function() {
-                var url = pagePath +'/list';
-                var columns = [
+                let url = pagePath +'/list';
+                let columns = [
                         {
                             data: 'deviceName',
                             render: function (data, type, full, meta) {
@@ -82,7 +82,7 @@
                                 // Set up a delete icon with link to handleDeleteRequest().
                                 // sets up a hidden input field containing the ID which is
                                 // used as a parameter to the REST POST call to delete
-                                var html = '';
+                                let html = '';
                                 html += certificateDetailsLink('endorsement', full.id, true);
                                 html += certificateDownloadLink(full.id, pagePath);
                                 html += certificateDeleteLink(full.id, pagePath);
diff --git a/HIRS_AttestationCAPortal/src/main/webapp/WEB-INF/jsp/idevid-certificates.jsp b/HIRS_AttestationCAPortal/src/main/webapp/WEB-INF/jsp/idevid-certificates.jsp
index 143830a6..e33c06a3 100644
--- a/HIRS_AttestationCAPortal/src/main/webapp/WEB-INF/jsp/idevid-certificates.jsp
+++ b/HIRS_AttestationCAPortal/src/main/webapp/WEB-INF/jsp/idevid-certificates.jsp
@@ -42,8 +42,8 @@
         </div>
         <script>
             $(document).ready(function() {
-                var url = pagePath +'/list';
-                var columns = [
+                let url = pagePath +'/list';
+                let columns = [
                         {data: 'issuer'},
                         {data: 'subject'},
                         {
@@ -68,7 +68,7 @@
                                 // Set up a delete icon with link to handleDeleteRequest().
                                 // sets up a hidden input field containing the ID which is
                                 // used as a parameter to the REST POST call to delete
-                                var html = '';
+                                let html = '';
                                 html += certificateDetailsLink('idevid', full.id, true);
                                 html += certificateDownloadLink(full.id, pagePath);
                                 html += certificateDeleteLink(full.id, pagePath);
diff --git a/HIRS_AttestationCAPortal/src/main/webapp/WEB-INF/jsp/issued-certificates.jsp b/HIRS_AttestationCAPortal/src/main/webapp/WEB-INF/jsp/issued-certificates.jsp
index 32890436..f0c8642b 100644
--- a/HIRS_AttestationCAPortal/src/main/webapp/WEB-INF/jsp/issued-certificates.jsp
+++ b/HIRS_AttestationCAPortal/src/main/webapp/WEB-INF/jsp/issued-certificates.jsp
@@ -42,8 +42,8 @@
         </div>
         <script>
             $(document).ready(function() {
-                var url = pagePath + '/list';
-                var columns = [
+                let url = pagePath + '/list';
+                let columns = [
                         {
                             data: 'deviceName',
                             render: function (data, type, full, meta) {
@@ -83,10 +83,10 @@
                             searchable:false,
                             render: function (data, type, full, meta) {
                                 //Display endorsement credential
-                                var html = '';
+                                let html = '';
                                 if (full.endorsementCredential !== undefined
                                         && full.endorsementCredential !== null){
-                                    var id = full.endorsementCredential.id;
+                                    let id = full.endorsementCredential.id;
                                     html += certificateDetailsLink('endorsement', id, false) +'&nbsp;';
                                 }
                                 return html;
@@ -98,13 +98,13 @@
                             searchable:false,
                             render: function (data, type, full, meta) {
                                 //Display platform credential
-                                var html = '';
+                                let html = '';
                                 if (full.platformCredentials !== undefined
                                         && full.platformCredentials !== null) {
-                                    var size = full.platformCredentials.length;
+                                    let size = full.platformCredentials.length;
 
-                                    for(var i = 0; i < size; i++) {
-                                        var id = full.platformCredentials[i].id;
+                                    for(let i = 0; i < size; i++) {
+                                        let id = full.platformCredentials[i].id;
                                         html += certificateDetailsLink('platform', id, false) +'&nbsp;';
                                     }
                                 }
@@ -118,7 +118,7 @@
                             searchable:false,
                             render: function(data, type, full, meta) {
                                 // set up link to details page
-                                var html = '';
+                                let html = '';
                                 html += certificateDetailsLink('issued', full.id, true);
                                 html += certificateDownloadLink(full.id, pagePath);
                                 html += certificateDeleteLink(full.id, pagePath);
diff --git a/HIRS_AttestationCAPortal/src/main/webapp/WEB-INF/jsp/platform-credentials.jsp b/HIRS_AttestationCAPortal/src/main/webapp/WEB-INF/jsp/platform-credentials.jsp
index 16d93e31..b8846c6b 100644
--- a/HIRS_AttestationCAPortal/src/main/webapp/WEB-INF/jsp/platform-credentials.jsp
+++ b/HIRS_AttestationCAPortal/src/main/webapp/WEB-INF/jsp/platform-credentials.jsp
@@ -51,8 +51,8 @@
 
         <script>
             $(document).ready(function() {
-                var url = pagePath +'/list';
-                var columns = [
+                let url = pagePath +'/list';
+                let columns = [
                         {
                             data: 'deviceName',
                             render: function (data, type, full, meta) {
@@ -96,9 +96,9 @@
                             render: function (data, type, full, meta) {
                                 //Display endorsement credential
                                 if(full.endorsementCredential === null) return '';
-                                var html = '';
+                                let html = '';
 
-                                var id = full.endorsementCredential.id;
+                                let id = full.endorsementCredential.id;
                                 html = certificateDetailsLink('endorsement', id, false) +'&nbsp;';
 
                                 return html;
@@ -112,7 +112,7 @@
                                 // Set up a delete icon with link to handleDeleteRequest().
                                 // sets up a hidden input field containing the ID which is
                                 // used as a parameter to the REST POST call to delete
-                                var html = '';
+                                let html = '';
                                 html += certificateDetailsLink('platform', full.id, true);
                                 html += certificateDownloadLink(full.id, pagePath);
                                 html += certificateDeleteLink(full.id, pagePath);
diff --git a/HIRS_AttestationCAPortal/src/main/webapp/WEB-INF/jsp/reference-manifests.jsp b/HIRS_AttestationCAPortal/src/main/webapp/WEB-INF/jsp/reference-manifests.jsp
index 0bc1d0fb..a2417aaa 100644
--- a/HIRS_AttestationCAPortal/src/main/webapp/WEB-INF/jsp/reference-manifests.jsp
+++ b/HIRS_AttestationCAPortal/src/main/webapp/WEB-INF/jsp/reference-manifests.jsp
@@ -45,8 +45,8 @@
 
         <script>
             $(document).ready(function() {
-                var url = pagePath +'/list';
-                var columns = [
+                let url = pagePath +'/list';
+                let columns = [
                         {data: 'tagId'},
                         {data: 'rimType'},
                         {data: 'platformManufacturer'},
@@ -60,7 +60,7 @@
                                 // Set up a delete icon with link to handleDeleteRequest().
                                 // sets up a hidden input field containing the ID which is
                                 // used as a parameter to the REST POST call to delete
-                                var html = '';
+                                let html = '';
                                 html += rimDetailsLink(full.id);
                                 html += rimDownloadLink(full.id, pagePath);
                                 html += rimDeleteLink(full.id, pagePath);
diff --git a/HIRS_AttestationCAPortal/src/main/webapp/WEB-INF/jsp/rim-database.jsp b/HIRS_AttestationCAPortal/src/main/webapp/WEB-INF/jsp/rim-database.jsp
index 36e3a10f..df719e15 100644
--- a/HIRS_AttestationCAPortal/src/main/webapp/WEB-INF/jsp/rim-database.jsp
+++ b/HIRS_AttestationCAPortal/src/main/webapp/WEB-INF/jsp/rim-database.jsp
@@ -34,8 +34,8 @@
 
         <script>
             $(document).ready(function() {
-                var url = pagePath +'/list';
-                var columns = [
+                let url = pagePath +'/list';
+                let columns = [
                         {data: 'manufacturer',
                             orderable: true,
                             searchable:false},
diff --git a/HIRS_AttestationCAPortal/src/main/webapp/WEB-INF/jsp/rim-details.jsp b/HIRS_AttestationCAPortal/src/main/webapp/WEB-INF/jsp/rim-details.jsp
index cb4e09bd..0e53c1a9 100644
--- a/HIRS_AttestationCAPortal/src/main/webapp/WEB-INF/jsp/rim-details.jsp
+++ b/HIRS_AttestationCAPortal/src/main/webapp/WEB-INF/jsp/rim-details.jsp
@@ -597,7 +597,7 @@
 <script>
     function eventSearch(txtInput) {
         // Declare variables
-        var input, filter, table, tr, td, i, txtValue, txtFound;
+        let input, filter, table, tr, td, i, txtValue, txtFound;
 
         if (txtInput === null) {
             input = document.getElementById("eventInput");
@@ -635,14 +635,14 @@
     }
     window.onload = function () {
         // Constant retrieved from server-side via JSP
-        var maxRows = 11;
+        let maxRows = 11;
 
-        var table = document.getElementById('eventLog');
-        var wrapper = table.parentNode;
-        var rowsInTable = table.rows.length;
-        var height = 0;
+        let table = document.getElementById('eventLog');
+        let wrapper = table.parentNode;
+        let rowsInTable = table.rows.length;
+        let height = 0;
         if (rowsInTable > maxRows) {
-            for (var i = 0; i < maxRows; i++) {
+            for (let i = 0; i < maxRows; i++) {
                 height += table.rows[i].clientHeight;
             }
             wrapper.style.height = height + "px";
diff --git a/HIRS_AttestationCAPortal/src/main/webapp/WEB-INF/jsp/trust-chain.jsp b/HIRS_AttestationCAPortal/src/main/webapp/WEB-INF/jsp/trust-chain.jsp
index 06a202e8..4ee0c348 100644
--- a/HIRS_AttestationCAPortal/src/main/webapp/WEB-INF/jsp/trust-chain.jsp
+++ b/HIRS_AttestationCAPortal/src/main/webapp/WEB-INF/jsp/trust-chain.jsp
@@ -96,8 +96,8 @@
         </div>
         <script>
             $(document).ready(function() {
-                var url = pagePath +'/list';
-                var signature = ${acaCertData.signature};
+                let url = pagePath +'/list';
+                let signature = ${acaCertData.signature};
 
                 //Format validity time
                 $("#validity span").each(function(){
@@ -109,11 +109,11 @@
 
                 <c:if test="${not empty acaCertData.encodedPublicKey}">
                     //Change publick key byte to hex
-                    var publicKey = ${acaCertData.encodedPublicKey};
+                    let publicKey = ${acaCertData.encodedPublicKey};
                     $("#encodedPublicKey").html(byteToHexString(publicKey));
                 </c:if>
 
-                var columns = [
+                let columns = [
                         {data: 'issuer'},
                         {data: 'subject'},
                         {
@@ -138,7 +138,7 @@
                                 // Set up a delete icon with link to handleDeleteRequest().
                                 // sets up a hidden input field containing the ID which is
                                 // used as a parameter to the REST POST call to delete
-                                var html = '';
+                                let html = '';
                                 html += certificateDetailsLink('certificateauthority', full.id, true);
                                 html += certificateDownloadLink(full.id, pagePath);
                                 html += certificateDeleteLink(full.id, pagePath);
diff --git a/HIRS_AttestationCAPortal/src/main/webapp/WEB-INF/jsp/validation-reports.jsp b/HIRS_AttestationCAPortal/src/main/webapp/WEB-INF/jsp/validation-reports.jsp
index c3c82b68..42830f28 100644
--- a/HIRS_AttestationCAPortal/src/main/webapp/WEB-INF/jsp/validation-reports.jsp
+++ b/HIRS_AttestationCAPortal/src/main/webapp/WEB-INF/jsp/validation-reports.jsp
@@ -57,18 +57,18 @@
         </div>
         <script>
             $(document).ready(function () {
-                var url = portal + '/validation-reports/list';
-                var columns = [
+                let url = portal + '/validation-reports/list';
+                let columns = [
                     {
                         data: 'overallValidationResult',
                         searchable: false,
                         render: function (data, type, full, meta) {
-                            var html = '';
-                            var unknownStatus = '<img class="icon" src="${unknownIcon}" title="${unknownText}"/>';
+                            let html = '';
+                            let unknownStatus = '<img class="icon" src="${unknownIcon}" title="${unknownText}"/>';
 
                             // create status icon
-                            var result = full.overallValidationResult;
-                            var overallMessage = full.message;
+                            let result = full.overallValidationResult;
+                            let overallMessage = full.message;
                             if (result) {
                                 switch (result) {
                                     case "PASS":
@@ -135,21 +135,21 @@
                 ];
 
                 //Set data tables
-                var dataTable = setDataTables("#reportTable", url, columns);
+                let dataTable = setDataTables("#reportTable", url, columns);
                 dataTable.order([1, 'desc']).draw();    //order by createTime
             });
 
             $("#download").submit(function(e) {
-                var tableLength = $("#reportTable").rows;
-                var createTimes = "";
-                var deviceNames = "";
+                let tableLength = $("#reportTable").rows;
+                let createTimes = "";
+                let deviceNames = "";
                 $('#reportTable tr').not('thead tr').each(function() {
                     createTimes += $(this).find("td").eq(1).html() + ",";
                     deviceNames += $(this).find("td").eq(2).html() + ",";
                 });
                 createTimes = createTimes.substring(0, createTimes.length - 1);
                 deviceNames = deviceNames.substring(0, deviceNames.length - 1);
-                var params = [
+                let params = [
                                 {
                                     name: 'createTimes',
                                     value: createTimes
@@ -178,16 +178,16 @@
              * string is returned (and no icon will be displayed).
              */
             function getValidationDisplayHtml(full, validation_type) {
-                var html = '';
+                let html = '';
                 // loop through all the validations, looking for the one matching
                 // the validation_type.
-                for (var i = 0; i < full.validations.length; i++) {
-                    var curValidation = full.validations[i];
-                    var curResult = curValidation.validationResult;
-                    var curMessage = curValidation.message;
+                for (let i = 0; i < full.validations.length; i++) {
+                    let curValidation = full.validations[i];
+                    let curResult = curValidation.validationResult;
+                    let curMessage = curValidation.message;
 
                     if (curValidation.validationType === validation_type) {
-                        var unknownStatus = '<img class="icon" src="${unknownIcon}" title="${unknownText}"/>';
+                        let unknownStatus = '<img class="icon" src="${unknownIcon}" title="${unknownText}"/>';
 
                         // display appropriate icon based on result
                         if (curResult) {
@@ -195,7 +195,7 @@
                             // if this validation is associated with a certificate,
                             // link to the details page
                             if (curValidation.certificatesUsed.length > 0) {
-                                var certType = '';
+                                let certType = '';
                                 switch (validation_type) {
                                     case "PLATFORM_CREDENTIAL":
                                     case "PLATFORM_CREDENTIAL_ATTRIBUTES":
diff --git a/package/linux/systemd/hirs-aca.service b/package/linux/systemd/hirs-aca.service
index 023e89f8..111fed3d 100644
--- a/package/linux/systemd/hirs-aca.service
+++ b/package/linux/systemd/hirs-aca.service
@@ -5,7 +5,7 @@ After=network.target
 [Service]
 User=root
 Group=root
-ExecStart=/usr/bin/bash /opt/hirs/aca/scripts/aca/aca_bootRun.sh -w
+ExecStart=/usr/bin/bash /opt/hirs/aca/scripts/aca/aca_bootRun.sh -d -w
 SuccessExitStatus=0
 Restart=always
 RestartSec=60