Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/api-dog-e2e-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,10 @@ jobs:
runs-on: ${{ inputs.runner_type }}
steps:
- name: Checkout Repository
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v6

- name: Setup Node.js
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v6
with:
node-version: ${{ inputs.node_version }}

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/backmerge.yml
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ jobs:
private-key: ${{ secrets.LERIAN_STUDIO_MIDAZ_PUSH_BOT_PRIVATE_KEY }}

- name: Checkout
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v6
with:
fetch-depth: 0
token: ${{ steps.app-token.outputs.token }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -298,7 +298,7 @@ jobs:
# from pull_request/fork-controlled data (CodeQL: actions/untrusted-checkout).
# codeql[actions/untrusted-checkout] -- see trust-model comment above.
- name: Checkout repository
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v6
with:
ref: ${{ inputs.checkout_ref }} # empty string = default run ref
persist-credentials: false
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/dispatch-helm.yml
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ jobs:
runs-on: ${{ vars.GENERAL_RUNNERS || inputs.runner_type }}
steps:
- name: Checkout
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v6
with:
fetch-depth: 0

Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/end-to-end-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -94,19 +94,19 @@ jobs:
# actions/untrusted-checkout). Non-executed strings (domain, bucket) stay
# configurable via inputs.
- name: Checkout end-to-end suite
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v6
with:
repository: LerianStudio/end-to-end
token: ${{ secrets.e2e_repo_token }}
persist-credentials: false

- name: Setup Go
uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6
uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0
with:
go-version: ${{ inputs.go_version }}

- name: Setup Node.js
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v6
with:
node-version: ${{ inputs.node_version }}

Expand Down
50 changes: 25 additions & 25 deletions .github/workflows/frontend-pr-analysis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -227,7 +227,7 @@ jobs:
app: ${{ fromJson(needs.detect-changes.outputs.matrix) }}
steps:
- name: Checkout code
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v6
with:
persist-credentials: false

Expand All @@ -238,7 +238,7 @@ jobs:
package_json_file: ${{ matrix.app.working_dir }}/package.json

- name: Setup Node.js
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v6
with:
node-version: ${{ inputs.node_version }}
cache: ${{ inputs.package_manager }}
Expand Down Expand Up @@ -280,7 +280,7 @@ jobs:
app: ${{ fromJson(needs.detect-changes.outputs.matrix) }}
steps:
- name: Checkout code
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v6
with:
persist-credentials: false

Expand All @@ -291,7 +291,7 @@ jobs:
package_json_file: ${{ matrix.app.working_dir }}/package.json

- name: Setup Node.js
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v6
with:
node-version: ${{ inputs.node_version }}
cache: ${{ inputs.package_manager }}
Expand Down Expand Up @@ -326,7 +326,7 @@ jobs:
app: ${{ fromJson(needs.detect-changes.outputs.matrix) }}
steps:
- name: Checkout code
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v6
with:
persist-credentials: false

Expand All @@ -337,7 +337,7 @@ jobs:
package_json_file: ${{ matrix.app.working_dir }}/package.json

- name: Setup Node.js
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v6
with:
node-version: ${{ inputs.node_version }}
cache: ${{ inputs.package_manager }}
Expand Down Expand Up @@ -380,7 +380,7 @@ jobs:
app: ${{ fromJson(needs.detect-changes.outputs.matrix) }}
steps:
- name: Checkout code
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v6
with:
persist-credentials: false

Expand All @@ -391,7 +391,7 @@ jobs:
package_json_file: ${{ matrix.app.working_dir }}/package.json

- name: Setup Node.js
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v6
with:
node-version: ${{ inputs.node_version }}
cache: ${{ inputs.package_manager }}
Expand Down Expand Up @@ -456,7 +456,7 @@ jobs:
app: ${{ fromJson(needs.detect-changes.outputs.matrix) }}
steps:
- name: Checkout code
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v6
with:
persist-credentials: false

Expand Down Expand Up @@ -592,7 +592,7 @@ jobs:
app: ${{ fromJson(needs.detect-changes.outputs.matrix) }}
steps:
- name: Checkout code
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v6
with:
persist-credentials: false

Expand All @@ -603,7 +603,7 @@ jobs:
package_json_file: ${{ matrix.app.working_dir }}/package.json

- name: Setup Node.js
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v6
with:
node-version: ${{ inputs.node_version }}
cache: ${{ inputs.package_manager }}
Expand Down Expand Up @@ -645,7 +645,7 @@ jobs:
app: ${{ fromJson(needs.detect-changes.outputs.matrix) }}
steps:
- name: Checkout code
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v6
with:
persist-credentials: false

Expand All @@ -656,7 +656,7 @@ jobs:
package_json_file: ${{ matrix.app.working_dir }}/package.json

- name: Setup Node.js
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v6
with:
node-version: ${{ inputs.node_version }}
cache: ${{ inputs.package_manager }}
Expand Down Expand Up @@ -727,7 +727,7 @@ jobs:
app: ${{ fromJson(needs.detect-changes.outputs.matrix) }}
steps:
- name: Checkout code
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v6
with:
persist-credentials: false

Expand All @@ -738,7 +738,7 @@ jobs:
package_json_file: ${{ matrix.app.working_dir }}/package.json

- name: Setup Node.js
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v6
with:
node-version: ${{ inputs.node_version }}
cache: ${{ inputs.package_manager }}
Expand Down Expand Up @@ -781,7 +781,7 @@ jobs:
app: ${{ fromJson(needs.detect-changes.outputs.matrix) }}
steps:
- name: Checkout code
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v6
with:
persist-credentials: false

Expand All @@ -792,7 +792,7 @@ jobs:
package_json_file: ${{ matrix.app.working_dir }}/package.json

- name: Setup Node.js
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v6
with:
node-version: ${{ inputs.node_version }}
cache: ${{ inputs.package_manager }}
Expand Down Expand Up @@ -860,7 +860,7 @@ jobs:
app: ${{ fromJson(needs.detect-changes.outputs.matrix) }}
steps:
- name: Checkout code
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v6
with:
persist-credentials: false

Expand All @@ -871,7 +871,7 @@ jobs:
package_json_file: ${{ matrix.app.working_dir }}/package.json

- name: Setup Node.js
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v6
with:
node-version: ${{ inputs.node_version }}
cache: ${{ inputs.package_manager }}
Expand Down Expand Up @@ -914,7 +914,7 @@ jobs:
app: ${{ fromJson(needs.detect-changes.outputs.matrix) }}
steps:
- name: Checkout code
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v6
with:
persist-credentials: false

Expand All @@ -925,7 +925,7 @@ jobs:
package_json_file: ${{ matrix.app.working_dir }}/package.json

- name: Setup Node.js
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v6
with:
node-version: ${{ inputs.node_version }}
cache: ${{ inputs.package_manager }}
Expand Down Expand Up @@ -979,7 +979,7 @@ jobs:
app: ${{ fromJson(needs.detect-changes.outputs.matrix) }}
steps:
- name: Checkout code
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v6
with:
persist-credentials: false

Expand All @@ -990,7 +990,7 @@ jobs:
package_json_file: ${{ matrix.app.working_dir }}/package.json

- name: Setup Node.js
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v6
with:
node-version: ${{ inputs.node_version }}
cache: ${{ inputs.package_manager }}
Expand Down Expand Up @@ -1055,7 +1055,7 @@ jobs:
app: ${{ fromJson(needs.detect-changes.outputs.matrix) }}
steps:
- name: Checkout code
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v6
with:
persist-credentials: false

Expand Down Expand Up @@ -1127,7 +1127,7 @@ jobs:

- name: Setup Node.js
if: inputs.docker_smoke_test_script != ''
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v6
with:
node-version: ${{ inputs.node_version }}
cache: ${{ inputs.package_manager }}
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/gitops-update.yml
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ jobs:
# codeql[actions/untrusted-checkout] -- env.GITOPS_REPO resolves to a fixed,
# config-driven LerianStudio GitOps repo (never PR/fork-controlled); this
# workflow is workflow_call-only, not triggered by pull_request_target.
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v6
with:
repository: ${{ env.GITOPS_REPO }}
token: ${{ secrets.MANAGE_TOKEN }}
Expand All @@ -180,7 +180,7 @@ jobs:
# same LerianStudio repo; ref is a maintainer-controlled input, not
# PR/fork-controlled (workflow_call-only, no pull_request_target trigger).
- name: Checkout deployment matrix manifest
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v6
with:
repository: LerianStudio/github-actions-shared-workflows
ref: ${{ inputs.deployment_matrix_ref }}
Expand Down
24 changes: 12 additions & 12 deletions .github/workflows/go-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -79,10 +79,10 @@

steps:
- name: Checkout code
uses: actions/checkout@v6.0.3
uses: actions/checkout@v7.0.1

Check failure on line 82 in .github/workflows/go-ci.yml

View workflow job for this annotation

GitHub Actions / Pinned Actions Check

External action not pinned by SHA: uses: actions/checkout@v7.0.1 (use full commit SHA with a # vX.Y.Z comment)

- name: Set up Go
uses: actions/setup-go@v6
uses: actions/setup-go@v7

Check failure on line 85 in .github/workflows/go-ci.yml

View workflow job for this annotation

GitHub Actions / Pinned Actions Check

External action not pinned by SHA: uses: actions/setup-go@v7 (use full commit SHA with a # vX.Y.Z comment)
Comment on lines +82 to +85

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

for f in .github/workflows/go-ci.yml .github/workflows/go-fuzz.yml; do
  echo "===== $f ====="
  nl -ba "$f" | sed -n '1,320p' | sed -n '/uses:/p'
  echo
done

Repository: LerianStudio/github-actions-shared-workflows

Length of output: 262


🏁 Script executed:

python3 - <<'PY'
from pathlib import Path

for path in [Path('.github/workflows/go-ci.yml'), Path('.github/workflows/go-fuzz.yml')]:
    print(f'===== {path} =====')
    for i, line in enumerate(path.read_text().splitlines(), 1):
        if 'uses:' in line:
            print(f'{i:4}: {line}')
    print()
PY

Repository: LerianStudio/github-actions-shared-workflows

Length of output: 1218


Pin all third-party actions to commit SHAs in both workflows.

actions/checkout, actions/setup-go, actions/upload-artifact, actions/download-artifact, fgrosse/go-coverage-report, golangci/golangci-lint-action, and tcort/github-action-markdown-link-check are still referenced by mutable tags here. Replace each with a full SHA and keep the release tag in a comment.

  • .github/workflows/go-ci.yml
  • .github/workflows/go-fuzz.yml
🧰 Tools
🪛 zizmor (1.26.1)

[error] 82-82: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy)

(unpinned-uses)


[error] 85-85: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy)

(unpinned-uses)

📍 Affects 2 files
  • .github/workflows/go-ci.yml#L82-L85 (this comment)
  • .github/workflows/go-fuzz.yml#L80-L83
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/go-ci.yml around lines 82 - 85, Pin every listed
third-party action to its full commit SHA in both .github/workflows/go-ci.yml
(lines 82-85 and all other listed action usages) and
.github/workflows/go-fuzz.yml (lines 80-83 and all other listed action usages),
replacing mutable tags while retaining each release tag in an inline comment.

Sources: Coding guidelines, Linters/SAST tools

with:
go-version: ${{ matrix.go }}
cache: true
Expand All @@ -101,7 +101,7 @@

- name: Upload coverage artifact
if: inputs.enable_coverage_comment && matrix.os == 'ubuntu-latest' && matrix.go == inputs.go_version_lint
uses: actions/upload-artifact@v7

Check failure on line 104 in .github/workflows/go-ci.yml

View workflow job for this annotation

GitHub Actions / Pinned Actions Check

External action not pinned by SHA: uses: actions/upload-artifact@v7 (use full commit SHA with a # vX.Y.Z comment)
with:
name: coverage-report
path: coverage.txt
Expand All @@ -118,15 +118,15 @@

steps:
- name: Checkout code
uses: actions/checkout@v6.0.3
uses: actions/checkout@v7.0.1

Check failure on line 121 in .github/workflows/go-ci.yml

View workflow job for this annotation

GitHub Actions / Pinned Actions Check

External action not pinned by SHA: uses: actions/checkout@v7.0.1 (use full commit SHA with a # vX.Y.Z comment)

- name: Download coverage artifact
uses: actions/download-artifact@v8

Check failure on line 124 in .github/workflows/go-ci.yml

View workflow job for this annotation

GitHub Actions / Pinned Actions Check

External action not pinned by SHA: uses: actions/download-artifact@v8 (use full commit SHA with a # vX.Y.Z comment)
with:
name: coverage-report

- name: Go Coverage Comment
uses: fgrosse/go-coverage-report@v1.3.0

Check failure on line 129 in .github/workflows/go-ci.yml

View workflow job for this annotation

GitHub Actions / Pinned Actions Check

External action not pinned by SHA: uses: fgrosse/go-coverage-report@v1.3.0 (use full commit SHA with a # vX.Y.Z comment)
with:
coverage-artifact-name: coverage-report
coverage-file-name: coverage.txt
Expand All @@ -137,16 +137,16 @@

steps:
- name: Checkout code
uses: actions/checkout@v6.0.3
uses: actions/checkout@v7.0.1

Check failure on line 140 in .github/workflows/go-ci.yml

View workflow job for this annotation

GitHub Actions / Pinned Actions Check

External action not pinned by SHA: uses: actions/checkout@v7.0.1 (use full commit SHA with a # vX.Y.Z comment)

- name: Set up Go
uses: actions/setup-go@v6
uses: actions/setup-go@v7

Check failure on line 143 in .github/workflows/go-ci.yml

View workflow job for this annotation

GitHub Actions / Pinned Actions Check

External action not pinned by SHA: uses: actions/setup-go@v7 (use full commit SHA with a # vX.Y.Z comment)
with:
go-version: ${{ inputs.go_version_lint }}
cache: true

- name: golangci-lint
uses: golangci/golangci-lint-action@v9

Check failure on line 149 in .github/workflows/go-ci.yml

View workflow job for this annotation

GitHub Actions / Pinned Actions Check

External action not pinned by SHA: uses: golangci/golangci-lint-action@v9 (use full commit SHA with a # vX.Y.Z comment)
with:
version: ${{ inputs.golangci_lint_version }}
args: ${{ inputs.golangci_lint_args }}
Expand All @@ -159,16 +159,16 @@

steps:
- name: Checkout code
uses: actions/checkout@v6.0.3
uses: actions/checkout@v7.0.1

Check failure on line 162 in .github/workflows/go-ci.yml

View workflow job for this annotation

GitHub Actions / Pinned Actions Check

External action not pinned by SHA: uses: actions/checkout@v7.0.1 (use full commit SHA with a # vX.Y.Z comment)

- name: Set up Go
uses: actions/setup-go@v6
uses: actions/setup-go@v7
with:
go-version: ${{ inputs.go_version_lint }}
cache: true

- name: Build cross-platform binaries
run: |

Check failure on line 171 in .github/workflows/go-ci.yml

View workflow job for this annotation

GitHub Actions / Action Lint

shellcheck reported issue in this script: SC2162:info:13:39: read without -r will mangle backslashes

Check failure on line 171 in .github/workflows/go-ci.yml

View workflow job for this annotation

GitHub Actions / Action Lint

shellcheck reported issue in this script: SC2086:info:23:43: Double quote to prevent globbing and word splitting

Check failure on line 171 in .github/workflows/go-ci.yml

View workflow job for this annotation

GitHub Actions / Action Lint

shellcheck reported issue in this script: SC2086:info:15:15: Double quote to prevent globbing and word splitting

Check failure on line 171 in .github/workflows/go-ci.yml

View workflow job for this annotation

GitHub Actions / Action Lint

shellcheck reported issue in this script: SC2086:info:14:13: Double quote to prevent globbing and word splitting
targets='${{ inputs.build_targets }}'
if [ "$targets" = "[]" ] || [ -z "$targets" ]; then
echo "No build targets specified, using defaults"
Expand Down Expand Up @@ -208,10 +208,10 @@

steps:
- name: Checkout code
uses: actions/checkout@v6.0.3
uses: actions/checkout@v7.0.1

- name: Set up Go
uses: actions/setup-go@v6
uses: actions/setup-go@v7
with:
go-version: ${{ inputs.go_version_lint }}
cache: true
Expand All @@ -227,10 +227,10 @@

steps:
- name: Checkout code
uses: actions/checkout@v6.0.3
uses: actions/checkout@v7.0.1

- name: Set up Go
uses: actions/setup-go@v6
uses: actions/setup-go@v7
with:
go-version: ${{ inputs.go_version_lint }}
cache: true
Expand All @@ -253,7 +253,7 @@

steps:
- name: Checkout code
uses: actions/checkout@v6.0.3
uses: actions/checkout@v7.0.1

- name: Check required files
run: |
Expand Down
Loading
Loading