diff --git a/.babelrc b/.babelrc deleted file mode 100644 index 34abf3fffeb8..000000000000 --- a/.babelrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "presets": ["next/babel"], - "plugins": ["styled-components"] -} diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 54d54ca99859..9dc2ad41b530 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -5,44 +5,56 @@ module.exports = { es2020: true, node: true, }, - parser: '@babel/eslint-parser', - extends: ['eslint:recommended', 'standard', 'plugin:import/errors', 'prettier'], + extends: [ + "eslint:recommended", + "standard", + "plugin:import/errors", + "prettier", + ], parserOptions: { - ecmaVersion: 11, - requireConfigFile: 'false', - babelOptions: { configFile: './.babelrc' }, - sourceType: 'module', + ecmaVersion: 2022, + requireConfigFile: "false", + sourceType: "module", }, - ignorePatterns: ['tmp/*', '!/.*', '/.next/', 'script/bookmarklets/*', 'rest-api-description/'], + ignorePatterns: [ + "tmp/*", + "!/.*", + "/.next/", + "script/bookmarklets/*", + "rest-api-description/", + ], rules: { - 'import/no-extraneous-dependencies': ['error', { packageDir: '.' }], + "import/no-extraneous-dependencies": ["error", { packageDir: "." }], }, overrides: [ { - files: ['**/tests/**/*.js'], + files: ["**/tests/**/*.js"], env: { jest: true, }, }, { - files: ['**/*.tsx', '**/*.ts'], - plugins: ['@typescript-eslint', 'jsx-a11y'], - extends: ['plugin:jsx-a11y/recommended'], - parser: '@typescript-eslint/parser', + files: ["**/*.tsx", "**/*.ts"], + plugins: ["@typescript-eslint", "primer-react", "jsx-a11y"], + extends: [ + "plugin:primer-react/recommended", + "plugin:jsx-a11y/recommended", + ], + parser: "@typescript-eslint/parser", rules: { - camelcase: 'off', - 'no-unused-vars': 'off', - 'no-undef': 'off', - 'no-use-before-define': 'off', - '@typescript-eslint/no-unused-vars': ['error'], - 'jsx-a11y/no-onchange': 'off', + camelcase: "off", + "no-unused-vars": "off", + "no-undef": "off", + "no-use-before-define": "off", + "@typescript-eslint/no-unused-vars": ["error"], + "jsx-a11y/no-onchange": "off", }, }, ], settings: { - 'import/resolver': { + "import/resolver": { typescript: true, - node: true - } - } -} + node: true, + }, + }, +}; diff --git a/.github/ISSUE_TEMPLATE/partner-contributed-documentation.yml b/.github/ISSUE_TEMPLATE/partner-contributed-documentation.yml index ebc27192095a..0c5f79861212 100644 --- a/.github/ISSUE_TEMPLATE/partner-contributed-documentation.yml +++ b/.github/ISSUE_TEMPLATE/partner-contributed-documentation.yml @@ -64,4 +64,4 @@ body: attributes: value: | Once all tasks are completed, please mention `@github/docs-content` for next steps. - /cc @github/partner-engineering for :eyes:. + /cc @github/technology-partnerships-and-engineering for :eyes:. diff --git a/.github/actions-scripts/find-past-built-pr.js b/.github/actions-scripts/find-past-built-pr.js index b73448029749..b1dc99e16b9f 100755 --- a/.github/actions-scripts/find-past-built-pr.js +++ b/.github/actions-scripts/find-past-built-pr.js @@ -25,6 +25,11 @@ async function main() { console.log('URL:', issue.html_url) number = issue.number if (number) { + // We've found the issue (pull request), but before we accept + // this `number`, check that the issue isn't locked. + if (issue.locked) { + number = '' + } break } } diff --git a/.github/actions-scripts/purge-old-deployment-environments.js b/.github/actions-scripts/purge-old-deployment-environments.js new file mode 100755 index 000000000000..e114721b70a3 --- /dev/null +++ b/.github/actions-scripts/purge-old-deployment-environments.js @@ -0,0 +1,67 @@ +#!/usr/bin/env node + +import assert from 'node:assert/strict' + +import { getOctokit } from '@actions/github' + +main() +async function main() { + const DRY_RUN = Boolean(JSON.parse(process.env.DRY_RUN || 'false')) + const MAX_DELETIONS = parseInt(JSON.parse(process.env.MAX_DELETIONS || '10')) + const MIN_AGE_DAYS = parseInt(process.env.MIN_AGE_DAYS || '90', 10) + + const [owner, repo] = process.env.GITHUB_REPOSITORY.split('/') + if (!owner || !repo) { + throw new Error('GITHUB_REPOSITORY environment variable not set') + } + const token = process.env.GITHUB_TOKEN + if (!token) { + throw new Error(`GITHUB_TOKEN environment variable not set`) + } + const github = getOctokit(token) + + // The sort order is not explicitly listed for this API endpoint. + // In practice it appears to list those that are oldest first. + // But to guarantee that it reaches the oldest, we paginate over + // all of them. + const environments = await github.paginate('GET /repos/{owner}/{repo}/environments', { + owner, + repo, + }) + + console.log(`Found ${environments.length.toLocaleString()} environments in total`) + + let countDeletions = 0 + for (const environment of environments) { + const ageDays = (Date.now() - Date.parse(environment.created_at)) / 1000 / 60 / 60 / 24 + if (ageDays > MIN_AGE_DAYS) { + console.log( + `Deleting environment ${environment.name} created ${Math.ceil(ageDays)} days ago`, + DRY_RUN ? '(DRY RUN)' : '', + ) + if (!DRY_RUN) { + const { status } = await github.request( + 'DELETE /repos/{owner}/{repo}/environments/{name}', + { + owner, + repo, + name: environment.name, + }, + ) + assert(status === 204, `Expected status 204, got ${status}`) + } + countDeletions++ + if (MAX_DELETIONS && countDeletions >= MAX_DELETIONS) { + console.log(`Reached max number of deletions: ${MAX_DELETIONS}`) + break + } + } else { + console.log( + `Environment ${environment.name} (${environment.id}) created ${Math.ceil( + ageDays, + )} days ago, is *not* old enough`, + ) + } + } + console.log(`Deleted ${countDeletions} environments`, DRY_RUN ? '(DRY RUN)' : '') +} diff --git a/.github/actions-scripts/purge-old-workflow-runs.js b/.github/actions-scripts/purge-old-workflow-runs.js new file mode 100755 index 000000000000..ec9f663d2b65 --- /dev/null +++ b/.github/actions-scripts/purge-old-workflow-runs.js @@ -0,0 +1,226 @@ +#!/usr/bin/env node + +/** + * + * The only mandatory environment variables for this scrips are: + * + * - GITHUB_TOKEN + * - GITHUB_REPOSITORY (e.g. "github/docs") + * + * To delete old workflows, it first downloads all the workflows. + * The list of workflows is sorted by: A) does the `workflow.path` + * exist in the repo any more, B) each workflow's `updated_at` date. + * + * Then, one workflow at a time, it searches that workflow for runs. + * The search for runs uses a `created` filter that depends on the + * `MIN_AGE_DAYS` environment variable. The default is 90 days. + * + * For every run found, it deletes its logs and its run. + * + * The total number of deletions is limited by the `MAX_DELETIONS` + * environment variable. The default is 100. + * */ + +import fs from 'fs' +import assert from 'node:assert/strict' + +import { getOctokit } from '@actions/github' + +main() +async function main() { + const DRY_RUN = Boolean(JSON.parse(process.env.DRY_RUN || 'false')) + const MAX_DELETIONS = parseInt(JSON.parse(process.env.MAX_DELETIONS || '100')) + const MIN_AGE_DAYS = parseInt(process.env.MIN_AGE_DAYS || '90', 10) + + const [owner, repo] = (process.env.GITHUB_REPOSITORY || 'github/docs-internal').split('/') + if (!owner || !repo) { + throw new Error('GITHUB_REPOSITORY environment variable not set') + } + const token = process.env.GITHUB_TOKEN + if (!token) { + throw new Error(`GITHUB_TOKEN environment variable not set`) + } + const github = getOctokit(token) + + // The sort order is not explicitly listed for this API endpoint. + // In practice it appears to list those that are oldest first. + // But to guarantee that it reaches the oldest, we paginate over + // all of them. + let allWorkflows = [] + + try { + allWorkflows = await github.paginate('GET /repos/{owner}/{repo}/actions/workflows', { + owner, + repo, + }) + } catch (error) { + console.log('Error happened when getting workflows') + console.warn('Status: %O', error.status) + console.warn('Message: %O', error.message) + + // Generally, if it fails, it's because of a network error or + // because busy servers. It's not our fault, but considering that + // this script is supposed to run on frequent schedule, we don't + // need to fret. We'll just try again next time. + if (isOperationalError(error.status, error.message)) { + return + } else { + throw error + } + } + + const validWorkflows = allWorkflows.filter((w) => !w.path.startsWith('dynamic/')) + + const sortByDate = (a, b) => a.updated_at.localeCompare(b.updated_at) + const workflows = [ + ...validWorkflows.filter((w) => !fs.existsSync(w.path)).sort(sortByDate), + ...validWorkflows.filter((w) => fs.existsSync(w.path)).sort(sortByDate), + ] + + let deletions = 0 + for (const workflow of workflows) { + console.log('WORKFLOW', workflow) + console.log( + fs.existsSync(workflow.path) + ? `${workflow.path} still exists on disk` + : `${workflow.path} no longer exists on disk`, + ) + try { + deletions += await deleteWorkflowRuns(github, owner, repo, workflow, { + dryRun: DRY_RUN, + minAgeDays: MIN_AGE_DAYS, + maxDeletions: MAX_DELETIONS - deletions, + }) + } catch (error) { + console.log("Error happened when calling 'deleteWorkflowRuns'") + console.warn('Status: %O', error.status) + console.warn('Message: %O', error.message) + + // Generally, if it fails, it's because of a network error or + // because busy servers. It's not our fault, but considering that + // this script is supposed to run on frequent schedule, we don't + // need to fret. We'll just try again next time. + if (isOperationalError(error.status, error.message)) { + break + } else { + throw error + } + } + + if (deletions >= MAX_DELETIONS) { + console.log(`Reached max number of deletions: ${MAX_DELETIONS}`) + break + } + } + console.log(`Deleted ${deletions} runs in total`) +} + +function isOperationalError(status, message) { + if (status && status >= 500) { + return true + } + if (/Unable to delete logs while the workflow is running/.test(message)) { + return true + } + if (status === 403 && /API rate limit exceeded/.test(message)) { + return true + } + + return false +} + +async function deleteWorkflowRuns( + github, + owner, + repo, + workflow, + { dryRun = false, minAgeDays = 100, maxDeletions = 1000 }, +) { + // https://docs.github.com/en/search-github/getting-started-with-searching-on-github/understanding-the-search-syntax#query-for-dates + const minCreated = new Date(Date.now() - minAgeDays * 24 * 60 * 60 * 1000) + const minCreatedSearch = `<=${minCreated.toISOString().split('T')[0]}` + // Delete is 10, but max is 100. But if we're only going to delete, + // 30, use 30. And if we're only going to delete 5, use the default + // per_page value of 10. + const perPage = Math.max(100, Math.max(10, maxDeletions)) + // We could use github.paginate(...) but given that we can use a + // filter on `created` and we can set a decent `per_page`, there's no + // reason to request data that we're not going to use. + const { data } = await github.request( + 'GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs', + { + owner, + repo, + workflow_id: workflow.id, + per_page: perPage, + created: minCreatedSearch, + }, + ) + const runs = data.workflow_runs + console.log( + `Total runs in workflow "${ + workflow.name + }" (${minCreatedSearch}): ${data.total_count.toLocaleString()}`, + ) + + let deletions = 0 + let notDeletions = 0 + for (const run of runs) { + const created = new Date(run.created_at) + if (created < minCreated) { + const ageDays = Math.round((Date.now() - created.getTime()) / (24 * 60 * 60 * 1000)) + console.log( + 'DELETE', + { + id: run.id, + created_at: run.created_at, + name: run.name, + display_title: run.display_title, + }, + `${ageDays} days old`, + ) + + if (!dryRun) { + const { status } = await github.request( + 'DELETE /repos/{owner}/{repo}/actions/runs/{run_id}/logs', + { + owner, + repo, + run_id: run.id, + }, + ) + assert(status === 204, `Unexpected status deleting logs for run ${run.id}: ${status}`) + } + + if (!dryRun) { + const { status } = await github.request( + 'DELETE /repos/{owner}/{repo}/actions/runs/{run_id}', + { + owner, + repo, + run_id: run.id, + }, + ) + assert(status === 204, `Unexpected status deleting logs for run ${run.id}: ${status}`) + } + + deletions++ + if (maxDeletions && deletions >= maxDeletions) { + console.log( + `Reached max number of deletions (${maxDeletions}) for one workflow: ${workflow.name}`, + ) + break + } else { + console.log(`Deleted ${deletions} of ${maxDeletions} runs for workflow: ${workflow.name}`) + } + } else { + notDeletions++ + } + } + console.log(`Deleted ${deletions} runs in total for workflow: ${workflow.name}`) + if (notDeletions) { + console.log(`Skipped ${notDeletions} runs for workflow: ${workflow.name}`) + } + + return deletions +} diff --git a/.github/actions/cache-nextjs/action.yml b/.github/actions/cache-nextjs/action.yml new file mode 100644 index 000000000000..13dc7311e075 --- /dev/null +++ b/.github/actions/cache-nextjs/action.yml @@ -0,0 +1,18 @@ +# Based on https://nextjs.org/docs/pages/building-your-application/deploying/ci-build-caching#github-actions + +name: Cache Nextjs build cache + +description: Cache the .next/cache according to best practices + +runs: + using: 'composite' + steps: + - name: Cache .next/cache + uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # pin @3.3.1 + with: + path: ${{ github.workspace }}/.next/cache + # Generate a new cache whenever packages or source files change. + key: ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-${{ hashFiles('**/*.ts', '**/*.tsx') }} + # If source files changed but packages didn't, rebuild from a prior cache. + restore-keys: | + ${{ runner.os }}-nextjs-v13-${{ hashFiles('**/package-lock.json') }}- diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 5359049164e3..9a9d97ddbae5 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -7,7 +7,10 @@ updates: day: tuesday open-pull-requests-limit: 20 # default is 5 ignore: + # Because this is so dependent on the remote server we use - dependency-name: '@elastic/elasticsearch' + # Because whatever we have needs to match what @primer/react also uses + - dependency-name: 'styled-components' - dependency-name: '*' update-types: ['version-update:semver-patch', 'version-update:semver-minor'] diff --git a/.github/workflows/azure-preview-env-deploy.yml b/.github/workflows/azure-preview-env-deploy.yml index fcd6ab7383d5..f69293576f90 100644 --- a/.github/workflows/azure-preview-env-deploy.yml +++ b/.github/workflows/azure-preview-env-deploy.yml @@ -201,7 +201,7 @@ jobs: rsync -rptovR ./user-code/components/./**/*.{scss,ts,tsx} ./components rsync -rptovR --ignore-missing-args ./user-code/lib/./**/*.{js,ts} ./lib rsync -rptovR --ignore-missing-args ./user-code/middleware/./**/*.{js,ts} ./middleware - rsync -rptovR ./user-code/pages/./**/*.tsx ./pages + rsync -rptovR ./user-code/src/./**/*.tsx ./src rsync -rptovR ./user-code/stylesheets/./**/*.scss ./stylesheets - uses: ./.github/actions/warmup-remotejson-cache diff --git a/.github/workflows/codeowners-content-strategy.yml b/.github/workflows/codeowners-content-strategy.yml index d12b1d8f8cf5..8b777ebd1004 100644 --- a/.github/workflows/codeowners-content-strategy.yml +++ b/.github/workflows/codeowners-content-strategy.yml @@ -7,7 +7,8 @@ name: Codeowners - Content Strategy on: pull_request: paths: - - '/contributing/content-*.md' + - 'contributing/content-*.md' + - 'content/contributing/**.md' jobs: codeowners-content-strategy: diff --git a/.github/workflows/headless-tests.yml b/.github/workflows/headless-tests.yml index df3091d288c0..0ad5fb992f03 100644 --- a/.github/workflows/headless-tests.yml +++ b/.github/workflows/headless-tests.yml @@ -35,11 +35,7 @@ jobs: - uses: ./.github/actions/node-npm-setup - - name: Cache nextjs build - uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 - with: - path: .next/cache - key: ${{ runner.os }}-nextjs-${{ hashFiles('package*.json') }} + - uses: ./.github/actions/cache-nextjs - name: Run build script run: npm run build diff --git a/.github/workflows/keep-caches-warm.yml b/.github/workflows/keep-caches-warm.yml index 5dd816a7ea76..ca9aec975707 100644 --- a/.github/workflows/keep-caches-warm.yml +++ b/.github/workflows/keep-caches-warm.yml @@ -25,11 +25,7 @@ jobs: - uses: ./.github/actions/node-npm-setup - - name: Cache nextjs build - uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 - with: - path: .next/cache - key: ${{ runner.os }}-nextjs-${{ hashFiles('package*.json') }} + - uses: ./.github/actions/cache-nextjs - name: Build run: npm run build diff --git a/.github/workflows/local-dev.yml b/.github/workflows/local-dev.yml index 72cd6332f80f..747626a41ee6 100644 --- a/.github/workflows/local-dev.yml +++ b/.github/workflows/local-dev.yml @@ -21,7 +21,9 @@ jobs: - name: Check out repo uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab - - uses: ./.github/actions/node-npm-setup + # - uses: ./.github/actions/node-npm-setup + - name: Install dependencies + run: npm install # Note that we don't check out docs-early-access, Elasticsearch, # or any remote translations. Nothing fancy here! diff --git a/.github/workflows/no-response.yaml b/.github/workflows/no-response.yaml index 17673cd45143..7c7ebe80ae39 100644 --- a/.github/workflows/no-response.yaml +++ b/.github/workflows/no-response.yaml @@ -21,12 +21,17 @@ permissions: jobs: noResponse: runs-on: ubuntu-latest - if: github.repository == 'github/docs-internal' || github.repository == 'github/docs' + if: github.repository == 'github/docs' steps: - - uses: lee-dohm/no-response@9bb0a4b5e6a45046f00353d5de7d90fb8bd773bb + - uses: actions/stale@184e7afe930f6b5c7ce52c4b3f087692c6e912f3 with: - token: ${{ secrets.GITHUB_TOKEN }} - closeComment: > + repo-token: ${{ secrets.GITHUB_TOKEN }} + only-labels: 'more-information-needed' + days-before-stale: -1 + days-before-issue-stale: 14 + days-before-close: -1 + days-before-issue-close: 0 + close-issue-message: > This issue has been automatically closed because there has been no response to our request for more information from the original author. With only the information that is currently in the issue, we don't have enough information diff --git a/.github/workflows/orphaned-assets-check.yml b/.github/workflows/orphaned-assets-check.yml index 957c79b43341..14ce1a2f6da4 100644 --- a/.github/workflows/orphaned-assets-check.yml +++ b/.github/workflows/orphaned-assets-check.yml @@ -41,7 +41,10 @@ jobs: run: | set -e - ./script/find-orphaned-assets.js | xargs git rm + filesToRemove=`./script/find-orphaned-assets.js` + [ -z "$filesToRemove" ] && exit 0 + + ${filesToRemove} | xargs git rm git status diff --git a/.github/workflows/purge-old-deployment-environments.yml b/.github/workflows/purge-old-deployment-environments.yml new file mode 100644 index 000000000000..4eac599abe0d --- /dev/null +++ b/.github/workflows/purge-old-deployment-environments.yml @@ -0,0 +1,43 @@ +name: Purge old deployment environments + +# **What it does**: +# Deletes old deployment environments. A deployment environment exists +# for the sake of a Azure Preview environment. Those Azure Preview environments +# and cleaned up by a separate process. +# **Why we have it**: To keep things neat and tidy. +# **Who does it impact**: Docs engineering. + +on: + workflow_dispatch: + schedule: + - cron: '20 */3 * * *' # Run every 3 hours at 20 minutes past the hour + +permissions: + contents: write + +jobs: + purge-old-deployment-environments: + if: ${{ github.repository == 'github/docs-internal' || github.repository == 'github/docs' }} + runs-on: ubuntu-latest + steps: + - name: Checkout out repo + uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab + + - uses: ./.github/actions/node-npm-setup + + - name: Run purge script + if: ${{ env.FREEZE != 'true' }} + env: + GITHUB_REPOSITORY: ${{ github.repository }} + # Necessary to be able to delete deployment environments + GITHUB_TOKEN: ${{ secrets.DOCS_BOT_PAT_WORKFLOW_READORG }} + run: .github/actions-scripts/purge-old-deployment-environments.js + + - name: Send Slack notification if workflow fails + uses: someimportantcompany/github-actions-slack-message@1d367080235edfa53df415bd8e0bbab480f29bad + if: ${{ failure() && env.FREEZE != 'true' }} + with: + channel: ${{ secrets.DOCS_ALERTS_SLACK_CHANNEL_ID }} + bot-token: ${{ secrets.SLACK_DOCS_BOT_TOKEN }} + color: failure + text: The last "Purge old deployment environments" run for ${{github.repository}} failed. See https://github.com/${{github.repository}}/actions/workflows/purge-old-deployment-environments.yml diff --git a/.github/workflows/purge-old-workflow-runs.yml b/.github/workflows/purge-old-workflow-runs.yml new file mode 100644 index 000000000000..5da056c67428 --- /dev/null +++ b/.github/workflows/purge-old-workflow-runs.yml @@ -0,0 +1,40 @@ +name: Purge old workflow runs + +# **What it does**: Deletes really old workflow runs. +# **Why we have it**: To keep things neat and tidy. +# **Who does it impact**: Docs engineering. + +on: + workflow_dispatch: + schedule: + - cron: '20 */2 * * *' # Run every 2 hours at 20 minutes past the hour + +permissions: + contents: write + +jobs: + purge-old-workflow-runs: + if: ${{ github.repository == 'github/docs-internal' || github.repository == 'github/docs' }} + runs-on: ubuntu-latest + steps: + - name: Checkout out repo + uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab + + - uses: ./.github/actions/node-npm-setup + + - name: Run purge script + if: ${{ env.FREEZE != 'true' }} + env: + GITHUB_REPOSITORY: ${{ github.repository }} + # Necessary to be able to delete deployment environments + GITHUB_TOKEN: ${{ secrets.DOCS_BOT_PAT_WORKFLOW_READORG }} + run: .github/actions-scripts/purge-old-workflow-runs.js + + - name: Send Slack notification if workflow fails + uses: someimportantcompany/github-actions-slack-message@1d367080235edfa53df415bd8e0bbab480f29bad + if: ${{ failure() && env.FREEZE != 'true' }} + with: + channel: ${{ secrets.DOCS_ALERTS_SLACK_CHANNEL_ID }} + bot-token: ${{ secrets.SLACK_DOCS_BOT_TOKEN }} + color: failure + text: The last "Purge old workflow runs" run for ${{github.repository}} failed. See https://github.com/${{github.repository}}/actions/workflows/purge-old-workflow-runs.yml diff --git a/.github/workflows/repo-sync.yml b/.github/workflows/repo-sync.yml index 891923b51611..ed598fab8d6c 100644 --- a/.github/workflows/repo-sync.yml +++ b/.github/workflows/repo-sync.yml @@ -86,7 +86,8 @@ jobs: console.log('Created pull request successfully', pull.html_url) } catch (err) { // Don't error/alert if there's no commits to sync - if (err.message?.includes('No commits')) { + // Don't throw if > 100 pulls with same head_sha issue + if (err.message?.includes('No commits') || err.message?.includes('same head_sha')) { console.log(err.message) return } diff --git a/.github/workflows/sync-audit-logs.yml b/.github/workflows/sync-audit-logs.yml new file mode 100644 index 000000000000..85e6dde03fbb --- /dev/null +++ b/.github/workflows/sync-audit-logs.yml @@ -0,0 +1,119 @@ +name: Sync Audit Log data + +# **What it does**: This updates our Audit Logs schema. +# **Why we have it**: We want our Audit Logs up to date. +# **Who does it impact**: Docs engineering, people reading Audit Logs. + +on: + workflow_dispatch: + schedule: + - cron: '20 16 * * *' # Run every day at 16:20 UTC / 8:20 PST + +permissions: + contents: write + pull-requests: write + +# **IMPORTANT:** Do not change the FREEZE environment variable set here! +# This workflow runs on a recurring basis. To temporarily disable it (e.g., +# during a docs deployment freeze), add an Actions Secret to the repo settings +# called `FREEZE` with a value of `true`. To re-enable Audit Logs updates, simply +# delete that Secret from the repo settings. The environment variable here +# will duplicate that Secret's value for later evaluation. +env: + FREEZE: ${{ secrets.FREEZE }} + +# This allows a subsequently queued workflow run to interrupt previous runs +concurrency: + group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}' + cancel-in-progress: true + +jobs: + update-audit-log-files: + if: github.repository == 'github/docs-internal' + runs-on: ubuntu-latest + steps: + - if: ${{ env.FREEZE == 'true' }} + run: | + echo 'The repo is currently frozen! Exiting this workflow.' + exit 1 # prevents further steps from running + + - name: Checkout + uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab + + - uses: ./.github/actions/node-npm-setup + + - name: Run updater script + env: + # need to use a token from a user with access to github/audit-log-allowlists for this step + GITHUB_TOKEN: ${{ secrets.DOCS_BOT_PAT_WRITEORG_PROJECT }} + run: | + src/audit-logs/scripts/sync.js + + - name: Get the audit-log-allowlists SHA being synced + id: audit-log-allowlists + run: | + COMMIT_SHA=$(cat src/audit-logs/lib/config.json | jq -r '.sha') + echo "COMMIT_SHA=$COMMIT_SHA" >> $GITHUB_OUTPUT + echo "Commit SHA from audit-log-allowlists: $COMMIT_SHA" + if [ -z $COMMIT_SHA ]; then + echo "audit-log-allowlists commit SHA is empty!" + exit 1 + fi + + - name: Create and merge pull request + env: + # Needed for gh + GITHUB_TOKEN: ${{ secrets.DOCS_BOT_PAT_READPUBLICKEY }} + run: | + # If nothing to commit, exit now. It's fine. No orphans. + changes=$(git diff --name-only | wc -l) + untracked=$(git status --untracked-files --short | wc -l) + if [[ $changes -eq 0 ]] && [[ $untracked -eq 0 ]]; then + echo "There are no changes to commit after running src/rest/scripts/update-files.js. Exiting..." + exit 0 + fi + + git config --global user.name "docs-bot" + git config --global user.email "77750099+docs-bot@users.noreply.github.com" + + branchname=audit-logs-schema-update-${{ steps.audit-log-allowlists.outputs.COMMIT_SHA }} + + remotesha=$(git ls-remote --heads origin $branchname) + if [ -n "$remotesha" ]; then + # output is not empty, it means the remote branch exists + echo "Branch $branchname already exists in 'github/docs-internal'. Exiting..." + exit 0 + fi + + git checkout -b $branchname + git add . + git commit -m "Add updated audit log event data" + git push origin $branchname + + echo "Creating pull request..." + gh pr create \ + --title "Update audit log event data" \ + --body '👋 humans. This PR updates the audit log event data with the latest changes. (Synced from github/audit-log-allowlists) + + If CI does not pass or other problems arise, contact #docs-engineering on slack.' \ + --repo github/docs-internal \ + --label audit-log-pipeline + + # can't approve your own PR, approve with Actions + unset GITHUB_TOKEN + gh auth login --with-token <<< "${{ secrets.GITHUB_TOKEN }}" + gh pr review --approve + + # Actions can't merge the PR so back to docs-bot to merge the PR + unset GITHUB_TOKEN + gh auth login --with-token <<< "${{ secrets.DOCS_BOT_PAT_WORKFLOW_READORG }}" + gh pr merge --auto --delete-branch + + - name: Send Slack notification if workflow fails + uses: someimportantcompany/github-actions-slack-message@1d367080235edfa53df415bd8e0bbab480f29bad + if: ${{ failure() && env.FREEZE != 'true' }} + with: + channel: ${{ secrets.DOCS_ALERTS_SLACK_CHANNEL_ID }} + bot-token: ${{ secrets.SLACK_DOCS_BOT_TOKEN }} + color: failure + text: The last sync-audit-logs run for ${{github.repository}} failed. See https://github.com/${{github.repository}}/actions/workflows/sync-audit-logs.yml diff --git a/.github/workflows/sync-codeql-cli.yml b/.github/workflows/sync-codeql-cli.yml index 39720ec0b95c..b8ff0df33d8f 100644 --- a/.github/workflows/sync-codeql-cli.yml +++ b/.github/workflows/sync-codeql-cli.yml @@ -19,6 +19,15 @@ permissions: contents: write pull-requests: write +# **IMPORTANT:** Do not change the FREEZE environment variable set here! +# This workflow runs on a recurring basis. To temporarily disable it (e.g., +# during a docs deployment freeze), add an Actions Secret to the repo settings +# called `FREEZE` with a value of `true`. To re-enable Audit Logs updates, simply +# delete that Secret from the repo settings. The environment variable here +# will duplicate that Secret's value for later evaluation. +env: + FREEZE: ${{ secrets.FREEZE }} + # This allows a subsequently queued workflow run to interrupt previous runs concurrency: group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}' diff --git a/.github/workflows/sync-openapi.yml b/.github/workflows/sync-openapi.yml index e98fb9c6acab..1bc79b6c9e82 100644 --- a/.github/workflows/sync-openapi.yml +++ b/.github/workflows/sync-openapi.yml @@ -19,6 +19,15 @@ permissions: contents: write pull-requests: write +# **IMPORTANT:** Do not change the FREEZE environment variable set here! +# This workflow runs on a recurring basis. To temporarily disable it (e.g., +# during a docs deployment freeze), add an Actions Secret to the repo settings +# called `FREEZE` with a value of `true`. To re-enable Audit Logs updates, simply +# delete that Secret from the repo settings. The environment variable here +# will duplicate that Secret's value for later evaluation. +env: + FREEZE: ${{ secrets.FREEZE }} + # This allows a subsequently queued workflow run to interrupt previous runs concurrency: group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}' diff --git a/.github/workflows/sync-search-elasticsearch.yml b/.github/workflows/sync-search-elasticsearch.yml index bb8683e95f8d..e4d4c7dd89e6 100644 --- a/.github/workflows/sync-search-elasticsearch.yml +++ b/.github/workflows/sync-search-elasticsearch.yml @@ -126,11 +126,7 @@ jobs: - uses: ./.github/actions/node-npm-setup - - name: Cache nextjs build - uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 - with: - path: .next/cache - key: ${{ runner.os }}-nextjs-${{ hashFiles('package*.json') }} + - uses: ./.github/actions/cache-nextjs - name: Run build scripts run: npm run build diff --git a/.github/workflows/sync-search-pr.yml b/.github/workflows/sync-search-pr.yml index db7a5fccf1ee..458b0ab856ea 100644 --- a/.github/workflows/sync-search-pr.yml +++ b/.github/workflows/sync-search-pr.yml @@ -51,11 +51,7 @@ jobs: - uses: ./.github/actions/node-npm-setup - - name: Cache nextjs build - uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 - with: - path: .next/cache - key: ${{ runner.os }}-nextjs-${{ hashFiles('package*.json') }} + - uses: ./.github/actions/cache-nextjs - name: Build run: npm run build diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 666e7745462c..3be4e7bdab55 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -39,6 +39,8 @@ jobs: // one has ability to clone the remote (private) translations // repos. // You can run multiple paths per suite as space-separated in `path`. + // Note that *if you add* to this, remember to also add that + // to the **required checks** in the branch protection rules. return [ { name: 'automated-pipelines', path: 'src/automated-pipelines/tests', }, { name: 'content', path: 'tests/content', }, @@ -62,6 +64,7 @@ jobs: context.payload.repository.full_name === 'github/docs-internal' && { name: 'translations', path: 'tests/translations', }, { name: 'unit', path: 'tests/unit', }, + // { name: 'tools', path: 'src/tools/tests', } { name: 'webhooks', path: 'src/webhooks/tests', }, ].filter(Boolean) @@ -151,11 +154,7 @@ jobs: echo __ format, write to get_diff_files.txt __ echo $DIFF | tr '\n' ' ' > get_diff_files.txt - - name: Cache nextjs build - uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 - with: - path: .next/cache - key: ${{ runner.os }}-nextjs-${{ hashFiles('package*.json') }} + - uses: ./.github/actions/cache-nextjs - name: Run build script run: npm run build diff --git a/.github/workflows/translation-health-report.yml b/.github/workflows/translation-health-report.yml index 03f47b831270..613f73f5a198 100644 --- a/.github/workflows/translation-health-report.yml +++ b/.github/workflows/translation-health-report.yml @@ -101,7 +101,7 @@ jobs: # https://learn.microsoft.com/en-us/cli/azure/storage/blob?view=azure-cli-latest#az-storage-blob-upload # https://github.com/marketplace/actions/azure-cli-action - name: Upload latest to Azure blob storage - uses: azure/CLI@d88d5767d50cde2679128b45d287ec5b98df892e + uses: azure/CLI@b0e31ae20280d899279f14c36e877b4c6916e2d3 # pin @v1.0.8 with: inlineScript: | az storage blob upload \ @@ -113,7 +113,7 @@ jobs: --overwrite true - name: Upload date formatted to Azure blob storage - uses: azure/CLI@d88d5767d50cde2679128b45d287ec5b98df892e + uses: azure/CLI@b0e31ae20280d899279f14c36e877b4c6916e2d3 # pin @v1.0.8 with: inlineScript: | # Write a date formatted for historical reference diff --git a/.github/workflows/triage-stale-check.yml b/.github/workflows/triage-stale-check.yml index e287642c6e79..9444b6ea34d0 100644 --- a/.github/workflows/triage-stale-check.yml +++ b/.github/workflows/triage-stale-check.yml @@ -6,7 +6,7 @@ name: Public Repo Stale Check on: schedule: - - cron: '20 16 * * *' # Run every day at 16:20 UTC / 8:20 PST + - cron: '20 16 * * 1-5' # Run every weekday at 16:20 UTC / 8:20 PST permissions: issues: write @@ -21,7 +21,7 @@ jobs: - uses: actions/stale@1160a2240286f5da8ec72b1c0816ce2481aabf84 with: repo-token: ${{ secrets.GITHUB_TOKEN }} - stale-issue-message: 'A stale label has been added to this issue becuase it has been open for 60 days with no activity. To keep this issue open, add a comment within 3 days.' + stale-issue-message: 'A stale label has been added to this issue because it has been open for 60 days with no activity. To keep this issue open, add a comment within 3 days.' days-before-issue-stale: 60 days-before-issue-close: 3 exempt-issue-labels: 'help wanted,never-stale,waiting for review' @@ -42,7 +42,7 @@ jobs: days-before-pr-close: -1 # Never close remove-stale-when-updated: false operations-per-run: 100 - only-labels: 'waiting for review' + only-pr-labels: 'waiting for review' # The hope is that by setting the stale-pr-label to the same label # as the label that the stale check looks for, this will result in # a comment being posted every 14 days as an infinite loop, which is what diff --git a/.npmrc b/.npmrc index e70ec7c9a1b5..899683d4ada7 100644 --- a/.npmrc +++ b/.npmrc @@ -1,6 +1,3 @@ -# skip installing optional dependencies to avoid issues with troublesome `fsevents` module -omit=optional - # For 15-25% faster npm install # https://www.peterbe.com/plog/benchmarking-npm-install-with-or-without-audit # Also we have Dependabot alerts configured in the GitHub repo. diff --git a/Dockerfile b/Dockerfile index 30e16ac7a8a7..28a024c94fad 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,7 +5,7 @@ # -------------------------------------------------------------------------------- # To update the sha, run `docker pull node:$VERSION-alpine` # look for something like: `Digest: sha256:0123456789abcdef` -FROM node:18.16-alpine@sha256:1ccc70acda680aa4ba47f53e7c40b2d4d6892de74817128e0662d32647dd7f4d as base +FROM node:18-alpine@sha256:3482a20c97e401b56ac50ba8920cc7b5b2022bfc6aa7d4e4c231755770cf892f as base # This directory is owned by the node user ARG APP_HOME=/home/node/app @@ -45,7 +45,6 @@ RUN npm prune --production FROM all_deps as builder COPY stylesheets ./stylesheets -COPY pages ./pages COPY components ./components COPY lib ./lib COPY src ./src diff --git a/assets/ghes-3.10-opentelemetry-attribute-mappings.csv b/assets/ghes-3.10-opentelemetry-attribute-mappings.csv new file mode 100644 index 000000000000..8523a48d7ee5 --- /dev/null +++ b/assets/ghes-3.10-opentelemetry-attribute-mappings.csv @@ -0,0 +1,159 @@ +Category,Old Attribute,New Attribute +API,reason,gh.api.error_reason +API,resource,gh.api.resource_type +API,graphql,gh.api.graphql +API,graphql_time,graphql.time +API,graphql_query_byte_size,graphql.query.byte_size +API,graphql_variables_byte_size,graphql.variables.byte_size +API,graphql_operation_name,graphql.operation.name +API,graphql_origin,graphql.origin +API,graphql_success,graphql.success +API,graphql_query_depth,graphql.query.depth +API,graphql_query_complexity,graphql.query.complexity +API,graphql_schema,graphql.schema +API,graphql_query_hash,graphql.query.hash +API,graphql_variables_hash,graphql.variables.hash +API,graphql_query_name,graphql.query.name +API,graphql_operation_id,graphql.operation.id +Repos,rename_id,gh.branch_protection_rule.repository_branch_renamer.id +Repos,end_date,gh.repo.purge.end_date +Repos,deleted_count,gh.repo.mirror.deleted_count +CodeScanning,pull_request_id,gh.pull_request.id +CodeScanning,pull_request_number,gh.pull_request.number +CodeScanning,pull_request_head,gh.pull_request.head_sha +CodeScanning,alerts_count,gh.code_scanning.alert.count +CodeScanning,file_path,gh.code_scanning.alert.file_path +CodeScanning,alert_number,gh.code_scanning.alert.number +CodeScanning,category,gh.code_scanning.analysis.category +CodeScanning,check_run_id,gh.check_run.id +CodeScanning,alerts_in_the_diff,gh.code_scanning.diff.alerts.in +CodeScanning,alerts_out_the_diff,gh.code_scanning.diff.alerts.out +CodeScanning,onboarding_comment_posted,gh.code_scanning.onboarding_comment.posted +CodeScanning,onboarding_comments_count,gh.code_scanning.onboarding_comments.count +CodeScanning,tool_name,gh.code_scanning.tool +CodeScanning,code_scanning_review_comment,gh.code_scanning.review_comment.id +CodeScanning,head_commit_oid,gh.pull_request.head_sha +CodeScanning,merge_commit_oid,gh.pull_request.merge_sha +CodeScanning,checkrun_previously_completed,gh.check_run.previously_completed +CodeScanning,job_reason,gh.code_scanning.job.reason +CodeScanning,time_in_secs,gh.code_scanning.job.time +CodeScanning,code_scanning_check_suite,gh.check_suite.id +CodeScanning,base_ref_name,gh.pull_request.base_ref.name +CodeScanning,pull_request_old,gh.pull_request.id.old +CodeScanning,pull_request_new,gh.pull_request.id.new +CodeScanning,repo_nwo,gh.repo.nwo +CodeScanning,skip_check_runs,gh.code_scanning.skip_check_runs +CodeScanning,refs,git.refs +CodeScanning,ref,git.ref +CodeScanning,commit_oid,git.commit.oid +CodeScanning,sarif_size,gh.code_scanning.sarif.size +CodeScanning,sarif_id,gh.code_scanning.sarif.id +CodeScanning,sarif_uri,gh.code_scanning.sarif.uri +CodeScanning,old_base_ref,gh.pull_request.base_ref.old +CodeScanning,new_base_ref,gh.pull_request.base_ref.new +CodeScanning,replication_lag,gh.freno.replication_delay +CodeScanning,key,gh.kv.key +External Identities,external_id,gh.external_identities.external_id +External Identities,oid,gh.external_identities.oid +External Identities,refresh_token,gh.external_identities.refresh_token +External Identities,email,gh.external_identities.email +External Identities,type,gh.external_identities.type +External Identities,key,gh.external_identities.cache_key +External Identities,body,gh.external_identities.cache_body +External Identities,expires,gh.external_identities.cache_expires +External Identities,cap_message,gh.external_identities.cap_message +External Identities,token_url,gh.external_identities.token_url +External Identities,credential_auth_org_id,gh.external_identities.credential_auth_org_id +External Identities,credential_auth_exists_for_target_org,gh.external_identities.credential_auth_exists_for_target_org +External Identities,resource_type,gh.external_identities.resource_type +External Identities,can_self_identify_internal_or_public,gh.external_identities.can_self_identify_internal_or_public +Memex,column_id,gh.memex.column.id +Memex,class_name,code.namespace +Memex,actor_id,gh.actor.id +Memex,project_item_id,gh.memex.item.id +Memex,value,gh.memex.column.value +Memex,result,gh.memex.column.update_result +Memex,memex_id,gh.memex.id +Memex,ns,code.namespace +Memex,fn,code.function +Memex,result,gh.job.result +Memex,on_tasklist_waitlist,gh.memex.tasklist_waitlist +Memex,id,gh.membership.id +Memex,member_id,gh.membership.member.id +Notifyd,subject_type,gh.notifyd.subject.type +Webhooks,file,code.filepath +Webhooks,catalog_service,gh.catalog_service +Webhooks,request_id,gh.request_id +Webhooks,fn,code.namespace & code.function +Webhooks,event,gh.webhook.event_type +Webhooks,action,gh.webhook.action +Webhooks,method,code.function +Webhooks,event_type,gh.webhook.event_type +Webhooks,model_name,code.namespace +Webhooks,id,gh.webhook.id +Webhooks,push_sha,gh.webhook.push_sha +Webhooks,parent,gh.webhook.parent +Webhooks,guid,gh.webhook.delivery_guid +Webhooks,hook_ids,gh.webhooks +Webhooks,repo_id,gh.repo.id +Webhooks,org_id,gh.org.id +Webhooks,user_id,gh.user.id +Webhooks,webhook_delivery_id,gh.webhook.delivery_guid +Webhooks,repo_database_id,gh.repo.id +Webhooks,repo_global_id,gh.repo.global_id +Webhooks,event_at,gh.webhook.reminder_event.event_at +Webhooks,event_type_db,gh.webhook.reminder_event.event_type_db +Webhooks,personal,gh.webhook.reminder_event.reminder_event.personal +Webhooks,pull_request_ids,gh.pull_request.id +Webhooks,pull_request_ids_for_author,pull_request_ids_for_author +Webhooks,actor_id,gh.actor.id +Webhooks,actor_login,gh.actor.login +Webhooks,user_login,gh.user.login +Webhooks,path,code.filepath +Webhooks,enterprise,gh.webhook.is_enterprise +Webhooks,job,gh.job.name +Webhooks,class,exception.type +Webhooks,payload_size,gh.webhook.payload_size +Webhooks,target_repository_nwo,gh.repo.name_with_owner +Webhooks,target_repository_id,gh.repo.id +Webhooks,target_organization_id,gh.org.id +Webhooks,target_organization_name,gh.org.name +Scheduled Reminders,transaction_id,gh.scheduled_reminders.transaction_id +Camo,request_id,gh.request.id +Camo,hmac,gh.camo.request_hmac +Camo,url,gh.camo.encoded_url +Camo,referer,gh.request.referer +Camo,error,gh.camo.error +Camo,dns-time,gh.camo.dns.time +Camo,resp,gh.camo.upstream.response +Camo,len,gh.camo.upstream.response.content_length +Camo,request,gh.camo.upstream.request_buf +Camo,response,gh.camo.upstream.response_buf +Camo,code,gh.camo.upstream.response.code +Camo,resp,gh.camo.response +Camo,ctype,gh.camo.upstream.response.content_type +Camo,pem,gh.camo.certfile.name +Notifications,fn,code.function +Notifications,id,gh.notifications.rollup_summary.id +Notifications,fn,code.function +repo migration,fn,code.namespace +repo migration,migration_guid,gh.repo_migration.migration_guid +repo migration,source_url,gh.repo_migration.model_source_url +repo migration,resolution,gh.repo_migration.resolution +repo migration,model_name,gh.repo_migration.model_name +repo migration,migratable_resource_id,gh.repo_migration.migratable_resource_id +repo migration,model_id,gh.repo_migration.model_id +repo migration,source_owner,gh.repo_migration.source_owner +repo migration,source_repository,gh.repo_migration.source_repository +repo migration,target_url,gh.repo_migration.model_target_url +repo migration,translator_url,gh.repo_migration.model_translator_url +repo migration,state,gh.repo_migration.model_state +repo migration,asset_storage,gh.repo_migration.asset_storage.type +repo migration,asset_type,gh.repo_migration.asset_storage.asset_type +repo migration,asset_id,gh.repo_migration.asset_storage.asset_id +repo migration,http_response_code,gh.repo_migration.asset_storage.http_response_code +repo migration,field,gh.repo_migration.field +repo migration,state,gh.repo_migration.state +repo migration,url,gh.repo_migration.repository.repository_url +repo migration,validation_error,validation_error +repo migration,code,code \ No newline at end of file diff --git a/assets/images/contributing/commonmark-lists.png b/assets/images/contributing/commonmark-lists.png deleted file mode 100644 index e0e8c81dc658..000000000000 Binary files a/assets/images/contributing/commonmark-lists.png and /dev/null differ diff --git a/assets/images/contributing/contribution_cta.png b/assets/images/contributing/contribution_cta.png deleted file mode 100644 index 9c3932408487..000000000000 Binary files a/assets/images/contributing/contribution_cta.png and /dev/null differ diff --git a/assets/images/contributing/fastly_purge.jpg b/assets/images/contributing/fastly_purge.jpg deleted file mode 100644 index 9ade3b2b7597..000000000000 Binary files a/assets/images/contributing/fastly_purge.jpg and /dev/null differ diff --git a/assets/images/contributing/fastly_purge_url.jpg b/assets/images/contributing/fastly_purge_url.jpg deleted file mode 100644 index ff74b8f5e6e1..000000000000 Binary files a/assets/images/contributing/fastly_purge_url.jpg and /dev/null differ diff --git a/assets/images/contributing/issue-comment-close-button.png b/assets/images/contributing/issue-comment-close-button.png deleted file mode 100644 index 84e4cf377a75..000000000000 Binary files a/assets/images/contributing/issue-comment-close-button.png and /dev/null differ diff --git a/assets/images/contributing/snagit-theme-github-docs.snagtheme b/assets/images/contributing/snagit-theme-github-docs.snagtheme deleted file mode 100644 index 1a33accbf51d..000000000000 --- a/assets/images/contributing/snagit-theme-github-docs.snagtheme +++ /dev/null @@ -1,1364 +0,0 @@ -{ - "ThemeColors" : [ - "#FFBC4C00" - ], - "Name" : "GitHub Docs", - "Version" : "3.0", - "QuickStyles" : [ - { - "ShadowBlur" : 2, - "IsLocked" : 0, - "PointsArray" : [ - "5.000000,-12.000000", - "52.000000,-49.000000" - ], - "StrokeWidth" : 10, - "Opacity" : 100, - "ArrowStart" : "Round", - "DropShadowEnabled" : true, - "ArrowEnd" : "TaperArrow", - "IgnoresUndoAll" : false, - "ShadowDirectionX" : 0, - "ShadowColor" : "#FF000000", - "ObjectPriority" : 0, - "BezierCurve" : false, - "ObjectID" : "17CEA640-0274-4C4B-9165-228464F08270", - "StartPoint" : "5.000000,-12.000000", - "EndPoint" : "52.000000,-49.000000", - "ForegroundColor" : "#FFBC4C00", - "IsFlattened" : false, - "Anchored" : false, - "ArrowEndWidth" : 2.940000057220459, - "ToolMode" : "Arrow", - "ShadowDirectionY" : 3, - "AspectRatio" : 1, - "ShadowOpacity" : 60, - "ArrowStartWidth" : 3, - "DropZoneGroupId" : 0, - "RotationAngle" : 0, - "DashType" : "Solid", - "BackgroundColor" : "#00000000" - }, - { - "ShadowBlur" : 2, - "IsLocked" : 0, - "PointsArray" : [ - "5.000000,-12.000000", - "52.000000,-49.000000" - ], - "StrokeWidth" : 7, - "Opacity" : 100, - "ArrowStart" : "Round", - "DropShadowEnabled" : true, - "ArrowEnd" : "Round", - "IgnoresUndoAll" : false, - "ShadowDirectionX" : 0, - "ShadowColor" : "#FF000000", - "ObjectPriority" : 0, - "BezierCurve" : false, - "ObjectID" : "712C5106-E807-4586-A945-D0C4F0BE29A1", - "StartPoint" : "5.000000,-12.000000", - "EndPoint" : "52.000000,-49.000000", - "ForegroundColor" : "#FFBC4C00", - "IsFlattened" : false, - "Anchored" : false, - "ArrowEndWidth" : 3, - "ToolMode" : "Arrow", - "ShadowDirectionY" : 3, - "AspectRatio" : 1, - "ShadowOpacity" : 60, - "ArrowStartWidth" : 3, - "DropZoneGroupId" : 0, - "RotationAngle" : 0, - "DashType" : "Solid", - "BackgroundColor" : "#00000000" - }, - { - "ShadowBlur" : 2, - "IsLocked" : 0, - "PointsArray" : [ - "5.000000,-12.000000", - "52.000000,-49.000000" - ], - "StrokeWidth" : 0, - "Opacity" : 100, - "GlobalColorFill" : false, - "DropShadowEnabled" : true, - "IgnoresUndoAll" : false, - "ShadowDirectionX" : 3, - "ShadowColor" : "#FF000000", - "ObjectPriority" : 0, - "ObjectID" : "AE27B1C6-C4A0-434C-B0E0-A2BAF8D3402E", - "Tolerance" : 15.000000953674316, - "StartPoint" : "5.000000,-12.000000", - "EndPoint" : "52.000000,-49.000000", - "ForegroundColor" : "#FFBC4C00", - "IsFlattened" : false, - "Anchored" : false, - "ToolMode" : "Fill", - "ShadowDirectionY" : 3, - "AspectRatio" : 1, - "ShadowOpacity" : 60, - "DropZoneGroupId" : 0, - "RotationAngle" : 0, - "DashType" : "Solid", - "BackgroundColor" : "#FFBC4C00" - }, - { - "Smoothing" : false, - "ShadowBlur" : 2, - "IsLocked" : 0, - "PointsArray" : [ - "5.000000,-12.000000", - "52.000000,-49.000000" - ], - "StrokeWidth" : 7, - "Opacity" : 100, - "DropShadowEnabled" : true, - "IgnoresUndoAll" : false, - "ShadowDirectionX" : 0, - "ShadowColor" : "#FF000000", - "ObjectPriority" : 0, - "ObjectID" : "85A441C4-5095-4BE1-BC5E-B0EB44A9E4AB", - "StartPoint" : "5.000000,-12.000000", - "EndPoint" : "52.000000,-49.000000", - "ForegroundColor" : "#FFBC4C00", - "IsFlattened" : false, - "Anchored" : false, - "ToolMode" : "Pen", - "ShadowDirectionY" : 3, - "AspectRatio" : 1, - "ShadowOpacity" : 60, - "PenShape" : "Round", - "DropZoneGroupId" : 0, - "RotationAngle" : 0, - "DashType" : "Solid", - "BackgroundColor" : "#FFFFFFFF" - }, - { - "ShadowBlur" : 2, - "IsLocked" : 0, - "PointsArray" : [ - "5.000000,-12.000000", - "52.000000,-49.000000" - ], - "StrokeWidth" : 0, - "Opacity" : 100, - "DropShadowEnabled" : true, - "IgnoresUndoAll" : false, - "ShadowDirectionX" : 3, - "ShadowColor" : "#FF000000", - "ObjectPriority" : 0, - "ObjectID" : "C30D6917-3D68-41DB-8FB3-73F9A86374A8", - "StartPoint" : "5.000000,-12.000000", - "EndPoint" : "52.000000,-49.000000", - "ForegroundColor" : "#FFFFE895", - "IsFlattened" : false, - "Anchored" : false, - "ToolMode" : "Highlight", - "ShadowDirectionY" : 3, - "AspectRatio" : 1, - "ShadowOpacity" : 60, - "DropZoneGroupId" : 0, - "RotationAngle" : 0, - "DashType" : "Solid", - "BackgroundColor" : "#FFBC4C00" - }, - { - "ShadowBlur" : 2, - "IsLocked" : 0, - "PointsArray" : [ - "7.500000,-9.500000", - "49.500000,-51.500000" - ], - "StrokeWidth" : 5, - "Opacity" : 100, - "Image" : "JVBERi0xLjMKCjEgMCBvYmoKPDwvTWV0YWRhdGEgMiAwIFIvUGFnZXMgMyAwIFIvVHlwZS9DYXRhbG9nPj4KZW5kb2JqCjMgMCBvYmoKPDwvQ291bnQgMS9LaWRzWzUgMCBSXS9UeXBlL1BhZ2VzPj4KZW5kb2JqCjUgMCBvYmoKPDwvQXJ0Qm94WzEuMCAxLjAgNDEuMCA0MS4wXS9CbGVlZEJveFswLjAgMC4wIDQyLjAgNDIuMF0vQ29udGVudHMgNiAwIFIvTWVkaWFCb3hbMC4wIDAuMCA0Mi4wIDQyLjBdL1BhcmVudCAzIDAgUi9SZXNvdXJjZXM8PC9FeHRHU3RhdGU8PC9HUzAgNyAwIFI+Pi9Qcm9wZXJ0aWVzPDwvTUMwIDggMCBSPj4+Pi9UcmltQm94WzAuMCAwLjAgNDIuMCA0Mi4wXS9UeXBlL1BhZ2U+PgplbmRvYmoKNiAwIG9iago8PC9MZW5ndGggMjMyPj5zdHJlYW0KL0xheWVyIC9NQzAgQkRDIApxCjAgNDIgNDIgLTQyIHJlClcgbgowLjczNzI1NSAwLjI5ODAzOSAwLjAwMDAwMCByZwovR1MwIGdzCnEgMSAwIDAgMSA0MSAyMSBjbQowIDAgbQowIC0xMS4wNDYgLTguOTU0IC0yMCAtMjAgLTIwIGMKLTMxLjA0NiAtMjAgLTQwIC0xMS4wNDYgLTQwIDAgYwotNDAgMTEuMDQ2IC0zMS4wNDYgMjAgLTIwIDIwIGMKLTguOTU0IDIwIDAgMTEuMDQ2IDAgMCBjCmYKUQpFTUMgClEKCmVuZHN0cmVhbQplbmRvYmoKOCAwIG9iago8PC9Db2xvclsyMDIyNCAzMjc2OCA2NTUzNV0vRGltbWVkIGZhbHNlL0VkaXRhYmxlIHRydWUvUHJldmlldyB0cnVlL1ByaW50ZWQgdHJ1ZS9UaXRsZShMYXllciAxKS9WaXNpYmxlIHRydWU+PgplbmRvYmoKNyAwIG9iago8PC9BSVMgZmFsc2UvQk0vTm9ybWFsL0NBIDEuMC9PUCBmYWxzZS9PUE0gMS9TQSB0cnVlL1NNYXNrL05vbmUvVHlwZS9FeHRHU3RhdGUvY2EgMS4wL29wIGZhbHNlPj4KZW5kb2JqCjkgMCBvYmoKPDwvQ3JlYXRpb25EYXRlKEQ6MjAxMzExMjUxNjA2MDQtMDUnMDAnKS9DcmVhdG9yKEFkb2JlIElsbHVzdHJhdG9yIENDIFwoTWFjaW50b3NoXCkpL01vZERhdGUoRDoyMDEzMTEyNTE2MDYwNC0wNScwMCcpL1Byb2R1Y2VyKEFkb2JlIFBERiBsaWJyYXJ5IDEwLjAxKS9UaXRsZShDSVJDTEUpPj4KZW5kb2JqCnhyZWYKMCAxMAowMDAwMDAwMDAwIDY1NTM1IGYKMDAwMDAwMDAxNiAwMDAwMCBuCjAwMDAwMDAwNzYgMDAwMDAgbgowMDAwMDQzOTEyIDAwMDAwIG4KMDAwMDAwMDAwMCAwMDAwMCBmCjAwMDAwNDM5NjMgMDAwMDAgbgowMDAwMDQ0MTkzIDAwMDAwIG4KMDAwMDA0NDU3OCAwMDAwMCBuCjAwMDAwNDQ0NTIgMDAwMDAgbgowMDAwMDQ0NjkwIDAwMDAwIG4KdHJhaWxlcgo8PC9TaXplIDEwL1Jvb3QgMSAwIFIvSW5mbyA5IDAgUi9JRFs8NDVCNDRDRUMwNzdDNEYwMzkzRUUwRUZCMUU3OTlGQUI+PEU1OEVDMkFFMUU5NjRGMjhCOEIxQjA0N0QzOTI1QjRDPl0+PgpzdGFydHhyZWYKNDQ4NzMKJSVFT0YK", - "DropShadowEnabled" : true, - "PlainText" : "A", - "IgnoresUndoAll" : false, - "ShadowDirectionX" : 0, - "NeedsCursorReplacement" : false, - "ShadowColor" : "#FF000000", - "ObjectPriority" : 0, - "ObjectID" : "ADDBF9E9-C9B2-4992-BEF6-ACB84D86C771", - "StepStyle" : "Circle", - "StepSequenceType" : "Number", - "StartPoint" : "7.500000,-9.500000", - "EndPoint" : "49.500000,-51.500000", - "ForegroundColor" : "#FFFFFFFF", - "IsFlattened" : false, - "Anchored" : false, - "ToolMode" : "Step", - "ShadowDirectionY" : 3, - "AspectRatio" : 1, - "ShadowOpacity" : 60, - "DropZoneGroupId" : 0, - "RotationAngle" : 0, - "DashType" : "Solid", - "BackgroundColor" : "#FFBC4C00" - }, - { - "ShadowBlur" : 2, - "IsLocked" : 0, - "PointsArray" : [ - "5.000000,-12.000000", - "52.000000,-49.000000" - ], - "StrokeWidth" : 5, - "Opacity" : 100, - "Image" : "JVBERi0xLjMKCjEgMCBvYmoKPDwvTWV0YWRhdGEgMiAwIFIvUGFnZXMgMyAwIFIvVHlwZS9DYXRhbG9nPj4KZW5kb2JqCjMgMCBvYmoKPDwvQ291bnQgMS9LaWRzWzUgMCBSXS9UeXBlL1BhZ2VzPj4KZW5kb2JqCjUgMCBvYmoKPDwvQXJ0Qm94WzAuOTk5OTg1IDAuOTk5OTg1IDYzLjAgNDEuMF0vQmxlZWRCb3hbMC4wIDAuMCA2NC4wIDQyLjBdL0NvbnRlbnRzIDYgMCBSL01lZGlhQm94WzAuMCAwLjAgNjQuMCA0Mi4wXS9QYXJlbnQgMyAwIFIvUmVzb3VyY2VzPDwvRXh0R1N0YXRlPDwvR1MwIDcgMCBSPj4vUHJvcGVydGllczw8L01DMCA4IDAgUj4+Pj4vVHJpbUJveFswLjAgMC4wIDY0LjAgNDIuMF0vVHlwZS9QYWdlPj4KZW5kb2JqCjYgMCBvYmoKPDwvTGVuZ3RoIDIyND4+c3RyZWFtCi9MYXllciAvTUMwIEJEQyAKcQowIDQyIDY0IC00MiByZQpXIG4KMC43MzcyNTUgMC4yOTgwMzkgMC4wMDAwMDAgcmcKL0dTMCBncwpxIDEgMCAwIDEgNjMgMjEgY20KMCAwIG0KLTI5LjkxOSAtMjAgLTQxLjMzMyAtMjAgdgotNTIuNzQ3IC0yMCAtNjIgLTExLjA0NiAtNjIgMCBjCi02MiAxMS4wNDYgLTUyLjc0NyAyMCAtNDEuMzMzIDIwIGMKLTI5LjkxOSAyMCAwIDAgeQpmKgpRCkVNQyAKUQoKZW5kc3RyZWFtCmVuZG9iago4IDAgb2JqCjw8L0NvbG9yWzIwMjI0IDMyNzY4IDY1NTM1XS9EaW1tZWQgZmFsc2UvRWRpdGFibGUgdHJ1ZS9QcmV2aWV3IHRydWUvUHJpbnRlZCB0cnVlL1RpdGxlKExheWVyIDEpL1Zpc2libGUgdHJ1ZT4+CmVuZG9iago3IDAgb2JqCjw8L0FJUyBmYWxzZS9CTS9Ob3JtYWwvQ0EgMS4wL09QIGZhbHNlL09QTSAxL1NBIHRydWUvU01hc2svTm9uZS9UeXBlL0V4dEdTdGF0ZS9jYSAxLjAvb3AgZmFsc2U+PgplbmRvYmoKOSAwIG9iago8PC9DcmVhdGlvbkRhdGUoRDoyMDEzMTEyNTE2MDE1MC0wNScwMCcpL0NyZWF0b3IoQWRvYmUgSWxsdXN0cmF0b3IgQ0MgXChNYWNpbnRvc2hcKSkvTW9kRGF0ZShEOjIwMTMxMTI1MTYwMTUwLTA1JzAwJykvUHJvZHVjZXIoQWRvYmUgUERGIGxpYnJhcnkgMTAuMDEpL1RpdGxlKENpcmNsZSBQb2ludGVyKT4+CmVuZG9iagp4cmVmCjAgMTAKMDAwMDAwMDAwMCA2NTUzNSBmCjAwMDAwMDAwMTYgMDAwMDAgbgowMDAwMDAwMDc2IDAwMDAwIG4KMDAwMDA0MTYzNSAwMDAwMCBuCjAwMDAwMDAwMDAgMDAwMDAgZgowMDAwMDQxNjg2IDAwMDAwIG4KMDAwMDA0MTkyNiAwMDAwMCBuCjAwMDAwNDIzMDMgMDAwMDAgbgowMDAwMDQyMTc3IDAwMDAwIG4KMDAwMDA0MjQxNSAwMDAwMCBuCnRyYWlsZXIKPDwvU2l6ZSAxMC9Sb290IDEgMCBSL0luZm8gOSAwIFIvSURbPDkwRjY3QjFBNkI2NDQyQjY5RkJBNDZDMTJDQkQ2OTk1PjwyQTVCNTYxOTE3QTM0MDI2ODBFMzFEQkU3OUFEMkMzRj5dPj4Kc3RhcnR4cmVmCjQyNjA2CiUlRU9GCg==", - "DropShadowEnabled" : true, - "PlainText" : "A", - "IgnoresUndoAll" : false, - "ShadowDirectionX" : 0, - "NeedsCursorReplacement" : false, - "ShadowColor" : "#FF000000", - "ObjectPriority" : 0, - "ObjectID" : "88566CF8-0F6B-40E9-B1D3-EEF7EA53C1F6", - "StepStyle" : "CirclePointed", - "StepSequenceType" : "Number", - "StartPoint" : "5.000000,-12.000000", - "EndPoint" : "52.000000,-49.000000", - "ForegroundColor" : "#FFFFFFFF", - "IsFlattened" : false, - "Anchored" : false, - "ToolMode" : "Step", - "ShadowDirectionY" : 3, - "AspectRatio" : 1, - "ShadowOpacity" : 60, - "DropZoneGroupId" : 0, - "RotationAngle" : 0, - "DashType" : "Solid", - "BackgroundColor" : "#FFBC4C00" - }, - { - "ShadowBlur" : 2, - "IsLocked" : 0, - "PointsArray" : [ - "5.000000,-12.000000", - "52.000000,-49.000000" - ], - "StrokeWidth" : 6, - "Opacity" : 100, - "DropShadowEnabled" : true, - "IgnoresUndoAll" : false, - "ShadowDirectionX" : 3, - "CornerRadiusRatio" : 0.05000000074505806, - "ShadowColor" : "#FF000000", - "ObjectPriority" : 0, - "MagnifyConnectorType" : "MagnifyConnectorTypeSingleLine", - "ObjectID" : "9DF0A9C4-5656-4705-86D0-F7581737DD63", - "StartPoint" : "5.000000,-12.000000", - "EndPoint" : "52.000000,-49.000000", - "MagnifyScale" : 200, - "ForegroundColor" : "#FFBC4C00", - "IsFlattened" : false, - "Anchored" : false, - "ToolShape" : "Ellipse", - "ToolMode" : "Magnify", - "ShadowDirectionY" : 3, - "AspectRatio" : 1, - "ShadowOpacity" : 60, - "DropZoneGroupId" : 0, - "RotationAngle" : 0, - "DashType" : "Solid", - "MagnifyOffset" : "0.000000,-0.000000", - "BackgroundColor" : "#FFFFFFFF" - }, - { - "TextOutlineWidth" : 4, - "TextSelectionUnderline" : false, - "BackgroundColor" : "#FFFF5B53", - "Opacity" : 100, - "ToolMode" : "Text", - "ForegroundColor" : "#FFFFFFFF", - "RTFEncodedText" : "e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29jb2FydGYyNzA3Clxjb2NvYXRleHRzY2FsaW5nMFxjb2NvYXBsYXRmb3JtMHtcZm9udHRibFxmMFxmc3dpc3NcZmNoYXJzZXQwIEFyaWFsO30Ke1xjb2xvcnRibDtccmVkMjU1XGdyZWVuMjU1XGJsdWUyNTU7XHJlZDE3MlxncmVlbjU2XGJsdWU0O1xyZWQyNTVcZ3JlZW4yNTVcYmx1ZTI1NTt9CntcKlxleHBhbmRlZGNvbG9ydGJsOztcY3NzcmdiXGM3MzcyNVxjMjk4MDRcYzA7XGNzZ3JheVxjMTAwMDAwO30KXHBhcmRcdHg1NjBcdHgxMTIwXHR4MTY4MFx0eDIyNDBcdHgyODAwXHR4MzM2MFx0eDM5MjBcdHg0NDgwXHR4NTA0MFx0eDU2MDBcdHg2MTYwXHR4NjcyMFxwYXJkaXJuYXR1cmFsXHFjXHBhcnRpZ2h0ZW5mYWN0b3IwCgpcZjBcYlxmczQ4IFxjZjIgXG91dGxcc3Ryb2tld2lkdGg4MCBcc3Ryb2tlYzMgXHNoYWRcc2hhZHgwXHNoYWR5LTYwXHNoYWRyNDBcc2hhZG8xNTMgXHNoYWRjMCBBfQ==", - "StartPoint" : "5.000000,-12.000000", - "Anchored" : false, - "ShadowBlur" : 2, - "TextSelectionColor" : "#FFBC4C00", - "RotationAngle" : 0, - "FontName" : "Arial-BoldMT", - "TextSelectionBold" : true, - "ShadowOpacity" : 60, - "ObjectPriority" : 0, - "ShadowDirectionX" : 0, - "EndPoint" : "52.000000,-49.000000", - "FontSize" : 24, - "TextSelectionItalic" : false, - "ShadowDirectionY" : 3, - "ToolVerticalAlign" : "Top", - "ToolPadding" : 0, - "StrokeWidth" : 2.5, - "DashType" : "Solid", - "DropShadowEnabled" : true, - "IsLocked" : 0, - "TextSelectionStrikethrough" : false, - "ToolHorizontalAlign" : "Center", - "PointsArray" : [ - "5.000000,-12.000000", - "52.000000,-49.000000" - ], - "DropZoneGroupId" : 0, - "IgnoresUndoAll" : false, - "IsFlattened" : false, - "TextDeselectBehavior" : "JustDeselect", - "FontFamily" : "Arial", - "TextOutlineColor" : "#FFFFFFFF", - "ShadowColor" : "#FF000000", - "ObjectID" : "D3643C28-7BB3-4EA2-9BD9-FC7526CCF87E", - "AspectRatio" : 1, - "PlaceholderText" : "e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29jb2FydGYyNzA3Clxjb2NvYXRleHRzY2FsaW5nMFxjb2NvYXBsYXRmb3JtMHtcZm9udHRibH0Ke1xjb2xvcnRibDtccmVkMjU1XGdyZWVuMjU1XGJsdWUyNTU7fQp7XCpcZXhwYW5kZWRjb2xvcnRibDs7fQp9" - }, - { - "TextOutlineWidth" : 8, - "TextSelectionUnderline" : false, - "BackgroundColor" : "#FFFF5B53", - "Opacity" : 100, - "ToolMode" : "Text", - "ForegroundColor" : "#FFFFFFFF", - "RTFEncodedText" : "e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29jb2FydGYyNzA3Clxjb2NvYXRleHRzY2FsaW5nMFxjb2NvYXBsYXRmb3JtMHtcZm9udHRibFxmMFxmc3dpc3NcZmNoYXJzZXQwIEFyaWFsO30Ke1xjb2xvcnRibDtccmVkMjU1XGdyZWVuMjU1XGJsdWUyNTU7XHJlZDE3MlxncmVlbjU2XGJsdWU0O1xyZWQyNTVcZ3JlZW4yNTVcYmx1ZTI1NTt9CntcKlxleHBhbmRlZGNvbG9ydGJsOztcY3NzcmdiXGM3MzcyNVxjMjk4MDRcYzA7XGNzZ3JheVxjMTAwMDAwO30KXHBhcmRcdHg1NjBcdHgxMTIwXHR4MTY4MFx0eDIyNDBcdHgyODAwXHR4MzM2MFx0eDM5MjBcdHg0NDgwXHR4NTA0MFx0eDU2MDBcdHg2MTYwXHR4NjcyMFxwYXJkaXJuYXR1cmFsXHFjXHBhcnRpZ2h0ZW5mYWN0b3IwCgpcZjBcYlxmczE0NCBcY2YyIFxvdXRsXHN0cm9rZXdpZHRoMTYwIFxzdHJva2VjMyBcc2hhZFxzaGFkeDBcc2hhZHktNjBcc2hhZHI0MFxzaGFkbzE1MyBcc2hhZGMwIEF9", - "StartPoint" : "5.000000,-12.000000", - "Anchored" : false, - "ShadowBlur" : 2, - "TextSelectionColor" : "#FFBC4C00", - "RotationAngle" : 0, - "FontName" : "Arial-BoldMT", - "TextSelectionBold" : true, - "ShadowOpacity" : 60, - "ObjectPriority" : 0, - "ShadowDirectionX" : 0, - "EndPoint" : "52.000000,-49.000000", - "FontSize" : 72, - "TextSelectionItalic" : false, - "ShadowDirectionY" : 3, - "ToolVerticalAlign" : "Top", - "ToolPadding" : 0, - "StrokeWidth" : 2.5, - "DashType" : "Solid", - "DropShadowEnabled" : true, - "IsLocked" : 0, - "TextSelectionStrikethrough" : false, - "ToolHorizontalAlign" : "Center", - "PointsArray" : [ - "5.000000,-12.000000", - "52.000000,-49.000000" - ], - "DropZoneGroupId" : 0, - "IgnoresUndoAll" : false, - "IsFlattened" : false, - "TextDeselectBehavior" : "JustDeselect", - "FontFamily" : "Arial", - "TextOutlineColor" : "#FFFFFFFF", - "ShadowColor" : "#FF000000", - "ObjectID" : "A2DBCBBF-7ADC-4C7D-A668-41E1E8C03A0D", - "AspectRatio" : 1, - "PlaceholderText" : "e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29jb2FydGYyNzA3Clxjb2NvYXRleHRzY2FsaW5nMFxjb2NvYXBsYXRmb3JtMHtcZm9udHRibH0Ke1xjb2xvcnRibDtccmVkMjU1XGdyZWVuMjU1XGJsdWUyNTU7fQp7XCpcZXhwYW5kZWRjb2xvcnRibDs7fQp9" - }, - { - "TextOutlineWidth" : 0, - "TextSelectionUnderline" : false, - "BackgroundColor" : "#FFBC4C00", - "Opacity" : 100, - "ToolMode" : "Callout", - "ForegroundColor" : "#00000000", - "RTFEncodedText" : "e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29jb2FydGYyNzA3Clxjb2NvYXRleHRzY2FsaW5nMFxjb2NvYXBsYXRmb3JtMHtcZm9udHRibFxmMFxmc3dpc3NcZmNoYXJzZXQwIEhlbHZldGljYTt9CntcY29sb3J0Ymw7XHJlZDI1NVxncmVlbjI1NVxibHVlMjU1O1xyZWQyNTVcZ3JlZW4yNTVcYmx1ZTI1NTt9CntcKlxleHBhbmRlZGNvbG9ydGJsOztcY3NncmF5XGMxMDAwMDA7fQpccGFyZFx0eDU2MFx0eDExMjBcdHgxNjgwXHR4MjI0MFx0eDI4MDBcdHgzMzYwXHR4MzkyMFx0eDQ0ODBcdHg1MDQwXHR4NTYwMFx0eDYxNjBcdHg2NzIwXHBhcmRpcm5hdHVyYWxccGFydGlnaHRlbmZhY3RvcjAKClxmMFxmczI0IFxjZjIgQX0=", - "StartPoint" : "0.900000,0.000000", - "Anchored" : false, - "ShadowBlur" : 0, - "TextSelectionColor" : "#FFFFFFFF", - "RotationAngle" : 0, - "FontName" : "Helvetica", - "TextSelectionBold" : false, - "CalloutTails" : [ - "-5.949084,36.742085" - ], - "ShadowOpacity" : 60, - "ObjectPriority" : 0, - "ShadowDirectionX" : 0, - "EndPoint" : "0.900000,0.000000", - "FontSize" : 24, - "TextSelectionItalic" : false, - "ShadowDirectionY" : 0, - "TailStyle" : "Arrow", - "CurrentScale" : 1, - "ToolVerticalAlign" : "Center", - "ToolPadding" : 0, - "CalloutShape" : "CTRoundedRectWithArrow", - "StrokeWidth" : 0, - "DashType" : "Solid", - "DropShadowEnabled" : false, - "TailWidth" : 10, - "IsLocked" : 0, - "TextSelectionStrikethrough" : false, - "ToolHorizontalAlign" : "Center", - "PointsArray" : [ - "5.000000,-12.000000", - "52.000000,-49.000000" - ], - "DropZoneGroupId" : 0, - "IgnoresUndoAll" : false, - "IsFlattened" : false, - "TextDeselectBehavior" : "JustDeselect", - "ControlPoints" : [ - "0.900000,0.000000" - ], - "FontFamily" : "Helvetica", - "TextOutlineColor" : "#FF000000", - "ShadowColor" : "#FF000000", - "ObjectID" : "086B47FF-F69A-47ED-A901-A155A51844C6", - "AspectRatio" : 1, - "TailLineStyle" : "Solid", - "TailHeadStyle" : "EquilateralArrow", - "TailColor" : "#FFBC4C00", - "BorderStyle" : "Middle", - "PlaceholderText" : "e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29jb2FydGYyNzA3Clxjb2NvYXRleHRzY2FsaW5nMFxjb2NvYXBsYXRmb3JtMHtcZm9udHRibH0Ke1xjb2xvcnRibDtccmVkMjU1XGdyZWVuMjU1XGJsdWUyNTU7fQp7XCpcZXhwYW5kZWRjb2xvcnRibDs7fQp9" - }, - { - "TextOutlineWidth" : 0, - "TextSelectionUnderline" : false, - "BackgroundColor" : "#FFBC4C00", - "Opacity" : 100, - "ToolMode" : "Callout", - "ForegroundColor" : "#00000000", - "RTFEncodedText" : "e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29jb2FydGYyNzA3Clxjb2NvYXRleHRzY2FsaW5nMFxjb2NvYXBsYXRmb3JtMHtcZm9udHRibFxmMFxmc3dpc3NcZmNoYXJzZXQwIEhlbHZldGljYTt9CntcY29sb3J0Ymw7XHJlZDI1NVxncmVlbjI1NVxibHVlMjU1O1xyZWQyNTVcZ3JlZW4yNTVcYmx1ZTI1NTt9CntcKlxleHBhbmRlZGNvbG9ydGJsOztcY3NncmF5XGMxMDAwMDA7fQpccGFyZFx0eDU2MFx0eDExMjBcdHgxNjgwXHR4MjI0MFx0eDI4MDBcdHgzMzYwXHR4MzkyMFx0eDQ0ODBcdHg1MDQwXHR4NTYwMFx0eDYxNjBcdHg2NzIwXHBhcmRpcm5hdHVyYWxccGFydGlnaHRlbmZhY3RvcjAKClxmMFxmczI0IFxjZjIgQX0=", - "StartPoint" : "0.760000,0.190000", - "Anchored" : false, - "ShadowBlur" : 0, - "TextSelectionColor" : "#FFFFFFFF", - "RotationAngle" : 0, - "FontName" : "Helvetica", - "TextSelectionBold" : false, - "CalloutTails" : [ - "-5.949084,36.742085" - ], - "ShadowOpacity" : 60, - "ObjectPriority" : 0, - "ShadowDirectionX" : 0, - "EndPoint" : "0.760000,0.190000", - "FontSize" : 24, - "TextSelectionItalic" : false, - "ShadowDirectionY" : 0, - "TailStyle" : "Remix", - "CurrentScale" : 1, - "ToolVerticalAlign" : "Center", - "ToolPadding" : 0, - "CalloutShape" : "CTBasicSpeechBubble2", - "StrokeWidth" : 0, - "DashType" : "Solid", - "DropShadowEnabled" : false, - "TailWidth" : 10, - "IsLocked" : 0, - "TextSelectionStrikethrough" : false, - "ToolHorizontalAlign" : "Center", - "PointsArray" : [ - "5.000000,-12.000000", - "52.000000,-49.000000" - ], - "DropZoneGroupId" : 0, - "IgnoresUndoAll" : false, - "IsFlattened" : false, - "TextDeselectBehavior" : "JustDeselect", - "ControlPoints" : [ - "0.760000,0.190000" - ], - "FontFamily" : "Helvetica", - "TextOutlineColor" : "#FF000000", - "ShadowColor" : "#FF000000", - "ObjectID" : "B4578483-661F-4C05-A445-C83EA6FC0CB4", - "AspectRatio" : 1, - "TailLineStyle" : "Solid", - "TailHeadStyle" : "EquilateralArrow", - "TailColor" : "#FFBC4C00", - "BorderStyle" : "Middle", - "PlaceholderText" : "e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29jb2FydGYyNzA3Clxjb2NvYXRleHRzY2FsaW5nMFxjb2NvYXBsYXRmb3JtMHtcZm9udHRibH0Ke1xjb2xvcnRibDtccmVkMjU1XGdyZWVuMjU1XGJsdWUyNTU7fQp7XCpcZXhwYW5kZWRjb2xvcnRibDs7fQp9" - }, - { - "TextOutlineWidth" : 0, - "TextSelectionUnderline" : false, - "BackgroundColor" : "#FFBC4C00", - "Opacity" : 100, - "ToolMode" : "Callout", - "ForegroundColor" : "#00000000", - "RTFEncodedText" : "e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29jb2FydGYyNzA3Clxjb2NvYXRleHRzY2FsaW5nMFxjb2NvYXBsYXRmb3JtMHtcZm9udHRibFxmMFxmc3dpc3NcZmNoYXJzZXQwIEhlbHZldGljYTt9CntcY29sb3J0Ymw7XHJlZDI1NVxncmVlbjI1NVxibHVlMjU1O1xyZWQyNTVcZ3JlZW4yNTVcYmx1ZTI1NTt9CntcKlxleHBhbmRlZGNvbG9ydGJsOztcY3NncmF5XGMxMDAwMDA7fQpccGFyZFx0eDU2MFx0eDExMjBcdHgxNjgwXHR4MjI0MFx0eDI4MDBcdHgzMzYwXHR4MzkyMFx0eDQ0ODBcdHg1MDQwXHR4NTYwMFx0eDYxNjBcdHg2NzIwXHBhcmRpcm5hdHVyYWxccGFydGlnaHRlbmZhY3RvcjAKClxmMFxmczI0IFxjZjIgQX0=", - "StartPoint" : "0.760000,0.190000", - "Anchored" : false, - "ShadowBlur" : 0, - "TextSelectionColor" : "#FFFFFFFF", - "RotationAngle" : 0, - "FontName" : "Helvetica", - "TextSelectionBold" : false, - "ShadowOpacity" : 60, - "ObjectPriority" : 0, - "ShadowDirectionX" : 0, - "EndPoint" : "0.760000,0.190000", - "FontSize" : 24, - "TextSelectionItalic" : false, - "ShadowDirectionY" : 0, - "TailStyle" : "Remix", - "CurrentScale" : 1, - "ToolVerticalAlign" : "Center", - "ToolPadding" : 0, - "CalloutShape" : "CTBasicArrowText2", - "StrokeWidth" : 0, - "DashType" : "Solid", - "DropShadowEnabled" : false, - "TailWidth" : 10, - "IsLocked" : 0, - "TextSelectionStrikethrough" : false, - "ToolHorizontalAlign" : "Center", - "PointsArray" : [ - "5.000000,-12.000000", - "52.000000,-49.000000" - ], - "DropZoneGroupId" : 0, - "IgnoresUndoAll" : false, - "IsFlattened" : false, - "TextDeselectBehavior" : "JustDeselect", - "ControlPoints" : [ - "0.760000,0.190000" - ], - "FontFamily" : "Helvetica", - "TextOutlineColor" : "#FF000000", - "ShadowColor" : "#FF000000", - "ObjectID" : "333DFCDC-0C22-472E-B73F-4DCAE3F9322B", - "AspectRatio" : 1, - "TailLineStyle" : "Solid", - "TailHeadStyle" : "EquilateralArrow", - "TailColor" : "#FFBC4C00", - "BorderStyle" : "Middle", - "PlaceholderText" : "e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29jb2FydGYyNzA3Clxjb2NvYXRleHRzY2FsaW5nMFxjb2NvYXBsYXRmb3JtMHtcZm9udHRibH0Ke1xjb2xvcnRibDtccmVkMjU1XGdyZWVuMjU1XGJsdWUyNTU7fQp7XCpcZXhwYW5kZWRjb2xvcnRibDs7fQp9" - }, - { - "TextOutlineWidth" : 0, - "TextSelectionUnderline" : false, - "BackgroundColor" : "#FFFFFFFF", - "Opacity" : 100, - "ToolMode" : "Callout", - "ForegroundColor" : "#FFBC4C00", - "RTFEncodedText" : "e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29jb2FydGYyNzA3Clxjb2NvYXRleHRzY2FsaW5nMFxjb2NvYXBsYXRmb3JtMHtcZm9udHRibFxmMFxmc3dpc3NcZmNoYXJzZXQwIEhlbHZldGljYTt9CntcY29sb3J0Ymw7XHJlZDI1NVxncmVlbjI1NVxibHVlMjU1O1xyZWQwXGdyZWVuMFxibHVlMDt9CntcKlxleHBhbmRlZGNvbG9ydGJsOztcY3NncmF5XGMwO30KXHBhcmRcdHg1NjBcdHgxMTIwXHR4MTY4MFx0eDIyNDBcdHgyODAwXHR4MzM2MFx0eDM5MjBcdHg0NDgwXHR4NTA0MFx0eDU2MDBcdHg2MTYwXHR4NjcyMFxwYXJkaXJuYXR1cmFsXHFjXHBhcnRpZ2h0ZW5mYWN0b3IwCgpcZjBcZnM0OCBcY2YyIEF9", - "StartPoint" : "0.760000,0.190000", - "Anchored" : false, - "ShadowBlur" : 0, - "TextSelectionColor" : "#FF000000", - "RotationAngle" : 0, - "FontName" : "Helvetica", - "TextSelectionBold" : false, - "ShadowOpacity" : 60, - "ObjectPriority" : 0, - "ShadowDirectionX" : 0, - "EndPoint" : "0.760000,0.190000", - "FontSize" : 24, - "TextSelectionItalic" : false, - "ShadowDirectionY" : 0, - "TailStyle" : "Triangle", - "CurrentScale" : 1, - "ToolVerticalAlign" : "Center", - "ToolPadding" : 0, - "CalloutShape" : "CTBalloon6", - "StrokeWidth" : 5, - "DashType" : "Solid", - "DropShadowEnabled" : false, - "TailWidth" : 10, - "IsLocked" : 0, - "TextSelectionStrikethrough" : false, - "ToolHorizontalAlign" : "Center", - "PointsArray" : [ - "5.000000,-12.000000", - "52.000000,-49.000000" - ], - "DropZoneGroupId" : 0, - "IgnoresUndoAll" : false, - "IsFlattened" : false, - "TextDeselectBehavior" : "JustDeselect", - "ControlPoints" : [ - "0.760000,0.190000" - ], - "FontFamily" : "Helvetica", - "TextOutlineColor" : "#FF000000", - "ShadowColor" : "#FF000000", - "ObjectID" : "AE5EDCB8-8573-4559-984E-1CBC0F4107BE", - "AspectRatio" : 1, - "TailLineStyle" : "Solid", - "TailHeadStyle" : "EquilateralArrow", - "TailColor" : "#FFBC4C00", - "BorderStyle" : "Middle", - "PlaceholderText" : "e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29jb2FydGYyNzA3Clxjb2NvYXRleHRzY2FsaW5nMFxjb2NvYXBsYXRmb3JtMHtcZm9udHRibH0Ke1xjb2xvcnRibDtccmVkMjU1XGdyZWVuMjU1XGJsdWUyNTU7fQp7XCpcZXhwYW5kZWRjb2xvcnRibDs7fQp9" - }, - { - "TextOutlineWidth" : 0, - "TextSelectionUnderline" : false, - "BackgroundColor" : "#FFBC4C00", - "Opacity" : 100, - "ToolMode" : "Callout", - "ForegroundColor" : "#00000000", - "RTFEncodedText" : "e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29jb2FydGYyNzA3Clxjb2NvYXRleHRzY2FsaW5nMFxjb2NvYXBsYXRmb3JtMHtcZm9udHRibFxmMFxmc3dpc3NcZmNoYXJzZXQwIEhlbHZldGljYTt9CntcY29sb3J0Ymw7XHJlZDI1NVxncmVlbjI1NVxibHVlMjU1O1xyZWQyNTVcZ3JlZW4yNTVcYmx1ZTI1NTt9CntcKlxleHBhbmRlZGNvbG9ydGJsOztcY3NncmF5XGMxMDAwMDA7fQpccGFyZFx0eDU2MFx0eDExMjBcdHgxNjgwXHR4MjI0MFx0eDI4MDBcdHgzMzYwXHR4MzkyMFx0eDQ0ODBcdHg1MDQwXHR4NTYwMFx0eDYxNjBcdHg2NzIwXHBhcmRpcm5hdHVyYWxccWNccGFydGlnaHRlbmZhY3RvcjAKClxmMFxmczQ4IFxjZjIgQX0=", - "StartPoint" : "0.760000,0.190000", - "Anchored" : false, - "ShadowBlur" : 0, - "TextSelectionColor" : "#FFFFFFFF", - "RotationAngle" : 0, - "FontName" : "Helvetica", - "TextSelectionBold" : false, - "CalloutTails" : [ - "-3.131732,13.363675" - ], - "ShadowOpacity" : 60, - "ObjectPriority" : 0, - "ShadowDirectionX" : 0, - "EndPoint" : "0.760000,0.190000", - "FontSize" : 24, - "TextSelectionItalic" : false, - "ShadowDirectionY" : 0, - "TailStyle" : "Remix", - "CurrentScale" : 1, - "ToolVerticalAlign" : "Center", - "ToolPadding" : 0, - "CalloutShape" : "CTBasicSpeechBubble1", - "StrokeWidth" : 0, - "DashType" : "Solid", - "DropShadowEnabled" : false, - "TailWidth" : 10, - "IsLocked" : 0, - "TextSelectionStrikethrough" : false, - "ToolHorizontalAlign" : "Center", - "PointsArray" : [ - "5.000000,-12.000000", - "52.000000,-49.000000" - ], - "DropZoneGroupId" : 0, - "IgnoresUndoAll" : false, - "IsFlattened" : false, - "TextDeselectBehavior" : "JustDeselect", - "ControlPoints" : [ - "0.760000,0.190000" - ], - "FontFamily" : "Helvetica", - "TextOutlineColor" : "#FF000000", - "ShadowColor" : "#FF000000", - "ObjectID" : "9D521D83-3CEE-4ACE-921E-E147A59CCB06", - "AspectRatio" : 1, - "TailLineStyle" : "Solid", - "TailHeadStyle" : "EquilateralArrow", - "TailColor" : "#FFBC4C00", - "BorderStyle" : "Middle", - "PlaceholderText" : "e1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29jb2FydGYyNzA3Clxjb2NvYXRleHRzY2FsaW5nMFxjb2NvYXBsYXRmb3JtMHtcZm9udHRibH0Ke1xjb2xvcnRibDtccmVkMjU1XGdyZWVuMjU1XGJsdWUyNTU7fQp7XCpcZXhwYW5kZWRjb2xvcnRibDs7fQp9" - }, - { - "ShadowBlur" : 2, - "IsLocked" : 0, - "PointsArray" : [ - "5.000000,-12.000000", - "52.000000,-49.000000" - ], - "StrokeWidth" : 10, - "Opacity" : 100, - "ArrowStart" : "TArrow", - "DropShadowEnabled" : true, - "ArrowEnd" : "TArrow", - "IgnoresUndoAll" : false, - "ShadowDirectionX" : 0, - "ShadowColor" : "#FF000000", - "ObjectPriority" : 0, - "BezierCurve" : false, - "ObjectID" : "74C159A8-240C-4429-BDA3-4FC023552391", - "StartPoint" : "5.000000,-12.000000", - "EndPoint" : "52.000000,-49.000000", - "ForegroundColor" : "#FFBC4C00", - "IsFlattened" : false, - "Anchored" : false, - "ArrowEndWidth" : 2.5, - "ToolMode" : "Arrow", - "ShadowDirectionY" : 3, - "AspectRatio" : 1, - "ShadowOpacity" : 60, - "ArrowStartWidth" : 2.5, - "DropZoneGroupId" : 0, - "RotationAngle" : 0, - "DashType" : "Solid", - "BackgroundColor" : "#00000000" - }, - { - "ShadowBlur" : 2, - "IsLocked" : 0, - "PointsArray" : [ - "5.000000,-12.000000", - "52.000000,-49.000000" - ], - "StrokeWidth" : 10, - "Opacity" : 100, - "ArrowStart" : "RoundedArrow", - "DropShadowEnabled" : true, - "ArrowEnd" : "RoundedArrow", - "IgnoresUndoAll" : false, - "ShadowDirectionX" : 0, - "ShadowColor" : "#FF000000", - "ObjectPriority" : 0, - "BezierCurve" : false, - "ObjectID" : "12876625-A431-4F02-989B-92C7F4BF4393", - "StartPoint" : "5.000000,-12.000000", - "EndPoint" : "52.000000,-49.000000", - "ForegroundColor" : "#FFBC4C00", - "IsFlattened" : false, - "Anchored" : false, - "ArrowEndWidth" : 2.4300000667572021, - "ToolMode" : "Arrow", - "ShadowDirectionY" : 3, - "AspectRatio" : 1, - "ShadowOpacity" : 60, - "ArrowStartWidth" : 2.4300000667572021, - "DropZoneGroupId" : 0, - "RotationAngle" : 0, - "DashType" : "Dash", - "BackgroundColor" : "#00000000" - }, - { - "ShadowBlur" : 2, - "IsLocked" : 0, - "PointsArray" : [ - "5.000000,-12.000000", - "52.000000,-49.000000" - ], - "StrokeWidth" : 6, - "Opacity" : 100, - "DropShadowEnabled" : true, - "IgnoresUndoAll" : false, - "ShadowDirectionX" : 3, - "CornerRadiusRatio" : 0.05000000074505806, - "ShadowColor" : "#FF000000", - "ObjectPriority" : 0, - "MagnifyConnectorType" : "MagnifyConnectorTypeSingleLine", - "ObjectID" : "ED87F319-81E4-41D5-9BED-F9A2A475D68F", - "StartPoint" : "5.000000,-12.000000", - "EndPoint" : "52.000000,-49.000000", - "MagnifyScale" : 200, - "ForegroundColor" : "#FFBC4C00", - "IsFlattened" : false, - "Anchored" : false, - "ToolShape" : "Ellipse", - "ToolMode" : "Magnify", - "ShadowDirectionY" : 3, - "AspectRatio" : 1, - "ShadowOpacity" : 60, - "DropZoneGroupId" : 0, - "RotationAngle" : 0, - "DashType" : "Solid", - "MagnifyOffset" : "1.000000,1.000000", - "BackgroundColor" : "#FFFFFFFF" - }, - { - "ShadowBlur" : 2, - "IsLocked" : 0, - "PointsArray" : [ - "5.000000,-12.000000", - "52.000000,-49.000000" - ], - "StrokeWidth" : 6, - "Opacity" : 100, - "DropShadowEnabled" : true, - "IgnoresUndoAll" : false, - "ShadowDirectionX" : 3, - "CornerRadiusRatio" : 0.05000000074505806, - "ShadowColor" : "#FF000000", - "ObjectPriority" : 0, - "MagnifyConnectorType" : "MagnifyConnectorTypeSingleLine", - "ObjectID" : "5E5F438A-ECA8-4959-A2AF-EC5980695490", - "StartPoint" : "5.000000,-12.000000", - "EndPoint" : "52.000000,-49.000000", - "MagnifyScale" : 200, - "ForegroundColor" : "#FFBC4C00", - "IsFlattened" : false, - "Anchored" : false, - "ToolShape" : "Rectangle", - "ToolMode" : "Magnify", - "ShadowDirectionY" : 3, - "AspectRatio" : 1, - "ShadowOpacity" : 60, - "DropZoneGroupId" : 0, - "RotationAngle" : 0, - "DashType" : "Solid", - "MagnifyOffset" : "0.000000,-0.000000", - "BackgroundColor" : "#FFFFFFFF" - }, - { - "ShadowBlur" : 2, - "IsLocked" : 0, - "PointsArray" : [ - "5.000000,-12.000000", - "52.000000,-49.000000" - ], - "StrokeWidth" : 6, - "Opacity" : 100, - "DropShadowEnabled" : true, - "IgnoresUndoAll" : false, - "ShadowDirectionX" : 3, - "CornerRadiusRatio" : 0.05000000074505806, - "ShadowColor" : "#FF000000", - "ObjectPriority" : 0, - "MagnifyConnectorType" : "MagnifyConnectorTypeSingleLine", - "ObjectID" : "7F430953-59DF-4219-AF61-E0C0AE2827B3", - "StartPoint" : "5.000000,-12.000000", - "EndPoint" : "52.000000,-49.000000", - "MagnifyScale" : 200, - "ForegroundColor" : "#FFBC4C00", - "IsFlattened" : false, - "Anchored" : false, - "ToolShape" : "Rectangle", - "ToolMode" : "Magnify", - "ShadowDirectionY" : 3, - "AspectRatio" : 1, - "ShadowOpacity" : 60, - "DropZoneGroupId" : 0, - "RotationAngle" : 0, - "DashType" : "Solid", - "MagnifyOffset" : "1.000000,1.000000", - "BackgroundColor" : "#FFFFFFFF" - }, - { - "ShadowBlur" : 2, - "IsLocked" : 0, - "PointsArray" : [ - "5.000000,-12.000000", - "52.000000,-49.000000" - ], - "StrokeWidth" : 0, - "Opacity" : 100, - "DropShadowEnabled" : true, - "IgnoresUndoAll" : false, - "ShadowDirectionX" : 0, - "CornerRadiusRatio" : 0.63513511419296265, - "ShadowColor" : "#FF000000", - "ObjectPriority" : 0, - "ObjectID" : "3454826C-EE20-4BBD-967E-F1F127499C55", - "StartPoint" : "5.000000,-12.000000", - "EndPoint" : "52.000000,-49.000000", - "ToolShape" : "Rectangle", - "ForegroundColor" : "#FFFF0000", - "IsFlattened" : false, - "Anchored" : false, - "BlurIntensity" : 12.5, - "ToolMode" : "Blur", - "ShadowDirectionY" : 3, - "AspectRatio" : 1, - "ShadowOpacity" : 60, - "BlurType" : "Gaussian", - "DropZoneGroupId" : 0, - "RotationAngle" : 0, - "DashType" : "Solid", - "BackgroundColor" : "#FFFFFFFF" - }, - { - "ShadowBlur" : 2, - "IsLocked" : 0, - "PointsArray" : [ - "5.000000,-12.000000", - "52.000000,-49.000000" - ], - "StrokeWidth" : 0, - "Opacity" : 100, - "DropShadowEnabled" : true, - "IgnoresUndoAll" : false, - "ShadowDirectionX" : 0, - "CornerRadiusRatio" : 0.63513511419296265, - "ShadowColor" : "#FF000000", - "ObjectPriority" : 0, - "ObjectID" : "E0BD3964-D1DA-4195-9117-A45618F76E13", - "StartPoint" : "5.000000,-12.000000", - "EndPoint" : "52.000000,-49.000000", - "ToolShape" : "Rectangle", - "ForegroundColor" : "#FFFF0000", - "IsFlattened" : false, - "Anchored" : false, - "BlurIntensity" : 25, - "ToolMode" : "Blur", - "ShadowDirectionY" : 3, - "AspectRatio" : 1, - "ShadowOpacity" : 60, - "BlurType" : "Gaussian", - "DropZoneGroupId" : 0, - "RotationAngle" : 0, - "DashType" : "Solid", - "BackgroundColor" : "#FFFFFFFF" - }, - { - "ShadowBlur" : 2, - "IsLocked" : 0, - "PointsArray" : [ - "5.000000,-12.000000", - "52.000000,-49.000000" - ], - "StrokeWidth" : 0, - "Opacity" : 100, - "DropShadowEnabled" : true, - "IgnoresUndoAll" : false, - "ShadowDirectionX" : 0, - "CornerRadiusRatio" : 0.63513511419296265, - "ShadowColor" : "#FF000000", - "ObjectPriority" : 0, - "ObjectID" : "CB4F7035-DEFE-47ED-9375-54562329DEEA", - "StartPoint" : "5.000000,-12.000000", - "EndPoint" : "52.000000,-49.000000", - "ToolShape" : "Rectangle", - "ForegroundColor" : "#FFFF0000", - "IsFlattened" : false, - "Anchored" : false, - "BlurIntensity" : 37.5, - "ToolMode" : "Blur", - "ShadowDirectionY" : 3, - "AspectRatio" : 1, - "ShadowOpacity" : 60, - "BlurType" : "Gaussian", - "DropZoneGroupId" : 0, - "RotationAngle" : 0, - "DashType" : "Solid", - "BackgroundColor" : "#FFFFFFFF" - }, - { - "ShadowBlur" : 2, - "IsLocked" : 0, - "PointsArray" : [ - "5.000000,-12.000000", - "52.000000,-49.000000" - ], - "StrokeWidth" : 0, - "Opacity" : 100, - "DropShadowEnabled" : true, - "IgnoresUndoAll" : false, - "ShadowDirectionX" : 0, - "CornerRadiusRatio" : 0.63513511419296265, - "ShadowColor" : "#FF000000", - "ObjectPriority" : 0, - "ObjectID" : "0780C545-3DFC-4C5F-BF1B-1A32DB218862", - "StartPoint" : "5.000000,-12.000000", - "EndPoint" : "52.000000,-49.000000", - "ToolShape" : "Rectangle", - "ForegroundColor" : "#FFFF0000", - "IsFlattened" : false, - "Anchored" : false, - "BlurIntensity" : 50, - "ToolMode" : "Blur", - "ShadowDirectionY" : 3, - "AspectRatio" : 1, - "ShadowOpacity" : 60, - "BlurType" : "Gaussian", - "DropZoneGroupId" : 0, - "RotationAngle" : 0, - "DashType" : "Solid", - "BackgroundColor" : "#FFFFFFFF" - }, - { - "ShadowBlur" : 2, - "IsLocked" : 0, - "PointsArray" : [ - "5.000000,-12.000000", - "52.000000,-49.000000" - ], - "StrokeWidth" : 0, - "Opacity" : 100, - "DropShadowEnabled" : true, - "IgnoresUndoAll" : false, - "ShadowDirectionX" : 0, - "CornerRadiusRatio" : 0.63513511419296265, - "ShadowColor" : "#FF000000", - "ObjectPriority" : 0, - "ObjectID" : "BB7D3A5A-70DD-4443-8FED-D1542E3727C5", - "StartPoint" : "5.000000,-12.000000", - "EndPoint" : "52.000000,-49.000000", - "ToolShape" : "Rectangle", - "ForegroundColor" : "#FFFF0000", - "IsFlattened" : false, - "Anchored" : false, - "BlurIntensity" : 12.5, - "ToolMode" : "Blur", - "ShadowDirectionY" : 3, - "AspectRatio" : 1, - "ShadowOpacity" : 60, - "BlurType" : "Pixellate", - "DropZoneGroupId" : 0, - "RotationAngle" : 0, - "DashType" : "Solid", - "BackgroundColor" : "#FFFFFFFF" - }, - { - "ShadowBlur" : 2, - "IsLocked" : 0, - "PointsArray" : [ - "5.000000,-12.000000", - "52.000000,-49.000000" - ], - "StrokeWidth" : 0, - "Opacity" : 100, - "DropShadowEnabled" : true, - "IgnoresUndoAll" : false, - "ShadowDirectionX" : 0, - "CornerRadiusRatio" : 0.63513511419296265, - "ShadowColor" : "#FF000000", - "ObjectPriority" : 0, - "ObjectID" : "D6AB81D7-40DB-4152-B730-289475B7914D", - "StartPoint" : "5.000000,-12.000000", - "EndPoint" : "52.000000,-49.000000", - "ToolShape" : "Rectangle", - "ForegroundColor" : "#FFFF0000", - "IsFlattened" : false, - "Anchored" : false, - "BlurIntensity" : 25, - "ToolMode" : "Blur", - "ShadowDirectionY" : 3, - "AspectRatio" : 1, - "ShadowOpacity" : 60, - "BlurType" : "Pixellate", - "DropZoneGroupId" : 0, - "RotationAngle" : 0, - "DashType" : "Solid", - "BackgroundColor" : "#FFFFFFFF" - }, - { - "ShadowBlur" : 2, - "IsLocked" : 0, - "PointsArray" : [ - "5.000000,-12.000000", - "52.000000,-49.000000" - ], - "StrokeWidth" : 0, - "Opacity" : 100, - "DropShadowEnabled" : true, - "IgnoresUndoAll" : false, - "ShadowDirectionX" : 0, - "CornerRadiusRatio" : 0.63513511419296265, - "ShadowColor" : "#FF000000", - "ObjectPriority" : 0, - "ObjectID" : "0FD42276-4DB2-4786-B911-F340E89FF229", - "StartPoint" : "5.000000,-12.000000", - "EndPoint" : "52.000000,-49.000000", - "ToolShape" : "Rectangle", - "ForegroundColor" : "#FFFF0000", - "IsFlattened" : false, - "Anchored" : false, - "BlurIntensity" : 37.5, - "ToolMode" : "Blur", - "ShadowDirectionY" : 3, - "AspectRatio" : 1, - "ShadowOpacity" : 60, - "BlurType" : "Pixellate", - "DropZoneGroupId" : 0, - "RotationAngle" : 0, - "DashType" : "Solid", - "BackgroundColor" : "#FFFFFFFF" - }, - { - "ShadowBlur" : 2, - "IsLocked" : 0, - "PointsArray" : [ - "5.000000,-12.000000", - "52.000000,-49.000000" - ], - "StrokeWidth" : 0, - "Opacity" : 100, - "DropShadowEnabled" : true, - "IgnoresUndoAll" : false, - "ShadowDirectionX" : 0, - "CornerRadiusRatio" : 0.63513511419296265, - "ShadowColor" : "#FF000000", - "ObjectPriority" : 0, - "ObjectID" : "CCEDB2EC-9E6D-4FE4-BFC4-6CBE044014A6", - "StartPoint" : "5.000000,-12.000000", - "EndPoint" : "52.000000,-49.000000", - "ToolShape" : "Rectangle", - "ForegroundColor" : "#FFFF0000", - "IsFlattened" : false, - "Anchored" : false, - "BlurIntensity" : 50, - "ToolMode" : "Blur", - "ShadowDirectionY" : 3, - "AspectRatio" : 1, - "ShadowOpacity" : 60, - "BlurType" : "Pixellate", - "DropZoneGroupId" : 0, - "RotationAngle" : 0, - "DashType" : "Solid", - "BackgroundColor" : "#FFFFFFFF" - }, - { - "Smoothing" : false, - "ShadowBlur" : 2, - "IsLocked" : 0, - "PointsArray" : [ - "5.000000,-12.000000", - "52.000000,-49.000000" - ], - "StrokeWidth" : 1, - "Opacity" : 100, - "DropShadowEnabled" : true, - "IgnoresUndoAll" : false, - "ShadowDirectionX" : 3, - "ShadowColor" : "#FF000000", - "ObjectPriority" : 0, - "ObjectID" : "83A3BB43-ACF5-474B-B525-9B39B175E90B", - "StartPoint" : "5.000000,-12.000000", - "EndPoint" : "52.000000,-49.000000", - "ForegroundColor" : "#00000000", - "IsFlattened" : false, - "Anchored" : false, - "ToolMode" : "Eraser", - "ShadowDirectionY" : 3, - "AspectRatio" : 1, - "ShadowOpacity" : 60, - "PenShape" : "Round", - "DropZoneGroupId" : 0, - "RotationAngle" : 0, - "DashType" : "Solid", - "BackgroundColor" : "#FFFFFFFF" - }, - { - "Smoothing" : false, - "ShadowBlur" : 2, - "IsLocked" : 0, - "PointsArray" : [ - "5.000000,-12.000000", - "52.000000,-49.000000" - ], - "StrokeWidth" : 5, - "Opacity" : 100, - "DropShadowEnabled" : true, - "IgnoresUndoAll" : false, - "ShadowDirectionX" : 3, - "ShadowColor" : "#FF000000", - "ObjectPriority" : 0, - "ObjectID" : "9D8C8E59-B1D9-43D0-B902-15F25FA0778F", - "StartPoint" : "5.000000,-12.000000", - "EndPoint" : "52.000000,-49.000000", - "ForegroundColor" : "#00000000", - "IsFlattened" : false, - "Anchored" : false, - "ToolMode" : "Eraser", - "ShadowDirectionY" : 3, - "AspectRatio" : 1, - "ShadowOpacity" : 60, - "PenShape" : "Round", - "DropZoneGroupId" : 0, - "RotationAngle" : 0, - "DashType" : "Solid", - "BackgroundColor" : "#FFFFFFFF" - }, - { - "Smoothing" : false, - "ShadowBlur" : 2, - "IsLocked" : 0, - "PointsArray" : [ - "5.000000,-12.000000", - "52.000000,-49.000000" - ], - "StrokeWidth" : 10, - "Opacity" : 100, - "DropShadowEnabled" : true, - "IgnoresUndoAll" : false, - "ShadowDirectionX" : 3, - "ShadowColor" : "#FF000000", - "ObjectPriority" : 0, - "ObjectID" : "EED3BCE0-D267-4B04-8930-9945D0CD2D8D", - "StartPoint" : "5.000000,-12.000000", - "EndPoint" : "52.000000,-49.000000", - "ForegroundColor" : "#00000000", - "IsFlattened" : false, - "Anchored" : false, - "ToolMode" : "Eraser", - "ShadowDirectionY" : 3, - "AspectRatio" : 1, - "ShadowOpacity" : 60, - "PenShape" : "Round", - "DropZoneGroupId" : 0, - "RotationAngle" : 0, - "DashType" : "Solid", - "BackgroundColor" : "#FFFFFFFF" - }, - { - "Smoothing" : false, - "ShadowBlur" : 2, - "IsLocked" : 0, - "PointsArray" : [ - "5.000000,-12.000000", - "52.000000,-49.000000" - ], - "StrokeWidth" : 15, - "Opacity" : 100, - "DropShadowEnabled" : true, - "IgnoresUndoAll" : false, - "ShadowDirectionX" : 3, - "ShadowColor" : "#FF000000", - "ObjectPriority" : 0, - "ObjectID" : "F5988FD1-C5EE-4C6D-A58F-7F7933CE77E7", - "StartPoint" : "5.000000,-12.000000", - "EndPoint" : "52.000000,-49.000000", - "ForegroundColor" : "#00000000", - "IsFlattened" : false, - "Anchored" : false, - "ToolMode" : "Eraser", - "ShadowDirectionY" : 3, - "AspectRatio" : 1, - "ShadowOpacity" : 60, - "PenShape" : "Round", - "DropZoneGroupId" : 0, - "RotationAngle" : 0, - "DashType" : "Solid", - "BackgroundColor" : "#FFFFFFFF" - }, - { - "Smoothing" : false, - "ShadowBlur" : 2, - "IsLocked" : 0, - "PointsArray" : [ - "5.000000,-12.000000", - "52.000000,-49.000000" - ], - "StrokeWidth" : 25, - "Opacity" : 100, - "DropShadowEnabled" : true, - "IgnoresUndoAll" : false, - "ShadowDirectionX" : 3, - "ShadowColor" : "#FF000000", - "ObjectPriority" : 0, - "ObjectID" : "BEE68D98-14E2-4569-937B-08EC09743DB7", - "StartPoint" : "5.000000,-12.000000", - "EndPoint" : "52.000000,-49.000000", - "ForegroundColor" : "#00000000", - "IsFlattened" : false, - "Anchored" : false, - "ToolMode" : "Eraser", - "ShadowDirectionY" : 3, - "AspectRatio" : 1, - "ShadowOpacity" : 60, - "PenShape" : "Round", - "DropZoneGroupId" : 0, - "RotationAngle" : 0, - "DashType" : "Solid", - "BackgroundColor" : "#FFFFFFFF" - }, - { - "Smoothing" : false, - "ShadowBlur" : 2, - "IsLocked" : 0, - "PointsArray" : [ - "5.000000,-12.000000", - "52.000000,-49.000000" - ], - "StrokeWidth" : 50, - "Opacity" : 100, - "DropShadowEnabled" : true, - "IgnoresUndoAll" : false, - "ShadowDirectionX" : 3, - "ShadowColor" : "#FF000000", - "ObjectPriority" : 0, - "ObjectID" : "F8B39AA2-D7F4-4849-96A5-7F8ABD3F6397", - "StartPoint" : "5.000000,-12.000000", - "EndPoint" : "52.000000,-49.000000", - "ForegroundColor" : "#00000000", - "IsFlattened" : false, - "Anchored" : false, - "ToolMode" : "Eraser", - "ShadowDirectionY" : 3, - "AspectRatio" : 1, - "ShadowOpacity" : 60, - "PenShape" : "Round", - "DropZoneGroupId" : 0, - "RotationAngle" : 0, - "DashType" : "Solid", - "BackgroundColor" : "#FFFFFFFF" - }, - { - "Smoothing" : false, - "ShadowBlur" : 2, - "IsLocked" : 0, - "PointsArray" : [ - "5.000000,-12.000000", - "52.000000,-49.000000" - ], - "StrokeWidth" : 75, - "Opacity" : 100, - "DropShadowEnabled" : true, - "IgnoresUndoAll" : false, - "ShadowDirectionX" : 3, - "ShadowColor" : "#FF000000", - "ObjectPriority" : 0, - "ObjectID" : "1858E4AE-1FFB-4890-9CBC-7BD67E5DFE06", - "StartPoint" : "5.000000,-12.000000", - "EndPoint" : "52.000000,-49.000000", - "ForegroundColor" : "#00000000", - "IsFlattened" : false, - "Anchored" : false, - "ToolMode" : "Eraser", - "ShadowDirectionY" : 3, - "AspectRatio" : 1, - "ShadowOpacity" : 60, - "PenShape" : "Round", - "DropZoneGroupId" : 0, - "RotationAngle" : 0, - "DashType" : "Solid", - "BackgroundColor" : "#FFFFFFFF" - }, - { - "Smoothing" : false, - "ShadowBlur" : 2, - "IsLocked" : 0, - "PointsArray" : [ - "5.000000,-12.000000", - "52.000000,-49.000000" - ], - "StrokeWidth" : 100, - "Opacity" : 100, - "DropShadowEnabled" : true, - "IgnoresUndoAll" : false, - "ShadowDirectionX" : 3, - "ShadowColor" : "#FF000000", - "ObjectPriority" : 0, - "ObjectID" : "266649AA-3558-471A-A211-B5EFACBC4CC4", - "StartPoint" : "5.000000,-12.000000", - "EndPoint" : "52.000000,-49.000000", - "ForegroundColor" : "#00000000", - "IsFlattened" : false, - "Anchored" : false, - "ToolMode" : "Eraser", - "ShadowDirectionY" : 3, - "AspectRatio" : 1, - "ShadowOpacity" : 60, - "PenShape" : "Round", - "DropZoneGroupId" : 0, - "RotationAngle" : 0, - "DashType" : "Solid", - "BackgroundColor" : "#FFFFFFFF" - }, - { - "ShadowBlur" : 0, - "IsLocked" : 0, - "PointsArray" : [ - "5.000000,-12.000000", - "52.000000,-49.000000" - ], - "BorderStyle" : "Middle", - "StrokeWidth" : 3, - "Opacity" : 100, - "DropShadowEnabled" : false, - "IgnoresUndoAll" : false, - "ShadowDirectionX" : 0, - "CornerRadiusRatio" : 0.065562337636947632, - "ShadowColor" : "#FF000000", - "ObjectPriority" : 0, - "ObjectID" : "21D9982F-9B4E-4809-A780-9C260BD88476", - "StartPoint" : "5.000000,-12.000000", - "EndPoint" : "52.000000,-49.000000", - "ToolShape" : "RoundedRectangle", - "ForegroundColor" : "#FFBC4C00", - "IsFlattened" : false, - "Anchored" : false, - "ToolMode" : "Shape", - "ShadowDirectionY" : 0, - "AspectRatio" : 1, - "ShadowOpacity" : 60, - "DropZoneGroupId" : 0, - "RotationAngle" : 0, - "DashType" : "Solid", - "BackgroundColor" : "#00000000" - } - ], - "Editable" : true -} \ No newline at end of file diff --git a/assets/images/contributing/table-of-contents.png b/assets/images/contributing/table-of-contents.png deleted file mode 100644 index 05627eddb082..000000000000 Binary files a/assets/images/contributing/table-of-contents.png and /dev/null differ diff --git a/assets/images/enterprise/3.5/repository/pr-merge-squash.png b/assets/images/enterprise/3.5/repository/pr-merge-squash.png deleted file mode 100644 index 6dedf2f4ce5c..000000000000 Binary files a/assets/images/enterprise/3.5/repository/pr-merge-squash.png and /dev/null differ diff --git a/assets/images/enterprise/orgs-and-teams/invite_outside_collabs_to_org.png b/assets/images/enterprise/orgs-and-teams/invite_outside_collabs_to_org.png deleted file mode 100644 index 5e5cbeb7ad1e..000000000000 Binary files a/assets/images/enterprise/orgs-and-teams/invite_outside_collabs_to_org.png and /dev/null differ diff --git a/assets/images/enterprise/security/enterprise-security-and-analysis-disable-or-enable-all-with-validity-check.png b/assets/images/enterprise/security/enterprise-security-and-analysis-disable-or-enable-all-with-validity-check.png new file mode 100644 index 000000000000..cefb7a798d04 Binary files /dev/null and b/assets/images/enterprise/security/enterprise-security-and-analysis-disable-or-enable-all-with-validity-check.png differ diff --git a/assets/images/enterprise/settings/private-networking-settings-add-network.png b/assets/images/enterprise/settings/private-networking-settings-add-network.png new file mode 100644 index 000000000000..933f740ff4d1 Binary files /dev/null and b/assets/images/enterprise/settings/private-networking-settings-add-network.png differ diff --git a/assets/images/enterprise/stafftools/recreate-organization.png b/assets/images/enterprise/stafftools/recreate-organization.png deleted file mode 100644 index 7c05fc80a4d0..000000000000 Binary files a/assets/images/enterprise/stafftools/recreate-organization.png and /dev/null differ diff --git a/assets/images/enterprise/stafftools/search-field.png b/assets/images/enterprise/stafftools/search-field.png deleted file mode 100644 index 6e0c5daf65cd..000000000000 Binary files a/assets/images/enterprise/stafftools/search-field.png and /dev/null differ diff --git a/assets/images/enterprise/vmware/vsphere-hardware-tab.png b/assets/images/enterprise/vmware/vsphere-hardware-tab.png deleted file mode 100644 index 48263fa07b63..000000000000 Binary files a/assets/images/enterprise/vmware/vsphere-hardware-tab.png and /dev/null differ diff --git a/assets/images/help/2fa/filter-org-collaborator-by-2fa-required.png b/assets/images/help/2fa/filter-org-collaborator-by-2fa-required.png new file mode 100644 index 000000000000..ff0f55cfdece Binary files /dev/null and b/assets/images/help/2fa/filter-org-collaborator-by-2fa-required.png differ diff --git a/assets/images/help/2fa/filter-org-members-by-2fa-required.png b/assets/images/help/2fa/filter-org-members-by-2fa-required.png new file mode 100644 index 000000000000..034a648e1856 Binary files /dev/null and b/assets/images/help/2fa/filter-org-members-by-2fa-required.png differ diff --git a/assets/images/help/2fa/ghes_3.8_and_higher_2fa-wizard-app-click-code.png b/assets/images/help/2fa/ghes_3.8_and_higher_2fa-wizard-app-click-code.png new file mode 100644 index 000000000000..7d680ae6692d Binary files /dev/null and b/assets/images/help/2fa/ghes_3.8_and_higher_2fa-wizard-app-click-code.png differ diff --git a/assets/images/help/actions/creating-selfhosted-runner.png b/assets/images/help/actions/creating-selfhosted-runner.png new file mode 100644 index 000000000000..a9eeb03485ec Binary files /dev/null and b/assets/images/help/actions/creating-selfhosted-runner.png differ diff --git a/assets/images/help/classroom/assignments-click-new-assignment-button.png b/assets/images/help/classroom/assignments-click-new-assignment-button.png deleted file mode 100644 index 5490cc74dd17..000000000000 Binary files a/assets/images/help/classroom/assignments-click-new-assignment-button.png and /dev/null differ diff --git a/assets/images/help/classroom/assignments-create-first-assignment.png b/assets/images/help/classroom/assignments-create-first-assignment.png deleted file mode 100644 index e70729a27e7a..000000000000 Binary files a/assets/images/help/classroom/assignments-create-first-assignment.png and /dev/null differ diff --git a/assets/images/help/codespaces/advanced-options.png b/assets/images/help/codespaces/advanced-options.png index a1fa5e9d8e8c..0f4c3319ba11 100644 Binary files a/assets/images/help/codespaces/advanced-options.png and b/assets/images/help/codespaces/advanced-options.png differ diff --git a/assets/images/help/codespaces/change-machine-type-choice.png b/assets/images/help/codespaces/change-machine-type-choice.png index 29bc8ff47418..3928b8f5229e 100644 Binary files a/assets/images/help/codespaces/change-machine-type-choice.png and b/assets/images/help/codespaces/change-machine-type-choice.png differ diff --git a/assets/images/help/codespaces/change-machine-type-menu-option.png b/assets/images/help/codespaces/change-machine-type-menu-option.png index 8fac37f7cfdd..ddd89bfbe6b6 100644 Binary files a/assets/images/help/codespaces/change-machine-type-menu-option.png and b/assets/images/help/codespaces/change-machine-type-menu-option.png differ diff --git a/assets/images/help/codespaces/choose-custom-machine-type.png b/assets/images/help/codespaces/choose-custom-machine-type.png index e70ce7514cda..1376f0f930cd 100644 Binary files a/assets/images/help/codespaces/choose-custom-machine-type.png and b/assets/images/help/codespaces/choose-custom-machine-type.png differ diff --git a/assets/images/help/codespaces/codespaces-access-and-security-repository-drop-down.png b/assets/images/help/codespaces/codespaces-access-and-security-repository-drop-down.png deleted file mode 100644 index 5ad50007a38b..000000000000 Binary files a/assets/images/help/codespaces/codespaces-access-and-security-repository-drop-down.png and /dev/null differ diff --git a/assets/images/help/codespaces/codespaces-manage-settings-sync.png b/assets/images/help/codespaces/codespaces-manage-settings-sync.png deleted file mode 100644 index f89a93b3079b..000000000000 Binary files a/assets/images/help/codespaces/codespaces-manage-settings-sync.png and /dev/null differ diff --git a/assets/images/help/codespaces/codespaces-org-billing-add-users.png b/assets/images/help/codespaces/codespaces-org-billing-add-users.png deleted file mode 100644 index f77e7a9da100..000000000000 Binary files a/assets/images/help/codespaces/codespaces-org-billing-add-users.png and /dev/null differ diff --git a/assets/images/help/codespaces/codespaces-remote-explorer.png b/assets/images/help/codespaces/codespaces-remote-explorer.png index 1c7cb1fbfef8..f980aab35099 100644 Binary files a/assets/images/help/codespaces/codespaces-remote-explorer.png and b/assets/images/help/codespaces/codespaces-remote-explorer.png differ diff --git a/assets/images/help/codespaces/configuration-file-choice-default.png b/assets/images/help/codespaces/configuration-file-choice-default.png index 443d175af316..c84a9abd7c36 100644 Binary files a/assets/images/help/codespaces/configuration-file-choice-default.png and b/assets/images/help/codespaces/configuration-file-choice-default.png differ diff --git a/assets/images/help/codespaces/configuration-file-choice.png b/assets/images/help/codespaces/configuration-file-choice.png index c9c9b1afae9c..7869b9c52986 100644 Binary files a/assets/images/help/codespaces/configuration-file-choice.png and b/assets/images/help/codespaces/configuration-file-choice.png differ diff --git a/assets/images/help/codespaces/copy-local-address.png b/assets/images/help/codespaces/copy-local-address.png index 1163124f95ce..eef6ac9236cf 100644 Binary files a/assets/images/help/codespaces/copy-local-address.png and b/assets/images/help/codespaces/copy-local-address.png differ diff --git a/assets/images/help/codespaces/delete-codespace.png b/assets/images/help/codespaces/delete-codespace.png index a3d7d72ebbdd..022651380a00 100644 Binary files a/assets/images/help/codespaces/delete-codespace.png and b/assets/images/help/codespaces/delete-codespace.png differ diff --git a/assets/images/help/codespaces/edit-machine-constraint.png b/assets/images/help/codespaces/edit-machine-constraint.png index 9319d78fe1b0..b94d88f5140b 100644 Binary files a/assets/images/help/codespaces/edit-machine-constraint.png and b/assets/images/help/codespaces/edit-machine-constraint.png differ diff --git a/assets/images/help/codespaces/export-changes-to-a-branch.png b/assets/images/help/codespaces/export-changes-to-a-branch.png index 3f13e4a3b359..e7316f6c00a8 100644 Binary files a/assets/images/help/codespaces/export-changes-to-a-branch.png and b/assets/images/help/codespaces/export-changes-to-a-branch.png differ diff --git a/assets/images/help/codespaces/jetbrains-codespaces-tool-window.png b/assets/images/help/codespaces/jetbrains-codespaces-tool-window.png index f2b02557bb36..7d2edc11f48d 100644 Binary files a/assets/images/help/codespaces/jetbrains-codespaces-tool-window.png and b/assets/images/help/codespaces/jetbrains-codespaces-tool-window.png differ diff --git a/assets/images/help/codespaces/keep-codespace.png b/assets/images/help/codespaces/keep-codespace.png index 064a78eb74ba..1d1a7ac42407 100644 Binary files a/assets/images/help/codespaces/keep-codespace.png and b/assets/images/help/codespaces/keep-codespace.png differ diff --git a/assets/images/help/codespaces/machine-types-limited-choice.png b/assets/images/help/codespaces/machine-types-limited-choice.png index d2478428fff8..ba40e8a89afb 100644 Binary files a/assets/images/help/codespaces/machine-types-limited-choice.png and b/assets/images/help/codespaces/machine-types-limited-choice.png differ diff --git a/assets/images/help/codespaces/open-codespace-from-vscode.png b/assets/images/help/codespaces/open-codespace-from-vscode.png index fd4db6209836..3761fb4da39f 100644 Binary files a/assets/images/help/codespaces/open-codespace-from-vscode.png and b/assets/images/help/codespaces/open-codespace-from-vscode.png differ diff --git a/assets/images/help/codespaces/open-codespace-in-another-editor.png b/assets/images/help/codespaces/open-codespace-in-another-editor.png index 92988134927a..ee1b54325899 100644 Binary files a/assets/images/help/codespaces/open-codespace-in-another-editor.png and b/assets/images/help/codespaces/open-codespace-in-another-editor.png differ diff --git a/assets/images/help/codespaces/postman-screenshot-key-token.png b/assets/images/help/codespaces/postman-screenshot-key-token.png index b72c921a74d3..86211997b786 100644 Binary files a/assets/images/help/codespaces/postman-screenshot-key-token.png and b/assets/images/help/codespaces/postman-screenshot-key-token.png differ diff --git a/assets/images/help/codespaces/postman-screenshot-url.png b/assets/images/help/codespaces/postman-screenshot-url.png index 37a397d21d99..1526d916b10e 100644 Binary files a/assets/images/help/codespaces/postman-screenshot-url.png and b/assets/images/help/codespaces/postman-screenshot-url.png differ diff --git a/assets/images/help/codespaces/retention-deletion-message.png b/assets/images/help/codespaces/retention-deletion-message.png index 5596c7efcd4a..6d18eceecc08 100644 Binary files a/assets/images/help/codespaces/retention-deletion-message.png and b/assets/images/help/codespaces/retention-deletion-message.png differ diff --git a/assets/images/help/codespaces/stop-codespace-webui.png b/assets/images/help/codespaces/stop-codespace-webui.png index 15e58d29f519..ad9dce81a0c0 100644 Binary files a/assets/images/help/codespaces/stop-codespace-webui.png and b/assets/images/help/codespaces/stop-codespace-webui.png differ diff --git a/assets/images/help/codespaces/vscode-change-machine-choose-repo.png b/assets/images/help/codespaces/vscode-change-machine-choose-repo.png index 3203e7354414..471fc816a2f1 100644 Binary files a/assets/images/help/codespaces/vscode-change-machine-choose-repo.png and b/assets/images/help/codespaces/vscode-change-machine-choose-repo.png differ diff --git a/assets/images/help/codespaces/vscode-deleting-in-5-days.png b/assets/images/help/codespaces/vscode-deleting-in-5-days.png index 5efd1a1619a4..f36a87381b8f 100644 Binary files a/assets/images/help/codespaces/vscode-deleting-in-5-days.png and b/assets/images/help/codespaces/vscode-deleting-in-5-days.png differ diff --git a/assets/images/help/codespaces/your-codespaces-list.png b/assets/images/help/codespaces/your-codespaces-list.png index 6132a90272a7..af1468cb9bac 100644 Binary files a/assets/images/help/codespaces/your-codespaces-list.png and b/assets/images/help/codespaces/your-codespaces-list.png differ diff --git a/assets/images/help/copilot/allow-all-members.png b/assets/images/help/copilot/allow-all-members.png deleted file mode 100644 index dd0566471be1..000000000000 Binary files a/assets/images/help/copilot/allow-all-members.png and /dev/null differ diff --git a/assets/images/help/copilot/copilot-cancel-cfi-subscription.png b/assets/images/help/copilot/copilot-cancel-cfi-subscription.png new file mode 100644 index 000000000000..f67a0dc955be Binary files /dev/null and b/assets/images/help/copilot/copilot-cancel-cfi-subscription.png differ diff --git a/assets/images/help/copilot/copilot-cancel-trial.png b/assets/images/help/copilot/copilot-cancel-trial.png index b27cd72b5bf3..3d5f0848b39b 100644 Binary files a/assets/images/help/copilot/copilot-cancel-trial.png and b/assets/images/help/copilot/copilot-cancel-trial.png differ diff --git a/assets/images/help/copilot/jetbrains-debug-log.png b/assets/images/help/copilot/jetbrains-debug-log.png new file mode 100644 index 000000000000..480615123e26 Binary files /dev/null and b/assets/images/help/copilot/jetbrains-debug-log.png differ diff --git a/assets/images/help/copilot/manage-org-access-enterprise.png b/assets/images/help/copilot/manage-org-access-enterprise.png deleted file mode 100644 index e7ad39ccea28..000000000000 Binary files a/assets/images/help/copilot/manage-org-access-enterprise.png and /dev/null differ diff --git a/assets/images/help/copilot/request-cfb-access-empty-repo.png b/assets/images/help/copilot/request-cfb-access-empty-repo.png new file mode 100644 index 000000000000..21d33f7e54d5 Binary files /dev/null and b/assets/images/help/copilot/request-cfb-access-empty-repo.png differ diff --git a/assets/images/help/copilot/request-cfb-access-settings.png b/assets/images/help/copilot/request-cfb-access-settings.png new file mode 100644 index 000000000000..acdfc240799e Binary files /dev/null and b/assets/images/help/copilot/request-cfb-access-settings.png differ diff --git a/assets/images/help/copilot/vsc-extensions-icon.png b/assets/images/help/copilot/vsc-extensions-icon.png index 2f590e593e39..ed588f3e661b 100644 Binary files a/assets/images/help/copilot/vsc-extensions-icon.png and b/assets/images/help/copilot/vsc-extensions-icon.png differ diff --git a/assets/images/help/copilot/vsc-insiders-copilot-chat-icon.png b/assets/images/help/copilot/vsc-insiders-copilot-chat-icon.png deleted file mode 100644 index 56e0dcc6a5d5..000000000000 Binary files a/assets/images/help/copilot/vsc-insiders-copilot-chat-icon.png and /dev/null differ diff --git a/assets/images/help/copilot/vsc-insiders-extensions-icon.png b/assets/images/help/copilot/vsc-insiders-extensions-icon.png deleted file mode 100644 index ce131254f04e..000000000000 Binary files a/assets/images/help/copilot/vsc-insiders-extensions-icon.png and /dev/null differ diff --git a/assets/images/help/copilot/vscode-extension-search.png b/assets/images/help/copilot/vscode-extension-search.png new file mode 100644 index 000000000000..5f1606d02b7b Binary files /dev/null and b/assets/images/help/copilot/vscode-extension-search.png differ diff --git a/assets/images/help/desktop/branch-item.png b/assets/images/help/desktop/branch-item.png new file mode 100644 index 000000000000..29dd6627b04e Binary files /dev/null and b/assets/images/help/desktop/branch-item.png differ diff --git a/assets/images/help/desktop/checkout-commit.png b/assets/images/help/desktop/checkout-commit.png new file mode 100644 index 000000000000..2941e455b5d8 Binary files /dev/null and b/assets/images/help/desktop/checkout-commit.png differ diff --git a/assets/images/help/desktop/windows-enable-notifications.png b/assets/images/help/desktop/windows-enable-notifications.png deleted file mode 100644 index ca385c1774d8..000000000000 Binary files a/assets/images/help/desktop/windows-enable-notifications.png and /dev/null differ diff --git a/assets/images/help/enterprises/advanced-security-policies-availability.png b/assets/images/help/enterprises/advanced-security-policies-availability.png deleted file mode 100644 index c0fe6b1c531a..000000000000 Binary files a/assets/images/help/enterprises/advanced-security-policies-availability.png and /dev/null differ diff --git a/assets/images/help/enterprises/advanced-security-policies-enable-or-disable.png b/assets/images/help/enterprises/advanced-security-policies-enable-or-disable.png deleted file mode 100644 index 1a0c8b027c62..000000000000 Binary files a/assets/images/help/enterprises/advanced-security-policies-enable-or-disable.png and /dev/null differ diff --git a/assets/images/help/enterprises/advanced-security-policies-secret-scanning.png b/assets/images/help/enterprises/advanced-security-policies-secret-scanning.png deleted file mode 100644 index cf6297f36fec..000000000000 Binary files a/assets/images/help/enterprises/advanced-security-policies-secret-scanning.png and /dev/null differ diff --git a/assets/images/help/enterprises/change-dependabot-alerts-settings.png b/assets/images/help/enterprises/change-dependabot-alerts-settings.png deleted file mode 100644 index acbf37f67a70..000000000000 Binary files a/assets/images/help/enterprises/change-dependabot-alerts-settings.png and /dev/null differ diff --git a/assets/images/help/enterprises/enterprise-licensing-tab.png b/assets/images/help/enterprises/enterprise-licensing-tab.png deleted file mode 100644 index 5c838de30412..000000000000 Binary files a/assets/images/help/enterprises/enterprise-licensing-tab.png and /dev/null differ diff --git a/assets/images/help/issues/burnup-example.png b/assets/images/help/issues/burnup-example.png index 6d322ec2af4d..173a7c71910d 100644 Binary files a/assets/images/help/issues/burnup-example.png and b/assets/images/help/issues/burnup-example.png differ diff --git a/assets/images/help/marketplace/marketplace-link-global-navigation.png b/assets/images/help/marketplace/marketplace-link-global-navigation.png deleted file mode 100644 index 9be2858aae5a..000000000000 Binary files a/assets/images/help/marketplace/marketplace-link-global-navigation.png and /dev/null differ diff --git a/assets/images/help/organizations/base-permissions-confirm.png b/assets/images/help/organizations/base-permissions-confirm.png deleted file mode 100644 index ae89896f2e03..000000000000 Binary files a/assets/images/help/organizations/base-permissions-confirm.png and /dev/null differ diff --git a/assets/images/help/organizations/base-permissions-drop-down.png b/assets/images/help/organizations/base-permissions-drop-down.png deleted file mode 100644 index cbda700e4b9d..000000000000 Binary files a/assets/images/help/organizations/base-permissions-drop-down.png and /dev/null differ diff --git a/assets/images/help/organizations/disallow-members-to-change-repo-visibility.png b/assets/images/help/organizations/disallow-members-to-change-repo-visibility.png deleted file mode 100644 index 42435aef6cba..000000000000 Binary files a/assets/images/help/organizations/disallow-members-to-change-repo-visibility.png and /dev/null differ diff --git a/assets/images/help/organizations/invite_outside_collaborator_to_organization.png b/assets/images/help/organizations/invite_outside_collaborator_to_organization.png deleted file mode 100644 index ed8f34fbe2c7..000000000000 Binary files a/assets/images/help/organizations/invite_outside_collaborator_to_organization.png and /dev/null differ diff --git a/assets/images/help/organizations/repo-creation-perms-radio-buttons-fpt.png b/assets/images/help/organizations/repo-creation-perms-radio-buttons-fpt.png deleted file mode 100644 index 76eb351b5e77..000000000000 Binary files a/assets/images/help/organizations/repo-creation-perms-radio-buttons-fpt.png and /dev/null differ diff --git a/assets/images/help/organizations/repo-creation-perms-radio-buttons.png b/assets/images/help/organizations/repo-creation-perms-radio-buttons.png deleted file mode 100644 index c5555bb77f2e..000000000000 Binary files a/assets/images/help/organizations/repo-creation-perms-radio-buttons.png and /dev/null differ diff --git a/assets/images/help/pages/enforce-https-checkbox.png b/assets/images/help/pages/enforce-https-checkbox.png deleted file mode 100644 index b7cad04f7c31..000000000000 Binary files a/assets/images/help/pages/enforce-https-checkbox.png and /dev/null differ diff --git a/assets/images/help/projects-v2/repo-tabs-projects.png b/assets/images/help/projects-v2/repo-tabs-projects.png deleted file mode 100644 index a3b103ee4c88..000000000000 Binary files a/assets/images/help/projects-v2/repo-tabs-projects.png and /dev/null differ diff --git a/assets/images/help/projects/add-column.png b/assets/images/help/projects/add-column.png deleted file mode 100644 index a655e4e314b2..000000000000 Binary files a/assets/images/help/projects/add-column.png and /dev/null differ diff --git a/assets/images/help/repository/allow-merge-commits.png b/assets/images/help/repository/allow-merge-commits.png deleted file mode 100644 index 5498365ee4af..000000000000 Binary files a/assets/images/help/repository/allow-merge-commits.png and /dev/null differ diff --git a/assets/images/help/repository/allow-squash-merging.png b/assets/images/help/repository/allow-squash-merging.png deleted file mode 100644 index 17959258e418..000000000000 Binary files a/assets/images/help/repository/allow-squash-merging.png and /dev/null differ diff --git a/assets/images/help/repository/code-scanning-alerts-found-link.png b/assets/images/help/repository/code-scanning-alerts-found-link.png deleted file mode 100644 index fb40865584cb..000000000000 Binary files a/assets/images/help/repository/code-scanning-alerts-found-link.png and /dev/null differ diff --git a/assets/images/help/repository/code-scanning-click-alert.png b/assets/images/help/repository/code-scanning-click-alert.png deleted file mode 100644 index 7e0efa77a794..000000000000 Binary files a/assets/images/help/repository/code-scanning-click-alert.png and /dev/null differ diff --git a/assets/images/help/repository/default-commit-message-dropdown.png b/assets/images/help/repository/default-commit-message-dropdown.png deleted file mode 100644 index 95c5c0d747dc..000000000000 Binary files a/assets/images/help/repository/default-commit-message-dropdown.png and /dev/null differ diff --git a/assets/images/help/repository/file-tree-view-branch-dropdown-tags.png b/assets/images/help/repository/file-tree-view-branch-dropdown-tags.png deleted file mode 100644 index 9d353c31bd0e..000000000000 Binary files a/assets/images/help/repository/file-tree-view-branch-dropdown-tags.png and /dev/null differ diff --git a/assets/images/help/repository/file-tree-view-branch-dropdown.png b/assets/images/help/repository/file-tree-view-branch-dropdown.png deleted file mode 100644 index 4466601b38ec..000000000000 Binary files a/assets/images/help/repository/file-tree-view-branch-dropdown.png and /dev/null differ diff --git a/assets/images/help/repository/ghas-enterprise-policy-block.png b/assets/images/help/repository/ghas-enterprise-policy-block.png new file mode 100644 index 000000000000..8d46ca060621 Binary files /dev/null and b/assets/images/help/repository/ghas-enterprise-policy-block.png differ diff --git a/assets/images/help/repository/git_blame.png b/assets/images/help/repository/git_blame.png deleted file mode 100644 index 9b4639744732..000000000000 Binary files a/assets/images/help/repository/git_blame.png and /dev/null differ diff --git a/assets/images/help/repository/repository-options-branch.png b/assets/images/help/repository/repository-options-branch.png deleted file mode 100644 index 6083547413e9..000000000000 Binary files a/assets/images/help/repository/repository-options-branch.png and /dev/null differ diff --git a/assets/images/help/repository/unarchive-repository-warnings.png b/assets/images/help/repository/unarchive-repository-warnings.png deleted file mode 100644 index ef93661aecf5..000000000000 Binary files a/assets/images/help/repository/unarchive-repository-warnings.png and /dev/null differ diff --git a/assets/images/help/repository/unarchive-repository.png b/assets/images/help/repository/unarchive-repository.png deleted file mode 100644 index a33a0ed086b9..000000000000 Binary files a/assets/images/help/repository/unarchive-repository.png and /dev/null differ diff --git a/assets/images/help/repository/view-run-billable-time.png b/assets/images/help/repository/view-run-billable-time.png deleted file mode 100644 index 4ffde267e9b0..000000000000 Binary files a/assets/images/help/repository/view-run-billable-time.png and /dev/null differ diff --git a/assets/images/help/security-overview/security-overview-secret-scanning-metrics.png b/assets/images/help/security-overview/security-overview-secret-scanning-metrics.png new file mode 100644 index 000000000000..5c97ba644f8a Binary files /dev/null and b/assets/images/help/security-overview/security-overview-secret-scanning-metrics.png differ diff --git a/assets/images/help/security/push-protection-for-yourself.png b/assets/images/help/security/push-protection-for-yourself.png new file mode 100644 index 000000000000..25809382ccb4 Binary files /dev/null and b/assets/images/help/security/push-protection-for-yourself.png differ diff --git a/assets/images/help/settings/context-switcher-menu.png b/assets/images/help/settings/context-switcher-menu.png deleted file mode 100644 index 9ede45694ef3..000000000000 Binary files a/assets/images/help/settings/context-switcher-menu.png and /dev/null differ diff --git a/assets/images/help/settings/cookie-settings-save.png b/assets/images/help/settings/cookie-settings-save.png deleted file mode 100644 index bf05f12b0890..000000000000 Binary files a/assets/images/help/settings/cookie-settings-save.png and /dev/null differ diff --git a/assets/images/help/settings/feature-preview-button.png b/assets/images/help/settings/feature-preview-button.png deleted file mode 100644 index 48107e16812a..000000000000 Binary files a/assets/images/help/settings/feature-preview-button.png and /dev/null differ diff --git a/assets/images/help/settings/oauth-access-request-approval.png b/assets/images/help/settings/oauth-access-request-approval.png deleted file mode 100644 index eb5701102be1..000000000000 Binary files a/assets/images/help/settings/oauth-access-request-approval.png and /dev/null differ diff --git a/assets/images/help/settings/repo-default-name-button.png b/assets/images/help/settings/repo-default-name-button.png deleted file mode 100644 index eacfc57abce9..000000000000 Binary files a/assets/images/help/settings/repo-default-name-button.png and /dev/null differ diff --git a/assets/images/help/settings/repo-default-name-text.png b/assets/images/help/settings/repo-default-name-text.png deleted file mode 100644 index b59685abc3ff..000000000000 Binary files a/assets/images/help/settings/repo-default-name-text.png and /dev/null differ diff --git a/assets/images/help/settings/repo-default-name-update.png b/assets/images/help/settings/repo-default-name-update.png deleted file mode 100644 index 816daaf9b186..000000000000 Binary files a/assets/images/help/settings/repo-default-name-update.png and /dev/null differ diff --git a/assets/images/help/settings/scheduled-reminders-real-time-alerts-personal.png b/assets/images/help/settings/scheduled-reminders-real-time-alerts-personal.png deleted file mode 100644 index d8f6f3e95fae..000000000000 Binary files a/assets/images/help/settings/scheduled-reminders-real-time-alerts-personal.png and /dev/null differ diff --git a/assets/images/help/settings/settings-sidebar-team-settings.png b/assets/images/help/settings/settings-sidebar-team-settings.png deleted file mode 100644 index df0a5634c0bc..000000000000 Binary files a/assets/images/help/settings/settings-sidebar-team-settings.png and /dev/null differ diff --git a/assets/images/help/settings/settings-third-party-request-access.png b/assets/images/help/settings/settings-third-party-request-access.png deleted file mode 100644 index 3132d0feef6f..000000000000 Binary files a/assets/images/help/settings/settings-third-party-request-access.png and /dev/null differ diff --git a/assets/images/help/settings/settings-third-party-view-app.png b/assets/images/help/settings/settings-third-party-view-app.png deleted file mode 100644 index 5812a2c6d180..000000000000 Binary files a/assets/images/help/settings/settings-third-party-view-app.png and /dev/null differ diff --git a/assets/images/help/stars/edit-list-options.png b/assets/images/help/stars/edit-list-options.png deleted file mode 100644 index 51a7716b9171..000000000000 Binary files a/assets/images/help/stars/edit-list-options.png and /dev/null differ diff --git a/assets/images/help/webhooks/webhooks-recent-deliveries.png b/assets/images/help/webhooks/webhooks-recent-deliveries.png index 05ca8bd7b12f..4d52c6387b8d 100644 Binary files a/assets/images/help/webhooks/webhooks-recent-deliveries.png and b/assets/images/help/webhooks/webhooks-recent-deliveries.png differ diff --git a/assets/images/help/writing/alerts-rendered.png b/assets/images/help/writing/alerts-rendered.png new file mode 100644 index 000000000000..4ae94d7e6c80 Binary files /dev/null and b/assets/images/help/writing/alerts-rendered.png differ diff --git a/assets/images/marketplace/marketplace_edit_listing_text.png b/assets/images/marketplace/marketplace_edit_listing_text.png deleted file mode 100644 index 0c63d84ad94f..000000000000 Binary files a/assets/images/marketplace/marketplace_edit_listing_text.png and /dev/null differ diff --git a/components/ClientSideHighlightJS.tsx b/components/ClientSideHighlightJS.tsx index 67a1b15d03b1..95aa93f9ee46 100644 --- a/components/ClientSideHighlightJS.tsx +++ b/components/ClientSideHighlightJS.tsx @@ -26,7 +26,7 @@ const SUPPORTED_LANGUAGES = ['json', 'javascript', 'curl'] // // const CODE_ELEMENTS_PARENT_SELECTOR = '[data-highlight]' -const CODE_SELECTOR = 'div code' || 'pre code' +const CODE_SELECTOR = 'code' export default function ClientSideHighlightJS() { const { asPath } = useRouter() diff --git a/components/DefaultLayout.tsx b/components/DefaultLayout.tsx index afd46ed9cb14..ac3d34f9c4d0 100644 --- a/components/DefaultLayout.tsx +++ b/components/DefaultLayout.tsx @@ -108,12 +108,15 @@ export const DefaultLayout = (props: Props) => { )} - + Skip to main content
- + {isHomepageVersion ? null : } {/* Need to set an explicit height for sticky elements since we also set overflow to auto */}
@@ -123,7 +126,7 @@ export const DefaultLayout = (props: Props) => { {props.children} -