From 1edd16b82fe4c2b0fd2fb7f7dfabd94afd60121c Mon Sep 17 00:00:00 2001 From: Rafael Sene Date: Mon, 11 Sep 2023 09:19:43 -0300 Subject: [PATCH] Update the build process to build using the base container image and remove the necessity to handle the dependencies during the build time Signed-off-by: Rafael Sene --- .github/workflows/build-connectors.yaml | 69 ++++-------- .github/workflows/build-control.yaml | 69 ++++-------- .github/workflows/build-n-trace.yaml | 71 ++++-------- .github/workflows/build-pdf.yml | 104 ++++++++++-------- dependencies/Gemfile | 14 --- dependencies/README.md | 3 - dependencies/apt_packages.txt | 21 ---- dependencies/package.json | 8 -- ...0f883ec0b2579ebde75f5441ddf28404.png.cache | 1 + ...586b9e188c58d9a9b40cb57134ec5d4f.png.cache | 1 + ...96c6a3b2f6c6e1138b505a9b74cf48f2.png.cache | 1 + ...c7341e167bfd32f1ed3ea9a95f310b40.png.cache | 1 + ...ccdaa90e7df2c75d48f8cd0420e52f4a.png.cache | 1 + docs/Makefile | 64 ++++++++--- docs/RISC-V-N-Trace.adoc | 5 +- docs/RISC-V-Trace-Connectors.adoc | 3 + docs/RISC-V-Trace-Control-Interface.adoc | 5 +- docs/example.bib | 36 ++++++ ...a-md5-0f883ec0b2579ebde75f5441ddf28404.png | Bin 0 -> 33927 bytes ...a-md5-586b9e188c58d9a9b40cb57134ec5d4f.png | Bin 0 -> 11595 bytes ...a-md5-96c6a3b2f6c6e1138b505a9b74cf48f2.png | Bin 0 -> 12852 bytes ...a-md5-c7341e167bfd32f1ed3ea9a95f310b40.png | Bin 0 -> 6133 bytes ...a-md5-ccdaa90e7df2c75d48f8cd0420e52f4a.png | Bin 0 -> 13137 bytes 23 files changed, 233 insertions(+), 244 deletions(-) delete mode 100644 dependencies/Gemfile delete mode 100644 dependencies/README.md delete mode 100644 dependencies/apt_packages.txt delete mode 100644 dependencies/package.json create mode 100644 docs/.asciidoctor/diagram/diag-ditaa-md5-0f883ec0b2579ebde75f5441ddf28404.png.cache create mode 100644 docs/.asciidoctor/diagram/diag-ditaa-md5-586b9e188c58d9a9b40cb57134ec5d4f.png.cache create mode 100644 docs/.asciidoctor/diagram/diag-ditaa-md5-96c6a3b2f6c6e1138b505a9b74cf48f2.png.cache create mode 100644 docs/.asciidoctor/diagram/diag-ditaa-md5-c7341e167bfd32f1ed3ea9a95f310b40.png.cache create mode 100644 docs/.asciidoctor/diagram/diag-ditaa-md5-ccdaa90e7df2c75d48f8cd0420e52f4a.png.cache create mode 100644 docs/example.bib create mode 100644 docs/images/diag-ditaa-md5-0f883ec0b2579ebde75f5441ddf28404.png create mode 100644 docs/images/diag-ditaa-md5-586b9e188c58d9a9b40cb57134ec5d4f.png create mode 100644 docs/images/diag-ditaa-md5-96c6a3b2f6c6e1138b505a9b74cf48f2.png create mode 100644 docs/images/diag-ditaa-md5-c7341e167bfd32f1ed3ea9a95f310b40.png create mode 100644 docs/images/diag-ditaa-md5-ccdaa90e7df2c75d48f8cd0420e52f4a.png diff --git a/.github/workflows/build-connectors.yaml b/.github/workflows/build-connectors.yaml index d1e2f6d..38a38fe 100644 --- a/.github/workflows/build-connectors.yaml +++ b/.github/workflows/build-connectors.yaml @@ -1,61 +1,38 @@ -# This workflow installs dependencies for PDF generation, generates the PDF, -# and uploads the PDF as an artifact. - name: Build RISC-V-Trace-Connectors.pdf on: push: branches: + - master - main pull_request: branches: + - master - main workflow_dispatch: jobs: build: runs-on: ubuntu-latest - - env: - APT_PACKAGES_FILE: ${{ github.workspace }}/dependencies/apt_packages.txt - BUNDLE_GEMFILE: ${{ github.workspace }}/dependencies/Gemfile - BUNDLE_BIN: ${{ github.workspace }}/bin - NPM_PACKAGE_FOLDER: ${{ github.workspace }}/dependencies steps: - - name: Checkout repository - uses: actions/checkout@v3 - with: - submodules: 'true' - - name: Install Ubuntu packages - run: | - sudo apt-get update - grep -vE '^#' ${APT_PACKAGES_FILE} | xargs sudo apt-get install --yes --no-install-recommends - # Ruby for asciidoctor - - name: Setup Ruby and Gemfile content - uses: ruby/setup-ruby@v1 - with: - ruby-version: "3.2.0" - bundler-cache: true - # Node.js for wavedrom - - uses: actions/cache@v3 - with: - path: ~/.npm - key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} - restore-keys: | - ${{ runner.os }}-node- - - name: Setup Node.js - uses: actions/setup-node@v3 - with: - node-version: '16' - - name: Install Node.js dependencies - run: npm install ${NPM_PACKAGE_FOLDER} - - name: Generate PDF - run: | - PATH=${PATH}:${BUNDLE_BIN}:$(npm bin):$(pwd) \ - make -C docs/ RISC-V-Trace-Connectors.pdf - - name: Archive PDF result - uses: actions/upload-artifact@v3 - with: - name: RISC-V-Trace-Connectors - path: docs/RISC-V-Trace-Connectors.pdf - retention-days: 7 + # Step 1: Checkout the repository + - name: Checkout repository + uses: actions/checkout@v3 + with: + submodules: 'recursive' + + # Step 2: Pull the latest RISC-V Docs container image + - name: Pull Container + run: docker pull riscvintl/riscv-docs-base-container-image:latest + + # Step 3: Build Files + - name: Build Files + run: cd ./docs && make RISC-V-Trace-Connectors.pdf + + # Step 4: Upload the built PDF files as independent artifacts + - name: Upload RISC-V-Trace-Control-Interface PDF + uses: actions/upload-artifact@v3 + with: + name: RISC-V-Trace-Control-Interface + path: ${{ github.workspace }}/docs/RISC-V-Trace-Connectors.pdf + retention-days: 7 diff --git a/.github/workflows/build-control.yaml b/.github/workflows/build-control.yaml index 997446d..5a78350 100644 --- a/.github/workflows/build-control.yaml +++ b/.github/workflows/build-control.yaml @@ -1,61 +1,38 @@ -# This workflow installs dependencies for PDF generation, generates the PDF, -# and uploads the PDF as an artifact. - name: Build RISC-V-Trace-Control-Interface.pdf on: push: branches: + - master - main pull_request: branches: + - master - main workflow_dispatch: jobs: build: runs-on: ubuntu-latest - - env: - APT_PACKAGES_FILE: ${{ github.workspace }}/dependencies/apt_packages.txt - BUNDLE_GEMFILE: ${{ github.workspace }}/dependencies/Gemfile - BUNDLE_BIN: ${{ github.workspace }}/bin - NPM_PACKAGE_FOLDER: ${{ github.workspace }}/dependencies steps: - - name: Checkout repository - uses: actions/checkout@v3 - with: - submodules: 'true' - - name: Install Ubuntu packages - run: | - sudo apt-get update - grep -vE '^#' ${APT_PACKAGES_FILE} | xargs sudo apt-get install --yes --no-install-recommends - # Ruby for asciidoctor - - name: Setup Ruby and Gemfile content - uses: ruby/setup-ruby@v1 - with: - ruby-version: "3.2.0" - bundler-cache: true - # Node.js for wavedrom - - uses: actions/cache@v3 - with: - path: ~/.npm - key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} - restore-keys: | - ${{ runner.os }}-node- - - name: Setup Node.js - uses: actions/setup-node@v3 - with: - node-version: '16' - - name: Install Node.js dependencies - run: npm install ${NPM_PACKAGE_FOLDER} - - name: Generate PDF - run: | - PATH=${PATH}:${BUNDLE_BIN}:$(npm bin):$(pwd) \ - make -C docs/ RISC-V-Trace-Control-Interface.pdf - - name: Archive PDF result - uses: actions/upload-artifact@v3 - with: - name: RISC-V-Trace-Control-Interface - path: docs/RISC-V-Trace-Control-Interface.pdf - retention-days: 7 + # Step 1: Checkout the repository + - name: Checkout repository + uses: actions/checkout@v3 + with: + submodules: 'recursive' + + # Step 2: Pull the latest RISC-V Docs container image + - name: Pull Container + run: docker pull riscvintl/riscv-docs-base-container-image:latest + + # Step 3: Build Files + - name: Build Files + run: cd ./docs && make RISC-V-Trace-Control-Interface.pdf + + # Step 4: Upload the built PDF files as independent artifacts + - name: Upload RISC-V-Trace-Control-Interface PDF + uses: actions/upload-artifact@v3 + with: + name: RISC-V-Trace-Control-Interface + path: ${{ github.workspace }}/docs/RISC-V-Trace-Control-Interface.pdf + retention-days: 7 diff --git a/.github/workflows/build-n-trace.yaml b/.github/workflows/build-n-trace.yaml index ca36c1e..96baf1c 100644 --- a/.github/workflows/build-n-trace.yaml +++ b/.github/workflows/build-n-trace.yaml @@ -1,61 +1,38 @@ -# This workflow installs dependencies for PDF generation, generates the PDF, -# and uploads the PDF as an artifact. - -name: Build RISC-V-N-Trace.pdf +name: Build Build RISC-V-N-Trace.pdf on: push: branches: + - master - main pull_request: branches: + - master - main workflow_dispatch: jobs: build: runs-on: ubuntu-latest - - env: - APT_PACKAGES_FILE: ${{ github.workspace }}/dependencies/apt_packages.txt - BUNDLE_GEMFILE: ${{ github.workspace }}/dependencies/Gemfile - BUNDLE_BIN: ${{ github.workspace }}/bin - NPM_PACKAGE_FOLDER: ${{ github.workspace }}/dependencies steps: - - name: Checkout repository - uses: actions/checkout@v3 - with: - submodules: 'true' - - name: Install Ubuntu packages - run: | - sudo apt-get update - grep -vE '^#' ${APT_PACKAGES_FILE} | xargs sudo apt-get install --yes --no-install-recommends - # Ruby for asciidoctor - - name: Setup Ruby and Gemfile content - uses: ruby/setup-ruby@v1 - with: - ruby-version: "3.2.0" - bundler-cache: true - # Node.js for wavedrom - - uses: actions/cache@v3 - with: - path: ~/.npm - key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} - restore-keys: | - ${{ runner.os }}-node- - - name: Setup Node.js - uses: actions/setup-node@v3 - with: - node-version: '16' - - name: Install Node.js dependencies - run: npm install ${NPM_PACKAGE_FOLDER} - - name: Generate PDF - run: | - PATH=${PATH}:${BUNDLE_BIN}:$(npm bin):$(pwd) \ - make -C docs/ RISC-V-N-Trace.pdf - - name: Archive PDF result - uses: actions/upload-artifact@v3 - with: - name: RISC-V-N-Trace - path: docs/RISC-V-N-Trace.pdf - retention-days: 7 + # Step 1: Checkout the repository + - name: Checkout repository + uses: actions/checkout@v3 + with: + submodules: 'recursive' + + # Step 2: Pull the latest RISC-V Docs container image + - name: Pull Container + run: docker pull riscvintl/riscv-docs-base-container-image:latest + + # Step 3: Build Files + - name: Build Files + run: cd ./docs && make RISC-V-N-Trace.pdf + + # Step 4: Upload the built PDF files as independent artifacts + - name: Upload RISC-V-Trace-Control-Interface PDF + uses: actions/upload-artifact@v3 + with: + name: RISC-V-Trace-Control-Interface + path: ${{ github.workspace }}/docs/RISC-V-N-Trace.pdf + retention-days: 7 diff --git a/.github/workflows/build-pdf.yml b/.github/workflows/build-pdf.yml index 13e05ad..bc35624 100644 --- a/.github/workflows/build-pdf.yml +++ b/.github/workflows/build-pdf.yml @@ -1,61 +1,79 @@ -# This workflow installs dependencies for PDF generation, generates the PDF, -# and uploads the PDF as an artifact. - -name: Build ALL PDFs (listed below) +name: Build All PDFs +# The workflow is triggered by pull request, push to main, and manual dispatch. on: - push: - branches: - - main + workflow_dispatch: + inputs: + prerelease: + description: 'Tag as a pre-release?' + required: false + type: boolean + default: true + draft: + description: 'Create release as a draft?' + required: false + type: boolean + default: false pull_request: + push: branches: + - master - main - workflow_dispatch: jobs: build: runs-on: ubuntu-latest - env: - APT_PACKAGES_FILE: ${{ github.workspace }}/dependencies/apt_packages.txt - BUNDLE_GEMFILE: ${{ github.workspace }}/dependencies/Gemfile - BUNDLE_BIN: ${{ github.workspace }}/bin - NPM_PACKAGE_FOLDER: ${{ github.workspace }}/dependencies steps: + # Step 1: Checkout the repository - name: Checkout repository uses: actions/checkout@v3 with: - submodules: 'true' - - name: Install Ubuntu packages - run: | - sudo apt-get update - grep -vE '^#' ${APT_PACKAGES_FILE} | xargs sudo apt-get install --yes --no-install-recommends - # Ruby for asciidoctor - - name: Setup Ruby and Gemfile content - uses: ruby/setup-ruby@v1 - with: - ruby-version: "3.2.0" - bundler-cache: true - # Node.js for wavedrom - - uses: actions/cache@v3 + submodules: 'recursive' + + # Step 2: Pull the latest RISC-V Docs container image + - name: Pull Container + run: docker pull riscvintl/riscv-docs-base-container-image:latest + + # Step 3: Build Files + - name: Build Files + run: cd ./docs && make + + # Step 4: Upload the built PDF files as independent artifacts + - name: Upload RISC-V-Trace-Control-Interface PDF + uses: actions/upload-artifact@v3 with: - path: ~/.npm - key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} - restore-keys: | - ${{ runner.os }}-node- - - name: Setup Node.js - uses: actions/setup-node@v3 + name: RISC-V-Trace-Control-Interface + path: ${{ github.workspace }}/docs/RISC-V-Trace-Control-Interface.pdf + retention-days: 30 + + - name: Upload RISC-V-Trace-Connectors PDF + uses: actions/upload-artifact@v3 with: - node-version: '16' - - name: Install Node.js dependencies - run: npm install ${NPM_PACKAGE_FOLDER} - - name: Generate PDF - run: | - PATH=${PATH}:${BUNDLE_BIN}:$(npm bin):$(pwd) \ - make -C docs/ all - - name: Archive PDF result + name: RISC-V-Trace-Connectors + path: ${{ github.workspace }}/docs/RISC-V-Trace-Connectors.pdf + retention-days: 30 + + - name: Upload RISC-V-N-Trace PDF uses: actions/upload-artifact@v3 with: - name: AllPDFs.zip - path: docs/*.pdf - retention-days: 21 + name: RISC-V-N-Trace + path: ${{ github.workspace }}/docs/RISC-V-N-Trace.pdf + retention-days: 30 + + - name: Get short SHA + id: short-sha + run: echo "SHORT_SHA=$(git rev-parse --short=4 HEAD)" >> $GITHUB_ENV + + # Step 5:Create Release + - name: Create Release + uses: softprops/action-gh-release@v1 + with: + files: ${{ github.workspace }}/docs/*.pdf + tag_name: v${{ env.SHORT_SHA }} + name: Release ${{ env.SHORT_SHA }} + draft: ${{ github.event.inputs.draft }} + prerelease: ${{ github.event.inputs.prerelease }} + env: + GITHUB_TOKEN: ${{ secrets.GHTOKEN }} + if: github.event_name == 'workflow_dispatch' diff --git a/dependencies/Gemfile b/dependencies/Gemfile deleted file mode 100644 index 8cf7a50..0000000 --- a/dependencies/Gemfile +++ /dev/null @@ -1,14 +0,0 @@ -source 'https://rubygems.org' -gem 'asciidoctor' -gem 'asciidoctor-bibtex' -gem 'asciidoctor-diagram' -gem 'asciidoctor-mathematical' -gem 'asciidoctor-pdf' -gem 'citeproc-ruby' -gem 'coderay' -gem 'csl-styles' -gem 'json' -gem 'pygments.rb' -gem 'rghost' -gem 'rouge' -gem 'ruby_dev' diff --git a/dependencies/README.md b/dependencies/README.md deleted file mode 100644 index 0841ce8..0000000 --- a/dependencies/README.md +++ /dev/null @@ -1,3 +0,0 @@ -Dependencies for the build environment for various package managers. Used in -`.github/workflows/`. - diff --git a/dependencies/apt_packages.txt b/dependencies/apt_packages.txt deleted file mode 100644 index 0682bde..0000000 --- a/dependencies/apt_packages.txt +++ /dev/null @@ -1,21 +0,0 @@ -bison -build-essential -cmake -curl -flex -fonts-lyx -git -graphviz -# For wavedrom -default-jre -libcairo2-dev -libffi-dev -libgdk-pixbuf2.0-dev -libpango1.0-dev -libxml2-dev -make -pkg-config -ruby -ruby-dev -libwebp-dev -libzstd-dev diff --git a/dependencies/package.json b/dependencies/package.json deleted file mode 100644 index 7347d43..0000000 --- a/dependencies/package.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "dependencies": { - "bytefield-svg": "^1.8.0", - "wavedrom-cli": "^2.6.8" - }, - "name": "local", - "version": "0.0.1" -} diff --git a/docs/.asciidoctor/diagram/diag-ditaa-md5-0f883ec0b2579ebde75f5441ddf28404.png.cache b/docs/.asciidoctor/diagram/diag-ditaa-md5-0f883ec0b2579ebde75f5441ddf28404.png.cache new file mode 100644 index 0000000..8f1646b --- /dev/null +++ b/docs/.asciidoctor/diagram/diag-ditaa-md5-0f883ec0b2579ebde75f5441ddf28404.png.cache @@ -0,0 +1 @@ +{"checksum":"ditaa-md5-0f883ec0b2579ebde75f5441ddf28404","options":{"scale":null,"tabs":null,"background":null,"antialias":null,"separation":"false","round_corners":null,"shadows":"true","debug":null,"fixed_slope":null,"transparent":null,"bullet_characters":null},"width":800,"height":406} \ No newline at end of file diff --git a/docs/.asciidoctor/diagram/diag-ditaa-md5-586b9e188c58d9a9b40cb57134ec5d4f.png.cache b/docs/.asciidoctor/diagram/diag-ditaa-md5-586b9e188c58d9a9b40cb57134ec5d4f.png.cache new file mode 100644 index 0000000..135f7ff --- /dev/null +++ b/docs/.asciidoctor/diagram/diag-ditaa-md5-586b9e188c58d9a9b40cb57134ec5d4f.png.cache @@ -0,0 +1 @@ +{"checksum":"ditaa-md5-586b9e188c58d9a9b40cb57134ec5d4f","options":{"scale":null,"tabs":null,"background":null,"antialias":null,"separation":"false","round_corners":null,"shadows":"false","debug":null,"fixed_slope":null,"transparent":null,"bullet_characters":null},"width":680,"height":266} \ No newline at end of file diff --git a/docs/.asciidoctor/diagram/diag-ditaa-md5-96c6a3b2f6c6e1138b505a9b74cf48f2.png.cache b/docs/.asciidoctor/diagram/diag-ditaa-md5-96c6a3b2f6c6e1138b505a9b74cf48f2.png.cache new file mode 100644 index 0000000..9a8c13e --- /dev/null +++ b/docs/.asciidoctor/diagram/diag-ditaa-md5-96c6a3b2f6c6e1138b505a9b74cf48f2.png.cache @@ -0,0 +1 @@ +{"checksum":"ditaa-md5-96c6a3b2f6c6e1138b505a9b74cf48f2","options":{"scale":null,"tabs":null,"background":null,"antialias":null,"separation":"false","round_corners":null,"shadows":"false","debug":null,"fixed_slope":null,"transparent":null,"bullet_characters":null},"width":680,"height":294} \ No newline at end of file diff --git a/docs/.asciidoctor/diagram/diag-ditaa-md5-c7341e167bfd32f1ed3ea9a95f310b40.png.cache b/docs/.asciidoctor/diagram/diag-ditaa-md5-c7341e167bfd32f1ed3ea9a95f310b40.png.cache new file mode 100644 index 0000000..7fc3bf1 --- /dev/null +++ b/docs/.asciidoctor/diagram/diag-ditaa-md5-c7341e167bfd32f1ed3ea9a95f310b40.png.cache @@ -0,0 +1 @@ +{"checksum":"ditaa-md5-c7341e167bfd32f1ed3ea9a95f310b40","options":{"scale":null,"tabs":null,"background":null,"antialias":null,"separation":"false","round_corners":null,"shadows":"false","debug":null,"fixed_slope":null,"transparent":null,"bullet_characters":null},"width":600,"height":182} \ No newline at end of file diff --git a/docs/.asciidoctor/diagram/diag-ditaa-md5-ccdaa90e7df2c75d48f8cd0420e52f4a.png.cache b/docs/.asciidoctor/diagram/diag-ditaa-md5-ccdaa90e7df2c75d48f8cd0420e52f4a.png.cache new file mode 100644 index 0000000..a2e3577 --- /dev/null +++ b/docs/.asciidoctor/diagram/diag-ditaa-md5-ccdaa90e7df2c75d48f8cd0420e52f4a.png.cache @@ -0,0 +1 @@ +{"checksum":"ditaa-md5-ccdaa90e7df2c75d48f8cd0420e52f4a","options":{"scale":null,"tabs":null,"background":null,"antialias":null,"separation":"false","round_corners":null,"shadows":"false","debug":null,"fixed_slope":null,"transparent":null,"bullet_characters":null},"width":680,"height":294} \ No newline at end of file diff --git a/docs/Makefile b/docs/Makefile index 340b1b4..417ad5b 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -1,17 +1,53 @@ -all: RISC-V-Trace-Control-Interface.pdf RISC-V-Trace-Connectors.pdf RISC-V-N-Trace.pdf +# Makefile for RISC-V Doc Template +# +# This work is licensed under the Creative Commons Attribution-ShareAlike 4.0 +# International License. To view a copy of this license, visit +# http://creativecommons.org/licenses/by-sa/4.0/ or send a letter to +# Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. +# +# SPDX-License-Identifier: CC-BY-SA-4.0 +# +# Description: +# +# This Makefile is designed to automate the process of building and packaging +# the Doc Template for RISC-V Extensions. -# This will build any PDF (we have 4 of them ...) -%.pdf: %.adoc - @echo "Building $* PDF" - asciidoctor-pdf \ - --attribute=mathematical-format=svg \ - --attribute=pdf-fontsdir=docs-resources/fonts \ - --attribute=pdf-style=docs-resources/themes/riscv-pdf.yml \ - --failure-level=ERROR \ - --require=asciidoctor-diagram \ - --require=asciidoctor-mathematical \ - --out-file=$*.pdf \ - $*.adoc +DOCKER_RUN := docker run --rm -v ${PWD}:/build -w /build \ +riscvintl/riscv-docs-base-container-image:latest + +ASCIIDOCTOR_PDF := asciidoctor-pdf +OPTIONS := --trace \ + -v \ + -a compress \ + -a mathematical-format=svg \ + -a pdf-fontsdir=docs-resources/fonts \ + -a pdf-style=docs-resources/themes/riscv-pdf.yml \ + --failure-level=ERROR +REQUIRES := --require=asciidoctor-bibtex \ + --require=asciidoctor-diagram \ + --require=asciidoctor-mathematical + +.PHONY: all build clean + +# Update all to include the new PDF files +all: RISC-V-Trace-Control-Interface.pdf RISC-V-Trace-Connectors.pdf RISC-V-N-Trace.pdf +# Define the build rules +build: all + +# Clean up clean: - rm *.pdf + @echo "Cleaning up generated files..." + rm -f RISC-V-Trace-Control-Interface.pdf RISC-V-Trace-Connectors.pdf RISC-V-N-Trace.pdf + @echo "Cleanup completed." + +# Generalized rule for building any PDF +%.pdf: %.adoc + @echo "Building $* PDF" + @if command -v docker &> /dev/null ; then \ + echo "Docker is available, building inside Docker container..."; \ + $(DOCKER_RUN) /bin/sh -c "$(ASCIIDOCTOR_PDF) $(OPTIONS) $(REQUIRES) --out-file=$*.pdf $*.adoc"; \ + else \ + echo "Docker is not available, building without Docker..."; \ + $(ASCIIDOCTOR_PDF) $(OPTIONS) $(REQUIRES) --out-file=$*.pdf $*.adoc; \ + fi \ No newline at end of file diff --git a/docs/RISC-V-N-Trace.adoc b/docs/RISC-V-N-Trace.adoc index 1fae048..27e7aa9 100644 --- a/docs/RISC-V-N-Trace.adoc +++ b/docs/RISC-V-N-Trace.adoc @@ -30,7 +30,10 @@ endif::[] :hide-uri-scheme: :stem: latexmath :footnote: -:xrefstyle: short +:xrefstyle: short +:bibtex-file: example.bib +:bibtex-order: alphabetical +:bibtex-style: apa = RISC-V N-Trace (Nexus-based Trace) Specification RISC-V N-Trace Task Group diff --git a/docs/RISC-V-Trace-Connectors.adoc b/docs/RISC-V-Trace-Connectors.adoc index bdbbf33..e41d30a 100644 --- a/docs/RISC-V-Trace-Connectors.adoc +++ b/docs/RISC-V-Trace-Connectors.adoc @@ -31,6 +31,9 @@ endif::[] :stem: latexmath :footnote: :xrefstyle: short +:bibtex-file: example.bib +:bibtex-order: alphabetical +:bibtex-style: apa = RISC-V Trace Connectors Specification RISC-V N-Trace Task Group diff --git a/docs/RISC-V-Trace-Control-Interface.adoc b/docs/RISC-V-Trace-Control-Interface.adoc index 7a3d7fc..350ddf7 100644 --- a/docs/RISC-V-Trace-Control-Interface.adoc +++ b/docs/RISC-V-Trace-Control-Interface.adoc @@ -30,7 +30,10 @@ endif::[] :hide-uri-scheme: :stem: latexmath :footnote: -:xrefstyle: short +:xrefstyle: short +:bibtex-file: example.bib +:bibtex-order: alphabetical +:bibtex-style: apa = RISC-V Trace Control Interface Specification RISC-V N-Trace Task Group diff --git a/docs/example.bib b/docs/example.bib new file mode 100644 index 0000000..4c368b1 --- /dev/null +++ b/docs/example.bib @@ -0,0 +1,36 @@ +@inproceedings{riscI-isca1981, + title = {{RISC I}: {A} Reduced Instruction Set {VLSI} Computer}, + author = {David A. Patterson and Carlo H. S\'{e}quin}, + booktitle = {ISCA}, + location = {Minneapolis, Minnesota, USA}, + pages = {443-458}, + year = {1981} +} + +@inproceedings{Katevenis:1983, + author = {Manolis G.H. Katevenis and Robert W. Sherburne Jr. and David A. Patterson and Carlo H. S\'{e}quin}, + title = {The {RISC II} micro-architecture}, + booktitle = {Proceedings VLSI 83 Conference}, + year = {1983}, + month = {August} +} + +@inproceedings{Ungar:1984, + author = {David Ungar and Ricki Blau and Peter Foley and Dain Samples and David Patterson}, + title = {Architecture of {SOAR}: {Smalltalk} on a {RISC}}, + booktitle = {ISCA}, + address = {Ann Arbor, MI}, + year = {1984}, + pages = {188-197} +} + +@article{spur-jsscc1989, + author = {David D. Lee and Shing I. Kong and Mark D. Hill and George S. Taylor and David A. Hodges and Randy H. Katz and David A. Patterson}, + title = {A {VLSI} Chip Set for a Multiprocessor Workstation--{Part I}: An {RISC} Microprocessor with Coprocessor Interface and Support for Symbolic Processing}, + journal = {IEEE JSSC}, + year = {1989}, + volume = {24}, + number = {6}, + pages = {1688-1698}, + month = {December} +} diff --git a/docs/images/diag-ditaa-md5-0f883ec0b2579ebde75f5441ddf28404.png b/docs/images/diag-ditaa-md5-0f883ec0b2579ebde75f5441ddf28404.png new file mode 100644 index 0000000000000000000000000000000000000000..c7cb8daf104b65bf431613e3908d96a44dc05e5d GIT binary patch literal 33927 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%0D}l6d|}KiEL&eI&02 zl`%CB%VmW}L?}b9)6wbR%%FFG&;|uF3u@)9Tg4g1C-{BH`CswSW&h=zPm5)J3*60{Us0fhoD144&IDXfZ~IKA zcz%+>*#~(i&sU)`5Ew?Swe87?m&|RP;{o5m3>T4{tn9Tsdg+?9Zv1|YLQOFA1fx+9 zhTZsP4u%e{hCO3vL1r*I05(i3M%JMLIuTAzg~*u>s6a1w7J{HeynyZgqzt4Z)xay9 z)RSjD(sdcUBv~5J9rsBYvbM>l%lg3~Fi1fUWGxCwJ8ZK~Z*RfoEv@foUdQUqb~0@~ zEPN_n$Y>DZywJ!JdIa?((U@Fpwll2cGtBGW@N9p5Hty%sQD`s9pr>bKC?BPxaq3nT zdmbUTb(zKllZeN|*arLm8tR==9)CPfBOCsn7^Cb@4V3?abfL{a*&@|H>fN_2d$c^H zEUheJ@*(u@mo%>Cu&Sd;EHU~idt`Pzcd1P>n3~>%h*hJFusSk5)6;f0T=?{%BKt8z zP_6<5IdjyXw1nuUK$S}wZK!V+<)RwA;I_TND8~l9cBCL24rY8PS4$HC|1r`_l8}>! z0YuS-=@y_DYPll+8T&2xHTDbXsZ?%)DQ2qx87jDZZhsVu8J0uyr@%U=gkZq{W#6V! zDO+^I(}W{!*t&k|H8X%sL?M4;UfAf9&W;V@%rrWRY!T)3Bep!uQZSSR%a- z(^DSJ;C^3w-0E{7;vCK3ZUqHuUd%QqLu?)Av(*u(f%ZRF(NgN~5@6G(($#`oM)_Mp!Op#+{lkvx&e5OVl{FxjVl_59a}v`Pf% z+8}Tv4Sy<(;J3RYpMj}bma|d%x$5>+dsc;*|2?olM9v)ttFoeEvxEHo*FO9&6N5)M zXfY3>`!T=IUqPX+#S80*kX6Mekm$iqVdT~J$3VYudjH`u=aVh^(r;^buVK~JkWV71 zxkk~Z+f`P#$tIMMJoF%IjoqLx08;;(0j&9-IX81Ox!qzW2fZWcPA|R&htx!ahg)x| zWZV`tui)mG^Tgn2W8J{7d(Qg%K@Q*`d3AcnMOtM6zI4}Jnxv+8e#l*`P6{z-wjA{o ze8DZs`GHNIPZZrtj%95L&6gO?y70DS!6j6h>@0X(B!I%z)ULqAWBw_;UbeXHERw{t za&dibbgC*WsnpZU#7R_4FHtm^Cjwi-;gfZn+!sYC=t$#G@ z;D7-_Fzw>CJ*4BVx9X@aD|ZcJ`XXDu3p^}~=l^{l zWwNRvgc5IO0-rq#m-U`}$BZiHz;n@?rfIN}r|O`U!rk{Gndk9LtAo#7Rn;=2l5iw) zVMnm5yIZ5dypKGFgPjDF239QW85zlZ+t*J%C*Q`gXBGV3#b~>D^Y)WjouCKGpE z4|fflr%lY7DKIvCg;Li;*e}lp??mX+ERQCwrz8a#*<4{Hz?w>MQI10mX|E_R$EUr% z*FtU(WfJv;1lMar0~{F0>v;ONjcNFUEzxyG1v!J_BNt=$bD!3{8lbb{?m~6bT8!y4dENr(!9jLc1+V=73XU!ckE-*Ddcc}4m!3dsHz_)m%hSsn85bU34%{Iy};E3 zx&Dr#VpwQs<|FO#>k3+la5Bp2@eg6=1xtZrMO=`E0L#eCc+xpl5%w7%HpEx-(Xg{9!I-Um;II{Z) zc;MuC?F1(8V`LqXr#ht9&vhl}fWrLciz|rK0^=_4^1>EQmK%?QLO08cJmgEbG>g4g zkY+Mc;WXZIjoSIGM$8GLkpL6}5IsSC?m|-u2u6}pL=(TJnjts%V^WbG#S9`oXc%)x zJ+QWpy5aiQlyS~sTq|3le!c8V=-fSv8F(Z(ULZ|YYEbJWANVNszb-)cw!4%iTsZ_} zBVi*;AGpQb#hp|Y<2}+ESR&|d)O-A_AlYL@4iS4J#}Xg8oLRG`U$bv~{KLHTIvAi; z)Ci+8Ys!$8a}LMMKaO*D-|y}GE7l~>T-kjwUZcCWL;EI*`}TjXwEaQsIHD9ejg(Hr zH+OQ>c=Fjp?nDeGCXSKg-}(7>&|yT%e+8^Uq|pr<&@B#L+V6{LU}6Wfd#R(_>)3%c z7i*MhFt>~g6amnj0I2~2g(`FDGfWoG%9v3*8IfzrA(xS^x2H$^gnB*J6h>Z=BmFD> zk{If6SjeMCd}4ls%j$&iqzS+_)>7O3pFDZ)m3)Dbk@v$>aeHD6Wu>rZ`+L)25NR^y z8v&}wqc(W8+E(+knXU9hl+$QN8@-ZrfxmoXm%jY97`N8=4K^}xXn-Ot(|$g|LQ)h& zF{L_*=2cjo$ z?()}tw^lgG1P0Eb$6vxTwVjR$XGn#7_4h}ojgGo<+(ZG3=PijrrV3|@fQXxr!0{xT z+ZB4VH&MPhkU(OKVpSD_DNsyTc{w>bYistq$H0pFCV&S-O5(q;{j4@ZOHM9rxiS47 zJo)YV&U_1%4p?B@heO4#>$0XCfJo!1scrb^k=HR3fAm^k3sP#G_&L4{-nDu#-}Rhy zR)Q!G2X-i;H14%<-TKtQ)d&Z{9M425{_30;)YKdlRE`79j>cY(FY-ECj+<6?J@~13 zvZa_?%Y4w^`!$C$O26_Ujb%Ax_6W|X`c8Z;n?~&)d1Px*geYI(n zj|Te+ZqQjCm`~W++JXs-g@t=6${>h9;z647B@wCsRg{#(o9{t8kwoy<)C~)FVlhZ) z4-pcUgJb8878kz%M6AitzAOLS}_q#IM-|>z)Iml2Vh=rRm0}CvI!ug zpiVTYEI~mOqju?pgNb+?+M{Hew?v*ESV0DO6AI@uz^P5V{QSB9=bJV-Irt2kjIih7 z-mi0e3UxyRwTQ~v3*dGqM5w{BC7}WYEGcA6Yf)Ctp*+EKsa-X>3{89(tNP*e??VYbSxSzqfKC^%K^k@s+ zMsa@ELE4Ic5EsSlzQ1}IN^k$_D^??qk${e*47u6XLT^$14pl9M-|}o}f;GuCwoR_z z5p}NV#~E(kF-8lV>vOtPp9}TeK+ObbWn=)_8$cl)=*q;!LGSSKFW%@gWIL!J_u@RZdZnS?7DUF8>ib&2hHNkn`G(ZIFyxv3yrSg0!Mtbh zQFgVr*MR>4@C%$!=S(FxAg=9m78yIF;>)l)`S5mbxJR%QzXgOa%YfN(CVKLZk z+vjFxiet`3jlr2FP>i_rYSh4o`05oa`3#$is_M5qzd|J(<{6gN$%6t!hwV1)WIsFR{{IGr5}o@O-ix6 zSti{nffuv&D=tH^3({?{W03yRY{*G`O+Hs)0$>r+uPv~TZq%d4+1t5x?y#L`&jGmG z8c_$wJaFF#u}!j4qaLV{4nd^rDN&z2SxyyU>-WX{F`yQ?Gdl0Fw_h85FK zviAu#e@>l$f3REUWO#>5>>vHHx>|2Pd;0A7*F+%IH1YEAG)No0ss=B-ZvNjLuv^Vb z*i30%%XBXK*!Y_AQc~WmoRGgJBP;tdJldm;_r?v?=n#?jqSD!8U^j3f`4u}VsZY9x zfmR0B!AzaE>4S%`P8-+e8ojN++o4vj8`+d+I_{O46PeWU`O|;st42jg#U+0MUB(}q zy(a7^Ht-UvMNQ1t8E;UA~<+ zqt}_~icL2(s6-`?9*7p>xb4*O%=off>jo}RMr@2itr9K7>8Wz?Rk9RBD^-3t8v zoiCZ0Eyk^v$MZ84-oMu8xx)k5*6*oj-bDx-o=6s zlef+h6ZZcw;&R(@t`E*Y2?g^LTCu^!{D(v~sGj8TnO7a;uw^1^oZLY~(2ROV`BtBS zfg!zy5FyHT?sZ&tBQEm;(#fR$x7u&t^8IRr(ZMRkdYnX^Q*$Bcu;bec3!N!(O0n?m z8_cj<${}c~!!Qr@1bF%Z?gn)*%`-5(KG6EggkF+6YzIHUIJmTqK*?6GhK2^P#|uu( zx4Sz4rE-ux$7{qsKRN;OZr4s3Sep?96W@mm4NLeU8J!r9V)G^(0Ndf_%9m{^O4qv- zEV_FaXgHfoc-GL`5U(gw$FSUY&qEM;;R=NEa5xz!XdgUH@f8FTPVTA%QQ*9G#8Pz^ z$XIHGw@e)XZ!mlXYCtS$@BJsiJ+ANN&rDA@8Lp8f9;=ng)=wL+n@oDd6eV+W8$5M?e56V8(4O335L;1tulq)So$JL4D?p<}U|5!2O0?KX5zZkS zdI?ozP17jO3dNgalvBV0LT-Rg?WAu}u!=eH6zT2yT;Jth6Z`jJ?|f=7vEPEY?l>0l zepcCZWn}C)2%zb|bK=CaRETN*{sDX(b}pR8w|F=ZdoW>u?BMaEI1obz4dXWHpp>T1&ip@ejybckp2_{_R|jw`ISbGHm< z)j~BZF_0Ynj9H&un?%oP%nw|5ehj^Yw|EwET8xkGct}M?2!1K4p%FEgOW+#1l+Ver zv?82;_jYFb-#Q|yFI7+RNkAUp(o!OPbAF4qwm|x`Kdtr(SCVVq>(z<+XOB5`x(b`k z!&gUV9-1N}m)R2D7ITir=N!vV{~^!Jv7qd;cc;hkl7Ow$%i%8ul7Foy@4JGxj>cPi zCm(jr3rC@x>}>KAkiG$=X$MqNq)=!z%uX?5ckf0}mh&#!I@d4BY&9ZcXzh)@2Vqgs(dDo&5hEV+v^B_zS*p~2T_$(a9_2IufR@K+_9joP zsZyRo5dEwkt1`2BqBRF9-k;+RXl9Hc(D&E zpfB*7thL@~ZqM&>7>Bjn$r@9UJ;Da6dE+rNZS` zI6T!@cjO3a9X%%U6LO5^eu(4DLq&cHH2+MwBcj`-GXLWT-=|T1sp5bQ;q?y5BNLPi z-O&@~KZY9g9BX{^$Jss18Ag8sHwB8Od9Scdp7w?w3%7kP648XJ%fuHR?W0rrjv|~h z-U|GBUzmlm5&d-u)m;#Gj@c=shf*Gt`Jfj~D7O0*u`)*lrbMc3YmARBuLx75Z?qO@udnVt1l9t*S3nF|V1fmeR1m|zMju9Dpz1blwS^~ub(WVowWs|nqN5xz3sQs5^tS$5`dqA_NOKZ_ z`+-$Bc@oQhyoO;!Q5y8q&sDhgM#hF#fsz;;2i%JocUNaE4LhxGiaeZWC27vhbtJ`SyVEgAV2J-=zpTQ%GSgB!{3&s|GIhR_SSPLpBY`6?y|F_ zoU{s&7|(k7Y{lB{BD~o|rG;0~k zDp4BF?-M^wV}K`QI_Q4B<0=^7lCb=sw~b^uq541|?{h;GGfKMpaEk5iS!_3{2D1}l z`-v4^q{Wy+E}v>p2NT~HGia-W4;3S2wG7hc;y z%KDH(>@jkS$7vXQ+J%N$M6K%1kb(@PVV|f6j>a+mzPTZ3)-H`E<4_|So zxqPK542LDsb+g|Dj=#k*TU`17@ndlne|K<#Kv9LO__X|P;$B?4Mat(1$mD?5<+@z9 z1zv`A10WFr3W#2@t+9c@yR@{%HR^=Rnq*X(XsaaQ>f3z@ALpMKp3c^ZI`jUKF|Oh& z5auA~lyR4E`35KwFxF~W-5cZeA27{~O)S+ZEJfx@R7_er(3B~t8q`%-(O(o^zTJn+ zfhMTTmL}cNcL+AsrWhRiMVW)&2sGzNmi=xM0_5cVo}Wh!69MUigToIG# z?s?_jmrtKo2&EH=hEgavb^5@mV@M@4`7MCNHEV~VzWJ`&+;X!-x@D{aSqj?>jssk& zVoeH5uFc=6I9@5<#8d!Kg)#j7ZQQ_%%|Thx*;0*jBnP)8fusgbFpE#3H+e&HNjpX) zo8BybdY%`&WIeUL4hNo}hI9bgVJvf4Zfh9ZsrYBP*5?HCH47b!ER8zj2#49uM#eW)OGJ z9#jE^N2W8_sIdP!TnvOvH^O%^?gu4VbcwIn_sXpsel|TT&3foG`~wmx+H+cfKHUhq zWGsKPTZ?X3Tc#R*A@w9;vPSl{7S?ok@TAjOM>o21Cp=fW&cIo{TUe0|-+Ykz_7=YU z9rdl<`J4>$Alc)!CA@UnMrwf%i3~4;jQ}iP#G!5nRlZFdUjG!2w=?ie(epB^S}tWT zcROh(5h-8<>1t|5!`GWP zC_TLcFipxJ*Q<+CTo0kvxOndVGUe(sw(>D@&RzQRBBd7$Zt(Ip?IAi5^YA{bXb9^S zY3qI5&!+Hy4O-)11p(SP^aSv6=etf@#H(@f2|FKe=MQ&vv)e1xuj}!%xBc%G&Awd4 zsGkud_akdJiqNK5vt9^s;$dgoW0Tpi>O->=OQ!V{$0IJ21oH-fag~&mK+#}nxs-3*3{))C#)jIB5aw!q>$3_Y z!(+=2f@t^m_wWCDumj+kmUI?qO)^mhGI6ZjJZRjL>A6KkTCOotrbzChstOGp!r@T@ zk*u$eSshD5npHKn$_YwL>W}5*a6Qg>9Zcms&eHxIOjx8lhhgs{D5*OD$T71h>5gB4 z%Gp#L)8of_+GmM0`aL`gqWlk8S*;NVr=N*YptQA{M)D`VPfLf?)p>x;88BvoEgz@` z>1DBLvT&up+B0;^T=c_y&U!;A~H2KeOEz)fJ1-WwGyXjB3ddA zPO)S;0ZSzDN7yS-V)INsGXtV82ENI zo*Lxbl5$N{cRi#n!8a*x@K*Wj6H6}t`NU*#A1j`NMt6rQQw)r<*wxPn6U)jq)QRn{ z-)X~}G}o;SUS!;$9oTCuR9as%^>FeL<*Gm%o{erURE90Q4BCGycOY?6Q2S zrYi_({stp_PIHerCVkuONN~!C-s}TWK7-b>Nk+sFc1@FjuM^TUAdRp1aYsI1btEoB#>o!jEFFD0 zoLErs1lF=>f^vwzD?fn({gWGQqZJ%xza}y*mD#m&E7!!%l|mNv;&3O^;vrLI(%I() zcz`bhOhfyK_o4ZtM~(i<+^%4oZ%kI0p`)FO(cI=oIeC-jIGj4~oRWKKNNOirC7Gm& zPC{O5fUeqeJV{JPvM{gwd5Xx zMF&;AhEg~+REyiy!BJL4 zezLAzLZ7~T0ZxM*)Cj<^R5ZZ~N*{m;kPZM6lxKuHrgzwjSKC!+(tbHnjr|SKB-l~; z^iar*VP<6=Z;;`gXy;LR3|w$h5|nZ|zjU@1pdIn?idE<8BtZ%e5dr-S5$y^eMfJsV zPyvY9m^|5W92rdMb+RfBy=zl>_wf?N`CooSe&=t#`ztIUD7mB6C-wM2o%uQ43U`ql zcEJy7S+a!q<%X1Ony{!YugaYbMwB5sNKYLNQx)_&5)X6{S6aT47r%{jyy-uFXJNNU z`jU75bI{sd6K{#5&p%2D-CTDlHGSDUuc4b!-mlLd zFQeNje}+>0DX3&>afNWN2>IP;Wz08FxC4j}>K!dDEnr0pu4q4K8Lw2@hF6l%tEJ0L z8VJT?#-_Rr4oD5HIc)p84X(jO+{|Y*u1KHMW6r6;4qB-I!u24 zWXTO0sLxXD=CBH|>Z|7%vBocSCBeAz*IW+{D|sn)i&{QTvV1D!S|e(?12@vtOAL%R z$Dd<#(;;|a!2-XJPDErVO0nCv@#h%jrcE}CmxzA%crxJRG(;0d3;}{3JYhkkIe22&jiWa*Cdq5)jB)Nc{n7Ep#nv|DB z{NCnHfUTW%=g}M0!5c{@U}4~#HFz4&Re{d``gIRP51;rtMn>wzO-)@*BTX|+YfT5c z6E9KetRqvcvkFt)31h>=($X_AFz`GW{iy48u(q_YfF|(u{}vz<^etE> zgxmBOdKf3jG3YRd&y@N*x_04tne#P;d{BLYDj=ul$H~PwPrTwVdZTpW<>eqTnJ&Wr z_wP?{`+SD;5l9cQR}Ccq8wXL2tZcwl#CR|xr(Dpu3EDwLLirimtZ1b|fp8DB+`tG1 z3RBw~?tpv=X;)w?K#<4u7~}x}mE_nVasdDULGl4ND!d%9JJdR_8XIddyzqkn3tV;q zYj%a^6k6q=f6?sx{3pYH#?Z3+s|Am}pCd}~f>GIl zG7Hp)+W{6oc4%pmAAPT+{_v-WZy1p?>!C$W*;-pMgsF2q;Sdwh?z>&0vm8s)QCf z>ri_ICQCAwv2@4=Vo)nWYOlK?iCavG&`Ok)KE7DuK1_>*f+7>y;<`iA+^lwVcTZ23 zG*CTnHNbBUb$8e5tM}&`p6oB(=((49T_>%$P;k&0>fHd#Cr}AFSZ{($^bW98;r*4& zF0vU~WXCaj=R@@ofVLt~5rC`*dIr>_`-j{u@i=r}sv#3Y3NFO~na@ka-eUh_Sws{n zQ=wcCkVwtKaOd!+PXXkZDVb;w0nAVr*iJ3|(b42h2o4&zUq$48v;PRqYMGQVJN&r* zhTDYSWxj`_iJX+Qk0s;%BUIP$Feg6Qsne$$8M(N^3jEn_Y-tAE13wMSWR|nx1%tDI zy!qu7ufbj1#LLGg=8o1P#m!Jt$zBf-L(>?WmGdjyuqG0qwD%Ck$7CP9y0f#BKAUz5 zmaq(%Vl3YaJ@;#zx6uS{52S#cT5HS~il zR5wFCW97M(YmE|$N*AD>PoD6^aUBPE!DeHBi`s(sF>to1AXpQq`^cf-9AnXI`2XB$)Q%d%8Kv0?st6jjH~+2vt?% zlQOuu+ZE*vZws0@+q9FlgHQ5j7;wUr*yH9IRADwBepmq9CvtIl`Bf{yUGt@^(5@1J zN7+!W{1Y^VDWJLzi7%>8vwc2iAl*sb?u~)Ze>29{k}jKqp8JlmJj4+S ze~^_c$`*y_e5KTSSM=FjAO;rTP3H^B$;k!trnb_Hv1-(Gh2U=tA$ z$!u~>MhB`0lWJZj4lNbaJ9&cK`n6Q-zSLJej0HNY1i=!`=nh_CpaOs*b#bJkA}41V zTA4w0`#xF4WLr*>ql1H*1cWvunzIx?pimCvq}bS4g^dwV&Hw>DmiIA2%8Abx1Y2*0 zMMND+pDI#e{Mlwg#(Wi40X*6KH)HaxWj|E4`Ak})pqJB9U)}`Jxu8@$SmweuH1*U-wOatm+QG25-ORjwIv)3ziTKypRQcX<_ zx@T>)^L*F^g3r$alQ0!xNaKLu_JNh19q|KGTZF;}z+TXB%S3F4u;7G#~UGXIDvko?vJ0xqEC$s1DJH_rTqgl!H^ zLPHJ1oJhbLY7|zX5e1uZ=f=Ml3jgciO_z$3H_oG5;Bz+U0w?W*miB z(Yx)go4kF>$a`)wl1WNexf`3XFYPz9Qljc_Nf6W5=)0MwZ>97KL+I~cual=BC3t4? zbj**!)Eri73aiZN6k(b<=Oj+kD;DuSK0fVYhr<03v84-AGH=Yc{vt6rjips-Nb-2| zfoqx8FK=(dRdyS}8>)^%bKa+_dx{}!yY94FN1-9DKKoyOx=FsiABaTYv99>~Dh(T3 z281%;mwEntTlS2dhldB`IZz&|vmx)KGPP1+vHse9VUEN;q@)mZ3;muRUdrjf^%QtA z9k@(M=r_xakL?xg`O`Nh=2nVU)u@H7WZdP(AsTi*8K4+{qHXX5BN{shFtO{@uS32OciT`Ox#@zG3(20ZMf|NMnO5NaRp+tdDjm zBQndJH&_`at!|xKEO_yZedWw)Y7yf$&_g;q zgIv#GhbTI{d9Ih!k&zjar07l86@*uSd$?UMrWRAOPblU(K1O}8a#{^(5nz$lox@j8 zQX}p4?(e5cSV9{7o@slQXSexv!F0jAz|in;8;Wu6kJW6!RIRY)kdph=)SlOa(@^H;$OHi=Q}^|T<%U}J(dM!x!A z;e%9hyd$J|nS?)P|C#f$r;~(<3uNej)sa+5<#tAdO5T&A31MA``}kE(K0ctpxE<`w zq@9G*@6TjKs8C=_cpaa!Avt$Zz3awG(S0KlSgO>>y35sE4?fhVQTMFVo{Q3n{(e1i zveN!PW1;BHh+x=UKJ!~K@d`yZ1JI;$(d}3}9QcLrITS&vvBHiu%zGp(!e(;sjOdqt{^76M+VzKssj8b5Y|?#k`QJ{>gD? zjr`h!A;WSO(n;?UBS=gmp^+usk0;PK1^nAl8Ly11OZe(;S%$;An*F==R&4*5N zZ)$4VT(955uX z>Yz(Ym5@G|?WA*e-hQT!_GUmZCKd&WnjF%N>GhBHxEkLp@JzuyK2k+& z%kqM>elkD0cViSGT@{z)ae)f80!C0;Ef& zyK@=HlurXbEDH96s)GxCc=GekCjS2IY)D0xogTtRrp8#Sau$>q&R@r0bniVqJ$AY-N2~H_62eSij!txpn;Df94$VQ-_1JkAgsa%y-oCZDV~M`qNdd zB`nZ@8DSzfUV`gd&<(V)s&@rD>zn{|nXt9JzUZCcwuy3d+=75Ai^-#ffpVTiDWK%i zld0)Yuke}?QscWHh(G!sD5~}ZE4M{#1&{CAHIN8J1=xnr{B+MYu-?nvmy?&rQzvbC z4qh2)h2!`dfT)nB?zkeoaUtYIq~4_Mc})v_f=y&BsA-6S=v_f^o7 zVn78a$6TVK_aEUga73B!si;);CmO_hv5(oMHeb7Ixpe-#KvNq3l?fjsqg-7J?#3@aFxcWFLS4>8x4nLE;rn)CRzAl(-T$oTsIQInyVZ7?qtpMdNjTeQq(ML!ORhn`Nk!Et^p$FtsnQYK;+2!S;Fr0N6 z;~>>hgrq8PwFch#cLL-E}S3$j}@refmTIf~H3^1JVtD2rt(8%no5}$Z zI0Wg;INJAA#*PkO?yBR%SD$wRXBspT%8}vfqzP%k28gAaPI1@FZ=0!Thw&Vo-0j1i zNDMZ0Hvgp)7&oqYY=510(RnpT8jgwS*WJ zW2GCGA;u^<@(uX9gzOmj@~nX;i~Pa*Jk}r4)fvdqkZ)8P!V^ONz)t}4i+lyZL4*8% n^y>dVFCuayDIluNW37Pr5Jb2Ae}Zm})oBMKXs=^h3QvGw+6y$uf=w|J_d9eF(o zc1bh$K^#ZYhKt)q!_?-Fh%P}+)9IF&{R3>r50_ZZo#9ia`kmu_GvtA8N%!9S>x z(3=*5Y9s=7PeG6n?*IG?Nxku-y@ebk-Yck_YLW#Px^~A*0n0V;J%Upv_6Vx*;=sk6 zI|a%9AwVK}OAr#x#)D*^%VMF(F@<-@k{3h6dkKl$Voh zY-)-Waos}~S?uraO~OxAL1kR9GP@4i&u7y~T@ts6JqSEom9ohnOH=r%{s8^FA~1_m zo!}WzDgTt7&JUYyuk$4*q7iah$SP4a*3L8b(C4_OjwaAp*58zQA^xmxIIU7rthv2T z=MC%zs||__g09C|%5!rM*u!8Cj2l{7LU2yScS@((&LoJ6<1YH46{3Bg&yKT-m0u!L z>pKm-B0;C9s|8b==2&ExNngNyD^ID4aapOXr%z8$4`xtyn@>-L!{N1&LqkIv8XAwk zy}v2|OVcnLi(Fb-0@ExjD}x1KvDjpV@MUyS^D}Yv2M_L*?2Y?!IPHY#Sw(PLkXa)R zF*BE$Sy?9y)^?43RmXa>^yUZ#1_t=~`3cF{pIcZ=r0G79s6S)5Q}Y^U=Z9UJeV>6$ z;vM_>ZX%K0nsct39WtDztt|}=vdYTUnCU3237DSJI=#?3|pH_IL?jGPZ=d!$t;V z$k$V&xb8r}xKN+fZn;a-GRckD^ z9AwuoeX+YbHa|Z<*Olr^%1R`>d9ml^gdeZj{^nfQ*VAV14n{6Z+~>0N%YrQAv-&Bg zf)Wz0&kuw5k%&WQbaL!F`^AK-0x4FGM~4R?-5cxc^9u`YF@iEgHjERt?>dE&Cp$Yk zSE`Q=XFC!L#Za2dN4par=J+e)~5BaKXpX5FJmzq=2|bqtjF}L99Im7hYC!ImRh6vgB@pD zA|z0Lets1SJ+;zIQ(eVHt3yPh*n248Y10PTOfgI|3{r`FM&NrrIvb0Jw4r7Aji&t70=TMMwi<@j@M_6U##=Edi82u zT^(@P`VX|^EZS~+a}01FW#xC~sDy+!G*2dHX1dNS`O}KVmUj#cG;$|vF8bMeZ+*i} z=5?V)nR)uB4<=uVvvfNz5fmG%L)H*Lbmbub~FUbRIp&?b^ zlR)y@NoUq1)wXevK5!ilB^H%Q{@RJdJskRuo9$7|WrLrt-azuS_P(OSCT=VFAwzfV zdf*M2y|+&a>}HhiP|OoZc>Zx#S7{crm!cT;GG6qya;)?8Rin|$mqw#_8!0Kbj7FpE zH+RZrVhcXWWerjmIkp)R%Y*f~sFL?&xWc)x(skb1iJ`IkN9&lvMp z(;dub;foJCo#$xwH%ILbyXH#IjWa`D4A&EU3;w7!JQW_JUc1O)`bSapJegM%X@ zb@lb1yP{hS)zl3PT$hUad{pH7Nl8gVmS*|7E2o;nk$g7Bqkh??u({4OmBiWN4;THwqOzd{!>>Q-(6*vgJwMhB+8_8;+nY&CPXy>44{$bAh2Q8qFvWF|x2^WMmYG zAJ!acgP0qikdP1=Nimm;1kO(F_(LovRR$tqP|D2A{85b%^;$Go_i|Q+c@Gvr(8W{E z3Gc6f&Cb)}6hwTLSoD=iDH(JvkZujf?9W?AM}&LZx7FUlRJcCV36>eYq!*_pj>yOX zJ0TpMVy&g@;B!BPU@pN-{L)>!lGleB>2+n3{s3j3#a60HDJZ0%MU577l z6U?Ut+pjuNE{-GEAc!y3a*s!F0M9^`qZ@5APd|FoShg}h+E`9Nu6_7I<~rwv0UZ?! zZ;HIC(vyxE7Dm^2`qOjpC^WJ!6819TKm<~Qo8LG5^(i=&!nz5I9HQZ8`Mj^F=CGz} z2erys;}4IU`UH&Vj1&Fcb9bNkBC)7&f-4UU1wr@0`)VJ+`(y0s3}I>EuY%vvZ8h2Y z(9eBY%8~-JPUua<7uV5u)t>1f=>3eN5S@ePo9=L`#-LDf#3mN@#Xwb=RRx&qlEhDQ zc?|0LUYAr=Rb_-9Vx5OAt*kU@d!4x=?N_h0_Pwc7M?s_P=#&*cWr1Hk%JQmb9uJuP z$FS~Yx}zz_aif=OQgGRh&d$3}n=WrXijldYjZegCQ$@y_g2sa!J9u2{ojcDu$_b}S zR^mp>o=evXBP_aUP+D2UD4vv+WjXf61J)1LRHQ(`(`K^c1`ft@-0{Oe=q6KJI{gY| z7FBg;4!W(@_vU0SAe-dkv}gPHj2!xb=S_Q$^X~^=i{V?(kZrt(!+Zf;|Nd^!E+r*px(dZb3NrrbM{o%5 zCISZbWyT)Gh`Ul3KAPNI3mzXgex{|H*)RdZ+D6T+^34Vmf9)VV=cTvDQ? zsR?$Il$4a|nHjL%!}_ufG}ZH3hT>Ej;}o!#{kic;NjGoYNX*TBG4aiB+)^TorD5cd z9FgHwO(t7EW?)Zb&X{)hys!4G&0mALw&rCz-<>WpxPZl~y&5dGM7Ut4z>rgG_6oeJj~7@`@>#cZ@Y5)wE|!>}&JLPdnR3zz~GMWL6|H*3@1=DsVj7+=-gH!x6U-gWC! zKtx0%{jY&hRdsV@vGk9O7-?(E(l7Moq*jAiSU6k&=Iiufq_w-~;U@#=1^Lax)lBWY zFQ)tI2y^qf>F-e=sQ5d(x(XiGU-0rq_jfMn-KaTjg&iJ;)7L@eHx4 z)f|RRL7Om_;`I_Gv?(XeXjZK_6Fn*+_rY0p-_x3D_s+t4Rj;J4wrQ)wtKGzyESv@MV;(tyfBI zCK!9Td3c)ctbFF!!F&3*Rr+^J_GZ3EG2mBtAu^2M6F7f=Q~dUpU!!w_zW<*;=!n<_ ziQHE;qF3Q-9@mWM^6ImilOYJlTmfr@I4I)VIpq{l6ksD{(`Cy9)!ai9i$WhgYKb7F zYil?+&)#%{UYz!(y(R~)UXg&RN)B8>(f7vjWr@MnC@!(+y&!M}F@T^E1g;>y*R@0e zH^Eg6c=^>$aP=QFl|n2^HXC$BCxMBA&pkVC%?*qo;HHy9fWqSy9o9y++eM6aT$xr9 zUpif?#gF?I5^G4#GyODFJNd2S#bacp^a}sUeR%4bnfpaiAAj&sSS=Rx%?isLk6C=B zdo()Tfh3qx=BuCUHbvzO!SS4CV<@6Id#sFYC(KIo+6)tSsKB0j^K7M>yIl%e@xB$+ zdEV^-i_O>@#}kQneDiGdlaaj?xa7?09Iue95RxN-lW7TDaWK5}(*ETJNk?8;6z z=Wv|J_w0 z=pL(CECp`$UQf|z^pXx?4h~JPS0ncN!0d63AgK1u zbo!&X?(S|aL+4}=wzA0$P%l^GJbo`U8N;i0hFvsGZz;!OyVaDpHaE3P1YV5R2!kqd z$i7bn2BItN%hlJU=t>tyXJ<@9;EjU({HCU+XBHM&0S+DSJ(_Ma%c{S(*Cc0-2xg7lUHj^J-sNDcFYAkTyNmy% z9S+2v?EH+t1SG%p{?x(Gq`TN@dCbPj?H8)B>&*(`>^f7*LTj~Nv~K-9JyOa;z1ao| z_L^C`b@2!LJE^IuGgDJNeSJtl$7NrRD(!L@la~l)G8pUwT{nl(X!+nn93r86ygzau zx!Y@3{%w3hj*6NrPWhglAxB#3&!1|h#vN2tE^Tcr4ivPB9tkbA#tIJ_2Gcmdr{MOX zab~2kn@!lEYMeO(>CfwADP*nUn#yoe3rhu~U3og0ygytmTrFr532u@C`>1+qT-+Nw6Ws%cHWBYxGm*^Bv~!&v^yxXo9R@uTRwC3?vnk*ORWPGZsnv6@Tit`$}x)j2U=H}*O5AM$i%dD53g2FpdrOe7N9BdS@ zm6esoV~xQK;7fh}@k1XTYij=uUiQ(b`TQO;yVuPSXc8VN$w`r7w!%qd+b&*^y7k3_ z&}C=Yb#E?J26*olAt7N|v^Bexo;C00&dy-s=DXMENFGaF85#WW`p99sn@CCsI+{AG zMBEm>m;42fkZkuf$7!U1y^jM5g{pfNedf*KD&)oZx#4yHyPsYeXL{Q#KD}$N4RP2- zzUW+0Xvs0Ql$pu8r)OwLQ)rzR2TYlI3aYUNoAc2Nq&lDNq%5r@>CtYXha@HCFW|JuMA;piO6L;@>*tL&R{H(Nz!a|0;(fQl96bt6cYi4sh%K$9C}7)3ep1Wi;fvGem{{ zRkZZP54r&t0ec*h#}XYXVL|%c>|;V@n^@b!_Ak59n(}Rk-LJHVTRDiLq9S`oM_`uu zftn~C1g6=j^i6+SB~mQ$=y0dH-j7md5U4U+TU*8lCyw6*L8H||pRZz0A>%x#si_sh zSQ{G~&_bV>A*bX(hU>BI%Nk94~6c&#@Oi1v3@ zN)q5wC!g1@o%2fJZIRTiR>2ikW@Zqe?!(~%L&;1UK>2V4MX@Gco{Ed8gp{71-kjLk zr3LFrr=fAt!xYwIG2y zbfWQD>kM*bLeedka9BYJoC_Q%i% zWaMCHSrGbU*!kUUkU;V_#houl{;$O zO!tOKPS|2YaE+sC_quSSg}Hge-KRdtP`QbTdaaE50#Pe#dQv$4F(Q$akYA zSw+QU%Z%u@=ZvZz@e*DpPoFAA@mPM3Bm2FSOQFV0UuYm z+4vCxaRgMR<%$g@X3Wrv8*lD-+n21iH$0XqGT%F${IMWsx_DXn&HerG&!9M)%~eae zAJ|mXRsmEx*gYGYaBbg*T<^R3XF5AoDOUT85HW{gp`ndqui{Jx44uYn&oVc*wvrLD zjrBTyacilKU!%eV?w-2F7>mmWM;uO#dC{gk&ekcAW)0CTY{EB4umoE;Jw3g8{LgAl zGvon@`s+v%!pF>SI&LdzAwhsKFFcNbo!cC4YlP?&;xg5D*k>G*l2!-m$S3W4`eM3O z%H=(RD-{wuSIf^1A!ZG4N*!&NR5K;`Jf(Ro*2izWK8pkGTAF{H+xy&?u9mv@JZEFy zawC6afY_31YQ!ntV9o9<_L(TRX=tr3ZsMcpY!T6e%`PrQn(@9yBGm=oP~L$lNUuTd>13$B3+H(ju^TEH{X7FI8=5tCW*t*hh*Q-e2Xc zO@l|&Yq#6`e-zq-MpfbDug1(60t!Dy0ft;AVv@+G4-GqUYwTBi(b*C*wS zU>rxDEI%zkc>8J8 zD*c)od=*bm*Dva#LNsf~Evb`A@oi)rG2GVVPm_d+tPEF1dG7U99~NokKm2?e86e2E zUGSV^advhzwF8Ls#Lo=wn7L+O8>+9>o0^>5eeOu(^|Q|@DxJv=e2`~=EH-f=*=?q6 zH|DsTy4nw>SS7Q$4Qs@{o(Of27Y$tYQ{$97S?7?uJV=J=$aK$SS?63Ml~0dZ5sFU` zBSEAcf6-?C{Dz6sC#l{Q*%hz--LKo*JG)+gTs8il)zV08=@Y)UMpI4Fu~UXZMbWf8 zH8Ih(U=GU8W@nCyES23k zhSPV*5=3RLJL^L=$z00kPcIqG=mDzJww>-~3sO!s3|LbZp?o?CitjtETwN>e?GDwC znnGE!f=*V5Z&h1GKxb#NLh`zg&p9NU*t!mh!lK8~!3qMC>{6aVP?UY8@Gvf`y|RI~ z-)n#N^QobnMcQRGj*TmX9mpGjLhQg4rwmojW%hE3rdcPA;c%C_pR2l(T=P$~Q;*pNx=)Z5#%F zHWS}4Z^?CUkicw9M#J~1Y#$>h7J>8+Gb$hRq@2800ZK2roU5Q}uT+!BB%d1_nMd+k z$5Ih^39M~cZw-z-c$eNF{gst>oBx8_M%2jS5UKe;tTE}JS8&mwU%h1DX|9PGKe^qjW(mu=?$~Dth`pR#m%Z>+K zk<}YVkP!-=#+@~|*TrvTaB|OdygmtMl-Kd!>VN;GF!&!lsB`tM1_Uxc-xl~E6BCn; zjt(gAj8G1iMn*_|jvDf7;hyY{?0Yx(=m50pHcYtqxqYB<%eX~0QN?Gl=-QoQ9nH6x ziQ6jpLUKlAWTb@G1p^?o1D`1whO^LnlCo$vY@HTQ_IohZDuuvhNCKb;t#G;U4})lW zS>7+iB^F}FCqj~?+NX56)Wk%0VhIzI6edX2n@5t>;&3IZqT=ObLm;sH z)2B~Cg`xS*;wKnu_)}~O58!ku9T%P3+}ffRfSGk9NO28`g8CPLJb3`}kWS;?00HJ6 zvy1|}C3Mkc-J)lq+IB!hG;+gC0j``G)&D`rW&1hv006HZgyf(q&^Is;cHM*Jy_t&l zqDhDZX!DFEQp6Rm4OzA?TjW$q$A_|L*(x3*c70VKtqlo+w05ISR2kJxlIL&0B~jnK zv^-Lc41yaP8oIh3m$DmMY3M;zaz*R+UTnPs0EC(jk{#%EiHGRQL!kP6-m!0+H zSYa14$LW@c3PICWDzxSE=aUAXZt=)7A&av-R@`>S@X;|s&UaUSVPlML?ukfG@3iiF z56ch(;xZ2Y1y=3cS0>xwC_?iXbjR{7vnX&;cOsFGzzy4Ol|`=-)@dp}TWIq0u+4j$ zPfq^3TCAV>5HpvGoMjRbrb}4@n-)AE5Q$W#EEIIZI?YR)nlki-=;rY@(f3l4gbXkK zNyWpZUln7x|BwUap~vj&(<|#YNSP;xqNAx?)CDr%N(UuYu>54j|6uNjNZ9`e0QQ71 z1Oi$JhBJFMnggqx<~?7S5^~7fe+R z;k2TnVpR?A!t9D&o3N=yux<(Ovz6G&n;{LJ{sW1|jTO!tC(?s4-mS{+HjZh%#*ZUG zL|dw&)t7SZ7c`Gi@KSX22?{| z-4xby6R;eBlQ4jQ$OYf>?syk^HP2_8*jSAE4V4mRxzIhStzB2#tyw zqWJZt06FkH`tsJ((=$6eJEv-I9-JnazKAIO zAX+7(TyHLceL-uvD~>3&Zi^KL0UU$Dz+MXIi~xyaZ)+h{G3uL&OE~sX>}7*-2R7N0 z$a!5kns!#PB4#%pUR4Q%E*lT{L>J1l8kH&xi3Cj({7 z!q1V8Q0MY8YY^xfdq13AtWB$|DjMwU%y(KF2lS%TEF>hPzq&P?<^ecuqNQc(fqi|H z2UIn2DJdy#Ztl)U$H~6na;dw3@(1XaQna>?P8s6J?ZNXh&a3kzdXOGzVI5Tf`j;PlXY z;~3kMS#~)_GoW6CcL&RNE7W)=1;C${Jy7WUiG)E0OUAA*>s7fopOMa~SNvQBaN%y+ z!{1-${og`=M89T^;nD_Xx(&&J|NicJl^`N;Y%1I+3}<*c1~B{|vU;CZ8=my__3?t> z-Q)lwm2C^-4e#o_yg-WNQ}K@iAJa?+f*+1E-Qef10q3IZv~ zmoHzyi4vcZ^F`U$5c@{hESf{zYt&wjJ;F)xaZOyT#_{#eli&nYxHv$WpdNND?!#bG zp%TkM2Y{}@@ft8RAdqJ0HM_z6yesbPlD$&dO;V@{a zzTT^6jiKHQFj`7|lqX+v104D(z5M?izzW&2L9Z0(05}_p2 z0wuWDh0J~X;>vH0wE2*-yewAU0urXxaK$mY5f&B}bXbf#2S!Gv%3+u4FAv}-LpGHx z3TV<)8aW_QavH-k8m&X@?RP40=uEk92Z;7m+fK=6;Qq2)YH@McI+gGWIU(>OW@cs} zod*DS3J))NiLpJ5qf%qF<26&CeBxaV?t(LUO(P+nlCAO6`bd-9H|oh}IV^qY?1?b+ z7w63W^wV?RqCx;+0O+5n-q+vHSYLr({ewK@FO%l3S#PyP@hV?%B0AEn-u#B|Gy@!u z7qG+jKY*9qybFNm_ZQ%B%yo(X=vLRCbd}~$x(Y$wVn2_tPGN{@GBQ2hgEKpR#XuYc lPl*2KpU?ewM~n}Nl1g6Vt9!kM9Un=SlTwn*7JvBWe*yMok_G?( literal 0 HcmV?d00001 diff --git a/docs/images/diag-ditaa-md5-96c6a3b2f6c6e1138b505a9b74cf48f2.png b/docs/images/diag-ditaa-md5-96c6a3b2f6c6e1138b505a9b74cf48f2.png new file mode 100644 index 0000000000000000000000000000000000000000..94738c9e6a17d9739fafe3c3d32270bec8b1410c GIT binary patch literal 12852 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 T5as|M3ArVucr!!Nz~esvuUB6O literal 0 HcmV?d00001 diff --git a/docs/images/diag-ditaa-md5-c7341e167bfd32f1ed3ea9a95f310b40.png b/docs/images/diag-ditaa-md5-c7341e167bfd32f1ed3ea9a95f310b40.png new file mode 100644 index 0000000000000000000000000000000000000000..af3a48c1c731971fe95d781818fb6c34bd5cb9ed GIT binary patch literal 6133 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 literal 0 HcmV?d00001 diff --git a/docs/images/diag-ditaa-md5-ccdaa90e7df2c75d48f8cd0420e52f4a.png b/docs/images/diag-ditaa-md5-ccdaa90e7df2c75d48f8cd0420e52f4a.png new file mode 100644 index 0000000000000000000000000000000000000000..85b34ad6323c7a3609302cad1d3aa8b14fd7b7fe GIT binary patch literal 13137 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 D+BNP# literal 0 HcmV?d00001